net: wwan: t7xx: Add AP CLDMA
[platform/kernel/linux-rpi.git] / drivers / net / wwan / t7xx / t7xx_state_monitor.c
index 0bcca08..80edb8e 100644 (file)
@@ -285,8 +285,9 @@ static int fsm_routine_starting(struct t7xx_fsm_ctl *ctl)
        t7xx_fsm_broadcast_state(ctl, MD_STATE_WAITING_FOR_HS1);
        t7xx_md_event_notify(md, FSM_START);
 
-       wait_event_interruptible_timeout(ctl->async_hk_wq, md->core_md.ready || ctl->exp_flg,
-                                        HZ * 60);
+       wait_event_interruptible_timeout(ctl->async_hk_wq,
+                                        (md->core_md.ready && md->core_ap.ready) ||
+                                         ctl->exp_flg, HZ * 60);
        dev = &md->t7xx_dev->pdev->dev;
 
        if (ctl->exp_flg)
@@ -299,6 +300,13 @@ static int fsm_routine_starting(struct t7xx_fsm_ctl *ctl)
 
                fsm_routine_exception(ctl, NULL, EXCEPTION_HS_TIMEOUT);
                return -ETIMEDOUT;
+       } else if (!md->core_ap.ready) {
+               dev_err(dev, "AP handshake timeout\n");
+               if (md->core_ap.handshake_ongoing)
+                       t7xx_fsm_append_event(ctl, FSM_EVENT_AP_HS2_EXIT, NULL, 0);
+
+               fsm_routine_exception(ctl, NULL, EXCEPTION_HS_TIMEOUT);
+               return -ETIMEDOUT;
        }
 
        t7xx_pci_pm_init_late(md->t7xx_dev);
@@ -335,6 +343,7 @@ static void fsm_routine_start(struct t7xx_fsm_ctl *ctl, struct t7xx_fsm_command
                return;
        }
 
+       t7xx_cldma_hif_hw_init(md->md_ctrl[CLDMA_ID_AP]);
        t7xx_cldma_hif_hw_init(md->md_ctrl[CLDMA_ID_MD]);
        fsm_finish_command(ctl, cmd, fsm_routine_starting(ctl));
 }