IO Registers: Difference between revisions
| No edit summary | Vgturtle127 (talk | contribs) m Fixed some stuff and added things we need to know | ||
| Line 94: | Line 94: | ||
| |-style="border-top: double" | |-style="border-top: double" | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | ? | |? | ||
| | [[CONFIG Registers]] | | [[CONFIG Registers]] | ||
| | 0x10010000 | | 0x10010000 | ||
| Line 101: | Line 101: | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | ? | |? | ||
| | [[CONFIG Registers]] | | [[CONFIG Registers]] | ||
| | 0x10011000 | | 0x10011000 | ||
| Line 108: | Line 108: | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | ? | |? | ||
| | ? | |? | ||
| | 0x10012000 | | 0x10012000 | ||
| | Kernel9, NewKernel9Loader | | Kernel9, NewKernel9Loader | ||
| Line 115: | Line 115: | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | ? | |? | ||
| | ? | |? | ||
| | 0x10018000 | | 0x10018000 | ||
| | TwlProcess9 | | TwlProcess9 | ||
| Line 122: | Line 122: | ||
| |-style="border-top: double" | |-style="border-top: double" | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | ? | |? | ||
| |   | |? | ||
| | 0x10100000 | | 0x10100000 | ||
| | | |? | ||
| |   | |? | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| Line 151: | Line 151: | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | A11/A9 | | A11/A9 | ||
| | ? | |? | ||
| | 0x10110000 | | 0x10110000 | ||
| | | |? | ||
| |   | |? | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | A11/A9 | | A11/A9 | ||
| | ? | |? | ||
| | 0x10111000 | | 0x10111000 | ||
| | TwlBg | | TwlBg | ||
| Line 179: | Line 179: | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | A11/A9 | | A11/A9 | ||
| | ? | |? | ||
| | 0x10122000 | | 0x10122000 | ||
| | [[NWM Services]] | | [[NWM Services]] | ||
| | WIFI ? | | WIFI? | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | A11/A9 | | A11/A9 | ||
| | ? | |? | ||
| | 0x10123000 | | 0x10123000 | ||
| | [[NWM Services]] | | [[NWM Services]] | ||
| | WIFI ? | | WIFI? | ||
| |-style="border-top: double" | |-style="border-top: double" | ||
| | style="background: red" | No | | style="background: red" | No | ||
| Line 333: | Line 333: | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | A11/A9 | | A11/A9 | ||
| |   | |? | ||
| | 0x10172000 | | 0x10172000 | ||
| | | | | ||
| Line 340: | Line 340: | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | A11/A9 | | A11/A9 | ||
| | | |? | ||
| | 0x10173000 | | 0x10173000 | ||
| | | | | ||
| Line 356: | Line 356: | ||
| | [[MP Registers]] | | [[MP Registers]] | ||
| | 0x10175000 | | 0x10175000 | ||
| | | |? | ||
| | NTR WIFI RAM | | NTR WIFI RAM | ||
| |- | |- | ||
| Line 363: | Line 363: | ||
| |  [[MP Registers]] | |  [[MP Registers]] | ||
| | 0x10176000 | | 0x10176000 | ||
| |   | |? | ||
| | NTR WIFI Registers (mirror) | | NTR WIFI Registers (mirror) | ||
| |- | |- | ||
| Line 370: | Line 370: | ||
| |  [[MP Registers]] | |  [[MP Registers]] | ||
| | 0x10177000 | | 0x10177000 | ||
| |   | |? | ||
| | NTR WIFI Registers (mirror) | | NTR WIFI Registers (mirror) | ||
| |- | |- | ||
| Line 380: | Line 380: | ||
| | NTR WIFI WS1 Region | | NTR WIFI WS1 Region | ||
| |-style="border-top: double" | |-style="border-top: double" | ||
| | style="background: orange" | ? | | style="background: orange" |? | ||
| | A11 | | A11 | ||
| | CDMA | | CDMA | ||
| | 0x10200000 | | 0x10200000 | ||
| | Boot11, Kernel11 | | Boot11, Kernel11 | ||
| | On  | | On old 3DS this is [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLink™ DMA-330]. On the New 3DS it is unknown what this is. | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| | A11 | | A11 | ||
| | ? | |? | ||
| | 0x10202000 | | 0x10202000 | ||
| | TwlBg, Kernel11, [[GSP Services]] | | TwlBg, Kernel11, [[GSP Services]] | ||
| Line 401: | Line 401: | ||
| |   | |   | ||
| |- | |- | ||
| |  style="background: orange" | ? | |  style="background: orange" |? | ||
| | A11 | | A11 | ||
| | CDMA | | CDMA | ||
| | 0x10206000 | | 0x10206000 | ||
| | NewKernel11 | | NewKernel11 | ||
| | CDMA was moved here on  | | CDMA was moved here on New 3DS. [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLink™ DMA-330]. | ||
| |- | |- | ||
| |  style="background: orange" | ? | |  style="background: orange" |? | ||
| | A11 | | A11 | ||
| | [[MVD Registers]] | | [[MVD Registers]] | ||
| | 0x10207000 | | 0x10207000 | ||
| | [[MVD Services]] | | [[MVD Services]] | ||
| |  | | New 3DS only? | ||
| |- | |- | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| Line 427: | Line 427: | ||
| | 0x10300000-0x10400000 | | 0x10300000-0x10400000 | ||
| | | | | ||
| | Mirror of 0x10100000-0x10200000 (faster bus?), CDMA wants these  | | Mirror of 0x10100000-0x10200000 (faster bus?), CDMA wants these addresses | ||
| |-style="border-top: double" | |-style="border-top: double" | ||
| | style="background: green" | Yes | | style="background: green" | Yes | ||
| Line 444: | Line 444: | ||
| |} | |} | ||
| IO registers starting at physical address 0x10200000 are not accessible from the ARM9(which includes all LCD/GPU registers). | IO registers starting at physical address 0x10200000 are not accessible from the ARM9 (which includes all LCD/GPU registers). | ||
| ARM11 kernel virtual address mappings for these registers 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: | ||
| Line 450: | Line 450: | ||
| =0x10012000= | =0x10012000= | ||
| Keys seem to be stored here? Access to this region is disabled once the ARM9 writes 0x2 to [[CONFIG|REG_SYSPROT9]]. Before writing that bit, the ARM9 copies the low u32 for the TWL keydata to +0x100(and high u32 keydata to +0x104 with  | Keys seem to be stored here? Access to this region is disabled once the ARM9 writes 0x2 to [[CONFIG|REG_SYSPROT9]]. Before writing that bit, the ARM9 copies the low u32 for the TWL keydata to +0x100 (and high u32 keydata to +0x104 with the New 3DS). On development units ([[CONFIG|UNITINFO]]!=0) ARM9 uses the first 8-bytes from 0x10012000 for the TWL keydata. | ||
| Originally the above TWL keyinit + region disable was done by Kernel9. However, with the [[New_3DS]] FIRM ARM9 binary this is now done in the [[FIRM]] ARM9 binary loader, which also uses the 0x10012000 region for key generation. | Originally the above TWL keyinit + region disable was done by Kernel9. However, with the [[New_3DS]] FIRM ARM9 binary this is now done in the [[FIRM]] ARM9 binary loader, which also uses the 0x10012000 region for key generation. | ||
Revision as of 04:38, 6 November 2014
Overview
| Old3DS | A9/A11 | Category | Physaddr | Used by | Comments | 
|---|---|---|---|---|---|
| Yes | A9 | CONFIG Registers | 0x10000000 | Boot9, Process9 | |
| Yes | A9 | IRQ Registers | 0x10001000 | Boot9, Process9, Kernel9 | ARM9 Interrupt Masking | 
| Yes | A9 | NDMA Registers | 0x10002000 | Boot9, Process9 | DMA Engine | 
| Yes | A9 | TIMER Registers | 0x10003000 | Boot9, Process9 | |
| Yes | A9 | CTRCARD Registers | 0x10004000 / 0x10005000 | Process9 | |
| Yes | A9 | EMMC Registers | 0x10006000 / 0x10007000 | Boot9, Process9 | 0x10007000 is apparently not used on retail | 
| Yes | A9 | PXI Registers | 0x10008000 | Boot9, Process9 | |
| Yes | A9 | AES Registers | 0x10009000 | Boot9, Process9 | |
| Yes | A9 | SHA Registers | 0x1000A000 | Boot9, Process9 | |
| Yes | A9 | RSA Registers | 0x1000B000 | Boot9, Process9 | |
| Yes | A9 | XDMA Registers | 0x1000C000 | Boot9, Kernel9 | CoreLink™ DMA-330 | 
| Yes | A9 | SPICARD Registers | 0x1000D800 | Process9 | |
| Yes | ? | CONFIG Registers | 0x10010000 | Process9 | |
| Yes | ? | CONFIG Registers | 0x10011000 | Process9 | |
| Yes | ? | ? | 0x10012000 | Kernel9, NewKernel9Loader | Top secret. | 
| Yes | ? | ? | 0x10018000 | TwlProcess9 | Used to setup the ARM7 core for AGB/TWL | 
| Yes | ? | ? | 0x10100000 | ? | ? | 
| Yes | A11/A9 | HASH Registers | 0x10101000 | Filesystem services | |
| Yes | A11/A9 | Camera Registers | 0x10102000 | Camera Services | y2r | 
| Yes | A11/A9 | CSND Registers / DSP | 0x10103000 | TwlBg, Codec Services, CSND Services, DSP Services | Sound Hardware | 
| Yes | A11/A9 | ? | 0x10110000 | ? | ? | 
| Yes | A11/A9 | ? | 0x10111000 | TwlBg | |
| Yes | A11/A9 | Camera Registers | 0x10120000 | Camera Services | |
| Yes | A11/A9 | Camera Registers | 0x10121000 | Camera Services | Mirror of 0x10120000? | 
| Yes | A11/A9 | ? | 0x10122000 | NWM Services | WIFI? | 
| Yes | A11/A9 | ? | 0x10123000 | NWM Services | WIFI? | 
| No | A11/A9 | MVD Registers | 0x10130000 | MVD Services | |
| No | A11/A9 | MVD Registers | 0x10131000 | MVD Services | |
| No | A11/A9 | MVD Registers | 0x10132000 | MVD Services | |
| Yes | A11/A9 | 0x10140000 | Process9, Boot11, Kernel11, TwlBg, DSP Services, NWM Services, SPI Services | Power management | |
| Yes | A11/A9 | PDN Registers / CODEC Registers | 0x10141000 | Process9, Boot11, Kernel11, TwlBg, Codec Services, NWM Services, SPI Services, PDN Services | Power management | 
| Yes | A11/A9 | SPI Registers | 0x10142000 | TwlBg, SPI Services | |
| Yes | A11/A9 | SPI Registers | 0x10143000 | TwlBg | Only used under TWL_FIRM? | 
| Yes | A11/A9 | I2C Registers | 0x10144000 | Boot11, Kernel11, TwlBg, I2C Services | |
| Yes | A11/A9 | CODEC Registers | 0x10145000 | TwlBg, Codec Services | |
| Yes | A11/A9 | HID Registers | 0x10146000 | Boot11, Kernel11, TwlBg, HID Services | See PAD. | 
| Yes | A11/A9 | GPIO Registers | 0x10147000 | Boot11, TwlBg, GPIO Services | |
| Yes | A11/A9 | I2C Registers | 0x10148000 | TwlBg, I2C Services | |
| Yes | A11/A9 | SPI Registers | 0x10160000 | Boot9, TwlBg, SPI Services | |
| Yes | A11/A9 | I2C Registers | 0x10161000 | Boot11, TwlBg, I2C Services | |
| Yes | A11/A9 | MIC Registers | 0x10162000 | MIC Services | |
| Yes | A11/A9 | PXI Registers | 0x10163000 | Boot11, Kernel11, TwlBg, PXI Services | |
| Yes | A11/A9 | NTRCARD Registers | 0x10164000 | Boot9, Process9 | |
| Yes | A11/A9 | MP Registers | 0x10165000 | MP Services | |
| Yes | A11/A9 | MP Registers | 0x10170000 | MP Services | NTR WIFI Registers, see GBATek. | 
| Yes | A11/A9 | MP Registers | 0x10171000 | MP Services | NTR WIFI Registers (mirror) | 
| Yes | A11/A9 | ? | 0x10172000 | NTR WIFI Unused? | |
| Yes | A11/A9 | ? | 0x10173000 | NTR WIFI Unused? | |
| Yes | A11/A9 | MP Registers | 0x10174000 | MP Services | NTR WIFI RAM | 
| Yes | A11/A9 | MP Registers | 0x10175000 | ? | NTR WIFI RAM | 
| Yes | A11/A9 | MP Registers | 0x10176000 | ? | NTR WIFI Registers (mirror) | 
| Yes | A11/A9 | MP Registers | 0x10177000 | ? | NTR WIFI Registers (mirror) | 
| Yes | A11/A9 | MP Registers | 0x10178000 - 0x10180000 | MP Services | NTR WIFI WS1 Region | 
| ? | A11 | CDMA | 0x10200000 | Boot11, Kernel11 | On old 3DS this is CoreLink™ DMA-330. On the New 3DS it is unknown what this is. | 
| Yes | A11 | ? | 0x10202000 | TwlBg, Kernel11, GSP Services | |
| Yes | A11 | DSP | 0x10203000 | DSP Services | |
| ? | A11 | CDMA | 0x10206000 | NewKernel11 | CDMA was moved here on New 3DS. CoreLink™ DMA-330. | 
| ? | A11 | MVD Registers | 0x10207000 | MVD Services | New 3DS only? | 
| Yes | A11 | GPU? | 0x1020F000 | TwlBg, GSP Services | |
| Yes | A11 | MIRROR | 0x10300000-0x10400000 | Mirror of 0x10100000-0x10200000 (faster bus?), CDMA wants these addresses | |
| Yes | A11 | LCD Registers | 0x10400000 | Boot11, Kernel11, GSP Services | |
| Yes | A11 | LCD Registers | 0x10420000 | GSP Services | 
IO registers starting at physical address 0x10200000 are not accessible from the ARM9 (which includes all LCD/GPU registers).
ARM11 kernel virtual address mappings for these registers varies for different builds. For ARM11 user mode applications you have:
physaddr = virtaddr - 0x1EC00000 + 0x10100000
0x10012000
Keys seem to be stored here? Access to this region is disabled once the ARM9 writes 0x2 to REG_SYSPROT9. Before writing that bit, the ARM9 copies the low u32 for the TWL keydata to +0x100 (and high u32 keydata to +0x104 with the New 3DS). On development units (UNITINFO!=0) ARM9 uses the first 8-bytes from 0x10012000 for the TWL keydata.
Originally the above TWL keyinit + region disable was done by Kernel9. However, with the New_3DS FIRM ARM9 binary this is now done in the FIRM ARM9 binary loader, which also uses the 0x10012000 region for key generation.