<p>Richard Spiegel has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/c/coreboot/+/30319">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">drivers/generic/bayhub: Add reset capability<br><br>EMMC reset consumes time, so it's better to start it still at coreboot.<br>To inform the payload that reset was issued, set bit 15 of subsystem ID<br>if successful.<br><br>BUG=b:118680303<br>TEST=Added debug code to analyze its effects. Build and boot grunt.<br><br>Change-Id: Ic3878ee782c8da1a28c6d669dd7eceda7c8cf4e5<br>Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com><br>---<br>M src/drivers/generic/bayhub/bh720.c<br>M src/drivers/generic/bayhub/bh720.h<br>M src/drivers/generic/bayhub/chip.h<br>M src/mainboard/google/kahlee/variants/grunt/devicetree.cb<br>4 files changed, 36 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/19/30319/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/drivers/generic/bayhub/bh720.c b/src/drivers/generic/bayhub/bh720.c</span><br><span>index 2ac5387..0ccd7d5 100644</span><br><span>--- a/src/drivers/generic/bayhub/bh720.c</span><br><span>+++ b/src/drivers/generic/bayhub/bh720.c</span><br><span>@@ -20,6 +20,7 @@</span><br><span> #include <device/path.h></span><br><span> #include <device/pci.h></span><br><span> #include <device/pci_ids.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <device/pci_def.h></span><br><span> #include "chip.h"</span><br><span> #include "bh720.h"</span><br><span> </span><br><span>@@ -30,16 +31,18 @@</span><br><span> static void bh720_init(struct device *dev)</span><br><span> {</span><br><span>     struct drivers_generic_bayhub_config *config = dev->chip_info;</span><br><span style="color: hsl(120, 100%, 40%);">+     u8 *ptr, byte;</span><br><span> </span><br><span>   pci_dev_init(dev);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        pci_write_config32(dev, BH720_PROTECT,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   BH720_PROTECT_OFF | BH720_PROTECT_LOCK_OFF);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    if (config && config->power_saving) {</span><br><span>             /*</span><br><span>            * This procedure for enabling power-saving mode is from the</span><br><span>                  * BayHub BIOS Implementation Guideline document.</span><br><span>             */</span><br><span style="color: hsl(0, 100%, 40%);">-             pci_write_config32(dev, BH720_PROTECT,</span><br><span style="color: hsl(0, 100%, 40%);">-                             BH720_PROTECT_OFF | BH720_PROTECT_LOCK_OFF);</span><br><span>              pci_or_config32(dev, BH720_RTD3_L1, BH720_RTD3_L1_DISABLE_L1);</span><br><span>               pci_or_config32(dev, BH720_LINK_CTRL,</span><br><span>                                BH720_LINK_CTRL_L0_ENABLE |</span><br><span>@@ -48,13 +51,31 @@</span><br><span>            pci_update_config32(dev, BH720_MISC2, ~BH720_MISC2_ASPM_DISABLE,</span><br><span>                                 BH720_MISC2_APSM_CLKREQ_L1 |</span><br><span>                                 BH720_MISC2_APSM_PHY_L1);</span><br><span style="color: hsl(0, 100%, 40%);">-           pci_write_config32(dev, BH720_PROTECT,</span><br><span style="color: hsl(0, 100%, 40%);">-                             BH720_PROTECT_ON | BH720_PROTECT_LOCK_ON);</span><br><span> </span><br><span>            printk(BIOS_INFO, "BayHub BH720: Power-saving enabled (link_ctrl=%#x)\n",</span><br><span>                 pci_read_config32(dev, BH720_LINK_CTRL));</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (config && config->early_reset) {</span><br><span style="color: hsl(120, 100%, 40%);">+               printk(BIOS_INFO, "BayHub BH720: Early reset ");</span><br><span style="color: hsl(120, 100%, 40%);">+            pci_or_config16(dev, PCI_SUBSYSTEM_ID, BH720_EARLY_RESET);</span><br><span style="color: hsl(120, 100%, 40%);">+            ptr = (u8 *)(pci_read_config32(dev, PCI_BASE_ADDRESS_0) +</span><br><span style="color: hsl(120, 100%, 40%);">+                          BH720_SOFTWARE_RESET);</span><br><span style="color: hsl(120, 100%, 40%);">+           byte = *ptr | BH720_RESET_ALL;</span><br><span style="color: hsl(120, 100%, 40%);">+                *ptr = byte;</span><br><span style="color: hsl(120, 100%, 40%);">+          if ((*ptr & BH720_RESET_ALL) == BH720_RESET_ALL)</span><br><span style="color: hsl(120, 100%, 40%);">+                  printk(BIOS_INFO, "success\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             else {</span><br><span style="color: hsl(120, 100%, 40%);">+                        printk(BIOS_INFO, "failed\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                      pci_write_config16(dev, PCI_SUBSYSTEM_ID,</span><br><span style="color: hsl(120, 100%, 40%);">+                             (~BH720_EARLY_RESET &</span><br><span style="color: hsl(120, 100%, 40%);">+                             pci_read_config16(dev, PCI_SUBSYSTEM_ID)));</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%);">+   pci_write_config32(dev, BH720_PROTECT,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   BH720_PROTECT_ON | BH720_PROTECT_LOCK_ON);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      board_bh720(dev);</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/drivers/generic/bayhub/bh720.h b/src/drivers/generic/bayhub/bh720.h</span><br><span>index 3183bf1..eea18f0 100644</span><br><span>--- a/src/drivers/generic/bayhub/bh720.h</span><br><span>+++ b/src/drivers/generic/bayhub/bh720.h</span><br><span>@@ -51,4 +51,12 @@</span><br><span>         BH720_PCR_CSR_EMMC_MODE_SEL     = BIT(22),</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define BH720_EARLY_RESET         BIT(15)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* memory mapped registers */</span><br><span style="color: hsl(120, 100%, 40%);">+#define BH720_SOFTWARE_RESET  0x2f</span><br><span style="color: hsl(120, 100%, 40%);">+#define  BH720_RESET_ALL  0x01</span><br><span style="color: hsl(120, 100%, 40%);">+#define  BH720_RESET_CMD  0x02</span><br><span style="color: hsl(120, 100%, 40%);">+#define  BH720_RESET_DATA 0x04</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void board_bh720(struct device *dev);</span><br><span>diff --git a/src/drivers/generic/bayhub/chip.h b/src/drivers/generic/bayhub/chip.h</span><br><span>index ea1d3bb..ec37f10 100644</span><br><span>--- a/src/drivers/generic/bayhub/chip.h</span><br><span>+++ b/src/drivers/generic/bayhub/chip.h</span><br><span>@@ -21,4 +21,6 @@</span><br><span> struct drivers_generic_bayhub_config {</span><br><span>       /* 1 to enable power-saving mode, 0 to disable */</span><br><span>    int power_saving;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* 1 to enable early reset, 0 to disable */</span><br><span style="color: hsl(120, 100%, 40%);">+   int early_reset;</span><br><span> };</span><br><span>diff --git a/src/mainboard/google/kahlee/variants/grunt/devicetree.cb b/src/mainboard/google/kahlee/variants/grunt/devicetree.cb</span><br><span>index b37e1bf..363cd22 100644</span><br><span>--- a/src/mainboard/google/kahlee/variants/grunt/devicetree.cb</span><br><span>+++ b/src/mainboard/google/kahlee/variants/grunt/devicetree.cb</span><br><span>@@ -71,6 +71,7 @@</span><br><span>              device pci 2.4 on</span><br><span>                    chip drivers/generic/bayhub</span><br><span>                          register "power_saving" = "1"</span><br><span style="color: hsl(120, 100%, 40%);">+                             register "early_reset" = "1"</span><br><span>                             device pci 00.0 on end</span><br><span>                       end</span><br><span>          end #</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/c/coreboot/+/30319">change 30319</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/c/coreboot/+/30319"/><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-Change-Id: Ic3878ee782c8da1a28c6d669dd7eceda7c8cf4e5 </div>
<div style="display:none"> Gerrit-Change-Number: 30319 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Spiegel <richard.spiegel@silverbackltd.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>