Lines Matching refs:ipa
111 int ipa_setup(struct ipa *ipa) in ipa_setup() argument
115 struct device *dev = ipa->dev; in ipa_setup()
118 ret = gsi_setup(&ipa->gsi); in ipa_setup()
122 ipa_endpoint_setup(ipa); in ipa_setup()
127 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_setup()
132 ret = ipa_mem_setup(ipa); /* No matching teardown required */ in ipa_setup()
136 ret = ipa_table_setup(ipa); /* No matching teardown required */ in ipa_setup()
143 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_setup()
148 ipa_endpoint_default_route_set(ipa, exception_endpoint->endpoint_id); in ipa_setup()
151 ret = ipa_qmi_setup(ipa); in ipa_setup()
155 ipa->setup_complete = true; in ipa_setup()
162 ipa_endpoint_default_route_clear(ipa); in ipa_setup()
167 ipa_endpoint_teardown(ipa); in ipa_setup()
168 gsi_teardown(&ipa->gsi); in ipa_setup()
177 static void ipa_teardown(struct ipa *ipa) in ipa_teardown() argument
183 ipa->setup_complete = false; in ipa_teardown()
185 ipa_qmi_teardown(ipa); in ipa_teardown()
186 ipa_endpoint_default_route_clear(ipa); in ipa_teardown()
187 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_teardown()
189 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_teardown()
191 ipa_endpoint_teardown(ipa); in ipa_teardown()
192 gsi_teardown(&ipa->gsi); in ipa_teardown()
196 ipa_hardware_config_bcr(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config_bcr() argument
202 if (ipa->version >= IPA_VERSION_4_5) in ipa_hardware_config_bcr()
205 reg = ipa_reg(ipa, IPA_BCR); in ipa_hardware_config_bcr()
207 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_bcr()
210 static void ipa_hardware_config_tx(struct ipa *ipa) in ipa_hardware_config_tx() argument
212 enum ipa_version version = ipa->version; in ipa_hardware_config_tx()
221 reg = ipa_reg(ipa, IPA_TX_CFG); in ipa_hardware_config_tx()
224 val = ioread32(ipa->reg_virt + offset); in ipa_hardware_config_tx()
228 iowrite32(val, ipa->reg_virt + offset); in ipa_hardware_config_tx()
231 static void ipa_hardware_config_clkon(struct ipa *ipa) in ipa_hardware_config_clkon() argument
233 enum ipa_version version = ipa->version; in ipa_hardware_config_clkon()
244 reg = ipa_reg(ipa, CLKON_CFG); in ipa_hardware_config_clkon()
254 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_clkon()
258 static void ipa_hardware_config_comp(struct ipa *ipa) in ipa_hardware_config_comp() argument
265 if (ipa->version < IPA_VERSION_4_0) in ipa_hardware_config_comp()
268 reg = ipa_reg(ipa, COMP_CFG); in ipa_hardware_config_comp()
271 val = ioread32(ipa->reg_virt + offset); in ipa_hardware_config_comp()
273 if (ipa->version == IPA_VERSION_4_0) { in ipa_hardware_config_comp()
277 } else if (ipa->version < IPA_VERSION_4_5) { in ipa_hardware_config_comp()
286 iowrite32(val, ipa->reg_virt + offset); in ipa_hardware_config_comp()
291 ipa_hardware_config_qsb(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config_qsb() argument
304 reg = ipa_reg(ipa, QSB_MAX_WRITES); in ipa_hardware_config_qsb()
310 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_qsb()
313 reg = ipa_reg(ipa, QSB_MAX_READS); in ipa_hardware_config_qsb()
316 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
321 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
326 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_qsb()
360 static void ipa_qtime_config(struct ipa *ipa) in ipa_qtime_config() argument
367 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG); in ipa_qtime_config()
368 iowrite32(0, ipa->reg_virt + reg_offset(reg)); in ipa_qtime_config()
370 reg = ipa_reg(ipa, QTIME_TIMESTAMP_CFG); in ipa_qtime_config()
371 if (ipa->version < IPA_VERSION_5_5) { in ipa_qtime_config()
380 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_qtime_config()
383 reg = ipa_reg(ipa, TIMERS_PULSE_GRAN_CFG); in ipa_qtime_config()
386 if (ipa->version >= IPA_VERSION_5_0) { in ipa_qtime_config()
393 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_qtime_config()
396 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG); in ipa_qtime_config()
401 iowrite32(val, ipa->reg_virt + offset); in ipa_qtime_config()
406 iowrite32(val, ipa->reg_virt + offset); in ipa_qtime_config()
410 static void ipa_hardware_config_counter(struct ipa *ipa) in ipa_hardware_config_counter() argument
416 reg = ipa_reg(ipa, COUNTER_CFG); in ipa_hardware_config_counter()
419 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_counter()
422 static void ipa_hardware_config_timing(struct ipa *ipa) in ipa_hardware_config_timing() argument
424 if (ipa->version < IPA_VERSION_4_5) in ipa_hardware_config_timing()
425 ipa_hardware_config_counter(ipa); in ipa_hardware_config_timing()
427 ipa_qtime_config(ipa); in ipa_hardware_config_timing()
430 static void ipa_hardware_config_hashing(struct ipa *ipa) in ipa_hardware_config_hashing() argument
439 if (ipa->version != IPA_VERSION_4_2) in ipa_hardware_config_hashing()
443 reg = ipa_reg(ipa, FILT_ROUT_HASH_EN); in ipa_hardware_config_hashing()
448 iowrite32(0, ipa->reg_virt + reg_offset(reg)); in ipa_hardware_config_hashing()
451 static void ipa_idle_indication_cfg(struct ipa *ipa, in ipa_idle_indication_cfg() argument
458 if (ipa->version < IPA_VERSION_3_5_1) in ipa_idle_indication_cfg()
461 reg = ipa_reg(ipa, IDLE_INDICATION_CFG); in ipa_idle_indication_cfg()
467 iowrite32(val, ipa->reg_virt + reg_offset(reg)); in ipa_idle_indication_cfg()
478 static void ipa_hardware_dcd_config(struct ipa *ipa) in ipa_hardware_dcd_config() argument
481 ipa_idle_indication_cfg(ipa, 256, false); in ipa_hardware_dcd_config()
484 static void ipa_hardware_dcd_deconfig(struct ipa *ipa) in ipa_hardware_dcd_deconfig() argument
487 ipa_idle_indication_cfg(ipa, 0, true); in ipa_hardware_dcd_deconfig()
495 static void ipa_hardware_config(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config() argument
497 ipa_hardware_config_bcr(ipa, data); in ipa_hardware_config()
498 ipa_hardware_config_tx(ipa); in ipa_hardware_config()
499 ipa_hardware_config_clkon(ipa); in ipa_hardware_config()
500 ipa_hardware_config_comp(ipa); in ipa_hardware_config()
501 ipa_hardware_config_qsb(ipa, data); in ipa_hardware_config()
502 ipa_hardware_config_timing(ipa); in ipa_hardware_config()
503 ipa_hardware_config_hashing(ipa); in ipa_hardware_config()
504 ipa_hardware_dcd_config(ipa); in ipa_hardware_config()
513 static void ipa_hardware_deconfig(struct ipa *ipa) in ipa_hardware_deconfig() argument
516 ipa_hardware_dcd_deconfig(ipa); in ipa_hardware_deconfig()
526 static int ipa_config(struct ipa *ipa, const struct ipa_data *data) in ipa_config() argument
530 ipa_hardware_config(ipa, data); in ipa_config()
532 ret = ipa_mem_config(ipa); in ipa_config()
536 ret = ipa_interrupt_config(ipa); in ipa_config()
540 ipa_uc_config(ipa); in ipa_config()
542 ret = ipa_endpoint_config(ipa); in ipa_config()
546 ipa_table_config(ipa); /* No deconfig required */ in ipa_config()
549 ret = ipa_resource_config(ipa, data->resource_data); in ipa_config()
553 ret = ipa_modem_config(ipa); in ipa_config()
560 ipa_endpoint_deconfig(ipa); in ipa_config()
562 ipa_uc_deconfig(ipa); in ipa_config()
563 ipa_interrupt_deconfig(ipa); in ipa_config()
565 ipa_mem_deconfig(ipa); in ipa_config()
567 ipa_hardware_deconfig(ipa); in ipa_config()
576 static void ipa_deconfig(struct ipa *ipa) in ipa_deconfig() argument
578 ipa_modem_deconfig(ipa); in ipa_deconfig()
579 ipa_endpoint_deconfig(ipa); in ipa_deconfig()
580 ipa_uc_deconfig(ipa); in ipa_deconfig()
581 ipa_interrupt_deconfig(ipa); in ipa_deconfig()
582 ipa_mem_deconfig(ipa); in ipa_deconfig()
583 ipa_hardware_deconfig(ipa); in ipa_deconfig()
793 struct ipa *ipa; in ipa_probe() local
833 ipa = kzalloc_obj(*ipa); in ipa_probe()
834 if (!ipa) { in ipa_probe()
839 ipa->dev = dev; in ipa_probe()
840 dev_set_drvdata(dev, ipa); in ipa_probe()
841 ipa->interrupt = interrupt; in ipa_probe()
842 ipa->power = power; in ipa_probe()
843 ipa->version = data->version; in ipa_probe()
844 ipa->modem_route_count = data->modem_route_count; in ipa_probe()
845 init_completion(&ipa->completion); in ipa_probe()
847 ret = ipa_reg_init(ipa, pdev); in ipa_probe()
851 ret = ipa_mem_init(ipa, pdev, data->mem_data); in ipa_probe()
855 ret = ipa_cmd_init(ipa); in ipa_probe()
859 ret = gsi_init(&ipa->gsi, pdev, ipa->version, data->endpoint_count, in ipa_probe()
865 ret = ipa_endpoint_init(ipa, data->endpoint_count, data->endpoint_data); in ipa_probe()
869 ret = ipa_table_init(ipa); in ipa_probe()
873 ret = ipa_smp2p_init(ipa, pdev, loader == IPA_LOADER_MODEM); in ipa_probe()
882 ret = ipa_config(ipa, data); in ipa_probe()
902 ret = ipa_setup(ipa); in ipa_probe()
911 ipa_deconfig(ipa); in ipa_probe()
914 ipa_smp2p_exit(ipa); in ipa_probe()
916 ipa_table_exit(ipa); in ipa_probe()
918 ipa_endpoint_exit(ipa); in ipa_probe()
920 gsi_exit(&ipa->gsi); in ipa_probe()
922 ipa_mem_exit(ipa); in ipa_probe()
924 ipa_reg_exit(ipa); in ipa_probe()
926 kfree(ipa); in ipa_probe()
940 struct ipa *ipa; in ipa_remove() local
943 ipa = dev_get_drvdata(&pdev->dev); in ipa_remove()
944 dev = ipa->dev; in ipa_remove()
947 power = ipa->power; in ipa_remove()
948 interrupt = ipa->interrupt; in ipa_remove()
953 ipa_smp2p_irq_disable_setup(ipa); in ipa_remove()
959 if (ipa->setup_complete) { in ipa_remove()
960 ret = ipa_modem_stop(ipa); in ipa_remove()
964 ret = ipa_modem_stop(ipa); in ipa_remove()
977 ipa_teardown(ipa); in ipa_remove()
980 ipa_deconfig(ipa); in ipa_remove()
983 ipa_smp2p_exit(ipa); in ipa_remove()
984 ipa_table_exit(ipa); in ipa_remove()
985 ipa_endpoint_exit(ipa); in ipa_remove()
986 gsi_exit(&ipa->gsi); in ipa_remove()
987 ipa_mem_exit(ipa); in ipa_remove()
988 ipa_reg_exit(ipa); in ipa_remove()
989 kfree(ipa); in ipa_remove()