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 197210f..b42708b 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/8] xhci: Reset controller on xhci shutdown
+Subject: [PATCH 1/4] 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, 3 insertions(+)
 
 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
-index 73ad81eb2a8e..b9a6a80317ea 100644
+index 9b3b1b16eafb..2a3aa1509d40 100644
 --- a/drivers/usb/host/xhci.c
 +++ b/drivers/usb/host/xhci.c
 @@ -789,6 +789,9 @@ void xhci_shutdown(struct usb_hcd *hcd)
diff --git a/openpower/linux/0005-powerpc-configs-add-FADump-support-in-petitboot-kern.patch b/openpower/linux/0002-powerpc-configs-add-FADump-awareness-to-skiroot_defc.patch
similarity index 69%
rename from openpower/linux/0005-powerpc-configs-add-FADump-support-in-petitboot-kern.patch
rename to openpower/linux/0002-powerpc-configs-add-FADump-awareness-to-skiroot_defc.patch
index 2983711..107e938 100644
--- a/openpower/linux/0005-powerpc-configs-add-FADump-support-in-petitboot-kern.patch
+++ b/openpower/linux/0002-powerpc-configs-add-FADump-awareness-to-skiroot_defc.patch
@@ -1,20 +1,24 @@
 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
+Date: Wed, 9 Oct 2019 19:34:29 +0530
+Subject: [PATCH 2/4] powerpc/configs: add FADump awareness to
+ skiroot_defconfig
 
 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: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/157062986936.23016.10146169203560084401.stgit@hbathini.in.ibm.com
+(cherry picked from commit aaa351504449c4babb80753c72920e4b25fbd8a9)
 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
+index 1253482a67c0..1e18454083ff 100644
 --- a/arch/powerpc/configs/skiroot_defconfig
 +++ b/arch/powerpc/configs/skiroot_defconfig
 @@ -46,6 +46,7 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
diff --git a/openpower/linux/0002-powerpc-opal-add-MPIPL-interface-definitions.patch b/openpower/linux/0002-powerpc-opal-add-MPIPL-interface-definitions.patch
deleted file mode 100644
index 9fad7d8..0000000
--- a/openpower/linux/0002-powerpc-opal-add-MPIPL-interface-definitions.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-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-config-Enable-secuity-features-in-skiroot.patch b/openpower/linux/0003-powerpc-config-Enable-secuity-features-in-skiroot.patch
new file mode 100644
index 0000000..45ed2be
--- /dev/null
+++ b/openpower/linux/0003-powerpc-config-Enable-secuity-features-in-skiroot.patch
@@ -0,0 +1,47 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Joel Stanley <joel@jms.id.au>
+Date: Thu, 2 Jan 2020 17:32:11 +1100
+Subject: [PATCH 3/4] powerpc/config: Enable secuity features in skiroot
+
+This turns on HARDENED_USERCOPY with HARDENED_USERCOPY_PAGESPAN, and
+FORTIFY_SOURCE.
+
+It also enables SECURITY_LOCKDOWN_LSM with _EARLY and
+LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY options enabled.
+
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ arch/powerpc/configs/skiroot_defconfig | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/configs/skiroot_defconfig b/arch/powerpc/configs/skiroot_defconfig
+index 1e18454083ff..bbd30eb1482e 100644
+--- a/arch/powerpc/configs/skiroot_defconfig
++++ b/arch/powerpc/configs/skiroot_defconfig
+@@ -33,7 +33,6 @@ CONFIG_JUMP_LABEL=y
+ CONFIG_STRICT_KERNEL_RWX=y
+ CONFIG_MODULES=y
+ CONFIG_MODULE_UNLOAD=y
+-CONFIG_MODULE_SIG=y
+ CONFIG_MODULE_SIG_FORCE=y
+ CONFIG_MODULE_SIG_SHA512=y
+ CONFIG_PARTITION_ADVANCED=y
+@@ -278,6 +277,18 @@ CONFIG_NLS_CODEPAGE_437=y
+ CONFIG_NLS_ASCII=y
+ CONFIG_NLS_ISO8859_1=y
+ CONFIG_NLS_UTF8=y
++CONFIG_ENCRYPTED_KEYS=y
++CONFIG_SECURITY=y
++CONFIG_HARDENED_USERCOPY=y
++# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
++CONFIG_HARDENED_USERCOPY_PAGESPAN=y
++CONFIG_FORTIFY_SOURCE=y
++CONFIG_SECURITY_LOCKDOWN_LSM=y
++CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y
++CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY=y
++# CONFIG_INTEGRITY is not set
++CONFIG_LSM="yama,loadpin,safesetid,integrity"
++# CONFIG_CRYPTO_HW is not set
+ CONFIG_CRC16=y
+ CONFIG_CRC_ITU_T=y
+ CONFIG_LIBCRC32C=y
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
deleted file mode 100644
index eb6750b..0000000
--- a/openpower/linux/0003-powerpc-fadump-improve-how-crashed-kernel-s-memory-i.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-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/0008-Release-OpenPower-kernel.patch b/openpower/linux/0004-Release-OpenPower-kernel.patch
similarity index 74%
rename from openpower/linux/0008-Release-OpenPower-kernel.patch
rename to openpower/linux/0004-Release-OpenPower-kernel.patch
index 2ccd09d..5e40910 100644
--- a/openpower/linux/0008-Release-OpenPower-kernel.patch
+++ b/openpower/linux/0004-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 8/8] Release OpenPower kernel
+Subject: [PATCH 4/4] Release OpenPower kernel
 
 Signed-off-by: Joel Stanley <joel@jms.id.au>
 ---
@@ -9,15 +9,15 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Makefile b/Makefile
-index a3fb24bb6dd5..3d63e3b4c24d 100644
+index 0e2e0a034064..a23214c8627b 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -2,7 +2,7 @@
  VERSION = 5
- PATCHLEVEL = 3
- SUBLEVEL = 18
+ PATCHLEVEL = 4
+ SUBLEVEL = 7
 -EXTRAVERSION =
 +EXTRAVERSION = -openpower1
- NAME = Bobtail Squid
+ NAME = Kleptomaniac Octopus
  
  # *DOCUMENTATION*
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
deleted file mode 100644
index 7341da8..0000000
--- a/openpower/linux/0004-powerpc-fadump-add-support-to-preserve-crash-data-on.patch
+++ /dev/null
@@ -1,291 +0,0 @@
-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 61527f1d4d05..fdeb81a28eb7 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/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
deleted file mode 100644
index 9238a0a..0000000
--- a/openpower/linux/0006-scsi-lpfc-Fix-oops-when-fewer-hdwqs-than-cpus.patch
+++ /dev/null
@@ -1,239 +0,0 @@
-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
deleted file mode 100644
index 71ae797..0000000
--- a/openpower/linux/0007-scsi-lpfc-Limit-xri-count-for-kdump-environment.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-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 =
