source: svn/trunk/newcon3bcm2_21bu/dta/src/bootloader7574/bsp_util.s @ 2

Last change on this file since 2 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 4.9 KB
Line 
1#ifndef __ASSEMBLER__
2#define __ASSEMBLER__
3#endif
4#include "bmips.h"
5#include "bchp_common.h"
6#include "bchp_bsp_glb_control.h"
7#include "bchp_bsp_cmdbuf.h"
8#include "bchp_sun_top_ctrl.h"
9
10
11/*
12 * The following define needs to be manually turned on/off
13 * depending on what chip the CFE is being built for.
14 *
15 * NON-ZEUS_2_0:
16 *      7231A0/7344A0/7346A0/7420A0/7425A0/7552A0 FullROM
17 *
18 * ZEUS_2_0:
19 *      7231A0/7344A0/7346A0/7420A0/7425A0/7552A0 BSECK
20 *      7231B0/7344B0/7346B0/7420B0/7425B0/7552B0 FullROM
21 */
22#define ZEUS_2_0
23
24#if defined(ZEUS_2_0)
25#define CMD_INBUFFER2           (2 * 384)               /* 0x300 */
26#else
27#define CMD_INBUFFER2           (1 * 384)               /* 0x180 */
28#endif /* ZEUS_2_0 */
29#define CMD_OUTBUFFER2          (3 * 384)               /* 0x480 */
30
31
32
33
34
35/****************************************************************
36Function Name: read_otp_bit
37Description:
38    Reads an OTP bit.
39Parameters:
40        unsigned long bit_num - OTP bit number to read.
41Returns:
42    unsigned long - status of OTP bit.
43****************************************************************/
44LEAF(read_otp_bit)
45
46        move    t8, ra
47       
48        bal             do_bsp_cmd_prologue
49        nop
50       
51        /* command ID to read MSP bit */       
52       
53        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_CMDBUF_DMEMi_ARRAY_BASE+CMD_INBUFFER2)
54        li              t1, 0xe455aa1b
55        sw              t1, 0xc(t0)     
56       
57       
58        /*  command length in bytes.*/
59        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_CMDBUF_DMEMi_ARRAY_BASE+CMD_INBUFFER2)
60        li              t1, 0x789a0004
61        sw              t1, 0x10(t0)   
62       
63       
64        /* read msp field */   
65        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_CMDBUF_DMEMi_ARRAY_BASE+CMD_INBUFFER2)
66        sw              a0, 0x14(t0)   
67       
68        bal             do_bsp_cmd_epilogue
69        nop
70               
71        /* check status */
72        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_CMDBUF_DMEMi_ARRAY_BASE+CMD_OUTBUFFER2)
73        lw              v0, 0x14(t0)   
74       
75        /* read data */
76        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_CMDBUF_DMEMi_ARRAY_BASE+CMD_OUTBUFFER2)
77        lw              v1, 0x18(t0)   
78
79        /* v0=0=> status pass, else status fail
80         * v1=1=> boot check enabled else boot check disabled
81         */
82               
83        jr              t8
84        nop
85END(read_otp_bit)
86
87
88
89
90/****************************************************************
91Function Name: do_bsp_cmd_prologue
92Description: Set up first 3 words of BSP command
93   
94Parameters:
95    None
96Returns:
97    N/A
98****************************************************************/
99.globl do_bsp_cmd_prologue
100.ent do_bsp_cmd_prologue
101do_bsp_cmd_prologue:
102
103        move    s5, ra
104
105        bal             check_for_IRDY2
106        nop
107
108        /* version */
109        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_CMDBUF_DMEMi_ARRAY_BASE+CMD_INBUFFER2)
110        li              t1, 0x10
111        sw              t1, 0(t0)
112       
113        /* seq */
114        li              t1, 0x22
115        sw              t1, 4(t0)
116       
117        /* cont */
118        li              t1, 0xABCDEF00
119        sw              t1, 8(t0)
120       
121        jr              s5
122        nop
123       
124.end do_bsp_cmd_prologue
125
126
127/****************************************************************
128Function Name: do_bsp_cmd_epilogue
129Description: Get response from BSP command
130   
131Parameters:
132    None
133Returns:
134    N/A
135****************************************************************/
136.globl  do_bsp_cmd_epilogue
137.ent    do_bsp_cmd_epilogue
138do_bsp_cmd_epilogue:
139
140        move    s5, ra
141
142        /* set BSP_GLB_NONSECURE_GLB_ILOAD2 
143         * (volatile unsigned long*) (VIRTUAL_ADDRESS+BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_ILOAD2) = 0x01;
144         */
145         li             t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_ILOAD2)
146         li             t1, 0x1
147         sw             t1, 0(t0)
148         
149
150        /* check BSP_GLB_NONSECURE_GLB_OLOAD2 
151        while (  ( *(volatile unsigned long*) (VIRTUAL_ADDRESS+BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_OLOAD2) & 0x01 )  != 0x01);
152        */
153        bal             check_for_OLOAD2
154        nop
155
156        /* BSP_GLB_NONSECURE_GLB_HOST_INTR_STATUS = 0 
157        *(volatile unsigned long*) (VIRTUAL_ADDRESS+BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_HOST_INTR_STATUS) = 0x00; 
158        */
159        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_HOST_INTR_STATUS)
160        sw              zero, 0(t0)
161               
162       
163        /* BSP_GLB_NONSECURE_GLB_OLOAD2 = 0 
164        *(volatile unsigned long*) (VIRTUAL_ADDRESS+BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_OLOAD2) = 0x00;
165        */
166        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_OLOAD2)
167        sw              zero, 0(t0)
168
169        jr              s5
170        nop
171.end do_bsp_cmd_epilogue
172
173
174
175/****************************************************************
176Function Name: check_for_IRDY2
177Description:
178    check if IRDY2 bit is set.
179Parameters:
180    None
181Returns:
182    None
183****************************************************************/
184LEAF(check_for_IRDY2)
185
186.set noreorder
187
188wait_for_IRDY2:
189        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_IRDY)
190        lw              t1, 0(t0)
191        andi    t1, t1, 0x02
192
193        beq             t1, zero, wait_for_IRDY2
194        nop
195
196.set reorder
197    jr          ra
198    nop
199END(check_for_IRDY2)       
200
201
202
203/****************************************************************
204Function Name: check_for_OLOAD2
205Description:
206    check if OLOAD2 bit is set.
207Parameters:
208    None
209Returns:
210    None
211****************************************************************/
212LEAF(check_for_OLOAD2)
213
214.set noreorder
215
216wait_for_OLOAD2:
217        li              t0, PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_BSP_GLB_CONTROL_GLB_OLOAD2)
218        lw              t1, 0(t0)
219        andi    t1, t1, 0x01
220
221        beq             t1, zero, wait_for_OLOAD2
222        nop
223
224.set reorder
225    jr          ra
226    nop
227END(check_for_OLOAD2)       
228
Note: See TracBrowser for help on using the repository browser.