8xx, kup4: add FDT support
PATCH v2 2/2 8xx, kup4: add FDT support
---
- changes since v1
- rebased against current mainline
- fix printf output
board/kup/kup4k/kup4k.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++ include/configs/KUP4K.h | 4 +++ 2 files changed, 62 insertions(+), 0 deletions(-)
board/kup/kup4k/kup4k.c +58 -0
@@ -24,6 +24,7 @@#include <common.h> #include <command.h> +#include <libfdt.h> #include <mpc8xx.h> #include <hwconfig.h> #include <i2c.h>
@@ -291,3 +292,60 @@ static unsigned char swapbyte(unsigned char c) }return result; } + +/* +* Device Tree Support +*/ +#if defined(CONFIG_OF_BOARD_SETUP ) && defined(CONFIG_OF_LIBFDT ) +int fdt_set_node_and_value (void *blob, +char *nodename, +char *regname, +void *var, +int size) +{ +int ret =0 ; +int nodeoffset =0 ; + + nodeoffset =fdt_path_offset (blob, nodename); +if (nodeoffset >=0 ) { + ret =fdt_setprop (blob, nodeoffset, regname, var, + size); +if (ret <0 ) { +printf ("%s: cannot set %s/%s property; err: %s\n" , + __func__, nodename, regname,fdt_strerror (ret)); + } + }else { +printf ("%s: cannot find %s node err:%s\n" , __func__, + nodename,fdt_strerror (nodeoffset)); + } +return ret; +} + +/* +* update "brg" property in the blob +*/ +void ft_blob_update (void *blob,bd_t *bd) +{ +uchar enetaddr[6 ]; +ulong brg_data =0 ; + +/* BRG */ + brg_data =cpu_to_be32 (bd->bi_busfreq); +fdt_set_node_and_value (blob, +"/soc/cpm" ,"brg-frequency" , + &brg_data,sizeof (brg_data)); + +/* MAC addr */ +if (eth_getenv_enetaddr ("ethaddr" , enetaddr)) { +fdt_set_node_and_value (blob, +"ethernet0" ,"local-mac-address" , + enetaddr,sizeof (u8) *6 ); + } +} + +void ft_board_setup (void *blob,bd_t *bd) +{ +ft_cpu_setup (blob, bd); +ft_blob_update (blob, bd); +} +#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
include/configs/KUP4K.h +4 -0
@@ -510,5 +510,9 @@#define CONFIG_SYS_DEVICE_NULLDEV 1/* enble null device */ #define CONFIG_VERSION_VARIABLE 1 +/* pass open firmware flat tree */ +#define CONFIG_OF_LIBFDT 1 +#define CONFIG_OF_BOARD_SETUP 1 +#endif /* __CONFIG_H */
Signature · 5 lines
1.6.2.5 -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v2 2/2 8xx, kup4: add FDT support
Quoted 13 lines · On Mon, 19 Jul 2010 14:13:53 +0200 Heiko Schocher <[email protected]> wrote:
board/kup/kup4k/kup4k.c +13
-0+int fdt_set_node_and_value (void *blob, +char *nodename, +char *regname, +void *var, +int size) +{ +int ret =0 ; +int nodeoffset =0 ; + + nodeoffset =fdt_path_offset (blob, nodename); +if (nodeoffset >=0 ) { + ret =fdt_setprop (blob, nodeoffset, regname, var, + size);
board/kup/kup4k/kup4k.c static unsigned char swapbyte(unsigned char c) · line 322
Quoted 10 lines
board/kup/kup4k/kup4k.c +10
-0+if (ret <0 ) { +printf ("%s: cannot set %s/%s property; err: %s\n" , + __func__, nodename, regname,fdt_strerror (ret)); + } + }else { +printf ("%s: cannot find %s node err:%s\n" , __func__, + nodename,fdt_strerror (nodeoffset)); + } +return ret; +}
How is this different from do_fixup_by_path()?
board/kup/kup4k/kup4k.c static unsigned char swapbyte(unsigned char c) · line 336
Quoted 13 lines
board/kup/kup4k/kup4k.c +13
-0+/* +* update "brg" property in the blob +*/ +void ft_blob_update (void *blob,bd_t *bd) +{ +uchar enetaddr[6 ]; +ulong brg_data =0 ; + +/* BRG */ + brg_data =cpu_to_be32 (bd->bi_busfreq); +fdt_set_node_and_value (blob, +"/soc/cpm" ,"brg-frequency" , + &brg_data,sizeof (brg_data));
This binding is deprecated -- the device tree should have a brg node, in which ft_cpu_setup() will fill in clock-frequency.
See Documentation/powerpc/dts-bindings/fsl/cpm_qe/cpm.txt in Linux.
You can keep brg-frequency around in addition if you need to support kernels from the short period of time that was old enough to not know about the brg node, but new enough to support device trees at all. Maybe put it in ft_cpu_setup(), replacing the existing fixup a couple of other 8xx boards do (but not all of them).
board/kup/kup4k/kup4k.c static unsigned char swapbyte(unsigned char c) · line 343
Quoted 6 lines
board/kup/kup4k/kup4k.c +6
-0+/* MAC addr */ +if (eth_getenv_enetaddr ("ethaddr" , enetaddr)) { +fdt_set_node_and_value (blob, +"ethernet0" ,"local-mac-address" , + enetaddr,sizeof (u8) *6 ); + }
ft_cpu_setup() calls fdt_fixup_ethernet() which should handle this.
-Scott