All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol
@ 2012-10-20  7:08 Allen Martin
  2012-10-20  7:08 ` [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework Allen Martin
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Allen Martin @ 2012-10-20  7:08 UTC (permalink / raw)
  To: u-boot

Change jump_to_image_no_args() to a weak symbol to allow override by
SoC specific code.  This is required by tegra because the SPL runs on
a different CPU from the image it is loading, so tegra specific
initialization is required to start the host CPU.  Pass in spl_image
as a parameter for the same reason.

Signed-off-by: Allen Martin <amartin@nvidia.com>
---
 common/spl/spl.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/common/spl/spl.c b/common/spl/spl.c
index 0d829c0..f068abd 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -113,13 +113,13 @@ void spl_parse_image_header(const struct image_header *header)
 	}
 }
 
-static void __noreturn jump_to_image_no_args(void)
+__weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 {
 	typedef void __noreturn (*image_entry_noargs_t)(u32 *);
 	image_entry_noargs_t image_entry =
-			(image_entry_noargs_t) spl_image.entry_point;
+			(image_entry_noargs_t) spl_image->entry_point;
 
-	debug("image entry point: 0x%X\n", spl_image.entry_point);
+	debug("image entry point: 0x%X\n", spl_image->entry_point);
 	/* Pass the saved boot_params from rom code */
 #if defined(CONFIG_VIRTIO) || defined(CONFIG_ZEBU)
 	image_entry = (image_entry_noargs_t)0x80100000;
@@ -223,7 +223,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
 	default:
 		debug("Unsupported OS image.. Jumping nevertheless..\n");
 	}
-	jump_to_image_no_args();
+	jump_to_image_no_args(&spl_image);
 }
 
 /*
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework
  2012-10-20  7:08 [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol Allen Martin
@ 2012-10-20  7:08 ` Allen Martin
  2012-10-22 17:09   ` Stephen Warren
                     ` (2 more replies)
  2012-10-21  3:03 ` [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol Tom Rini
  2012-10-26 16:39 ` Simon Glass
  2 siblings, 3 replies; 9+ messages in thread
From: Allen Martin @ 2012-10-20  7:08 UTC (permalink / raw)
  To: u-boot

Change tegra SPL to use common SPL framework.  Any tegra specific
initialization is now done in spl_board_init() instead of
board_init_f()/board_init_r().  Only one SPL boot target is supported
on tegra, which is boot to RAM image.  jump_to_image_no_args() must be
overridden on tegra so the host CPU can be initialized.

Signed-off-by: Allen Martin <amartin@nvidia.com>
---
v2: Add back some required headers to avoid compiler warnings
---
 arch/arm/cpu/arm720t/tegra-common/spl.c |   91 +++++--------------------------
 arch/arm/include/asm/arch-tegra20/spl.h |   28 ++++++++++
 include/configs/tegra20-common.h        |    4 ++
 3 files changed, 46 insertions(+), 77 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-tegra20/spl.h

diff --git a/arch/arm/cpu/arm720t/tegra-common/spl.c b/arch/arm/cpu/arm720t/tegra-common/spl.c
index 0d37ce8..c280ab7 100644
--- a/arch/arm/cpu/arm720t/tegra-common/spl.c
+++ b/arch/arm/cpu/arm720t/tegra-common/spl.c
@@ -23,105 +23,42 @@
  * MA 02111-1307 USA
  */
 #include <common.h>
-#include <asm/u-boot.h>
-#include <asm/utils.h>
-#include <nand.h>
-#include <mmc.h>
-#include <fat.h>
-#include <version.h>
-#include <i2c.h>
-#include <image.h>
-#include <malloc.h>
-#include <linux/compiler.h>
 #include "cpu.h"
+#include <spl.h>
 
 #include <asm/io.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/tegra.h>
 #include <asm/arch-tegra/board.h>
-#include <asm/arch-tegra/clk_rst.h>
-#include <asm/arch-tegra/pmc.h>
-#include <asm/arch-tegra/scu.h>
-#include <asm/arch-tegra/sys_proto.h>
+#include <asm/arch/spl.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)
+void spl_board_init(void)
 {
-	puts("### ERROR ### Please RESET the board ###\n");
-	for (;;)
-		;
-}
+	struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+
+	/* enable JTAG */
+	writel(0xC0, &pmt->pmt_cfg_ctl);
 
-void board_init_f(ulong dummy)
-{
 	board_init_uart_f();
 
 	/* Initialize periph GPIOs */
 	gpio_early_init_uart();
 
-	/*
-	 * 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_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE);
+	clock_early_init();
+	preloader_console_init();
 }
 
-/* This requires UART clocks to be enabled */
-static void preloader_console_init(void)
+u32 spl_boot_device(void)
 {
-	const char *u_boot_rev = U_BOOT_VERSION;
-
-	gd = &gdata;
-	gd->bd = &bdata;
-	gd->flags |= GD_FLG_RELOC;
-	gd->baudrate = CONFIG_BAUDRATE;
-
-	serial_init();		/* serial communications setup */
-
-	gd->have_console = 1;
-
-	/* 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);
+	return BOOT_DEVICE_RAM;
 }
 
-void board_init_r(gd_t *id, ulong dummy)
+void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 {
-	struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
-
-	/* enable JTAG */
-	writel(0xC0, &pmt->pmt_cfg_ctl);
-
-	debug(">>spl:board_init_r()\n");
-
-	mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
-			CONFIG_SYS_SPL_MALLOC_SIZE);
-
-#ifdef CONFIG_SPL_BOARD_INIT
-	spl_board_init();
-#endif
+	debug("image entry point: 0x%X\n", spl_image->entry_point);
 
-	clock_early_init();
-	serial_init();
-	preloader_console_init();
-
-	start_cpu((u32)CONFIG_SYS_TEXT_BASE);
+	start_cpu((u32)spl_image->entry_point);
 	halt_avp();
-	/* not reached */
-}
-
-int board_usb_init(const void *blob)
-{
-	return 0;
 }
diff --git a/arch/arm/include/asm/arch-tegra20/spl.h b/arch/arm/include/asm/arch-tegra20/spl.h
new file mode 100644
index 0000000..5e453c5
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra20/spl.h
@@ -0,0 +1,28 @@
+/*
+ * (C) Copyright 2012
+ * NVIDIA Corporation <www.nvidia.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
+ */
+#ifndef	_ASM_ARCH_SPL_H_
+#define	_ASM_ARCH_SPL_H_
+
+#define BOOT_DEVICE_RAM         1
+
+#endif
diff --git a/include/configs/tegra20-common.h b/include/configs/tegra20-common.h
index 2274ee9..d7d6dc3 100644
--- a/include/configs/tegra20-common.h
+++ b/include/configs/tegra20-common.h
@@ -169,6 +169,7 @@
 #define PHYS_SDRAM_1_SIZE	0x20000000	/* 512M */
 
 #define CONFIG_SYS_TEXT_BASE	0x0010c000
+#define CONFIG_SYS_UBOOT_START	CONFIG_SYS_TEXT_BASE
 #define CONFIG_SYS_SDRAM_BASE	PHYS_SDRAM_1
 
 #define CONFIG_SYS_INIT_RAM_ADDR	CONFIG_STACKBASE
@@ -184,6 +185,9 @@
 
 /* Defines for SPL */
 #define CONFIG_SPL
+#define CONFIG_SPL_FRAMEWORK
+#define CONFIG_SPL_RAM_DEVICE
+#define CONFIG_SPL_BOARD_INIT
 #define CONFIG_SPL_NAND_SIMPLE
 #define CONFIG_SPL_TEXT_BASE		0x00108000
 #define CONFIG_SPL_MAX_SIZE		(CONFIG_SYS_TEXT_BASE - \
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol
  2012-10-20  7:08 [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol Allen Martin
  2012-10-20  7:08 ` [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework Allen Martin
@ 2012-10-21  3:03 ` Tom Rini
  2012-10-26 16:39 ` Simon Glass
  2 siblings, 0 replies; 9+ messages in thread
From: Tom Rini @ 2012-10-21  3:03 UTC (permalink / raw)
  To: u-boot

On Sat, Oct 20, 2012 at 12:08:22AM -0700, Allen Martin wrote:

> Change jump_to_image_no_args() to a weak symbol to allow override by
> SoC specific code.  This is required by tegra because the SPL runs on
> a different CPU from the image it is loading, so tegra specific
> initialization is required to start the host CPU.  Pass in spl_image
> as a parameter for the same reason.
> 
> Signed-off-by: Allen Martin <amartin@nvidia.com>

Acked-by: Tom Rini <trini@ti.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121020/216a603b/attachment.pgp>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework
  2012-10-20  7:08 ` [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework Allen Martin
@ 2012-10-22 17:09   ` Stephen Warren
  2012-10-22 22:45   ` Lucas Stach
  2012-10-26 16:38   ` Simon Glass
  2 siblings, 0 replies; 9+ messages in thread
From: Stephen Warren @ 2012-10-22 17:09 UTC (permalink / raw)
  To: u-boot

On 10/20/2012 01:08 AM, Allen Martin wrote:
> Change tegra SPL to use common SPL framework.  Any tegra specific
> initialization is now done in spl_board_init() instead of
> board_init_f()/board_init_r().  Only one SPL boot target is supported
> on tegra, which is boot to RAM image.  jump_to_image_no_args() must be
> overridden on tegra so the host CPU can be initialized.

The series,
Acked-by: Stephen Warren <swarren@nvidia.com>
Tested-by: Stephen Warren <swarren@nvidia.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework
  2012-10-20  7:08 ` [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework Allen Martin
  2012-10-22 17:09   ` Stephen Warren
@ 2012-10-22 22:45   ` Lucas Stach
  2012-10-26 16:38   ` Simon Glass
  2 siblings, 0 replies; 9+ messages in thread
From: Lucas Stach @ 2012-10-22 22:45 UTC (permalink / raw)
  To: u-boot

Am Samstag, den 20.10.2012, 00:08 -0700 schrieb Allen Martin:
> Change tegra SPL to use common SPL framework.  Any tegra specific
> initialization is now done in spl_board_init() instead of
> board_init_f()/board_init_r().  Only one SPL boot target is supported
> on tegra, which is boot to RAM image.  jump_to_image_no_args() must be
> overridden on tegra so the host CPU can be initialized.
> 
> Signed-off-by: Allen Martin <amartin@nvidia.com>
Tested-by: Lucas Stach <dev@lynxeye.de>

> ---
> v2: Add back some required headers to avoid compiler warnings
> ---
>  arch/arm/cpu/arm720t/tegra-common/spl.c |   91 +++++--------------------------
>  arch/arm/include/asm/arch-tegra20/spl.h |   28 ++++++++++
>  include/configs/tegra20-common.h        |    4 ++
>  3 files changed, 46 insertions(+), 77 deletions(-)
>  create mode 100644 arch/arm/include/asm/arch-tegra20/spl.h
> 
> diff --git a/arch/arm/cpu/arm720t/tegra-common/spl.c b/arch/arm/cpu/arm720t/tegra-common/spl.c
> index 0d37ce8..c280ab7 100644
> --- a/arch/arm/cpu/arm720t/tegra-common/spl.c
> +++ b/arch/arm/cpu/arm720t/tegra-common/spl.c
> @@ -23,105 +23,42 @@
>   * MA 02111-1307 USA
>   */
>  #include <common.h>
> -#include <asm/u-boot.h>
> -#include <asm/utils.h>
> -#include <nand.h>
> -#include <mmc.h>
> -#include <fat.h>
> -#include <version.h>
> -#include <i2c.h>
> -#include <image.h>
> -#include <malloc.h>
> -#include <linux/compiler.h>
>  #include "cpu.h"
> +#include <spl.h>
>  
>  #include <asm/io.h>
>  #include <asm/arch/clock.h>
>  #include <asm/arch/pinmux.h>
>  #include <asm/arch/tegra.h>
>  #include <asm/arch-tegra/board.h>
> -#include <asm/arch-tegra/clk_rst.h>
> -#include <asm/arch-tegra/pmc.h>
> -#include <asm/arch-tegra/scu.h>
> -#include <asm/arch-tegra/sys_proto.h>
> +#include <asm/arch/spl.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)
> +void spl_board_init(void)
>  {
> -	puts("### ERROR ### Please RESET the board ###\n");
> -	for (;;)
> -		;
> -}
> +	struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
> +
> +	/* enable JTAG */
> +	writel(0xC0, &pmt->pmt_cfg_ctl);
>  
> -void board_init_f(ulong dummy)
> -{
>  	board_init_uart_f();
>  
>  	/* Initialize periph GPIOs */
>  	gpio_early_init_uart();
>  
> -	/*
> -	 * 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_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE);
> +	clock_early_init();
> +	preloader_console_init();
>  }
>  
> -/* This requires UART clocks to be enabled */
> -static void preloader_console_init(void)
> +u32 spl_boot_device(void)
>  {
> -	const char *u_boot_rev = U_BOOT_VERSION;
> -
> -	gd = &gdata;
> -	gd->bd = &bdata;
> -	gd->flags |= GD_FLG_RELOC;
> -	gd->baudrate = CONFIG_BAUDRATE;
> -
> -	serial_init();		/* serial communications setup */
> -
> -	gd->have_console = 1;
> -
> -	/* 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);
> +	return BOOT_DEVICE_RAM;
>  }
>  
> -void board_init_r(gd_t *id, ulong dummy)
> +void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
>  {
> -	struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
> -
> -	/* enable JTAG */
> -	writel(0xC0, &pmt->pmt_cfg_ctl);
> -
> -	debug(">>spl:board_init_r()\n");
> -
> -	mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
> -			CONFIG_SYS_SPL_MALLOC_SIZE);
> -
> -#ifdef CONFIG_SPL_BOARD_INIT
> -	spl_board_init();
> -#endif
> +	debug("image entry point: 0x%X\n", spl_image->entry_point);
>  
> -	clock_early_init();
> -	serial_init();
> -	preloader_console_init();
> -
> -	start_cpu((u32)CONFIG_SYS_TEXT_BASE);
> +	start_cpu((u32)spl_image->entry_point);
>  	halt_avp();
> -	/* not reached */
> -}
> -
> -int board_usb_init(const void *blob)
> -{
> -	return 0;
>  }
> diff --git a/arch/arm/include/asm/arch-tegra20/spl.h b/arch/arm/include/asm/arch-tegra20/spl.h
> new file mode 100644
> index 0000000..5e453c5
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-tegra20/spl.h
> @@ -0,0 +1,28 @@
> +/*
> + * (C) Copyright 2012
> + * NVIDIA Corporation <www.nvidia.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
> + */
> +#ifndef	_ASM_ARCH_SPL_H_
> +#define	_ASM_ARCH_SPL_H_
> +
> +#define BOOT_DEVICE_RAM         1
> +
> +#endif
> diff --git a/include/configs/tegra20-common.h b/include/configs/tegra20-common.h
> index 2274ee9..d7d6dc3 100644
> --- a/include/configs/tegra20-common.h
> +++ b/include/configs/tegra20-common.h
> @@ -169,6 +169,7 @@
>  #define PHYS_SDRAM_1_SIZE	0x20000000	/* 512M */
>  
>  #define CONFIG_SYS_TEXT_BASE	0x0010c000
> +#define CONFIG_SYS_UBOOT_START	CONFIG_SYS_TEXT_BASE
>  #define CONFIG_SYS_SDRAM_BASE	PHYS_SDRAM_1
>  
>  #define CONFIG_SYS_INIT_RAM_ADDR	CONFIG_STACKBASE
> @@ -184,6 +185,9 @@
>  
>  /* Defines for SPL */
>  #define CONFIG_SPL
> +#define CONFIG_SPL_FRAMEWORK
> +#define CONFIG_SPL_RAM_DEVICE
> +#define CONFIG_SPL_BOARD_INIT
>  #define CONFIG_SPL_NAND_SIMPLE
>  #define CONFIG_SPL_TEXT_BASE		0x00108000
>  #define CONFIG_SPL_MAX_SIZE		(CONFIG_SYS_TEXT_BASE - \

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework
  2012-10-20  7:08 ` [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework Allen Martin
  2012-10-22 17:09   ` Stephen Warren
  2012-10-22 22:45   ` Lucas Stach
@ 2012-10-26 16:38   ` Simon Glass
  2012-10-26 16:40     ` Stephen Warren
  2 siblings, 1 reply; 9+ messages in thread
From: Simon Glass @ 2012-10-26 16:38 UTC (permalink / raw)
  To: u-boot

On Sat, Oct 20, 2012 at 12:08 AM, Allen Martin <amartin@nvidia.com> wrote:
> Change tegra SPL to use common SPL framework.  Any tegra specific
> initialization is now done in spl_board_init() instead of
> board_init_f()/board_init_r().  Only one SPL boot target is supported
> on tegra, which is boot to RAM image.  jump_to_image_no_args() must be
> overridden on tegra so the host CPU can be initialized.
>
> Signed-off-by: Allen Martin <amartin@nvidia.com>

Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>

> ---
> v2: Add back some required headers to avoid compiler warnings
> ---
>  arch/arm/cpu/arm720t/tegra-common/spl.c |   91 +++++--------------------------
>  arch/arm/include/asm/arch-tegra20/spl.h |   28 ++++++++++
>  include/configs/tegra20-common.h        |    4 ++
>  3 files changed, 46 insertions(+), 77 deletions(-)
>  create mode 100644 arch/arm/include/asm/arch-tegra20/spl.h
>
> diff --git a/arch/arm/cpu/arm720t/tegra-common/spl.c b/arch/arm/cpu/arm720t/tegra-common/spl.c
> index 0d37ce8..c280ab7 100644
> --- a/arch/arm/cpu/arm720t/tegra-common/spl.c
> +++ b/arch/arm/cpu/arm720t/tegra-common/spl.c
> @@ -23,105 +23,42 @@
>   * MA 02111-1307 USA
>   */
>  #include <common.h>
> -#include <asm/u-boot.h>
> -#include <asm/utils.h>
> -#include <nand.h>
> -#include <mmc.h>
> -#include <fat.h>
> -#include <version.h>
> -#include <i2c.h>
> -#include <image.h>
> -#include <malloc.h>
> -#include <linux/compiler.h>
>  #include "cpu.h"
> +#include <spl.h>
>
>  #include <asm/io.h>
>  #include <asm/arch/clock.h>
>  #include <asm/arch/pinmux.h>
>  #include <asm/arch/tegra.h>
>  #include <asm/arch-tegra/board.h>
> -#include <asm/arch-tegra/clk_rst.h>
> -#include <asm/arch-tegra/pmc.h>
> -#include <asm/arch-tegra/scu.h>
> -#include <asm/arch-tegra/sys_proto.h>
> +#include <asm/arch/spl.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)
> +void spl_board_init(void)
>  {
> -       puts("### ERROR ### Please RESET the board ###\n");
> -       for (;;)
> -               ;
> -}
> +       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
> +
> +       /* enable JTAG */
> +       writel(0xC0, &pmt->pmt_cfg_ctl);
>
> -void board_init_f(ulong dummy)
> -{
>         board_init_uart_f();
>
>         /* Initialize periph GPIOs */
>         gpio_early_init_uart();
>
> -       /*
> -        * 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_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE);
> +       clock_early_init();
> +       preloader_console_init();
>  }
>
> -/* This requires UART clocks to be enabled */
> -static void preloader_console_init(void)
> +u32 spl_boot_device(void)
>  {
> -       const char *u_boot_rev = U_BOOT_VERSION;
> -
> -       gd = &gdata;
> -       gd->bd = &bdata;
> -       gd->flags |= GD_FLG_RELOC;
> -       gd->baudrate = CONFIG_BAUDRATE;
> -
> -       serial_init();          /* serial communications setup */
> -
> -       gd->have_console = 1;
> -
> -       /* 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);
> +       return BOOT_DEVICE_RAM;
>  }
>
> -void board_init_r(gd_t *id, ulong dummy)
> +void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
>  {
> -       struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
> -
> -       /* enable JTAG */
> -       writel(0xC0, &pmt->pmt_cfg_ctl);
> -
> -       debug(">>spl:board_init_r()\n");
> -
> -       mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
> -                       CONFIG_SYS_SPL_MALLOC_SIZE);
> -
> -#ifdef CONFIG_SPL_BOARD_INIT
> -       spl_board_init();
> -#endif
> +       debug("image entry point: 0x%X\n", spl_image->entry_point);
>
> -       clock_early_init();
> -       serial_init();
> -       preloader_console_init();
> -
> -       start_cpu((u32)CONFIG_SYS_TEXT_BASE);
> +       start_cpu((u32)spl_image->entry_point);
>         halt_avp();
> -       /* not reached */
> -}
> -
> -int board_usb_init(const void *blob)
> -{
> -       return 0;
>  }
> diff --git a/arch/arm/include/asm/arch-tegra20/spl.h b/arch/arm/include/asm/arch-tegra20/spl.h
> new file mode 100644
> index 0000000..5e453c5
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-tegra20/spl.h
> @@ -0,0 +1,28 @@
> +/*
> + * (C) Copyright 2012
> + * NVIDIA Corporation <www.nvidia.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
> + */
> +#ifndef        _ASM_ARCH_SPL_H_
> +#define        _ASM_ARCH_SPL_H_
> +
> +#define BOOT_DEVICE_RAM         1
> +
> +#endif
> diff --git a/include/configs/tegra20-common.h b/include/configs/tegra20-common.h
> index 2274ee9..d7d6dc3 100644
> --- a/include/configs/tegra20-common.h
> +++ b/include/configs/tegra20-common.h
> @@ -169,6 +169,7 @@
>  #define PHYS_SDRAM_1_SIZE      0x20000000      /* 512M */
>
>  #define CONFIG_SYS_TEXT_BASE   0x0010c000
> +#define CONFIG_SYS_UBOOT_START CONFIG_SYS_TEXT_BASE
>  #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_1
>
>  #define CONFIG_SYS_INIT_RAM_ADDR       CONFIG_STACKBASE
> @@ -184,6 +185,9 @@
>
>  /* Defines for SPL */
>  #define CONFIG_SPL
> +#define CONFIG_SPL_FRAMEWORK
> +#define CONFIG_SPL_RAM_DEVICE
> +#define CONFIG_SPL_BOARD_INIT
>  #define CONFIG_SPL_NAND_SIMPLE
>  #define CONFIG_SPL_TEXT_BASE           0x00108000
>  #define CONFIG_SPL_MAX_SIZE            (CONFIG_SYS_TEXT_BASE - \
> --
> 1.7.10.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol
  2012-10-20  7:08 [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol Allen Martin
  2012-10-20  7:08 ` [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework Allen Martin
  2012-10-21  3:03 ` [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol Tom Rini
@ 2012-10-26 16:39 ` Simon Glass
  2 siblings, 0 replies; 9+ messages in thread
From: Simon Glass @ 2012-10-26 16:39 UTC (permalink / raw)
  To: u-boot

On Sat, Oct 20, 2012 at 12:08 AM, Allen Martin <amartin@nvidia.com> wrote:
> Change jump_to_image_no_args() to a weak symbol to allow override by
> SoC specific code.  This is required by tegra because the SPL runs on
> a different CPU from the image it is loading, so tegra specific
> initialization is required to start the host CPU.  Pass in spl_image
> as a parameter for the same reason.
>
> Signed-off-by: Allen Martin <amartin@nvidia.com>

Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>

> ---
>  common/spl/spl.c |    8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index 0d829c0..f068abd 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -113,13 +113,13 @@ void spl_parse_image_header(const struct image_header *header)
>         }
>  }
>
> -static void __noreturn jump_to_image_no_args(void)
> +__weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
>  {
>         typedef void __noreturn (*image_entry_noargs_t)(u32 *);
>         image_entry_noargs_t image_entry =
> -                       (image_entry_noargs_t) spl_image.entry_point;
> +                       (image_entry_noargs_t) spl_image->entry_point;
>
> -       debug("image entry point: 0x%X\n", spl_image.entry_point);
> +       debug("image entry point: 0x%X\n", spl_image->entry_point);
>         /* Pass the saved boot_params from rom code */
>  #if defined(CONFIG_VIRTIO) || defined(CONFIG_ZEBU)
>         image_entry = (image_entry_noargs_t)0x80100000;
> @@ -223,7 +223,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>         default:
>                 debug("Unsupported OS image.. Jumping nevertheless..\n");
>         }
> -       jump_to_image_no_args();
> +       jump_to_image_no_args(&spl_image);
>  }
>
>  /*
> --
> 1.7.10.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework
  2012-10-26 16:38   ` Simon Glass
@ 2012-10-26 16:40     ` Stephen Warren
  2012-10-26 16:45       ` Simon Glass
  0 siblings, 1 reply; 9+ messages in thread
From: Stephen Warren @ 2012-10-26 16:40 UTC (permalink / raw)
  To: u-boot

On 10/26/2012 10:38 AM, Simon Glass wrote:
> On Sat, Oct 20, 2012 at 12:08 AM, Allen Martin <amartin@nvidia.com> wrote:
>> Change tegra SPL to use common SPL framework.  Any tegra specific
>> initialization is now done in spl_board_init() instead of
>> board_init_f()/board_init_r().  Only one SPL boot target is supported
>> on tegra, which is boot to RAM image.  jump_to_image_no_args() must be
>> overridden on tegra so the host CPU can be initialized.
>>
>> Signed-off-by: Allen Martin <amartin@nvidia.com>
> 
> Acked-by: Simon Glass <sjg@chromium.org>
> Tested-by: Simon Glass <sjg@chromium.org>

I think it'd be useful if you cut out the parts of emails you're not
replying to. By quoting everything, you make me go look at the entire
rest of the email to see if you've said something else. Thanks.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework
  2012-10-26 16:40     ` Stephen Warren
@ 2012-10-26 16:45       ` Simon Glass
  0 siblings, 0 replies; 9+ messages in thread
From: Simon Glass @ 2012-10-26 16:45 UTC (permalink / raw)
  To: u-boot

Hi Stephen,

On Fri, Oct 26, 2012 at 9:40 AM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 10/26/2012 10:38 AM, Simon Glass wrote:
>> On Sat, Oct 20, 2012 at 12:08 AM, Allen Martin <amartin@nvidia.com> wrote:
>>> Change tegra SPL to use common SPL framework.  Any tegra specific
>>> initialization is now done in spl_board_init() instead of
>>> board_init_f()/board_init_r().  Only one SPL boot target is supported
>>> on tegra, which is boot to RAM image.  jump_to_image_no_args() must be
>>> overridden on tegra so the host CPU can be initialized.
>>>
>>> Signed-off-by: Allen Martin <amartin@nvidia.com>
>>
>> Acked-by: Simon Glass <sjg@chromium.org>
>> Tested-by: Simon Glass <sjg@chromium.org>
>
> I think it'd be useful if you cut out the parts of emails you're not
> replying to. By quoting everything, you make me go look at the entire
> rest of the email to see if you've said something else. Thanks.

Yes, agreed. It slows me down also when people do this, although my
emailer hides common parts so I sometimes miss it.

Regards,
Simon

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-10-26 16:45 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-20  7:08 [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol Allen Martin
2012-10-20  7:08 ` [U-Boot] [PATCH v2 2/2] tegra: move to common SPL framework Allen Martin
2012-10-22 17:09   ` Stephen Warren
2012-10-22 22:45   ` Lucas Stach
2012-10-26 16:38   ` Simon Glass
2012-10-26 16:40     ` Stephen Warren
2012-10-26 16:45       ` Simon Glass
2012-10-21  3:03 ` [U-Boot] [PATCH v2 1/2] SPL: make jump_to_image_no_args a weak symbol Tom Rini
2012-10-26 16:39 ` Simon Glass

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.