[U-Boot] data abort in omap_gpio

Andreas Bießmann
2014-04-09T15:16:07Z

Hi all,

I've encountered a data abort in tricorder board when switching gpio's.

Here is the trace:

---8<---
gpio_direction_output (gpio=<value optimized out>, value=0) at
/home/abiessmann/src/u-boot/drivers/gpio/omap_gpio.c:197
197 _set_gpio_dataout(bank, get_gpio_index(gpio), value);
(gdb) s
_set_gpio_dataout (gpio=<value optimized out>, value=0) at
/home/abiessmann/src/u-boot/drivers/gpio/omap_gpio.c:102
102 void *reg = bank->base;
(gdb) s
105 switch (bank->method) {
(gdb) s
107 if (enable)
(gdb) list
102 void *reg = bank->base;
103 u32 l = 0;
104
105 switch (bank->method) {
106 case METHOD_GPIO_24XX:
107 if (enable)
108 reg += OMAP_GPIO_SETDATAOUT;
109 else
110 reg += OMAP_GPIO_CLEARDATAOUT;
111 l = 1 << gpio;
(gdb) s
111 l = 1 << gpio;
(gdb) s
108 reg += OMAP_GPIO_SETDATAOUT;
(gdb) s
110 reg += OMAP_GPIO_CLEARDATAOUT;
(gdb) s
111 l = 1 << gpio;
(gdb) s
118 __raw_writel(l, reg);
(gdb) print/x l
$18 = 0x800
(gdb) print/x reg
$19 = 0x49050090
(gdb) s
^C
Program received signal SIGSTOP, Stopped (signal).
_start ()@/home/abiessmann/src/u-boot/arch/arm/cpu/armv7/start.S:27
27 ldr pc, _data_abort
(gdb)
--->8---

Anyone aware of that?

I'll dive into that tomorrow. If anyone knows that problem a pointer
would be good.