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