Loading drivers/bus/mhi/core/mhi_init.c +1 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ static const char * const mhi_pm_state_str[] = { [MHI_PM_BIT_SYS_ERR_PROCESS] = "SYS_ERR Process", [MHI_PM_BIT_SHUTDOWN_PROCESS] = "SHUTDOWN Process", [MHI_PM_BIT_LD_ERR_FATAL_DETECT] = "LD or Error Fatal Detect", [MHI_PM_BIT_SHUTDOWN_NO_ACCESS] = "SHUTDOWN No Access", }; struct mhi_bus mhi_bus; Loading drivers/bus/mhi/core/mhi_internal.h +3 −1 Original line number Diff line number Diff line Loading @@ -464,6 +464,7 @@ enum { MHI_PM_BIT_SYS_ERR_PROCESS, MHI_PM_BIT_SHUTDOWN_PROCESS, MHI_PM_BIT_LD_ERR_FATAL_DETECT, MHI_PM_BIT_SHUTDOWN_NO_ACCESS, MHI_PM_BIT_MAX }; Loading @@ -483,6 +484,7 @@ enum MHI_PM_STATE { MHI_PM_SHUTDOWN_PROCESS = BIT(MHI_PM_BIT_SHUTDOWN_PROCESS), /* link not accessible */ MHI_PM_LD_ERR_FATAL_DETECT = BIT(MHI_PM_BIT_LD_ERR_FATAL_DETECT), MHI_PM_SHUTDOWN_NO_ACCESS = BIT(MHI_PM_BIT_SHUTDOWN_NO_ACCESS), }; #define MHI_REG_ACCESS_VALID(pm_state) ((pm_state & (MHI_PM_POR | MHI_PM_M0 | \ Loading @@ -490,7 +492,7 @@ enum MHI_PM_STATE { MHI_PM_SYS_ERR_DETECT | MHI_PM_SYS_ERR_PROCESS | \ MHI_PM_SHUTDOWN_PROCESS | MHI_PM_FW_DL_ERR))) #define MHI_PM_IN_ERROR_STATE(pm_state) (pm_state >= MHI_PM_FW_DL_ERR) #define MHI_PM_IN_FATAL_STATE(pm_state) (pm_state == MHI_PM_LD_ERR_FATAL_DETECT) #define MHI_PM_IN_FATAL_STATE(pm_state) (pm_state >= MHI_PM_LD_ERR_FATAL_DETECT) #define MHI_DB_ACCESS_VALID(mhi_cntrl) (mhi_cntrl->pm_state & \ mhi_cntrl->db_access) #define MHI_WAKE_DB_CLEAR_VALID(pm_state) (pm_state & (MHI_PM_M0 | \ Loading drivers/bus/mhi/core/mhi_pm.c +25 −13 Original line number Diff line number Diff line Loading @@ -43,9 +43,11 @@ * M0 -> FW_DL_ERR * M0 -> M3_ENTER -> M3 -> M3_EXIT --> M0 * L1: SYS_ERR_DETECT -> SYS_ERR_PROCESS --> POR * L2: SHUTDOWN_PROCESS -> DISABLE * L2: SHUTDOWN_PROCESS -> LD_ERR_FATAL_DETECT * SHUTDOWN_PROCESS -> DISABLE * L3: LD_ERR_FATAL_DETECT <--> LD_ERR_FATAL_DETECT * LD_ERR_FATAL_DETECT -> SHUTDOWN_PROCESS * LD_ERR_FATAL_DETECT -> SHUTDOWN_NO_ACCESS * SHUTDOWN_NO_ACCESS -> DISABLE */ static struct mhi_pm_transitions const mhi_state_transitions[] = { /* L0 States */ Loading @@ -57,49 +59,52 @@ static struct mhi_pm_transitions const mhi_state_transitions[] = { MHI_PM_POR, MHI_PM_POR | MHI_PM_DISABLE | MHI_PM_M0 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M0, MHI_PM_M0 | MHI_PM_M2 | MHI_PM_M3_ENTER | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M2, MHI_PM_M0 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M3_ENTER, MHI_PM_M3 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M3, MHI_PM_M3_EXIT | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M3_EXIT, MHI_PM_M0 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_FW_DL_ERR, MHI_PM_FW_DL_ERR | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, /* L1 States */ { MHI_PM_SYS_ERR_DETECT, MHI_PM_SYS_ERR_PROCESS | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_SYS_ERR_PROCESS, MHI_PM_POR | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, /* L2 States */ { Loading @@ -109,7 +114,11 @@ static struct mhi_pm_transitions const mhi_state_transitions[] = { /* L3 States */ { MHI_PM_LD_ERR_FATAL_DETECT, MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_PROCESS MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_SHUTDOWN_NO_ACCESS, MHI_PM_DISABLE }, }; Loading Loading @@ -968,6 +977,7 @@ EXPORT_SYMBOL(mhi_control_error); void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful) { enum MHI_PM_STATE cur_state; enum MHI_PM_STATE transition_state = MHI_PM_SHUTDOWN_PROCESS; /* if it's not graceful shutdown, force MHI to a linkdown state */ if (!graceful) { Loading @@ -981,8 +991,10 @@ void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful) MHI_ERR("Failed to move to state:%s from:%s\n", to_mhi_pm_state_str(MHI_PM_LD_ERR_FATAL_DETECT), to_mhi_pm_state_str(mhi_cntrl->pm_state)); transition_state = MHI_PM_SHUTDOWN_NO_ACCESS; } mhi_pm_disable_transition(mhi_cntrl, MHI_PM_SHUTDOWN_PROCESS); mhi_pm_disable_transition(mhi_cntrl, transition_state); mhi_deinit_debugfs(mhi_cntrl); Loading Loading
drivers/bus/mhi/core/mhi_init.c +1 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ static const char * const mhi_pm_state_str[] = { [MHI_PM_BIT_SYS_ERR_PROCESS] = "SYS_ERR Process", [MHI_PM_BIT_SHUTDOWN_PROCESS] = "SHUTDOWN Process", [MHI_PM_BIT_LD_ERR_FATAL_DETECT] = "LD or Error Fatal Detect", [MHI_PM_BIT_SHUTDOWN_NO_ACCESS] = "SHUTDOWN No Access", }; struct mhi_bus mhi_bus; Loading
drivers/bus/mhi/core/mhi_internal.h +3 −1 Original line number Diff line number Diff line Loading @@ -464,6 +464,7 @@ enum { MHI_PM_BIT_SYS_ERR_PROCESS, MHI_PM_BIT_SHUTDOWN_PROCESS, MHI_PM_BIT_LD_ERR_FATAL_DETECT, MHI_PM_BIT_SHUTDOWN_NO_ACCESS, MHI_PM_BIT_MAX }; Loading @@ -483,6 +484,7 @@ enum MHI_PM_STATE { MHI_PM_SHUTDOWN_PROCESS = BIT(MHI_PM_BIT_SHUTDOWN_PROCESS), /* link not accessible */ MHI_PM_LD_ERR_FATAL_DETECT = BIT(MHI_PM_BIT_LD_ERR_FATAL_DETECT), MHI_PM_SHUTDOWN_NO_ACCESS = BIT(MHI_PM_BIT_SHUTDOWN_NO_ACCESS), }; #define MHI_REG_ACCESS_VALID(pm_state) ((pm_state & (MHI_PM_POR | MHI_PM_M0 | \ Loading @@ -490,7 +492,7 @@ enum MHI_PM_STATE { MHI_PM_SYS_ERR_DETECT | MHI_PM_SYS_ERR_PROCESS | \ MHI_PM_SHUTDOWN_PROCESS | MHI_PM_FW_DL_ERR))) #define MHI_PM_IN_ERROR_STATE(pm_state) (pm_state >= MHI_PM_FW_DL_ERR) #define MHI_PM_IN_FATAL_STATE(pm_state) (pm_state == MHI_PM_LD_ERR_FATAL_DETECT) #define MHI_PM_IN_FATAL_STATE(pm_state) (pm_state >= MHI_PM_LD_ERR_FATAL_DETECT) #define MHI_DB_ACCESS_VALID(mhi_cntrl) (mhi_cntrl->pm_state & \ mhi_cntrl->db_access) #define MHI_WAKE_DB_CLEAR_VALID(pm_state) (pm_state & (MHI_PM_M0 | \ Loading
drivers/bus/mhi/core/mhi_pm.c +25 −13 Original line number Diff line number Diff line Loading @@ -43,9 +43,11 @@ * M0 -> FW_DL_ERR * M0 -> M3_ENTER -> M3 -> M3_EXIT --> M0 * L1: SYS_ERR_DETECT -> SYS_ERR_PROCESS --> POR * L2: SHUTDOWN_PROCESS -> DISABLE * L2: SHUTDOWN_PROCESS -> LD_ERR_FATAL_DETECT * SHUTDOWN_PROCESS -> DISABLE * L3: LD_ERR_FATAL_DETECT <--> LD_ERR_FATAL_DETECT * LD_ERR_FATAL_DETECT -> SHUTDOWN_PROCESS * LD_ERR_FATAL_DETECT -> SHUTDOWN_NO_ACCESS * SHUTDOWN_NO_ACCESS -> DISABLE */ static struct mhi_pm_transitions const mhi_state_transitions[] = { /* L0 States */ Loading @@ -57,49 +59,52 @@ static struct mhi_pm_transitions const mhi_state_transitions[] = { MHI_PM_POR, MHI_PM_POR | MHI_PM_DISABLE | MHI_PM_M0 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M0, MHI_PM_M0 | MHI_PM_M2 | MHI_PM_M3_ENTER | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_FW_DL_ERR | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M2, MHI_PM_M0 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M3_ENTER, MHI_PM_M3 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M3, MHI_PM_M3_EXIT | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_M3_EXIT, MHI_PM_M0 | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_FW_DL_ERR, MHI_PM_FW_DL_ERR | MHI_PM_SYS_ERR_DETECT | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, /* L1 States */ { MHI_PM_SYS_ERR_DETECT, MHI_PM_SYS_ERR_PROCESS | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_SYS_ERR_PROCESS, MHI_PM_POR | MHI_PM_SHUTDOWN_PROCESS | MHI_PM_LD_ERR_FATAL_DETECT MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, /* L2 States */ { Loading @@ -109,7 +114,11 @@ static struct mhi_pm_transitions const mhi_state_transitions[] = { /* L3 States */ { MHI_PM_LD_ERR_FATAL_DETECT, MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_PROCESS MHI_PM_LD_ERR_FATAL_DETECT | MHI_PM_SHUTDOWN_NO_ACCESS }, { MHI_PM_SHUTDOWN_NO_ACCESS, MHI_PM_DISABLE }, }; Loading Loading @@ -968,6 +977,7 @@ EXPORT_SYMBOL(mhi_control_error); void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful) { enum MHI_PM_STATE cur_state; enum MHI_PM_STATE transition_state = MHI_PM_SHUTDOWN_PROCESS; /* if it's not graceful shutdown, force MHI to a linkdown state */ if (!graceful) { Loading @@ -981,8 +991,10 @@ void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful) MHI_ERR("Failed to move to state:%s from:%s\n", to_mhi_pm_state_str(MHI_PM_LD_ERR_FATAL_DETECT), to_mhi_pm_state_str(mhi_cntrl->pm_state)); transition_state = MHI_PM_SHUTDOWN_NO_ACCESS; } mhi_pm_disable_transition(mhi_cntrl, MHI_PM_SHUTDOWN_PROCESS); mhi_pm_disable_transition(mhi_cntrl, transition_state); mhi_deinit_debugfs(mhi_cntrl); Loading