Loading drivers/usb/pd/policy_engine.c +23 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,7 @@ static void *usbpd_ipc_log; #define VDM_BUSY_TIME 50 #define VCONN_ON_TIME 100 #define SINK_TX_TIME 16 #define DR_SWAP_RESPONSE_TIME 20 /* tPSHardReset + tSafe0V */ #define SNK_HARD_RESET_VBUS_OFF_TIME (35 + 650) Loading Loading @@ -395,6 +396,8 @@ struct usbpd { enum usbpd_state current_state; bool hard_reset_recvd; ktime_t hard_reset_recvd_time; ktime_t dr_swap_recvd_time; struct list_head rx_q; spinlock_t rx_lock; struct rx_msg *rx_ext_msg; Loading Loading @@ -1155,6 +1158,9 @@ static void phy_msg_received(struct usbpd *pd, enum pd_sop_type sop, return; } if (IS_CTRL(rx_msg, MSG_DR_SWAP)) pd->dr_swap_recvd_time = ktime_get(); spin_lock_irqsave(&pd->rx_lock, flags); list_add_tail(&rx_msg->entry, &pd->rx_q); spin_unlock_irqrestore(&pd->rx_lock, flags); Loading Loading @@ -2466,6 +2472,7 @@ static void usbpd_sm(struct work_struct *w) int ret, ms; struct rx_msg *rx_msg = NULL; unsigned long flags; s64 dr_swap_delta; usbpd_dbg(&pd->dev, "handle state %s\n", usbpd_state_strings[pd->current_state]); Loading Loading @@ -2746,6 +2753,14 @@ static void usbpd_sm(struct work_struct *w) break; } dr_swap_delta = ktime_ms_delta(ktime_get(), pd->dr_swap_recvd_time); if (dr_swap_delta > DR_SWAP_RESPONSE_TIME) { usbpd_err(&pd->dev, "DR swap timedout(%lld), do not send ACCEPT\n", dr_swap_delta); break; } ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG); if (ret) { usbpd_set_state(pd, PE_SEND_SOFT_RESET); Loading Loading @@ -3028,6 +3043,14 @@ static void usbpd_sm(struct work_struct *w) break; } dr_swap_delta = ktime_ms_delta(ktime_get(), pd->dr_swap_recvd_time); if (dr_swap_delta > DR_SWAP_RESPONSE_TIME) { usbpd_err(&pd->dev, "DR swap timedout(%lld), do not send ACCEPT\n", dr_swap_delta); break; } ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG); if (ret) { usbpd_set_state(pd, PE_SEND_SOFT_RESET); Loading Loading
drivers/usb/pd/policy_engine.c +23 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,7 @@ static void *usbpd_ipc_log; #define VDM_BUSY_TIME 50 #define VCONN_ON_TIME 100 #define SINK_TX_TIME 16 #define DR_SWAP_RESPONSE_TIME 20 /* tPSHardReset + tSafe0V */ #define SNK_HARD_RESET_VBUS_OFF_TIME (35 + 650) Loading Loading @@ -395,6 +396,8 @@ struct usbpd { enum usbpd_state current_state; bool hard_reset_recvd; ktime_t hard_reset_recvd_time; ktime_t dr_swap_recvd_time; struct list_head rx_q; spinlock_t rx_lock; struct rx_msg *rx_ext_msg; Loading Loading @@ -1155,6 +1158,9 @@ static void phy_msg_received(struct usbpd *pd, enum pd_sop_type sop, return; } if (IS_CTRL(rx_msg, MSG_DR_SWAP)) pd->dr_swap_recvd_time = ktime_get(); spin_lock_irqsave(&pd->rx_lock, flags); list_add_tail(&rx_msg->entry, &pd->rx_q); spin_unlock_irqrestore(&pd->rx_lock, flags); Loading Loading @@ -2466,6 +2472,7 @@ static void usbpd_sm(struct work_struct *w) int ret, ms; struct rx_msg *rx_msg = NULL; unsigned long flags; s64 dr_swap_delta; usbpd_dbg(&pd->dev, "handle state %s\n", usbpd_state_strings[pd->current_state]); Loading Loading @@ -2746,6 +2753,14 @@ static void usbpd_sm(struct work_struct *w) break; } dr_swap_delta = ktime_ms_delta(ktime_get(), pd->dr_swap_recvd_time); if (dr_swap_delta > DR_SWAP_RESPONSE_TIME) { usbpd_err(&pd->dev, "DR swap timedout(%lld), do not send ACCEPT\n", dr_swap_delta); break; } ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG); if (ret) { usbpd_set_state(pd, PE_SEND_SOFT_RESET); Loading Loading @@ -3028,6 +3043,14 @@ static void usbpd_sm(struct work_struct *w) break; } dr_swap_delta = ktime_ms_delta(ktime_get(), pd->dr_swap_recvd_time); if (dr_swap_delta > DR_SWAP_RESPONSE_TIME) { usbpd_err(&pd->dev, "DR swap timedout(%lld), do not send ACCEPT\n", dr_swap_delta); break; } ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG); if (ret) { usbpd_set_state(pd, PE_SEND_SOFT_RESET); Loading