Added onenand_ipl/board/poseidon directory and onenand IPL specific files for poseidon in it.
Signed-off-by: Vivek Dalal <v.da...@samsung.com> --- onenand_ipl/board/poseidon/Makefile | 84 +++++++++++++++++++++++++ onenand_ipl/board/poseidon/config.mk | 14 ++++ onenand_ipl/board/poseidon/low_levelinit.S | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++ onenand_ipl/board/poseidon/poseidon.c | 70 +++++++++++++++++++++ onenand_ipl/board/poseidon/u-boot.onenand.lds | 53 ++++++++++++++++ 5 files changed, 394 insertions(+) diff --git a/onenand_ipl/board/poseidon/Makefile b/onenand_ipl/board/poseidon/Makefile index e69de29..6d3ec9d 100644 --- a/onenand_ipl/board/poseidon/Makefile +++ b/onenand_ipl/board/poseidon/Makefile @@ -0,0 +1,84 @@ + +include $(TOPDIR)/config.mk +include $(TOPDIR)/onenand_ipl/board/$(BOARDDIR)/config.mk + +LDSCRIPT= $(TOPDIR)/onenand_ipl/board/$(BOARDDIR)/u-boot.onenand.lds +LDFLAGS = -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) +AFLAGS += -DCONFIG_ONENAND_IPL +CFLAGS += -DCONFIG_ONENAND_IPL +OBJCLFAGS += --gap-fill=0x00 + +SOBJS := low_levelinit.o +SOBJS += start.o +COBJS := poseidon.o +COBJS += onenand_read.o +COBJS += onenand_boot.o + +SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) +OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) +__OBJS := $(SOBJS) $(COBJS) +LNDIR := $(OBJTREE)/onenand_ipl/board/$(BOARDDIR) + +onenandobj := $(OBJTREE)/onenand_ipl/ + +ALL = $(onenandobj)onenand-ipl $(onenandobj)onenand-ipl.bin $(onenandobj)onenand-ipl-2k.bin $(onenandobj)onenand-ipl-4k.bin + +all: $(obj).depend $(ALL) + +$(onenandobj)onenand-ipl-2k.bin: $(onenandobj)onenand-ipl + $(OBJCOPY) ${OBJCFLAGS} --pad-to=0x800 -O binary $< $@ + +$(onenandobj)onenand-ipl-4k.bin: $(onenandobj)onenand-ipl + $(OBJCOPY) ${OBJCFLAGS} --pad-to=0x1000 -O binary $< $@ + +$(onenandobj)onenand-ipl.bin: $(onenandobj)onenand-ipl + $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ + +$(onenandobj)onenand-ipl: $(OBJS) + cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \ + -Map $...@.map -o $@ + +# create symbolic links from common files + +# from cpu directory +$(obj)start.S: + @rm -f $@ + ln -s $(SRCTREE)/cpu/$(CPU)/start.S $@ + +# from onenand_ipl directory +$(obj)onenand_ipl.h: + @rm -f $@ + ln -s $(SRCTREE)/onenand_ipl/onenand_ipl.h $@ + +$(obj)onenand_boot.c: $(obj)onenand_ipl.h + @rm -f $@ + ln -s $(SRCTREE)/onenand_ipl/onenand_boot.c $@ + +$(obj)onenand_read.c: $(obj)onenand_ipl.h + @rm -f $@ + ln -s $(SRCTREE)/onenand_ipl/onenand_read.c $@ + +ifneq ($(OBJTREE), $(SRCTREE)) +$(obj)poseidon.c: + @rm -f $@ + ln -s $(SRCTREE)/onenand_ipl/board/$(BOARDDIR)/poseidon.c $@ + +$(obj)low_levelinit.S: + @rm -f $@ + ln -s $(SRCTREE)/onenand_ipl/board/$(BOARDDIR)/low_levelinit.S $@ +endif + +######################################################################### + +$(obj)%.o: $(obj)%.S + $(CC) $(AFLAGS) -c -o $@ $< + +$(obj)%.o: $(obj)$.c + $(CC) $(CFLAGS) -c -o $@ $< + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/onenand_ipl/board/poseidon/config.mk b/onenand_ipl/board/poseidon/config.mk index e69de29..1f95da1 100644 --- a/onenand_ipl/board/poseidon/config.mk +++ b/onenand_ipl/board/poseidon/config.mk @@ -0,0 +1,12 @@ +# +# (C) Copyright 2009-2010 Samsung Electronics +# Vivek Dalal <v.da...@samsung.com> +# +# Samsung Poseidon board with OMAP2430 (ARM1136) cpu +# +# Physical Address: +# 8000'0000 (bank0) +# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000 +# (mem base + reserved) + +TEXT_BASE = 0x00000000 diff --git a/onenand_ipl/board/poseidon/low_levelinit.S b/onenand_ipl/board/poseidon/low_levelinit.S index e69de29..057b710 100644 --- a/onenand_ipl/board/poseidon/low_levelinit.S +++ b/onenand_ipl/board/poseidon/low_levelinit.S @@ -0,0 +1,173 @@ +/* + * Board specific setup info + * + * (C) Copyright 2009-2010 Samsung Electronics + * Vivek Dalal <v.da...@samsung.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <config.h> +#include <asm/arch/omap24xx.h> +#include <asm/arch/mem.h> +#include <asm/arch/clocks.h> + + +_TEXT_BASE: + .word TEXT_BASE /* sdram load addr from config.mk */ + +.globl lowlevel_init +lowlevel_init: + mov r3, r0 /* save skip information */ + + +@; Disable watch dog + ldr r0, =WD2_BASE @; 0x49016000 + ldr r1, =0xaaaa + str r1, [r0, #0x48] @; WD2_WSPR 0x49016048 + + mov r1, r1, lsr #1 + str r1, [r0, #0x48] @; WD2_WSPR 0x49016048 + +@;Configure the Core clock source to be DPLL, by default it is DPLL * 2 + ldr r0, = 0x49006000 +loop3: + mov r1, #0x00000083 + str r1, [r0, #0x60] @; PRCM_CLKSRC_CTRL 0x49006060 + +@; at reset Low bypass mode set, so no need to reset + mov r1, #0x00000002 + str r1, [r0, #0x140]@; CM_CLKSEL_MPU 0x49006140 + + ldr r1, =0x08501044 + str r1, [r0, #0x240]@; CM_CLKSEL1_CORE 0x49006240 + ldr r1, =0x0114AC00 + str r1, [r0, #0x540]@; CM_CLKSEL1_PLL 0x49006540 + +loop5: + ldr r1, [r0, #0x84] @; PRCM_CLKCFG_STATUS 0x49006084 + cmp r1, #0x00 + bne loop5 + + mov r1, #0x01 + str r1, [r0, #0x80] @; PRCM_CLKCFG_CTRL 0x49006080 + +loop6: + ldr r1, [r0, #0x80] @; PRCM_CLKCFG_CTRL 0x49006080 + cmp r1, #0x00 + bne loop6 + + mov r1, #0x0000000F + str r1, [r0, #0x500] @; CM_CLKEN_PLL 0x49006500 + nop + nop + nop + +loop7: + ldr r1, [r0, #0x520]@; CM_IDLEST_CKGEN 0x49006520 + and r1, r1, #0x03 + cmp r1, #0x02 + bne loop7 + nop + nop +@; SDRC setting + mov r0, #0x6D000000 + mov r1, #0x00000012 + str r1, [r0, #0x10] @; SDRC_SYSCONFIG 0x6D000010 + nop + nop + nop + mov r1, #0x5000 @; wait 200us +loop10: + subs r1, r1, #0x01 + bne loop10 + + mov r1, #0x00000010 + str r1, [r0, #0x10] @; SDRC_SYSCONFIG 0x6D000010 + + mov r1, #0x100 + str r1, [r0, #0x44] @; SDRC_SHARING 0x6D000044 + + + ldr r1, =0x01A02011 + str r1, [r0, #0x80] @; SDRC_MCFG_0 0x6D000080 + + ldr r1, =0x629DB4C6 + str r1, [r0, #0x9C] @; SDRC_ACTIM_CTRLA_0 0x6D00009C + + ldr r1, =0x00002014 + str r1, [r0, #0xA0] @; SDRC_ACTIM_CTRLB_0 0x6D0000A0 + + ldr r1, =0x0004E201 + str r1, [r0, #0xA4] @; SDRC_RFR_CTRL_0 0x6D0000A4 + + mov r1, #0x00000000 + str r1, [r0, #0xA8] @; SDRC_MANUAL_0 0x6D0000A8 + + mov r1, #0x00000001 + str r1, [r0, #0xA8] @; SDRC_MANUAL_0 0x6D0000A8 + + mov r1, #0x00000002 + str r1, [r0, #0xA8] @; SDRC_MANUAL_0 0x6D0000A8 + + mov r1, #0x00000002 + str r1, [r0, #0xA8] @; SDRC_MANUAL_0 0x6D0000A8 + + mov r1, #0x00000032 + str r1, [r0, #0x84] @; SDRC_MR_0 0x6D000084 + + ldr r1, =0x0000170C + str r1, [r0, #0x60] @; SDRC_DLLA_CTRL 0x6D000060 + + sub r2, r1, #0x4 @; r2 = 0x00001708 + str r2, [r0, #0x60] @; SDRC_DLLA_CTRL 0x6D000060 + + ldr r1, =0x0000170C + str r1, [r0, #0x68] @; SDRC_DLLB_CTRL 0x6D000068 + + sub r2, r1, #0x4 @; r2 = 0x00001708 + str r2, [r0, #0x68] @; SDRC_DLLB_CTRL 0x6D000068 + + nop + nop + nop + +@;Wait until dram is stable + mov r2, #0x1800 +1: + subs r2, r2, #0x1 + bne 1b + ldr sp, SRAM_STACK + str ip, [sp] /* stash old link register */ + mov ip, lr /* save link reg across call */ + mov r0, r3 /* pass skip info to s_init */ + + bl s_init /* go setup pll,mux,memory */ + + ldr ip, [sp] /* restore save ip */ + mov lr, ip /* restore link reg */ + + /* back to arch calling code */ + mov pc, lr + + /* the literal pools origin */ + .ltorg + +SRAM_STACK: + .word LOW_LEVEL_SRAM_STACK diff --git a/onenand_ipl/board/poseidon/poseidon.c b/onenand_ipl/board/poseidon/poseidon.c index e69de29..bb2b6e9 100644 --- a/onenand_ipl/board/poseidon/poseidon.c +++ b/onenand_ipl/board/poseidon/poseidon.c @@ -0,0 +1,70 @@ +/* + * (C) Copyright 2009-2010 Samsung Electronics + * Vivek Dalal <v.da...@samsung.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#include <common.h> +#include <asm/arch/mux.h> +#include <asm/io.h> + +#define write_config_reg(reg, value) writeb(value, reg) + +/***************************************** + * Routine: board_init + * Description: Early hardware init. + *****************************************/ +int board_init(void) +{ + return 0; +} + +#ifdef CONFIG_SYS_PRINTF +/* Pin Muxing registers used for UART1 */ +/**************************************** + * Routine: muxSetupUART1 (ostboot) + * Description: Set up uart1 muxing + *****************************************/ + +void muxSetupUART1(void) +{ + /* UART1_CTS pin configuration, PIN = D21 */ + write_config_reg(CONTROL_PADCONF_UART1_CTS, 0); + /* UART1_RTS pin configuration, PIN = H21 */ + write_config_reg(CONTROL_PADCONF_UART1_RTS, 0); + /* UART1_TX pin configuration, PIN = L20 */ + write_config_reg(CONTROL_PADCONF_UART1_TX, 0); + /* UART1_RX pin configuration, PIN = T21 */ + write_config_reg(CONTROL_PADCONF_UART1_RX, 0); +} + +#endif + +/********************************************************** + * Routine: s_init + * Description: Does early system init of muxing and clocks. + * - Called at time when only stack is available. + **********************************************************/ +int s_init(int skip) +{ +#ifdef CONFIG_SYS_PRINTF + muxSetupUART1(); +#endif + return 0; +} diff --git a/onenand_ipl/board/poseidon/u-boot.onenand.lds b/onenand_ipl/board/poseidon/u-boot.onenand.lds index e69de29..c2a8109 100644 --- a/onenand_ipl/board/poseidon/u-boot.onenand.lds +++ b/onenand_ipl/board/poseidon/u-boot.onenand.lds @@ -0,0 +1,51 @@ +/* + * (C) Copyright 2009-2010 Samsung Electronics + * Vivek Dalal <v.da...@samsung.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0x00000000; + + . = ALIGN(4); + .text : + { + start.o (.text) + *(.text) + } + + . = ALIGN(4); + .rodata : { *(.rodata) } + + . = ALIGN(4); + .data : { *(.data) } + + . = ALIGN(4); + .got : { *(.got) } + + . = ALIGN(4); + __bss_start = .; + .bss : { *(.bss) . = ALIGN(4); } + _end = .; +} _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot