Lines Matching refs:ipa

21 #include "ipa.h"
103 * @ipa: IPA pointer
112 int ipa_setup(struct ipa *ipa)
116 struct device *dev = ipa->dev;
119 ret = gsi_setup(&ipa->gsi);
123 ret = ipa_power_setup(ipa);
127 ipa_endpoint_setup(ipa);
132 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX];
137 ret = ipa_mem_setup(ipa); /* No matching teardown required */
141 ret = ipa_table_setup(ipa); /* No matching teardown required */
148 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX];
153 ipa_endpoint_default_route_set(ipa, exception_endpoint->endpoint_id);
156 ret = ipa_qmi_setup(ipa);
160 ipa->setup_complete = true;
167 ipa_endpoint_default_route_clear(ipa);
172 ipa_endpoint_teardown(ipa);
173 ipa_power_teardown(ipa);
175 gsi_teardown(&ipa->gsi);
182 * @ipa: IPA pointer
184 static void ipa_teardown(struct ipa *ipa)
190 ipa->setup_complete = false;
192 ipa_qmi_teardown(ipa);
193 ipa_endpoint_default_route_clear(ipa);
194 exception_endpoint = ipa->name_map[IPA_ENDPOINT_AP_LAN_RX];
196 command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX];
198 ipa_endpoint_teardown(ipa);
199 ipa_power_teardown(ipa);
200 gsi_teardown(&ipa->gsi);
204 ipa_hardware_config_bcr(struct ipa *ipa, const struct ipa_data *data)
210 if (ipa->version >= IPA_VERSION_4_5)
213 reg = ipa_reg(ipa, IPA_BCR);
215 iowrite32(val, ipa->reg_virt + reg_offset(reg));
218 static void ipa_hardware_config_tx(struct ipa *ipa)
220 enum ipa_version version = ipa->version;
229 reg = ipa_reg(ipa, IPA_TX_CFG);
232 val = ioread32(ipa->reg_virt + offset);
236 iowrite32(val, ipa->reg_virt + offset);
239 static void ipa_hardware_config_clkon(struct ipa *ipa)
241 enum ipa_version version = ipa->version;
252 reg = ipa_reg(ipa, CLKON_CFG);
262 iowrite32(val, ipa->reg_virt + reg_offset(reg));
266 static void ipa_hardware_config_comp(struct ipa *ipa)
273 if (ipa->version < IPA_VERSION_4_0)
276 reg = ipa_reg(ipa, COMP_CFG);
279 val = ioread32(ipa->reg_virt + offset);
281 if (ipa->version == IPA_VERSION_4_0) {
285 } else if (ipa->version < IPA_VERSION_4_5) {
294 iowrite32(val, ipa->reg_virt + offset);
299 ipa_hardware_config_qsb(struct ipa *ipa, const struct ipa_data *data)
312 reg = ipa_reg(ipa, QSB_MAX_WRITES);
318 iowrite32(val, ipa->reg_virt + reg_offset(reg));
321 reg = ipa_reg(ipa, QSB_MAX_READS);
324 if (ipa->version >= IPA_VERSION_4_0)
329 if (ipa->version >= IPA_VERSION_4_0)
334 iowrite32(val, ipa->reg_virt + reg_offset(reg));
368 static void ipa_qtime_config(struct ipa *ipa)
375 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG);
376 iowrite32(0, ipa->reg_virt + reg_offset(reg));
378 reg = ipa_reg(ipa, QTIME_TIMESTAMP_CFG);
379 if (ipa->version < IPA_VERSION_5_5) {
388 iowrite32(val, ipa->reg_virt + reg_offset(reg));
391 reg = ipa_reg(ipa, TIMERS_PULSE_GRAN_CFG);
394 if (ipa->version >= IPA_VERSION_5_0) {
401 iowrite32(val, ipa->reg_virt + reg_offset(reg));
404 reg = ipa_reg(ipa, TIMERS_XO_CLK_DIV_CFG);
409 iowrite32(val, ipa->reg_virt + offset);
414 iowrite32(val, ipa->reg_virt + offset);
418 static void ipa_hardware_config_counter(struct ipa *ipa)
424 reg = ipa_reg(ipa, COUNTER_CFG);
427 iowrite32(val, ipa->reg_virt + reg_offset(reg));
430 static void ipa_hardware_config_timing(struct ipa *ipa)
432 if (ipa->version < IPA_VERSION_4_5)
433 ipa_hardware_config_counter(ipa);
435 ipa_qtime_config(ipa);
438 static void ipa_hardware_config_hashing(struct ipa *ipa)
447 if (ipa->version != IPA_VERSION_4_2)
451 reg = ipa_reg(ipa, FILT_ROUT_HASH_EN);
456 iowrite32(0, ipa->reg_virt + reg_offset(reg));
459 static void ipa_idle_indication_cfg(struct ipa *ipa,
466 if (ipa->version < IPA_VERSION_3_5_1)
469 reg = ipa_reg(ipa, IDLE_INDICATION_CFG);
475 iowrite32(val, ipa->reg_virt + reg_offset(reg));
480 * @ipa: IPA pointer
486 static void ipa_hardware_dcd_config(struct ipa *ipa)
489 ipa_idle_indication_cfg(ipa, 256, false);
492 static void ipa_hardware_dcd_deconfig(struct ipa *ipa)
495 ipa_idle_indication_cfg(ipa, 0, true);
500 * @ipa: IPA pointer
503 static void ipa_hardware_config(struct ipa *ipa, const struct ipa_data *data)
505 ipa_hardware_config_bcr(ipa, data);
506 ipa_hardware_config_tx(ipa);
507 ipa_hardware_config_clkon(ipa);
508 ipa_hardware_config_comp(ipa);
509 ipa_hardware_config_qsb(ipa, data);
510 ipa_hardware_config_timing(ipa);
511 ipa_hardware_config_hashing(ipa);
512 ipa_hardware_dcd_config(ipa);
517 * @ipa: IPA pointer
521 static void ipa_hardware_deconfig(struct ipa *ipa)
524 ipa_hardware_dcd_deconfig(ipa);
529 * @ipa: IPA pointer
534 static int ipa_config(struct ipa *ipa, const struct ipa_data *data)
538 ipa_hardware_config(ipa, data);
540 ret = ipa_mem_config(ipa);
544 ret = ipa_interrupt_config(ipa);
548 ipa_uc_config(ipa);
550 ret = ipa_endpoint_config(ipa);
554 ipa_table_config(ipa); /* No deconfig required */
557 ret = ipa_resource_config(ipa, data->resource_data);
561 ret = ipa_modem_config(ipa);
568 ipa_endpoint_deconfig(ipa);
570 ipa_uc_deconfig(ipa);
571 ipa_interrupt_deconfig(ipa);
573 ipa_mem_deconfig(ipa);
575 ipa_hardware_deconfig(ipa);
582 * @ipa: IPA pointer
584 static void ipa_deconfig(struct ipa *ipa)
586 ipa_modem_deconfig(ipa);
587 ipa_endpoint_deconfig(ipa);
588 ipa_uc_deconfig(ipa);
589 ipa_interrupt_deconfig(ipa);
590 ipa_mem_deconfig(ipa);
591 ipa_hardware_deconfig(ipa);
657 .compatible = "qcom,msm8998-ipa",
661 .compatible = "qcom,sdm845-ipa",
665 .compatible = "qcom,sc7180-ipa",
669 .compatible = "qcom,sdx55-ipa",
673 .compatible = "qcom,sm6350-ipa",
677 .compatible = "qcom,sm8350-ipa",
681 .compatible = "qcom,sc7280-ipa",
685 .compatible = "qcom,sdx65-ipa",
689 .compatible = "qcom,sm8550-ipa",
809 struct ipa *ipa;
854 ipa = kzalloc(sizeof(*ipa), GFP_KERNEL);
855 if (!ipa) {
860 ipa->dev = dev;
861 dev_set_drvdata(dev, ipa);
862 ipa->interrupt = interrupt;
863 ipa->power = power;
864 ipa->version = data->version;
865 ipa->modem_route_count = data->modem_route_count;
866 init_completion(&ipa->completion);
868 ret = ipa_reg_init(ipa, pdev);
872 ret = ipa_mem_init(ipa, pdev, data->mem_data);
876 ret = gsi_init(&ipa->gsi, pdev, ipa->version, data->endpoint_count,
882 ret = ipa_endpoint_init(ipa, data->endpoint_count, data->endpoint_data);
886 ret = ipa_table_init(ipa);
890 ret = ipa_smp2p_init(ipa, pdev, loader == IPA_LOADER_MODEM);
899 ret = ipa_config(ipa, data);
919 ret = ipa_setup(ipa);
929 ipa_deconfig(ipa);
932 ipa_smp2p_exit(ipa);
934 ipa_table_exit(ipa);
936 ipa_endpoint_exit(ipa);
938 gsi_exit(&ipa->gsi);
940 ipa_mem_exit(ipa);
942 ipa_reg_exit(ipa);
944 kfree(ipa);
958 struct ipa *ipa;
961 ipa = dev_get_drvdata(&pdev->dev);
962 dev = ipa->dev;
965 power = ipa->power;
966 interrupt = ipa->interrupt;
971 ipa_smp2p_irq_disable_setup(ipa);
977 if (ipa->setup_complete) {
978 ret = ipa_modem_stop(ipa);
982 ret = ipa_modem_stop(ipa);
995 ipa_teardown(ipa);
998 ipa_deconfig(ipa);
1001 ipa_smp2p_exit(ipa);
1002 ipa_table_exit(ipa);
1003 ipa_endpoint_exit(ipa);
1004 gsi_exit(&ipa->gsi);
1005 ipa_mem_exit(ipa);
1006 ipa_reg_exit(ipa);
1007 kfree(ipa);
1027 .name = "ipa",