<p>Marshall Dawson has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28769">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">amd/stoneyridge: Add ASL for D-states on AOAC devices<br><br>Duplicate ASL from AMD's FchCarrizo.asl (available in NDA PI package)<br>that can put AOAC devices into D0 or D3cold. The argument numbers<br>coincide with the AOAC register offsets for the various devices.<br><br>SATA, USB, and SD require additional device configuration. Add a<br>placeholder and mark as todo.<br><br>BUG=b:77602074<br><br>Change-Id: I32426f744a5ebbad9e8d3f2f37c4d214ad6dd3d4<br>Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com><br>---<br>M src/soc/amd/stoneyridge/acpi/sb_pci0_fch.asl<br>1 file changed, 154 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/69/28769/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/soc/amd/stoneyridge/acpi/sb_pci0_fch.asl b/src/soc/amd/stoneyridge/acpi/sb_pci0_fch.asl</span><br><span>index 923c90f..2271d67 100644</span><br><span>--- a/src/soc/amd/stoneyridge/acpi/sb_pci0_fch.asl</span><br><span>+++ b/src/soc/amd/stoneyridge/acpi/sb_pci0_fch.asl</span><br><span>@@ -427,3 +427,157 @@</span><br><span> FC18, 1, /* Force 1.8v */</span><br><span> </span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Arg0:device:</span><br><span style="color: hsl(120, 100%, 40%);">+ * 5=I2C0, 6=I2C1, 7=I2C2, 8=I2C3, 11=UART0, 12=UART1,</span><br><span style="color: hsl(120, 100%, 40%);">+ * 15=SATA, 18=EHCI, 23=xHCI, 24=SD</span><br><span style="color: hsl(120, 100%, 40%);">+ * Arg1:D-state</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+Mutex (FDAS, 0) /* FCH Device AOAC Semophore */</span><br><span style="color: hsl(120, 100%, 40%);">+Method(FDDC, 2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ Acquire(FDAS, 0xffff)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(Arg1, 0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Switch(ToInteger(Arg0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(Package() {5, 15, 24}) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, PG1A)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(Package() {6, 7, 8, 11, 12, 18}) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, PG2_)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* put device into D0 */</span><br><span style="color: hsl(120, 100%, 40%);">+ Switch(ToInteger(Arg0))</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(5) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x00, I0TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, I0PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x7)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(6) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x00, I1TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, I1PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x7)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(7) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x00, I2TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, I2PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I2DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x7)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I2DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(8) {Store(0x00, I3TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, I3PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I3DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x7)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I3DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(11) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x00, U0TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, U0PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x7)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(12) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x00, U1TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(One, U1PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x7)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(15) { STD0()} */ /* SATA */</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(18) { U2D0()} */ /* EHCI */</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(23) { U3D0()} */ /* XHCI */</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(24) { SDD0()} */ /* SD */</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* put device into D3cold */</span><br><span style="color: hsl(120, 100%, 40%);">+ Switch(ToInteger(Arg0))</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(5) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(Zero, I0PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x03, I0TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(6) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(Zero, I1PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x03, I1TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(7) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(Zero, I2PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I2DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I2DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x03, I2TD)}</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(8) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(Zero, I3PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I3DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(I3DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x03, I3TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(11) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(Zero, U0PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U0DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x03, U0TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Case(12) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(Zero, U1PD)</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ while(LNotEqual(Local0,0x0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(U1DS, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(0x03, U1TD)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(15) { STD3()} */ /* SATA */</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(18) { U2D3()} */ /* EHCI */</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(23) { U3D3()} */ /* XHCI */</span><br><span style="color: hsl(120, 100%, 40%);">+/* todo Case(24) { SDD3()} */ /* SD */</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Turn off Power */</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(I0TD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(SATD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(SDTD, 3)) { Store(Zero, PG1A) }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(I1TD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(I2TD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(I3TD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(U0TD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(U1TD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if(LEqual(U2TD, 3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Store(Zero, PG2_)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ Release(FDAS)</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28769">change 28769</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/28769"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I32426f744a5ebbad9e8d3f2f37c4d214ad6dd3d4 </div>
<div style="display:none"> Gerrit-Change-Number: 28769 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Marshall Dawson <marshalldawson3rd@gmail.com> </div>