Jump to content

ColdFire MCF548x

From HW wiki

Bootloaders

U-Boot

Current version of U-Boot (u-boot-2011.06-rc2) requires small compilation fixes:

diff -rupN u-boot-2011.06-rc2/arch/m68k/cpu/mcf547x_8x/Makefile u-boot-2011.06-rc2-mod/arch/m68k/cpu/mcf547x_8x/Makefile
--- u-boot-2011.06-rc2/arch/m68k/cpu/mcf547x_8x/Makefile	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/arch/m68k/cpu/mcf547x_8x/Makefile	2011-06-03 18:31:05.849143300 +0200
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 # CFLAGS += -DET_DEBUG
 
-LIB	= lib$(CPU).o
+LIB	= $(obj)lib$(CPU).o
 
 START	=
 COBJS	= cpu.o speed.o cpu_init.o pci.o interrupts.o slicetimer.o
diff -rupN u-boot-2011.06-rc2/board/freescale/m548xevb/u-boot.lds u-boot-2011.06-rc2-mod/board/freescale/m548xevb/u-boot.lds
--- u-boot-2011.06-rc2/board/freescale/m548xevb/u-boot.lds	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/board/freescale/m548xevb/u-boot.lds	2011-06-03 18:28:15.013291752 +0200
@@ -56,9 +56,9 @@ SECTIONS
     /* the sector layout of our flash chips!	XXX FIXME XXX	*/
 
     arch/m68k/cpu/mcf547x_8x/start.o		(.text)
-    arch/m68k/lib/traps.o		(.text)
+    /*arch/m68k/lib/traps.o		(.text)
     arch/m68k/lib/interrupts.o	(.text)
-    common/dlmalloc.o		(.text)
+    common/dlmalloc.o		(.text)*/
 
     . = DEFINED(env_offset) ? env_offset : .;
     common/env_embedded.o	(.text)

This patch will allow booting U-Boot from SRAM. This allows keeping original dBUG bootloader on the board and send U-Boot via ethernet and then boot it from SRAM. It requires MBAR on 0x01000000 and SDRAM base on 0x00000000.

diff -rupN u-boot-2011.06-rc2/arch/m68k/cpu/mcf547x_8x/start.S u-boot-2011.06-rc2-mod/arch/m68k/cpu/mcf547x_8x/start.S
--- u-boot-2011.06-rc2/arch/m68k/cpu/mcf547x_8x/start.S	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/arch/m68k/cpu/mcf547x_8x/start.S	2011-06-05 18:24:40.791112512 +0200
@@ -130,7 +130,7 @@ _start:
 	move.w #0x2700,%sr		/* Mask off Interrupt */
 
 	/* Set vector base register at the beginning of the Flash */
-	move.l	#CONFIG_SYS_FLASH_BASE, %d0
+	move.l	#CONFIG_SYS_TEXT_BASE, %d0
 	movec	%d0, %VBR
 
 	move.l	#(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_RAM_CTRL), %d0
@@ -139,8 +139,11 @@ _start:
 	move.l	#(CONFIG_SYS_INIT_RAM1_ADDR + CONFIG_SYS_INIT_RAM1_CTRL), %d0
 	movec	%d0, %RAMBAR1
 
+#ifndef CONFIG_SYS_SRAM_BOOT
+	/* Don't do this if we are running from SRAM */
 	move.l	#CONFIG_SYS_MBAR, %d0		/* set MBAR address */
 	move.c	%d0, %MBAR
+#endif
 
 	/* invalidate and disable cache */
 	move.l	#0x01040100, %d0	/* Invalidate cache cmd */
diff -rupN u-boot-2011.06-rc2/board/freescale/m548xevb/config.mk u-boot-2011.06-rc2-mod/board/freescale/m548xevb/config.mk
--- u-boot-2011.06-rc2/board/freescale/m548xevb/config.mk	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/board/freescale/m548xevb/config.mk	2011-06-05 18:05:07.807347260 +0200
@@ -22,4 +22,8 @@
 # MA 02111-1307 USA
 #
 
-CONFIG_SYS_TEXT_BASE = 0xFF800000
+ifdef SRAM_BOOT
+	CONFIG_SYS_TEXT_BASE = 0x01000000
+else
+	CONFIG_SYS_TEXT_BASE = 0xFF800000
+endif
diff -rupN u-boot-2011.06-rc2/board/freescale/m548xevb/m548xevb.c u-boot-2011.06-rc2-mod/board/freescale/m548xevb/m548xevb.c
--- u-boot-2011.06-rc2/board/freescale/m548xevb/m548xevb.c	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/board/freescale/m548xevb/m548xevb.c	2011-06-15 14:45:58.556427667 +0200
@@ -68,13 +70,18 @@ phys_size_t initdram(int board_type)
 	sdram->cfg1 = CONFIG_SYS_SDRAM_CFG1;
 	sdram->cfg2 = CONFIG_SYS_SDRAM_CFG2;
 
+#ifdef CONFIG_SYS_SRAM_BOOT
+	/* This is already done; and MODE_EN in ctrl will be disabled. */
+	return dramsize;
+#endif
+
 	/* Issue PALL */
 	sdram->ctrl = CONFIG_SYS_SDRAM_CTRL | 2;
 
 	/* Issue LEMR */
 	sdram->mode = CONFIG_SYS_SDRAM_EMOD;
 	sdram->mode = (CONFIG_SYS_SDRAM_MODE | 0x04000000);

 	udelay(500);
 
 	/* Issue PALL */
diff -rupN u-boot-2011.06-rc2/include/configs/M5475EVB.h u-boot-2011.06-rc2-mod/include/configs/M5475EVB.h
--- u-boot-2011.06-rc2/include/configs/M5475EVB.h	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/include/configs/M5475EVB.h	2011-06-05 18:21:21.431681338 +0200
@@ -239,7 +239,7 @@
 #define CONFIG_SYS_MEMTEST_START	CONFIG_SYS_SDRAM_BASE + 0x400
 #define CONFIG_SYS_MEMTEST_END		((CONFIG_SYS_SDRAM_SIZE - 3) << 20)
 
-#define CONFIG_SYS_MONITOR_BASE	(CONFIG_SYS_FLASH_BASE + 0x400)
+#define CONFIG_SYS_MONITOR_BASE	(CONFIG_SYS_TEXT_BASE + 0x400)
 #define CONFIG_SYS_MONITOR_LEN		(256 << 10)	/* Reserve 256 kB for Monitor */
 
 #define CONFIG_SYS_BOOTPARAMS_LEN	64*1024
diff -rupN u-boot-2011.06-rc2/include/configs/M5485EVB.h u-boot-2011.06-rc2-mod/include/configs/M5485EVB.h
--- u-boot-2011.06-rc2/include/configs/M5485EVB.h	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/include/configs/M5485EVB.h	2011-06-15 14:29:14.422206634 +0200
@@ -181,8 +181,13 @@
 #define CONFIG_SYS_CLK			CONFIG_SYS_BUSCLK
 #define CONFIG_SYS_CPU_CLK		CONFIG_SYS_CLK * 2
 
-#define CONFIG_SYS_MBAR		0xF0000000
-#define CONFIG_SYS_INTSRAM		(CONFIG_SYS_MBAR + 0x10000)
+#ifndef CONFIG_SYS_SRAM_BOOT
+#define CONFIG_SYS_MBAR		0xF0000000 /* And we use that value because of? */
+#else
+#define CONFIG_SYS_MBAR		0x10000000
+#endif
+
+#define CONFIG_SYS_INTSRAM		(CONFIG_SYS_MBAR + 0x10000) /* ??? */
 #define CONFIG_SYS_INTSRAMSZ		0x8000
 
 /*#define CONFIG_SYS_LATCH_ADDR		(CONFIG_SYS_CS1_BASE + 0x80000)*/
@@ -225,7 +230,7 @@
 #define CONFIG_SYS_MEMTEST_START	CONFIG_SYS_SDRAM_BASE + 0x400
 #define CONFIG_SYS_MEMTEST_END		((CONFIG_SYS_SDRAM_SIZE - 3) << 20)
 
-#define CONFIG_SYS_MONITOR_BASE	(CONFIG_SYS_FLASH_BASE + 0x400)
+#define CONFIG_SYS_MONITOR_BASE	(CONFIG_SYS_TEXT_BASE + 0x400)
 #define CONFIG_SYS_MONITOR_LEN		(256 << 10)	/* Reserve 256 kB for Monitor */
 
 #define CONFIG_SYS_BOOTPARAMS_LEN	64*1024
diff -rupN u-boot-2011.06-rc2/Makefile u-boot-2011.06-rc2-mod/Makefile
--- u-boot-2011.06-rc2/Makefile	2011-06-02 23:19:27.000000000 +0200
+++ u-boot-2011.06-rc2-mod/Makefile	2011-06-15 11:54:54.643463575 +0200
@@ -758,6 +758,45 @@ M5485HFE_config :	unconfig
 	fi
 	@$(MKCONFIG) -n $@ -a M5485EVB m68k mcf547x_8x m548xevb freescale
 
+M5485AFE_SRAM_config \
+M5485BFE_SRAM_config \
+M5485CFE_SRAM_config \
+M5485DFE_SRAM_config \
+M5485EFE_SRAM_config \
+M5485FFE_SRAM_config \
+M5485GFE_SRAM_config \
+M5485HFE_SRAM_config :	unconfig
+	@case "$@" in \
+	M5485AFE_SRAM_config)	BOOT=2;CODE=0;VID=0;USB=0;RAM=64;RAM1=0;; \
+	M5485BFE_SRAM_config)	BOOT=2;CODE=16;VID=0;USB=0;RAM=64;RAM1=0;; \
+	M5485CFE_SRAM_config)	BOOT=2;CODE=16;VID=1;USB=1;RAM=64;RAM1=0;; \
+	M5485DFE_SRAM_config)	BOOT=2;CODE=0;VID=0;USB=1;RAM=64;RAM1=0;; \
+	M5485EFE_SRAM_config)	BOOT=2;CODE=0;VID=1;USB=1;RAM=64;RAM1=0;; \
+	M5485FFE_SRAM_config)	BOOT=2;CODE=32;VID=1;USB=1;RAM=64;RAM1=64;; \
+	M5485GFE_SRAM_config)	BOOT=4;CODE=0;VID=0;USB=0;RAM=64;RAM1=0;; \
+	M5485HFE_SRAM_config)	BOOT=2;CODE=16;VID=1;USB=0;RAM=64;RAM1=0;; \
+	esac; \
+	echo "#define CONFIG_SYS_BUSCLK	100000000" > $(obj)include/config.h ; \
+	echo "#define CONFIG_SYS_BOOTSZ	$${BOOT}" >> $(obj)include/config.h ; \
+	echo "#define CONFIG_SYS_DRAMSZ	$${RAM}" >> $(obj)include/config.h ; \
+	echo "#define CONFIG_SYS_SRAM_BOOT" >> $(obj)include/config.h ; \
+	if [ "$${RAM1}" != "0" ] ; then \
+		echo "#define CONFIG_SYS_DRAMSZ1	$${RAM1}" >> $(obj)include/config.h ; \
+	fi; \
+	if [ "$${CODE}" != "0" ] ; then \
+		echo "#define CONFIG_SYS_NOR1SZ	$${CODE}" >> $(obj)include/config.h ; \
+	fi; \
+	if [ "$${VID}" == "1" ] ; then \
+		echo "#define CONFIG_SYS_VIDEO" >> $(obj)include/config.h ; \
+	fi; \
+	if [ "$${USB}" == "1" ] ; then \
+		echo "#define CONFIG_SYS_USBCTRL" >> $(obj)include/config.h ; \
+	fi
+	
+	@$(MKCONFIG) -n $@ -a M5485EVB m68k mcf547x_8x m548xevb freescale
+	#add the ram switch to config.mk
+	echo "SRAM_BOOT = 1" >> $(obj)include/config.mk
+
 #========================================================================
 # ARM
 #========================================================================