<p>Richard Spiegel has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26334">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">soc/amd/stoneyridge/acpi: Create a GPIO library<br><br>There are some acpigen functionality that have not been implemented. In<br>order to implement them, ACPI GPIO functions to read and write to the<br>control MMIO of a particular pin is needed. So as a preliminary task to<br>implementing acpigen functions, create a library with functions to be<br>accessed by acpigen generated ACPI code.<br><br>BUG=b:79546790<br>TEST=Build grunt<br><br>Change-Id: I21c014b7f2698dd9193dae3113b18ee2a7303bcf<br>Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com><br>---<br>A src/soc/amd/stoneyridge/acpi/gpio_lib.asl<br>M src/soc/amd/stoneyridge/acpi/soc.asl<br>2 files changed, 178 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/34/26334/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/soc/amd/stoneyridge/acpi/gpio_lib.asl b/src/soc/amd/stoneyridge/acpi/gpio_lib.asl</span><br><span>new file mode 100644</span><br><span>index 0000000..979ecd8</span><br><span>--- /dev/null</span><br><span>+++ b/src/soc/amd/stoneyridge/acpi/gpio_lib.asl</span><br><span>@@ -0,0 +1,174 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2018 Advanced Micro Devices, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</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%);">+#include <soc/iomap.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Get pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPAD, 0x1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Arg0 - GPIO pin number */</span><br><span style="color: hsl(120, 100%, 40%);">+  Add ( Multiply (Arg0, 4), 0x1500, Local1)</span><br><span style="color: hsl(120, 100%, 40%);">+     Add ( AMD_SB_ACPI_MMIO_ADDR, Local1, Local1)</span><br><span style="color: hsl(120, 100%, 40%);">+  Return (Local1)</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%);">+/* Read pin control dword */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPRD, 0x1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TEMP, 32</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Return (TEMP)</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%);">+/* Read pin control byte 0 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPR0, 0x1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Return (TMP0)</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%);">+/* Read pin control byte 1 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPR1, 0x1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Return (TMP1)</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%);">+/* Read pin control byte 2 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPR2, 0x1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Return (TMP2)</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%);">+/* Read pin control byte 3 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPR3, 0x1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Return (TMP3)</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%);">+/* Write pin control dword */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPWR, 0x2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg1 - Value for control register */</span><br><span style="color: hsl(120, 100%, 40%);">+       Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TEMP,32</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     Store (Arg1, TEMP)</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%);">+/* Write pin control byte 0 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPW0, 0x2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg1 - Value for control register */</span><br><span style="color: hsl(120, 100%, 40%);">+       Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Store (Arg1, TMP0)</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%);">+/* Write pin control byte 1 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPW1, 0x2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg1 - Value for control register */</span><br><span style="color: hsl(120, 100%, 40%);">+       Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Store (Arg1, TMP1)</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%);">+/* Write pin control byte 2 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPW2, 0x2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg1 - Value for control register */</span><br><span style="color: hsl(120, 100%, 40%);">+       Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Store (Arg1, TMP2)</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%);">+/* Write pin control byte 3 */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (GPW3, 0x2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg0 - GPIO pin control MMIO address */</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Arg1 - Value for control register */</span><br><span style="color: hsl(120, 100%, 40%);">+       Store (Arg0, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (GPDW, SystemMemory, Local0, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+       Field (GPDW, AnyAcc, NoLock, Preserve) {</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP0, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP1, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP2, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              TMP3, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     Store (Arg1, TMP3)</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/soc/amd/stoneyridge/acpi/soc.asl b/src/soc/amd/stoneyridge/acpi/soc.asl</span><br><span>index d777294..9b8773e 100644</span><br><span>--- a/src/soc/amd/stoneyridge/acpi/soc.asl</span><br><span>+++ b/src/soc/amd/stoneyridge/acpi/soc.asl</span><br><span>@@ -26,3 +26,7 @@</span><br><span> </span><br><span> /* Describe the devices in the Southbridge */</span><br><span> #include "sb_fch.asl"</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%);">+/* Add GPIO library */</span><br><span style="color: hsl(120, 100%, 40%);">+#include <gpio_lib.asl></span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26334">change 26334</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/26334"/><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: I21c014b7f2698dd9193dae3113b18ee2a7303bcf </div>
<div style="display:none"> Gerrit-Change-Number: 26334 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Spiegel <richard.spiegel@silverbackltd.com> </div>