Skip to contentSkip to conversation

Data abort in omap_gpio

U-Boot Andreas Bießmann 2 participants 4 messages Apr 9, 2014 – Apr 10, 2014

lore
Share & tools
lore
#0 lore raw

Hi all,

I've encountered a data abort in omap_gpio when using gpio_direction_output(). Anyone aware of that?

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/s l
$17 = 2048
(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---

(Encounterd with tricorder board current ToT)

I'll dive into that tomorrow. If anyone has some pointeres, please speak out loud ;)

Best Regards

Andreas Bie?mann

#1 lore raw
Quoted 54 lines · Andreas Bie?mann

Hi all,

I've encountered a data abort in omap_gpio when using gpio_direction_output(). Anyone aware of that?

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/s l
$17 = 2048
(gdb) print/x l
$18 = 0x800
(gdb) print/x reg
$19 = 0x49050090
(gdb) s
^C
Program received signal SIGSTOP, Stopped (signal).
_start () at /home/abiessmann/src/u-boot/arch/arm/cpu/armv7/start.S:27
27 ldr pc, _data_abort
(gdb)
--->8---

Quoted 4 lines

(Encounterd with tricorder board current ToT)

I'll dive into that tomorrow. If anyone has some pointeres, please speak out loud ;)

You need to add the relevant CONFIG_OMAP3_GPIO_n define to enable clocks/etc for the gpios being used.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140409/0a263121/attachment.pgp>
#2 lore raw

Dear Tom Rini,

Quoted 18 lines · Tom Rini
Quoted 16 lines · Andreas Bie?mann

(gdb) s
118 __raw_writel(l, reg);
(gdb) print/s l
$17 = 2048
(gdb) print/x l
$18 = 0x800
(gdb) print/x reg
$19 = 0x49050090
(gdb) s
^C
Program received signal SIGSTOP, Stopped (signal).
_start () at /home/abiessmann/src/u-boot/arch/arm/cpu/armv7/start.S:27
27 ldr pc, _data_abort
(gdb)
--->8---

Quoted 8 lines
Quoted 4 lines

(Encounterd with tricorder board current ToT)

I'll dive into that tomorrow. If anyone has some pointeres, please speak out loud ;)

You need to add the relevant CONFIG_OMAP3_GPIO_n define to enable clocks/etc for the gpios being used.

Well, it is GPIO 42/43 which is located in bank 1. These clocks are not enabled explicitly in 708cfb74b7c6df9c37d3c48988a154be79daefeb. I haven't followed the dsicussen but wonder why we do not switch the clocks on gpio_request().

So is it seems that 708cfb74b7c6df9c37d3c48988a154be79daefeb missed to enable clocks for bank 1. I'll try that.

Best regards

Best regards

Andreas Bie?mann

#3 lore raw
Quoted 28 lines · Andreas Bie?mann
Quoted 18 lines · Tom Rini
Quoted 16 lines · Andreas Bie?mann

(gdb) s
118 __raw_writel(l, reg);
(gdb) print/s l
$17 = 2048
(gdb) print/x l
$18 = 0x800
(gdb) print/x reg
$19 = 0x49050090
(gdb) s
^C
Program received signal SIGSTOP, Stopped (signal).
_start () at /home/abiessmann/src/u-boot/arch/arm/cpu/armv7/start.S:27
27 ldr pc, _data_abort
(gdb)
--->8---

Quoted 8 lines
Quoted 4 lines

(Encounterd with tricorder board current ToT)

I'll dive into that tomorrow. If anyone has some pointeres, please speak out loud ;)

You need to add the relevant CONFIG_OMAP3_GPIO_n define to enable clocks/etc for the gpios being used.

Quoted 7 lines

Well, it is GPIO 42/43 which is located in bank 1. These clocks are not enabled explicitly in 708cfb74b7c6df9c37d3c48988a154be79daefeb. I haven't followed the dsicussen but wonder why we do not switch the clocks on gpio_request().

So is it seems that 708cfb74b7c6df9c37d3c48988a154be79daefeb missed to enable clocks for bank 1. I'll try that.

Got it working. The numbering starts with '1' here (not '0'). Therefore GPIO 42/43 is in bank 2. Enabling that bank with CONFIG_OMAP3_GPIO_2 stops data abort

Thanks for the hint! Fixup patch series for 2014.04 coming today.

Best Regards

Andreas Bie?mann