~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/board/csb472/init.S

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * SPDX-License-Identifier:     GPL-2.0 IBM-pibs
 
3
 */
 
4
#include <config.h>
 
5
#include <asm/ppc4xx.h>
 
6
 
 
7
#include <ppc_asm.tmpl>
 
8
#include <ppc_defs.h>
 
9
 
 
10
#include <asm/cache.h>
 
11
#include <asm/mmu.h>
 
12
 
 
13
#define LI32(reg,val) \
 
14
        addis   reg,0,val@h;\
 
15
        ori     reg,reg,val@l
 
16
 
 
17
#define WDCR_EBC(reg,val) \
 
18
        addi    r4,0,reg;\
 
19
        mtdcr   EBC0_CFGADDR,r4;\
 
20
        addis   r4,0,val@h;\
 
21
        ori     r4,r4,val@l;\
 
22
        mtdcr   EBC0_CFGDATA,r4
 
23
 
 
24
#define WDCR_SDRAM(reg,val) \
 
25
        addi    r4,0,reg;\
 
26
        mtdcr   SDRAM0_CFGADDR,r4;\
 
27
        addis   r4,0,val@h;\
 
28
        ori     r4,r4,val@l;\
 
29
        mtdcr   SDRAM0_CFGDATA,r4
 
30
 
 
31
/******************************************************************************
 
32
 * Function:    ext_bus_cntlr_init
 
33
 *
 
34
 * Description: Configures EBC Controller and a few basic chip selects.
 
35
 *
 
36
 *              CS0 is setup to get the Boot Flash out of the addresss range
 
37
 *              so that we may setup a stack.  CS7 is setup so that we can
 
38
 *              access and reset the hardware watchdog.
 
39
 *
 
40
 *              IMPORTANT: For pass1 this code must run from
 
41
 *              cache since you can not reliably change a peripheral banks
 
42
 *              timing register (pbxap) while running code from that bank.
 
43
 *              For ex., since we are running from ROM on bank 0, we can NOT
 
44
 *              execute the code that modifies bank 0 timings from ROM, so
 
45
 *              we run it from cache.
 
46
 *
 
47
 * Notes:       Does NOT use the stack.
 
48
 *****************************************************************************/
 
49
        .section ".text"
 
50
        .align  2
 
51
        .globl  ext_bus_cntlr_init
 
52
        .type   ext_bus_cntlr_init, @function
 
53
ext_bus_cntlr_init:
 
54
        mflr    r0
 
55
        /********************************************************************
 
56
         * Prefetch entire ext_bus_cntrl_init function into the icache.
 
57
         * This is necessary because we are going to change the same CS we
 
58
         * are executing from.  Otherwise a CPU lockup may occur.
 
59
         *******************************************************************/
 
60
        bl      ..getAddr
 
61
..getAddr:
 
62
        mflr    r3                      /* get address of ..getAddr */
 
63
 
 
64
        /* Calculate number of cache lines for this function */
 
65
        addi    r4, 0, (((.Lfe0 - ..getAddr) / CONFIG_SYS_CACHELINE_SIZE) + 2)
 
66
        mtctr   r4
 
67
..ebcloop:
 
68
        icbt    r0, r3                  /* prefetch cache line for addr in r3*/
 
69
        addi    r3, r3, CONFIG_SYS_CACHELINE_SIZE /* move to next cache line */
 
70
        bdnz    ..ebcloop               /* continue for $CTR cache lines */
 
71
 
 
72
        /********************************************************************
 
73
         * Delay to ensure all accesses to ROM are complete before changing
 
74
         * bank 0 timings. 200usec should be enough.
 
75
         * 200,000,000 (cycles/sec) X .000200 (sec) = 0x9C40 cycles.
 
76
         *******************************************************************/
 
77
        addis   r3, 0, 0x0
 
78
        ori     r3, r3, 0xA000          /* wait 200us from reset */
 
79
        mtctr   r3
 
80
..spinlp:
 
81
        bdnz    ..spinlp                /* spin loop */
 
82
 
 
83
        /********************************************************************
 
84
         * SETUP CPC0_CR0
 
85
         *******************************************************************/
 
86
        LI32(r4, 0x00c01030)
 
87
        mtdcr   CPC0_CR0, r4
 
88
 
 
89
        /********************************************************************
 
90
         * Setup CPC0_CR1: Change PCIINT signal to PerWE
 
91
         *******************************************************************/
 
92
        mfdcr   r4, CPC0_CR1
 
93
        ori     r4, r4, 0x4000
 
94
        mtdcr   CPC0_CR1, r4
 
95
 
 
96
        /********************************************************************
 
97
         * Setup External Bus Controller (EBC).
 
98
         *******************************************************************/
 
99
        WDCR_EBC(EBC0_CFG, 0xd84c0000)
 
100
        /********************************************************************
 
101
         * Memory Bank 0 (Intel 28F640J3 Flash) initialization
 
102
         *******************************************************************/
 
103
        /*WDCR_EBC(PB1AP, 0x03055200)*/
 
104
        /*WDCR_EBC(PB1AP, 0x04055200)*/
 
105
        WDCR_EBC(PB1AP, 0x08055200)
 
106
        WDCR_EBC(PB0CR, 0xff87a000)
 
107
        /********************************************************************
 
108
         * Memory Bank 3 (Xilinx XC95144 CPLD) initialization
 
109
         *******************************************************************/
 
110
        /*WDCR_EBC(PB3AP, 0x07869200)*/
 
111
        WDCR_EBC(PB3AP, 0x04055200)
 
112
        WDCR_EBC(PB3CR, 0xf081c000)
 
113
        /********************************************************************
 
114
         * Memory Bank 1,2,4-7 (Unused) initialization
 
115
         *******************************************************************/
 
116
        WDCR_EBC(PB1AP, 0)
 
117
        WDCR_EBC(PB1CR, 0)
 
118
        WDCR_EBC(PB2AP, 0)
 
119
        WDCR_EBC(PB2CR, 0)
 
120
        WDCR_EBC(PB4AP, 0)
 
121
        WDCR_EBC(PB4CR, 0)
 
122
        WDCR_EBC(PB5AP, 0)
 
123
        WDCR_EBC(PB5CR, 0)
 
124
        WDCR_EBC(PB6AP, 0)
 
125
        WDCR_EBC(PB6CR, 0)
 
126
        WDCR_EBC(PB7AP, 0)
 
127
        WDCR_EBC(PB7CR, 0)
 
128
 
 
129
        /* We are all done */
 
130
        mtlr    r0                      /* Restore link register */
 
131
        blr                             /* Return to calling function */
 
132
.Lfe0:  .size   ext_bus_cntlr_init,.Lfe0-ext_bus_cntlr_init
 
133
/* end ext_bus_cntlr_init() */
 
134
 
 
135
/******************************************************************************
 
136
 * Function:    sdram_init
 
137
 *
 
138
 * Description: Configures SDRAM memory banks.
 
139
 *
 
140
 * Notes:       Does NOT use the stack.
 
141
 *****************************************************************************/
 
142
        .section ".text"
 
143
        .align  2
 
144
        .globl  sdram_init
 
145
        .type   sdram_init, @function
 
146
sdram_init:
 
147
 
 
148
        /*
 
149
         * Disable memory controller to allow
 
150
         * values to be changed.
 
151
         */
 
152
        WDCR_SDRAM(SDRAM0_CFG, 0x00000000)
 
153
 
 
154
        /*
 
155
         * Configure Memory Banks
 
156
         */
 
157
        WDCR_SDRAM(SDRAM0_B0CR, 0x00062001)
 
158
        WDCR_SDRAM(SDRAM0_B1CR, 0x00000000)
 
159
        WDCR_SDRAM(SDRAM0_B2CR, 0x00000000)
 
160
        WDCR_SDRAM(SDRAM0_B3CR, 0x00000000)
 
161
 
 
162
        /*
 
163
         * Set up SDTR1 (SDRAM Timing Register)
 
164
         */
 
165
        WDCR_SDRAM(SDRAM0_TR, 0x00854009)
 
166
 
 
167
        /*
 
168
         * Set RTR (Refresh Timing Register)
 
169
         */
 
170
        WDCR_SDRAM(SDRAM0_RTR,   0x10000000)
 
171
        /* WDCR_SDRAM(SDRAM0_RTR,   0x05f00000) */
 
172
 
 
173
        /********************************************************************
 
174
         * Delay to ensure 200usec have elapsed since reset. Assume worst
 
175
         * case that the core is running 200Mhz:
 
176
         *        200,000,000 (cycles/sec) X .000200 (sec) = 0x9C40 cycles
 
177
         *******************************************************************/
 
178
        addis   r3, 0, 0x0000
 
179
        ori     r3, r3, 0xA000          /* Wait >200us from reset */
 
180
        mtctr   r3
 
181
..spinlp2:
 
182
        bdnz    ..spinlp2               /* spin loop */
 
183
 
 
184
        /********************************************************************
 
185
         * Set memory controller options reg, MCOPT1.
 
186
         *******************************************************************/
 
187
        WDCR_SDRAM(SDRAM0_CFG,0x80800000)
 
188
 
 
189
..sdri_done:
 
190
        blr                             /* Return to calling function */
 
191
.Lfe1:  .size   sdram_init,.Lfe1-sdram_init
 
192
/* end sdram_init() */