
Hi again!
Currently I try to integrate a Zilog Z85230 serial communication controller on a 603e-based board to work with U-Boot. For testing reasons I wrote a little inline assembler program looking like that:
#include <common.h>
#ifdef CFG_Z85230
#if CONFIG_CONS_INDEX == 1 #else #error no valid console defined #endif
int serial_init (void) {
/* First we load the _physical_ address of the chip's cntrol register to R3 */ __asm__ __volatile__ ("addis 3, 0, 0x0000"); __asm__ __volatile__ ("addis 3,0,0xF500"); __asm__ __volatile__ ("ori 3,3,0x00D0"); /* Load the address of the chip's data rgister to R2 */ __asm__ __volatile__ ("addis 2, 0, 0x0000"); __asm__ __volatile__ ("addis 2,0,0xF500"); __asm__ __volatile__ ("ori 2,2,0x00D8");
/* Here some configuration for the serial controller is done, use R4 */ __asm__ __volatile__ ("li 4, 0x04"); __asm__ __volatile__ ("stb 4, 0(3)"); __asm__ __volatile__ ("li 4, 0x44"); __asm__ __volatile__ ("stb 4, 0(3)");
. . . .
/* Write one character ('I') */ __asm__ __volatile__ ("addis 4, 0, 0x0000"); __asm__ __volatile__ ("li 4, 0x49"); __asm__ __volatile__ ("stb 4, 0(2)");
return(0); } . . .
When I compile this, load it into RAM and execute it, everything is fine, MiniCom shows an 'I'. Now I put this litte function into the file serial.c from U-Boot and compile it. Then I load U-Boot to Flash and run it. I'm tested before, wheather the function is always called and it is.
When I run it, I get an error, caused by the MMU, because it cannot translate the demanded address (it's a physical one). Now I tried to disable the data-address-translation on the beginning of the function and re-enable it at the end, always surrounded by an 'isync'-command. It this case, the program runs, but without any output via the serial port.
Is it legal to disable the MMU in this context and how should I configure U-Boot for my memory map?
I have the following memory map on my board:
0x00000000 - 0x007FEFFF SRAM
0xF5000000 - Serial Interface #1 Channel B Control 0xF5000008 - Serial Interface #1 Channel B Data . . . 0xF50000D0 - Serial Interface #3 Channel A Control 0xF50000D8 - Serial Interface #3 Channel A Data
0xFF800000 - 0xFFFFFFFF Flash
Thanks for ideas or advices why this doesn't work?
Sebastian Häpe