PXA270 Random Hangs at Low Core Freq

Michael Cashwell mboards at prograde.net
Mon Oct 18 13:38:49 EDT 2010


I've been fighting inexplicable hangs on two different PXA270 designs running various kernels since early 2.6.28.x. The first board was custom (and of dubious integrity) but I'm currently seeing it on Gumstix Verdex PROs running

At first I thought it was a problem with CPU-freq code itself hitting some unaddressed errata but I've eliminated that possibility. The hangs occur even if CPU-freq is disabled in the kernel config. All that's required in that case is for u-boot to run the kernel at a core frequency of 312MHz or lower. If it runs at 416MHz or higher no hangs occur. (With CPU-freq enabled the hangs only occur if speeds at or below 312MHz are allowed. With those commented out, no hangs.)

At low core frequencies I can trigger the hang every time by copying a several-MB file to a uSD card via the MMC interface. The copy command completes but a few seconds later (while the background processes write to the card) the CPU hangs.** However, the issue is not specific to uSD/MMC. Another developer told me he has seen hangs while receiving data through a UART connected via I2C.

The hangs are hard (rendering JTAG inoperable) and since I have no hardware with the Embedded Trace Module exposed I have no way to gather a trace of execution up to the freeze.

I'd like to solve the problem since the lower speeds are more power efficient but I'm somewhat stuck regarding how to debug it. I'd like to know if it's something I'm doing wrong so my first step is to ask the ARM-Linux community if anyone else has run recent kernels on a PXA270 system at core clock rates of 312MHz or less. (That's also a not so veiled plea for someone to perhaps do so if they have the hardware and a few spare cycles.)

Thanks for any information.

**: Here's a hang where I'd just started top while background threads were writing to the uSD card. top did its first pass and then everything froze. (Is the high rate of context switches and interrupts normal?)

last pid:   389;  load avg:  0.13,  0.05,  0.01;  up 0+00:28:15        12:40:22
27 processes: 1 running, 24 sleeping, 2 uninterruptable
CPU states:  0.0% user,  0.0% nice, 31.1% system, 13.6% idle, 55.3% iowait
Kernel: 30832 ctxsw, 16262 intr
Memory: 32M used, 92M free, 244K buffers, 27M cached
 This terminal can only display 16 processes
  236 root        1  20    0    0K    0K    0K disk    0:00 28.43% mmcqd
  389 root        1  20    0 2696K  804K  648K run     0:00  3.92% top
  378 root        1  20    0    0K    0K    0K disk    0:00  1.96% flush-179:0
    1 root        1  20    0 2784K  672K  588K sleep   0:00  0.00% init
  119 root        1  20    0    0K    0K    0K sleep   0:00  0.00% rpciod/0
  371 root        1  20    0 4208K 1592K 1340K sleep   0:00  0.00% sshd
  369 root        1  20    0 2788K  716K  632K sleep   0:00  0.00% ash
    4 root        1  20    0    0K    0K    0K sleep   0:00  0.00% events/0
  128 root        1  20    0    0K    0K    0K sleep   0:00  0.00% nfsiod
  251 root        1  20    0 2784K  460K  380K sleep   0:00  0.00% klogd
  249 root        1  20    0 2784K  464K  396K sleep   0:00  0.00% syslogd
    5 root        1  20    0    0K    0K    0K sleep   0:00  0.00% khelper
  370 root        1  20    0 2784K  440K  376K sleep   0:00  0.00% busybox
  103 root        1  20    0    0K    0K    0K sleep   0:00  0.00% kmmcd
    2 root        1  20    0    0K    0K    0K sleep   0:00  0.00% kthreadd
    3 root        1  20    0    0K    0K    0K sleep   0:00  0.00% ksoftirqd/0

More information about the linux-arm-kernel mailing list