diff options
Diffstat (limited to 'arch/powerpc/cpu/mpc8xxx/fdt.c')
| -rw-r--r-- | arch/powerpc/cpu/mpc8xxx/fdt.c | 55 | 
1 files changed, 55 insertions, 0 deletions
| diff --git a/arch/powerpc/cpu/mpc8xxx/fdt.c b/arch/powerpc/cpu/mpc8xxx/fdt.c new file mode 100644 index 000000000..ccefaf571 --- /dev/null +++ b/arch/powerpc/cpu/mpc8xxx/fdt.c @@ -0,0 +1,55 @@ +/* + * Copyright 2009 Freescale Semiconductor, Inc. + * + * This file is derived from arch/powerpc/cpu/mpc85xx/cpu.c and + * arch/powerpc/cpu/mpc86xx/cpu.c. Basically this file contains + * cpu specific common code for 85xx/86xx processors. + * 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 + */ + +#include <common.h> +#include <libfdt.h> +#include <fdt_support.h> + +void ft_fixup_num_cores(void *blob) { +	int off, num_cores, del_cores; + +	del_cores = 0; +	num_cores = cpu_numcores(); + +	off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpu", 4); +	while (off != -FDT_ERR_NOTFOUND) { +		u32 *reg = (u32 *)fdt_getprop(blob, off, "reg", 0); + +		/* if we find a cpu node outside of what we expect delete it +		 * and reset the offset back to the start since we can't +		 * trust the offsets anymore +		 */ +		if (*reg > num_cores-1) { +			fdt_del_node(blob, off); +			del_cores++; +			off = -1; +		} +		off = fdt_node_offset_by_prop_value(blob, off, +				"device_type", "cpu", 4); +	} +	debug ("%x core system found\n", num_cores); +	debug ("deleted %d extra core entry entries from device tree\n", +								del_cores); +} |