[U-Boot] s3c2416 port problem
Carl-Fredrik Sundström
audio.cf at gmail.com
Mon Jun 22 05:09:50 CEST 2015
I am working on porting u-boot to s3c2416 to latest u-boot, I have been
using some older patches that was not accepted to u-boot from 2012 as a
base.
In my spl code by blinking leds I have found that in
drivers/serial/serial.c that the call to start actually calls the reset
vector because the address of start evaluates to 0x0000.
int serial_init(void)
{
gd->flags |= GD_FLG_SERIAL_READY;
return get_current()->start();
}
I can actually call the serial init manually if I just call it without
using the abstraction layer just invoking s3serial0_init();.
I am probably doing something wrong but I fail to see what! The serial code
is not mine it is the same used for other s3c24x0
devices. drivers/serial/serial_s3c24x0.c
My config for my board
http://pastebin.com/zzQrV9aU
my spl code
http://pastebin.com/2s9te0qE
My toolchain
tridentsx at Fatix:~/dev/my-boot$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (4.8.3-18ubuntu2+12) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Please help a newbie, I have been stuck here the last 4 weeks, banging my
head against a wall.
If I look at a decompile the structure with the function pointers
struct serial_device {
/* enough bytes to match alignment of following func pointer */
char name[16];
int (*start)(void);
int (*stop)(void);
void (*setbrg)(void);
int (*getc)(void);
int (*tstc)(void);
void (*putc)(const char c);
void (*puts)(const char *s);
#if CONFIG_POST & CONFIG_SYS_POST_UART
Actually has valid data
ROM:00000D08 aS3ser0 DCB "s3ser0",0
ROM:00000D0F DCB 0
ROM:00000D10 DCD 0, 0
ROM:00000D18 DCD 0x400007E8, 0
ROM:00000D20 DCD 0x40000770, 0x400007F8, 0x400007D8,
0x400007A0, 0x400007D0
ROM:00000D20 DCD 0
Also if I "print" the value of the pointer to the structure by blinking
leds it is pointing to the right address. Its just this
get_current()->start(); thing that calls address 0x0000.
More information about the U-Boot
mailing list