File indexing completed on 2025-05-11 08:24:01
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include "rtems/score/sh7750_regs.h"
0016 #include "rtems/score/sh_io.h"
0017 #include "sdram.h"
0018 #include "bsp.h"
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 void early_hw_init(void)
0032 {
0033
0034 write32(0, SH7750_MMUCR);
0035
0036
0037 write32(0, SH7750_CCR);
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049 write16((read8(SH7750_WTCSR) & ~SH7750_WTCSR_TME) |
0050 SH7750_WTCSR_KEY, SH7750_WTCSR);
0051 write16(SH7750_WTCSR_MODE_IT | SH7750_WTCSR_CKS_DIV4096 |
0052 SH7750_WTCSR_KEY, SH7750_WTCSR);
0053
0054
0055 write16(0x40 | SH7750_WTCNT_KEY, SH7750_WTCNT);
0056 write16(read16(SH7750_FRQCR) | SH7750_FRQCR_PLL1EN, SH7750_FRQCR);
0057
0058
0059 write16(0x40 | SH7750_WTCNT_KEY, SH7750_WTCNT);
0060 write16(SH7750_FRQCR_CKOEN | SH7750_FRQCR_PLL1EN |
0061 SH7750_FRQCR_IFCDIV1 | SH7750_FRQCR_BFCDIV2 | SH7750_FRQCR_PFCDIV4,
0062 SH7750_FRQCR);
0063
0064
0065 write16(0x40 | SH7750_WTCNT_KEY, SH7750_WTCNT);
0066 write16(read16(SH7750_FRQCR) | SH7750_FRQCR_PLL2EN, SH7750_FRQCR);
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076 write32(
0077
0078
0079 SH7750_BCR1_BREQEN |
0080
0081
0082
0083 SH7750_BCR1_A0BST_SRAM |
0084 SH7750_BCR1_A5BST_SRAM |
0085 SH7750_BCR1_A6BST_SRAM |
0086 SH7750_BCR1_DRAMTP_2SDRAM_3SDRAM
0087 ,
0088 SH7750_BCR1);
0089
0090 write16(
0091 (SH7750_BCR2_SZ_8 << SH7750_BCR2_A0SZ_S) |
0092
0093 (SH7750_BCR2_SZ_32 << SH7750_BCR2_A6SZ_S) |
0094 (SH7750_BCR2_SZ_32 << SH7750_BCR2_A5SZ_S) |
0095 (SH7750_BCR2_SZ_32 << SH7750_BCR2_A4SZ_S) |
0096 (SH7750_BCR2_SZ_32 << SH7750_BCR2_A3SZ_S) |
0097 (SH7750_BCR2_SZ_32 << SH7750_BCR2_A2SZ_S) |
0098 (SH7750_BCR2_SZ_32 << SH7750_BCR2_A1SZ_S) |
0099 SH7750_BCR2_PORTEN,
0100 SH7750_BCR2);
0101
0102 write32(
0103 (0 << SH7750_WCR1_DMAIW_S) |
0104 (7 << SH7750_WCR1_A6IW_S) |
0105 (7 << SH7750_WCR1_A5IW_S) |
0106 (7 << SH7750_WCR1_A4IW_S) |
0107 (7 << SH7750_WCR1_A3IW_S) |
0108 (1 << SH7750_WCR1_A2IW_S) |
0109 (7 << SH7750_WCR1_A1IW_S) |
0110 (1 << SH7750_WCR1_A0IW_S),
0111 SH7750_WCR1);
0112
0113 write32(
0114 (SH7750_WCR2_WS15 << SH7750_WCR2_A6W_S) |
0115 (SH7750_WCR2_BPWS7 << SH7750_WCR2_A6B_S) |
0116 (SH7750_WCR2_WS15 << SH7750_WCR2_A5W_S) |
0117 (SH7750_WCR2_BPWS7 << SH7750_WCR2_A5B_S) |
0118 (SH7750_WCR2_WS15 << SH7750_WCR2_A4W_S) |
0119 (SH7750_WCR2_WS15 << SH7750_WCR2_A3W_S) |
0120 (SH7750_WCR2_SDRAM_CAS_LAT2 << SH7750_WCR2_A2W_S) |
0121 (SH7750_WCR2_WS15 << SH7750_WCR2_A1W_S) |
0122
0123 (SH7750_WCR2_WS6 << SH7750_WCR2_A0W_S) |
0124
0125
0126 (SH7750_WCR2_BPWS7 << SH7750_WCR2_A0B_S),
0127
0128 SH7750_WCR2);
0129 write32(
0130 SH7750_WCR3_A6S |
0131 (SH7750_WCR3_DHWS_3 << SH7750_WCR3_A6H_S) |
0132 SH7750_WCR3_A5S |
0133 (SH7750_WCR3_DHWS_3 << SH7750_WCR3_A5H_S) |
0134 SH7750_WCR3_A4S |
0135 (SH7750_WCR3_DHWS_3 << SH7750_WCR3_A4H_S) |
0136 SH7750_WCR3_A3S |
0137 (SH7750_WCR3_DHWS_3 << SH7750_WCR3_A3H_S) |
0138 SH7750_WCR3_A2S |
0139 (SH7750_WCR3_DHWS_3 << SH7750_WCR3_A2H_S) |
0140 SH7750_WCR3_A1S |
0141 (SH7750_WCR3_DHWS_3 << SH7750_WCR3_A1H_S) |
0142 0 |
0143 (SH7750_WCR3_DHWS_0 << SH7750_WCR3_A0H_S),
0144 SH7750_WCR3);
0145
0146 #define MCRDEF \
0147 \
0148 (SH7750_MCR_TRC_0 | SH7750_MCR_TRAS_SDRAM_TRC_4 | \
0149 \
0150 \
0151 SH7750_MCR_TPC_SDRAM_1 | \
0152 SH7750_MCR_RCD_SDRAM_2 | \
0153
0154
0155
0156
0157 \
0158 SH7750_MCR_TRWL_5 | \
0159 SH7750_MCR_BE | \
0160 SH7750_MCR_SZ_32 | \
0161 (4 << SH7750_MCR_AMX_S) | \
0162 SH7750_MCR_RFSH | \
0163 SH7750_MCR_RMODE_NORMAL)
0164
0165
0166 write16(SH7750_RTCNT_KEY | 0, SH7750_RTCNT);
0167
0168
0169
0170
0171 write16(SH7750_RTCOR_KEY | 187, SH7750_RTCOR);
0172
0173
0174 write16(SH7750_RFCR_KEY | 0, SH7750_RFCR);
0175
0176
0177 write16(SH7750_RTCSR_CKS_CKIO_DIV4 | SH7750_RTCSR_KEY, SH7750_RTCSR);
0178
0179
0180 write32((MCRDEF & ~SH7750_MCR_RFSH) | SH7750_MCR_PALL, SH7750_MCR);
0181
0182
0183
0184
0185 while (read16(SH7750_RFCR) <= 7);
0186
0187
0188 write16(SH7750_RTCNT_KEY | 0, SH7750_RTCNT);
0189
0190
0191 write16(SH7750_RFCR_KEY | 0, SH7750_RFCR);
0192
0193
0194 write32(0, SH7750_SDRAM_MODE_A2_32BIT(0));
0195
0196
0197
0198 write32(MCRDEF | SH7750_MCR_MRSET, SH7750_MCR);
0199
0200
0201 while (read16(SH7750_RFCR) <= 10);
0202
0203
0204
0205 write8(0,SH7750_SDRAM_MODE_A2_32BIT(
0206 SDRAM_MODE_BL_8 |
0207 SDRAM_MODE_BT_SEQ |
0208
0209 SDRAM_MODE_CL_2 |
0210 SDRAM_MODE_OPC_BRBW)
0211 );
0212
0213
0214
0215 write32(0, SH7750_DMAOR);
0216
0217
0218
0219 write32(
0220 SH7750_PCTRA_PBOUT(0) | SH7750_PCTRA_PBOUT(1) |
0221 SH7750_PCTRA_PBOUT(2) | SH7750_PCTRA_PBOUT(3) |
0222 SH7750_PCTRA_PBOUT(4) | SH7750_PCTRA_PBOUT(5) |
0223 SH7750_PCTRA_PBOUT(6) | SH7750_PCTRA_PBOUT(7) |
0224 SH7750_PCTRA_PBOUT(8) | SH7750_PCTRA_PBOUT(9) |
0225 SH7750_PCTRA_PBOUT(10) | SH7750_PCTRA_PBOUT(11) |
0226 SH7750_PCTRA_PBOUT(12) | SH7750_PCTRA_PBOUT(13) |
0227 SH7750_PCTRA_PBOUT(14) | SH7750_PCTRA_PBOUT(15),
0228 SH7750_PCTRA);
0229 write32(
0230 SH7750_PCTRB_PBOUT(16) | SH7750_PCTRB_PBOUT(17) |
0231 SH7750_PCTRB_PBOUT(18) | SH7750_PCTRB_PBOUT(19),
0232 SH7750_PCTRB);
0233
0234 write32(0, SH7750_PDTRA);
0235 write32(0, SH7750_PDTRB);
0236
0237
0238 write16(SH7750_ICR_IRLM, SH7750_ICR);
0239
0240
0241 write16(
0242 (0 << SH7750_IPRA_TMU0_S) |
0243 (0 << SH7750_IPRA_TMU1_S) |
0244 (0 << SH7750_IPRA_TMU2_S) |
0245 (0 << SH7750_IPRA_RTC_S),
0246 SH7750_IPRA);
0247 write16(
0248 (0 << SH7750_IPRB_WDT_S) |
0249 (0 << SH7750_IPRB_REF_S) |
0250 (0 << SH7750_IPRB_SCI1_S),
0251 SH7750_IPRB);
0252 write16(
0253 (0 << SH7750_IPRC_GPIO_S) |
0254 (0 << SH7750_IPRC_DMAC_S) |
0255 (0 << SH7750_IPRC_SCIF_S) |
0256 (0 << SH7750_IPRC_HUDI_S),
0257 SH7750_IPRC);
0258
0259 }
0260
0261
0262
0263
0264
0265 void bsp_cache_on(void)
0266 {
0267 switch (boot_mode) {
0268 case SH4_BOOT_MODE_FLASH:
0269 write32(SH7750_CCR_ICI | SH7750_CCR_ICE |
0270 SH7750_CCR_OCI | SH7750_CCR_CB | SH7750_CCR_OCE,
0271 SH7750_CCR);
0272 break;
0273 case SH4_BOOT_MODE_IPL:
0274 __asm__ volatile (
0275 "mov #6, r0\n"
0276 "xor r4, r4\n"
0277 "trapa #0x3f\n"
0278 : : : "r0", "r4");
0279 break;
0280 default:
0281 break;
0282 }
0283 }