linux-mips-fnet
[Top] [All Lists]

Re: M700-10/3c503.c

To: linux-mips@fnet.fr
Subject: Re: M700-10/3c503.c
From: Systemkennung Linux <linux@mailhost.uni-koblenz.de>
Date: Sun, 24 Mar 1996 23:11:19 +0100 (MET)
In-reply-to: <199603232013.VAA26099@pallas.spacetec.no> from "Tor Arntsen" at Mar 23, 96 09:13:44 pm
Hi,

> On Mar 12, 21:13, Systemkennung Linux wrote:
> > - illegal kernel paging request:  this wasn't supposed to happen ...
> 
> The exact message is
> "Unable to handle kernel paging request at virtual adress 000ddffe"
>                                                           ^^^^^^^^
> This actually happens in 3c503.c (el2_probe) where it does the following:
>     for (addr = addrs; *addr; addr++) {
>       int i;
>       unsigned int base_bits = readb(*addr);
> ..                               ^^^^^
> addrs[] is declared as { 0xddffe, 0xd9ffe, 0xcdffe, 0xc9ffe, 0};
>                          ^^^^^^^
> Is maybe the 'readb' too PC/x86 oriented?

Mea culpa.  You're right.  The code assumes that MIPS boxes have the same
memory layout as Intel machines (code from include/asm-mips/io.h):

> /*
>  * IO bus memory addresses are also 1:1 with the physical address
>  * FIXME: This assumption is wrong for the Deskstation Tyne
>  */
> #define virt_to_bus virt_to_phys
> #define bus_to_virt phys_to_virt
> 
> /*
>  * readX/writeX() are used to access memory mapped devices. On some
>  * architectures the memory mapped IO stuff needs to be accessed
>  * differently. On the x86 architecture, we just read/write the
>  * memory location directly.
>  */
> #define readb(addr) (*(volatile unsigned char *) (addr))
> #define readw(addr) (*(volatile unsigned short *) (addr))
> #define readl(addr) (*(volatile unsigned int *) (addr))
> 
> #define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b))
> #define writew(b,addr) ((*(volatile unsigned short *) (addr)) = (b))
> #define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b))
> 
> #define memset_io(a,b,c)        memset((void *)(a),(b),(c))
> #define memcpy_fromio(a,b,c)    memcpy((a),(void *)(b),(c))
> #define memcpy_toio(a,b,c)      memcpy((void *)(a),(b),(c))
> 
> /*
>  * Again, MIPS does not require mem IO specific function.
>  */
> 
> #define eth_io_copy_and_sum(a,b,c,d)    eth_copy_and_sum((a),(void 
> *)(b),(c),(d)

Acctually the address space where (E)ISA cards get mapped to is offseted
by 0xa0000000 for Deskstation Tyne and rPC44 and by 0xe2000000 for M700-10,
Magnum and Acer.  So just adding this offset to the (E)ISA address in all
these macros should fix the thing.

  Ralf

<Prev in Thread] Current Thread [Next in Thread>