440gx GPIO
Ed Goforth
egoforth at gmail.com
Tue Feb 14 16:20:35 EST 2006
I am struggling with a problem and I hope someone can give me some
pointers. We have a custom board with a 440gx. I need to drive GPIO11
low. The best as I can tell from the docs, I need to set bit 11 of the
TCR to 1 and bit 11 of the OR to 0 to do this. I'm using kernel
2.4.18-timesys-4.0
Here's what I've tried:
Prior to making an calls, the values of the registers are:
or 0x00101000
tcr 0x00101700
odr 0x00000000
ir 0xeffff820
(from ibm440gx.h)
#define PPC440GX_GPIO0_ADDR 0x0000000140000700
Attempt one: write the bit directly:
volatile gpio_t *gpio;
volatile u32 or_reg;
gpio = (gpio_t *) ioremap_nocache(0x40000700,
sizeof(gpio_t));
or_reg = gpio->or;
or_reg &= 0x00100000;
gpio->or = or_reg;
Attempt two: use the accessor routine:
extern int ibm_gpio_out(__u32 device, __u32 mask, __u32 data);
rc = ibm_gpio_out(0, 0x00100000, 0);
With either approach, I can read the registers fine. But as soon as I
either modify gpio->or or call ibm_gpio_out(), the board hangs hard.
Any hints would be greatly appreciated. On-list replies are fine; I am
a subscriber.
Thanks,
Ed
More information about the Linuxppc-embedded
mailing list