Patchwork [U-Boot] powerpc: Add support for CONFIG_OF_CONTROL

login
register
mail settings
Submitter Jonathan Klee
Date April 15, 2013, 11:59 a.m.
Message ID <1366027188-6385-2-git-send-email-klee.jonathan@gmail.com>
Download mbox | patch
Permalink /patch/236579/
State Changes Requested
Delegated to: York Sun
Headers show

Comments

Jonathan Klee - April 15, 2013, 11:59 a.m.
Allow a device tree to be provided through the standard mechanisms.

Tests have been made using CONFIG_OF_SEPERATE on a MPC8378 board.
---
 arch/powerpc/lib/board.c |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
Simon Glass - April 16, 2013, 5:01 a.m.
On Mon, Apr 15, 2013 at 4:59 AM, Jonathan Klee <klee.jonathan@gmail.com> wrote:
> Allow a device tree to be provided through the standard mechanisms.
>
> Tests have been made using CONFIG_OF_SEPERATE on a MPC8378 board.

SEPARATE

> ---
>  arch/powerpc/lib/board.c |   22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
>
> diff --git a/arch/powerpc/lib/board.c b/arch/powerpc/lib/board.c
> index 422b4a3..3a9a6ce 100644
> --- a/arch/powerpc/lib/board.c
> +++ b/arch/powerpc/lib/board.c
> @@ -26,6 +26,8 @@
>  #include <command.h>
>  #include <malloc.h>
>  #include <stdio_dev.h>
> +#include <libfdt.h>
> +#include <fdtdec.h>

Please put in alphabetical order.

>  #ifdef CONFIG_8xx
>  #include <mpc8xx.h>
>  #endif
> @@ -124,6 +126,7 @@ DECLARE_GLOBAL_DATA_PTR;
>
>  extern ulong __init_end;
>  extern ulong __bss_end;
> +extern ulong __stop___ex_table;

Where does this name come from - objcopy?

>  ulong monitor_flash_len;
>
>  #if defined(CONFIG_CMD_BEDBUG)
> @@ -255,6 +258,21 @@ int init_func_watchdog_reset(void)
>   * Initialization sequence
>   */
>
> +#ifdef CONFIG_OF_CONTROL
> +int find_fdt(void)
> +{
> +#ifdef CONFIG_OF_EMBED
> +       /* get a pointer to the FDT */
> +       gd->fdt_blob = _binary_dt_dtb_start;
> +#elif defined CONFIG_OF_SEPARATE
> +       gd->fdt_blob = (void *)&__stop___ex_table;
> +#endif
> +       gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
> +                                               (uintptr_t)gd->fdt_blob);
> +       return 0;
> +}
> +#endif
> +
>  static init_fnc_t *init_sequence[] = {
>  #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
>         probecpu,
> @@ -321,6 +339,10 @@ static init_fnc_t *init_sequence[] = {
>  #endif
>         INIT_FUNC_WATCHDOG_RESET
>         init_func_ram,
> +#ifdef CONFIG_OF_CONTROL
> +       find_fdt,
> +       fdtdec_check_fdt,
> +#endif
>  #if defined(CONFIG_SYS_DRAM_TEST)
>         testdram,
>  #endif /* CONFIG_SYS_DRAM_TEST */
> --
> 1.7.10.4
>

I'm also interested in whether you can get CONFIG_SYS_GENERIC_BOARD
going on your board?

Regards,
Simon

Patch

diff --git a/arch/powerpc/lib/board.c b/arch/powerpc/lib/board.c
index 422b4a3..3a9a6ce 100644
--- a/arch/powerpc/lib/board.c
+++ b/arch/powerpc/lib/board.c
@@ -26,6 +26,8 @@ 
 #include <command.h>
 #include <malloc.h>
 #include <stdio_dev.h>
+#include <libfdt.h>
+#include <fdtdec.h>
 #ifdef CONFIG_8xx
 #include <mpc8xx.h>
 #endif
@@ -124,6 +126,7 @@  DECLARE_GLOBAL_DATA_PTR;
 
 extern ulong __init_end;
 extern ulong __bss_end;
+extern ulong __stop___ex_table;
 ulong monitor_flash_len;
 
 #if defined(CONFIG_CMD_BEDBUG)
@@ -255,6 +258,21 @@  int init_func_watchdog_reset(void)
  * Initialization sequence
  */
 
+#ifdef CONFIG_OF_CONTROL
+int find_fdt(void)
+{
+#ifdef CONFIG_OF_EMBED
+	/* get a pointer to the FDT */
+	gd->fdt_blob = _binary_dt_dtb_start;
+#elif defined CONFIG_OF_SEPARATE
+	gd->fdt_blob = (void *)&__stop___ex_table;
+#endif
+	gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
+						(uintptr_t)gd->fdt_blob);
+	return 0;
+}
+#endif
+
 static init_fnc_t *init_sequence[] = {
 #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
 	probecpu,
@@ -321,6 +339,10 @@  static init_fnc_t *init_sequence[] = {
 #endif
 	INIT_FUNC_WATCHDOG_RESET
 	init_func_ram,
+#ifdef CONFIG_OF_CONTROL
+	find_fdt,
+	fdtdec_check_fdt,
+#endif
 #if defined(CONFIG_SYS_DRAM_TEST)
 	testdram,
 #endif /* CONFIG_SYS_DRAM_TEST */