1 /* 2 * Copyright 2008,2010 Freescale Semiconductor, Inc. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * Version 2 as published by the Free Software Foundation. 7 */ 8 9 #include <common.h> 10 #include <libfdt.h> 11 #include <fdt_support.h> 12 #include <asm/mp.h> 13 14 DECLARE_GLOBAL_DATA_PTR; 15 16 extern void ft_fixup_num_cores(void *blob); 17 18 void ft_cpu_setup(void *blob, bd_t *bd) 19 { 20 #ifdef CONFIG_MP 21 int off; 22 u32 bootpg = determine_mp_bootpg(); 23 #endif 24 25 do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, 26 "timebase-frequency", bd->bi_busfreq / 4, 1); 27 do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, 28 "bus-frequency", bd->bi_busfreq, 1); 29 do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, 30 "clock-frequency", bd->bi_intfreq, 1); 31 do_fixup_by_prop_u32(blob, "device_type", "soc", 4, 32 "bus-frequency", bd->bi_busfreq, 1); 33 34 #if defined(CONFIG_MPC8641) 35 do_fixup_by_compat_u32(blob, "fsl,mpc8641-localbus", 36 "bus-frequency", gd->lbc_clk, 1); 37 #endif 38 do_fixup_by_compat_u32(blob, "fsl,elbc", 39 "bus-frequency", gd->lbc_clk, 1); 40 41 fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize); 42 43 #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) \ 44 || defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) 45 fdt_fixup_ethernet(blob); 46 #endif 47 48 #ifdef CONFIG_SYS_NS16550 49 do_fixup_by_compat_u32(blob, "ns16550", 50 "clock-frequency", CONFIG_SYS_NS16550_CLK, 1); 51 #endif 52 53 #ifdef CONFIG_MP 54 /* Reserve the boot page so OSes dont use it */ 55 off = fdt_add_mem_rsv(blob, bootpg, (u64)4096); 56 if (off < 0) 57 printf("%s: %s\n", __FUNCTION__, fdt_strerror(off)); 58 59 ft_fixup_num_cores(blob); 60 #endif 61 } 62