Lines Matching refs:ipa
95 int ipa_setup(struct ipa *ipa) in ipa_setup() argument
99 struct device *dev = &ipa->pdev->dev; in ipa_setup()
102 ret = gsi_setup(&ipa->gsi); in ipa_setup()
106 ret = ipa_power_setup(ipa); in ipa_setup()
110 ipa_endpoint_setup(ipa); in ipa_setup()
115 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_setup()
120 ret = ipa_mem_setup(ipa); /* No matching teardown required */ in ipa_setup()
124 ret = ipa_table_setup(ipa); /* No matching teardown required */ in ipa_setup()
131 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_setup()
136 ipa_endpoint_default_route_set(ipa, exception_endpoint->endpoint_id); in ipa_setup()
139 ret = ipa_qmi_setup(ipa); in ipa_setup()
143 ipa->setup_complete = true; in ipa_setup()
150 ipa_endpoint_default_route_clear(ipa); in ipa_setup()
155 ipa_endpoint_teardown(ipa); in ipa_setup()
156 ipa_power_teardown(ipa); in ipa_setup()
158 gsi_teardown(&ipa->gsi); in ipa_setup()
167 static void ipa_teardown(struct ipa *ipa) in ipa_teardown() argument
173 ipa->setup_complete = false; in ipa_teardown()
175 ipa_qmi_teardown(ipa); in ipa_teardown()
176 ipa_endpoint_default_route_clear(ipa); in ipa_teardown()
177 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_teardown()
179 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_teardown()
181 ipa_endpoint_teardown(ipa); in ipa_teardown()
182 ipa_power_teardown(ipa); in ipa_teardown()
183 gsi_teardown(&ipa->gsi); in ipa_teardown()
187 ipa_hardware_config_bcr(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config_bcr() argument
193 if (ipa->version >= IPA_VERSION_4_5) in ipa_hardware_config_bcr()
196 reg = ipa_reg(ipa, IPA_BCR); in ipa_hardware_config_bcr()
198 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_hardware_config_bcr()
201 static void ipa_hardware_config_tx(struct ipa *ipa) in ipa_hardware_config_tx() argument
203 enum ipa_version version = ipa->version; in ipa_hardware_config_tx()
212 reg = ipa_reg(ipa, IPA_TX_CFG); in ipa_hardware_config_tx()
215 val = ioread32(ipa->reg_virt + offset); in ipa_hardware_config_tx()
219 iowrite32(val, ipa->reg_virt + offset); in ipa_hardware_config_tx()
222 static void ipa_hardware_config_clkon(struct ipa *ipa) in ipa_hardware_config_clkon() argument
224 enum ipa_version version = ipa->version; in ipa_hardware_config_clkon()
235 reg = ipa_reg(ipa, CLKON_CFG); in ipa_hardware_config_clkon()
245 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_hardware_config_clkon()
249 static void ipa_hardware_config_comp(struct ipa *ipa) in ipa_hardware_config_comp() argument
256 if (ipa->version < IPA_VERSION_4_0) in ipa_hardware_config_comp()
259 reg = ipa_reg(ipa, COMP_CFG); in ipa_hardware_config_comp()
261 val = ioread32(ipa->reg_virt + offset); in ipa_hardware_config_comp()
263 if (ipa->version == IPA_VERSION_4_0) { in ipa_hardware_config_comp()
267 } else if (ipa->version < IPA_VERSION_4_5) { in ipa_hardware_config_comp()
276 iowrite32(val, ipa->reg_virt + offset); in ipa_hardware_config_comp()
281 ipa_hardware_config_qsb(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config_qsb() argument
294 reg = ipa_reg(ipa, QSB_MAX_WRITES); in ipa_hardware_config_qsb()
301 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_hardware_config_qsb()
304 reg = ipa_reg(ipa, QSB_MAX_READS); in ipa_hardware_config_qsb()
307 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
313 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
318 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_hardware_config_qsb()
352 static void ipa_qtime_config(struct ipa *ipa) in ipa_qtime_config() argument
359 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG); in ipa_qtime_config()
360 iowrite32(0, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_qtime_config()
362 reg = ipa_reg(ipa, QTIME_TIMESTAMP_CFG); in ipa_qtime_config()
370 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_qtime_config()
373 reg = ipa_reg(ipa, TIMERS_PULSE_GRAN_CFG); in ipa_qtime_config()
378 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_qtime_config()
381 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG); in ipa_qtime_config()
385 iowrite32(val, ipa->reg_virt + offset); in ipa_qtime_config()
390 iowrite32(val, ipa->reg_virt + offset); in ipa_qtime_config()
394 static void ipa_hardware_config_counter(struct ipa *ipa) in ipa_hardware_config_counter() argument
400 reg = ipa_reg(ipa, COUNTER_CFG); in ipa_hardware_config_counter()
403 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_hardware_config_counter()
406 static void ipa_hardware_config_timing(struct ipa *ipa) in ipa_hardware_config_timing() argument
408 if (ipa->version < IPA_VERSION_4_5) in ipa_hardware_config_timing()
409 ipa_hardware_config_counter(ipa); in ipa_hardware_config_timing()
411 ipa_qtime_config(ipa); in ipa_hardware_config_timing()
414 static void ipa_hardware_config_hashing(struct ipa *ipa) in ipa_hardware_config_hashing() argument
418 if (ipa->version != IPA_VERSION_4_2) in ipa_hardware_config_hashing()
422 reg = ipa_reg(ipa, FILT_ROUT_HASH_EN); in ipa_hardware_config_hashing()
427 iowrite32(0, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_hardware_config_hashing()
430 static void ipa_idle_indication_cfg(struct ipa *ipa, in ipa_idle_indication_cfg() argument
437 if (ipa->version < IPA_VERSION_3_5_1) in ipa_idle_indication_cfg()
440 reg = ipa_reg(ipa, IDLE_INDICATION_CFG); in ipa_idle_indication_cfg()
446 iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg)); in ipa_idle_indication_cfg()
457 static void ipa_hardware_dcd_config(struct ipa *ipa) in ipa_hardware_dcd_config() argument
460 ipa_idle_indication_cfg(ipa, 256, false); in ipa_hardware_dcd_config()
463 static void ipa_hardware_dcd_deconfig(struct ipa *ipa) in ipa_hardware_dcd_deconfig() argument
466 ipa_idle_indication_cfg(ipa, 0, true); in ipa_hardware_dcd_deconfig()
474 static void ipa_hardware_config(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config() argument
476 ipa_hardware_config_bcr(ipa, data); in ipa_hardware_config()
477 ipa_hardware_config_tx(ipa); in ipa_hardware_config()
478 ipa_hardware_config_clkon(ipa); in ipa_hardware_config()
479 ipa_hardware_config_comp(ipa); in ipa_hardware_config()
480 ipa_hardware_config_qsb(ipa, data); in ipa_hardware_config()
481 ipa_hardware_config_timing(ipa); in ipa_hardware_config()
482 ipa_hardware_config_hashing(ipa); in ipa_hardware_config()
483 ipa_hardware_dcd_config(ipa); in ipa_hardware_config()
492 static void ipa_hardware_deconfig(struct ipa *ipa) in ipa_hardware_deconfig() argument
495 ipa_hardware_dcd_deconfig(ipa); in ipa_hardware_deconfig()
505 static int ipa_config(struct ipa *ipa, const struct ipa_data *data) in ipa_config() argument
509 ipa_hardware_config(ipa, data); in ipa_config()
511 ret = ipa_mem_config(ipa); in ipa_config()
515 ipa->interrupt = ipa_interrupt_config(ipa); in ipa_config()
516 if (IS_ERR(ipa->interrupt)) { in ipa_config()
517 ret = PTR_ERR(ipa->interrupt); in ipa_config()
518 ipa->interrupt = NULL; in ipa_config()
522 ipa_uc_config(ipa); in ipa_config()
524 ret = ipa_endpoint_config(ipa); in ipa_config()
528 ipa_table_config(ipa); /* No deconfig required */ in ipa_config()
531 ret = ipa_resource_config(ipa, data->resource_data); in ipa_config()
535 ret = ipa_modem_config(ipa); in ipa_config()
542 ipa_endpoint_deconfig(ipa); in ipa_config()
544 ipa_uc_deconfig(ipa); in ipa_config()
545 ipa_interrupt_deconfig(ipa->interrupt); in ipa_config()
546 ipa->interrupt = NULL; in ipa_config()
548 ipa_mem_deconfig(ipa); in ipa_config()
550 ipa_hardware_deconfig(ipa); in ipa_config()
559 static void ipa_deconfig(struct ipa *ipa) in ipa_deconfig() argument
561 ipa_modem_deconfig(ipa); in ipa_deconfig()
562 ipa_endpoint_deconfig(ipa); in ipa_deconfig()
563 ipa_uc_deconfig(ipa); in ipa_deconfig()
564 ipa_interrupt_deconfig(ipa->interrupt); in ipa_deconfig()
565 ipa->interrupt = NULL; in ipa_deconfig()
566 ipa_mem_deconfig(ipa); in ipa_deconfig()
567 ipa_hardware_deconfig(ipa); in ipa_deconfig()
728 struct ipa *ipa; in ipa_probe() local
759 ipa = kzalloc(sizeof(*ipa), GFP_KERNEL); in ipa_probe()
760 if (!ipa) { in ipa_probe()
765 ipa->pdev = pdev; in ipa_probe()
766 dev_set_drvdata(dev, ipa); in ipa_probe()
767 ipa->power = power; in ipa_probe()
768 ipa->version = data->version; in ipa_probe()
769 init_completion(&ipa->completion); in ipa_probe()
771 ret = ipa_reg_init(ipa); in ipa_probe()
775 ret = ipa_mem_init(ipa, data->mem_data); in ipa_probe()
779 ret = gsi_init(&ipa->gsi, pdev, ipa->version, data->endpoint_count, in ipa_probe()
785 ipa->filter_map = ipa_endpoint_init(ipa, data->endpoint_count, in ipa_probe()
787 if (!ipa->filter_map) { in ipa_probe()
792 ret = ipa_table_init(ipa); in ipa_probe()
796 ret = ipa_smp2p_init(ipa, modem_init); in ipa_probe()
805 ret = ipa_config(ipa, data); in ipa_probe()
825 ret = ipa_setup(ipa); in ipa_probe()
835 ipa_deconfig(ipa); in ipa_probe()
838 ipa_smp2p_exit(ipa); in ipa_probe()
840 ipa_table_exit(ipa); in ipa_probe()
842 ipa_endpoint_exit(ipa); in ipa_probe()
844 gsi_exit(&ipa->gsi); in ipa_probe()
846 ipa_mem_exit(ipa); in ipa_probe()
848 ipa_reg_exit(ipa); in ipa_probe()
850 kfree(ipa); in ipa_probe()
859 struct ipa *ipa = dev_get_drvdata(&pdev->dev); in ipa_remove() local
860 struct ipa_power *power = ipa->power; in ipa_remove()
867 ipa_smp2p_irq_disable_setup(ipa); in ipa_remove()
873 if (ipa->setup_complete) { in ipa_remove()
874 ret = ipa_modem_stop(ipa); in ipa_remove()
878 ret = ipa_modem_stop(ipa); in ipa_remove()
883 ipa_teardown(ipa); in ipa_remove()
886 ipa_deconfig(ipa); in ipa_remove()
889 ipa_smp2p_exit(ipa); in ipa_remove()
890 ipa_table_exit(ipa); in ipa_remove()
891 ipa_endpoint_exit(ipa); in ipa_remove()
892 gsi_exit(&ipa->gsi); in ipa_remove()
893 ipa_mem_exit(ipa); in ipa_remove()
894 ipa_reg_exit(ipa); in ipa_remove()
895 kfree(ipa); in ipa_remove()