From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932442AbaDVMYt (ORCPT ); Tue, 22 Apr 2014 08:24:49 -0400 Received: from bear.ext.ti.com ([192.94.94.41]:49907 "EHLO bear.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755662AbaDVMYq (ORCPT ); Tue, 22 Apr 2014 08:24:46 -0400 Message-ID: <53565F8C.4050100@ti.com> Date: Tue, 22 Apr 2014 15:24:44 +0300 From: Roger Quadros User-Agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-Version: 1.0 To: CC: , , Subject: Re: [PATCH v2] usb: dwc3: core: Fix gadget for system suspend/resume References: <1395826989-5405-1-git-send-email-rogerq@ti.com> In-Reply-To: <1395826989-5405-1-git-send-email-rogerq@ti.com> Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Felipe, Looks like we missed this one. Could you please pick this up for -rc? Thanks. cheers, -roger On 03/26/2014 11:43 AM, Roger Quadros wrote: > During system resume, if the event buffers are not setup before > the gadget controller starts then we start with invalid context > and this can lead to bus access errors. This is especially true for > platforms that loose the controller context during system suspend. > e.g. AM437x. > > The following backtrace was found when the system is suspended > and resumed with g_zero loaded on AM437x-evm (USB cable connected > to host all the while). > > [ 120.981506] WARNING: CPU: 0 PID: 1656 at drivers/bus/omap_l3_noc.c:137 l3_interrupt_handler+0x198/0x28c() > [ 120.981514] L3 custom error: MASTER:USB0 WR TARGET:GPMC > [ 120.981638] Modules linked in: g_mass_storage usb_f_mass_storage libcomposite configfs bufferclass_ti(O) omaplfb(O) cryptodev(O) dwc3 snd_soc_evm snd_soc_omap snd_pe > [ 120.981659] CPU: 0 PID: 1656 Comm: sh Tainted: G O 3.12.10-gc559824 #1 > [ 120.981669] Backtrace: > [ 120.981705] [] (dump_backtrace+0x0/0x10c) from [] (show_stack+0x18/0x1c) > [ 120.981730] r6:c02819ac r5:00000009 r4:ec137cb8 r3:00000000 > [ 120.981767] [] (show_stack+0x0/0x1c) from [] (dump_stack+0x20/0x28) > [ 120.981802] [] (dump_stack+0x0/0x28) from [] (warn_slowpath_common+0x70/0x90) > [ 120.981830] [] (warn_slowpath_common+0x0/0x90) from [] (warn_slowpath_fmt+0x38/0x40) > [ 120.981856] r8:c0855eb0 r7:00000002 r6:f1000700 r5:00000007 r4:80080003 > [ 120.981886] [] (warn_slowpath_fmt+0x0/0x40) from [] (l3_interrupt_handler+0x198/0x28c) > [ 120.981900] r3:c0801ab8 r2:c06cb354 > [ 120.981936] [] (l3_interrupt_handler+0x0/0x28c) from [] (handle_irq_event_percpu+0x54/0x1b8) > [ 120.981962] [] (handle_irq_event_percpu+0x0/0x1b8) from [] (handle_irq_event+0x30/0x40) > [ 120.981993] [] (handle_irq_event+0x0/0x40) from [] (handle_fasteoi_irq+0x74/0x128) > [ 120.982006] r4:ed0056c0 r3:00000000 > [ 120.982033] [] (handle_fasteoi_irq+0x0/0x128) from [] (generic_handle_irq+0x28/0x38) > [ 120.982046] r4:0000002a r3:c0073fe4 > [ 120.982085] [] (generic_handle_irq+0x0/0x38) from [] (handle_IRQ+0x38/0x8c) > [ 120.982098] r4:c080137c r3:00000182 > [ 120.982124] [] (handle_IRQ+0x0/0x8c) from [] (gic_handle_irq+0x30/0x5c) > [ 120.982145] r6:ec137dd0 r5:c07ac480 r4:fa24010c r3:00000100 > [ 120.982169] [] (gic_handle_irq+0x0/0x5c) from [] (__irq_svc+0x40/0x54) > [ 120.982179] Exception stack(0xec137dd0 to 0xec137e18) > [ 120.982195] 7dc0: 00000000 a00001d3 00000000 00000004 > [ 120.982216] 7de0: a0000153 ec1d9010 c080de90 ec137e30 c080debc 00000000 ed756e44 ec137e2c > [ 120.982232] 7e00: ec137de0 ec137e18 bf1150e4 bf115474 60000153 ffffffff > [ 120.982253] r7:ec137e04 r6:ffffffff r5:60000153 r4:bf115474 > [ 120.982327] [] (dwc3_complete+0x0/0x40 [dwc3]) from [] (dpm_complete+0xd4/0x19c) > [ 120.982341] r5:ed756e10 r4:ed756e64 > [ 120.982370] [] (dpm_complete+0x0/0x19c) from [] (dpm_resume_end+0x1c/0x20) > [ 120.982400] [] (dpm_resume_end+0x0/0x20) from [] (suspend_devices_and_enter+0x118/0x33c) > [ 120.982412] r4:c0833da4 r3:00000000 > [ 120.982436] [] (suspend_devices_and_enter+0x0/0x33c) from [] (pm_suspend+0x218/0x254) > [ 120.982458] [] (pm_suspend+0x0/0x254) from [] (state_store+0x70/0xc0) > [ 120.982478] r6:c057a6cc r5:c06a8320 r4:00000003 r3:0000006d > [ 120.982515] [] (state_store+0x0/0xc0) from [] (kobj_attr_store+0x1c/0x28) > [ 120.982546] [] (kobj_attr_store+0x0/0x28) from [] (sysfs_write_file+0x170/0x1a4) > [ 120.982583] [] (sysfs_write_file+0x0/0x1a4) from [] (vfs_write+0xb8/0x190) > [ 120.982611] [] (vfs_write+0x0/0x190) from [] (SyS_write+0x44/0x78) > [ 120.982641] [] (SyS_write+0x0/0x78) from [] (ret_fast_syscall+0x0/0x30) > > Signed-off-by: Roger Quadros > Acked-by: Felipe Balbi > --- > drivers/usb/dwc3/core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index d001417..10aaaae 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -821,6 +821,7 @@ static void dwc3_complete(struct device *dev) > > spin_lock_irqsave(&dwc->lock, flags); > > + dwc3_event_buffers_setup(dwc); > switch (dwc->dr_mode) { > case USB_DR_MODE_PERIPHERAL: > case USB_DR_MODE_OTG: > @@ -828,7 +829,6 @@ static void dwc3_complete(struct device *dev) > /* FALLTHROUGH */ > case USB_DR_MODE_HOST: > default: > - dwc3_event_buffers_setup(dwc); > break; > } > >