Commit 483bb254 authored by Douglas Anderson's avatar Douglas Anderson Committed by Felipe Balbi

usb: dwc2: host: Add scheduler logging for missed SOFs

We'll use the new "scheduler verbose debugging" macro to log missed
SOFs.  This is fast enough (assuming you configure it to use the ftrace
buffer) that we can do it without worrying about the speed hit.  The
overhead hit if the scheduler tracing is set to "no_printk" should be
near zero.
Acked-by: default avatarJohn Youn <johnyoun@synopsys.com>
Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
Tested-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
parent 2d3f1398
...@@ -809,9 +809,10 @@ struct dwc2_hsotg { ...@@ -809,9 +809,10 @@ struct dwc2_hsotg {
bool bus_suspended; bool bus_suspended;
bool new_connection; bool new_connection;
u16 last_frame_num;
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
#define FRAME_NUM_ARRAY_SIZE 1000 #define FRAME_NUM_ARRAY_SIZE 1000
u16 last_frame_num;
u16 *frame_num_array; u16 *frame_num_array;
u16 *last_frame_num_array; u16 *last_frame_num_array;
int frame_num_idx; int frame_num_idx;
......
...@@ -3084,8 +3084,8 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq) ...@@ -3084,8 +3084,8 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq)
FRAME_NUM_ARRAY_SIZE, GFP_KERNEL); FRAME_NUM_ARRAY_SIZE, GFP_KERNEL);
if (!hsotg->last_frame_num_array) if (!hsotg->last_frame_num_array)
goto error1; goto error1;
hsotg->last_frame_num = HFNUM_MAX_FRNUM;
#endif #endif
hsotg->last_frame_num = HFNUM_MAX_FRNUM;
/* Check if the bus driver or platform code has setup a dma_mask */ /* Check if the bus driver or platform code has setup a dma_mask */
if (hsotg->core_params->dma_enable > 0 && if (hsotg->core_params->dma_enable > 0 &&
......
...@@ -55,12 +55,16 @@ ...@@ -55,12 +55,16 @@
/* This function is for debug only */ /* This function is for debug only */
static void dwc2_track_missed_sofs(struct dwc2_hsotg *hsotg) static void dwc2_track_missed_sofs(struct dwc2_hsotg *hsotg)
{ {
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
u16 curr_frame_number = hsotg->frame_number; u16 curr_frame_number = hsotg->frame_number;
u16 expected = dwc2_frame_num_inc(hsotg->last_frame_num, 1);
if (expected != curr_frame_number)
dwc2_sch_vdbg(hsotg, "MISSED SOF %04x != %04x\n",
expected, curr_frame_number);
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
if (hsotg->frame_num_idx < FRAME_NUM_ARRAY_SIZE) { if (hsotg->frame_num_idx < FRAME_NUM_ARRAY_SIZE) {
if (((hsotg->last_frame_num + 1) & HFNUM_MAX_FRNUM) != if (expected != curr_frame_number) {
curr_frame_number) {
hsotg->frame_num_array[hsotg->frame_num_idx] = hsotg->frame_num_array[hsotg->frame_num_idx] =
curr_frame_number; curr_frame_number;
hsotg->last_frame_num_array[hsotg->frame_num_idx] = hsotg->last_frame_num_array[hsotg->frame_num_idx] =
...@@ -79,8 +83,8 @@ static void dwc2_track_missed_sofs(struct dwc2_hsotg *hsotg) ...@@ -79,8 +83,8 @@ static void dwc2_track_missed_sofs(struct dwc2_hsotg *hsotg)
} }
hsotg->dumped_frame_num_array = 1; hsotg->dumped_frame_num_array = 1;
} }
hsotg->last_frame_num = curr_frame_number;
#endif #endif
hsotg->last_frame_num = curr_frame_number;
} }
static void dwc2_hc_handle_tt_clear(struct dwc2_hsotg *hsotg, static void dwc2_hc_handle_tt_clear(struct dwc2_hsotg *hsotg,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment