problem with accessing memory mapped area

Vijay Padiyar vijay_padiyar at
Fri Feb 11 15:37:53 EST 2005

Hi there

I'm running a Linux 2.6.10 kernel with BusyBox 1.0 on an MPC8260 platform.
My board's memory map is as follows:

SDRAM: 0x00000000 - 0x07FFFFFF (128 MB)
FLASH: 0xFE000000 - 0xFFFFFFFF (32 MB)

In addition, in the address range 0x30000000-0x300000FF, I have a CPLD

Now, I wish to access the registers of this CPLD. For this, I create a
module and insert it into the kernel. Now, in my 'init_module' function, I
map the address range 0x30000000-0x300000FF to cpld_mem:

unsigned char *cpld_mem;

int init_module(void)
    cpld_mem =  (unsigned char *) ioremap (0x30000000, 0x100);

Let's say my file operation functions are device_open, device_release,
device_read, device_write and device_ioctl.

Now, I wish to write to the address 0x30000014. In device_write, I do the

ssize_t device_write(...)
    printk(KERN_DEBUG "Writing to CPLD");
    outb(0x00, cpldMem + 0x14);

But when I execute this program on the target, it crashes after displaying
"Writing to CPLD". Sometimes it says 'Bus error' and some other times I get
a 'Kernel panic' message and the system reboots.

Where could I be going wrong? I tried with 'writeb()' as well. It gave the
same results. :-( Am I making some obvious silly mistakes?


Vijay Padiyar

More information about the Linuxppc-embedded mailing list