Changes

114 bytes removed ,  00:28, 27 November 2023
m
Hexkyz moved page Hardware/IPC to Hardware/Latte IPC: Consistency
Line 17: Line 17:  
Note that, since the interrupts can actually route to either or both the Starbuck and Espresso, and since the Starbuck can also access the Espresso's registers, there are ways of abusing these flags for odd purposes.
 
Note that, since the interrupts can actually route to either or both the Starbuck and Espresso, and since the Starbuck can also access the Espresso's registers, there are ways of abusing these flags for odd purposes.
   −
Register LT_IPC_ARMCTRL can only be accessed by the Starbuck. The other three registers can be accessed by both CPUs.
+
Registers HW_IPCIOPCTRL and LT_IPCIOPCTRLx can only be accessed by the Starbuck. The others can be accessed by both CPUs.
    
== Register List ==
 
== Register List ==
 
The Latte IPC engine has two different register blocks: a global block compatible with the old Wii hardware (Wood), and a new SMP block split across the three Wii U's (Latte) PPC cores. Each core's region of the SMP block has registers equivalent to the old global block.
 
The Latte IPC engine has two different register blocks: a global block compatible with the old Wii hardware (Wood), and a new SMP block split across the three Wii U's (Latte) PPC cores. Each core's region of the SMP block has registers equivalent to the old global block.
   −
===Compat block===
+
=== Wood block ===
{{reglist|Global compat block}}
+
{{reglist|Wood block}}
{{rla|0x0d800000|32|LT_IPC_PPCMSG_COMPAT|Espresso data register for vWii}}
+
{{rla|0x0d800000|32|HW_IPCPPCMSG|Espresso data register for vWii}}
{{rla|0x0d800004|32|LT_IPC_PPCCTRL_COMPAT|Espresso flags and control for vWii}}
+
{{rla|0x0d800004|32|HW_IPCPPCCTRL|Espresso flags and control for vWii}}
{{rla|0x0d800008|32|LT_IPC_ARMMSG_COMPAT|Starbuck data register for vWii}}
+
{{rla|0x0d800008|32|HW_IPCIOPMSG|Starbuck data register for vWii}}
{{rla|0x0d80000c|32|LT_IPC_ARMCTRL_COMPAT|Starbuck flags and control for vWii}}
+
{{rla|0x0d80000c|32|HW_IPCIOPCTRL|Starbuck flags and control for vWii}}
 
|}
 
|}
   −
===SMP block===
+
=== Latte block ===
{{reglist|SMP block - PPC core 0}}
+
{{reglist|Latte block - PPC core 0}}
{{rla|0x0d800400|32|LT_IPC_PPC0_PPCMSG|Espresso data register for PPC core 0}}
+
{{rla|0x0d800400|32|LT_IPCPPCMSG0|Espresso data register for PPC core 0}}
{{rla|0x0d800404|32|LT_IPC_PPC0_PPCCTRL|Espresso flags and control for PPC core 0}}
+
{{rla|0x0d800404|32|LT_IPCPPCCTRL0|Espresso flags and control for PPC core 0}}
{{rla|0x0d800408|32|LT_IPC_PPC0_ARMMSG|Starbuck data register for PPC core 0}}
+
{{rla|0x0d800408|32|LT_IPCIOPMSG0|Starbuck data register for PPC core 0}}
{{rla|0x0d80040c|32|LT_IPC_PPC0_ARMCTRL|Starbuck flags and control for PPC core 0}}
+
{{rla|0x0d80040c|32|LT_IPCIOPCTRL0|Starbuck flags and control for PPC core 0}}
 
|}
 
|}
{{reglist|SMP block - PPC core 1}}
+
{{reglist|Latte block - PPC core 1}}
{{rla|0x0d800410|32|LT_IPC_PPC1_PPCMSG|Espresso data register for PPC core 1}}
+
{{rla|0x0d800410|32|LT_IPCPPCMSG1|Espresso data register for PPC core 1}}
{{rla|0x0d800414|32|LT_IPC_PPC1_PPCCTRL|Espresso flags and control for PPC core 1}}
+
{{rla|0x0d800414|32|LT_IPCPPCCTRL1|Espresso flags and control for PPC core 1}}
{{rla|0x0d800418|32|LT_IPC_PPC1_ARMMSG|Starbuck data register for PPC core 1}}
+
{{rla|0x0d800418|32|LT_IPCIOPMSG1|Starbuck data register for PPC core 1}}
{{rla|0x0d80041c|32|LT_IPC_PPC1_ARMCTRL|Starbuck flags and control for PPC core 1}}
+
{{rla|0x0d80041c|32|LT_IPCIOPCTRL1|Starbuck flags and control for PPC core 1}}
 
|}
 
|}
{{reglist|SMP block - PPC core 2}}
+
{{reglist|Latte block - PPC core 2}}
{{rla|0x0d800420|32|LT_IPC_PPC2_PPCMSG|Espresso data register for PPC core 2}}
+
{{rla|0x0d800420|32|LT_IPCPPCMSG2|Espresso data register for PPC core 2}}
{{rla|0x0d800424|32|LT_IPC_PPC2_PPCCTRL|Espresso flags and control for PPC core 2}}
+
{{rla|0x0d800424|32|LT_IPCPPCCTRL2|Espresso flags and control for PPC core 2}}
{{rla|0x0d800428|32|LT_IPC_PPC2_ARMMSG|Starbuck data register for PPC core 2}}
+
{{rla|0x0d800428|32|LT_IPCIOPMSG2|Starbuck data register for PPC core 2}}
{{rla|0x0d80042c|32|LT_IPC_PPC2_ARMCTRL|Starbuck flags and control for PPC core 2}}
+
{{rla|0x0d80042c|32|LT_IPCIOPCTRL2|Starbuck flags and control for PPC core 2}}
 
|}
 
|}
    
== Register Details ==
 
== Register Details ==
{{regsimple | LT_IPC_PPCx_PPCMSG | addr = 0x0d800400/0x0d800410/0x0d800420 | bits = 32 | access = R/W }}
+
{{regsimple | LT_IPCPPCMSGx | addr = 0x0d800400/0x0d800410/0x0d800420 | bits = 32 | access = R/W }}
 
This is a general purpose 32-bit register that can be freely read/written by both CPUs. It is usually set by the Espresso and read by the Starbuck, though this is not a requirement. In IOSU, this register contains a pointer to a [[IOSU#IPC|0x48-byte structure in memory]].
 
This is a general purpose 32-bit register that can be freely read/written by both CPUs. It is usually set by the Espresso and read by the Starbuck, though this is not a requirement. In IOSU, this register contains a pointer to a [[IOSU#IPC|0x48-byte structure in memory]].
 
----
 
----
{{reg32 | LT_IPC_PPCx_PPCCTRL | addr = 0x0d800404/0x0d800414/0x0d800424 | hifields = 1 | lofields = 7 |
+
{{reg32 | LT_IPCPPCCTRLx | addr = 0x0d800404/0x0d800414/0x0d800424 | hifields = 1 | lofields = 7 |
 
|16|
 
|16|
 
|U|
 
|U|
Line 71: Line 71:  
}}
 
}}
 
This register exposes the Espresso side of the IPC control. Flags X1 and X2 may be freely set/cleared. Flags Y1 and Y2 can be read and cleared (by writing one), and can optionally generate IRQ #30.
 
This register exposes the Espresso side of the IPC control. Flags X1 and X2 may be freely set/cleared. Flags Y1 and Y2 can be read and cleared (by writing one), and can optionally generate IRQ #30.
===IOS usage===
+
 
 +
=== IOS usage ===
 
{{regdesc
 
{{regdesc
|X1|Execute command: a new pointer is available ''in LT_IPC_PPCx_PPCCTRL''
+
|X1|Execute command: a new pointer is available in ''LT_IPCPPCCTRLx''
 
|Y2|Command acknowledge
 
|Y2|Command acknowledge
|Y1|Command executed and reply available in ''LT_IPC_PPCx_ARMMSG''
+
|Y1|Command executed and reply available in ''LT_IPCIOPMSGx''
 
|X2|Relaunch
 
|X2|Relaunch
 
}}
 
}}
 
----
 
----
{{regsimple | LT_IPC_PPCx_ARMMSG | addr = 0x0d800408/0x0d800418/0x0d800428 | bits = 32 | access = R/W }}
+
{{regsimple | LT_IPCIOPMSGx | addr = 0x0d800408/0x0d800418/0x0d800428 | bits = 32 | access = R/W }}
 
This is a general purpose 32-bit register that can be freely read/written by both CPUs. It is usually set by the Starbuck and read by the Espresso, though this is not a requirement.
 
This is a general purpose 32-bit register that can be freely read/written by both CPUs. It is usually set by the Starbuck and read by the Espresso, though this is not a requirement.
 
----
 
----
{{reg32 | LT_IPC_PPCx_ARMCTRL | addr = 0x0d80040c/0x0d80041c/0x0d80042c | hifields = 1 | lofields = 7 |
+
{{reg32 | LT_IPCIOPCTRLx | addr = 0x0d80040c/0x0d80041c/0x0d80042c | hifields = 1 | lofields = 7 |
 
|16|
 
|16|
 
|U|
 
|U|