Merge pull request #3185 from dcrowell77/explorer_RC1
Use RC1 (v1.0) release of Explorer Firmware
diff --git a/buildroot b/buildroot
index 8959114..d2eb9d6 160000
--- a/buildroot
+++ b/buildroot
@@ -1 +1 @@
-Subproject commit 8959114245a077c283a2467a10af1306b44dbe3c
+Subproject commit d2eb9d62c1f1651c49369fe566c8f989134f9c09
diff --git a/doc/process/KernelTree.rst b/doc/process/KernelTree.rst
index 4ed0bdd..bdf383d 100644
--- a/doc/process/KernelTree.rst
+++ b/doc/process/KernelTree.rst
@@ -1,7 +1,7 @@
op-build Linux Kernel
=====================
-The skiroot/Petitboot kernel is currently based on the 5.1 series.
+The skiroot/Petitboot kernel is currently based on the 5.3 series.
Submitting a patch
------------------
diff --git a/openpower/configs/barreleye_defconfig b/openpower/configs/barreleye_defconfig
index 73f4c1f..c4434f8 100644
--- a/openpower/configs/barreleye_defconfig
+++ b/openpower/configs/barreleye_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/firenze_defconfig b/openpower/configs/firenze_defconfig
index 6d705ec..16371b0 100644
--- a/openpower/configs/firenze_defconfig
+++ b/openpower/configs/firenze_defconfig
@@ -14,7 +14,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/firestone_defconfig b/openpower/configs/firestone_defconfig
index 6d429ae..a4d77df 100644
--- a/openpower/configs/firestone_defconfig
+++ b/openpower/configs/firestone_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/garrison_defconfig b/openpower/configs/garrison_defconfig
index d63d858..5b433bd 100644
--- a/openpower/configs/garrison_defconfig
+++ b/openpower/configs/garrison_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/habanero_defconfig b/openpower/configs/habanero_defconfig
index 3b8aead..4a7c439 100644
--- a/openpower/configs/habanero_defconfig
+++ b/openpower/configs/habanero_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/hostboot/mihawk.config b/openpower/configs/hostboot/mihawk.config
index 4f257c4..1f2eb3b 100755
--- a/openpower/configs/hostboot/mihawk.config
+++ b/openpower/configs/hostboot/mihawk.config
@@ -67,7 +67,10 @@
unset CONSOLE_OUTPUT_TRACE
set CONSOLE_OUTPUT_FFDCDISPLAY
-
set SECUREBOOT
set TPMDD
set TPM_NUVOTON
+
+# Terminate Hostboot when errors occur in manufacturing mode
+# (relies on BMC to not trigger reboot)
+unset HANG_ON_MFG_SRC_TERM
diff --git a/openpower/configs/linux/skiroot_defconfig b/openpower/configs/linux/skiroot_defconfig
index 7c6c1a1..554158a 100644
--- a/openpower/configs/linux/skiroot_defconfig
+++ b/openpower/configs/linux/skiroot_defconfig
@@ -36,6 +36,7 @@
CONFIG_CPU_IDLE=y
CONFIG_HZ_100=y
CONFIG_KEXEC=y
+CONFIG_PRESERVE_FA_DUMP=y
CONFIG_IRQ_ALL_CPUS=y
CONFIG_NUMA=y
CONFIG_PPC_64K_PAGES=y
diff --git a/openpower/configs/mihawk_defconfig b/openpower/configs/mihawk_defconfig
index b6a679f..61f6f62 100644
--- a/openpower/configs/mihawk_defconfig
+++ b/openpower/configs/mihawk_defconfig
@@ -16,14 +16,14 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
BR2_LINUX_KERNEL_ZIMAGE_EPAPR=y
BR2_LINUX_KERNEL_XZ=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
-BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL)/configs/busybox.fragment"
+BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/busybox.fragment"
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_BNX2X=y
@@ -32,6 +32,7 @@
BR2_PACKAGE_IPMITOOL=y
BR2_PACKAGE_IPMITOOL_USB=y
BR2_PACKAGE_MDADM=y
+BR2_PACKAGE_PCIUTILS=y
BR2_PACKAGE_NCURSES_WCHAR=y
BR2_PACKAGE_DROPBEAR=y
# BR2_PACKAGE_DROPBEAR_SERVER is not set
@@ -64,6 +65,7 @@
BR2_BUILD_PNOR_SQUASHFS=y
BR2_PACKAGE_PETITBOOT=y
BR2_PACKAGE_PETITBOOT_MTD=y
+BR2_OCC_GPU_BIN_BUILD=y
BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
BR2_PACKAGE_LOADKEYS=y
BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/nicole_defconfig b/openpower/configs/nicole_defconfig
index 6c50ebc..1c326a6 100644
--- a/openpower/configs/nicole_defconfig
+++ b/openpower/configs/nicole_defconfig
@@ -15,7 +15,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/opal_defconfig b/openpower/configs/opal_defconfig
index e57bfb3..31b41f3 100644
--- a/openpower/configs/opal_defconfig
+++ b/openpower/configs/opal_defconfig
@@ -12,7 +12,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/p8dtu_defconfig b/openpower/configs/p8dtu_defconfig
index 289ded5..fc4b51e 100644
--- a/openpower/configs/p8dtu_defconfig
+++ b/openpower/configs/p8dtu_defconfig
@@ -17,7 +17,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/p9dsu_defconfig b/openpower/configs/p9dsu_defconfig
index 3e5cb96..4b1eaad 100644
--- a/openpower/configs/p9dsu_defconfig
+++ b/openpower/configs/p9dsu_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/palmetto_defconfig b/openpower/configs/palmetto_defconfig
index 386b057..8a29cd3 100644
--- a/openpower/configs/palmetto_defconfig
+++ b/openpower/configs/palmetto_defconfig
@@ -14,7 +14,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/pseries_defconfig b/openpower/configs/pseries_defconfig
index 13c8b77..2b865b8 100644
--- a/openpower/configs/pseries_defconfig
+++ b/openpower/configs/pseries_defconfig
@@ -15,7 +15,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/pseries_skiroot_defconfig"
diff --git a/openpower/configs/romulus_defconfig b/openpower/configs/romulus_defconfig
index 93ba1ae..17a0b08 100644
--- a/openpower/configs/romulus_defconfig
+++ b/openpower/configs/romulus_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/vesnin_defconfig b/openpower/configs/vesnin_defconfig
index 98f926b..faaedee 100644
--- a/openpower/configs/vesnin_defconfig
+++ b/openpower/configs/vesnin_defconfig
@@ -15,7 +15,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/witherspoon_defconfig b/openpower/configs/witherspoon_defconfig
index fb83d2a..ce01345 100644
--- a/openpower/configs/witherspoon_defconfig
+++ b/openpower/configs/witherspoon_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/zaius_defconfig b/openpower/configs/zaius_defconfig
index a0208ea..b923613 100644
--- a/openpower/configs/zaius_defconfig
+++ b/openpower/configs/zaius_defconfig
@@ -16,7 +16,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/configs/zz_defconfig b/openpower/configs/zz_defconfig
index 2a88581..13dd574 100644
--- a/openpower/configs/zz_defconfig
+++ b/openpower/configs/zz_defconfig
@@ -14,7 +14,7 @@
BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.17"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.7"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
diff --git a/openpower/linux/0001-xhci-Reset-controller-on-xhci-shutdown.patch b/openpower/linux/0001-xhci-Reset-controller-on-xhci-shutdown.patch
index da79203..a911fe6 100644
--- a/openpower/linux/0001-xhci-Reset-controller-on-xhci-shutdown.patch
+++ b/openpower/linux/0001-xhci-Reset-controller-on-xhci-shutdown.patch
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Brian King <brking@linux.vnet.ibm.com>
Date: Wed, 25 Oct 2017 10:42:59 +1100
-Subject: [PATCH 1/2] xhci: Reset controller on xhci shutdown
+Subject: [PATCH 1/8] xhci: Reset controller on xhci shutdown
Fixes kexec boot. Without a hard reset, some USB chips will fail to
initialize in a kexec booted kernel.
@@ -14,7 +14,7 @@
1 file changed, 1 insertion(+)
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
-index 3f79f35d0b19..e0f5518e7f2f 100644
+index ee9d2e0fc53a..e2ced6c34620 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -793,6 +793,7 @@ static void xhci_shutdown(struct usb_hcd *hcd)
diff --git a/openpower/linux/0002-powerpc-opal-add-MPIPL-interface-definitions.patch b/openpower/linux/0002-powerpc-opal-add-MPIPL-interface-definitions.patch
new file mode 100644
index 0000000..9fad7d8
--- /dev/null
+++ b/openpower/linux/0002-powerpc-opal-add-MPIPL-interface-definitions.patch
@@ -0,0 +1,125 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Hari Bathini <hbathini@linux.ibm.com>
+Date: Wed, 9 Oct 2019 10:45:19 +0530
+Subject: [PATCH 2/8] powerpc/opal: add MPIPL interface definitions
+
+MPIPL is Memory Preserving IPL supported from POWER9. This enables the
+kernel to reset the system with memory 'preserved'. Also, it supports
+copying memory from a source address to some destination address during
+MPIPL boot. Add MPIPL interface definitions here to leverage these f/w
+features in adding FADump support for PowerNV platform.
+
+This is the backport of upstream commit 6f5f193e84d3 ("powerpc/opal:
+add MPIPL interface definitions").
+
+Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ arch/powerpc/include/asm/opal-api.h | 44 +++++++++++++++++++++-
+ arch/powerpc/include/asm/opal.h | 5 +++
+ arch/powerpc/platforms/powernv/opal-call.c | 3 ++
+ 3 files changed, 51 insertions(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/include/asm/opal-api.h b/arch/powerpc/include/asm/opal-api.h
+index 383242eb0dea..3c39e7f7ba4c 100644
+--- a/arch/powerpc/include/asm/opal-api.h
++++ b/arch/powerpc/include/asm/opal-api.h
+@@ -208,7 +208,10 @@
+ #define OPAL_HANDLE_HMI2 166
+ #define OPAL_NX_COPROC_INIT 167
+ #define OPAL_XIVE_GET_VP_STATE 170
+-#define OPAL_LAST 170
++#define OPAL_MPIPL_UPDATE 173
++#define OPAL_MPIPL_REGISTER_TAG 174
++#define OPAL_MPIPL_QUERY_TAG 175
++#define OPAL_LAST 175
+
+ #define QUIESCE_HOLD 1 /* Spin all calls at entry */
+ #define QUIESCE_REJECT 2 /* Fail all calls with OPAL_BUSY */
+@@ -1059,6 +1062,7 @@ enum {
+ OPAL_REBOOT_NORMAL = 0,
+ OPAL_REBOOT_PLATFORM_ERROR = 1,
+ OPAL_REBOOT_FULL_IPL = 2,
++ OPAL_REBOOT_MPIPL = 3,
+ };
+
+ /* Argument to OPAL_PCI_TCE_KILL */
+@@ -1135,6 +1139,44 @@ enum {
+ #define OPAL_PCI_P2P_LOAD 0x2
+ #define OPAL_PCI_P2P_STORE 0x4
+
++/* MPIPL update operations */
++enum opal_mpipl_ops {
++ OPAL_MPIPL_ADD_RANGE = 0,
++ OPAL_MPIPL_REMOVE_RANGE = 1,
++ OPAL_MPIPL_REMOVE_ALL = 2,
++ OPAL_MPIPL_FREE_PRESERVED_MEMORY = 3,
++};
++
++/* Tag will point to various metadata area. Kernel will
++ * use tag to get metadata value.
++ */
++enum opal_mpipl_tags {
++ OPAL_MPIPL_TAG_CPU = 0,
++ OPAL_MPIPL_TAG_OPAL = 1,
++ OPAL_MPIPL_TAG_KERNEL = 2,
++ OPAL_MPIPL_TAG_BOOT_MEM = 3,
++};
++
++/* Preserved memory details */
++struct opal_mpipl_region {
++ __be64 src;
++ __be64 dest;
++ __be64 size;
++};
++
++/* Structure version */
++#define OPAL_MPIPL_VERSION 0x01
++
++struct opal_mpipl_fadump {
++ u8 version;
++ u8 reserved[7];
++ __be32 crashing_pir; /* OPAL crashing CPU PIR */
++ __be32 cpu_data_version;
++ __be32 cpu_data_size;
++ __be32 region_cnt;
++ struct opal_mpipl_region region[];
++} __packed;
++
+ #endif /* __ASSEMBLY__ */
+
+ #endif /* __OPAL_API_H */
+diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h
+index d5a0807d21db..a0cf8fba4d12 100644
+--- a/arch/powerpc/include/asm/opal.h
++++ b/arch/powerpc/include/asm/opal.h
+@@ -39,6 +39,7 @@ int64_t opal_npu_spa_clear_cache(uint64_t phb_id, uint32_t bdfn,
+ uint64_t PE_handle);
+ int64_t opal_npu_tl_set(uint64_t phb_id, uint32_t bdfn, long cap,
+ uint64_t rate_phys, uint32_t size);
++
+ int64_t opal_console_write(int64_t term_number, __be64 *length,
+ const uint8_t *buffer);
+ int64_t opal_console_read(int64_t term_number, __be64 *length,
+@@ -297,6 +298,10 @@ int opal_sensor_group_clear(u32 group_hndl, int token);
+ int opal_sensor_group_enable(u32 group_hndl, int token, bool enable);
+ int opal_nx_coproc_init(uint32_t chip_id, uint32_t ct);
+
++s64 opal_mpipl_update(enum opal_mpipl_ops op, u64 src, u64 dest, u64 size);
++s64 opal_mpipl_register_tag(enum opal_mpipl_tags tag, u64 addr);
++s64 opal_mpipl_query_tag(enum opal_mpipl_tags tag, u64 *addr);
++
+ s64 opal_signal_system_reset(s32 cpu);
+ s64 opal_quiesce(u64 shutdown_type, s32 cpu);
+
+diff --git a/arch/powerpc/platforms/powernv/opal-call.c b/arch/powerpc/platforms/powernv/opal-call.c
+index dccdc9df5213..a2aa5e433ac8 100644
+--- a/arch/powerpc/platforms/powernv/opal-call.c
++++ b/arch/powerpc/platforms/powernv/opal-call.c
+@@ -287,3 +287,6 @@ OPAL_CALL(opal_pci_set_pbcq_tunnel_bar, OPAL_PCI_SET_PBCQ_TUNNEL_BAR);
+ OPAL_CALL(opal_sensor_read_u64, OPAL_SENSOR_READ_U64);
+ OPAL_CALL(opal_sensor_group_enable, OPAL_SENSOR_GROUP_ENABLE);
+ OPAL_CALL(opal_nx_coproc_init, OPAL_NX_COPROC_INIT);
++OPAL_CALL(opal_mpipl_update, OPAL_MPIPL_UPDATE);
++OPAL_CALL(opal_mpipl_register_tag, OPAL_MPIPL_REGISTER_TAG);
++OPAL_CALL(opal_mpipl_query_tag, OPAL_MPIPL_QUERY_TAG);
diff --git a/openpower/linux/0003-powerpc-fadump-improve-how-crashed-kernel-s-memory-i.patch b/openpower/linux/0003-powerpc-fadump-improve-how-crashed-kernel-s-memory-i.patch
new file mode 100644
index 0000000..eb6750b
--- /dev/null
+++ b/openpower/linux/0003-powerpc-fadump-improve-how-crashed-kernel-s-memory-i.patch
@@ -0,0 +1,105 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Hari Bathini <hbathini@linux.ibm.com>
+Date: Wed, 9 Oct 2019 10:45:26 +0530
+Subject: [PATCH 3/8] powerpc/fadump: improve how crashed kernel's memory is
+ reserved
+
+The size parameter to fadump_reserve_crash_area() function is not needed
+as all the memory above boot memory size must be preserved anyway. Update
+the function by dropping this redundant parameter.
+
+This is the backport of upstream commit b2a815a554a3 ("powerpc/fadump:
+improve how crashed kernel's memory is reserved").
+
+Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ arch/powerpc/kernel/fadump.c | 53 ++++++++++++++++++++----------------
+ 1 file changed, 30 insertions(+), 23 deletions(-)
+
+diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
+index 4eab97292cc2..4dacce3fac72 100644
+--- a/arch/powerpc/kernel/fadump.c
++++ b/arch/powerpc/kernel/fadump.c
+@@ -33,6 +33,9 @@
+ #include <asm/setup.h>
+
+ static struct fw_dump fw_dump;
++
++static void __init fadump_reserve_crash_area(u64 base);
++
+ static struct fadump_mem_struct fdm;
+ static const struct fadump_mem_struct *fdm_active;
+ #ifdef CONFIG_CMA
+@@ -426,26 +429,6 @@ static unsigned long get_fadump_area_size(void)
+ return size;
+ }
+
+-static void __init fadump_reserve_crash_area(unsigned long base,
+- unsigned long size)
+-{
+- struct memblock_region *reg;
+- unsigned long mstart, mend, msize;
+-
+- for_each_memblock(memory, reg) {
+- mstart = max_t(unsigned long, base, reg->base);
+- mend = reg->base + reg->size;
+- mend = min(base + size, mend);
+-
+- if (mstart < mend) {
+- msize = mend - mstart;
+- memblock_reserve(mstart, msize);
+- pr_info("Reserved %ldMB of memory at %#016lx for saving crash dump\n",
+- (msize >> 20), mstart);
+- }
+- }
+-}
+-
+ int __init fadump_reserve_mem(void)
+ {
+ unsigned long base, size, memory_boundary;
+@@ -510,13 +493,13 @@ int __init fadump_reserve_mem(void)
+ #endif
+ /*
+ * If last boot has crashed then reserve all the memory
+- * above boot_memory_size so that we don't touch it until
++ * above boot memory size so that we don't touch it until
+ * dump is written to disk by userspace tool. This memory
+- * will be released for general use once the dump is saved.
++ * can be released for general use by invalidating fadump.
+ */
+ base = fw_dump.boot_memory_size;
+ size = memory_boundary - base;
+- fadump_reserve_crash_area(base, size);
++ fadump_reserve_crash_area(base);
+
+ fw_dump.fadumphdr_addr =
+ be64_to_cpu(fdm_active->rmr_region.destination_address) +
+@@ -1701,3 +1684,27 @@ int __init setup_fadump(void)
+ return 1;
+ }
+ subsys_initcall(setup_fadump);
++
++/* Preserve everything above the base address */
++static void __init fadump_reserve_crash_area(u64 base)
++{
++ struct memblock_region *reg;
++ u64 mstart, msize;
++
++ for_each_memblock(memory, reg) {
++ mstart = reg->base;
++ msize = reg->size;
++
++ if ((mstart + msize) < base)
++ continue;
++
++ if (mstart < base) {
++ msize -= (base - mstart);
++ mstart = base;
++ }
++
++ pr_info("Reserving %lluMB of memory at %#016llx for preserving crash data",
++ (msize >> 20), mstart);
++ memblock_reserve(mstart, msize);
++ }
++}
diff --git a/openpower/linux/0004-powerpc-fadump-add-support-to-preserve-crash-data-on.patch b/openpower/linux/0004-powerpc-fadump-add-support-to-preserve-crash-data-on.patch
new file mode 100644
index 0000000..5a92339
--- /dev/null
+++ b/openpower/linux/0004-powerpc-fadump-add-support-to-preserve-crash-data-on.patch
@@ -0,0 +1,291 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Hari Bathini <hbathini@linux.ibm.com>
+Date: Wed, 9 Oct 2019 10:45:34 +0530
+Subject: [PATCH 4/8] powerpc/fadump: add support to preserve crash data on
+ FADUMP disabled kernel
+
+Add a new kernel config option, CONFIG_PRESERVE_FA_DUMP that ensures
+that crash data, from previously crash'ed kernel, is preserved. This
+helps in cases where FADump is not enabled but the subsequent memory
+preserving kernel boot is likely to process this crash data. One
+typical usecase for this config option is petitboot kernel.
+
+As OPAL allows registering address with it in the first kernel and
+retrieving it after MPIPL, use it to store the top of boot memory.
+A kernel that intends to preserve crash data retrieves it and avoids
+using memory beyond this address.
+
+Move arch_reserved_kernel_pages() function as it is needed for both
+FA_DUMP and PRESERVE_FA_DUMP configurations.
+
+This is the backport of upstream commit bec53196adf4 ("powerpc/fadump:
+add support to preserve crash data on FADUMP disabled kernel").
+
+Also, OPAL FADump metadata definition from upstream commit 742a265accd3
+("powerpc/fadump: register kernel metadata address with opal") is
+backported here for completeness.
+
+Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ arch/powerpc/Kconfig | 9 +++
+ arch/powerpc/include/asm/fadump.h | 17 ++++-
+ arch/powerpc/kernel/Makefile | 4 +-
+ arch/powerpc/kernel/fadump.c | 123 ++++++++++++++++++++++++++++--
+ arch/powerpc/kernel/prom.c | 4 +-
+ 5 files changed, 146 insertions(+), 11 deletions(-)
+
+diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
+index d8dcd8820369..a286c203e732 100644
+--- a/arch/powerpc/Kconfig
++++ b/arch/powerpc/Kconfig
+@@ -579,6 +579,15 @@ config FA_DUMP
+
+ If unsure, say "N"
+
++config PRESERVE_FA_DUMP
++ bool "Preserve Firmware-assisted dump"
++ depends on PPC64 && PPC_POWERNV && !FA_DUMP
++ help
++ On a kernel with FA_DUMP disabled, this option helps to preserve
++ crash data from a previously crash'ed kernel. Useful when the next
++ memory preserving kernel boot would process this crash data.
++ Petitboot kernel is the typical usecase for this option.
++
+ config IRQ_ALL_CPUS
+ bool "Distribute interrupts on all CPUs by default"
+ depends on SMP
+diff --git a/arch/powerpc/include/asm/fadump.h b/arch/powerpc/include/asm/fadump.h
+index 17d9b6acaf63..0401a6ffde0c 100644
+--- a/arch/powerpc/include/asm/fadump.h
++++ b/arch/powerpc/include/asm/fadump.h
+@@ -193,9 +193,6 @@ struct fad_crash_memory_ranges {
+ };
+
+ extern int is_fadump_memory_area(u64 addr, ulong size);
+-extern int early_init_dt_scan_fw_dump(unsigned long node,
+- const char *uname, int depth, void *data);
+-extern int fadump_reserve_mem(void);
+ extern int setup_fadump(void);
+ extern int is_fadump_active(void);
+ extern int should_fadump_crash(void);
+@@ -208,4 +205,18 @@ static inline int should_fadump_crash(void) { return 0; }
+ static inline void crash_fadump(struct pt_regs *regs, const char *str) { }
+ static inline void fadump_cleanup(void) { }
+ #endif
++
++#ifdef CONFIG_PRESERVE_FA_DUMP
++/* Firmware-assisted dump configuration details. */
++struct fw_dump {
++ u64 boot_mem_top;
++ u64 dump_active;
++};
++#endif
++
++#if defined(CONFIG_FA_DUMP) || defined(CONFIG_PRESERVE_FA_DUMP)
++extern int early_init_dt_scan_fw_dump(unsigned long node, const char *uname,
++ int depth, void *data);
++extern int fadump_reserve_mem(void);
++#endif
+ #endif
+diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
+index 56dfa7a2a6f2..ce70e7776cfd 100644
+--- a/arch/powerpc/kernel/Makefile
++++ b/arch/powerpc/kernel/Makefile
+@@ -78,7 +78,9 @@ obj-$(CONFIG_EEH) += eeh.o eeh_pe.o eeh_dev.o eeh_cache.o \
+ eeh_driver.o eeh_event.o eeh_sysfs.o
+ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
+ obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
+-obj-$(CONFIG_FA_DUMP) += fadump.o
++ifneq ($(CONFIG_FA_DUMP)$(CONFIG_PRESERVE_FA_DUMP),)
++obj-y += fadump.o
++endif
+ ifdef CONFIG_PPC32
+ obj-$(CONFIG_E500) += idle_e500.o
+ endif
+diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
+index 4dacce3fac72..1202dadf1d58 100644
+--- a/arch/powerpc/kernel/fadump.c
++++ b/arch/powerpc/kernel/fadump.c
+@@ -24,11 +24,13 @@
+ #include <linux/slab.h>
+ #include <linux/cma.h>
+ #include <linux/hugetlb.h>
++#include <linux/libfdt.h>
+
+ #include <asm/debugfs.h>
+ #include <asm/page.h>
+ #include <asm/prom.h>
+ #include <asm/rtas.h>
++#include <asm/opal.h>
+ #include <asm/fadump.h>
+ #include <asm/setup.h>
+
+@@ -36,6 +38,7 @@ static struct fw_dump fw_dump;
+
+ static void __init fadump_reserve_crash_area(u64 base);
+
++#ifndef CONFIG_PRESERVE_FA_DUMP
+ static struct fadump_mem_struct fdm;
+ static const struct fadump_mem_struct *fdm_active;
+ #ifdef CONFIG_CMA
+@@ -542,11 +545,6 @@ int __init fadump_reserve_mem(void)
+ return 1;
+ }
+
+-unsigned long __init arch_reserved_kernel_pages(void)
+-{
+- return memblock_reserved_size() / PAGE_SIZE;
+-}
+-
+ /* Look for fadump= cmdline option. */
+ static int __init early_fadump_param(char *p)
+ {
+@@ -1684,6 +1682,116 @@ int __init setup_fadump(void)
+ return 1;
+ }
+ subsys_initcall(setup_fadump);
++#else /* !CONFIG_PRESERVE_FA_DUMP */
++
++/* Maximum number of memory regions kernel supports */
++#define OPAL_FADUMP_MAX_MEM_REGS 128
++
++/*
++ * OPAL FADump kernel metadata
++ *
++ * The address of this structure will be registered with f/w for retrieving
++ * and processing during crash dump.
++ */
++struct opal_fadump_mem_struct {
++ u8 version;
++ u8 reserved[3];
++ u16 region_cnt; /* number of regions */
++ u16 registered_regions; /* Regions registered for MPIPL */
++ u64 fadumphdr_addr;
++ struct opal_mpipl_region rgn[OPAL_FADUMP_MAX_MEM_REGS];
++} __packed;
++
++
++/*
++ * When dump is active but PRESERVE_FA_DUMP is enabled on the kernel,
++ * ensure crash data is preserved in hope that the subsequent memory
++ * preserving kernel boot is going to process this crash data.
++ */
++void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
++{
++ const struct opal_fadump_mem_struct *opal_fdm_active;
++ const __be32 *prop;
++ unsigned long dn;
++ u64 addr = 0;
++ s64 ret;
++
++ dn = of_get_flat_dt_subnode_by_name(node, "dump");
++ if (dn == -FDT_ERR_NOTFOUND)
++ return;
++
++ /*
++ * Check if dump has been initiated on last reboot.
++ */
++ prop = of_get_flat_dt_prop(dn, "mpipl-boot", NULL);
++ if (!prop)
++ return;
++
++ ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_KERNEL, &addr);
++ if ((ret != OPAL_SUCCESS) || !addr) {
++ pr_debug("Could not get Kernel metadata (%lld)\n", ret);
++ return;
++ }
++
++ /*
++ * Preserve memory only if kernel memory regions are registered
++ * with f/w for MPIPL.
++ */
++ addr = be64_to_cpu(addr);
++ pr_debug("Kernel metadata addr: %llx\n", addr);
++ opal_fdm_active = (void *)addr;
++ if (opal_fdm_active->registered_regions == 0)
++ return;
++
++ ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_BOOT_MEM, &addr);
++ if ((ret != OPAL_SUCCESS) || !addr) {
++ pr_err("Failed to get boot memory tag (%lld)\n", ret);
++ return;
++ }
++
++ /*
++ * Memory below this address can be used for booting a
++ * capture kernel or petitboot kernel. Preserve everything
++ * above this address for processing crashdump.
++ */
++ fadump_conf->boot_mem_top = be64_to_cpu(addr);
++ pr_debug("Preserve everything above %llx\n", fadump_conf->boot_mem_top);
++
++ pr_info("Firmware-assisted dump is active.\n");
++ fadump_conf->dump_active = 1;
++}
++
++/* Scan the Firmware Assisted dump configuration details. */
++int __init early_init_dt_scan_fw_dump(unsigned long node, const char *uname,
++ int depth, void *data)
++{
++ if ((depth != 1) || (strcmp(uname, "ibm,opal") != 0))
++ return 0;
++
++ opal_fadump_dt_scan(&fw_dump, node);
++ return 1;
++}
++
++/*
++ * When dump is active but PRESERVE_FA_DUMP is enabled on the kernel,
++ * preserve crash data. The subsequent memory preserving kernel boot
++ * is likely to process this crash data.
++ */
++int __init fadump_reserve_mem(void)
++{
++ if (fw_dump.dump_active) {
++ /*
++ * If last boot has crashed then reserve all the memory
++ * above boot memory to preserve crash data.
++ */
++ pr_info("Preserving crash data for processing in next boot.\n");
++ fadump_reserve_crash_area(fw_dump.boot_mem_top);
++ } else
++ pr_debug("FADump-aware kernel..\n");
++
++ return 1;
++}
++#endif /* CONFIG_PRESERVE_FA_DUMP */
+
+ /* Preserve everything above the base address */
+ static void __init fadump_reserve_crash_area(u64 base)
+@@ -1708,3 +1816,8 @@ static void __init fadump_reserve_crash_area(u64 base)
+ memblock_reserve(mstart, msize);
+ }
+ }
++
++unsigned long __init arch_reserved_kernel_pages(void)
++{
++ return memblock_reserved_size() / PAGE_SIZE;
++}
+diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
+index 7159e791a70d..9c3861bda216 100644
+--- a/arch/powerpc/kernel/prom.c
++++ b/arch/powerpc/kernel/prom.c
+@@ -704,7 +704,7 @@ void __init early_init_devtree(void *params)
+ of_scan_flat_dt(early_init_dt_scan_opal, NULL);
+ #endif
+
+-#ifdef CONFIG_FA_DUMP
++#if defined(CONFIG_FA_DUMP) || defined(CONFIG_PRESERVE_FA_DUMP)
+ /* scan tree to see if dump is active during last boot */
+ of_scan_flat_dt(early_init_dt_scan_fw_dump, NULL);
+ #endif
+@@ -731,7 +731,7 @@ void __init early_init_devtree(void *params)
+ if (PHYSICAL_START > MEMORY_START)
+ memblock_reserve(MEMORY_START, 0x8000);
+ reserve_kdump_trampoline();
+-#ifdef CONFIG_FA_DUMP
++#if defined(CONFIG_FA_DUMP) || defined(CONFIG_PRESERVE_FA_DUMP)
+ /*
+ * If we fail to reserve memory for firmware-assisted dump then
+ * fallback to kexec based kdump.
diff --git a/openpower/linux/0005-powerpc-configs-add-FADump-support-in-petitboot-kern.patch b/openpower/linux/0005-powerpc-configs-add-FADump-support-in-petitboot-kern.patch
new file mode 100644
index 0000000..2983711
--- /dev/null
+++ b/openpower/linux/0005-powerpc-configs-add-FADump-support-in-petitboot-kern.patch
@@ -0,0 +1,27 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Hari Bathini <hbathini@linux.ibm.com>
+Date: Wed, 9 Oct 2019 10:45:41 +0530
+Subject: [PATCH 5/8] powerpc/configs: add FADump support in petitboot kernel
+
+FADump is supported on PowerNV platform. To fulfill this support, the
+petitboot kernel must be FADump aware. Enable config PRESERVE_FA_DUMP
+to make the petitboot kernel FADump aware.
+
+Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ arch/powerpc/configs/skiroot_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/powerpc/configs/skiroot_defconfig b/arch/powerpc/configs/skiroot_defconfig
+index 557b530b2f70..7a1f0cc62c67 100644
+--- a/arch/powerpc/configs/skiroot_defconfig
++++ b/arch/powerpc/configs/skiroot_defconfig
+@@ -46,6 +46,7 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+ CONFIG_CPU_IDLE=y
+ CONFIG_HZ_100=y
+ CONFIG_KEXEC=y
++CONFIG_PRESERVE_FA_DUMP=y
+ CONFIG_IRQ_ALL_CPUS=y
+ CONFIG_NUMA=y
+ # CONFIG_COMPACTION is not set
diff --git a/openpower/linux/0006-scsi-lpfc-Fix-oops-when-fewer-hdwqs-than-cpus.patch b/openpower/linux/0006-scsi-lpfc-Fix-oops-when-fewer-hdwqs-than-cpus.patch
new file mode 100644
index 0000000..9238a0a
--- /dev/null
+++ b/openpower/linux/0006-scsi-lpfc-Fix-oops-when-fewer-hdwqs-than-cpus.patch
@@ -0,0 +1,239 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: James Smart <jsmart2021@gmail.com>
+Date: Wed, 14 Aug 2019 16:56:43 -0700
+Subject: [PATCH 6/8] scsi: lpfc: Fix oops when fewer hdwqs than cpus
+
+When tearing down the adapter for a reset, online/offline, or driver
+unload, the queue free routine would hit a GPF oops. This only occurs on
+conditions where the number of hardware queues created is fewer than the
+number of cpus in the system. In this condition cpus share a hardware
+queue. And of course, it's the 2nd cpu that shares a hardware that
+attempted to free it a second time and hit the oops.
+
+Fix by reworking the cpu to hardware queue mapping such that:
+Assignment of hardware queues to cpus occur in two passes:
+first pass: is first time assignment of a hardware queue to a cpu.
+ This will set the LPFC_CPU_FIRST_IRQ flag for the cpu.
+second pass: for cpus that did not get a hardware queue they will
+ be assigned one from a primary cpu (one set in first pass).
+
+Deletion of hardware queues is driven by cpu itteration, and queues
+will only be deleted if the LPFC_CPU_FIRST_IRQ flag is set.
+
+Also contains a few small cleanup fixes and a little better logging.
+
+Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
+Signed-off-by: James Smart <jsmart2021@gmail.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+(cherry picked from commit 3ad348d94452d6ab3aa0316105fb9f34f8ed3140)
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ drivers/scsi/lpfc/lpfc_init.c | 144 +++++++++++++++++++++-------------
+ 1 file changed, 89 insertions(+), 55 deletions(-)
+
+diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
+index 1ac98becb5ba..a5b515fdda2e 100644
+--- a/drivers/scsi/lpfc/lpfc_init.c
++++ b/drivers/scsi/lpfc/lpfc_init.c
+@@ -8864,7 +8864,7 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba)
+ }
+ qdesc->qe_valid = 1;
+ qdesc->hdwq = cpup->hdwq;
+- qdesc->chann = cpu; /* First CPU this EQ is affinitised to */
++ qdesc->chann = cpu; /* First CPU this EQ is affinitized to */
+ qdesc->last_cpu = qdesc->chann;
+
+ /* Save the allocated EQ in the Hardware Queue */
+@@ -10711,7 +10711,7 @@ lpfc_find_hyper(struct lpfc_hba *phba, int cpu,
+ static void
+ lpfc_cpu_affinity_check(struct lpfc_hba *phba, int vectors)
+ {
+- int i, cpu, idx, new_cpu, start_cpu, first_cpu;
++ int i, cpu, idx, next_idx, new_cpu, start_cpu, first_cpu;
+ int max_phys_id, min_phys_id;
+ int max_core_id, min_core_id;
+ struct lpfc_vector_map_info *cpup;
+@@ -10753,8 +10753,8 @@ lpfc_cpu_affinity_check(struct lpfc_hba *phba, int vectors)
+ #endif
+
+ lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
+- "3328 CPU physid %d coreid %d\n",
+- cpup->phys_id, cpup->core_id);
++ "3328 CPU %d physid %d coreid %d flag x%x\n",
++ cpu, cpup->phys_id, cpup->core_id, cpup->flag);
+
+ if (cpup->phys_id > max_phys_id)
+ max_phys_id = cpup->phys_id;
+@@ -10812,17 +10812,17 @@ lpfc_cpu_affinity_check(struct lpfc_hba *phba, int vectors)
+ cpup->eq = idx;
+ cpup->irq = pci_irq_vector(phba->pcidev, idx);
+
+- lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
+- "3336 Set Affinity: CPU %d "
+- "irq %d eq %d\n",
+- cpu, cpup->irq, cpup->eq);
+-
+ /* If this is the first CPU thats assigned to this
+ * vector, set LPFC_CPU_FIRST_IRQ.
+ */
+ if (!i)
+ cpup->flag |= LPFC_CPU_FIRST_IRQ;
+ i++;
++
++ lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
++ "3336 Set Affinity: CPU %d "
++ "irq %d eq %d flag x%x\n",
++ cpu, cpup->irq, cpup->eq, cpup->flag);
+ }
+ }
+
+@@ -10936,69 +10936,103 @@ lpfc_cpu_affinity_check(struct lpfc_hba *phba, int vectors)
+ }
+ }
+
++ /* Assign hdwq indices that are unique across all cpus in the map
++ * that are also FIRST_CPUs.
++ */
++ idx = 0;
++ for_each_present_cpu(cpu) {
++ cpup = &phba->sli4_hba.cpu_map[cpu];
++
++ /* Only FIRST IRQs get a hdwq index assignment. */
++ if (!(cpup->flag & LPFC_CPU_FIRST_IRQ))
++ continue;
++
++ /* 1 to 1, the first LPFC_CPU_FIRST_IRQ cpus to a unique hdwq */
++ cpup->hdwq = idx;
++ idx++;
++ lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
++ "3333 Set Affinity: CPU %d (phys %d core %d): "
++ "hdwq %d eq %d irq %d flg x%x\n",
++ cpu, cpup->phys_id, cpup->core_id,
++ cpup->hdwq, cpup->eq, cpup->irq, cpup->flag);
++ }
+ /* Finally we need to associate a hdwq with each cpu_map entry
+ * This will be 1 to 1 - hdwq to cpu, unless there are less
+ * hardware queues then CPUs. For that case we will just round-robin
+ * the available hardware queues as they get assigned to CPUs.
++ * The next_idx is the idx from the FIRST_CPU loop above to account
++ * for irq_chann < hdwq. The idx is used for round-robin assignments
++ * and needs to start at 0.
+ */
+- idx = 0;
++ next_idx = idx;
+ start_cpu = 0;
++ idx = 0;
+ for_each_present_cpu(cpu) {
+ cpup = &phba->sli4_hba.cpu_map[cpu];
+- if (idx >= phba->cfg_hdw_queue) {
+- /* We need to reuse a Hardware Queue for another CPU,
+- * so be smart about it and pick one that has its
+- * IRQ/EQ mapped to the same phys_id (CPU package).
+- * and core_id.
+- */
+- new_cpu = start_cpu;
+- for (i = 0; i < phba->sli4_hba.num_present_cpu; i++) {
+- new_cpup = &phba->sli4_hba.cpu_map[new_cpu];
+- if ((new_cpup->hdwq != LPFC_VECTOR_MAP_EMPTY) &&
+- (new_cpup->phys_id == cpup->phys_id) &&
+- (new_cpup->core_id == cpup->core_id))
+- goto found_hdwq;
+- new_cpu = cpumask_next(
+- new_cpu, cpu_present_mask);
+- if (new_cpu == nr_cpumask_bits)
+- new_cpu = first_cpu;
+- }
+
+- /* If we can't match both phys_id and core_id,
+- * settle for just a phys_id match.
+- */
+- new_cpu = start_cpu;
+- for (i = 0; i < phba->sli4_hba.num_present_cpu; i++) {
+- new_cpup = &phba->sli4_hba.cpu_map[new_cpu];
+- if ((new_cpup->hdwq != LPFC_VECTOR_MAP_EMPTY) &&
+- (new_cpup->phys_id == cpup->phys_id))
+- goto found_hdwq;
+- new_cpu = cpumask_next(
+- new_cpu, cpu_present_mask);
+- if (new_cpu == nr_cpumask_bits)
+- new_cpu = first_cpu;
++ /* FIRST cpus are already mapped. */
++ if (cpup->flag & LPFC_CPU_FIRST_IRQ)
++ continue;
++
++ /* If the cfg_irq_chann < cfg_hdw_queue, set the hdwq
++ * of the unassigned cpus to the next idx so that all
++ * hdw queues are fully utilized.
++ */
++ if (next_idx < phba->cfg_hdw_queue) {
++ cpup->hdwq = next_idx;
++ next_idx++;
++ continue;
++ }
++
++ /* Not a First CPU and all hdw_queues are used. Reuse a
++ * Hardware Queue for another CPU, so be smart about it
++ * and pick one that has its IRQ/EQ mapped to the same phys_id
++ * (CPU package) and core_id.
++ */
++ new_cpu = start_cpu;
++ for (i = 0; i < phba->sli4_hba.num_present_cpu; i++) {
++ new_cpup = &phba->sli4_hba.cpu_map[new_cpu];
++ if (new_cpup->hdwq != LPFC_VECTOR_MAP_EMPTY &&
++ new_cpup->phys_id == cpup->phys_id &&
++ new_cpup->core_id == cpup->core_id) {
++ goto found_hdwq;
+ }
++ new_cpu = cpumask_next(new_cpu, cpu_present_mask);
++ if (new_cpu == nr_cpumask_bits)
++ new_cpu = first_cpu;
++ }
+
+- /* Otherwise just round robin on cfg_hdw_queue */
+- cpup->hdwq = idx % phba->cfg_hdw_queue;
+- goto logit;
+-found_hdwq:
+- /* We found an available entry, copy the IRQ info */
+- start_cpu = cpumask_next(new_cpu, cpu_present_mask);
+- if (start_cpu == nr_cpumask_bits)
+- start_cpu = first_cpu;
+- cpup->hdwq = new_cpup->hdwq;
+- } else {
+- /* 1 to 1, CPU to hdwq */
+- cpup->hdwq = idx;
++ /* If we can't match both phys_id and core_id,
++ * settle for just a phys_id match.
++ */
++ new_cpu = start_cpu;
++ for (i = 0; i < phba->sli4_hba.num_present_cpu; i++) {
++ new_cpup = &phba->sli4_hba.cpu_map[new_cpu];
++ if (new_cpup->hdwq != LPFC_VECTOR_MAP_EMPTY &&
++ new_cpup->phys_id == cpup->phys_id)
++ goto found_hdwq;
++
++ new_cpu = cpumask_next(new_cpu, cpu_present_mask);
++ if (new_cpu == nr_cpumask_bits)
++ new_cpu = first_cpu;
+ }
+-logit:
++
++ /* Otherwise just round robin on cfg_hdw_queue */
++ cpup->hdwq = idx % phba->cfg_hdw_queue;
++ idx++;
++ goto logit;
++ found_hdwq:
++ /* We found an available entry, copy the IRQ info */
++ start_cpu = cpumask_next(new_cpu, cpu_present_mask);
++ if (start_cpu == nr_cpumask_bits)
++ start_cpu = first_cpu;
++ cpup->hdwq = new_cpup->hdwq;
++ logit:
+ lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
+ "3335 Set Affinity: CPU %d (phys %d core %d): "
+ "hdwq %d eq %d irq %d flg x%x\n",
+ cpu, cpup->phys_id, cpup->core_id,
+ cpup->hdwq, cpup->eq, cpup->irq, cpup->flag);
+- idx++;
+ }
+
+ /* The cpu_map array will be used later during initialization
diff --git a/openpower/linux/0007-scsi-lpfc-Limit-xri-count-for-kdump-environment.patch b/openpower/linux/0007-scsi-lpfc-Limit-xri-count-for-kdump-environment.patch
new file mode 100644
index 0000000..71ae797
--- /dev/null
+++ b/openpower/linux/0007-scsi-lpfc-Limit-xri-count-for-kdump-environment.patch
@@ -0,0 +1,53 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: James Smart <jsmart2021@gmail.com>
+Date: Wed, 14 Aug 2019 16:56:31 -0700
+Subject: [PATCH 7/8] scsi: lpfc: Limit xri count for kdump environment
+
+scsi-mq operation inherently performs pre-allocation of resources for
+blk-mq request queues. Even though the kdump environment reduces the
+configuration to a single CPU, thus 1 hardware queue, which helps
+significantly, the resources are still rather large due to the per request
+allocations. blk-mq pre-allocations can be over 4KB per request. With
+adapter can_queue values in the 4k or 8k range, this can easily be 32MBs
+before any other driver memory is factored in. Driver SGL DMA buffer
+allocation can be up to 8KB per request as well adding an additional
+64MB. Totals are well over 100MB for a single shost. Given kdump memory
+auto-sizing utilities don't accommodate this amount of memory well, it's
+very possible for kdump to fail due to lack of memory.
+
+Fix by having the driver recognize that it is booting within a kdump
+context and reduce the number of requests it will support to a more
+reasonable value.
+
+Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
+Signed-off-by: James Smart <jsmart2021@gmail.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+(cherry picked from commit 31f06d2e73726160645f8d9976a0b3f42e136da7)
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ drivers/scsi/lpfc/lpfc_init.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
+index a5b515fdda2e..7edbba7debc2 100644
+--- a/drivers/scsi/lpfc/lpfc_init.c
++++ b/drivers/scsi/lpfc/lpfc_init.c
+@@ -39,6 +39,7 @@
+ #include <linux/msi.h>
+ #include <linux/irq.h>
+ #include <linux/bitops.h>
++#include <linux/crash_dump.h>
+
+ #include <scsi/scsi.h>
+ #include <scsi/scsi_device.h>
+@@ -8309,6 +8310,10 @@ lpfc_sli4_read_config(struct lpfc_hba *phba)
+ bf_get(lpfc_mbx_rd_conf_extnts_inuse, rd_config);
+ phba->sli4_hba.max_cfg_param.max_xri =
+ bf_get(lpfc_mbx_rd_conf_xri_count, rd_config);
++ /* Reduce resource usage in kdump environment */
++ if (is_kdump_kernel() &&
++ phba->sli4_hba.max_cfg_param.max_xri > 512)
++ phba->sli4_hba.max_cfg_param.max_xri = 512;
+ phba->sli4_hba.max_cfg_param.xri_base =
+ bf_get(lpfc_mbx_rd_conf_xri_base, rd_config);
+ phba->sli4_hba.max_cfg_param.max_vpi =
diff --git a/openpower/linux/0002-Release-OpenPower-kernel.patch b/openpower/linux/0008-Release-OpenPower-kernel.patch
similarity index 79%
rename from openpower/linux/0002-Release-OpenPower-kernel.patch
rename to openpower/linux/0008-Release-OpenPower-kernel.patch
index b5f44c8..1a1240f 100644
--- a/openpower/linux/0002-Release-OpenPower-kernel.patch
+++ b/openpower/linux/0008-Release-OpenPower-kernel.patch
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Joel Stanley <joel@jms.id.au>
Date: Tue, 16 Jul 2019 11:40:02 +0930
-Subject: [PATCH 2/2] Release OpenPower kernel
+Subject: [PATCH 8/8] Release OpenPower kernel
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
@@ -9,13 +9,13 @@
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
-index 32226d81fbb5..390611701d38 100644
+index 7a3e659c79ae..6f9b6f4b3b5c 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
VERSION = 5
- PATCHLEVEL = 2
- SUBLEVEL = 17
+ PATCHLEVEL = 3
+ SUBLEVEL = 7
-EXTRAVERSION =
+EXTRAVERSION = -openpower1
NAME = Bobtail Squid
diff --git a/openpower/package/hcode/Config.in b/openpower/package/hcode/Config.in
index 0f1bee1..7de9857 100644
--- a/openpower/package/hcode/Config.in
+++ b/openpower/package/hcode/Config.in
@@ -31,7 +31,7 @@
config BR2_HCODE_VERSION
string
- default "hw092819a.opmst" if BR2_HCODE_LATEST_VERSION
+ default "hw102919a.opmst" if BR2_HCODE_LATEST_VERSION
default BR2_HCODE_CUSTOM_VERSION_VALUE \
if BR2_HCODE_CUSTOM_VERSION
diff --git a/openpower/package/hostboot-p8/hostboot-p8.mk b/openpower/package/hostboot-p8/hostboot-p8.mk
index 2583626..fed9f12 100644
--- a/openpower/package/hostboot-p8/hostboot-p8.mk
+++ b/openpower/package/hostboot-p8/hostboot-p8.mk
@@ -3,7 +3,7 @@
# hostboot for POWER8
#
################################################################################
-HOSTBOOT_P8_VERSION ?= c3a40456c9196e906a150e1329b1b49ba75414a3
+HOSTBOOT_P8_VERSION ?= 4eee07524dfdac2bd515605ca796b701562b3e95
HOSTBOOT_P8_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_P8_VERSION))
diff --git a/openpower/package/hostboot/Config.in b/openpower/package/hostboot/Config.in
index bb169da..64efcbd 100644
--- a/openpower/package/hostboot/Config.in
+++ b/openpower/package/hostboot/Config.in
@@ -25,7 +25,7 @@
config BR2_HOSTBOOT_VERSION
string
- default "0f3e041cbe1c7d6d2ae203187f843b1714b287db" if BR2_HOSTBOOT_LATEST_VERSION
+ default "5dd26a01eed5ee4c177c83fe0d811ffbde902a37" if BR2_HOSTBOOT_LATEST_VERSION
default BR2_HOSTBOOT_CUSTOM_VERSION_VALUE \
if BR2_HOSTBOOT_CUSTOM_VERSION
diff --git a/openpower/package/libflash/libflash.mk b/openpower/package/libflash/libflash.mk
index c197ff6..6d8e810 100644
--- a/openpower/package/libflash/libflash.mk
+++ b/openpower/package/libflash/libflash.mk
@@ -4,7 +4,7 @@
#
################################################################################
-LIBFLASH_VERSION = v6.4
+LIBFLASH_VERSION = v6.5-61-g66ab3cbd
LIBFLASH_SITE = $(call github,open-power,skiboot,$(LIBFLASH_VERSION))
LIBFLASH_INSTALL_STAGING = YES
diff --git a/openpower/package/occ/Config.in b/openpower/package/occ/Config.in
index 5820bec..4ebb73d 100644
--- a/openpower/package/occ/Config.in
+++ b/openpower/package/occ/Config.in
@@ -43,7 +43,7 @@
config BR2_OCC_VERSION
string
- default "e4597ab273f7b0c2b79789c2193b3407a76a2be0" if BR2_OCC_LATEST_VERSION
+ default "3ab29212518e6574019fd569588a58cba9ba9823" if BR2_OCC_LATEST_VERSION
default BR2_OCC_CUSTOM_VERSION_VALUE \
if BR2_OCC_CUSTOM_VERSION
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index 9408a07..b95c0d8 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -67,6 +67,10 @@
OUTPUT_BUILD_DIR = $(STAGING_DIR)/../../../build/
OUTPUT_IMAGES_DIR = $(STAGING_DIR)/../../../images/
HOSTBOOT_BUILD_IMAGES_DIR = $(STAGING_DIR)/hostboot_build_images/
+# See Open-Power's Hostboot repo, file: src/build/buildpnor/PnorUtils.pm,
+# function: loadPnorLayout(); at the end of that function the generated XML file
+# is concatenated with "WithOffsets.xml"
+GENERATED_PNOR_LAYOUT_FILES = $(shell find "$(OPENPOWER_PNOR_SCRATCH_DIR)" -maxdepth 1 -name "*WithOffsets.xml")
FILES_TO_TAR = $(HOSTBOOT_BUILD_IMAGES_DIR)/* \
$(OUTPUT_BUILD_DIR)/skiboot-$(BR2_SKIBOOT_VERSION)/skiboot.elf \
@@ -74,8 +78,8 @@
$(OUTPUT_BUILD_DIR)/linux-$(BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE)/.config \
$(OUTPUT_BUILD_DIR)/linux-$(BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE)/vmlinux \
$(OUTPUT_BUILD_DIR)/linux-$(BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE)/System.map \
- $(OUTPUT_IMAGES_DIR)/zImage.epapr
-
+ $(OUTPUT_IMAGES_DIR)/zImage.epapr \
+ $(GENERATED_PNOR_LAYOUT_FILES)
# Subpackages we want to include in the version info (do not include openpower-pnor)
OPENPOWER_VERSIONED_SUBPACKAGES = skiboot
diff --git a/openpower/package/ppe42-binutils/ppe42-binutils.mk b/openpower/package/ppe42-binutils/ppe42-binutils.mk
index b63e2a1..0c365b8 100644
--- a/openpower/package/ppe42-binutils/ppe42-binutils.mk
+++ b/openpower/package/ppe42-binutils/ppe42-binutils.mk
@@ -4,7 +4,7 @@
#
################################################################################
-PPE42_BINUTILS_VERSION ?= ded0eff199fa1d9bd8be5a78935e8f023a2c5fad
+PPE42_BINUTILS_VERSION ?= c615a89c5beb032cbb00bf0c3e670319b2bbd4f5
PPE42_BINUTILS_SITE ?= $(call github,open-power,ppe42-binutils,$(PPE42_BINUTILS_VERSION))
PPE42_BINUTILS_LICENSE = GPLv3+
diff --git a/openpower/package/ppe42-gcc/ppe42-gcc.mk b/openpower/package/ppe42-gcc/ppe42-gcc.mk
index 3ab8a55..518e458 100644
--- a/openpower/package/ppe42-gcc/ppe42-gcc.mk
+++ b/openpower/package/ppe42-gcc/ppe42-gcc.mk
@@ -4,7 +4,7 @@
#
################################################################################
-PPE42_GCC_VERSION ?= c13849780c80d1ed466efbeaabcc663fe48cd87d
+PPE42_GCC_VERSION ?= b4772a9fa65ea0dd812f8f305ce157bb1cb5ab4a
PPE42_GCC_SITE ?= $(call github,open-power,ppe42-gcc,$(PPE42_GCC_VERSION))
PPE42_GCC_LICENSE = GPLv3+
diff --git a/openpower/package/sbe/Config.in b/openpower/package/sbe/Config.in
index f58173c..6b8ddac 100644
--- a/openpower/package/sbe/Config.in
+++ b/openpower/package/sbe/Config.in
@@ -26,7 +26,7 @@
config BR2_SBE_VERSION
string
- default "1d411055fab2b31195b43ee56122afd15445380e" if BR2_SBE_LATEST_VERSION
+ default "2e2e7ec7569757cb133d2d5fb21ccac618d828de" if BR2_SBE_LATEST_VERSION
default BR2_SBE_CUSTOM_VERSION_VALUE \
if BR2_SBE_CUSTOM_VERSION
diff --git a/openpower/package/skiboot/Config.in b/openpower/package/skiboot/Config.in
index b362182..54e5473 100644
--- a/openpower/package/skiboot/Config.in
+++ b/openpower/package/skiboot/Config.in
@@ -31,7 +31,7 @@
config BR2_SKIBOOT_VERSION
string
- default "v6.5-18-g470ffb5f29d7" if BR2_SKIBOOT_LATEST_VERSION
+ default "v6.5-61-g66ab3cbd" if BR2_SKIBOOT_LATEST_VERSION
default BR2_SKIBOOT_CUSTOM_VERSION_VALUE \
if BR2_SKIBOOT_CUSTOM_VERSION