1 /* 2 * Copyright 2008, 2011 Freescale Semiconductor, Inc. 3 * 4 * SPDX-License-Identifier: GPL-2.0 5 */ 6 7 #include <common.h> 8 #include <linux/libfdt.h> 9 #include <fdt_support.h> 10 #include <asm/mp.h> 11 12 DECLARE_GLOBAL_DATA_PTR; 13 14 extern void ft_fixup_num_cores(void *blob); 15 extern void ft_srio_setup(void *blob); 16 17 void ft_cpu_setup(void *blob, bd_t *bd) 18 { 19 #ifdef CONFIG_MP 20 int off; 21 u32 bootpg = determine_mp_bootpg(NULL); 22 #endif 23 24 do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, 25 "timebase-frequency", bd->bi_busfreq / 4, 1); 26 do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, 27 "bus-frequency", bd->bi_busfreq, 1); 28 do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, 29 "clock-frequency", bd->bi_intfreq, 1); 30 do_fixup_by_prop_u32(blob, "device_type", "soc", 4, 31 "bus-frequency", bd->bi_busfreq, 1); 32 33 fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize); 34 35 #ifdef CONFIG_SYS_NS16550 36 do_fixup_by_compat_u32(blob, "ns16550", 37 "clock-frequency", CONFIG_SYS_NS16550_CLK, 1); 38 #endif 39 40 #ifdef CONFIG_MP 41 /* Reserve the boot page so OSes dont use it */ 42 off = fdt_add_mem_rsv(blob, bootpg, (u64)4096); 43 if (off < 0) 44 printf("%s: %s\n", __FUNCTION__, fdt_strerror(off)); 45 46 ft_fixup_num_cores(blob); 47 #endif 48 49 #ifdef CONFIG_SYS_SRIO 50 ft_srio_setup(blob); 51 #endif 52 } 53