[coreboot-gerrit] Change in coreboot[master]: siemens/nc_fpga: Set FW_DONE bit before jumping to payload

Werner Zeh (Code Review) gerrit at coreboot.org
Mon Oct 23 16:07:21 CEST 2017


Werner Zeh has uploaded this change for review. ( https://review.coreboot.org/22138


Change subject: siemens/nc_fpga: Set FW_DONE bit before jumping to payload
......................................................................

siemens/nc_fpga: Set FW_DONE bit before jumping to payload

Once coreboot is ready and payload has been loaded a bit inside the NC
FPGA needs to be set to notify this event. As there are NC FPGAs with
different PCI device IDs save the BAR0 address in a global variable once
the driver evaluates this address. It can then be used to access the
register from the boot state machine callback without the need of searching
for all possible PCI devices again.

As this driver is only used at ramstage there is no need of using
CAR_GLOBAL for the global variable. Use a Kconfig switch to make this
feature selectable from mainboard as not every mainboard may have a FPGA
with that capability.

Change-Id: I9cd09e7051edde30d144a7e020b84bb549e9e8b9
Signed-off-by: Werner Zeh <werner.zeh at siemens.com>
---
M src/drivers/siemens/nc_fpga/Kconfig
M src/drivers/siemens/nc_fpga/nc_fpga.c
M src/drivers/siemens/nc_fpga/nc_fpga.h
3 files changed, 28 insertions(+), 0 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/38/22138/1

diff --git a/src/drivers/siemens/nc_fpga/Kconfig b/src/drivers/siemens/nc_fpga/Kconfig
index 832446f..1cd7977 100644
--- a/src/drivers/siemens/nc_fpga/Kconfig
+++ b/src/drivers/siemens/nc_fpga/Kconfig
@@ -1,3 +1,7 @@
 config DRIVER_SIEMENS_NC_FPGA
 	bool
 	default n
+
+config NC_FPGA_NOTIFY_CB_READY
+	bool
+	default n
diff --git a/src/drivers/siemens/nc_fpga/nc_fpga.c b/src/drivers/siemens/nc_fpga/nc_fpga.c
index 28fc6e2..e485b54 100644
--- a/src/drivers/siemens/nc_fpga/nc_fpga.c
+++ b/src/drivers/siemens/nc_fpga/nc_fpga.c
@@ -22,7 +22,10 @@
 #include <string.h>
 #include <delay.h>
 #include <hwilib.h>
+#include <bootstate.h>
 #include "nc_fpga.h"
+
+static void *nc_fpga_bar0 = 0;
 
 #define FPGA_SET_PARAM(src, dst) \
 { \
@@ -111,6 +114,9 @@
 	/* Ensure this is really a NC FPGA by checking magic register. */
 	if (read32(bar0_ptr + NC_MAGIC_OFFSET) != NC_FPGA_MAGIC)
 		return;
+	/* Save BAR0 address so that it can be used on all NC_FPGA devices to
+	   set the FW_DONE bit before jumping to payload. */
+	nc_fpga_bar0 = bar0_ptr;
 	/* Open hwinfo block. */
 	if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
 		return;
@@ -134,6 +140,22 @@
 	}
 }
 
+#if IS_ENABLED(CONFIG_NC_FPGA_NOTIFY_CB_READY)
+/* Set FW_DONE bit in FPGA before jumping to payload. */
+static void set_fw_done(void *unused)
+{
+	uint32_t reg;
+
+	if (nc_fpga_bar0) {
+		reg = read32(nc_fpga_bar0 + NC_DIAG_CTRL_OFFSET);
+		reg |= NC_DIAG_FW_DONE;
+		write32(nc_fpga_bar0 + NC_DIAG_CTRL_OFFSET, reg);
+	}
+}
+
+BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_BOOT, BS_ON_ENTRY, set_fw_done, NULL);
+#endif
+
 static struct device_operations nc_fpga_ops  = {
 	.read_resources   = pci_dev_read_resources,
 	.set_resources    = pci_dev_set_resources,
diff --git a/src/drivers/siemens/nc_fpga/nc_fpga.h b/src/drivers/siemens/nc_fpga/nc_fpga.h
index 7bf087b..8a98627 100644
--- a/src/drivers/siemens/nc_fpga/nc_fpga.h
+++ b/src/drivers/siemens/nc_fpga/nc_fpga.h
@@ -26,6 +26,8 @@
 #define  NC_CAP1_FAN_CTRL		0x080
 #define  NC_CAP1_TEMP_MON		0x100
 #define NC_DSAVE_OFFSET			0x58
+#define NC_DIAG_CTRL_OFFSET		0x60
+#define  NC_DIAG_FW_DONE		0x10000
 #define NC_BL_BRIGHTNESS_OFFSET		0x88
 #define NC_BL_PWM_OFFSET		0x8C
 #define NC_FANMON_CTRL_OFFSET		0x400

-- 
To view, visit https://review.coreboot.org/22138
To unsubscribe, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9cd09e7051edde30d144a7e020b84bb549e9e8b9
Gerrit-Change-Number: 22138
Gerrit-PatchSet: 1
Gerrit-Owner: Werner Zeh <werner.zeh at siemens.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20171023/af2ab991/attachment-0001.html>


More information about the coreboot-gerrit mailing list