openpower/package/skiboot: Update to skiboot-5.0.1
Alistair Popple (1):
bt: Add a temporary workaround for bmc dropping messages
Benjamin Herrenschmidt (2):
xscom: Remove recursive locking
Add xscom_ok() and lpc_ok() to check XSCOM and LPC usability
Dan Streetman (1):
nx: use gcid + 1 for CI
Jeremy Kerr (1):
prd: Only alter host presentation bits of IPOLL mask
Joel Stanley (2):
hw/ipmi: Fix FW Boot Progress sensor
init: Display message before loading kernel
Vasant Hegde (1):
FSP/CUPD: Fix lock issue
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
diff --git a/openpower/package/skiboot/skiboot-0002-prd-Only-alter-host-presentation-bits-of-IPOLL-mask.patch b/openpower/package/skiboot/skiboot-0002-prd-Only-alter-host-presentation-bits-of-IPOLL-mask.patch
deleted file mode 100644
index 68a4cbd..0000000
--- a/openpower/package/skiboot/skiboot-0002-prd-Only-alter-host-presentation-bits-of-IPOLL-mask.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-diff --git a/hw/prd.c b/hw/prd.c
-index e65ae57..4862213 100644
---- a/hw/prd.c
-+++ b/hw/prd.c
-@@ -226,12 +226,13 @@ static int ipoll_record_and_mask_pending(uint32_t proc)
-
- lock(&ipoll_lock);
- rc = xscom_read(proc, PRD_IPOLL_REG_STATUS, &status);
-+ status &= PRD_IPOLL_MASK;
- if (!rc)
- __ipoll_update_mask(proc, true, status);
- unlock(&ipoll_lock);
-
- if (!rc)
-- ipoll_status[proc] |= (status & PRD_IPOLL_MASK);
-+ ipoll_status[proc] |= status;
-
- return rc;
- }
-@@ -284,7 +285,8 @@ static int prd_msg_handle_init(struct opal_prd_msg *msg)
-
- lock(&ipoll_lock);
- for_each_chip(chip) {
-- __ipoll_update_mask(chip->id, false, msg->init.ipoll);
-+ __ipoll_update_mask(chip->id, false,
-+ msg->init.ipoll & PRD_IPOLL_MASK);
- }
- unlock(&ipoll_lock);
-
-@@ -309,7 +311,7 @@ static int prd_msg_handle_fini(void)
-
- lock(&ipoll_lock);
- for_each_chip(chip) {
-- __ipoll_update_mask(chip->id, true, -1ul);
-+ __ipoll_update_mask(chip->id, true, PRD_IPOLL_MASK);
- }
- unlock(&ipoll_lock);
-
-@@ -345,7 +347,7 @@ void prd_init(void)
- /* mask everything */
- lock(&ipoll_lock);
- for_each_chip(chip) {
-- __ipoll_update_mask(chip->id, true, -1ul);
-+ __ipoll_update_mask(chip->id, true, PRD_IPOLL_MASK);
- }
- unlock(&ipoll_lock);
-
diff --git a/openpower/package/skiboot/skiboot-0003-xscom-remove-recursive-locking.patch b/openpower/package/skiboot/skiboot-0003-xscom-remove-recursive-locking.patch
deleted file mode 100644
index e71e17e..0000000
--- a/openpower/package/skiboot/skiboot-0003-xscom-remove-recursive-locking.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-diff --git a/hw/xscom.c b/hw/xscom.c
-index 6bd71a3..a3533be 100644
---- a/hw/xscom.c
-+++ b/hw/xscom.c
-@@ -342,7 +342,6 @@ static uint32_t xscom_decode_chiplet(uint32_t partid, uint64_t *pcb_addr)
- */
- int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val)
- {
-- bool need_unlock;
- uint32_t gcid;
- int rc;
-
-@@ -360,12 +359,8 @@ int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val)
- return OPAL_PARAMETER;
- }
-
-- /*
-- * HW822317 requires locking. We use a recursive lock as error
-- * conditions might cause printf's which might then try to take
-- * the lock again
-- */
-- need_unlock = lock_recursive(&xscom_lock);
-+ /* HW822317 requires us to do global locking */
-+ lock(&xscom_lock);
-
- /* Direct vs indirect access */
- if (pcb_addr & XSCOM_ADDR_IND_FLAG)
-@@ -374,8 +369,7 @@ int xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val)
- rc = __xscom_read(gcid, pcb_addr & 0x7fffffff, val);
-
- /* Unlock it */
-- if (need_unlock)
-- unlock(&xscom_lock);
-+ unlock(&xscom_lock);
- return rc;
- }
-
-@@ -383,7 +377,6 @@ opal_call(OPAL_XSCOM_READ, xscom_read, 3);
-
- int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val)
- {
-- bool need_unlock;
- uint32_t gcid;
- int rc;
-
-@@ -401,12 +394,8 @@ int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val)
- return OPAL_PARAMETER;
- }
-
-- /*
-- * HW822317 requires locking. We use a recursive lock as error
-- * conditions might cause printf's which might then try to take
-- * the lock again
-- */
-- need_unlock = lock_recursive(&xscom_lock);
-+ /* HW822317 requires us to do global locking */
-+ lock(&xscom_lock);
-
- /* Direct vs indirect access */
- if (pcb_addr & XSCOM_ADDR_IND_FLAG)
-@@ -415,8 +404,7 @@ int xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val)
- rc = __xscom_write(gcid, pcb_addr & 0x7fffffff, val);
-
- /* Unlock it */
-- if (need_unlock)
-- unlock(&xscom_lock);
-+ unlock(&xscom_lock);
- return rc;
- }
- opal_call(OPAL_XSCOM_WRITE, xscom_write, 3);
diff --git a/openpower/package/skiboot/skiboot-0004-Add-xscom_ok-and-lpc_ok-to-check-XSCOM-and-LPC-usability.patch b/openpower/package/skiboot/skiboot-0004-Add-xscom_ok-and-lpc_ok-to-check-XSCOM-and-LPC-usability.patch
deleted file mode 100644
index f19f6aa..0000000
--- a/openpower/package/skiboot/skiboot-0004-Add-xscom_ok-and-lpc_ok-to-check-XSCOM-and-LPC-usability.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-diff --git a/hw/bt.c b/hw/bt.c
-index 7bf1b2f..8bb44cd 100644
---- a/hw/bt.c
-+++ b/hw/bt.c
-@@ -350,7 +350,8 @@ static void print_debug_queue_info(void) {}
-
- static void bt_send_and_unlock(void)
- {
-- if (bt.state == BT_STATE_IDLE && !list_empty(&bt.msgq))
-+ if (lpc_ok() &&
-+ bt.state == BT_STATE_IDLE && !list_empty(&bt.msgq))
- bt_send_msg();
-
- unlock(&bt.lock);
-@@ -361,6 +362,10 @@ static void bt_poll(struct timer *t __unused, void *data __unused)
- {
- uint8_t bt_ctrl;
-
-+ /* Don't do anything if the LPC bus is offline */
-+ if (!lpc_ok())
-+ return;
-+
- /* If we can't get the lock assume someone else will notice
- * the new message and process it. */
- lock(&bt.lock);
-@@ -440,7 +445,9 @@ static int bt_add_ipmi_msg(struct ipmi_msg *ipmi_msg)
-
- void bt_irq(void)
- {
-- uint8_t ireg = bt_inb(BT_INTMASK);
-+ uint8_t ireg;
-+
-+ ireg = bt_inb(BT_INTMASK);
-
- bt.irq_ok = true;
- if (ireg & BT_INTMASK_B2H_IRQ) {
-diff --git a/hw/lpc-uart.c b/hw/lpc-uart.c
-index 2e6114a..7c3190e 100644
---- a/hw/lpc-uart.c
-+++ b/hw/lpc-uart.c
-@@ -135,6 +135,10 @@ static size_t uart_con_write(const char *buf, size_t len)
- {
- size_t written = 0;
-
-+ /* If LPC bus is bad, we just swallow data */
-+ if (!lpc_ok())
-+ return written;
-+
- lock(&uart_lock);
- while(written < len) {
- if (tx_room == 0) {
-diff --git a/hw/lpc.c b/hw/lpc.c
-index 0db674f..b287020 100644
---- a/hw/lpc.c
-+++ b/hw/lpc.c
-@@ -500,3 +500,15 @@ void lpc_used_by_console(void)
- unlock(&chip->lpc_lock);
- }
- }
-+
-+bool lpc_ok(void)
-+{
-+ struct proc_chip *chip;
-+
-+ if (lpc_default_chip_id < 0)
-+ return false;
-+ if (!xscom_ok())
-+ return false;
-+ chip = get_chip(lpc_default_chip_id);
-+ return !lock_held_by_me(&chip->lpc_lock);
-+}
-diff --git a/hw/xscom.c b/hw/xscom.c
-index a3533be..07b9b94 100644
---- a/hw/xscom.c
-+++ b/hw/xscom.c
-@@ -531,3 +531,8 @@ void xscom_used_by_console(void)
- lock(&xscom_lock);
- unlock(&xscom_lock);
- }
-+
-+bool xscom_ok(void)
-+{
-+ return !lock_held_by_me(&xscom_lock);
-+}
-diff --git a/include/lpc.h b/include/lpc.h
-index 5611c54..a0990fd 100644
---- a/include/lpc.h
-+++ b/include/lpc.h
-@@ -27,6 +27,12 @@ extern void lpc_init(void);
- /* Check for a default bus */
- extern bool lpc_present(void);
-
-+/* Return of LPC is currently usable. This can be false if the caller
-+ * currently holds a lock that would make it unsafe, or the LPC bus
-+ * is known to be in some error condition (TBI).
-+ */
-+extern bool lpc_ok(void);
-+
- /* Handle the interrupt from LPC source */
- extern void __attrconst lpc_interrupt(uint32_t chip_id);
-
-diff --git a/include/xscom.h b/include/xscom.h
-index b1ecaf5..a841261 100644
---- a/include/xscom.h
-+++ b/include/xscom.h
-@@ -173,6 +173,11 @@ extern void xscom_init(void);
- /* Mark XSCOM lock as being in console path */
- extern void xscom_used_by_console(void);
-
-+/* Returns true if XSCOM can be used. Typically this returns false if
-+ * the current CPU holds the XSCOM lock (to avoid re-entrancy from error path).
-+ */
-+extern bool xscom_ok(void);
-+
- extern int64_t xscom_read_cfam_chipid(uint32_t partid, uint32_t *chip_id);
-
- #endif /* __XSCOM_H */
diff --git a/openpower/package/skiboot/skiboot.mk b/openpower/package/skiboot/skiboot.mk
index 3b4ad1a..ca508dc 100644
--- a/openpower/package/skiboot/skiboot.mk
+++ b/openpower/package/skiboot/skiboot.mk
@@ -4,7 +4,7 @@
#
################################################################################
-SKIBOOT_VERSION = skiboot-5.0-rc3
+SKIBOOT_VERSION = skiboot-5.0.1
SKIBOOT_SITE = $(call github,open-power,skiboot,$(SKIBOOT_VERSION))
SKIBOOT_INSTALL_IMAGES = YES
SKIBOOT_INSTALL_TARGET = NO