* OMAP3: enabling CPU idle leads to panic
@ 2009-11-24 15:13 Sergey Lapin
2009-11-24 18:27 ` Kevin Hilman
0 siblings, 1 reply; 14+ messages in thread
From: Sergey Lapin @ 2009-11-24 15:13 UTC (permalink / raw)
To: linux-omap
Hi, all!
I use PM branch merged with linux-omap branch. A board is custom, so I
can't bisect this problem
(and I don't know latest working revision). It seems that's because
missing clock domain somewhere,
[16515.695617] Unable to handle kernel NULL pointer dereference at
virtual address 00000020
[16515.703735] pgd = c0004000
[16515.706481] [00000020] *pgd=00000000
[16515.710083] Internal error: Oops: 5 [#1] PREEMPT
[16515.714721] last sysfs file:
[16515.717712] Modules linked in:
[16515.720794] CPU: 0 Not tainted (2.6.32-rc8-07113-g318afc6 #110)
[16515.727111] PC is at pwrdm_for_each_clkdm+0x34/0x88
[16515.731994] LR is at pwrdm_for_each_clkdm+0x24/0x88
[16515.736907] pc : [<c003b5c0>] lr : [<c003b5b0>] psr: 600000d3
[16515.736938] sp : c03f3f68 ip : fa004800 fp : 00000000
[16515.748474] r10: c003e81c r9 : 411fc082 r8 : 00000000
[16515.753723] r7 : a00000d3 r6 : 00000000 r5 : 00000004 r4 : 00000001
[16515.760284] r3 : 00000002 r2 : c03f2000 r1 : 00000001 r0 : 00000000
[16515.766845] Flags: nZCv IRQs off FIQs off Mode SVC_32 ISA ARM
Segment kernel
[16515.774383] Control: 10c5387d Table: 80004019 DAC: 00000017
[16515.780151] Process swapper (pid: 0, stack limit = 0xc03f22e8)
[16515.786010] Stack: (0xc03f3f68 to 0xc03f4000)
[16515.790405] 3f60: c042e4bc 00000003 00000003
c042e4bc 80026398 411fc082
[16515.798645] 3f80: 0000001f c003e76c 00000000 c022f284 00271d5a
00000000 00000005 0ec00c5c
[16515.806854] 3fa0: c03f8640 c03f8710 c042dadc c03f8640 c0474d0c
c022dee8 c03f2000 c042dadc
[16515.815093] 3fc0: c0027e14 c03f5bd0 80026398 c002f49c c0459fa4
c0008914 c0008478 00000000
[16515.823333] 3fe0: 00000000 c0027e18 00000000 10c53c7d c042dbf0
80008034 00000000 00000000
[16515.831573] [<c003b5c0>] (pwrdm_for_each_clkdm+0x34/0x88) from
[<c003e76c>] (omap3_enter_idle+0xc0/0x15c)
[16515.841217] [<c003e76c>] (omap3_enter_idle+0xc0/0x15c) from
[<c022dee8>] (cpuidle_idle_call+0xa4/0x180)
[16515.850677] [<c022dee8>] (cpuidle_idle_call+0xa4/0x180) from
[<c002f49c>] (cpu_idle+0x48/0x98)
[16515.859344] [<c002f49c>] (cpu_idle+0x48/0x98) from [<c0008914>]
(start_kernel+0x250/0x2a8)
[16515.867675] [<c0008914>] (start_kernel+0x250/0x2a8) from
[<80008034>] (0x80008034)
[16515.875274] Code: e3a06000 e1a05008 e1a04006 ea000002 (e595101c)
[16515.881530] ---[ end trace f0a89c74ea639f01 ]---
[16515.886230] Kernel panic - not syncing: Attempted to kill the idle task!
addr2line -e vmlinux c003b5c0
/home/slapin/linux-omap-my-2.6.git/arch/arm/mach-omap2/powerdomain.c:452
It is in function
int pwrdm_for_each_clkdm(), where pwrdm is NULL.
farther investigations found that "core_pwrdm" is defined only for 24xx,
but I use 3525, and it is being searched.
This is where variable allocated. If I add BUG_ON(!core_pd), it crashes here.
arch/arm/mach-omap2/cpuidle34xx.c:348: core_pd = pwrdm_lookup("core_pwrdm");
Otherwise it crashes the above way. Any ideas on how to fix this?
S.
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: OMAP3: enabling CPU idle leads to panic 2009-11-24 15:13 OMAP3: enabling CPU idle leads to panic Sergey Lapin @ 2009-11-24 18:27 ` Kevin Hilman 2009-11-24 20:21 ` Premi, Sanjeev 0 siblings, 1 reply; 14+ messages in thread From: Kevin Hilman @ 2009-11-24 18:27 UTC (permalink / raw) To: Sergey Lapin, Sanjeev Premi; +Cc: linux-omap Sergey Lapin <slapinid@gmail.com> writes: > I use PM branch merged with linux-omap branch. Not sure what this means. PM branch is already based at linux-omap master branch. You'll need to be more specific, ideally with commit IDs. > A board is custom, so I can't bisect this problem (and I don't know > latest working revision). > > It seems that's because missing clock domain somewhere, > > > [16515.695617] Unable to handle kernel NULL pointer dereference at > virtual address 00000020 > [16515.703735] pgd = c0004000 > [16515.706481] [00000020] *pgd=00000000 > [16515.710083] Internal error: Oops: 5 [#1] PREEMPT > [16515.714721] last sysfs file: > [16515.717712] Modules linked in: > [16515.720794] CPU: 0 Not tainted (2.6.32-rc8-07113-g318afc6 #110) > [16515.727111] PC is at pwrdm_for_each_clkdm+0x34/0x88 > [16515.731994] LR is at pwrdm_for_each_clkdm+0x24/0x88 > [16515.736907] pc : [<c003b5c0>] lr : [<c003b5b0>] psr: 600000d3 > [16515.736938] sp : c03f3f68 ip : fa004800 fp : 00000000 > [16515.748474] r10: c003e81c r9 : 411fc082 r8 : 00000000 > [16515.753723] r7 : a00000d3 r6 : 00000000 r5 : 00000004 r4 : 00000001 > [16515.760284] r3 : 00000002 r2 : c03f2000 r1 : 00000001 r0 : 00000000 > [16515.766845] Flags: nZCv IRQs off FIQs off Mode SVC_32 ISA ARM > Segment kernel > [16515.774383] Control: 10c5387d Table: 80004019 DAC: 00000017 > [16515.780151] Process swapper (pid: 0, stack limit = 0xc03f22e8) > [16515.786010] Stack: (0xc03f3f68 to 0xc03f4000) > [16515.790405] 3f60: c042e4bc 00000003 00000003 > c042e4bc 80026398 411fc082 > [16515.798645] 3f80: 0000001f c003e76c 00000000 c022f284 00271d5a > 00000000 00000005 0ec00c5c > [16515.806854] 3fa0: c03f8640 c03f8710 c042dadc c03f8640 c0474d0c > c022dee8 c03f2000 c042dadc > [16515.815093] 3fc0: c0027e14 c03f5bd0 80026398 c002f49c c0459fa4 > c0008914 c0008478 00000000 > [16515.823333] 3fe0: 00000000 c0027e18 00000000 10c53c7d c042dbf0 > 80008034 00000000 00000000 > [16515.831573] [<c003b5c0>] (pwrdm_for_each_clkdm+0x34/0x88) from > [<c003e76c>] (omap3_enter_idle+0xc0/0x15c) > [16515.841217] [<c003e76c>] (omap3_enter_idle+0xc0/0x15c) from > [<c022dee8>] (cpuidle_idle_call+0xa4/0x180) > [16515.850677] [<c022dee8>] (cpuidle_idle_call+0xa4/0x180) from > [<c002f49c>] (cpu_idle+0x48/0x98) > [16515.859344] [<c002f49c>] (cpu_idle+0x48/0x98) from [<c0008914>] > (start_kernel+0x250/0x2a8) > [16515.867675] [<c0008914>] (start_kernel+0x250/0x2a8) from > [<80008034>] (0x80008034) > [16515.875274] Code: e3a06000 e1a05008 e1a04006 ea000002 (e595101c) > [16515.881530] ---[ end trace f0a89c74ea639f01 ]--- > [16515.886230] Kernel panic - not syncing: Attempted to kill the idle task! > > > addr2line -e vmlinux c003b5c0 > /home/slapin/linux-omap-my-2.6.git/arch/arm/mach-omap2/powerdomain.c:452 > It is in function > int pwrdm_for_each_clkdm(), where pwrdm is NULL. > farther investigations found that "core_pwrdm" is defined only for 24xx, > but I use 3525, and it is being searched. > > This is where variable allocated. If I add BUG_ON(!core_pd), it crashes here. > arch/arm/mach-omap2/cpuidle34xx.c:348: core_pd = pwrdm_lookup("core_pwrdm"); > Otherwise it crashes the above way. Any ideas on how to fix this? I think there is still ongoing work on support for the 3525. I'm guessing the clock/pwrdm init still needs work for that SoC. I have no 3525 hardware, but maybe Sanjeev has more details. Kevin ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: OMAP3: enabling CPU idle leads to panic 2009-11-24 18:27 ` Kevin Hilman @ 2009-11-24 20:21 ` Premi, Sanjeev 2009-11-25 15:37 ` Sergey Lapin 0 siblings, 1 reply; 14+ messages in thread From: Premi, Sanjeev @ 2009-11-24 20:21 UTC (permalink / raw) To: Kevin Hilman, Sergey Lapin; +Cc: linux-omap@vger.kernel.org From: Kevin Hilman [khilman@deeprootsystems.com] Sent: Tuesday, November 24, 2009 11:57 PM To: Sergey Lapin; Premi, Sanjeev Cc: linux-omap@vger.kernel.org Subject: Re: OMAP3: enabling CPU idle leads to panic Sergey Lapin <slapinid@gmail.com> writes: > I use PM branch merged with linux-omap branch. Not sure what this means. PM branch is already based at linux-omap master branch. You'll need to be more specific, ideally with commit IDs. [sp] I will also need the last commit from pm branch - if not the id; the commit header to start. [snip]--[snip] > > addr2line -e vmlinux c003b5c0 > /home/slapin/linux-omap-my-2.6.git/arch/arm/mach-omap2/powerdomain.c:452 > It is in function > int pwrdm_for_each_clkdm(), where pwrdm is NULL. > farther investigations found that "core_pwrdm" is defined only for 24xx, > but I use 3525, and it is being searched. [sp] I am a little confused here. core_pwrdm is defined for 34xx as well. Other than sgx, there isn't any difference between 3530 and 3525. See the definition at: http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=blob;f=arch/arm/mach-omap2/powerdomains34xx.h;hb=867d320b6c30d2478358eafeca0e1a6c60cf06c3#l203 > > This is where variable allocated. If I add BUG_ON(!core_pd), it crashes here. > arch/arm/mach-omap2/cpuidle34xx.c:348: core_pd = pwrdm_lookup("core_pwrdm"); > Otherwise it crashes the above way. Any ideas on how to fix this? [sp] Have you hand-picked the commits from pm branch and applied against master? Best regards, Sanjeev PS: responding thru a web client. It doesn't seem to support quoting the original message. I think there is still ongoing work on support for the 3525. I'm guessing the clock/pwrdm init still needs work for that SoC. I have no 3525 hardware, but maybe Sanjeev has more details. Kevin ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-24 20:21 ` Premi, Sanjeev @ 2009-11-25 15:37 ` Sergey Lapin 2009-11-25 17:31 ` Kevin Hilman 0 siblings, 1 reply; 14+ messages in thread From: Sergey Lapin @ 2009-11-25 15:37 UTC (permalink / raw) To: Premi, Sanjeev; +Cc: Kevin Hilman, linux-omap@vger.kernel.org On Tue, Nov 24, 2009 at 11:21 PM, Premi, Sanjeev <premi@ti.com> wrote: > From: Kevin Hilman [khilman@deeprootsystems.com] > Sent: Tuesday, November 24, 2009 11:57 PM > To: Sergey Lapin; Premi, Sanjeev > Cc: linux-omap@vger.kernel.org > Subject: Re: OMAP3: enabling CPU idle leads to panic > > Sergey Lapin <slapinid@gmail.com> writes: > >> I use PM branch merged with linux-omap branch. > > Not sure what this means. PM branch is already based at linux-omap > master branch. You'll need to be more specific, ideally with commit > IDs. I do git branch tmp origin/master git checkout -f tmp git merge origin/pm git merge origin/mybranch git log origin/pm^..origin/pm commit 596f2d2c8153fe24de5c3b6ad78658ce9fff7f28 Author: Kevin Hilman <khilman@deeprootsystems.com> Date: Wed Jun 17 14:42:22 2009 -0700 OMAP3: PM: default defconfig for PM kernel testing Supports 3430SDP, OMAP3EVM and 3630SDP by default. Also supports, Beagle, Overo, Zoom[23] and RX51 simply by changing System Type-->TI OMAP implementations-->Low-level debug console UART from UART1 to UART3. Signed-off-by: Kevin Hilman <khilman@ti.deeprootsystems.com> > > [sp] I will also need the last commit from pm branch - if not the id; the > commit header to start. See above > > [snip]--[snip] > >> >> addr2line -e vmlinux c003b5c0 >> /home/slapin/linux-omap-my-2.6.git/arch/arm/mach-omap2/powerdomain.c:452 >> It is in function >> int pwrdm_for_each_clkdm(), where pwrdm is NULL. >> farther investigations found that "core_pwrdm" is defined only for 24xx, >> but I use 3525, and it is being searched. > > [sp] I am a little confused here. core_pwrdm is defined for 34xx as well. > Other than sgx, there isn't any difference between 3530 and 3525. Yes, I see that in source, but that function returns NULL for unknown reason. How could I debug it farther? > See the definition at: > http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=blob;f=arch/arm/mach-omap2/powerdomains34xx.h;hb=867d320b6c30d2478358eafeca0e1a6c60cf06c3#l203 > Yes, there is. >> >> This is where variable allocated. If I add BUG_ON(!core_pd), it crashes here. >> arch/arm/mach-omap2/cpuidle34xx.c:348: core_pd = pwrdm_lookup("core_pwrdm"); >> Otherwise it crashes the above way. Any ideas on how to fix this? > > [sp] Have you hand-picked the commits from pm branch and applied against > master? See above. I use git merge on fresh branch based on linux-omap master. Thanks a lot, S. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-25 15:37 ` Sergey Lapin @ 2009-11-25 17:31 ` Kevin Hilman 2009-11-27 10:02 ` Sergey Lapin 0 siblings, 1 reply; 14+ messages in thread From: Kevin Hilman @ 2009-11-25 17:31 UTC (permalink / raw) To: Sergey Lapin; +Cc: Premi, Sanjeev, linux-omap@vger.kernel.org Sergey Lapin <slapinid@gmail.com> writes: > On Tue, Nov 24, 2009 at 11:21 PM, Premi, Sanjeev <premi@ti.com> wrote: >> From: Kevin Hilman [khilman@deeprootsystems.com] >> Sent: Tuesday, November 24, 2009 11:57 PM >> To: Sergey Lapin; Premi, Sanjeev >> Cc: linux-omap@vger.kernel.org >> Subject: Re: OMAP3: enabling CPU idle leads to panic >> >> Sergey Lapin <slapinid@gmail.com> writes: >> >>> I use PM branch merged with linux-omap branch. >> >> Not sure what this means. PM branch is already based at linux-omap >> master branch. You'll need to be more specific, ideally with commit >> IDs. > > I do git branch tmp origin/master > git checkout -f tmp > git merge origin/pm The pm branch is already based on l-o master, but perhaps not the very latest. Instead of the above can you just do git branch tmp origin/pm git checkout -f tmp > git merge origin/mybranch It might if you base your 'mybranch' at the same merge point that the pm branch is based at. You can find the merge point using: git merge-base origin/master origin/pm Kevin ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-25 17:31 ` Kevin Hilman @ 2009-11-27 10:02 ` Sergey Lapin 2009-11-27 10:48 ` Sergey Lapin 0 siblings, 1 reply; 14+ messages in thread From: Sergey Lapin @ 2009-11-27 10:02 UTC (permalink / raw) To: Kevin Hilman; +Cc: Premi, Sanjeev, linux-omap@vger.kernel.org Sorry, I forgot to reply to list with this email. On Wed, Nov 25, 2009 at 8:31 PM, Kevin Hilman <khilman@deeprootsystems.com> wrote: > Sergey Lapin <slapinid@gmail.com> writes: > >> On Tue, Nov 24, 2009 at 11:21 PM, Premi, Sanjeev <premi@ti.com> wrote: >>> From: Kevin Hilman [khilman@deeprootsystems.com] >>> Sent: Tuesday, November 24, 2009 11:57 PM >>> To: Sergey Lapin; Premi, Sanjeev >>> Cc: linux-omap@vger.kernel.org >>> Subject: Re: OMAP3: enabling CPU idle leads to panic >>> >>> Sergey Lapin <slapinid@gmail.com> writes: >>> >>>> I use PM branch merged with linux-omap branch. >>> >>> Not sure what this means. PM branch is already based at linux-omap >>> master branch. You'll need to be more specific, ideally with commit >>> IDs. >> >> I do git branch tmp origin/master >> git checkout -f tmp >> git merge origin/pm > > The pm branch is already based on l-o master, but perhaps not the very > latest. Instead of the above can you just do > > git branch tmp origin/pm > git checkout -f tmp > >> git merge origin/mybranch > > It might if you base your 'mybranch' at the same merge point that the > pm branch is based at. You can find the merge point using: > > git merge-base origin/master origin/pm Well, thanks for advice, I changed my merge script accordingly, but nothing changed. I still get panic. [ 21.591064] Unable to handle kernel NULL pointer dereference at virtual address 00000020 [ 21.599212] pgd = c0004000 [ 21.601928] [00000020] *pgd=00000000 [ 21.605529] Internal error: Oops: 5 [#1] PREEMPT [ 21.610168] last sysfs file: [ 21.613159] Modules linked in: [ 21.616241] CPU: 0 Not tainted (2.6.32-rc8-07040-g4594b2e #117) [ 21.622558] PC is at pwrdm_for_each_clkdm+0x34/0x88 [ 21.627441] LR is at pwrdm_for_each_clkdm+0x24/0x88 [ 21.632354] pc : [<c003b5c0>] lr : [<c003b5b0>] psr: 600000d3 [ 21.632385] sp : c03f3f68 ip : fa004800 fp : 00000000 [ 21.643920] r10: c003e840 r9 : 411fc082 r8 : 00000000 [ 21.649169] r7 : a00000d3 r6 : 00000000 r5 : 00000004 r4 : 00000001 [ 21.655731] r3 : 00000002 r2 : c03f2000 r1 : 00000001 r0 : 00000000 [ 21.662292] Flags: nZCv IRQs off FIQs off Mode SVC_32 ISA ARM Segment kernel [ 21.669830] Control: 10c5387d Table: 80004019 DAC: 00000017 [ 21.675598] Process swapper (pid: 0, stack limit = 0xc03f22e8) [ 21.681457] Stack: (0xc03f3f68 to 0xc03f4000) [ 21.685852] 3f60: c042e4bc 00000003 00000003 c042e4bc 800263f4 411fc082 [ 21.694091] 3f80: 0000001f c003e790 00000000 c022f3b8 000253d2 00000000 00000005 0ee4d5e4 [ 21.702301] 3fa0: c03f8640 c03f8650 c042dadc c03f8640 c0474d4c c022e01c c03f2000 c042dadc [ 21.710540] 3fc0: c0027e14 c03f5bd0 800263f4 c002f49c c0459fe4 c0008914 c0008478 00000000 [ 21.718780] 3fe0: 00000000 c0027e18 00000000 10c53c7d c042dbf0 80008034 00000000 00000000 [ 21.727020] [<c003b5c0>] (pwrdm_for_each_clkdm+0x34/0x88) from [<c003e790>] (omap3_enter_idle+0xc0/0x15c) [ 21.736663] [<c003e790>] (omap3_enter_idle+0xc0/0x15c) from [<c022e01c>] (cpuidle_idle_call+0xa4/0x180) [ 21.746124] [<c022e01c>] (cpuidle_idle_call+0xa4/0x180) from [<c002f49c>] (cpu_idle+0x48/0x98) [ 21.754791] [<c002f49c>] (cpu_idle+0x48/0x98) from [<c0008914>] (start_kernel+0x250/0x2a8) [ 21.763122] [<c0008914>] (start_kernel+0x250/0x2a8) from [<80008034>] (0x80008034) [ 21.770751] Code: e3a06000 e1a05008 e1a04006 ea000002 (e595101c) [ 21.777008] ---[ end trace 2d4ee201e3556cfe ]--- [ 21.781707] Kernel panic - not syncing: Attempted to kill the idle task! If I add the following patch: diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index 1cfa5a6..6a12e53 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c @@ -346,6 +346,7 @@ int __init omap3_idle_init(void) mpu_pd = pwrdm_lookup("mpu_pwrdm"); core_pd = pwrdm_lookup("core_pwrdm"); + BUG_ON(!core_pd); omap_init_power_states(); cpuidle_register_driver(&omap3_idle_driver); kernel dies right on BUG_ON. Also, I patched pwrdm_lookup to print all perdms if returning NULL, ant there was no core_pwrdm there :( Is core_pwrdm used only with idle? When I disable cpu idle, I have no panics. Update: I continued my investigation. I added the following patch to kernel: diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index b6990e3..35a5bd0 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c @@ -185,7 +185,15 @@ void pwrdm_init(struct powerdomain **pwrdm_list) if (pwrdm_list) { for (p = pwrdm_list; *p; p++) { - pwrdm_register(*p); +#ifdef CONFIG_DEBUG_LL + int i; + extern void printascii(char *); + printascii((*p)->name); + printascii("\n"); +#endif + i = pwrdm_register(*p); + if (i < 0) + printascii("Damn\n"); _pwrdm_setup(*p); } } And got the following output with CONFIG_DEBUG_LL enabled: gfx_pwrdm Damn wkup_pwrdm iva2_pwrdm mpu_pwrdm neon_pwrdm core_pwrdm Damn core_pwrdm Damn cam_pwrdm dss_pwrdm per_pwrdm emu_pwrdm sgx_pwrdm Damn usbhost_pwrdm Damn dpll1_pwrdm dpll2_pwrdm dpll3_pwrdm dpll4_pwrdm dpll5_pwrdm Damn <3>clockdomain: cm_clkdm: powerdomain core_pwrdm does not exist <3>clockdomain: d2d_clkdm: powerdomain core_pwrdm does not exist <3>clockdomain: core_l3_clkdm: powerdomain core_pwrdm does not exist <3>clockdomain: core_l4_clkdm: powerdomain core_pwrdm does not exist <6>Clocking rate (Crystal/Core/MPU): 26.0/166/500 MHz <6>Reprogramming SDRC clock to 166000000 Hz So, as I see here, core_pwrdm and some others are failed to register. Any ideas? S. S. ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-27 10:02 ` Sergey Lapin @ 2009-11-27 10:48 ` Sergey Lapin 2009-11-27 11:02 ` Premi, Sanjeev 0 siblings, 1 reply; 14+ messages in thread From: Sergey Lapin @ 2009-11-27 10:48 UTC (permalink / raw) To: Kevin Hilman; +Cc: Premi, Sanjeev, linux-omap@vger.kernel.org Hi, all! I've found the particular reason for my troubles with CPU idle, since there's no core_pwrdm defined for OMAP3525 CPU. How could I create soch structure or is there anybody having this handy? 3523 is basically 3530 without 3D graphics. ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: OMAP3: enabling CPU idle leads to panic 2009-11-27 10:48 ` Sergey Lapin @ 2009-11-27 11:02 ` Premi, Sanjeev 2009-11-27 11:32 ` Sergey Lapin 0 siblings, 1 reply; 14+ messages in thread From: Premi, Sanjeev @ 2009-11-27 11:02 UTC (permalink / raw) To: Sergey Lapin, Kevin Hilman; +Cc: linux-omap@vger.kernel.org > -----Original Message----- > From: Sergey Lapin [mailto:slapinid@gmail.com] > Sent: Friday, November 27, 2009 4:19 PM > To: Kevin Hilman > Cc: Premi, Sanjeev; linux-omap@vger.kernel.org > Subject: Re: OMAP3: enabling CPU idle leads to panic > > Hi, all! > > I've found the particular reason for my troubles with CPU idle, > since there's no core_pwrdm defined for OMAP3525 CPU. > > How could I create soch structure or is there anybody having > this handy? > 3523 is basically 3530 without 3D graphics. > The core_pwdm is defined in powerdomains34xx.h based on CONFIG_ARCH_OMAP34XX. This should be true for OMAP3525 as well. ~sanjeev ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-27 11:02 ` Premi, Sanjeev @ 2009-11-27 11:32 ` Sergey Lapin 2009-11-27 11:36 ` Sergey Lapin 0 siblings, 1 reply; 14+ messages in thread From: Sergey Lapin @ 2009-11-27 11:32 UTC (permalink / raw) To: Premi, Sanjeev; +Cc: Kevin Hilman, linux-omap@vger.kernel.org On Fri, Nov 27, 2009 at 2:02 PM, Premi, Sanjeev <premi@ti.com> wrote: >> -----Original Message----- >> From: Sergey Lapin [mailto:slapinid@gmail.com] >> Sent: Friday, November 27, 2009 4:19 PM >> To: Kevin Hilman >> Cc: Premi, Sanjeev; linux-omap@vger.kernel.org >> Subject: Re: OMAP3: enabling CPU idle leads to panic >> >> Hi, all! >> >> I've found the particular reason for my troubles with CPU idle, >> since there's no core_pwrdm defined for OMAP3525 CPU. >> >> How could I create soch structure or is there anybody having >> this handy? >> 3523 is basically 3530 without 3D graphics. >> > The core_pwdm is defined in powerdomains34xx.h based on > CONFIG_ARCH_OMAP34XX. This should be true for OMAP3525 as well. Alas, that's not because omap_chip_is() function fails on these structures. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-27 11:32 ` Sergey Lapin @ 2009-11-27 11:36 ` Sergey Lapin 2009-11-27 12:02 ` Sergey Lapin 0 siblings, 1 reply; 14+ messages in thread From: Sergey Lapin @ 2009-11-27 11:36 UTC (permalink / raw) To: Premi, Sanjeev; +Cc: Kevin Hilman, linux-omap@vger.kernel.org > > Alas, that's not because omap_chip_is() function fails > on these structures. > I mean during registration of power domains. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-27 11:36 ` Sergey Lapin @ 2009-11-27 12:02 ` Sergey Lapin 2009-11-27 12:18 ` Premi, Sanjeev 0 siblings, 1 reply; 14+ messages in thread From: Sergey Lapin @ 2009-11-27 12:02 UTC (permalink / raw) To: Premi, Sanjeev; +Cc: Kevin Hilman, linux-omap@vger.kernel.org On Fri, Nov 27, 2009 at 2:36 PM, Sergey Lapin <slapinid@gmail.com> wrote: >> >> Alas, that's not because omap_chip_is() function fails >> on these structures. >> > > I mean during registration of power domains. > int pwrdm_register(struct powerdomain *pwrdm) { unsigned long flags; int ret = -EINVAL; if (!pwrdm) return -EINVAL; if (!omap_chip_is(pwrdm->omap_chip)) return -EINVAL; returns -EINVAL for pwrdm_core (both of them), so I get panic later. Since OMAP2525 vs 3515 were messed-up, I think there could be more problems there. diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index 2e17890..8b15789 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h @@ -393,11 +393,11 @@ IS_OMAP_TYPE(3517, 0x3517) (!omap3_has_iva()) && \ (!omap3_has_sgx())) # define cpu_is_omap3515() (cpu_is_omap3430() && \ - (omap3_has_iva()) && \ - (!omap3_has_sgx())) + (!omap3_has_iva()) && \ + (omap3_has_sgx())) # define cpu_is_omap3525() (cpu_is_omap3430() && \ - (omap3_has_sgx()) && \ - (!omap3_has_iva())) + (!omap3_has_sgx()) && \ + (omap3_has_iva())) # define cpu_is_omap3530() (cpu_is_omap3430()) # define cpu_is_omap3505() is_omap3505() # define cpu_is_omap3517() is_omap3517() since OMAP3525 has iva but misses sgx, and vice versa 3515 has sgx but has no iva. I missed this piece before, but just accidentally found it now. I don't know if these are related, but this doesn't fix my problem with core_pwrdm. S. ^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: OMAP3: enabling CPU idle leads to panic 2009-11-27 12:02 ` Sergey Lapin @ 2009-11-27 12:18 ` Premi, Sanjeev 2009-11-27 12:37 ` Sergey Lapin 0 siblings, 1 reply; 14+ messages in thread From: Premi, Sanjeev @ 2009-11-27 12:18 UTC (permalink / raw) To: Sergey Lapin; +Cc: Kevin Hilman, linux-omap@vger.kernel.org > -----Original Message----- > From: Sergey Lapin [mailto:slapinid@gmail.com] > Sent: Friday, November 27, 2009 5:33 PM > To: Premi, Sanjeev > Cc: Kevin Hilman; linux-omap@vger.kernel.org > Subject: Re: OMAP3: enabling CPU idle leads to panic > > On Fri, Nov 27, 2009 at 2:36 PM, Sergey Lapin > <slapinid@gmail.com> wrote: > >> > >> Alas, that's not because omap_chip_is() function fails > >> on these structures. > >> > > > > I mean during registration of power domains. > > > > int pwrdm_register(struct powerdomain *pwrdm) > { > unsigned long flags; > int ret = -EINVAL; > > if (!pwrdm) > return -EINVAL; > > if (!omap_chip_is(pwrdm->omap_chip)) > return -EINVAL; > returns -EINVAL for pwrdm_core (both of them), so I get panic later. > Since OMAP2525 vs 3515 were messed-up, I think there could be more > problems there. > > diff --git a/arch/arm/plat-omap/include/plat/cpu.h > b/arch/arm/plat-omap/include/plat/cpu.h > index 2e17890..8b15789 100644 > --- a/arch/arm/plat-omap/include/plat/cpu.h > +++ b/arch/arm/plat-omap/include/plat/cpu.h > @@ -393,11 +393,11 @@ IS_OMAP_TYPE(3517, 0x3517) > > (!omap3_has_iva()) && \ > (!omap3_has_sgx())) > # define cpu_is_omap3515() (cpu_is_omap3430() && > \ > - > (omap3_has_iva()) && \ > - (!omap3_has_sgx())) > + > (!omap3_has_iva()) && \ > + (omap3_has_sgx())) > # define cpu_is_omap3525() (cpu_is_omap3430() && > \ > - > (omap3_has_sgx()) && \ > - (!omap3_has_iva())) > + > (!omap3_has_sgx()) && \ > + (omap3_has_iva())) > # define cpu_is_omap3530() (cpu_is_omap3430()) > # define cpu_is_omap3505() is_omap3505() > # define cpu_is_omap3517() is_omap3517() > > since OMAP3525 has iva but misses sgx, and vice versa 3515 has sgx but > has no iva. > I missed this piece before, but just accidentally found it now. I > don't know if these are > related, but this doesn't fix my problem with core_pwrdm. > > S. I feel, the problem could be due to this snippet below. omap_rev() does a compare against omap_revision not just the revision bits. Had submitted a patch earlier; will need some time to find it. } else if (cpu_is_omap343x()) { omap_chip.oc = CHIP_IS_OMAP3430; if (omap_rev() == OMAP3430_REV_ES1_0) omap_chip.oc |= CHIP_IS_OMAP3430ES1; else if (omap_rev() >= OMAP3430_REV_ES2_0 && omap_rev() <= OMAP3430_REV_ES2_1) omap_chip.oc |= CHIP_IS_OMAP3430ES2; else if (omap_rev() == OMAP3430_REV_ES3_0) omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; else if (omap_rev() == OMAP3430_REV_ES3_1) omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; } else { In meantime, can you try setting the following (explicitly) to the code above: else if (omap_rev() == OMAP3430_REV_ES3_1) omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; + else + omap_chip.oc |= CHIP_IS_OMAP3430ES3_1 ~sanjeev > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: OMAP3: enabling CPU idle leads to panic 2009-11-27 12:18 ` Premi, Sanjeev @ 2009-11-27 12:37 ` Sergey Lapin 2009-11-27 12:43 ` Premi, Sanjeev 0 siblings, 1 reply; 14+ messages in thread From: Sergey Lapin @ 2009-11-27 12:37 UTC (permalink / raw) To: Premi, Sanjeev; +Cc: Kevin Hilman, linux-omap@vger.kernel.org >> -----Original Message----- >> From: Sergey Lapin [mailto:slapinid@gmail.com] >> Sent: Friday, November 27, 2009 5:33 PM >> To: Premi, Sanjeev >> Cc: Kevin Hilman; linux-omap@vger.kernel.org >> Subject: Re: OMAP3: enabling CPU idle leads to panic >> >> On Fri, Nov 27, 2009 at 2:36 PM, Sergey Lapin >> <slapinid@gmail.com> wrote: >> >> >> >> Alas, that's not because omap_chip_is() function fails >> >> on these structures. >> >> >> > >> > I mean during registration of power domains. >> > >> >> int pwrdm_register(struct powerdomain *pwrdm) >> { >> unsigned long flags; >> int ret = -EINVAL; >> >> if (!pwrdm) >> return -EINVAL; >> >> if (!omap_chip_is(pwrdm->omap_chip)) >> return -EINVAL; >> returns -EINVAL for pwrdm_core (both of them), so I get panic later. >> Since OMAP2525 vs 3515 were messed-up, I think there could be more >> problems there. >> >> diff --git a/arch/arm/plat-omap/include/plat/cpu.h >> b/arch/arm/plat-omap/include/plat/cpu.h >> index 2e17890..8b15789 100644 >> --- a/arch/arm/plat-omap/include/plat/cpu.h >> +++ b/arch/arm/plat-omap/include/plat/cpu.h >> @@ -393,11 +393,11 @@ IS_OMAP_TYPE(3517, 0x3517) >> >> (!omap3_has_iva()) && \ >> (!omap3_has_sgx())) >> # define cpu_is_omap3515() (cpu_is_omap3430() && >> \ >> - >> (omap3_has_iva()) && \ >> - (!omap3_has_sgx())) >> + >> (!omap3_has_iva()) && \ >> + (omap3_has_sgx())) >> # define cpu_is_omap3525() (cpu_is_omap3430() && >> \ >> - >> (omap3_has_sgx()) && \ >> - (!omap3_has_iva())) >> + >> (!omap3_has_sgx()) && \ >> + (omap3_has_iva())) >> # define cpu_is_omap3530() (cpu_is_omap3430()) >> # define cpu_is_omap3505() is_omap3505() >> # define cpu_is_omap3517() is_omap3517() >> >> since OMAP3525 has iva but misses sgx, and vice versa 3515 has sgx but >> has no iva. >> I missed this piece before, but just accidentally found it now. I >> don't know if these are >> related, but this doesn't fix my problem with core_pwrdm. >> >> S. > > I feel, the problem could be due to this snippet below. > omap_rev() does a compare against omap_revision not just > the revision bits. > > Had submitted a patch earlier; will need some time to > find it. > > } else if (cpu_is_omap343x()) { > omap_chip.oc = CHIP_IS_OMAP3430; > if (omap_rev() == OMAP3430_REV_ES1_0) > omap_chip.oc |= CHIP_IS_OMAP3430ES1; > else if (omap_rev() >= OMAP3430_REV_ES2_0 && > omap_rev() <= OMAP3430_REV_ES2_1) > omap_chip.oc |= CHIP_IS_OMAP3430ES2; > else if (omap_rev() == OMAP3430_REV_ES3_0) > omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; > else if (omap_rev() == OMAP3430_REV_ES3_1) > omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; > } else { > > In meantime, can you try setting the following (explicitly) > to the code above: > else if (omap_rev() == OMAP3430_REV_ES3_1) > omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; > + else > + omap_chip.oc |= CHIP_IS_OMAP3430ES3_1 > > ~sanjeev It is fixed, no more panics, thanks a lot! ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: OMAP3: enabling CPU idle leads to panic 2009-11-27 12:37 ` Sergey Lapin @ 2009-11-27 12:43 ` Premi, Sanjeev 0 siblings, 0 replies; 14+ messages in thread From: Premi, Sanjeev @ 2009-11-27 12:43 UTC (permalink / raw) To: Sergey Lapin; +Cc: Kevin Hilman, linux-omap@vger.kernel.org > -----Original Message----- > From: Sergey Lapin [mailto:slapinid@gmail.com] > Sent: Friday, November 27, 2009 6:08 PM > To: Premi, Sanjeev > Cc: Kevin Hilman; linux-omap@vger.kernel.org > Subject: Re: OMAP3: enabling CPU idle leads to panic > > >> -----Original Message----- > >> From: Sergey Lapin [mailto:slapinid@gmail.com] > >> Sent: Friday, November 27, 2009 5:33 PM > >> To: Premi, Sanjeev > >> Cc: Kevin Hilman; linux-omap@vger.kernel.org > >> Subject: Re: OMAP3: enabling CPU idle leads to panic > >> > >> On Fri, Nov 27, 2009 at 2:36 PM, Sergey Lapin > >> <slapinid@gmail.com> wrote: > >> >> > >> >> Alas, that's not because omap_chip_is() function fails > >> >> on these structures. > >> >> > >> > > >> > I mean during registration of power domains. > >> > > >> [snip]--[snip] > > Had submitted a patch earlier; will need some time to > > find it. > > > > } else if (cpu_is_omap343x()) { > > omap_chip.oc = CHIP_IS_OMAP3430; > > if (omap_rev() == OMAP3430_REV_ES1_0) > > omap_chip.oc |= CHIP_IS_OMAP3430ES1; > > else if (omap_rev() >= OMAP3430_REV_ES2_0 && > > omap_rev() <= OMAP3430_REV_ES2_1) > > omap_chip.oc |= CHIP_IS_OMAP3430ES2; > > else if (omap_rev() == OMAP3430_REV_ES3_0) > > omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; > > else if (omap_rev() == OMAP3430_REV_ES3_1) > > omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; > > } else { > > > > In meantime, can you try setting the following (explicitly) > > to the code above: > > else if (omap_rev() == OMAP3430_REV_ES3_1) > > omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; > > + else > > + omap_chip.oc |= CHIP_IS_OMAP3430ES3_1 > > > > ~sanjeev > > It is fixed, no more panics, thanks a lot! > Great! I will take ongoing touchscreen issues to closure and submit a formal patch again. ~sanjeev ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2009-11-27 12:43 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-11-24 15:13 OMAP3: enabling CPU idle leads to panic Sergey Lapin 2009-11-24 18:27 ` Kevin Hilman 2009-11-24 20:21 ` Premi, Sanjeev 2009-11-25 15:37 ` Sergey Lapin 2009-11-25 17:31 ` Kevin Hilman 2009-11-27 10:02 ` Sergey Lapin 2009-11-27 10:48 ` Sergey Lapin 2009-11-27 11:02 ` Premi, Sanjeev 2009-11-27 11:32 ` Sergey Lapin 2009-11-27 11:36 ` Sergey Lapin 2009-11-27 12:02 ` Sergey Lapin 2009-11-27 12:18 ` Premi, Sanjeev 2009-11-27 12:37 ` Sergey Lapin 2009-11-27 12:43 ` Premi, Sanjeev
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox