<p>Werner Zeh has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/22138">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">siemens/nc_fpga: Set FW_DONE bit before jumping to payload<br><br>Once coreboot is ready and payload has been loaded a bit inside the NC<br>FPGA needs to be set to notify this event. As there are NC FPGAs with<br>different PCI device IDs save the BAR0 address in a global variable once<br>the driver evaluates this address. It can then be used to access the<br>register from the boot state machine callback without the need of searching<br>for all possible PCI devices again.<br><br>As this driver is only used at ramstage there is no need of using<br>CAR_GLOBAL for the global variable. Use a Kconfig switch to make this<br>feature selectable from mainboard as not every mainboard may have a FPGA<br>with that capability.<br><br>Change-Id: I9cd09e7051edde30d144a7e020b84bb549e9e8b9<br>Signed-off-by: Werner Zeh <werner.zeh@siemens.com><br>---<br>M src/drivers/siemens/nc_fpga/Kconfig<br>M src/drivers/siemens/nc_fpga/nc_fpga.c<br>M src/drivers/siemens/nc_fpga/nc_fpga.h<br>3 files changed, 28 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/38/22138/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/drivers/siemens/nc_fpga/Kconfig b/src/drivers/siemens/nc_fpga/Kconfig<br>index 832446f..1cd7977 100644<br>--- a/src/drivers/siemens/nc_fpga/Kconfig<br>+++ b/src/drivers/siemens/nc_fpga/Kconfig<br>@@ -1,3 +1,7 @@<br> config DRIVER_SIEMENS_NC_FPGA<br>   bool<br>  default n<br>+<br>+config NC_FPGA_NOTIFY_CB_READY<br>+        bool<br>+ default n<br>diff --git a/src/drivers/siemens/nc_fpga/nc_fpga.c b/src/drivers/siemens/nc_fpga/nc_fpga.c<br>index 28fc6e2..e485b54 100644<br>--- a/src/drivers/siemens/nc_fpga/nc_fpga.c<br>+++ b/src/drivers/siemens/nc_fpga/nc_fpga.c<br>@@ -22,7 +22,10 @@<br> #include <string.h><br> #include <delay.h><br> #include <hwilib.h><br>+#include <bootstate.h><br> #include "nc_fpga.h"<br>+<br>+static void *nc_fpga_bar0 = 0;<br> <br> #define FPGA_SET_PARAM(src, dst) \<br> { \<br>@@ -111,6 +114,9 @@<br>  /* Ensure this is really a NC FPGA by checking magic register. */<br>     if (read32(bar0_ptr + NC_MAGIC_OFFSET) != NC_FPGA_MAGIC)<br>              return;<br>+      /* Save BAR0 address so that it can be used on all NC_FPGA devices to<br>+           set the FW_DONE bit before jumping to payload. */<br>+ nc_fpga_bar0 = bar0_ptr;<br>      /* Open hwinfo block. */<br>      if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)<br>                 return;<br>@@ -134,6 +140,22 @@<br>         }<br> }<br> <br>+#if IS_ENABLED(CONFIG_NC_FPGA_NOTIFY_CB_READY)<br>+/* Set FW_DONE bit in FPGA before jumping to payload. */<br>+static void set_fw_done(void *unused)<br>+{<br>+     uint32_t reg;<br>+<br>+     if (nc_fpga_bar0) {<br>+          reg = read32(nc_fpga_bar0 + NC_DIAG_CTRL_OFFSET);<br>+            reg |= NC_DIAG_FW_DONE;<br>+              write32(nc_fpga_bar0 + NC_DIAG_CTRL_OFFSET, reg);<br>+    }<br>+}<br>+<br>+BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_BOOT, BS_ON_ENTRY, set_fw_done, NULL);<br>+#endif<br>+<br> static struct device_operations nc_fpga_ops  = {<br>     .read_resources   = pci_dev_read_resources,<br>   .set_resources    = pci_dev_set_resources,<br>diff --git a/src/drivers/siemens/nc_fpga/nc_fpga.h b/src/drivers/siemens/nc_fpga/nc_fpga.h<br>index 7bf087b..8a98627 100644<br>--- a/src/drivers/siemens/nc_fpga/nc_fpga.h<br>+++ b/src/drivers/siemens/nc_fpga/nc_fpga.h<br>@@ -26,6 +26,8 @@<br> #define  NC_CAP1_FAN_CTRL          0x080<br> #define  NC_CAP1_TEMP_MON               0x100<br> #define NC_DSAVE_OFFSET                 0x58<br>+#define NC_DIAG_CTRL_OFFSET              0x60<br>+#define  NC_DIAG_FW_DONE         0x10000<br> #define NC_BL_BRIGHTNESS_OFFSET               0x88<br> #define NC_BL_PWM_OFFSET         0x8C<br> #define NC_FANMON_CTRL_OFFSET            0x400<br></pre><p>To view, visit <a href="https://review.coreboot.org/22138">change 22138</a>. To unsubscribe, 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/22138"/><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: I9cd09e7051edde30d144a7e020b84bb549e9e8b9 </div>
<div style="display:none"> Gerrit-Change-Number: 22138 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Werner Zeh <werner.zeh@siemens.com> </div>