Changes

1,334 bytes added ,  23:48, 10 November 2021
Add device to device modes
Line 1: Line 1: −
3DS NDMA has 8 channels. The first 0x100-bytes of this IO mem is mirrored at 0x10002100, repeated every 0x100-bytes until the end of the 0x1000-byte IO mem.
+
3DS NDMA has 8 channels. The first 0x100-bytes of this IO mem is mirrored at 0x10002100, repeated every 0x100-bytes until the end of the 0x1000-byte IO mem. NDMA can access the Arm9 bootrom, including the protected part before it is locked out.
    
= Registers =
 
= Registers =
Line 13: Line 13:  
|  0x10002000
 
|  0x10002000
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 19: Line 19:  
|  0x10002004 + (n*0x1c)
 
|  0x10002004 + (n*0x1c)
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 25: Line 25:  
|  0x10002008 + (n*0x1c)
 
|  0x10002008 + (n*0x1c)
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 31: Line 31:  
|  0x1000200c + (n*0x1c)
 
|  0x1000200c + (n*0x1c)
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 37: Line 37:  
|  0x10002010 + (n*0x1c)
 
|  0x10002010 + (n*0x1c)
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 43: Line 43:  
|  0x10002014 + (n*0x1c)
 
|  0x10002014 + (n*0x1c)
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 49: Line 49:  
|  0x10002018 + (n*0x1c)
 
|  0x10002018 + (n*0x1c)
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 55: Line 55:  
|  0x1000201C + (n*0x1c)
 
|  0x1000201C + (n*0x1c)
 
|  4
 
|  4
|
+
| Boot9, Kernel9
 
|}
 
|}
    
== NDMA_GLOBAL_CNT ==
 
== NDMA_GLOBAL_CNT ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
BIT
+
Bit
DESCRIPTION
+
Description
 
|-
 
|-
| 0
+
| 0
| Global enable?
+
| Global enable?
 
|-
 
|-
 
|  19-16
 
|  19-16
Line 75: Line 75:  
== NDMA_SRC_ADDR ==
 
== NDMA_SRC_ADDR ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
BIT
+
Bit
DESCRIPTION
+
Description
 
|-
 
|-
 
|  31-0
 
|  31-0
Line 95: Line 95:  
== NDMA_TRANSFER_CNT ==
 
== NDMA_TRANSFER_CNT ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
BIT
+
Bit
DESCRIPTION
+
Description
 
|-
 
|-
 
|  27-0
 
|  27-0
Line 104: Line 104:  
== NDMA_WRITE_CNT ==
 
== NDMA_WRITE_CNT ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
BIT
+
Bit
DESCRIPTION
+
Description
 
|-
 
|-
 
|  23-0
 
|  23-0
Line 113: Line 113:  
== NDMA_BLOCK_CNT ==
 
== NDMA_BLOCK_CNT ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
BIT
+
Bit
DESCRIPTION
+
Description
 
|-
 
|-
 
|  15-0
 
|  15-0
Line 125: Line 125:  
== NDMA_FILL_DATA ==
 
== NDMA_FILL_DATA ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
BIT
+
Bit
DESCRIPTION
+
Description
 
|-
 
|-
 
|  31-0
 
|  31-0
Line 134: Line 134:  
== NDMA_CNT ==
 
== NDMA_CNT ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
BIT
+
Bit
DESCRIPTION
+
Description
 +
|-
 +
|  4-0
 +
|  Device to device startup mode
 
|-
 
|-
 
|  11-10
 
|  11-10
Line 150: Line 153:  
|-
 
|-
 
|  19-16
 
|  19-16
|  Block transfer word size = (1<<x) bytes.
+
|  Block transfer word count = (1<<x) words.
 
|-
 
|-
 
|  27-24
 
|  27-24
Line 168: Line 171:  
|}
 
|}
    +
== Startup modes (4-0) ==
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0
 +
| TIMER0
 +
|-
 +
| 1
 +
| TIMER1
 +
|-
 +
| 2
 +
| TIMER2
 +
|-
 +
| 3
 +
| TIMER3
 +
|-
 +
| 4
 +
| CTRCARD0
 +
|-
 +
| 5
 +
| CTRCARD1
 +
|-
 +
| 6
 +
| SDIO1
 +
|-
 +
| 7
 +
| SDIO3
 +
|-
 +
| 8
 +
| AES in ([[AES_Registers#AES_WRFIFO.2FAES_RDFIFO|WRFIFO]])
 +
|-
 +
| 9
 +
| AES out ([[AES_Registers#AES_WRFIFO.2FAES_RDFIFO|RDFIFO]])
 +
|-
 +
| 10
 +
| SHA in ([[SHA_Registers#SHA_FIFO|INFIFO]])
 +
|-
 +
| 11
 +
| SHA out ([[SHA_Registers#SHA_FIFO|INFIFO]], source data readback mode)
 +
|-
 +
| 12
 +
| NTRCARD
 +
|-
 +
| 13
 +
| ?
 +
|-
 +
| 14
 +
| ?
 +
|-
 +
| 15
 +
| Device to device (subclassed by bits 4-0)
 +
|}
   −
== Startup modes (27-24) ==
+
== Device to device startup modes (4-0) ==
???
+
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0
 +
| CTRCARD0 -> AES
 +
|-
 +
| 1
 +
| CTRCARD1 -> AES
 +
|-
 +
| 2
 +
| AES -> CTRCARD0
 +
|-
 +
| 3
 +
| AES -> CTRCARD1
 +
|-
 +
| 4
 +
| CTRCARD0 -> SHA
 +
|-
 +
| 5
 +
| CTRCARD1 -> SHA
 +
|-
 +
| 6
 +
| SHA -> CTRCARD0
 +
|-
 +
| 7
 +
| SHA -> CTRCARD1
 +
|-
 +
| 8
 +
| SDIO1 -> AES
 +
|-
 +
| 9
 +
| SDIO3 -> AES
 +
|-
 +
| 10
 +
| AES -> SDIO1
 +
|-
 +
| 11
 +
| AES -> SDIO3
 +
|-
 +
| 12
 +
| SDIO1 -> SHA
 +
|-
 +
| 13
 +
| SDIO3 -> SHA
 +
|-
 +
| 14
 +
| SHA -> SDIO1
 +
|-
 +
| 15
 +
| SHA -> SDIO3
 +
|-
 +
| 16
 +
| AES -> SHA
 +
|-
 +
| 17
 +
| SHA -> AES
 +
|}
    
== Block transfers ==
 
== Block transfers ==
516

edits