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: John Youn <johnyoun@synopsys.com> Signed-off-by: Douglas Anderson <dianders@chromium.org> Tested-by: Heiko Stuebner <heiko@sntech.de> Tested-by: Stefan Wahren <stefan.wahren@i2se.com> Signed-off-by: Felipe Balbi <balbi@kernel.org>
This commit is contained in:
parent
2d3f139810
commit
483bb2544c
|
@ -809,9 +809,10 @@ struct dwc2_hsotg {
|
|||
bool bus_suspended;
|
||||
bool new_connection;
|
||||
|
||||
u16 last_frame_num;
|
||||
|
||||
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
|
||||
#define FRAME_NUM_ARRAY_SIZE 1000
|
||||
u16 last_frame_num;
|
||||
u16 *frame_num_array;
|
||||
u16 *last_frame_num_array;
|
||||
int frame_num_idx;
|
||||
|
|
|
@ -3084,8 +3084,8 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq)
|
|||
FRAME_NUM_ARRAY_SIZE, GFP_KERNEL);
|
||||
if (!hsotg->last_frame_num_array)
|
||||
goto error1;
|
||||
hsotg->last_frame_num = HFNUM_MAX_FRNUM;
|
||||
#endif
|
||||
hsotg->last_frame_num = HFNUM_MAX_FRNUM;
|
||||
|
||||
/* Check if the bus driver or platform code has setup a dma_mask */
|
||||
if (hsotg->core_params->dma_enable > 0 &&
|
||||
|
|
|
@ -55,12 +55,16 @@
|
|||
/* This function is for debug only */
|
||||
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 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->last_frame_num + 1) & HFNUM_MAX_FRNUM) !=
|
||||
curr_frame_number) {
|
||||
if (expected != curr_frame_number) {
|
||||
hsotg->frame_num_array[hsotg->frame_num_idx] =
|
||||
curr_frame_number;
|
||||
hsotg->last_frame_num_array[hsotg->frame_num_idx] =
|
||||
|
@ -79,8 +83,8 @@ static void dwc2_track_missed_sofs(struct dwc2_hsotg *hsotg)
|
|||
}
|
||||
hsotg->dumped_frame_num_array = 1;
|
||||
}
|
||||
hsotg->last_frame_num = curr_frame_number;
|
||||
#endif
|
||||
hsotg->last_frame_num = curr_frame_number;
|
||||
}
|
||||
|
||||
static void dwc2_hc_handle_tt_clear(struct dwc2_hsotg *hsotg,
|
||||
|
|
Loading…
Reference in New Issue