|
@@ -23,7 +23,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
|
|
|
|
--- a/drivers/bus/mhi/host/init.c
|
|
--- a/drivers/bus/mhi/host/init.c
|
|
+++ b/drivers/bus/mhi/host/init.c
|
|
+++ b/drivers/bus/mhi/host/init.c
|
|
-@@ -881,6 +881,7 @@ static int parse_config(struct mhi_contr
|
|
|
|
|
|
+@@ -882,6 +882,7 @@ static int parse_config(struct mhi_contr
|
|
if (!mhi_cntrl->timeout_ms)
|
|
if (!mhi_cntrl->timeout_ms)
|
|
mhi_cntrl->timeout_ms = MHI_TIMEOUT_MS;
|
|
mhi_cntrl->timeout_ms = MHI_TIMEOUT_MS;
|
|
|
|
|
|
@@ -33,7 +33,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
if (!mhi_cntrl->buffer_len)
|
|
if (!mhi_cntrl->buffer_len)
|
|
--- a/drivers/bus/mhi/host/internal.h
|
|
--- a/drivers/bus/mhi/host/internal.h
|
|
+++ b/drivers/bus/mhi/host/internal.h
|
|
+++ b/drivers/bus/mhi/host/internal.h
|
|
-@@ -321,7 +321,7 @@ int __must_check mhi_read_reg_field(stru
|
|
|
|
|
|
+@@ -324,7 +324,7 @@ int __must_check mhi_read_reg_field(stru
|
|
u32 *out);
|
|
u32 *out);
|
|
int __must_check mhi_poll_reg_field(struct mhi_controller *mhi_cntrl,
|
|
int __must_check mhi_poll_reg_field(struct mhi_controller *mhi_cntrl,
|
|
void __iomem *base, u32 offset, u32 mask,
|
|
void __iomem *base, u32 offset, u32 mask,
|
|
@@ -60,7 +60,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
ret = mhi_read_reg_field(mhi_cntrl, base, offset, mask, &out);
|
|
ret = mhi_read_reg_field(mhi_cntrl, base, offset, mask, &out);
|
|
--- a/drivers/bus/mhi/host/pm.c
|
|
--- a/drivers/bus/mhi/host/pm.c
|
|
+++ b/drivers/bus/mhi/host/pm.c
|
|
+++ b/drivers/bus/mhi/host/pm.c
|
|
-@@ -163,6 +163,7 @@ int mhi_ready_state_transition(struct mh
|
|
|
|
|
|
+@@ -171,6 +171,7 @@ int mhi_ready_state_transition(struct mh
|
|
enum mhi_pm_state cur_state;
|
|
enum mhi_pm_state cur_state;
|
|
struct device *dev = &mhi_cntrl->mhi_dev->dev;
|
|
struct device *dev = &mhi_cntrl->mhi_dev->dev;
|
|
u32 interval_us = 25000; /* poll register field every 25 milliseconds */
|
|
u32 interval_us = 25000; /* poll register field every 25 milliseconds */
|
|
@@ -68,7 +68,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
int ret, i;
|
|
int ret, i;
|
|
|
|
|
|
/* Check if device entered error state */
|
|
/* Check if device entered error state */
|
|
-@@ -173,14 +174,18 @@ int mhi_ready_state_transition(struct mh
|
|
|
|
|
|
+@@ -181,14 +182,18 @@ int mhi_ready_state_transition(struct mh
|
|
|
|
|
|
/* Wait for RESET to be cleared and READY bit to be set by the device */
|
|
/* Wait for RESET to be cleared and READY bit to be set by the device */
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL,
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL,
|
|
@@ -89,7 +89,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
if (ret) {
|
|
if (ret) {
|
|
dev_err(dev, "Device failed to enter MHI Ready\n");
|
|
dev_err(dev, "Device failed to enter MHI Ready\n");
|
|
return ret;
|
|
return ret;
|
|
-@@ -479,7 +484,7 @@ static void mhi_pm_disable_transition(st
|
|
|
|
|
|
+@@ -487,7 +492,7 @@ static void mhi_pm_disable_transition(st
|
|
|
|
|
|
/* Wait for the reset bit to be cleared by the device */
|
|
/* Wait for the reset bit to be cleared by the device */
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL,
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL,
|
|
@@ -98,7 +98,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
if (ret)
|
|
if (ret)
|
|
dev_err(dev, "Device failed to clear MHI Reset\n");
|
|
dev_err(dev, "Device failed to clear MHI Reset\n");
|
|
|
|
|
|
-@@ -492,8 +497,8 @@ static void mhi_pm_disable_transition(st
|
|
|
|
|
|
+@@ -500,8 +505,8 @@ static void mhi_pm_disable_transition(st
|
|
if (!MHI_IN_PBL(mhi_get_exec_env(mhi_cntrl))) {
|
|
if (!MHI_IN_PBL(mhi_get_exec_env(mhi_cntrl))) {
|
|
/* wait for ready to be set */
|
|
/* wait for ready to be set */
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs,
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs,
|
|
@@ -109,7 +109,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
if (ret)
|
|
if (ret)
|
|
dev_err(dev, "Device failed to enter READY state\n");
|
|
dev_err(dev, "Device failed to enter READY state\n");
|
|
}
|
|
}
|
|
-@@ -1111,7 +1116,8 @@ int mhi_async_power_up(struct mhi_contro
|
|
|
|
|
|
+@@ -1125,7 +1130,8 @@ int mhi_async_power_up(struct mhi_contro
|
|
if (state == MHI_STATE_SYS_ERR) {
|
|
if (state == MHI_STATE_SYS_ERR) {
|
|
mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET);
|
|
mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET);
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL,
|
|
ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL,
|
|
@@ -119,7 +119,7 @@ Signed-off-by: Manivannan Sadhasivam <[email protected]>
|
|
if (ret) {
|
|
if (ret) {
|
|
dev_info(dev, "Failed to reset MHI due to syserr state\n");
|
|
dev_info(dev, "Failed to reset MHI due to syserr state\n");
|
|
goto error_exit;
|
|
goto error_exit;
|
|
-@@ -1202,14 +1208,18 @@ EXPORT_SYMBOL_GPL(mhi_power_down);
|
|
|
|
|
|
+@@ -1216,14 +1222,18 @@ EXPORT_SYMBOL_GPL(mhi_power_down);
|
|
int mhi_sync_power_up(struct mhi_controller *mhi_cntrl)
|
|
int mhi_sync_power_up(struct mhi_controller *mhi_cntrl)
|
|
{
|
|
{
|
|
int ret = mhi_async_power_up(mhi_cntrl);
|
|
int ret = mhi_async_power_up(mhi_cntrl);
|