diff mbox

[U-Boot,v5] ARM: Add Calxeda Highbank platform

Message ID 1313932575-31456-1-git-send-email-robherring2@gmail.com
State Changes Requested
Headers show

Commit Message

Rob Herring Aug. 21, 2011, 1:16 p.m. UTC
From: Rob Herring <rob.herring@calxeda.com>

Add basic support for Calxeda Highbank platform. Only minimal support with
serial and SATA are included.

Signed-off-by: Jason Hobbs <jason.hobbs@calxeda.com>
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
---
changes in v5:
 - Rebase to current u-boot-arm/master (5557e86bb0793012057d5462976c2a902bc629ac)

changes in v4:
 - Rebase to current mainline (d50a8f45c9a640b3bcbd0ede91f83c8646cca018)
 - Add back SATA support to inital patch as dependencies are all in mainline

changes in v3:
 - Add hignbank to MAINTAINERS

changes in v2:
 - Set DRAM size to correct value
 - split SATA and SD enabling to separate patches

 MAINTAINERS                           |    4 +
 arch/arm/cpu/armv7/highbank/Makefile  |   46 ++++++++++++
 arch/arm/cpu/armv7/highbank/config.mk |    4 +
 arch/arm/cpu/armv7/highbank/timer.c   |  124 +++++++++++++++++++++++++++++++++
 board/highbank/Makefile               |   49 +++++++++++++
 board/highbank/highbank.c             |   58 +++++++++++++++
 boards.cfg                            |    1 +
 include/configs/highbank.h            |  113 ++++++++++++++++++++++++++++++
 8 files changed, 399 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/cpu/armv7/highbank/Makefile
 create mode 100644 arch/arm/cpu/armv7/highbank/config.mk
 create mode 100644 arch/arm/cpu/armv7/highbank/timer.c
 create mode 100644 board/highbank/Makefile
 create mode 100644 board/highbank/highbank.c
 create mode 100644 include/configs/highbank.h

Comments

Albert ARIBAUD Aug. 21, 2011, 2:40 p.m. UTC | #1
Hi Rob,

Le 21/08/2011 15:16, Rob Herring a écrit :
> From: Rob Herring<rob.herring@calxeda.com>
>
> Add basic support for Calxeda Highbank platform. Only minimal support with
> serial and SATA are included.
>
> Signed-off-by: Jason Hobbs<jason.hobbs@calxeda.com>
> Signed-off-by: Rob Herring<rob.herring@calxeda.com>
> Cc: Albert ARIBAUD<albert.u.boot@aribaud.net>
> ---

This applies to u-boot-arm/master, with three empty lines at end of new 
files removed, but the compilation with ELDK 4.2 fails with:

uboot@lilith:~/src/u-boot-arm$ ./MAKEALL highbank
Configuring for highbank board...
include/common.h:0: error: bad value (armv7-a) for -march= switch
include/common.h:0: error: bad value (armv7-a) for -march= switch
lib/asm-offsets.c:1: error: bad value (armv7-a) for -march= switch
make: *** [lib/asm-offsets.s] Erreur 1
arm-linux-size: './u-boot': No such file

--------------------- SUMMARY ----------------------------
Boards compiled: 1
Boards with warnings or errors: 1 ( highbank )
----------------------------------------------------------

Seems like ELDK 4.2 does not know armv7-a. Is it a requirement that this 
board build with this march flag?

Amicalement,
Rob Herring Aug. 21, 2011, 7:28 p.m. UTC | #2
On 08/21/2011 09:40 AM, Albert ARIBAUD wrote:
> Hi Rob,
> 
> Le 21/08/2011 15:16, Rob Herring a écrit :
>> From: Rob Herring<rob.herring@calxeda.com>
>>
>> Add basic support for Calxeda Highbank platform. Only minimal support
>> with
>> serial and SATA are included.
>>
>> Signed-off-by: Jason Hobbs<jason.hobbs@calxeda.com>
>> Signed-off-by: Rob Herring<rob.herring@calxeda.com>
>> Cc: Albert ARIBAUD<albert.u.boot@aribaud.net>
>> ---
> 
> This applies to u-boot-arm/master, with three empty lines at end of new
> files removed, but the compilation with ELDK 4.2 fails with:
> 
> uboot@lilith:~/src/u-boot-arm$ ./MAKEALL highbank
> Configuring for highbank board...
> include/common.h:0: error: bad value (armv7-a) for -march= switch
> include/common.h:0: error: bad value (armv7-a) for -march= switch
> lib/asm-offsets.c:1: error: bad value (armv7-a) for -march= switch
> make: *** [lib/asm-offsets.s] Erreur 1
> arm-linux-size: './u-boot': No such file
> 
> --------------------- SUMMARY ----------------------------
> Boards compiled: 1
> Boards with warnings or errors: 1 ( highbank )
> ----------------------------------------------------------
> 
> Seems like ELDK 4.2 does not know armv7-a. Is it a requirement that this
> board build with this march flag?
> 

With device tree, there are lots of endian conversions. With v7, those
conversions are a single inline "rev" instruction vs. 10-20 assembly
instructions. Since there is no state maintained in the fdt code, the
conversions are done over and over.

So there's not a hard requirement, but it is something I will always set
and I imagine others with v7 platforms will want to also. I think Tegra
prevents doing this change globally.

Rob
Rob Herring Aug. 23, 2011, 2:32 p.m. UTC | #3
Albert,

On 08/21/2011 02:28 PM, Rob Herring wrote:
> On 08/21/2011 09:40 AM, Albert ARIBAUD wrote:
>> Hi Rob,
>>
>> Le 21/08/2011 15:16, Rob Herring a écrit :
>>> From: Rob Herring<rob.herring@calxeda.com>
>>>
>>> Add basic support for Calxeda Highbank platform. Only minimal support
>>> with
>>> serial and SATA are included.
>>>
>>> Signed-off-by: Jason Hobbs<jason.hobbs@calxeda.com>
>>> Signed-off-by: Rob Herring<rob.herring@calxeda.com>
>>> Cc: Albert ARIBAUD<albert.u.boot@aribaud.net>
>>> ---
>>
>> This applies to u-boot-arm/master, with three empty lines at end of new
>> files removed, but the compilation with ELDK 4.2 fails with:
>>
>> uboot@lilith:~/src/u-boot-arm$ ./MAKEALL highbank
>> Configuring for highbank board...
>> include/common.h:0: error: bad value (armv7-a) for -march= switch
>> include/common.h:0: error: bad value (armv7-a) for -march= switch
>> lib/asm-offsets.c:1: error: bad value (armv7-a) for -march= switch
>> make: *** [lib/asm-offsets.s] Erreur 1
>> arm-linux-size: './u-boot': No such file
>>
>> --------------------- SUMMARY ----------------------------
>> Boards compiled: 1
>> Boards with warnings or errors: 1 ( highbank )
>> ----------------------------------------------------------
>>
>> Seems like ELDK 4.2 does not know armv7-a. Is it a requirement that this
>> board build with this march flag?
>>
> 
> With device tree, there are lots of endian conversions. With v7, those
> conversions are a single inline "rev" instruction vs. 10-20 assembly
> instructions. Since there is no state maintained in the fdt code, the
> conversions are done over and over.
> 
> So there's not a hard requirement, but it is something I will always set
> and I imagine others with v7 platforms will want to also. I think Tegra
> prevents doing this change globally.
> 

What do you want to do here?

arch/arm/cpu/armv7/highbank/config.mk can simply be deleted if you don't
want to compile with armv7-a.

Rob
Albert ARIBAUD Aug. 24, 2011, 8:37 a.m. UTC | #4
Le 23/08/2011 16:32, Rob Herring a écrit :
> Albert,
>
> On 08/21/2011 02:28 PM, Rob Herring wrote:
>> On 08/21/2011 09:40 AM, Albert ARIBAUD wrote:
>>> Hi Rob,
>>>
>>> Le 21/08/2011 15:16, Rob Herring a écrit :
>>>> From: Rob Herring<rob.herring@calxeda.com>
>>>>
>>>> Add basic support for Calxeda Highbank platform. Only minimal support
>>>> with
>>>> serial and SATA are included.
>>>>
>>>> Signed-off-by: Jason Hobbs<jason.hobbs@calxeda.com>
>>>> Signed-off-by: Rob Herring<rob.herring@calxeda.com>
>>>> Cc: Albert ARIBAUD<albert.u.boot@aribaud.net>
>>>> ---
>>>
>>> This applies to u-boot-arm/master, with three empty lines at end of new
>>> files removed, but the compilation with ELDK 4.2 fails with:
>>>
>>> uboot@lilith:~/src/u-boot-arm$ ./MAKEALL highbank
>>> Configuring for highbank board...
>>> include/common.h:0: error: bad value (armv7-a) for -march= switch
>>> include/common.h:0: error: bad value (armv7-a) for -march= switch
>>> lib/asm-offsets.c:1: error: bad value (armv7-a) for -march= switch
>>> make: *** [lib/asm-offsets.s] Erreur 1
>>> arm-linux-size: './u-boot': No such file
>>>
>>> --------------------- SUMMARY ----------------------------
>>> Boards compiled: 1
>>> Boards with warnings or errors: 1 ( highbank )
>>> ----------------------------------------------------------
>>>
>>> Seems like ELDK 4.2 does not know armv7-a. Is it a requirement that this
>>> board build with this march flag?
>>>
>>
>> With device tree, there are lots of endian conversions. With v7, those
>> conversions are a single inline "rev" instruction vs. 10-20 assembly
>> instructions. Since there is no state maintained in the fdt code, the
>> conversions are done over and over.
>>
>> So there's not a hard requirement, but it is something I will always set
>> and I imagine others with v7 platforms will want to also. I think Tegra
>> prevents doing this change globally.
>>
>
> What do you want to do here?
>
> arch/arm/cpu/armv7/highbank/config.mk can simply be deleted if you don't
> want to compile with armv7-a.

Well, it is more a question of which toolchain(s) we want supported in 
U-Boot. Denx ELDK is one of them I guess :) but now that ELDK 5.0 is 
out, I don't know if ELDK 4.2 support is still required.

(I am assuming that ELDK5.0 has armv7-a support here. Please correct me 
if not)

If ELDK4.2 must be supported, then I would suggest creating a 
configuration option to allow the use of armv7-a ISA, then the 
arch/arm/cpu/armv7/highbank/config.mk file would select armv7-a ISA 
based on this option, and then any ARMv7 compatible board that needs or 
wants to use this ISA can set this config option in its config header file.

If ELDK4.2 support is dropped (at least partially) then no change would 
be needed.

Wolfgang:, I think that toolchain support for ARM is more your choice 
than mine.

> Rob

Amicalement,
Albert ARIBAUD Aug. 24, 2011, 9:41 a.m. UTC | #5
Le 24/08/2011 10:37, Albert ARIBAUD a écrit :
> Le 23/08/2011 16:32, Rob Herring a écrit :
>> Albert,
>>
>> On 08/21/2011 02:28 PM, Rob Herring wrote:
>>> On 08/21/2011 09:40 AM, Albert ARIBAUD wrote:
>>>> Hi Rob,
>>>>
>>>> Le 21/08/2011 15:16, Rob Herring a écrit :
>>>>> From: Rob Herring<rob.herring@calxeda.com>
>>>>>
>>>>> Add basic support for Calxeda Highbank platform. Only minimal support
>>>>> with
>>>>> serial and SATA are included.
>>>>>
>>>>> Signed-off-by: Jason Hobbs<jason.hobbs@calxeda.com>
>>>>> Signed-off-by: Rob Herring<rob.herring@calxeda.com>
>>>>> Cc: Albert ARIBAUD<albert.u.boot@aribaud.net>
>>>>> ---
>>>>
>>>> This applies to u-boot-arm/master, with three empty lines at end of new
>>>> files removed, but the compilation with ELDK 4.2 fails with:
>>>>
>>>> uboot@lilith:~/src/u-boot-arm$ ./MAKEALL highbank
>>>> Configuring for highbank board...
>>>> include/common.h:0: error: bad value (armv7-a) for -march= switch
>>>> include/common.h:0: error: bad value (armv7-a) for -march= switch
>>>> lib/asm-offsets.c:1: error: bad value (armv7-a) for -march= switch
>>>> make: *** [lib/asm-offsets.s] Erreur 1
>>>> arm-linux-size: './u-boot': No such file
>>>>
>>>> --------------------- SUMMARY ----------------------------
>>>> Boards compiled: 1
>>>> Boards with warnings or errors: 1 ( highbank )
>>>> ----------------------------------------------------------
>>>>
>>>> Seems like ELDK 4.2 does not know armv7-a. Is it a requirement that this
>>>> board build with this march flag?
>>>>
>>>
>>> With device tree, there are lots of endian conversions. With v7, those
>>> conversions are a single inline "rev" instruction vs. 10-20 assembly
>>> instructions. Since there is no state maintained in the fdt code, the
>>> conversions are done over and over.
>>>
>>> So there's not a hard requirement, but it is something I will always set
>>> and I imagine others with v7 platforms will want to also. I think Tegra
>>> prevents doing this change globally.
>>>
>>
>> What do you want to do here?
>>
>> arch/arm/cpu/armv7/highbank/config.mk can simply be deleted if you don't
>> want to compile with armv7-a.
>
> Well, it is more a question of which toolchain(s) we want supported in
> U-Boot. Denx ELDK is one of them I guess :) but now that ELDK 5.0 is
> out, I don't know if ELDK 4.2 support is still required.
>
> (I am assuming that ELDK5.0 has armv7-a support here. Please correct me
> if not)
>
> If ELDK4.2 must be supported, then I would suggest creating a
> configuration option to allow the use of armv7-a ISA, then the
> arch/arm/cpu/armv7/highbank/config.mk file would select armv7-a ISA
> based on this option, and then any ARMv7 compatible board that needs or
> wants to use this ISA can set this config option in its config header file.
>
> If ELDK4.2 support is dropped (at least partially) then no change would
> be needed.

... adding Wolfgang, this time...

> Wolfgang:, I think that toolchain support for ARM is more your choice
> than mine.
>
>> Rob
>
> Amicalement,


Amicalement,
Wolfgang Denk Aug. 24, 2011, 12:53 p.m. UTC | #6
Dear Albert ARIBAUD,

In message <4E54B862.2070000@aribaud.net> you wrote:
>
> Well, it is more a question of which toolchain(s) we want supported in 
> U-Boot. Denx ELDK is one of them I guess :) but now that ELDK 5.0 is 
> out, I don't know if ELDK 4.2 support is still required.

It seems reasonable to support any gcc 4.x configuration.

> If ELDK4.2 must be supported, then I would suggest creating a 
> configuration option to allow the use of armv7-a ISA, then the 
> arch/arm/cpu/armv7/highbank/config.mk file would select armv7-a ISA 

I don't tink I want to accept a board specific config.mk for such
apurpose.  We want to get rid of thse config.mk files.  Either ARMv7
based boards all need this option, or they all don;t need it.  Thisis
NOT a board specific feature.

> If ELDK4.2 support is dropped (at least partially) then no change would 
> be needed.
> 
> Wolfgang:, I think that toolchain support for ARM is more your choice 
> than mine.

See above - I see no reason why we should abandon ELDK 4.2 when adding
a new board - when all other boards with similar CPUs work just fine.

Best regards,

Wolfgang Denk
diff mbox

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index f895e9a..c383f6d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -219,6 +219,10 @@  Wolfgang Grandegger <wg@denx.de>
 	IPHASE4539	MPC8260
 	SCM		MPC8260
 
+Rob Herring <rob.herring@calxeda.com>
+
+	highbank	highbank
+
 Klaus Heydeck <heydeck@kieback-peter.de>
 
 	KUP4K		MPC855
diff --git a/arch/arm/cpu/armv7/highbank/Makefile b/arch/arm/cpu/armv7/highbank/Makefile
new file mode 100644
index 0000000..76faeb0
--- /dev/null
+++ b/arch/arm/cpu/armv7/highbank/Makefile
@@ -0,0 +1,46 @@ 
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# 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 $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(SOC).o
+
+COBJS	:= timer.o
+SOBJS	:=
+
+SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
+
+all:	$(obj).depend $(LIB)
+
+$(LIB):	$(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/armv7/highbank/config.mk b/arch/arm/cpu/armv7/highbank/config.mk
new file mode 100644
index 0000000..5ed5c39
--- /dev/null
+++ b/arch/arm/cpu/armv7/highbank/config.mk
@@ -0,0 +1,4 @@ 
+STANDALONE_LOAD_ADDR = 0x100000
+
+PLATFORM_CPPFLAGS += -march=armv7-a
+
diff --git a/arch/arm/cpu/armv7/highbank/timer.c b/arch/arm/cpu/armv7/highbank/timer.c
new file mode 100644
index 0000000..263f11a
--- /dev/null
+++ b/arch/arm/cpu/armv7/highbank/timer.c
@@ -0,0 +1,124 @@ 
+/*
+ * Copyright 2010-2011 Calxeda, Inc.
+ *
+ * Based on arm926ejs/mx27/timer.c
+ *
+ * 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 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <common.h>
+#include <div64.h>
+#include <linux/types.h>        /* for size_t */
+#include <linux/stddef.h>       /* for NULL */
+#include <asm/io.h>
+#include <asm/arch-armv7/systimer.h>
+
+#undef SYSTIMER_BASE
+#define SYSTIMER_BASE		0xFFF34000	/* Timer 0 and 1 base	*/
+#define SYSTIMER_RATE		150000000
+
+static ulong timestamp;
+static ulong lastinc;
+static struct systimer *systimer_base = (struct systimer *)SYSTIMER_BASE;
+
+/*
+ * Start the timer
+ */
+int timer_init(void)
+{
+	/*
+	 * Setup timer0
+	 */
+	writel(SYSTIMER_RELOAD, &systimer_base->timer0load);
+	writel(SYSTIMER_RELOAD, &systimer_base->timer0value);
+	writel(SYSTIMER_EN | SYSTIMER_32BIT, &systimer_base->timer0control);
+
+	reset_timer_masked();
+
+	return 0;
+
+}
+
+#define TICK_PER_TIME	((SYSTIMER_RATE + CONFIG_SYS_HZ / 2) / CONFIG_SYS_HZ)
+#define NS_PER_TICK	(1000000000 / SYSTIMER_RATE)
+
+static inline unsigned long long tick_to_time(unsigned long long tick)
+{
+	do_div(tick, TICK_PER_TIME);
+	return tick;
+}
+
+static inline unsigned long long time_to_tick(unsigned long long time)
+{
+	return time * TICK_PER_TIME;
+}
+
+static inline unsigned long long us_to_tick(unsigned long long us)
+{
+	unsigned long long tick = us << 16;
+	tick += NS_PER_TICK - 1;
+	do_div(tick, NS_PER_TICK);
+	return tick >> 16;
+}
+
+unsigned long long get_ticks(void)
+{
+	ulong now = ~readl(&systimer_base->timer0value);
+
+	if (now >= lastinc)	/* normal mode (non roll) */
+		/* move stamp forward with absolut diff ticks */
+		timestamp += (now - lastinc);
+	else			/* we have rollover of incrementer */
+		timestamp += (0xFFFFFFFF - lastinc) + now;
+	lastinc = now;
+	return timestamp;
+}
+
+/*
+ * Delay x useconds AND preserve advance timstamp value
+ *     assumes timer is ticking at 1 msec
+ */
+void __udelay(ulong usec)
+{
+	unsigned long long tmp;
+	ulong tmo;
+
+	tmo = us_to_tick(usec);
+	tmp = get_ticks() + tmo;	/* get current timestamp */
+
+	while (get_ticks() < tmp)	/* loop till event */
+		 /*NOP*/;
+}
+
+ulong get_timer(ulong base)
+{
+	return get_timer_masked() - base;
+}
+
+void reset_timer_masked(void)
+{
+	lastinc = ~readl(&systimer_base->timer0value);
+	timestamp = 0;
+}
+
+void reset_timer(void)
+{
+	reset_timer_masked();
+}
+
+ulong get_timer_masked(void)
+{
+	return tick_to_time(get_ticks());
+}
+
diff --git a/board/highbank/Makefile b/board/highbank/Makefile
new file mode 100644
index 0000000..d5b8362
--- /dev/null
+++ b/board/highbank/Makefile
@@ -0,0 +1,49 @@ 
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# 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 $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(BOARD).o
+
+COBJS	:= highbank.o
+
+SRCS	:= $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS))
+
+$(LIB):	$(obj).depend $(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+clean:
+	rm -f $(OBJS)
+
+distclean:	clean
+	rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/highbank/highbank.c b/board/highbank/highbank.c
new file mode 100644
index 0000000..bec3d2f
--- /dev/null
+++ b/board/highbank/highbank.c
@@ -0,0 +1,58 @@ 
+/*
+ * Copyright 2010-2011 Calxeda, Inc.
+ *
+ * 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 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <common.h>
+#include <ahci.h>
+#include <scsi.h>
+
+#include <asm/sizes.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Miscellaneous platform dependent initialisations
+ */
+int board_init(void)
+{
+	icache_enable();
+
+	return 0;
+}
+
+int misc_init_r(void)
+{
+	ahci_init(0xffe08000);
+	scsi_scan(1);
+	return 0;
+}
+
+int dram_init(void)
+{
+	gd->ram_size = SZ_512M;
+	return 0;
+}
+
+void dram_init_banksize(void)
+{
+	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+	gd->bd->bi_dram[0].size =  PHYS_SDRAM_1_SIZE;
+}
+
+void reset_cpu(ulong addr)
+{
+}
+
diff --git a/boards.cfg b/boards.cfg
index c31114d..dfa405e 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -173,6 +173,7 @@  dkb			     arm         arm926ejs   -                   Marvell        pantheon
 integratorap_cm946es         arm         arm946es    integrator          armltd         -               integratorap
 integratorcp_cm946es         arm         arm946es    integrator          armltd         -               integratorcp
 ca9x4_ct_vxp                 arm         armv7       vexpress            armltd
+highbank                     arm         armv7       highbank            -              highbank
 efikamx                      arm         armv7       efikamx             -              mx5		efikamx:IMX_CONFIG=board/efikamx/imximage.cfg
 mx51evk                      arm         armv7       mx51evk             freescale      mx5		mx51evk:IMX_CONFIG=board/freescale/mx51evk/imximage.cfg
 mx53ard                      arm         armv7       mx53ard             freescale      mx5		mx53ard:IMX_CONFIG=board/freescale/mx53ard/imximage_dd3.cfg
diff --git a/include/configs/highbank.h b/include/configs/highbank.h
new file mode 100644
index 0000000..9c85788
--- /dev/null
+++ b/include/configs/highbank.h
@@ -0,0 +1,113 @@ 
+/*
+ * Copyright 2010-2011 Calxeda, Inc.
+ *
+ * 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 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_L2_OFF
+
+#define CONFIG_SYS_NO_FLASH
+#define CFG_HZ				1000
+#define CONFIG_SYS_HZ			CFG_HZ
+
+#define CONFIG_OF_LIBFDT
+#define CONFIG_FIT
+#define CONFIG_SYS_BOOTMAPSZ		(16 << 20)
+
+/*
+ * Size of malloc() pool
+ */
+#define CONFIG_SYS_MALLOC_LEN		(512 * 1024)
+
+#define CONFIG_PL011_SERIAL
+#define CONFIG_PL011_CLOCK		150000000
+#define CONFIG_PL01x_PORTS		{ (void *)(0xFFF36000) }
+#define CONFIG_CONS_INDEX		0
+
+#define CONFIG_BAUDRATE			38400
+#define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 }
+
+#define CONFIG_MISC_INIT_R
+#define CONFIG_SCSI_AHCI
+#define CONFIG_SCSI_AHCI_PLAT
+#define CONFIG_SYS_SCSI_MAX_SCSI_ID	5
+#define CONFIG_SYS_SCSI_MAX_LUN		1
+#define CONFIG_SYS_SCSI_MAX_DEVICE	(CONFIG_SYS_SCSI_MAX_SCSI_ID * \
+					CONFIG_SYS_SCSI_MAX_LUN)
+
+#define CONFIG_DOS_PARTITION
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_NFS
+
+#define CONFIG_CMD_BDI
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_LOADS
+#define CONFIG_CMD_SCSI
+#define CONFIG_CMD_EXT2
+
+#define CONFIG_BOOTDELAY		2
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_LONGHELP		/* undef to save memory		 */
+#define CONFIG_SYS_CBSIZE		256	/* Console I/O Buffer Size */
+#define CONFIG_SYS_MAXARGS		16	/* max number of cmd args */
+#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE
+#define CONFIG_SYS_PROMPT		"Highbank #"
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
+					 sizeof(CONFIG_SYS_PROMPT)+16)
+
+#define CONFIG_SYS_LOAD_ADDR		0x800000
+
+/*-----------------------------------------------------------------------
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE		(128*1024)	/* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ		(4*1024)	/* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ		(4*1024)	/* FIQ stack */
+#endif
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS		1
+#define PHYS_SDRAM_1_SIZE		(4089 << 20)
+#define CONFIG_SYS_MEMTEST_START	0x100000
+#define CONFIG_SYS_MEMTEST_END		(PHYS_SDRAM_1_SIZE - 0x100000)
+
+/* Room required on the stack for the environment data */
+#define CONFIG_ENV_SIZE			0x2000
+#define CONFIG_ENV_IS_NOWHERE
+
+#define CONFIG_SYS_SDRAM_BASE		0x00000000
+#define CONFIG_SYS_TEXT_BASE		0x00001000
+#define CONFIG_SYS_INIT_SP_ADDR		0x01000000
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+#endif