[U-Boot-Users] [PATCH] [RFC] Add Device tree support to lite5200b eval board

Please comment on this patch. This is not the final patch as applying this one prevents booting an arch/ppc kernel (due to adding CONFIG_OF_FLAT_TREE to include/configs/IceCube.h).
I have not yet successfully booted an arch/powerpc kernel using this change, but I want feedback to ensure I've twiddled the correct bits. :) --- board/icecube/icecube.c | 12 +++++++++++ cpu/mpc5xxx/cpu.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ include/configs/IceCube.h | 13 ++++++++++++ 3 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/board/icecube/icecube.c b/board/icecube/icecube.c index 4f056b2..9b222da 100644 --- a/board/icecube/icecube.c +++ b/board/icecube/icecube.c @@ -29,6 +29,10 @@ #include <mpc5xxx.h> #include <pci.h> #include <asm/processor.h>
+#if defined(CONFIG_OF_FLAT_TREE) +#include <ft_build.h> +#endif + #if defined(CONFIG_LITE5200B) #include "mt46v32m16.h" #else @@ -334,3 +338,11 @@ void ide_set_reset (int idereset) } } #endif /* defined (CFG_CMD_IDE) && defined (CONFIG_IDE_RESET) */ + +#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) +void +ft_board_setup(void *blob, bd_t *bd) +{ + ft_cpu_setup(blob, bd); +} +#endif diff --git a/cpu/mpc5xxx/cpu.c b/cpu/mpc5xxx/cpu.c index 6b6f828..213d859 100644 --- a/cpu/mpc5xxx/cpu.c +++ b/cpu/mpc5xxx/cpu.c @@ -31,6 +31,10 @@ #include <command.h> #include <mpc5xxx.h> #include <asm/processor.h>
+#if defined(CONFIG_OF_FLAT_TREE) +#include <ft_build.h> +#endif + DECLARE_GLOBAL_DATA_PTR;
int checkcpu (void) @@ -102,3 +106,46 @@ unsigned long get_tbclk (void) }
/* ------------------------------------------------------------------------- */ + +#ifdef CONFIG_OF_FLAT_TREE +void +ft_cpu_setup(void *blob, bd_t *bd) +{ + u32 *p; + ulong clock; + int len; + + clock = bd->bi_busfreq; + p = ft_get_prop(blob, "/cpus/" OF_CPU "/bus-frequency", &len); + if (p != NULL) + *p = cpu_to_be32(clock); + + p = ft_get_prop(blob, "/" OF_SOC "/serial@2000/clock-frequency", &len); + if (p != NULL) + *p = cpu_to_be32(clock); + + p = ft_get_prop(blob, "/" OF_SOC "/serial@2200/clock-frequency", &len); + if (p != NULL) + *p = cpu_to_be32(clock); + + p = ft_get_prop(blob, "/" OF_SOC "/serial@2400/clock-frequency", &len); + if (p != NULL) + *p = cpu_to_be32(clock); + + p = ft_get_prop(blob, "/" OF_SOC "/serial@2600/clock-frequency", &len); + if (p != NULL) + *p = cpu_to_be32(clock); + + p = ft_get_prop(blob, "/" OF_SOC "/serial@2800/clock-frequency", &len); + if (p != NULL) + *p = cpu_to_be32(clock); + + p = ft_get_prop(blob, "/" OF_SOC "/serial@2c00/clock-frequency", &len); + if (p != NULL) + *p = cpu_to_be32(clock); + + p = ft_get_prop(blob, "/" OF_SOC "/ethernet@3000/mac-address", &len); + memcpy(p, bd->bi_enetaddr, 6); + +} +#endif diff --git a/include/configs/IceCube.h b/include/configs/IceCube.h index 1152f83..0d38254 100644 --- a/include/configs/IceCube.h +++ b/include/configs/IceCube.h @@ -172,6 +172,19 @@ #else #undef CFG_IPBSPEED_133 /* define for 133MHz speed */ #endif #endif /* CONFIG_MPC5200 */ + +/* pass open firmware flat tree */ +#define CONFIG_OF_FLAT_TREE 1 +#define CONFIG_OF_BOARD_SETUP 1 + +/* maximum size of the flat tree (8K) */ +#define OF_FLAT_TREE_MAX_SIZE 8192 + +#define OF_CPU "PowerPC,5200@0" +#define OF_SOC "soc5200@f0000000" +#define OF_TBCLK (bd->bi_busfreq / 8) +#define OF_STDOUT_PATH "/soc5200@f0000000/serial@2000" + /* * I2C configuration */

In message 11617655783887-git-send-email-grant.likely@secretlab.ca you wrote:
Please comment on this patch. This is not the final patch as applying this one prevents booting an arch/ppc kernel (due to adding CONFIG_OF_FLAT_TREE to include/configs/IceCube.h).
I have not yet successfully booted an arch/powerpc kernel using this change, but I want feedback to ensure I've twiddled the correct bits. :)
I can just comment on formal things.
- p = ft_get_prop(blob, "/cpus/" OF_CPU "/bus-frequency", &len);
- if (p != NULL)
*p = cpu_to_be32(clock);
- p = ft_get_prop(blob, "/" OF_SOC "/serial@2000/clock-frequency", &len);
- if (p != NULL)
*p = cpu_to_be32(clock);
- p = ft_get_prop(blob, "/" OF_SOC "/serial@2200/clock-frequency", &len);
- if (p != NULL)
*p = cpu_to_be32(clock);
- p = ft_get_prop(blob, "/" OF_SOC "/serial@2400/clock-frequency", &len);
- if (p != NULL)
*p = cpu_to_be32(clock);
- p = ft_get_prop(blob, "/" OF_SOC "/serial@2600/clock-frequency", &len);
- if (p != NULL)
*p = cpu_to_be32(clock);
- p = ft_get_prop(blob, "/" OF_SOC "/serial@2800/clock-frequency", &len);
- if (p != NULL)
*p = cpu_to_be32(clock);
- p = ft_get_prop(blob, "/" OF_SOC "/serial@2c00/clock-frequency", &len);
- if (p != NULL)
*p = cpu_to_be32(clock);
Please write this as a loop.
Best regards,
Wolfgang Denk
participants (2)
-
Grant Likely
-
Wolfgang Denk