[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-arm-kernel
Subject:    Re: Kernel hangs after "Memory policy: ECC disabled,
From:       "Paul Chitescu" <Paul.Chitescu () IMC-Group ! org>
Date:       2004-04-01 8:55:20
Message-ID: 004f01c417c7$1052a940$e7b9e6c1 () s40 ! icpe ! ro
[Download RAW message or body]

"Michael Burian" <dynmail1@gassner-waagen.at> wrote:
> I try to get linux-2.6.0-rmk2 running on the EDB9312 board
>
> To be able to trace anything at all I've ported the printascii hack to
> EP93xx and used it in printk.
> RedBoot docs told me that physical as well as virtual adress range for
> IO registers is 0x80000000
> for that board so i used this unconditionally in .macro addruart. [0]
>
> I tried printascii before and after mmu was turned on, and although it
> hanged in either case the
> stuff was printed to the serial - I guess mmu code did not like the
> corrupted regs.
> Calling it from printk seems to work fine.
> [...]

I am working on a board with EP9312 too so I may share some knowledge from
the 2.4 kernel series - we can't afford moving from a relatively stable 2.4
to a totally unsupported 2.6 yet.

That's an error in the Cirrus supplied init macros for all their boards. The
virtual address of the CPU internal ports with the MMU enabled should be
0xE0000000. The value they placed there - 0x80000000 - is not valid as the
ARM kernel should not map them in the first 3GB of virtual memory.

----------------------------------------------------------------------------
----
#elif defined(CONFIG_ARCH_EP9312)

                .macro  addruart,rx
                mrc     p15, 0, \rx, c1, c0
                tst     \rx, #1                         @ MMU enabled?
                ldreq   \rx, =IO_BASE_PHYS              @ System peripherals
(phys address)
                ldrne   \rx, =IO_BASE_VIRT              @ System peripherals
(virt address)
                orr     \rx,\rx,#0x008c0000             @ Advance to
UART1Base

                @ We probe for the active serial port here.
                @ We assume r1 can be clobbered.

                @ see if UART1 is active
                ldr     r1, [\rx, #0x14]                @UART1Ctrl
                tst     r1, #1

                @ if UART1 is inactive advance to UART2
                addeq   \rx, \rx, #0x00010000
                ldreq   r1, [\rx, #0x14]                @UART2Ctrl
                tsteq   r1, #1

                @ if UART2 is inactive advance to UART3
                addeq   \rx, \rx, #0x00010000
                ldreq   r1, [\rx, #0x14]                @UART3Ctrl
                tsteq   r1, #1

                @ if all ports are inactive, then there is nothing we can do
                moveq   pc, lr
                .endm

                .macro  senduart,rd,rx
                strb    \rd, [\rx]                      @ UARTxData
                .endm

                .macro  waituart,rd,rx
1001:           ldr     \rd, [\rx, #0x18]               @ UARTxFlag
                tst     \rd, #0x20                      @ TXFF = 0 when ok
to transmit
                bne     1001b
                .endm

                .macro  busyuart,rd,rx
1001:           ldr     \rd, [\rx, #0x18]               @ UARTxFlag
                tst     \rd, #0x08                      @ BUSY = 1 while
transmitting
                bne     1001b
                .endm
----------------------------------------------------------------------------
----


Paul Chitescu



-------------------------------------------------------------------
Subscription options: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
FAQ/Etiquette:       http://www.arm.linux.org.uk/armlinux/mailinglists.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic