RDRAM: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
Line 457: | Line 457: | ||
'''[[:File:Cncrntug.pdf|File:Cncrntug.pdf]]''' |
'''[[:File:Cncrntug.pdf|File:Cncrntug.pdf]]''' |
||
RDRAM Initialization procedure as implemented in IPL3: |
|||
1. a. Enable RI Auto Current |
|||
b. let it settle by waiting using countdown(8800) |
|||
c. load RI CC value |
|||
2. Enable RI T/R select |
|||
3. a. Force RI_MODE reset, disable R/T stop |
|||
b. wait using countdown(4) |
|||
4. a. Force RI_MODE standby, enable R/T stop |
|||
b. wait using countdown(32) |
|||
5. Set MI INIT mode + length=15 |
|||
6. a. Setup all RDRAM delays (AckWin=11,Read=9,Ack=3,Write=7) [bcast] |
|||
b. Setup all RDRAM refresh row to 0 [bcast] |
|||
c. Move all RDRAM modules to top of address space deviceid = 0x80000000 [bcast] |
|||
7. a. compute rdram reg space size (reg_step) based on RCP version (RCPv1: 128, RCPv2: 256) |
|||
b. init top rdram reg pointer (RDRAM_REGS_BASE + 32 * reg_step) |
|||
8. First pass which walk through at most 8 RDRAMs and for valid ones: |
|||
a. place them at next 2MB boundary (eg. rdram_deviceid = i * 0x08000000) |
|||
b. compute optimal (auto) current calibration value for RDRAM module and apply it |
|||
c. exit first pass loop if cc value is zero, eg. no RDRAM module is present |
|||
d. read device description registers (device_type + manufaturer). These reads must be surrounded by MI_MODE= SET_DRAM_REG and CLR_DRAM_REG because individual rdram registers are accessed. |
|||
e. based on device description, setup optimal RAS timing |
|||
f. store RDRAM parameters (CC, geometry {eg. col, bank, row fields from device_type}) for second pass |
|||
g. update values which tracks how to reorder all 2MB RDRAM modules before the 1MB, how many modules are effectively presents and the 2MB_bitfield (=2^(number of 2MB modules)-1, because all 2MB banks will be placed first) |
|||
9. a. Disable all RDRAM modules (rdram_mode = 0xc4000000) [bcast] |
|||
b. and move them all back to top of address space (rdram_deviceid = 0x80000000) [bcast] |
|||
10. Second pass iterate through all modules discovered during the first pass and: |
|||
a. reorder them so that all 2MB modules are placed before 1MB modules |
|||
b. write previously computed optimal CC for each module |
|||
c. touch RDRAM modules to settle their timing circuits. |
|||
1MB modules undergo 4 consecutive reads (ptr+k*0x00080000, k=0..1) x 2 |
|||
2MB modules undergo 8 consecutive reads (ptr+k*0x00080000, k=0..3) x 2 |
|||
11. a. setup RI refresh register = 0x63634 | 2MB_bitfield << 19 |
|||
b. do a dummy read of RI refresh reg |
|||
12. Return amount of detected RDRAM. |
|||
Trivia: there is very likely a copy-paste error in the original IPL3 code when incrementing t6 in the second pass. It should have been t8 so we can place next 1MB module at next slot. But I guess it went unnoticed because retail models don't use 1MB modules. |
|||
= Expansion Pak Detection = |
= Expansion Pak Detection = |