Line 3:
Line 3:
| arm = Full
| arm = Full
| base = 0x0d800030, 0x0d800440
| base = 0x0d800030, 0x0d800440
−
| len = 0x10, 0x48
+
| len = 0x14, 0x48
| bits = 32
| bits = 32
}}
}}
−
==IRQ Sources==
+
The Latte chipset contains a dual interrupt controller similar to the one found in the old Hollywood's chipset. This controller is able to route up to 64 interrupt sources to the Starbuck, the Espresso, or both.
−
{| style="border: 1px solid #bbb; border-collapse: collapse; background-color: #eef; padding: 0.2em 0.2em 0.2em 0.2em;" border="1" cellpadding="2"
+
IOSU distinguishes interrupt sources common to Wood and Latte hardware (ALL) and new sources that are exclusive to the Latte (LATTE).
−
|- style="background-color: #ddd;"
+
−
! IRQ
+
== IRQ Sources ==
+
{| class="wikitable"
+
|-
+
! Bit
+
! Group
! Description
! Description
|-
|-
−
| 0 || {{hw|Starbuck Timer}}
+
| 0 || ALL || TMR (Timer)
+
|-
+
| 0 || LATTE || SD2 ({{hw|SD Host Controller}} for eMMC)
+
|-
+
| 1 || ALL || FLA ({{hw|NAND Interface}})
+
|-
+
| 1 || LATTE || SD3 ({{hw|SD Host Controller}} for Toucan)
+
|-
+
| 2 || ALL || AES0 ({{hw|AES Engine}})
|-
|-
−
| 1 || {{hw|NAND Interface}}
+
| 2 || LATTE || EHCI1 ({{hw|USB Host Controller}})
|-
|-
−
| 2 || {{hw|AES Engine}}
+
| 3 || ALL || SHA0 ({{hw|SHA-1 Engine}})
|-
|-
−
| 3 || {{hw|SHA-1 Engine}}
+
| 3 || LATTE || OHCI10 ({{hw|USB Host Controller}})
|-
|-
−
| 4 || {{hw|USB Host Controller}} (EHCI)
+
| 4 || ALL || EHCI0 ({{hw|USB Host Controller}})
|-
|-
−
| 5 || {{hw|USB Host Controller}} (OHCI0)
+
| 4 || LATTE || EHCI2 ({{hw|USB Host Controller}})
|-
|-
−
| 6 || {{hw|USB Host Controller}} (OHCI1)
+
| 5 || ALL || OHCI0 ({{hw|USB Host Controller}})
|-
|-
−
| 7 || {{hw|SD Host Controller}}
+
| 5 || LATTE || OHCI20 ({{hw|USB Host Controller}})
|-
|-
−
| 8 || {{hw|802.11 Wireless}}
+
| 6 || ALL || OHCI1 ({{hw|USB Host Controller}})
|-
|-
−
| 9 || Unknown
+
| 6 || LATTE || SATA ({{hw|SATA Controller}})
|-
|-
−
| 10 || {{hw|Latte GPIOs}} (Espresso)
+
| 7 || ALL || SD0 ({{hw|SD Host Controller}})
|-
|-
−
| 11 || {{hw|Latte GPIOs}} (Starbuck)
+
| 7 || LATTE || Unknown
|-
|-
−
| 12 || Unknown
+
| 8 || ALL || SD1 ({{hw|802.11 Wireless}})
|-
|-
−
| 13 || Undefined
+
| 8 || LATTE || AES1 ({{hw|AES Engine}} for AESS)
|-
|-
−
| 14 || Undefined
+
| 9 || ALL || Reserved
|-
|-
−
| 15 || Undefined
+
| 9 || LATTE || SHA1 ({{hw|SHA-1 Engine}} for SHAS-1)
|-
|-
−
| 16 || Undefined
+
| 10 || ALL || GPIPPC ({{hw|Latte GPIOs}} for Espresso)
|-
|-
−
| 17 || Power button (reset)
+
| 10 || LATTE || Unknown
|-
|-
−
| 18 || {{hw|Drive Interface}} (DI)
+
| 11 || ALL || GPIIOP ({{hw|Latte GPIOs}} for Starbuck)
|-
|-
−
| 19 || Undefined
+
| 11 || LATTE || GPU7_GC
|-
|-
−
| 20 || Unknown
+
| 12 || ALL || DBGINT
|-
|-
−
| 21 || Undefined
+
| 12 || LATTE || IOP2X
|-
|-
−
| 22 || Undefined
+
| 13 || ALL || VIPIWR
|-
|-
−
| 23 || Undefined
+
| 13 || LATTE || PRIMARY_I2C (for Espresso)
|-
|-
−
| 24 || Undefined
+
| 14 || ALL || SIEMU
|-
|-
−
| 25 || Undefined
+
| 14 || LATTE || SECONDARY_I2C (for Starbuck)
|-
|-
−
| 26 || Undefined
+
| 15 || ALL || SYSRSTB
|-
|-
−
| 27 || Undefined
+
| 15 || LATTE || Reserved
|-
|-
−
| 28 || {{hw|AHCI Driver}} (AHCI)
+
| 16 || ALL || VIVSYNC
|-
|-
−
| 29 || Undefined
+
| 16 || LATTE || Reserved
|-
|-
−
| 30 || {{hw|IPC}} (Espresso)
+
| 17 || ALL || Power button
|-
|-
−
| 31 || {{hw|IPC}} (Starbuck)
+
| 17 || LATTE || Reserved
|-
|-
+
| 18 || ALL || DI
+
|-
+
| 18 || LATTE || Reserved
+
|-
+
| 19 || ALL || Reserved
+
|-
+
| 19 || LATTE || Reserved
+
|-
+
| 20 || ALL || EXI
+
|-
+
| 20 || LATTE || Reserved
+
|-
+
| 21 || ALL || Reserved
+
|-
+
| 21 || LATTE || Reserved
+
|-
+
| 22 || ALL || Reserved
+
|-
+
| 22 || LATTE || Reserved
+
|-
+
| 23 || ALL || Reserved
+
|-
+
| 23 || LATTE || Reserved
+
|-
+
| 24 || ALL || Reserved
+
|-
+
| 24 || LATTE || Reserved
+
|-
+
| 25 || ALL || Reserved
+
|-
+
| 25 || LATTE || Reserved
+
|-
+
| 26 || ALL || Reserved
+
|-
+
| 26 || LATTE || IPC_PPC2 (Espresso CPU2)
+
|-
+
| 27 || ALL || Reserved
+
|-
+
| 27 || LATTE || IPC_IOP2 (Starbuck CPU2)
+
|-
+
| 28 || ALL || {{hw|SATA Controller}} (DBGINT only?)
+
|-
+
| 28 || LATTE || IPC_PPC1 (Espresso CPU1)
+
|-
+
| 29 || ALL || Reserved
+
|-
+
| 29 || LATTE || IPC_IOP1 (Starbuck CPU1)
+
|-
+
| 30 || ALL || IPCPPC (Espresso in compat mode)
+
|-
+
| 30 || LATTE || IPC_PPC0 (Espresso CPU0)
+
|-
+
| 31 || ALL || IPCIOP (Starbuck in compat mode)
+
|-
+
| 31 || LATTE || IPC_IOP0 (Starbuck CPU0)
|}
|}
−
==Register List==
+
== Register List ==
−
The Latte IRQ controller has two different register blocks: a global ARM block mapped at the same address as on the Wii, and a new SMP block for each PPC core to use.
+
Each CPU has an independent set of control registers and this set is subdivided into two main blocks: one for Wood and Latte hardware and another exclusive to Latte hardware.
−
===Global ARM block===
+
The subset used for Latte is further subdivided as a SMP block that serves the 3 PPC cores and the ARM core.
−
{{reglist|Global ARM block}}
+
−
{{rla|0x0d800030|32|LT_INTSR_PPC|Triggered IRQs for the PPC}}
+
=== Wood block ===
−
{{rla|0x0d800034|32|LT_INTMR_PPC|Allowed IRQs for the PPC}}
+
{{reglist|Wood block}}
−
{{rla|0x0d800038|32|LT_INTSR_ARM|Triggered IRQs for the ARM}}
+
{{rla|0x0d800030|32|HW_PPCINTSTS|Triggered IRQs for the PPC core in vWii}}
−
{{rla|0x0d80003c|32|LT_INTMR_ARM|Allowed IRQs for the ARM}}
+
{{rla|0x0d800034|32|HW_PPCINTEN|Allowed IRQs for the PPC core in vWii}}
+
{{rla|0x0d800038|32|HW_IOPINTSTS|Triggered IRQs for the ARM core in vWii}}
+
{{rla|0x0d80003c|32|HW_IOPIRQINTEN|Allowed IRQs for the ARM core in vWii}}
+
{{rld|0x0d800040|32|HW_IOPFIQINTEN|Allowed FIQs for the ARM core in vWii}}
+
|}
+
+
=== Latte block ===
+
{{reglist|Latte block - PPC core 0}}
+
{{rla|0x0d800440|32|LT_PPC0INTSTSALL|Triggered IRQs for PPC core 0 (Wood and Latte)}}
+
{{rla|0x0d800444|32|LT_PPC0INTSTSLATTE|Triggered IRQs for PPC core 0 (Latte only)}}
+
{{rla|0x0d800448|32|LT_PPC0INTENALL|Allowed IRQs for PPC core 0 (Wood and Latte)}}
+
{{rla|0x0d80044c|32|LT_PPC0INTENLATTE|Allowed IRQs for PPC core 0 (Latte only)}}
|}
|}
−
===SMP block===
+
{{reglist|Latte block - PPC core 1}}
−
{{reglist|SMP block - PPC core 0}}
+
{{rla|0x0d800450|32|LT_PPC1INTSTSALL|Triggered IRQs for PPC core 1 (Wood and Latte)}}
−
{{rla|0x0d800440|32|LT_INTSR_AHBALL_PPC0|Triggered AHB (all) IRQs for PPC core 0}}
+
{{rla|0x0d800454|32|LT_PPC1INTSTSLATTE|Triggered IRQs for PPC core 1 (Latte only)}}
−
{{rla|0x0d800444|32|LT_INTSR_AHBLT_PPC0|Triggered AHB (Latte) IRQs for PPC core 0}}
+
{{rla|0x0d800458|32|LT_PPC1INTENALL|Allowed IRQs for PPC core 1 (Wood and Latte)}}
−
{{rla|0x0d800448|32|LT_INTMR_AHBALL_PPC0|Allowed AHB (all) IRQs for PPC core 0}}
+
{{rla|0x0d80045c|32|LT_PPC1INTENLATTE|Allowed IRQs for PPC core 1 (Latte only)}}
−
{{rla|0x0d80044c|32|LT_INTMR_AHBLT_PPC0|Allowed AHB (Latte) IRQs for PPC core 0}}
|}
|}
−
{{reglist|SMP block - PPC core 1}}
+
{{reglist|Latte block - PPC core 2}}
−
{{rla|0x0d800450|32|LT_INTSR_AHBALL_PPC1|Triggered AHB (all) IRQs for PPC core 1}}
+
{{rla|0x0d800460|32|LT_PPC2INTSTSALL|Triggered IRQs for PPC core 2 (Wood and Latte)}}
−
{{rla|0x0d800454|32|LT_INTSR_AHBLT_PPC1|Triggered AHB (Latte) IRQs for PPC core 1}}
+
{{rla|0x0d800464|32|LT_PPC2INTSTSLATTE|Triggered IRQs for PPC core 2 (Latte only)}}
−
{{rla|0x0d800458|32|LT_INTMR_AHBALL_PPC1|Allowed AHB (all) IRQs for PPC core 1}}
+
{{rla|0x0d800468|32|LT_PPC2INTENALL|Allowed IRQs for PPC core 2 (Wood and Latte)}}
−
{{rla|0x0d80045c|32|LT_INTMR_AHBLT_PPC1|Allowed AHB (Latte) IRQs for PPC core 1}}
+
{{rla|0x0d80046c|32|LT_PPC2INTENLATTE|Allowed IRQs for PPC core 2 (Latte only)}}
|}
|}
−
{{reglist|SMP block - PPC core 2}}
+
{{reglist|Latte block - ARM core}}
−
{{rla|0x0d800460|32|LT_INTSR_AHBALL_PPC2|Triggered AHB (all) IRQs for PPC core 2}}
+
{{rla|0x0d800470|32|LT_IOPINTSTSALL|Triggered IRQs for ARM core (Wood and Latte)}}
−
{{rla|0x0d800464|32|LT_INTSR_AHBLT_PPC2|Triggered AHB (Latte) IRQs for PPC core 2}}
+
{{rla|0x0d800474|32|LT_IOPINTSTSLATTE|Triggered IRQs for ARM core (Latte only)}}
−
{{rla|0x0d800468|32|LT_INTMR_AHBALL_PPC2|Allowed AHB (all) IRQs for PPC core 2}}
+
{{rla|0x0d800478|32|LT_IOPIRQINTENALL|Allowed IRQs for ARM core (Wood and Latte)}}
−
{{rla|0x0d80046c|32|LT_INTMR_AHBLT_PPC2|Allowed AHB (Latte) IRQs for PPC core 2}}
+
{{rla|0x0d80047c|32|LT_IOPIRQINTENLATTE|Allowed IRQs for ARM core (Latte only)}}
+
{{rld|0x0d800480|32|LT_IOPFIQINTENALL|Allowed FIQs for the ARM core (Wood and Latte)}}
+
{{rld|0x0d800484|32|LT_IOPFIQINTENLATTE|Allowed FIQs for the ARM core (Latte only)}}
|}
|}
+
+
== Register descriptions ==
+
{{regsimple|LT_PPCxINTSTSALL|addr=0x0d800440/0x0d800450/0x0d800460|bits=32|access=R/Z}}
+
This register contains the 32 IRQ flag bits for the Espresso. These are set by the hardware. To clear a flag, write ''1'' to it.
+
----
+
{{regsimple|LT_PPCxINTSTSLATTE|addr=0x0d800444/0x0d800454/0x0d800464|bits=32|access=R/Z}}
+
This register contains the 32 IRQ flag bits for the Espresso. These are set by the hardware. To clear a flag, write ''1'' to it.
+
----
+
{{regsimple|LT_PPCxINTENALL|addr=0x0d800448/0x0d800458/0x0d800468|bits=32|access=R/W}}
+
This register contains the 32 IRQ mask bits for the Espresso. If a bit is set, then the corresponding flag bit will cause [[Hardware/Processor_Interface|Processor Interface]] IRQ #12 to be generated.
+
----
+
{{regsimple|LT_PPCxINTENLATTE|addr=0x0d80044c/0x0d80045c/0x0d80046c|bits=32|access=R/W}}
+
This register contains the 32 IRQ mask bits for the Espresso. If a bit is set, then the corresponding flag bit will cause [[Hardware/Processor_Interface|Processor Interface]] IRQ #12 to be generated.
+
----
+
{{regsimple|LT_IOPINTSTSALL|addr=0x0d800470|bits=32|access=R/Z}}
+
This register contains the 32 IRQ flag bits for the Starbuck. These are set by the hardware. To clear a flag, write ''1'' to it.
+
----
+
{{regsimple|LT_IOPINTSTSLATTE|addr=0x0d800474|bits=32|access=R/Z}}
+
This register contains the 32 IRQ flag bits for the Starbuck. These are set by the hardware. To clear a flag, write ''1'' to it.
+
----
+
{{regsimple|LT_IOPIRQINTENALL|addr=0x0d800478|bits=32|access=R/W}}
+
This register contains the 32 IRQ mask bits for the Starbuck. If a bit is set, then the corresponding flag bit will cause the IOP IRQ to be asserted.
+
----
+
{{regsimple|LT_IOPIRQINTENLATTE|addr=0x0d80047c|bits=32|access=R/W}}
+
This register contains the 32 IRQ mask bits for the Starbuck. If a bit is set, then the corresponding flag bit will cause the IOP IRQ to be asserted.