| 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 | /**************************************************************** |
|---|
| 36 | Function Name: read_otp_bit |
|---|
| 37 | Description: |
|---|
| 38 | Reads an OTP bit. |
|---|
| 39 | Parameters: |
|---|
| 40 | unsigned long bit_num - OTP bit number to read. |
|---|
| 41 | Returns: |
|---|
| 42 | unsigned long - status of OTP bit. |
|---|
| 43 | ****************************************************************/ |
|---|
| 44 | LEAF(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 |
|---|
| 85 | END(read_otp_bit) |
|---|
| 86 | |
|---|
| 87 | |
|---|
| 88 | |
|---|
| 89 | |
|---|
| 90 | /**************************************************************** |
|---|
| 91 | Function Name: do_bsp_cmd_prologue |
|---|
| 92 | Description: Set up first 3 words of BSP command |
|---|
| 93 | |
|---|
| 94 | Parameters: |
|---|
| 95 | None |
|---|
| 96 | Returns: |
|---|
| 97 | N/A |
|---|
| 98 | ****************************************************************/ |
|---|
| 99 | .globl do_bsp_cmd_prologue |
|---|
| 100 | .ent do_bsp_cmd_prologue |
|---|
| 101 | do_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 | /**************************************************************** |
|---|
| 128 | Function Name: do_bsp_cmd_epilogue |
|---|
| 129 | Description: Get response from BSP command |
|---|
| 130 | |
|---|
| 131 | Parameters: |
|---|
| 132 | None |
|---|
| 133 | Returns: |
|---|
| 134 | N/A |
|---|
| 135 | ****************************************************************/ |
|---|
| 136 | .globl do_bsp_cmd_epilogue |
|---|
| 137 | .ent do_bsp_cmd_epilogue |
|---|
| 138 | do_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 | /**************************************************************** |
|---|
| 176 | Function Name: check_for_IRDY2 |
|---|
| 177 | Description: |
|---|
| 178 | check if IRDY2 bit is set. |
|---|
| 179 | Parameters: |
|---|
| 180 | None |
|---|
| 181 | Returns: |
|---|
| 182 | None |
|---|
| 183 | ****************************************************************/ |
|---|
| 184 | LEAF(check_for_IRDY2) |
|---|
| 185 | |
|---|
| 186 | .set noreorder |
|---|
| 187 | |
|---|
| 188 | wait_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 |
|---|
| 199 | END(check_for_IRDY2) |
|---|
| 200 | |
|---|
| 201 | |
|---|
| 202 | |
|---|
| 203 | /**************************************************************** |
|---|
| 204 | Function Name: check_for_OLOAD2 |
|---|
| 205 | Description: |
|---|
| 206 | check if OLOAD2 bit is set. |
|---|
| 207 | Parameters: |
|---|
| 208 | None |
|---|
| 209 | Returns: |
|---|
| 210 | None |
|---|
| 211 | ****************************************************************/ |
|---|
| 212 | LEAF(check_for_OLOAD2) |
|---|
| 213 | |
|---|
| 214 | .set noreorder |
|---|
| 215 | |
|---|
| 216 | wait_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 |
|---|
| 227 | END(check_for_OLOAD2) |
|---|
| 228 | |
|---|