virtex 4 linux driver bus error

Grant Likely grant.likely at
Thu Oct 23 15:17:13 EST 2008

On Wed, Oct 22, 2008 at 02:10:12PM +0200, Mirsad Vejseli wrote:
> hello at all,
> at the moment I use development board ML410 with montavistalinux. 
> I have a problem, please help me! 
> I try to write a linux-driver for writing or reading registers.
> I have a ace-file, which contents Linux and EDK-project with a component (IP-wizard) which is added on a PLB-bus.
> I also have a driver-construct which I can register (insmod driver.ko) into the linux-Kernel only if i do not use functions to write or read the bus (XIO_out32() or XIO_in32 ()  ). If I use this function after registering the driver I got an error.
> If I try to insert the modul with Insmod driver.ko I get a bus error!  
> my driver is similar to
> her the two importent functions  of the driver:

Try something like this:

#define REG_BASE 	(u32) XPAR_komponente_0_BASEADDR // defined in xparameters_ml41x.h 
#define REG_HIGH 	(u32) XPAR_komponente_0_HIGHADDR // defined in xparameters_ml41x.h 

#define reg0_upper	(u32) komponente_SLV_REG0_OFFSET // 32-bit register / defined in komponente.h
#define reg1_upper	(u32) komponente_SLV_REG1_OFFSET // 32-bit register / defined in komponente.h
#define reg2_upper	(u32) komponente_SLV_REG2_OFFSET // 32-bit register / defined in komponente.h

static int __init meintreiber_init(void)
	int rtn, upper;

	reg_remapped_address = (u32) ioremap(REG_BASE, REG_HIGH - REG_BASE + 1);
	if (!reg_remapped_address) {
		printk("error mapping registers\n");
		return -ENOMEM;

	upper = in_be32(reg_mapped_address + reg1_upper);
	printk("Data in: %.8X\n", upper);
	return 0;


More information about the Linuxppc-embedded mailing list