IO Registers: Difference between revisions

Neobrain (talk | contribs)
Gotta be short and concise :)
Kynex7510 (talk | contribs)
mNo edit summary
 
(33 intermediate revisions by 11 users not shown)
Line 11: Line 11:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[CONFIG rgstrs]]
| [[CONFIG9 Registers]]
| 0x10000000
| 0x10000000
| Boot9, Process9
| Boot9, Process9
Line 18: Line 18:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[IRQ rgstrs]]
| [[IRQ Registers]]
| 0x10001000
| 0x10001000
| Boot9, Process9, Kernel9
| Boot9, Process9, Kernel9
Line 25: Line 25:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[NDMA rgstrs]]
| [[NDMA Registers]]
| 0x10002000
| 0x10002000
| Boot9, Process9
| Boot9, Process9
| DMA Engine
| AHB DMA Engine
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[TIMER rgstrs]]
| [[TIMER Registers]]
| 0x10003000
| 0x10003000
| Boot9, Process9
| Boot9, Process9
Line 39: Line 39:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[CTRCARD rgstrs]]
| [[CTRCARD Registers]]
| 0x10004000 / 0x10005000
| 0x10004000 / 0x10005000
| Process9
| Process9
Line 46: Line 46:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[EMMC rgstrs]]
| [[EMMC Registers]]
| 0x10006000 / 0x10007000
| 0x10006000 / 0x10007000
| Boot9, Process9
| Boot9, Process9, NewKernel9Loader
| 0x10007000 is normally not enabled on retail, all-zeros when read.
| SD(IO) controller 1 and 3. 3 is normally mapped to ARM11.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[PXI rgstrs]]
| [[PXI Registers]]
| 0x10008000
| 0x10008000
| Boot9, Process9
| Boot9, Process9
Line 60: Line 60:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[AES rgstrs]]
| [[AES Registers]]
| 0x10009000
| 0x10009000
| Boot9, Process9
| Boot9, Process9, NewKernel9Loader
|
|
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[SHA rgstrs]]
| [[SHA Registers]]
| 0x1000A000
| 0x1000A000
| Boot9, Process9
| Boot9, Process9, NewKernel9Loader
|
|
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[RSA rgstrs]]
| [[RSA Registers]]
| 0x1000B000
| 0x1000B000
| Boot9, Process9
| Boot9, Process9
Line 81: Line 81:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[XDMA rgstrs]]
| [[Corelink DMA Engines|XDMA Registers]]
| 0x1000C000
| 0x1000C000
| Boot9, Kernel9
| Boot9, Kernel9
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLink™ DMA-330] (single-channel).
| [http://infocenter.arm.com/help/topic/com.arm.doc.subset.primecell.system/index.html CoreLink™ DMA-330 r0p0] (AXI busmaster, two channels, uses 32-bit bus width instead of 64).
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
| [[SPICARD rgstrs]]
| [[SPICARD Registers]]
| 0x1000D800
| 0x1000D800
| Process9
| Process9
Line 94: Line 94:
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| ?
| A9
| [[CONFIG rgstrs]]
| [[CONFIG Registers]]
| 0x10010000
| 0x10010000
| Process9
| Process9
Line 101: Line 101:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| ?
| A9
| PRNG rgstrs
| PRNG Registers
| 0x10011000
| 0x10011000
| Process9
| Boot9, Process9
| Used as entropy-source for seeding random number generators.
| Used as entropy-source for seeding random number generators.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| ?
| A9
| [[OTP rgstrs]]
| [[OTP Registers]]
| 0x10012000
| 0x10012000
| Kernel9, NewKernel9Loader
| Boot9, Kernel9, NewKernel9Loader
| Top secret.
| Top secret.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| ?
| A9
|
| [[ARM7|ARM7 Registers]]
| 0x10018000
| 0x10018000
| TwlProcess9
| TwlProcess9
Line 122: Line 122:
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| ?
| A11/A9
| ?
| TMIO SD(IO) controller 3
| 0x10100000
| 0x10100000
| ?
|  
| ?
| NWM references this controller but doesn't have access to it.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[HASH rgstrs]]
| [[HASH Registers]]
| 0x10101000
| 0x10101000
| [[Filesystem services]]
| [[Filesystem services]]
|  
| These registers function the same as the [[SHA Registers]], with the exception of the FIFO being located at 0x10301000.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[Camera rgstrs]]
| [[Y2R Registers]]
| 0x10102000
| 0x10102000
| [[Camera Services]]
| [[Camera Services]]
Line 144: Line 144:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[CSND rgstrs]] / [[DSP rgstrs]]
| [[CSND Registers]]
| 0x10103000
| 0x10103000
| TwlBg, [[Codec Services]], [[CSND Services]], [[DSP Services]]
| TwlBg, [[Codec Services]], [[CSND Services]], [[DSP Services]]
| Sound hardware. For DSP regs, see the "DSi XpertTeak" section in [http://problemkaputt.de/gba.htm no$gba] help.
| Sound hardware.
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| LGYFB0
| [[MTX_Registers|LgyFb bottom screen]]
| 0x10110000
| 0x10110000
| TwlBg
| TwlBg
| IO rgstrs used to access legacy output framebuffer, as well as configure the upscaling filter.
| IO registers used to access legacy output framebuffer, as well as configure the upscaling filter.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| LGYFB1
| [[MTX_Registers|LgyFb top screen]]
| 0x10111000
| 0x10111000
| TwlBg
| TwlBg
| IO rgstrs used to access legacy output framebuffer, as well as configure the upscaling filter.
| IO registers used to access legacy output framebuffer, as well as configure the upscaling filter.
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[Camera rgstrs]]  
| [[Camera Registers]]  
| 0x10120000
| 0x10120000
| [[Camera Services]]
| [[Camera Services]]
Line 172: Line 172:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[Camera rgstrs]]
| [[Camera Registers]]
| 0x10121000
| 0x10121000
| [[Camera Services]]
| [[Camera Services]]
Line 179: Line 179:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
|?
| [[WIFI Registers]]
| 0x10122000
| 0x10122000
| [[NWM Services]]
| [[NWM Services]]
| WIFI?
| WIFI SDIO bus registers
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
|?
| ?
| 0x10123000
| 0x10123000
| [[NWM Services]]
| [[NWM Services]]
Line 193: Line 193:
| style="background: red" | No
| style="background: red" | No
| A11/A9
| A11/A9
| [[MVD rgstrs]]
| [[MVD Registers]]
| 0x10130000
| 0x10130000
| [[MVD Services]]
| [[MVD Services]]
Line 200: Line 200:
| style="background: red" | No
| style="background: red" | No
| A11/A9
| A11/A9
| [[MVD rgstrs]]
| [[MVD Registers]]
| 0x10131000
| 0x10131000
| [[MVD Services]]
| [[MVD Services]]
Line 207: Line 207:
| style="background: red" | No
| style="background: red" | No
| A11/A9
| A11/A9
| [[MVD rgstrs]]
| [[MVD Registers]]
| 0x10132000
| 0x10132000
| [[MVD Services]]
| [[MVD Services]]
Line 214: Line 214:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[PDN rgstrs]]
| [[CONFIG11 Registers]]
| 0x10140000
| 0x10140000
| Process9, Boot11, Kernel11, TwlBg, [[DSP Services]], [[NWM Services]], [[SPI Services]]
| Process9, Boot11, Kernel11, TwlBg, [[DSP Services]], [[SPI Services]], [[NWM Services]] (until [[11.4.0-37#NWM-sysmodule|11.4.X]])
| Power management.  
| System configuration.  
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[PDN rgstrs]]
| [[PDN Registers]]
| 0x10141000
| 0x10141000
| Process9, Boot11, Kernel11, TwlBg, [[Codec Services]], [[NWM Services]], [[SPI Services]], [[PDN Services]]
| Process9, Boot11, Kernel11, TwlBg, [[Codec Services]], [[NWM Services]], [[SPI Services]], [[PDN Services]]
Line 228: Line 228:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[SPI rgstrs]]
| [[SPI Registers]]
| 0x10142000
| 0x10142000
| TwlBg, [[SPI Services]]
| TwlBg, [[SPI Services]]
Line 235: Line 235:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[SPI rgstrs]]
| [[SPI Registers]]
| 0x10143000
| 0x10143000
| TwlBg
| TwlBg, dmnt Module
| Only used under TWL_FIRM?
| Debugger related?
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[I2C rgstrs]]
| [[I2C Registers]]
| 0x10144000
| 0x10144000
| Boot11, Kernel11, TwlBg, [[I2C Services]]
| Boot11, Kernel11, TwlBg, [[I2C Services]]
|  
| 3DS I2C interface (MCU + Cameras + LCD)
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[CODEC rgstrs]]
| [[I2S Registers]]
| 0x10145000
| 0x10145000
| TwlBg, [[Codec Services]]
| TwlBg, AgbBg, [[Codec Services]]
|  
| Sound input/output lines
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[HID rgstrs]]
| [[HID Registers]]
| 0x10146000
| 0x10146000
| Boot11, Kernel11, TwlBg, [[HID Services]], dlp Services
| Boot9, Boot11, Kernel11, TwlBg, [[HID Services]], dlp Services
| See [[PAD]].
| See [[PAD]].
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[GPIO rgstrs]]
| [[GPIO Registers]]
| 0x10147000
| 0x10147000
| Boot11, TwlBg, [[GPIO Services]], [[DSP Services]](v0)
| Boot11, TwlBg, [[GPIO Services]], [[DSP Services]](v0)
Line 270: Line 270:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[I2C rgstrs]]
| [[I2C Registers]]
| 0x10148000
| 0x10148000
| TwlBg, [[I2C Services]]
| TwlBg, [[I2C Services]]
|  
| 3DS I2C interface (Gyro + IR)
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[SPI rgstrs]]
| [[SPI Registers]]
| 0x10160000
| 0x10160000
| Boot9, TwlBg, [[SPI Services]]
| Boot9, TwlBg, [[SPI Services]]
Line 284: Line 284:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[I2C rgstrs]]
| [[I2C Registers]]
| 0x10161000
| 0x10161000
| Boot11, TwlBg, [[I2C Services]]
| Boot11, TwlBg, [[I2C Services]]
| See [http://problemkaputt.de/gba.htm no$gba] help for some clues maybe.
| TWL I2C interface (MCU + Cameras)
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[MIC rgstrs]]
| [[MIC Registers]]
| 0x10162000
| 0x10162000
| [[MIC Services]]
| [[MIC Services]]
Line 298: Line 298:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[PXI rgstrs]]
| [[PXI Registers]]
| 0x10163000
| 0x10163000
| Boot11, Kernel11, TwlBg, [[PXI Services]]
| Boot11, Kernel11, TwlBg, [[PXI Services]]
Line 305: Line 305:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[NTRCARD rgstrs]]
| [[NTRCARD Registers]]
| 0x10164000
| 0x10164000
| Boot9, Process9
| Boot9, Process9
Line 312: Line 312:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[MP rgstrs]]
| [[MP Registers]]
| 0x10165000
| 0x10165000
| [[MP Services]]
| [[MP Services]]
Line 319: Line 319:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
|  [[MP rgstrs]]
|  [[MP Registers]]
| 0x10170000
| 0x10170000
| [[MP Services]]
| [[MP Services]]
| NTR WIFI rgstrs, see [http://problemkaputt.de/gbatek.htm#dswirelesscommunications GBATek].
| NTR WIFI Registers, see [http://problemkaputt.de/gbatek.htm#dswirelesscommunications GBATek].
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
|  [[MP rgstrs]]
|  [[MP Registers]]
| 0x10171000
| 0x10171000
| [[MP Services]]
| [[MP Services]]
| NTR WIFI rgstrs (mirror)
| NTR WIFI Registers (mirror)
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 347: Line 347:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[MP rgstrs]]
| [[MP Registers]]
| 0x10174000
| 0x10174000
| [[MP Services]]
| [[MP Services]]
Line 354: Line 354:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[MP rgstrs]]
| [[MP Registers]]
| 0x10175000
| 0x10175000
|?
|?
Line 361: Line 361:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
|  [[MP rgstrs]]
|  [[MP Registers]]
| 0x10176000
| 0x10176000
|?
|?
| NTR WIFI rgstrs (mirror)
| NTR WIFI Registers (mirror)
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
|  [[MP rgstrs]]
|  [[MP Registers]]
| 0x10177000
| 0x10177000
|?
|?
| NTR WIFI rgstrs (mirror)
| NTR WIFI Registers (mirror)
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
| [[MP rgstrs]]
| [[MP Registers]]
| 0x10178000 - 0x10180000
| 0x10178000 - 0x10180000
| [[MP Services]]
| [[MP Services]]
Line 382: Line 382:
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
| CDMA
| [[Corelink DMA Engines|CDMA]]
| 0x10200000
| 0x10200000
| Boot11, Kernel11
| Boot11, Kernel11
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLink™ DMA-330]. Not used on New3DS.
| [http://infocenter.arm.com/help/topic/com.arm.doc.subset.primecell.system/index.html CoreLink™ DMA-330 r0p0] (eight channels). Only used by bootrom on New3DS.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
| ?
| FCRAM configuration
| 0x10201000
| 0x10201000
|  
| TwlBg, Kernel11 (dead code)
|
|
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
| [[LCD rgstrs]]
| [[LCD Registers]]
| 0x10202000
| 0x10202000
| TwlBg, Kernel11, [[GSP Services]]
| TwlBg, Kernel11, [[GSP Services]]
Line 403: Line 403:
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
| [[DSP rgstrs]]
| [[DSP Registers]]
| 0x10203000
| 0x10203000
| [[DSP Services]]
| [[DSP Services]]
|  
| see the "DSi XpertTeak" section in [http://problemkaputt.de/gba.htm no$gba] help.
|-
|-style="border-top: double"
| style="background: green" | Yes
| style="background: red" | No
| A11
| A11
| ?
| ?
| 0x10204000
| 0x10204000
| ?
|  
|  
|
|-
|-style="border-top: double"
|  style="background: red" | No
|  style="background: red" | No
| A11
| A11
| CDMA
| [[Corelink DMA Engines|CDMA]]
| 0x10206000
| 0x10206000
| NewKernel11
| NewKernel11
| CDMA was moved here on New 3DS. [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLink™ DMA-330].
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLink™ DMA-330 r1p2] (eight channels). This is the DMA engine actually being used by the New3DS ARM11 kernel.
|-
|-
| style="background: red" | No
| style="background: red" | No
| A11
| A11
| [[MVD rgstrs]]
| [[MVD Registers]]
| 0x10207000
| 0x10207000
| [[MVD Services]]
| [[MVD Services]]
Line 434: Line 434:
| 0x1020F000
| 0x1020F000
| TwlBg, [[GSP Services]]
| TwlBg, [[GSP Services]]
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0422a/CHDGHIID.html CoreLink™ NIC-301 r1p0].
| [https://developer.arm.com/documentation/ddi0422/d/programmers-model/register-summary CoreLink™ NIC-301 r1p2].
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
| MIRROR
| AHB (or AXI?) FIFOs region
| 0x10300000-0x10400000
| 0x10300000-0x10340000
|
|
| Mirror of 0x10100000-0x10200000 (faster bus?), CDMA wants these addresses
| Pages present in this region correspond to the same respective devices in the 0x10100000-0x10140000 region but don't hold the same registers. They hold the FIFOs instead: the HASH FIFO register is located at 0x10301000. The LgyFb scaler data FIFO are located at 0x10310000 (top) and 0x10311000 (bot), etc. Needed for DMA.
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
| [[GPU rgstrs]]
| [[GPU/External_Registers|GPU Registers]]
| 0x10400000
| 0x10400000
| Boot11, Kernel11, [[GSP Services]]
| Boot11, Kernel11, [[GSP Services]]
Line 451: Line 451:
|}
|}


IO rgstrs starting at physical address 0x10200000 are not accessible from the ARM9 (which includes all LCD/GPU rgstrs). It seems IO rgstrs below physical address 0x10100000 are not accessible from the ARM11 bus.
IO registers starting at physical address 0x10200000 are not accessible from the ARM9 (which includes all LCD/GPU registers). It seems IO registers below physical address 0x10100000 are not accessible from the ARM11 bus.


ARM11 kernel virtual address mappings for these rgstrs varies for different builds. For ARM11 user mode applications you have:
ARM11 kernel virtual address mappings for these registers varies for different builds. For ARM11 user mode applications you have:
  physaddr = virtaddr - 0x1EC00000 + 0x10100000
  physaddr = virtaddr - 0x1EC00000 + 0x10100000