]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/2.6.36.2/usb-musb-fix-kernel-oops-when-loading-musb_hdrc-module-for-the-2nd-time.patch
Fixes for 5.10
[thirdparty/kernel/stable-queue.git] / releases / 2.6.36.2 / usb-musb-fix-kernel-oops-when-loading-musb_hdrc-module-for-the-2nd-time.patch
CommitLineData
eaad4d6c
GKH
1From b212091474a5f967979e62c5c24687ee4d0342d9 Mon Sep 17 00:00:00 2001
2From: Ming Lei <tom.leiming@gmail.com>
3Date: Wed, 27 Oct 2010 09:42:32 -0500
4Subject: usb: musb: fix kernel oops when loading musb_hdrc module for the 2nd time
5
6From: Ming Lei <tom.leiming@gmail.com>
7
8commit b212091474a5f967979e62c5c24687ee4d0342d9 upstream.
9
10musb driver still may write MUSB_DEVCTL register after clock is disabled
11in musb_platform_exit, which may cause the kernel oops[1] when musb_hdrc
12module is loaded for the 2nd time.
13
14The patch fixes the kernel oops in this case.
15
16[1] kernel oops when loading musb_hdrc module for the 2nd time
17
18[ 93.380279] musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=5
19[ 93.387847] bus: 'platform': add driver musb_hdrc
20[ 93.388153] bus: 'platform': driver_probe_device: matched device musb_hdrc with driver musb_hdrc
21[ 93.388183] bus: 'platform': really_probe: probing driver musb_hdrc with device musb_hdrc
22[ 93.405090] HS USB OTG: revision 0x33, sysconfig 0x2010, sysstatus 0x1, intrfsel 0x1, simenable 0x0
23[ 93.405364] musb_hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO Rx, HB-ISO Tx, SoftConn)
24[ 93.405395] musb_hdrc: MHDRC RTL version 1.400
25[ 93.405426] musb_hdrc: setup fifo_mode 3
26[ 93.405456] musb_hdrc: 7/31 max ep, 3648/16384 memory
27[ 93.405487] musb_core_init 1524: musb_hdrc: hw_ep 0shared, max 64
28[ 93.405487] musb_core_init 1524: musb_hdrc: hw_ep 1tx, doublebuffer, max 512
29[ 93.405517] musb_core_init 1533: musb_hdrc: hw_ep 1rx, doublebuffer, max 512
30[ 93.405548] musb_core_init 1524: musb_hdrc: hw_ep 2tx, max 512
31[ 93.405578] musb_core_init 1533: musb_hdrc: hw_ep 2rx, max 512
32[ 93.405578] musb_core_init 1524: musb_hdrc: hw_ep 3shared, max 256
33[ 93.405609] musb_core_init 1524: musb_hdrc: hw_ep 4shared, max 256
34[ 93.405853] musb_platform_try_idle 133: b_idle inactive, for idle timer for 7 ms
35[ 93.405944] device: 'gadget': device_add
36[ 93.406921] PM: Adding info for No Bus:gadget
37[ 93.406951] musb_init_controller 2136: OTG mode, status 0, dev80
38[ 93.407379] musb_do_idle 51: musb_do_idle: state=1
39[ 93.408233] musb_hdrc musb_hdrc: USB OTG mode controller at fa0ab000 using DMA, IRQ 92
40[ 93.416656] driver: 'musb_hdrc': driver_bound: bound to device 'musb_hdrc'
41[ 93.416687] bus: 'platform': really_probe: bound device musb_hdrc to driver musb_hdrc
42[ 124.486938] bus: 'platform': remove driver musb_hdrc
43[ 124.490509] twl4030_usb twl4030_usb: twl4030_phy_suspend
44[ 124.491424] device: 'gadget': device_unregister
45[ 124.491424] PM: Removing info for No Bus:gadget
46[ 124.495269] gadget: musb_gadget_release
47[ 124.498992] driver: 'musb_hdrc': driver_release
48[ 129.569366] musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=5
49[ 129.576934] bus: 'platform': add driver musb_hdrc
50[ 129.577209] bus: 'platform': driver_probe_device: matched device musb_hdrc with driver musb_hdrc
51[ 129.577239] bus: 'platform': really_probe: probing driver musb_hdrc with device musb_hdrc
52[ 129.592651] twl4030_usb twl4030_usb: twl4030_phy_resume
53[ 129.592681] Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0ab404
54[ 129.600830] Internal error: : 1028 [#1]
55[ 129.604858] last sysfs file: /sys/devices/platform/i2c_omap.3/i2c-3/i2c-dev/i2c-3/dev
56[ 129.613067] Modules linked in: musb_hdrc(+) [last unloaded: musb_hdrc]
57[ 129.619964] CPU: 0 Not tainted (2.6.36-next-20101021+ #372)
58[ 129.626281] PC is at musb_platform_init+0xb0/0x1c8 [musb_hdrc]
59[ 129.632415] LR is at mark_held_locks+0x64/0x94
60[ 129.637084] pc : [<bf032198>] lr : [<c00ad7c4>] psr: 20000013
61[ 129.637084] sp : c6d5fcb0 ip : c6d5fc38 fp : c6d5fcd4
62[ 129.649139] r10: c6e72180 r9 : fa0ab000 r8 : c05612e8
63[ 129.654602] r7 : 0000005c r6 : c0559cc8 r5 : c6e72180 r4 : c0561548
64[ 129.661468] r3 : 04d60047 r2 : fa0ab000 r1 : c07169d8 r0 : 00000000
65[ 129.668304] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
66[ 129.675811] Control: 10c5387d Table: 86e4c019 DAC: 00000015
67[ 129.681823] Process insmod (pid: 554, stack limit = 0xc6d5e2f0)
68[ 129.688049] Stack: (0xc6d5fcb0 to 0xc6d60000)
69[ 129.692626] fca0: fa0ab000 c0555c54 c6d5fcd4 c0561548
70[ 129.701202] fcc0: 00000003 c05612e0 c6d5fe04 c6d5fcd8 bf03140c bf0320f4 c6d5fd9c c6d5fce8
71[ 129.709808] fce0: c015cb94 c041448c c06d9d10 ffffffff c6d5fd14 c6d5fd00 c00adbec c6d5fd40
72[ 129.718383] fd00: c015d478 c6d5fdb0 c6d5fd24 c00a9d18 c6d5e000 60000013 bf02a4ac c05612bc
73[ 129.726989] fd20: c0414fb4 c00a9cf0 c6d5fd54 c6d5fd38 c015bbdc c0244280 c6e8b7b0 c7929330
74[ 129.735565] fd40: c6d5fdb0 c6d5fdb0 c6d5fd7c c6e7227c c015c010 c015bb90 c015c2ac c6d5fdb0
75[ 129.744171] fd60: c7929330 c6d5fdb0 c7929330 c6e8b7b0 c6d5fd9c 00000000 c7929330 c6e8b7b0
76[ 129.752746] fd80: c6d5fdb0 00000000 00000001 00000000 c6d5fde4 c6d5fda0 c015d478 c015cb74
77[ 129.761322] fda0: c056138c 00000000 c6d5fdcc c6d5fdb8 c7929330 00000000 c056138c c05612e8
78[ 129.769927] fdc0: 00000000 c05612f0 c0c5d62c c06f6e00 c73217c0 00000000 c6d5fdf4 c05612e8
79[ 129.778503] fde0: c05612e8 bf02a2e4 c0c5d62c c06f6e00 c73217c0 00000000 c6d5fe14 c6d5fe08
80[ 129.787109] fe00: c029a398 bf0311c8 c6d5fe4c c6d5fe18 c0299120 c029a384 c7919140 22222222
81[ 129.795684] fe20: c6d5fe4c c05612e8 c056131c bf02a2e4 c0299278 c06f6e00 c73217c0 00000000
82[ 129.804290] fe40: c6d5fe6c c6d5fe50 c0299314 c0299020 00000000 c6d5fe70 bf02a2e4 c0299278
83[ 129.812866] fe60: c6d5fe94 c6d5fe70 c02987d4 c0299284 c7825060 c78c6618 00000000 bf02a2e4
84[ 129.821441] fe80: c06e4c98 00000000 c6d5fea4 c6d5fe98 c0298ea4 c0298778 c6d5fedc c6d5fea8
85[ 129.830047] fea0: c0297f84 c0298e8c bf02716c 000b9008 bf02a2e4 bf02a2d0 000b9008 bf02a2e4
86[ 129.838623] fec0: 00000000 c06f6e00 bf031000 00000000 c6d5fefc c6d5fee0 c0299614 c0297ec0
87[ 129.847229] fee0: bf02a2d0 000b9008 bf02a388 00000000 c6d5ff0c c6d5ff00 c029a868 c02995a8
88[ 129.855804] ff00: c6d5ff24 c6d5ff10 c029a88c c029a818 0010281c 000b9008 c6d5ff34 c6d5ff28
89[ 129.864410] ff20: bf03104c c029a878 c6d5ff7c c6d5ff38 c00463dc bf03100c 00000000 00000000
90[ 129.872985] ff40: 00000000 0010281c 000b9008 bf02a388 00000000 0010281c 000b9008 bf02a388
91[ 129.881591] ff60: 00000000 c00521c8 c6d5e000 00000000 c6d5ffa4 c6d5ff80 c00bb9b8 c00463ac
92[ 129.890167] ff80: c00adc88 c00ada68 00097e8e bebbfcf4 0010281c 00000080 00000000 c6d5ffa8
93[ 129.898742] ffa0: c0052000 c00bb908 00097e8e bebbfcf4 402c9008 0010281c 000b9008 bebbfe5a
94[ 129.907348] ffc0: 00097e8e bebbfcf4 0010281c 00000080 00000014 bebbfcf4 bebbfe06 0000005b
95[ 129.915924] ffe0: bebbf9a0 bebbf990 0001a108 40263ec0 60000010 402c9008 011b0000 0000007c
96[ 129.924499] Backtrace:
97[ 129.927185] [<bf0320e8>] (musb_platform_init+0x0/0x1c8 [musb_hdrc]) from [<bf03140c>] (musb_probe+0x250/0xf2c [musb_hdrc])
98[ 129.938781] r6:c05612e0 r5:00000003 r4:c0561548
99[ 129.943695] [<bf0311bc>] (musb_probe+0x0/0xf2c [musb_hdrc]) from [<c029a398>] (platform_drv_probe+0x20/0x24)
100[ 129.954040] [<c029a378>] (platform_drv_probe+0x0/0x24) from [<c0299120>] (driver_probe_device+0x10c/0x264)
101[ 129.964172] [<c0299014>] (driver_probe_device+0x0/0x264) from [<c0299314>] (__driver_attach+0x9c/0xa0)
102[ 129.973968] [<c0299278>] (__driver_attach+0x0/0xa0) from [<c02987d4>] (bus_for_each_dev+0x68/0x94)
103[ 129.983367] r7:c0299278 r6:bf02a2e4 r5:c6d5fe70 r4:00000000
104[ 129.989349] [<c029876c>] (bus_for_each_dev+0x0/0x94) from [<c0298ea4>] (driver_attach+0x24/0x28)
105[ 129.998565] r7:00000000 r6:c06e4c98 r5:bf02a2e4 r4:00000000
106[ 130.004547] [<c0298e80>] (driver_attach+0x0/0x28) from [<c0297f84>] (bus_add_driver+0xd0/0x274)
107[ 130.013671] [<c0297eb4>] (bus_add_driver+0x0/0x274) from [<c0299614>] (driver_register+0x78/0x158)
108[ 130.023101] [<c029959c>] (driver_register+0x0/0x158) from [<c029a868>] (platform_driver_register+0x5c/0x60)
109[ 130.033325] r7:00000000 r6:bf02a388 r5:000b9008 r4:bf02a2d0
110[ 130.039276] [<c029a80c>] (platform_driver_register+0x0/0x60) from [<c029a88c>] (platform_driver_probe+0x20/0xa8)
111[ 130.050018] [<c029a86c>] (platform_driver_probe+0x0/0xa8) from [<bf03104c>] (musb_init+0x4c/0x54 [musb_hdrc])
112[ 130.060424] r5:000b9008 r4:0010281c
113[ 130.064239] [<bf031000>] (musb_init+0x0/0x54 [musb_hdrc]) from [<c00463dc>] (do_one_initcall+0x3c/0x1c0)
114[ 130.074218] [<c00463a0>] (do_one_initcall+0x0/0x1c0) from [<c00bb9b8>] (sys_init_module+0xbc/0x1d0)
115[ 130.083709] [<c00bb8fc>] (sys_init_module+0x0/0x1d0) from [<c0052000>] (ret_fast_syscall+0x0/0x3c)
116[ 130.093109] r7:00000080 r6:0010281c r5:bebbfcf4 r4:00097e8e
117[ 130.099090] Code: 0a000046 e3a01001 e12fff33 e59520e4 (e5923404)
118[ 130.105621] ---[ end trace 1d0bd69deb79164d ]---
119
120Cc: Ajay Kumar Gupta <ajay.gupta@ti.com>
121Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
122Cc: Anand Gadiyar <gadiyar@ti.com>
123Signed-off-by: Ming Lei <tom.leiming@gmail.com>
124Signed-off-by: Felipe Balbi <balbi@ti.com>
125Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
126
127---
128 drivers/usb/musb/musb_core.c | 1 -
129 1 file changed, 1 deletion(-)
130
131--- a/drivers/usb/musb/musb_core.c
132+++ b/drivers/usb/musb/musb_core.c
133@@ -2243,7 +2243,6 @@ static int __exit musb_remove(struct pla
134 #endif
135 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
136 musb_platform_exit(musb);
137- musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
138
139 musb_free(musb);
140 iounmap(ctrl_base);