4 * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of
9 * the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * Based on: arch/ppc/boot/sandpoint/head.S
22 * arch/ppc/kernel/head.S
23 * http://www-106.ibm.com/developerworks/library/pa-ppccache.html
26 #define HID0 0x3F0 /* Hardware Implementation Register 0 */
27 #define HID0_ICE (1<<15) /* Instruction Cache Enable */
28 #define HID0_DCE (1<<14) /* Data Cache Enable */
31 #define UART1 0xfc004500
32 #define UART1_IER 0xfc004501
33 #define UART1_FCR 0xfc004502
34 #define UART1_LCR 0xfc004503
35 #define UART1_DCR 0xfc004511
37 #define WM8(address,data) \
39 ori r3, r3, address@l; \
51 mr r31,r3 /* pa_load_uboot */
52 mr r30,r4 /* pa_uboot_buf */
53 mr r29,r5 /* load_address */
55 /* Init UART for AVR */
56 WM8(UART1_LCR,0x00) /* clear LCR */
57 WM8(UART1_IER,0x00) /* disable interrupt */
58 WM8(UART1_LCR,0x80) /* set LCR[DLAB] bit */
59 WM8(UART1_DCR,0x01) /* set DUART mode */
60 WM8(UART1, 0x8B) /* set DLL(baudrate 9600bps, 100MHz) */
61 WM8(UART1_IER,0x02) /* set DLM(baudrate 9600bps, 100MHz) */
62 WM8(UART1_LCR,0x03) /* set 8data, 1stop, non parity */
63 WM8(UART1, 0x00) /* clear MCR */
64 WM8(UART1_FCR,0x07) /* clear & enable FIFO */
68 /* disable interrupts */
70 rlwinm r0,r0,0,17,15 /* clear MSR_EE in r0 */
78 /* jump to after_mmu_off */
79 addi r4,r31,after_mmu_off-load_uboot
89 /* copy uboot image */
90 mr r4,r29 /* load address */
91 addi r30,r30,4 /* skip size */
111 WM8(0xfc004500,0x43);
113 lis r1,0x100 /* put stack at 16M */
116 /* u-boot entry point is u-boot base + 0x100 */
121 WM8(0xfc004500,0x44);
123 li r2,1024 /* flush 16K cache */
141 ori r3,r3,HID0_ICE|HID0_DCE