diff options
| -rw-r--r-- | board/amcc/kilauea/kilauea.c | 1 | ||||
| -rw-r--r-- | board/amcc/sequoia/sequoia.c | 25 | ||||
| -rw-r--r-- | cpu/ppc4xx/fdt.c | 114 | ||||
| -rw-r--r-- | include/configs/kilauea.h | 3 | ||||
| -rw-r--r-- | include/configs/sequoia.h | 6 | 
5 files changed, 66 insertions, 83 deletions
| diff --git a/board/amcc/kilauea/kilauea.c b/board/amcc/kilauea/kilauea.c index 96c0dd460..2ee896abd 100644 --- a/board/amcc/kilauea/kilauea.c +++ b/board/amcc/kilauea/kilauea.c @@ -25,6 +25,7 @@  #include <ppc4xx.h>  #include <ppc405.h>  #include <libfdt.h> +#include <fdt_support.h>  #include <asm/processor.h>  #include <asm/io.h> diff --git a/board/amcc/sequoia/sequoia.c b/board/amcc/sequoia/sequoia.c index 4e47ab395..f81f07146 100644 --- a/board/amcc/sequoia/sequoia.c +++ b/board/amcc/sequoia/sequoia.c @@ -23,9 +23,11 @@   */  #include <common.h> +#include <libfdt.h> +#include <fdt_support.h> +#include <ppc440.h>  #include <asm/processor.h>  #include <asm/io.h> -#include <ppc440.h>  DECLARE_GLOBAL_DATA_PTR; @@ -583,3 +585,24 @@ int post_hotkeys_pressed(void)  	return 0;	/* No hotkeys supported */  }  #endif /* CONFIG_POST */ + +#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) +void ft_board_setup(void *blob, bd_t *bd) +{ +	u32 val[4]; +	int rc; + +	ft_cpu_setup(blob, bd); + +	/* Fixup NOR mapping */ +	val[0] = 0;				/* chip select number */ +	val[1] = 0;				/* always 0 */ +	val[2] = gd->bd->bi_flashstart; +	val[3] = gd->bd->bi_flashsize; +	rc = fdt_find_and_setprop(blob, "/plb/opb/ebc", "ranges", +				  val, sizeof(val), 1); +	if (rc) +		printf("Unable to update property NOR mapping, err=%s\n", +		       fdt_strerror(rc)); +} +#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */ diff --git a/cpu/ppc4xx/fdt.c b/cpu/ppc4xx/fdt.c index dcedbbb30..3ef30004f 100644 --- a/cpu/ppc4xx/fdt.c +++ b/cpu/ppc4xx/fdt.c @@ -35,25 +35,18 @@  #if defined(CONFIG_OF_LIBFDT)  #include <libfdt.h>  #include <libfdt_env.h> +#include <fdt_support.h>  DECLARE_GLOBAL_DATA_PTR; -static void do_fixup(void *fdt, const char *node, const char *prop, -		     const void *val, int len, int create) -{ -#if defined(DEBUG) -	int i; -	debug("Updating property '%s/%s' = ", node, prop); -	for (i = 0; i < len; i++) -		debug(" %.2x", *(u8*)(val+i)); -	debug("(%d)\n", *(u32 *)val); -#endif -	int rc = fdt_find_and_setprop(fdt, node, prop, val, len, create); -	if (rc) -		printf("Unable to update property %s:%s, err=%s\n", -		       node, prop, fdt_strerror(rc)); -} +/* + * The aliases needed for this generic etherne MAC address + * fixup function are not in place yet. So don't use this + * approach for now. This will be enabled later. + */ +#undef USES_FDT_ALIASES +#ifndef USES_FDT_ALIASES  static void do_fixup_macaddr(void *fdt, int offset, const void *val, int i)  {  	int rc; @@ -69,87 +62,47 @@ static void do_fixup_macaddr(void *fdt, int offset, const void *val, int i)  		printf("Unable to update property %s, err=%s\n",  		       "local-mac-address", fdt_strerror(rc));  } - -static void do_fixup_u32(void *fdt, const char *node, const char *prop, -			 u32 val, int create) -{ -	val = cpu_to_fdt32(val); -	do_fixup(fdt, node, prop, &val, sizeof(val), create); -} - -static void do_fixup_uart(void *fdt, int offset, int i, bd_t *bd) -{ -	int rc; -	u32 val; -	PPC4xx_SYS_INFO sys_info; - -	get_sys_info(&sys_info); - -	debug("Updating node UART%d: clock-frequency=%d\n", i, gd->uart_clk); - -	val = cpu_to_fdt32(gd->uart_clk); -	rc = fdt_setprop(fdt, offset, "clock-frequency", &val, 4); -	if (rc) -		printf("Unable to update node UART, err=%s\n", fdt_strerror(rc)); - -	val = cpu_to_fdt32(bd->bi_baudrate); -	rc = fdt_setprop(fdt, offset, "current-speed", &val, 4); -	if (rc) -		printf("Unable to update node UART, err=%s\n", fdt_strerror(rc)); -} +#endif /* USES_FDT_ALIASES */  void ft_cpu_setup(void *blob, bd_t *bd)  { -	char * cpu_path = "/cpus/" OF_CPU; +	char *cpu_path = "/cpus/" OF_CPU;  	sys_info_t sys_info;  	int offset;  	int i; -	int tmp[2]; -	get_sys_info (&sys_info); +	get_sys_info(&sys_info); -	do_fixup_u32(blob, cpu_path, "timebase-frequency", bd->bi_intfreq, 1); -	do_fixup_u32(blob, cpu_path, "clock-frequency", bd->bi_intfreq, 1); -	do_fixup_u32(blob, "/plb", "clock-frequency", sys_info.freqPLB, 1); -	do_fixup_u32(blob, "/plb/opb", "clock-frequency", sys_info.freqOPB, 1); -	do_fixup_u32(blob, "/plb/opb/ebc", "clock-frequency", sys_info.freqEBC, 1); - -	/* update, or add and update /memory node */ -	offset = fdt_find_node_by_path(blob, "/memory"); -	if (offset < 0) { -		offset = fdt_add_subnode(blob, 0, "memory"); -		if (offset < 0) -			debug("failed to add /memory node: %s\n", -			      fdt_strerror(offset)); -	} -	if (offset >= 0) { -		fdt_setprop(blob, offset, "device_type", -			    "memory", sizeof("memory")); -		tmp[0] = cpu_to_fdt32(bd->bi_memstart); -		tmp[1] = cpu_to_fdt32(bd->bi_memsize); -		fdt_setprop(blob, offset, "reg", tmp, sizeof(tmp)); -		debug("Updating /memory node to %d:%d\n", -		      bd->bi_memstart, bd->bi_memsize); -	} +	do_fixup_by_path_u32(blob, cpu_path, "timebase-frequency", bd->bi_intfreq, 1); +	do_fixup_by_path_u32(blob, cpu_path, "clock-frequency", bd->bi_intfreq, 1); +	do_fixup_by_path_u32(blob, "/plb", "clock-frequency", sys_info.freqPLB, 1); +	do_fixup_by_path_u32(blob, "/plb/opb", "clock-frequency", sys_info.freqOPB, 1); +	do_fixup_by_path_u32(blob, "/plb/opb/ebc", "clock-frequency", +			     sys_info.freqEBC, 1); +	fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);  	/*  	 * Setup all baudrates for the UARTs  	 */ -	offset = 0; -	for (i = 0; i < 4; i++) { -		offset = fdt_find_node_by_type(blob, offset, "serial"); -		if (offset < 0) -			break; - -		do_fixup_uart(blob, offset, i, bd); -	} +	do_fixup_by_compat_u32(blob, "ns16550", "clock-frequency", gd->uart_clk, 1); +#ifdef USES_FDT_ALIASES  	/* -	 * Setup all MAC addresses in fdt +	 * The aliases needed for this generic etherne MAC address +	 * fixup function are not in place yet. So don't use this +	 * approach for now. This will be enabled later.  	 */ -	offset = 0; +	fdt_fixup_ethernet(blob, bd); +#else +	offset = -1;  	for (i = 0; i < 4; i++) { -		offset = fdt_find_node_by_type(blob, offset, "network"); +		/* +		 * FIXME: This will cause problems with emac3 compatible +		 * devices, like on 405GP. But hopefully when we deal +		 * with those devices, the aliases stuff will be in +		 * place. +		 */ +		offset = fdt_node_offset_by_compatible(blob, offset, "ibm,emac4");  		if (offset < 0)  			break; @@ -174,5 +127,6 @@ void ft_cpu_setup(void *blob, bd_t *bd)  #endif  		}  	} +#endif /* USES_FDT_ALIASES */  }  #endif /* CONFIG_OF_LIBFDT */ diff --git a/include/configs/kilauea.h b/include/configs/kilauea.h index e3f24a44b..bec9fde73 100644 --- a/include/configs/kilauea.h +++ b/include/configs/kilauea.h @@ -519,7 +519,6 @@  /* pass open firmware flat tree */  #define CONFIG_OF_LIBFDT	1  #define CONFIG_OF_BOARD_SETUP	1 - -#define OF_CPU			"PowerPC,405EX@0" +#define OF_CPU			"cpu@0"  #endif	/* __CONFIG_H */ diff --git a/include/configs/sequoia.h b/include/configs/sequoia.h index 2af675ae1..58acbc090 100644 --- a/include/configs/sequoia.h +++ b/include/configs/sequoia.h @@ -487,4 +487,10 @@  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */  #define CONFIG_KGDB_SER_INDEX	2	    /* which serial port to use */  #endif + +/* pass open firmware flat tree */ +#define CONFIG_OF_LIBFDT	1 +#define CONFIG_OF_BOARD_SETUP	1 +#define OF_CPU			"cpu@0" +  #endif	/* __CONFIG_H */ |