[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