PDN Registers: Difference between revisions
Small cleanup |
Cleanup |
||
Line 1: | Line 1: | ||
= | =Register table= | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Old3DS | ! Old3DS | ||
Line 8: | Line 8: | ||
|- | |- | ||
| style="background: green" | Yes | | style="background: green" | Yes | ||
| [[# | | [[#PDN_CNT|PDN_CNT]] | ||
| 0x10141000 | | 0x10141000 | ||
| 2 | | 2 | ||
Line 101: | Line 101: | ||
| [[#PDN_VRAM_CNT|PDN_VRAM_CNT]] | | [[#PDN_VRAM_CNT|PDN_VRAM_CNT]] | ||
| 0x10141204 | | 0x10141204 | ||
| | | 1 | ||
| Boot11, Kernel11, TwlBg | | Boot11, Kernel11, TwlBg | ||
|- | |||
| style="background: green" | Yes | |||
| [[#PDN_LCD_CNT|PDN_LCD_CNT]] | |||
| 0x10141208 | |||
| 1 | |||
| Boot11 | |||
|- | |- | ||
| style="background: green" | Yes | | style="background: green" | Yes | ||
Line 111: | Line 117: | ||
|- | |- | ||
| style="background: green" | Yes | | style="background: green" | Yes | ||
| [[# | | [[#PDN_I2S_CNT|PDN_I2S_CNT]] | ||
| 0x10141220 | | 0x10141220 | ||
| 1 | | 1 | ||
Line 127: | Line 133: | ||
| 1 | | 1 | ||
| Process9, [[PDN Services]] | | Process9, [[PDN Services]] | ||
|- | |||
| style="background: red" | No | |||
| [[#PDN_MVD_CNT|PDN_MVD_CNT]] | |||
| 0x10141240 | |||
| 1 | |||
| | |||
|-style="border-top: double" | |-style="border-top: double" | ||
| style="background: red" | No | | style="background: red" | No | ||
Line 147: | Line 159: | ||
|} | |} | ||
== | =Sleep registers= | ||
==PDN_CNT== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 205: | Line 218: | ||
For each bit, write 1 to acknowledge, and 0 to clear (?). | For each bit, write 1 to acknowledge, and 0 to clear (?). | ||
=Legacy registers= | |||
==LGY_MODE== | ==LGY_MODE== | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 276: | Line 290: | ||
See above | See above | ||
=Clock and reset registers= | |||
==PDN_GPU_CNT== | ==PDN_GPU_CNT== | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 282: | Line 297: | ||
|- | |- | ||
| 0 | | 0 | ||
| GPU | | GPU main block + VRAM + LCD reset. 0 = reset. | ||
|- | |- | ||
| 1 | | 1 | ||
Line 306: | Line 321: | ||
|- | |- | ||
| 16 | | 16 | ||
| Clock enable for all blocks and | | Clock enable for all blocks, VRAM and LCD. 1 = enable. | ||
|} | |} | ||
PDN uses a 12 ARM11 cycle delay to deassert reset. | PDN uses a 12 ARM11 cycle delay to deassert reset. | ||
==PDN_VRAM_CNT== | ==PDN_VRAM_CNT== | ||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Clock. 1 = enable, 0 = disable | |||
|} | |||
This register seems to be unimplemented in released models: while it is used in tandem with PDN_GPU_CNT.bit16 in | This register seems to be unimplemented in released models: while it is used in tandem with PDN_GPU_CNT.bit16 in Boot11 screeninit code, Kernel11 only uses PDN_GPU_CNT.bit16 to power-off VRAM before going to sleep. | ||
==PDN_LCD_CNT== | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Clock. 1 = enable, 0 = disable | |||
|} | |||
This register seems to be unimplemented in released models, only to be used in Boot11, as PDN_GPU_CNT.bit16 also drives the LCD clock. | |||
==PDN_FCRAM_CNT== | ==PDN_FCRAM_CNT== | ||
Line 332: | Line 362: | ||
| Acknowledge clock request. Gets set or unset when toggling bit 1. | | Acknowledge clock request. Gets set or unset when toggling bit 1. | ||
|} | |} | ||
Twl-/AgbBg use this to disable FCRAM for the GBA rom in GBA mode or DSi main RAM in DSi mode. | Twl-/AgbBg use this to disable FCRAM for the GBA rom in GBA mode or DSi main RAM in DSi mode. AgbBg clears bit 0 in reg 0x10201000 before touching this reg. | ||
Kernel11 uses it to put the FCRAM in self-refresh mode (clock disable) before going to sleep. | |||
==PDN_I2S_CNT== | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| I2S1 Clock (maybe?) 1 = enable, 0 = disable | |||
|- | |||
| 1 | |||
| I2S2 Clock. 1 = enable, 0 = disable | |||
|} | |||
I2S1 clock enable bit seems to be unimplemented. Maybe it's because DSP clock enable drives it? | |||
==PDN_CAMERA_CNT== | ==PDN_CAMERA_CNT== | ||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Clock. 1 = enable, 0 = disable | |||
|} | |||
==PDN_DSP_CNT== | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Reset. 0 = reset. | |||
|- | |||
| 1 | |||
| Clock. 1 = enable, 0 = disable | |||
|} | |||
PDN services holds reset for 0x30 Arm11 cycles. | |||
== | ==PDN_MVD_CNT== | ||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Reset. 0 = reset | |||
|} | |||
This doesn't seem to be used by anything, but does have a clear effect on the hardware. | |||
The reset value for this register is 1 (out-of-reset at boot). | |||
=N3DS SoC (LGR) registers= | |||
== PDN_LGR_SOCMODE == | == PDN_LGR_SOCMODE == | ||
This is used for configuring the New3DS ARM11 CPU clock-rate. This register is New3DS-only: reading from here on Old3DS always returns all-zeros even when one tried writing data here prior to the read. | This is used for configuring the New3DS ARM11 CPU clock-rate. This register is New3DS-only: reading from here on Old3DS always returns all-zeros even when one tried writing data here prior to the read. |