Re: [PATCH v2] usb: isp1760: add peripheral/device controller chip id

From: Laurent Pinchart
Date: Wed Mar 04 2015 - 11:11:40 EST


Hi Sudeep,

On Wednesday 04 March 2015 15:56:12 Sudeep Holla wrote:
> On 26/02/15 18:53, Laurent Pinchart wrote:
> > Hi Sudeep,
> >
> > Thank you for the patch.
> >
> > On Thursday 26 February 2015 11:47:57 Sudeep Holla wrote:
> >> As per the SAF1761 data sheet[0], the DcChipID register represents
> >> the hardware version number (0001h) and the chip ID (1582h) for the
> >> Peripheral Controller.
> >>
> >> However as per the ISP1761 data sheet[1], the DcChipID register
> >> represents the hardware version number (0015h) and the chip ID (8210h)
> >> for the Peripheral Controller.
> >>
> >> This patch adds support for both the chip ID values.
> >>
> >> [0] http://www.nxp.com/documents/data_sheet/SAF1761.pdf
> >> [1] http://pdf.datasheetcatalog.com/datasheets2/74/742102_1.pdf
> >>
> >> Cc: Felipe Balbi <balbi@xxxxxx>
> >> Cc: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> >> Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
> >
> > Acked-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
>
> Thanks. I assume Felipe will pick this up.
>
> Now about the testing in Gadget mode on Vexpress platform.
> I have set
> CONFIG_USB_OTG=y
> CONFIG_USB_MON=y
> CONFIG_USB_STORAGE=y
> CONFIG_USB_ISP1760=y
> CONFIG_USB_ISP1760_DUAL_ROLE=y
> CONFIG_USB_GADGET=y
> CONFIG_USB_MASS_STORAGE=m
>
> When I execute:
> $ modprobe g_mass_storage file=/home/linaro/backing_file
>
> I get the following inconsistent lock state dump
>
> --->8
> Number of LUNs=8
> Mass Storage Function, version: 2009/09/11
> LUN: removable file: (no medium)
> Number of LUNs=1
> LUN: file: /home/linaro/backing_file
> Number of LUNs=1
> g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
> g_mass_storage gadget: userspace failed to provide iSerialNumber
> g_mass_storage gadget: g_mass_storage ready
>
> =================================
> [ INFO: inconsistent lock state ]
> 4.0.0-rc2-00004-gf7bb2ef60173 #51 Not tainted
> ---------------------------------
> inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
> in:imklog/2118 [HC1[1]:SC0[0]:HE0:SE1] takes:
> (&(&udc->lock)->rlock){?.+...}, at: [<c0397a93>]
> isp1760_udc_irq+0x367/0x9dc
> {HARDIRQ-ON-W} state was registered at:
> [<c05135b3>] _raw_spin_lock+0x23/0x30
> [<c0396b87>] isp1760_udc_start+0x23/0xf8
> [<c039dc21>] udc_bind_to_driver+0x71/0xb0
> [<c039de4f>] usb_gadget_probe_driver+0x53/0x9c
> [<bf80d0df>] usb_composite_probe+0x8a/0xa4 [libcomposite]
> [<bf8311a7>] 0xbf8311a7
> [<c00088c5>] do_one_initcall+0x8d/0x17c
> [<c050b92d>] do_init_module+0x49/0x148
> [<c0087323>] load_module+0xb7f/0xbc4
> [<c0087471>] SyS_finit_module+0x51/0x74
> [<c000d8c1>] ret_fast_syscall+0x1/0x68
> irq event stamp: 4966
> hardirqs last enabled at (4965): [<c05137df>]
> _raw_spin_unlock_irq+0x1f/0x24
> hardirqs last disabled at (4966): [<c00110b3>] __irq_svc+0x33/0x64
> softirqs last enabled at (4458): [<c0023475>] __do_softirq+0x23d/0x2d0
> softirqs last disabled at (4389): [<c002380b>] irq_exit+0xef/0x15c
>
> other info that might help us debug this:
> Possible unsafe locking scenario:
>
> CPU0
> ----
> lock(&(&udc->lock)->rlock);
> <Interrupt>
> lock(&(&udc->lock)->rlock);
>
> *** DEADLOCK ***
>
> 1 lock held by in:imklog/2118:
> #0: (&f->f_pos_lock){+.+.+.}, at: [<c010a101>] __fdget_pos+0x31/0x34
>
> stack backtrace:
> CPU: 0 PID: 2118 Comm: in:imklog Not tainted
> 4.0.0-rc2-00004-gf7bb2ef60173 #51
> Hardware name: ARM-Versatile Express
> [<c0013bc5>] (unwind_backtrace) from [<c001084d>] (show_stack+0x11/0x14)
> [<c001084d>] (show_stack) from [<c050ea85>] (dump_stack+0x6d/0x78)
> [<c050ea85>] (dump_stack) from [<c0054abd>] (print_usage_bug+0x1d9/0x260)
> [<c0054abd>] (print_usage_bug) from [<c0054cb7>] (mark_lock+0x173/0x5d0)
> [<c0054cb7>] (mark_lock) from [<c005600f>] (__lock_acquire+0xab7/0x19a4)
> [<c005600f>] (__lock_acquire) from [<c0057575>] (lock_acquire+0x79/0xe8)
> [<c0057575>] (lock_acquire) from [<c05135b3>] (_raw_spin_lock+0x23/0x30)
> [<c05135b3>] (_raw_spin_lock) from [<c0397a93>]
> (isp1760_udc_irq+0x367/0x9dc)
> [<c0397a93>] (isp1760_udc_irq) from [<c0065449>]
> (handle_irq_event_percpu+0x45/0x154)
> [<c0065449>] (handle_irq_event_percpu) from [<c0065587>]
> (handle_irq_event+0x2f/0x44)
> [<c0065587>] (handle_irq_event) from [<c006735b>]
> (handle_fasteoi_irq+0x6f/0xf0)
> [<c006735b>] (handle_fasteoi_irq) from [<c0064d2f>]
> (generic_handle_irq+0x23/0x2c)
> [<c0064d2f>] (generic_handle_irq) from [<c0064f75>]
> (__handle_domain_irq+0x45/0x84)
> [<c0064f75>] (__handle_domain_irq) from [<c000856b>]
> (gic_handle_irq+0x27/0x50)
> [<c000856b>] (gic_handle_irq) from [<c00110bf>] (__irq_svc+0x3f/0x64)
> Exception stack(0xecc27e08 to 0xecc27e50)
> 7e00: 00000001 ecd6cdd8 00000000 ecd6c7c0 ee78ff00
> c003b44a
> 7e20: c103a78c ecc27e68 c080d8b8 00000001 00000000 ecd6c7c0 c0992738
> ecc27e50
> 7e40: c0055161 c05137e0 400c0033 ffffffff
> [<c00110bf>] (__irq_svc) from [<c05137e0>] (_raw_spin_unlock_irq+0x20/0x24)
> [<c05137e0>] (_raw_spin_unlock_irq) from [<c003b48d>]
> (finish_task_switch+0x99/0x16c)
> [<c003b48d>] (finish_task_switch) from [<c050f90d>] (__schedule+0x2fd/0x6f0)
> [<c050f90d>] (__schedule) from [<c050fd2f>] (schedule+0x2f/0x64)
> [<c050fd2f>] (schedule) from [<c00639a1>] (do_syslog+0x40d/0x470)
> [<c00639a1>] (do_syslog) from [<c0139cd9>] (proc_reg_read+0x49/0x6c)
> [<c0139cd9>] (proc_reg_read) from [<c00f44bd>] (vfs_read+0x55/0xb8)
> [<c00f44bd>] (vfs_read) from [<c00f4555>] (SyS_read+0x35/0x74)
> [<c00f4555>] (SyS_read) from [<c000d8c1>] (ret_fast_syscall+0x1/0x68)
>
> ---
>
> Also I don't see any message on the host side. Let me know if there's
> something wrong in my config or test commands.

Looks like a driver bug to me, .udc_start() and .udc_stop() should use
spin_(un)lock_irq(). Would you like to submit a patch ? I can also do it.

--
Regards,

Laurent Pinchart

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/