1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2004,2009-2011 Freescale Semiconductor, Inc.
5 * Srikanth Srinivasan (srikanth.srinivasan@freescale.com)
9 * cpu_init.c - low level cpu init
12 #include <asm-offsets.h>
17 #include <asm/global_data.h>
19 #include <asm/fsl_law.h>
20 #include <asm/fsl_serdes.h>
23 extern void srio_init(void);
25 DECLARE_GLOBAL_DATA_PTR;
28 * Breathe some life into the CPU...
30 * Set up the memory map
31 * initialize a bunch of registers
36 /* Pointer is writable since we allocated a register for it */
37 gd = (gd_t *) (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET);
39 /* Clear initial global data */
40 memset ((void *) gd, 0, sizeof (gd_t));
48 init_early_memctl_regs();
50 #if defined(CONFIG_FSL_DMA)
54 /* enable the timebase bit in HID0 */
55 set_hid0(get_hid0() | 0x4000000);
57 /* enable EMCP, SYNCBE | ABE bits in HID1 */
58 set_hid1(get_hid1() | 0x80000C00);
62 * initialize higher level parts of CPU like timers
66 /* needs to be in ram since code uses global static vars */
69 #ifdef CONFIG_SYS_SRIO
73 #if defined(CONFIG_MP)
79 #ifdef CONFIG_ADDR_MAP
80 /* Initialize address mapping array */
81 void init_addr_map(void)
84 ppc_bat_t bat = DBAT0;
86 unsigned long upper, lower;
88 for (i = 0; i < CONFIG_SYS_NUM_ADDR_MAP; i++, bat++) {
89 if (read_bat(bat, &upper, &lower) != -1) {
90 if (!BATU_VALID(upper))
93 size = BATU_SIZE(upper);
94 addrmap_set_entry(BATU_VADDR(upper), BATL_PADDR(lower),
97 #ifdef CONFIG_HIGH_BATS
98 /* High bats are not contiguous with low BAT numbers */