Hardware/Memory Controller

From WiiBrew
Jump to navigation Jump to search
Memory Controller
Access
Broadway???
StarletFull
Registers
Base0x0d8b4200
Length0xcc (?)
Access size16 bits
Byte orderBig Endian
This box: view  talk  edit


These registers contain various settings relevant to configuring system memory (and perhaps some aspects of the AHB). boot1 seems responsible for initially configuring a lot of these registers during the boot process - most likely for setting the DDR memory timings. In general, IOS (including BC/MIOS) seem to interact with these early when booting. The IOS[58] kernel also exposes syscall 0x57 for writing to this register space, which only appears to be used by the STM module.

Some of these register banks (SEQ/BIST/PERF) are not directly mapped into memory, but are instead accessed using a corresponding pair of registers:

  • For the DDR SEQ registers, MEM_SEQ_ADDR and MEM_SEQ_DATA
  • For the DDR BIST, MEM_BIST_ADDR and MEM_BIST_DATA
  • For the DPERF registers, presumably MEM_PERF and MEM_PERF_READ are involved [check]
  • MEM_ARB_EXADDR and MEM_ARB_EXCMD are used during DRAM initialization for Mode Register Set programming (the layout is probably vendor-specific).

Although the memory controller registers are actually mapped and available to ARM starting at 0x0d8b4200, some [all?] of the indirect accesses are performed starting with another pair in the Memory Interface registers.


Memory Controller Base Registers
Address Bits Name Description
0x0d8b4200 16 MEM_COMPAT
0x0d8b4202 16 MEM_PROT_REG
0x0d8b4204 16 MEM_PROT_SPL SPL (?) protection enabled/disable
0x0d8b4206 16 MEM_PROT_SPL_BASE SPL (?) protection base address
0x0d8b4208 16 MEM_PROT_SPL_END SPL (?) protection end address
0x0d8b420a 16 MEM_PROT_DDR DDR protection enable/disable
0x0d8b420c 16 MEM_PROT_DDR_BASE DDR protection base address
0x0d8b420e 16 MEM_PROT_DDR_END DDR protection end address
0x0d8b4210 16 MEM_COLSEL
0x0d8b4212 16 MEM_ROWSEL
0x0d8b4214 16 MEM_BANKSEL
0x0d8b4216 16 MEM_RANKSEL
0x0d8b4218 16 MEM_COLMSK
0x0d8b421a 16 MEM_ROWMSK
0x0d8b421c 16 MEM_BANKMSK
0x0d8b421e 16 MEM_PROT_SPL_ERR
0x0d8b4220 16 MEM_PROT_DDR_ERR
0x0d8b4222 16 MEM_PROT_SPL_MSK
0x0d8b4224 16 MEM_PROT_DDR_MSK
0x0d8b4226 16 MEM_RFSH
0x0d8b4228 16 MEM_AHMFLUSH AHB flush request
0x0d8b422a 16 MEM_AHMFLUSH_ACK AHB flush request acknowledgment
0x0d8b4268 16 MEM_SEQRD_HWM
0x0d8b426a 16 MEM_SEQWR_HWM
0x0d8b426c 16 MEM_SEQCMD_HWM
0x0d8b426e 16 MEM_CPUAHM_WR_T
0x0d8b4270 16 MEM_DMAAHM_WR_T
0x0d8b4272 16 MEM_DMAAHM0_WR_T
0x0d8b4274 16 MEM_DMAAHM1_WR_T
0x0d8b4276 16 MEM_PI_WR_T
0x0d8b4278 16 MEM_PE_WR_T
0x0d8b427a 16 MEM_IO_WR_T
0x0d8b427c 16 MEM_DSP_WR_T
0x0d8b427e 16 MEM_ACC_WR_T
0x0d8b4280 16 MEM_ARB_MAXWR
0x0d8b4282 16 MEM_ARB_MINRD
0x0d8b4284 16 MEM_PROF_CPUAHM
0x0d8b4286 16 MEM_PROF_CPUAHM0
0x0d8b4288 16 MEM_PROF_DMAAHM
0x0d8b428a 16 MEM_PROF_DMAAHM0
0x0d8b428c 16 MEM_PROF_DMAAHM1
0x0d8b428e 16 MEM_PROF_PI
0x0d8b4290 16 MEM_PROF_VI
0x0d8b4292 16 MEM_PROF_IO
0x0d8b4294 16 MEM_PROF_DSP
0x0d8b4296 16 MEM_PROF_TC
0x0d8b4298 16 MEM_PROF_CP
0x0d8b429a 16 MEM_PROF_ACC
0x0d8b429c 16 MEM_RDPR_CPUAHM
0x0d8b429e 16 MEM_RDPR_CPUAHM0
0x0d8b42a0 16 MEM_RDPR_DMAAHM
0x0d8b42a2 16 MEM_RDPR_DMAAHM0
0x0d8b42a4 16 MEM_RDPR_DMAAHM1
0x0d8b42a6 16 MEM_RDPR_PI
0x0d8b42a8 16 MEM_RDPR_VI
0x0d8b42aa 16 MEM_RDPR_IO
0x0d8b42ac 16 MEM_RDPR_DSP
0x0d8b42ae 16 MEM_RDPR_TC
0x0d8b42b0 16 MEM_RDPR_CP
0x0d8b42b2 16 MEM_RDPR_ACC
0x0d8b42b4 16 MEM_ARB_MAXRD
0x0d8b42b6 16 MEM_ARB_MISC
0x0d8b42b8 16 MEM_ARAM_EMUL "ARAM Emulation" (?)
0x0d8b42ba 16 MEM_WRMUX
0x0d8b42bc 16 MEM_PERF
0x0d8b42be 16 MEM_PERF_READ
0x0d8b42c0 16 MEM_ARB_EXADDR
0x0d8b42c2 16 MEM_ARB_EXCMD
0x0d8b42c4 16 MEM_SEQ_DATA Data from read (or for pending write) on DDR SEQ
0x0d8b42c6 16 MEM_SEQ_ADDR Offset for access on DDR SEQ register space
0x0d8b42c8 16 MEM_BIST_DATA Data from read (or for pending write) on DDR BIST
0x0d8b42ca 16 MEM_BIST_ADDR Offset for access on DDR BIST register space

DDR SEQ Register Space

SEQ
Access
Broadway???
StarletFull
Registers
BaseN/A
Length???
Access size16 bits
Byte orderBig Endian
This box: view  talk  edit

Note: These registers are NOT mapped into memory.

DDR SEQ Registers
Address Bits Name Description


0x00000000 16 DDR_SEQ_BL4
0x00000001 16 DDR_SEQ_TRCDR
0x00000002 16 DDR_SEQ_TRCDW
0x00000003 16 DDR_SEQ_TRAS
0x00000004 16 DDR_SEQ_TRC
0x00000005 16 DDR_SEQ_TCL
0x00000006 16 DDR_SEQ_TWL
0x00000007 16 DDR_SEQ_RRL
0x00000008 16 DDR_SEQ_TRRD
0x00000009 16 DDR_SEQ_TFAW
0x0000000a 16 DDR_SEQ_TRFC
0x0000000b 16 DDR_SEQ_TRDWR
0x0000000c 16 DDR_SEQ_TWRRD
0x0000000d 16 DDR_SEQ_TR2R
0x0000000e 16 DDR_SEQ_RDPR
0x0000000f 16 DDR_SEQ_WRPR
0x00000010 16 DDR_SEQ_BANK4
0x00000011 16 DDR_SEQ_QSOE0
0x00000012 16 DDR_SEQ_QSOE1
0x00000013 16 DDR_SEQ_QSOE2
0x00000014 16 DDR_SEQ_QSOE3
0x00000015 16 DDR_SEQ_RANK2
0x00000016 16 DDR_SEQ_DDR2
0x00000017 16 DDR_SEQ_RSTB
0x00000018 16 DDR_SEQ_CKEEN
0x00000019 16 DDR_SEQ_CKEDYN
0x0000001a 16 DDR_SEQ_CKESR
0x0000001b 16 DDR_SEQ_ODTON
0x0000001c 16 DDR_SEQ_ODTDYN
0x0000001d 16 DDR_SEQ_ODT0
0x0000001e 16 DDR_SEQ_ODT1
0x0000001f 16 DDR_SEQ_RECEN0
0x00000020 16 DDR_SEQ_RECEN1
0x00000021 16 DDR_SEQ_IDLEST
0x00000022 16 DDR_SEQ_NPLRD
0x00000023 16 DDR_SEQ_NPLCONF
0x00000024 16 DDR_SEQ_NOOPEN
0x00000025 16 DDR_SEQ_QSDEF
0x00000026 16 DDR_SEQ_ODTPIN
0x00000027 16 DDR_SEQ_NPLDLY
0x00000028 16 DDR_SEQ_STATUS
0x00000029 16 DDR_SEQ_VENDORID0
0x0000002a 16 DDR_SEQ_VENDORID1
0x0000002b 16 DDR_SEQ_NMOSPD
0x0000002c 16 DDR_SEQ_STR0
0x0000002d 16 DDR_SEQ_STR1
0x0000002e 16 DDR_SEQ_STR2
0x0000002f 16 DDR_SEQ_STR3
0x00000030 16 DDR_SEQ_APAD0
0x00000031 16 DDR_SEQ_APAD1
0x00000032 16 DDR_SEQ_CKPAD0
0x00000033 16 DDR_SEQ_CKPAD1
0x00000034 16 DDR_SEQ_CMDPAD0
0x00000035 16 DDR_SEQ_CMDPAD1
0x00000036 16 DDR_SEQ_DQPAD0
0x00000037 16 DDR_SEQ_DQPAD1
0x00000038 16 DDR_SEQ_QSPAD0
0x00000039 16 DDR_SEQ_QSPAD1
0x0000003a 16 DDR_SEQ_WRDQ0
0x0000003b 16 DDR_SEQ_WRDQ1
0x0000003c 16 DDR_SEQ_WRQS0
0x0000003d 16 DDR_SEQ_WRQS1
0x0000003e 16 DDR_SEQ_MADJL
0x0000003f 16 DDR_SEQ_MADJH
0x00000040 16 DDR_SEQ_SADJ0L
0x00000041 16 DDR_SEQ_SADJ0H
0x00000042 16 DDR_SEQ_SADJ1L
0x00000043 16 DDR_SEQ_SADJ1H
0x00000044 16 DDR_SEQ_RDDQ1
0x00000045 16 DDR_SEQ_WR
0x00000046 16 DDR_SEQ_PADA
0x00000047 16 DDR_SEQ_PAD0
0x00000048 16 DDR_SEQ_PAD1
0x00000049 16 DDR_SEQ_ARAM
0x0000004a 16 DDR_SEQ_WR2PR
0x0000004b 16 DDR_SEQ_SYNC
0x0000004c 16 DDR_SEQ_RECVON


DDR BIST Register Space

BIST
Access
Broadway???
StarletFull
Registers
BaseN/A
Length???
Access size16 bits
Byte orderBig Endian
This box: view  talk  edit

Note: These registers are NOT mapped into memory.

DDR BIST Registers
Address Bits Name Description
0x00000000 16 BIST_EN
0x00000001 16 BIST_WRGO
0x00000002 16 BIST_WRRPT
0x00000003 16 BIST_WRCNTH
0x00000004 16 BIST_WRCNTL
0x00000005 16 BIST_RDGO
0x00000006 16 BIST_RDRPT
0x00000007 16 BIST_RDCNTH
0x00000008 16 BIST_RDCNTL
0x00000009 16 BIST_WA_CH
0x0000000a 16 BIST_WA_CL
0x0000000b 16 BIST_WA_SCNTH
0x0000000c 16 BIST_WA_SCNTL
0x0000000d 16 BIST_WA_SCONH
0x0000000e 16 BIST_WA_SCONL
0x0000000f 16 BIST_RA_CH
0x00000010 16 BIST_RA_CL
0x00000011 16 BIST_RA_SCNTH
0x00000012 16 BIST_RA_SCNTL
0x00000013 16 BIST_RA_SCONH
0x00000014 16 BIST_RA_SCONL
0x00000015 16 BIST_WD_C0H
0x00000016 16 BIST_WD_C0L
0x00000017 16 BIST_WD_C1H
0x00000018 16 BIST_WD_C1L
0x00000019 16 BIST_WD_C2H
0x0000001a 16 BIST_WD_C2L
0x0000001b 16 BIST_WD_C3H
0x0000001c 16 BIST_WD_C3L
0x0000001d 16 BIST_WD_C4H
0x0000001e 16 BIST_WD_C4L
0x0000001f 16 BIST_WD_C5H
0x00000020 16 BIST_WD_C5L
0x00000021 16 BIST_WD_C6H
0x00000022 16 BIST_WD_C6L
0x00000023 16 BIST_WD_C7H
0x00000024 16 BIST_WD_C7L
0x00000025 16 BIST_WD_SCNTH
0x00000026 16 BIST_WD_SCNTL
0x00000027 16 BIST_WD_SCONH
0x00000028 16 BIST_WD_SCONL
0x00000029 16 BIST_RD_C0H
0x0000002a 16 BIST_RD_C0L
0x0000002b 16 BIST_RD_C1H
0x0000002c 16 BIST_RD_C1L
0x0000002d 16 BIST_RD_C2H
0x0000002e 16 BIST_RD_C2L
0x0000002f 16 BIST_RD_C3H
0x00000030 16 BIST_RD_C3L
0x00000031 16 BIST_RD_C4H
0x00000032 16 BIST_RD_C4L
0x00000033 16 BIST_RD_C5H
0x00000034 16 BIST_RD_C5L
0x00000035 16 BIST_RD_C6H
0x00000036 16 BIST_RD_C6L
0x00000037 16 BIST_RD_C7H
0x00000038 16 BIST_RD_C7L
0x00000039 16 BIST_RD_SCNTH
0x0000003a 16 BIST_RD_SCNTL
0x0000003b 16 BIST_RD_SCONH
0x0000003c 16 BIST_RD_SCONL
0x0000003d 16 BIST_RD_MSKH
0x0000003e 16 BIST_RD_MSKL
0x0000003f 16 BIST_WRIDLE
0x00000040 16 BIST_RDIDLE
0x00000041 16 BIST_ERRCNT


DDR PERF Register Space

PERF
Access
Broadway???
StarletFull
Registers
BaseN/A
Length???
Access size16 bits
Byte orderBig Endian
This box: view  talk  edit

Note: These registers are NOT mapped into memory.

DDR PERF Registers
Address Bits Name Description
0x00000000 16 DPERF_TIME
0x00000002 16 DPERF_SEQCMD
0x00000004 16 DPERF_SEQDATA
0x00000006 16 DPERF_RF_CNT_PI
0x00000008 16 DPERF_NREQ_DDR_PI
0x0000000a 16 DPERF_TREQ_DDR_PI
0x0000000c 16 DPERF_TACK_DDR_PI
0x0000000e 16 DPERF_NREQ_SPL_PI
0x00000010 16 DPERF_TREQ_SPL_PI
0x00000012 16 DPERF_TACK_SPL_PI
0x00000014 16 DPERF_RF_CNT_CPUAHM
0x00000016 16 DPERF_NREQ_DDR_CPUAHM
0x00000018 16 DPERF_TREQ_DDR_CPUAHM
0x0000001a 16 DPERF_TACK_DDR_CPUAHM
0x0000001c 16 DPERF_NREQ_SPL_CPUAHM
0x0000001e 16 DPERF_TREQ_SPL_CPUAHM
0x00000020 16 DPERF_TACK_SPL_CPUAHM
0x00000022 16 DPERF_RF_CNT_DMAAHM
0x00000024 16 DPERF_NREQ_DDR_DMAAHM
0x00000026 16 DPERF_TREQ_DDR_DMAAHM
0x00000028 16 DPERF_TACK_DDR_DMAAHM
0x0000002a 16 DPERF_NREQ_SPL_DMAAHM
0x0000002c 16 DPERF_TREQ_SPL_DMAAHM
0x0000002e 16 DPERF_TACK_SPL_DMAAHM
0x00000030 16 DPERF_RF_CNT_VI
0x00000032 16 DPERF_NREQ_DDR_VI
0x00000034 16 DPERF_TREQ_DDR_VI
0x00000036 16 DPERF_TACK_DDR_VI
0x00000038 16 DPERF_NREQ_SPL_VI
0x0000003a 16 DPERF_TREQ_SPL_VI
0x0000003c 16 DPERF_TACK_SPL_VI
0x0000003e 16 DPERF_RF_CNT_IO
0x00000040 16 DPERF_NREQ_DDR_IO
0x00000042 16 DPERF_TREQ_DDR_IO
0x00000044 16 DPERF_TACK_DDR_IO
0x00000046 16 DPERF_NREQ_SPL_IO
0x00000048 16 DPERF_TREQ_SPL_IO
0x0000004a 16 DPERF_TACK_SPL_IO
0x0000004c 16 DPERF_RF_CNT_DSP
0x0000004e 16 DPERF_NREQ_DDR_DSP
0x00000050 16 DPERF_TREQ_DDR_DSP
0x00000052 16 DPERF_TACK_DDR_DSP
0x00000054 16 DPERF_NREQ_SPL_DSP
0x00000056 16 DPERF_TREQ_SPL_DSP
0x00000058 16 DPERF_TACK_SPL_DSP
0x0000005a 16 DPERF_RF_CNT_TC
0x0000005c 16 DPERF_NREQ_DDR_TC
0x0000005e 16 DPERF_TREQ_DDR_TC
0x00000060 16 DPERF_TACK_DDR_TC
0x00000062 16 DPERF_NREQ_SPL_TC
0x00000064 16 DPERF_TREQ_SPL_TC
0x00000066 16 DPERF_TACK_SPL_TC
0x00000068 16 DPERF_RF_CNT_CP
0x0000006a 16 DPERF_NREQ_DDR_CP
0x0000006c 16 DPERF_TREQ_DDR_CP
0x0000006e 16 DPERF_TACK_DDR_CP
0x00000070 16 DPERF_NREQ_SPL_CP
0x00000072 16 DPERF_TREQ_SPL_CP
0x00000074 16 DPERF_TACK_SPL_CP
0x00000076 16 DPERF_RF_CNT_ACC
0x00000078 16 DPERF_NREQ_DDR_ACC
0x0000007a 16 DPERF_TREQ_DDR_ACC
0x0000007c 16 DPERF_TACK_DDR_ACC
0x0000007e 16 DPERF_NREQ_SPL_ACC
0x00000080 16 DPERF_TREQ_SPL_ACC
0x00000082 16 DPERF_TACK_SPL_ACC