Lines Matching refs:ipa
94 int ipa_setup(struct ipa *ipa) in ipa_setup() argument
98 struct device *dev = &ipa->pdev->dev; in ipa_setup()
101 ret = gsi_setup(&ipa->gsi); in ipa_setup()
105 ret = ipa_power_setup(ipa); in ipa_setup()
109 ipa_endpoint_setup(ipa); in ipa_setup()
114 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_setup()
119 ret = ipa_mem_setup(ipa); /* No matching teardown required */ in ipa_setup()
123 ret = ipa_table_setup(ipa); /* No matching teardown required */ in ipa_setup()
130 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_setup()
135 ipa_endpoint_default_route_set(ipa, exception_endpoint->endpoint_id); in ipa_setup()
138 ret = ipa_qmi_setup(ipa); in ipa_setup()
142 ipa->setup_complete = true; in ipa_setup()
149 ipa_endpoint_default_route_clear(ipa); in ipa_setup()
154 ipa_endpoint_teardown(ipa); in ipa_setup()
155 ipa_power_teardown(ipa); in ipa_setup()
157 gsi_teardown(&ipa->gsi); in ipa_setup()
166 static void ipa_teardown(struct ipa *ipa) in ipa_teardown() argument
172 ipa->setup_complete = false; in ipa_teardown()
174 ipa_qmi_teardown(ipa); in ipa_teardown()
175 ipa_endpoint_default_route_clear(ipa); in ipa_teardown()
176 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]; in ipa_teardown()
178 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]; in ipa_teardown()
180 ipa_endpoint_teardown(ipa); in ipa_teardown()
181 ipa_power_teardown(ipa); in ipa_teardown()
182 gsi_teardown(&ipa->gsi); in ipa_teardown()
186 static void ipa_hardware_config_comp(struct ipa *ipa) in ipa_hardware_config_comp() argument
191 if (ipa->version < IPA_VERSION_4_0) in ipa_hardware_config_comp()
194 val = ioread32(ipa->reg_virt + IPA_REG_COMP_CFG_OFFSET); in ipa_hardware_config_comp()
196 if (ipa->version == IPA_VERSION_4_0) { in ipa_hardware_config_comp()
200 } else if (ipa->version < IPA_VERSION_4_5) { in ipa_hardware_config_comp()
209 iowrite32(val, ipa->reg_virt + IPA_REG_COMP_CFG_OFFSET); in ipa_hardware_config_comp()
214 ipa_hardware_config_qsb(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config_qsb() argument
230 iowrite32(val, ipa->reg_virt + IPA_REG_QSB_MAX_WRITES_OFFSET); in ipa_hardware_config_qsb()
234 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
240 if (ipa->version >= IPA_VERSION_4_0) in ipa_hardware_config_qsb()
244 iowrite32(val, ipa->reg_virt + IPA_REG_QSB_MAX_READS_OFFSET); in ipa_hardware_config_qsb()
278 static void ipa_qtime_config(struct ipa *ipa) in ipa_qtime_config() argument
283 iowrite32(0, ipa->reg_virt + IPA_REG_TIMERS_XO_CLK_DIV_CFG_OFFSET); in ipa_qtime_config()
291 iowrite32(val, ipa->reg_virt + IPA_REG_QTIME_TIMESTAMP_CFG_OFFSET); in ipa_qtime_config()
297 iowrite32(val, ipa->reg_virt + IPA_REG_TIMERS_PULSE_GRAN_CFG_OFFSET); in ipa_qtime_config()
301 iowrite32(val, ipa->reg_virt + IPA_REG_TIMERS_XO_CLK_DIV_CFG_OFFSET); in ipa_qtime_config()
305 iowrite32(val, ipa->reg_virt + IPA_REG_TIMERS_XO_CLK_DIV_CFG_OFFSET); in ipa_qtime_config()
308 static void ipa_idle_indication_cfg(struct ipa *ipa, in ipa_idle_indication_cfg() argument
320 offset = ipa_reg_idle_indication_cfg_offset(ipa->version); in ipa_idle_indication_cfg()
321 iowrite32(val, ipa->reg_virt + offset); in ipa_idle_indication_cfg()
332 static void ipa_hardware_dcd_config(struct ipa *ipa) in ipa_hardware_dcd_config() argument
335 ipa_idle_indication_cfg(ipa, 256, false); in ipa_hardware_dcd_config()
338 static void ipa_hardware_dcd_deconfig(struct ipa *ipa) in ipa_hardware_dcd_deconfig() argument
341 ipa_idle_indication_cfg(ipa, 0, true); in ipa_hardware_dcd_deconfig()
349 static void ipa_hardware_config(struct ipa *ipa, const struct ipa_data *data) in ipa_hardware_config() argument
351 enum ipa_version version = ipa->version; in ipa_hardware_config()
358 iowrite32(val, ipa->reg_virt + IPA_REG_BCR_OFFSET); in ipa_hardware_config()
364 val = ioread32(ipa->reg_virt + IPA_REG_TX_CFG_OFFSET); in ipa_hardware_config()
366 iowrite32(val, ipa->reg_virt + IPA_REG_TX_CFG_OFFSET); in ipa_hardware_config()
376 iowrite32(val, ipa->reg_virt + IPA_REG_CLKON_CFG_OFFSET); in ipa_hardware_config()
378 ipa_hardware_config_comp(ipa); in ipa_hardware_config()
381 ipa_hardware_config_qsb(ipa, data); in ipa_hardware_config()
387 iowrite32(val, ipa->reg_virt + IPA_REG_COUNTER_CFG_OFFSET); in ipa_hardware_config()
389 ipa_qtime_config(ipa); in ipa_hardware_config()
396 iowrite32(0, ipa->reg_virt + offset); in ipa_hardware_config()
400 ipa_hardware_dcd_config(ipa); in ipa_hardware_config()
409 static void ipa_hardware_deconfig(struct ipa *ipa) in ipa_hardware_deconfig() argument
412 ipa_hardware_dcd_deconfig(ipa); in ipa_hardware_deconfig()
422 static int ipa_config(struct ipa *ipa, const struct ipa_data *data) in ipa_config() argument
426 ipa_hardware_config(ipa, data); in ipa_config()
428 ret = ipa_mem_config(ipa); in ipa_config()
432 ipa->interrupt = ipa_interrupt_config(ipa); in ipa_config()
433 if (IS_ERR(ipa->interrupt)) { in ipa_config()
434 ret = PTR_ERR(ipa->interrupt); in ipa_config()
435 ipa->interrupt = NULL; in ipa_config()
439 ipa_uc_config(ipa); in ipa_config()
441 ret = ipa_endpoint_config(ipa); in ipa_config()
445 ipa_table_config(ipa); /* No deconfig required */ in ipa_config()
448 ret = ipa_resource_config(ipa, data->resource_data); in ipa_config()
452 ret = ipa_modem_config(ipa); in ipa_config()
459 ipa_endpoint_deconfig(ipa); in ipa_config()
461 ipa_uc_deconfig(ipa); in ipa_config()
462 ipa_interrupt_deconfig(ipa->interrupt); in ipa_config()
463 ipa->interrupt = NULL; in ipa_config()
465 ipa_mem_deconfig(ipa); in ipa_config()
467 ipa_hardware_deconfig(ipa); in ipa_config()
476 static void ipa_deconfig(struct ipa *ipa) in ipa_deconfig() argument
478 ipa_modem_deconfig(ipa); in ipa_deconfig()
479 ipa_endpoint_deconfig(ipa); in ipa_deconfig()
480 ipa_uc_deconfig(ipa); in ipa_deconfig()
481 ipa_interrupt_deconfig(ipa->interrupt); in ipa_deconfig()
482 ipa->interrupt = NULL; in ipa_deconfig()
483 ipa_mem_deconfig(ipa); in ipa_deconfig()
484 ipa_hardware_deconfig(ipa); in ipa_deconfig()
668 struct ipa *ipa; in ipa_probe() local
699 ipa = kzalloc(sizeof(*ipa), GFP_KERNEL); in ipa_probe()
700 if (!ipa) { in ipa_probe()
705 ipa->pdev = pdev; in ipa_probe()
706 dev_set_drvdata(dev, ipa); in ipa_probe()
707 ipa->power = power; in ipa_probe()
708 ipa->version = data->version; in ipa_probe()
709 init_completion(&ipa->completion); in ipa_probe()
711 ret = ipa_reg_init(ipa); in ipa_probe()
715 ret = ipa_mem_init(ipa, data->mem_data); in ipa_probe()
719 ret = gsi_init(&ipa->gsi, pdev, ipa->version, data->endpoint_count, in ipa_probe()
725 ipa->filter_map = ipa_endpoint_init(ipa, data->endpoint_count, in ipa_probe()
727 if (!ipa->filter_map) { in ipa_probe()
732 ret = ipa_table_init(ipa); in ipa_probe()
736 ret = ipa_modem_init(ipa, modem_init); in ipa_probe()
745 ret = ipa_config(ipa, data); in ipa_probe()
765 ret = ipa_setup(ipa); in ipa_probe()
775 ipa_deconfig(ipa); in ipa_probe()
778 ipa_modem_exit(ipa); in ipa_probe()
780 ipa_table_exit(ipa); in ipa_probe()
782 ipa_endpoint_exit(ipa); in ipa_probe()
784 gsi_exit(&ipa->gsi); in ipa_probe()
786 ipa_mem_exit(ipa); in ipa_probe()
788 ipa_reg_exit(ipa); in ipa_probe()
790 kfree(ipa); in ipa_probe()
799 struct ipa *ipa = dev_get_drvdata(&pdev->dev); in ipa_remove() local
800 struct ipa_power *power = ipa->power; in ipa_remove()
808 if (ipa->setup_complete) { in ipa_remove()
809 ret = ipa_modem_stop(ipa); in ipa_remove()
813 ret = ipa_modem_stop(ipa); in ipa_remove()
818 ipa_teardown(ipa); in ipa_remove()
821 ipa_deconfig(ipa); in ipa_remove()
824 ipa_modem_exit(ipa); in ipa_remove()
825 ipa_table_exit(ipa); in ipa_remove()
826 ipa_endpoint_exit(ipa); in ipa_remove()
827 gsi_exit(&ipa->gsi); in ipa_remove()
828 ipa_mem_exit(ipa); in ipa_remove()
829 ipa_reg_exit(ipa); in ipa_remove()
830 kfree(ipa); in ipa_remove()