<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>