Patchwork [U-Boot,v3,09/12] omap: add basic SPL support

login
register
mail settings
Submitter Aneesh V
Date July 16, 2011, 12:53 p.m.
Message ID <1310820802-24984-10-git-send-email-aneesh@ti.com>
Download mbox | patch
Permalink /patch/104966/
State Superseded
Headers show

Comments

Aneesh V - July 16, 2011, 12:53 p.m.
- Provide alternate implementations of board_init_f()
  board_init_r() for OMAP spl.
- Provide linker script
- Initialize global data
- Add serial console support
- Update CONFIG_SYS_TEXT_BASE to allow for SPL's bss and move
  it to board config header from config.mk

Signed-off-by: Aneesh V <aneesh@ti.com>
---

This patch adds two checkpatch warnings that look like false
positives. Reported these to checkpatch maintainer.

V2:
* Removed the label __flash_image_end because _end serves the
  same purpose after rebasing to latest mainline

V3:
* Moved CONFIG_SYS_TEXT_BASE to board config header and
  deleted config.mk
* Changes for the struct based register accesses
* Removed usage of modify_reg_32() macro
* omap4_rev_string() reference changed to omap_rev_string()
* Folded the patches for linker script changes and console
  support into this patch
* Improved commit message
---
 arch/arm/cpu/armv7/Makefile                   |    7 ++-
 arch/arm/cpu/armv7/omap-common/Makefile       |    4 +
 arch/arm/cpu/armv7/omap-common/spl.c          |   82 +++++++++++++++++++++++++
 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds |   62 +++++++++++++++++++
 arch/arm/cpu/armv7/omap4/Makefile             |    5 +-
 arch/arm/cpu/armv7/omap4/board.c              |    7 ++
 arch/arm/cpu/armv7/omap4/clocks.c             |   33 ++++++++++
 arch/arm/include/asm/arch-omap4/sys_proto.h   |    1 +
 arch/arm/include/asm/omap_common.h            |    2 +
 board/ti/panda/Makefile                       |    2 +
 board/ti/panda/config.mk                      |   31 ---------
 board/ti/sdp4430/Makefile                     |    2 +
 board/ti/sdp4430/config.mk                    |   31 ---------
 include/configs/omap4_panda.h                 |   26 ++++++++
 include/configs/omap4_sdp4430.h               |   26 ++++++++
 15 files changed, 257 insertions(+), 64 deletions(-)
 create mode 100644 arch/arm/cpu/armv7/omap-common/spl.c
 create mode 100644 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
 delete mode 100644 board/ti/panda/config.mk
 delete mode 100644 board/ti/sdp4430/config.mk
Daniel Schwierzeck - July 16, 2011, 1:36 p.m.
Hi Aneesh,

On 07/16/2011 02:53 PM, Aneesh V wrote:

> diff --git a/include/configs/omap4_panda.h b/include/configs/omap4_panda.h
> index a8dd861..3244fc1 100644
> --- a/include/configs/omap4_panda.h
> +++ b/include/configs/omap4_panda.h
> @@ -243,4 +243,30 @@
>   #define CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
>   #endif
>
> +/* Defines for SPL */
> +#define CONFIG_SPL
> +#define CONFIG_SYS_SPL_TEXT_BASE	0x40304350

Does this work? The SPL framework patches currently use

ifneq ($(CONFIG_SPL_TEXT_BASE),)
CPPFLAGS += -DCONFIG_SPL_TEXT_BASE=$(CONFIG_SPL_TEXT_BASE)
endif

But CONFIG_SYS_SPL_TEXT_BASE seems to be the right name for this option.
Shall I fix it in the SPL framework patches?

> +#define CONFIG_SYS_SPL_MAX_SIZE		0x8000	/* 32 K */
> +#define CONFIG_SYS_SPL_STACK		LOW_LEVEL_SRAM_STACK
> +
> +#define CONFIG_SYS_SPL_BSS_START_ADDR		0x80000000
> +#define CONFIG_SYS_SPL_BSS_MAX_SIZE		0x80000		/* 512 KB */
> +
> +#define CONFIG_SPL_LIBCOMMON_SUPPORT
> +#define CONFIG_SPL_LIBDISK_SUPPORT
> +#define CONFIG_SPL_I2C_SUPPORT
> +#define CONFIG_SPL_MMC_SUPPORT
> +#define CONFIG_SPL_FAT_SUPPORT
> +#define CONFIG_SPL_LIBGENERIC_SUPPORT
> +#define CONFIG_SPL_SERIAL_SUPPORT
> +#define CONFIG_SYS_SPL_LDSCRIPT "arch/arm/cpu/armv7/omap-common/u-boot-spl.lds"
> +
> +/*
> + * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
> + * 64 bytes before this address should be set aside for u-boot.img's
> + * header. That is 0x800FFFC0--0x80100000 should not be used for any
> + * other needs.
> + */
> +#define CONFIG_SYS_TEXT_BASE		0x80100000
> +
>   #endif /* __CONFIG_H */
> diff --git a/include/configs/omap4_sdp4430.h b/include/configs/omap4_sdp4430.h
> index 534f89a..5c486c3 100644
> --- a/include/configs/omap4_sdp4430.h
> +++ b/include/configs/omap4_sdp4430.h
> @@ -249,4 +249,30 @@
>   #define CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
>   #endif
>
> +/* Defines for SPL */
> +#define CONFIG_SPL
> +#define CONFIG_SYS_SPL_TEXT_BASE	0x40304350
> +#define CONFIG_SYS_SPL_MAX_SIZE		0x8000	/* 32 K */
> +#define CONFIG_SYS_SPL_STACK		LOW_LEVEL_SRAM_STACK
> +
> +#define CONFIG_SYS_SPL_BSS_START_ADDR		0x80000000
> +#define CONFIG_SYS_SPL_BSS_MAX_SIZE		0x80000		/* 512 KB */
> +
> +#define CONFIG_SPL_LIBCOMMON_SUPPORT
> +#define CONFIG_SPL_LIBDISK_SUPPORT
> +#define CONFIG_SPL_I2C_SUPPORT
> +#define CONFIG_SPL_MMC_SUPPORT
> +#define CONFIG_SPL_FAT_SUPPORT
> +#define CONFIG_SPL_LIBGENERIC_SUPPORT
> +#define CONFIG_SPL_SERIAL_SUPPORT
> +#define CONFIG_SYS_SPL_LDSCRIPT "arch/arm/cpu/armv7/omap-common/u-boot-spl.lds"
> +
> +/*
> + * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
> + * 64 bytes before this address should be set aside for u-boot.img's
> + * header. That is 0x800FFFC0--0x80100000 should not be used for any
> + * other needs.
> + */
> +#define CONFIG_SYS_TEXT_BASE		0x80100000
> +
>   #endif /* __CONFIG_H */
Aneesh V - July 16, 2011, 2:24 p.m.
On Saturday 16 July 2011 07:06 PM, Daniel Schwierzeck wrote:
> Hi Aneesh,
>
> On 07/16/2011 02:53 PM, Aneesh V wrote:
>
>> diff --git a/include/configs/omap4_panda.h
>> b/include/configs/omap4_panda.h
>> index a8dd861..3244fc1 100644
>> --- a/include/configs/omap4_panda.h
>> +++ b/include/configs/omap4_panda.h
>> @@ -243,4 +243,30 @@
>> #define CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
>> #endif
>>
>> +/* Defines for SPL */
>> +#define CONFIG_SPL
>> +#define CONFIG_SYS_SPL_TEXT_BASE 0x40304350
>
> Does this work? The SPL framework patches currently use

Hmm.. Good catch. I think it was still working for me because I had
this in my linker script:

MEMORY { .sram : ORIGIN = CONFIG_SYS_SPL_TEXT_BASE,\
		 LENGTH = CONFIG_SYS_SPL_MAX_SIZE }

And then I was using the .sram region for rest of the script.

I think this over-rides the -Ttext on the linker command line.

>
> ifneq ($(CONFIG_SPL_TEXT_BASE),)
> CPPFLAGS += -DCONFIG_SPL_TEXT_BASE=$(CONFIG_SPL_TEXT_BASE)
> endif
>
> But CONFIG_SYS_SPL_TEXT_BASE seems to be the right name for this option.

Yes, looks like CONFIG_SYS_SPL_TEXT_BASE is the right name. For u-boot
we have CONFIG_SYS_TEXT_BASE

> Shall I fix it in the SPL framework patches?

I don't know if Daniel wants to do this himself.
As long as you are working on omap and use my linker script, you may
still be able to work without any compilation error.

If the framework is going to retain CONFIG_SPL_TEXT_BASE I shall
re-submit my patch.

best regards,
Aneesh
Aneesh V - July 16, 2011, 2:30 p.m.
On Saturday 16 July 2011 07:54 PM, Aneesh V wrote:
> On Saturday 16 July 2011 07:06 PM, Daniel Schwierzeck wrote:
>> Hi Aneesh,
>>
>> On 07/16/2011 02:53 PM, Aneesh V wrote:
>>
>>> diff --git a/include/configs/omap4_panda.h
>>> b/include/configs/omap4_panda.h
>>> index a8dd861..3244fc1 100644
>>> --- a/include/configs/omap4_panda.h
>>> +++ b/include/configs/omap4_panda.h
>>> @@ -243,4 +243,30 @@
>>> #define CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
>>> #endif
>>>
>>> +/* Defines for SPL */
>>> +#define CONFIG_SPL
>>> +#define CONFIG_SYS_SPL_TEXT_BASE 0x40304350
>>
>> Does this work? The SPL framework patches currently use
>
> Hmm.. Good catch. I think it was still working for me because I had
> this in my linker script:
>
> MEMORY { .sram : ORIGIN = CONFIG_SYS_SPL_TEXT_BASE,\
> LENGTH = CONFIG_SYS_SPL_MAX_SIZE }
>
> And then I was using the .sram region for rest of the script.
>
> I think this over-rides the -Ttext on the linker command line.
>
>>
>> ifneq ($(CONFIG_SPL_TEXT_BASE),)
>> CPPFLAGS += -DCONFIG_SPL_TEXT_BASE=$(CONFIG_SPL_TEXT_BASE)
>> endif
>>
>> But CONFIG_SYS_SPL_TEXT_BASE seems to be the right name for this option.
>
> Yes, looks like CONFIG_SYS_SPL_TEXT_BASE is the right name. For u-boot
> we have CONFIG_SYS_TEXT_BASE
>
>> Shall I fix it in the SPL framework patches?
>
> I don't know if Daniel wants to do this himself.
> As long as you are working on omap and use my linker script, you may
> still be able to work without any compilation error.

Oops! Terrible mix-up!! I took your mail to be from Simon and hence the
above confusion:-)

Yes, fixing this in the framework series seems to be the right thing.
Thanks.

best regards,
Aneesh
Wolfgang Denk - July 16, 2011, 3:02 p.m.
Dear Daniel Schwierzeck,

In message <4E2193DC.8040207@googlemail.com> you wrote:
>
> But CONFIG_SYS_SPL_TEXT_BASE seems to be the right name for this option.
> Shall I fix it in the SPL framework patches?

This is getting a very long name - and if we do this, we probably have
to rename a few other CONFIG_SPL_* into CONFIG_SYS_SPL_* as well.

If you are not really, really convinced this must be renamed I suggest
we stick with the shorter CONFIG_SPL_TEXT_BASE instead...

Thanks.

Best regards,

Wolfgang Denk
Daniel Schwierzeck - July 18, 2011, 9:42 a.m.
Dear Wolfgang,

On Sat, Jul 16, 2011 at 5:02 PM, Wolfgang Denk <wd@denx.de> wrote:
> Dear Daniel Schwierzeck,
>
> In message <4E2193DC.8040207@googlemail.com> you wrote:
>>
>> But CONFIG_SYS_SPL_TEXT_BASE seems to be the right name for this option.
>> Shall I fix it in the SPL framework patches?
>
> This is getting a very long name - and if we do this, we probably have
> to rename a few other CONFIG_SPL_* into CONFIG_SYS_SPL_* as well.
>
> If you are not really, really convinced this must be renamed I suggest
> we stick with the shorter CONFIG_SPL_TEXT_BASE instead...

ok I won't change the SPL patches. So CONFIG_SPL_* is the new prefix
for all SPL specific config options?

Best regards,
Daniel
Aneesh V - July 18, 2011, 9:44 a.m.
On Monday 18 July 2011 03:12 PM, Daniel Schwierzeck wrote:
> Dear Wolfgang,
>
> On Sat, Jul 16, 2011 at 5:02 PM, Wolfgang Denk<wd@denx.de>  wrote:
>> Dear Daniel Schwierzeck,
>>
>> In message<4E2193DC.8040207@googlemail.com>  you wrote:
>>>
>>> But CONFIG_SYS_SPL_TEXT_BASE seems to be the right name for this option.
>>> Shall I fix it in the SPL framework patches?
>>
>> This is getting a very long name - and if we do this, we probably have
>> to rename a few other CONFIG_SPL_* into CONFIG_SYS_SPL_* as well.
>>
>> If you are not really, really convinced this must be renamed I suggest
>> we stick with the shorter CONFIG_SPL_TEXT_BASE instead...
>
> ok I won't change the SPL patches. So CONFIG_SPL_* is the new prefix
> for all SPL specific config options?

Ok. I will change my patch to use CONFIG_SPL_TEXT_BASE then.

br,
Aneesh
Wolfgang Denk - July 18, 2011, 12:04 p.m.
Dear Daniel Schwierzeck,

In message <CACUy__WZKkYGB9PWu7hTBqBSFV5FD43+E78nD1JQA9pdqoFbPA@mail.gmail.com> you wrote:
> 
> ok I won't change the SPL patches. So CONFIG_SPL_* is the new prefix
> for all SPL specific config options?

I'm fine with that.

Best regards,

Wolfgang Denk
Simon Schwarz - July 18, 2011, 1:21 p.m.
Hi Aneesh,

On Sat, 16 Jul 2011 18:23:19 +0530
Aneesh V <aneesh@ti.com> wrote:

> * omap4_rev_string() reference changed to omap_rev_string()

>+	char omap4_rev_string[50];
[snip]
> +	printf("\nU-Boot SPL %s (%s - %s)\n", u_boot_rev,
> U_BOOT_DATE,
> +		U_BOOT_TIME);
> +	omap_rev_string(omap4_rev_string);
> +	printf("Texas Instruments %s\n", omap4_rev_string);

Shouldn't also the omap4_rev_string be renamed to omap_rev_string?

Regards
Simon
Aneesh V - July 18, 2011, 1:26 p.m.
Hi Simon,

On Monday 18 July 2011 06:51 PM, Simon Schwarz wrote:
> Hi Aneesh,
>
> On Sat, 16 Jul 2011 18:23:19 +0530
> Aneesh V<aneesh@ti.com>  wrote:
>
>> * omap4_rev_string() reference changed to omap_rev_string()
>
>> +	char omap4_rev_string[50];
> [snip]
>> +	printf("\nU-Boot SPL %s (%s - %s)\n", u_boot_rev,
>> U_BOOT_DATE,
>> +		U_BOOT_TIME);
>> +	omap_rev_string(omap4_rev_string);
>> +	printf("Texas Instruments %s\n", omap4_rev_string);
>
> Shouldn't also the omap4_rev_string be renamed to omap_rev_string?

Just the name of the local variable. But will fix it anyway in the next
revision.

br,
Aneesh

Patch

diff --git a/arch/arm/cpu/armv7/Makefile b/arch/arm/cpu/armv7/Makefile
index 299792a..92a5a96 100644
--- a/arch/arm/cpu/armv7/Makefile
+++ b/arch/arm/cpu/armv7/Makefile
@@ -26,7 +26,12 @@  include $(TOPDIR)/config.mk
 LIB	= $(obj)lib$(CPU).o
 
 START	:= start.o
-COBJS	:= cpu.o cache_v7.o
+
+ifndef CONFIG_SPL_BUILD
+COBJS	+= cache_v7.o
+COBJS	+= cpu.o
+endif
+
 COBJS  += syslib.o
 
 SRCS	:= $(START:.o=.S) $(COBJS:.o=.c)
diff --git a/arch/arm/cpu/armv7/omap-common/Makefile b/arch/arm/cpu/armv7/omap-common/Makefile
index 8f698f8..0708796 100644
--- a/arch/arm/cpu/armv7/omap-common/Makefile
+++ b/arch/arm/cpu/armv7/omap-common/Makefile
@@ -30,6 +30,10 @@  SOBJS	:= reset.o
 COBJS	:= timer.o
 COBJS	+= utils.o
 
+ifdef CONFIG_SPL_BUILD
+COBJS	+= spl.o
+endif
+
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
 
diff --git a/arch/arm/cpu/armv7/omap-common/spl.c b/arch/arm/cpu/armv7/omap-common/spl.c
new file mode 100644
index 0000000..166d7eb
--- /dev/null
+++ b/arch/arm/cpu/armv7/omap-common/spl.c
@@ -0,0 +1,82 @@ 
+/*
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Aneesh V <aneesh@ti.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/u-boot.h>
+#include <asm/arch/sys_proto.h>
+#include <timestamp_autogenerated.h>
+#include <version_autogenerated.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* Define global data structure pointer to it*/
+static gd_t gdata __attribute__ ((section(".data")));
+static bd_t bdata __attribute__ ((section(".data")));
+
+inline void hang(void)
+{
+	puts("### ERROR ### Please RESET the board ###\n");
+	for (;;)
+		;
+}
+
+void board_init_f(ulong dummy)
+{
+	/*
+	 * We call relocate_code() with relocation target same as the
+	 * CONFIG_SYS_SPL_TEXT_BASE. This will result in relocation getting
+	 * skipped. Instead, only .bss initialization will happen. That's
+	 * all we need
+	 */
+	debug(">>board_init_f()\n");
+	relocate_code(CONFIG_SYS_SPL_STACK, &gdata, CONFIG_SYS_SPL_TEXT_BASE);
+}
+
+void board_init_r(gd_t *id, ulong dummy)
+{
+	for (;;)
+		;
+}
+
+void preloader_console_init(void)
+{
+	const char *u_boot_rev = U_BOOT_VERSION;
+	char omap4_rev_string[50];
+
+	gd = &gdata;
+	gd->bd = &bdata;
+	gd->flags |= GD_FLG_RELOC;
+	gd->baudrate = CONFIG_BAUDRATE;
+
+	setup_clocks_for_console();
+	serial_init();		/* serial communications setup */
+
+	/* Avoid a second "U-Boot" coming from this string */
+	u_boot_rev = &u_boot_rev[7];
+
+	printf("\nU-Boot SPL %s (%s - %s)\n", u_boot_rev, U_BOOT_DATE,
+		U_BOOT_TIME);
+	omap_rev_string(omap4_rev_string);
+	printf("Texas Instruments %s\n", omap4_rev_string);
+}
diff --git a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
new file mode 100644
index 0000000..1f944a7
--- /dev/null
+++ b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
@@ -0,0 +1,62 @@ 
+/*
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *	Aneesh V <aneesh@ti.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
+ */
+
+MEMORY { .sram : ORIGIN = CONFIG_SYS_SPL_TEXT_BASE,\
+		 LENGTH = CONFIG_SYS_SPL_MAX_SIZE }
+MEMORY { .sdram : ORIGIN = CONFIG_SYS_SPL_BSS_START_ADDR, \
+		  LENGTH = CONFIG_SYS_SPL_BSS_MAX_SIZE }
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+	.text      :
+	{
+	__start = .;
+	  arch/arm/cpu/armv7/start.o	(.text)
+	  *(.text*)
+	} >.sram
+
+	. = ALIGN(4);
+	.rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram
+
+	. = ALIGN(4);
+	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
+	. = ALIGN(4);
+	__image_copy_end = .;
+	_end = .;
+
+	.bss :
+	{
+		. = ALIGN(4);
+		__bss_start = .;
+		*(.bss*)
+		. = ALIGN(4);
+		__bss_end__ = .;
+	} >.sdram
+}
diff --git a/arch/arm/cpu/armv7/omap4/Makefile b/arch/arm/cpu/armv7/omap4/Makefile
index e1ccd68..e7ee0b8 100644
--- a/arch/arm/cpu/armv7/omap4/Makefile
+++ b/arch/arm/cpu/armv7/omap4/Makefile
@@ -30,9 +30,12 @@  SOBJS	+= lowlevel_init.o
 COBJS	+= board.o
 COBJS	+= clocks.o
 COBJS	+= emif.o
-COBJS	+= mem.o
 COBJS	+= sdram_elpida.o
+
+ifndef CONFIG_SPL_BUILD
+COBJS	+= mem.o
 COBJS	+= sys_info.o
+endif
 
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/armv7/omap4/board.c b/arch/arm/cpu/armv7/omap4/board.c
index 786c239..54dd509 100644
--- a/arch/arm/cpu/armv7/omap4/board.c
+++ b/arch/arm/cpu/armv7/omap4/board.c
@@ -155,7 +155,14 @@  void s_init(void)
 	init_omap4_revision();
 	watchdog_init();
 	set_mux_conf_regs();
+#ifdef CONFIG_SPL_BUILD
+	preloader_console_init();
+#endif
 	prcm_init();
+#ifdef CONFIG_SPL_BUILD
+	/* For regular u-boot sdram_init() is called from dram_init() */
+	sdram_init();
+#endif
 }
 
 /*
diff --git a/arch/arm/cpu/armv7/omap4/clocks.c b/arch/arm/cpu/armv7/omap4/clocks.c
index e8d3a52..f1e233a 100644
--- a/arch/arm/cpu/armv7/omap4/clocks.c
+++ b/arch/arm/cpu/armv7/omap4/clocks.c
@@ -791,6 +791,39 @@  void lock_dpll(u32 *const base)
 	wait_for_lock(base);
 }
 
+void setup_clocks_for_console(void)
+{
+	/* Do not add any spl_debug prints in this function */
+	clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,
+			CD_CLKCTRL_CLKTRCTRL_SW_WKUP <<
+			CD_CLKCTRL_CLKTRCTRL_SHIFT);
+
+	/* Enable all UARTs - console will be on one of them */
+	clrsetbits_le32(&prcm->cm_l4per_uart1_clkctrl,
+			MODULE_CLKCTRL_MODULEMODE_MASK,
+			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+			MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+	clrsetbits_le32(&prcm->cm_l4per_uart2_clkctrl,
+			MODULE_CLKCTRL_MODULEMODE_MASK,
+			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+			MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+	clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl,
+			MODULE_CLKCTRL_MODULEMODE_MASK,
+			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+			MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+	clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl,
+			MODULE_CLKCTRL_MODULEMODE_MASK,
+			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+			MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+	clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,
+			CD_CLKCTRL_CLKTRCTRL_HW_AUTO <<
+			CD_CLKCTRL_CLKTRCTRL_SHIFT);
+}
+
 void prcm_init(void)
 {
 	switch (omap4_hw_init_context()) {
diff --git a/arch/arm/include/asm/arch-omap4/sys_proto.h b/arch/arm/include/asm/arch-omap4/sys_proto.h
index 1e62878..a81f8e5 100644
--- a/arch/arm/include/asm/arch-omap4/sys_proto.h
+++ b/arch/arm/include/asm/arch-omap4/sys_proto.h
@@ -44,6 +44,7 @@  u32 wait_on_value(u32, u32, void *, u32);
 void sdelay(unsigned long);
 void set_pl310_ctrl_reg(u32 val);
 void omap_rev_string(char *omap4_rev_string);
+void setup_clocks_for_console(void);
 void prcm_init(void);
 void bypass_dpll(u32 *const base);
 void freq_update_core(void);
diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h
index 33caa4e..69d53d2 100644
--- a/arch/arm/include/asm/omap_common.h
+++ b/arch/arm/include/asm/omap_common.h
@@ -34,4 +34,6 @@ 
 #define OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL	2
 #define OMAP_INIT_CONTEXT_UBOOT_AFTER_CH	3
 
+void preloader_console_init(void);
+
 #endif /* _OMAP_COMMON_H_ */
diff --git a/board/ti/panda/Makefile b/board/ti/panda/Makefile
index 2186403..09f88ee 100644
--- a/board/ti/panda/Makefile
+++ b/board/ti/panda/Makefile
@@ -25,7 +25,9 @@  include $(TOPDIR)/config.mk
 
 LIB	= $(obj)lib$(BOARD).o
 
+ifndef CONFIG_SPL_BUILD
 COBJS	:= panda.o
+endif
 
 SRCS	:= $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS))
diff --git a/board/ti/panda/config.mk b/board/ti/panda/config.mk
deleted file mode 100644
index 33901a7..0000000
--- a/board/ti/panda/config.mk
+++ /dev/null
@@ -1,31 +0,0 @@ 
-#
-# (C) Copyright 2006-2009
-# Texas Instruments Incorporated, <www.ti.com>
-#
-# OMAP 4430 SDP
-# see http://www.ti.com/ for more information on Texas Instruments
-#
-# 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
-#
-# SDRAM Address Space:
-# 8000'0000 - 9fff'ffff (512 MB)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-
-CONFIG_SYS_TEXT_BASE = 0x80e80000
diff --git a/board/ti/sdp4430/Makefile b/board/ti/sdp4430/Makefile
index f1ee544..12f2743 100644
--- a/board/ti/sdp4430/Makefile
+++ b/board/ti/sdp4430/Makefile
@@ -25,7 +25,9 @@  include $(TOPDIR)/config.mk
 
 LIB	= $(obj)lib$(BOARD).o
 
+ifndef CONFIG_SPL_BUILD
 COBJS	:= sdp.o cmd_bat.o
+endif
 
 SRCS	:= $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS))
diff --git a/board/ti/sdp4430/config.mk b/board/ti/sdp4430/config.mk
deleted file mode 100644
index 33901a7..0000000
--- a/board/ti/sdp4430/config.mk
+++ /dev/null
@@ -1,31 +0,0 @@ 
-#
-# (C) Copyright 2006-2009
-# Texas Instruments Incorporated, <www.ti.com>
-#
-# OMAP 4430 SDP
-# see http://www.ti.com/ for more information on Texas Instruments
-#
-# 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
-#
-# SDRAM Address Space:
-# 8000'0000 - 9fff'ffff (512 MB)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-
-CONFIG_SYS_TEXT_BASE = 0x80e80000
diff --git a/include/configs/omap4_panda.h b/include/configs/omap4_panda.h
index a8dd861..3244fc1 100644
--- a/include/configs/omap4_panda.h
+++ b/include/configs/omap4_panda.h
@@ -243,4 +243,30 @@ 
 #define CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
 #endif
 
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SYS_SPL_TEXT_BASE	0x40304350
+#define CONFIG_SYS_SPL_MAX_SIZE		0x8000	/* 32 K */
+#define CONFIG_SYS_SPL_STACK		LOW_LEVEL_SRAM_STACK
+
+#define CONFIG_SYS_SPL_BSS_START_ADDR		0x80000000
+#define CONFIG_SYS_SPL_BSS_MAX_SIZE		0x80000		/* 512 KB */
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SYS_SPL_LDSCRIPT "arch/arm/cpu/armv7/omap-common/u-boot-spl.lds"
+
+/*
+ * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE		0x80100000
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/omap4_sdp4430.h b/include/configs/omap4_sdp4430.h
index 534f89a..5c486c3 100644
--- a/include/configs/omap4_sdp4430.h
+++ b/include/configs/omap4_sdp4430.h
@@ -249,4 +249,30 @@ 
 #define CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
 #endif
 
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SYS_SPL_TEXT_BASE	0x40304350
+#define CONFIG_SYS_SPL_MAX_SIZE		0x8000	/* 32 K */
+#define CONFIG_SYS_SPL_STACK		LOW_LEVEL_SRAM_STACK
+
+#define CONFIG_SYS_SPL_BSS_START_ADDR		0x80000000
+#define CONFIG_SYS_SPL_BSS_MAX_SIZE		0x80000		/* 512 KB */
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SYS_SPL_LDSCRIPT "arch/arm/cpu/armv7/omap-common/u-boot-spl.lds"
+
+/*
+ * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE		0x80100000
+
 #endif /* __CONFIG_H */