diff --git a/0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch b/0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch new file mode 100644 index 000000000..c3490eb1d --- /dev/null +++ b/0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch @@ -0,0 +1,71 @@ +From 409748faf955a50dd102ec7e32954d56a67adfd2 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Tue, 27 Feb 2018 00:21:23 -0500 +Subject: [PATCH] ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support + +Message-id: <20180227002123.21608-1-ahs3@redhat.com> +Patchwork-id: 206052 +O-Subject: [RHEL8 BZ1518076 PATCH] ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support +Bugzilla: 1518076 +RH-Acked-by: Mark Salter +RH-Acked-by: Jeremy McNicoll + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1518076 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=15417197 +Tested: compile-only; several other patches are required for full booting + QE has tested limited boot (see comment#12 of BZ) + +This is a re-post of a RHEL-ALT-7.5 patch specific to aarch64 moonshots +that we use in beaker. It is required for these machines to boot. + + commit 8a663a264863efedf8bb4a9d76ac603920fdd739 + Author: Robert Richter + Date: Wed Aug 16 19:49:30 2017 -0400 + + [acpi] APEI: arm64: Ignore broken HPE moonshot APEI support + + From: Mark Salter + Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1344237 + Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=13768971 + Tested: Booted on moonshot with patched 4.11.0-20 kernel + Upstream: RHEL-only + + The aarch64 HP moonshot platforms we have in beaker and elsewhere have + a firmware bug which causes a spurious fatal memory error via APEI at + boot time. This platform is no longer supported and no further firmware + updates are expected. This is a downstream-only hack to avoid the problem + by bailing out of HEST table probing if we detect a moonshot HEST table. + + Signed-off-by: Mark Salter + Signed-off-by: Robert Richter + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Al Stone +Signed-off-by: Herton R. Krzesinski +--- + drivers/acpi/apei/hest.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c +index 822402480f7d..3f87d8602560 100644 +--- a/drivers/acpi/apei/hest.c ++++ b/drivers/acpi/apei/hest.c +@@ -88,6 +88,14 @@ int apei_hest_parse(apei_hest_func_t func, void *data) + if (hest_disable || !hest_tab) + return -EINVAL; + ++#ifdef CONFIG_ARM64 ++ /* Ignore broken firmware */ ++ if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) && ++ !strncmp(hest_tab->header.oem_table_id, "ProLiant", 8) && ++ MIDR_IMPLEMENTOR(read_cpuid_id()) == ARM_CPU_IMP_APM) ++ return -EINVAL; ++#endif ++ + hest_hdr = (struct acpi_hest_header *)(hest_tab + 1); + for (i = 0; i < hest_tab->error_source_count; i++) { + len = hest_esrc_len(hest_hdr); +-- +2.26.0 + diff --git a/0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch b/0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch new file mode 100644 index 000000000..4c8962edb --- /dev/null +++ b/0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch @@ -0,0 +1,75 @@ +From 2ce5bd57079d86ead5f2a154fef6b474b3d54df3 Mon Sep 17 00:00:00 2001 +From: Mark Salter +Date: Thu, 10 May 2018 17:38:43 -0400 +Subject: [PATCH] ACPI / irq: Workaround firmware issue on X-Gene based m400 + +Message-id: <20180510173844.29580-3-msalter@redhat.com> +Patchwork-id: 214383 +O-Subject: [RHEL-8 BZ1519554 2/3] ACPI / irq: Workaround firmware issue on X-Gene based m400 +Bugzilla: 1519554 +RH-Acked-by: Al Stone +RH-Acked-by: Tony Camuso + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1519554 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16144520 + +The ACPI firmware on the xgene-based m400 platorms erroneously +describes its UART interrupt as ACPI_PRODUCER rather than +ACPI_CONSUMER. This leads to the UART driver being unable to +find its interrupt and the kernel unable find a console. +Work around this by avoiding the producer/consumer check +for X-Gene UARTs. + +Upstream Status: RHEL only +Signed-off-by: Mark Salter +Signed-off-by: Herton R. Krzesinski +--- + drivers/acpi/irq.c | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c +index e209081d644b..7484bcf59a1b 100644 +--- a/drivers/acpi/irq.c ++++ b/drivers/acpi/irq.c +@@ -126,6 +126,7 @@ struct acpi_irq_parse_one_ctx { + unsigned int index; + unsigned long *res_flags; + struct irq_fwspec *fwspec; ++ bool skip_producer_check; + }; + + /** +@@ -197,7 +198,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, + return AE_CTRL_TERMINATE; + case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: + eirq = &ares->data.extended_irq; +- if (eirq->producer_consumer == ACPI_PRODUCER) ++ if (!ctx->skip_producer_check && ++ eirq->producer_consumer == ACPI_PRODUCER) + return AE_OK; + if (ctx->index >= eirq->interrupt_count) { + ctx->index -= eirq->interrupt_count; +@@ -232,8 +234,19 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, + static int acpi_irq_parse_one(acpi_handle handle, unsigned int index, + struct irq_fwspec *fwspec, unsigned long *flags) + { +- struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec }; ++ struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false }; + ++ /* ++ * Firmware on arm64-based HPE m400 platform incorrectly marks ++ * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER. ++ * Don't do the producer/consumer check for that device. ++ */ ++ if (IS_ENABLED(CONFIG_ARM64)) { ++ struct acpi_device *adev = acpi_bus_get_acpi_device(handle); ++ ++ if (adev && !strcmp(acpi_device_hid(adev), "APMC0D08")) ++ ctx.skip_producer_check = true; ++ } + acpi_walk_resources(handle, METHOD_NAME__CRS, acpi_irq_parse_one_cb, &ctx); + return ctx.rc; + } +-- +2.26.0 + diff --git a/0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch b/0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch new file mode 100644 index 000000000..c0f49b4d4 --- /dev/null +++ b/0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch @@ -0,0 +1,86 @@ +From 823af60a6999eaf1dc492a0d94de412ce5551439 Mon Sep 17 00:00:00 2001 +From: Masahiro Yamada +Date: Mon, 30 Sep 2019 14:59:25 +0900 +Subject: [PATCH] ARM: fix __get_user_check() in case uaccess_* calls are not + inlined + +KernelCI reports that bcm2835_defconfig is no longer booting since +commit ac7c3e4ff401 ("compiler: enable CONFIG_OPTIMIZE_INLINING +forcibly"): + + https://lkml.org/lkml/2019/9/26/825 + +I also received a regression report from Nicolas Saenz Julienne: + + https://lkml.org/lkml/2019/9/27/263 + +This problem has cropped up on arch/arm/config/bcm2835_defconfig +because it enables CONFIG_CC_OPTIMIZE_FOR_SIZE. The compiler tends +to prefer not inlining functions with -Os. I was able to reproduce +it with other boards and defconfig files by manually enabling +CONFIG_CC_OPTIMIZE_FOR_SIZE. + +The __get_user_check() specifically uses r0, r1, r2 registers. +So, uaccess_save_and_enable() and uaccess_restore() must be inlined +in order to avoid those registers being overwritten in the callees. + +Prior to commit 9012d011660e ("compiler: allow all arches to enable +CONFIG_OPTIMIZE_INLINING"), the 'inline' marker was always enough for +inlining functions, except on x86. + +Since that commit, all architectures can enable CONFIG_OPTIMIZE_INLINING. +So, __always_inline is now the only guaranteed way of forcible inlining. + +I want to keep as much compiler's freedom as possible about the inlining +decision. So, I changed the function call order instead of adding +__always_inline around. + +Call uaccess_save_and_enable() before assigning the __p ("r0"), and +uaccess_restore() after evacuating the __e ("r0"). + +Fixes: 9012d011660e ("compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING") +Reported-by: "kernelci.org bot" +Reported-by: Nicolas Saenz Julienne +Signed-off-by: Masahiro Yamada +Acked-by: Arnd Bergmann +Tested-by: Nicolas Saenz Julienne +Tested-by: Fabrizio Castro +Tested-by: Geert Uytterhoeven +--- + arch/arm/include/asm/uaccess.h | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h +index 98c6b91be4a8..60055827dddc 100644 +--- a/arch/arm/include/asm/uaccess.h ++++ b/arch/arm/include/asm/uaccess.h +@@ -191,11 +191,12 @@ extern int __get_user_64t_4(void *); + #define __get_user_check(x, p) \ + ({ \ + unsigned long __limit = current_thread_info()->addr_limit - 1; \ ++ unsigned int __ua_flags = uaccess_save_and_enable(); \ + register typeof(*(p)) __user *__p asm("r0") = (p); \ + register __inttype(x) __r2 asm("r2"); \ + register unsigned long __l asm("r1") = __limit; \ + register int __e asm("r0"); \ +- unsigned int __ua_flags = uaccess_save_and_enable(); \ ++ unsigned int __err; \ + switch (sizeof(*(__p))) { \ + case 1: \ + if (sizeof((x)) >= 8) \ +@@ -223,9 +224,10 @@ extern int __get_user_64t_4(void *); + break; \ + default: __e = __get_user_bad(); break; \ + } \ +- uaccess_restore(__ua_flags); \ ++ __err = __e; \ + x = (typeof(*(p))) __r2; \ +- __e; \ ++ uaccess_restore(__ua_flags); \ ++ __err; \ + }) + + #define get_user(x, p) \ +-- +2.26.0 + diff --git a/0001-ARM-tegra-usb-no-reset.patch b/0001-ARM-tegra-usb-no-reset.patch new file mode 100644 index 000000000..1d9e3483f --- /dev/null +++ b/0001-ARM-tegra-usb-no-reset.patch @@ -0,0 +1,32 @@ +From 9d2e00927220900c925185269639568d5293685c Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Thu, 3 May 2012 20:27:11 +0100 +Subject: [PATCH] ARM: tegra: usb no reset + +Patch for disconnect issues with storage attached to a + tegra-ehci controller +--- + drivers/usb/core/hub.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c +index 54cd8ef795ec..4afeea51b2c9 100644 +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -5504,6 +5504,13 @@ static void hub_event(struct work_struct *work) + (u16) hub->change_bits[0], + (u16) hub->event_bits[0]); + ++ /* Don't disconnect USB-SATA on TrimSlice */ ++ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) { ++ if ((hdev->state == 7) && (hub->change_bits[0] == 0) && ++ (hub->event_bits[0] == 0x2)) ++ hub->event_bits[0] = 0; ++ } ++ + /* Lock the device, then check to see if we were + * disconnected while waiting for the lock to succeed. */ + usb_lock_device(hdev); +-- +2.26.0 + diff --git a/0001-Add-Red-Hat-tainting.patch b/0001-Add-Red-Hat-tainting.patch new file mode 100644 index 000000000..776a1c99d --- /dev/null +++ b/0001-Add-Red-Hat-tainting.patch @@ -0,0 +1,240 @@ +From 7435090005e33aaf9f4d6177efbd677848e11a19 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Wed, 13 Nov 2019 14:44:31 -0500 +Subject: [PATCH] Add Red Hat tainting + +Message-id: <20191113144431.9403-5-labbott@redhat.com> +Patchwork-id: 286078 +O-Subject: [ARK INTERNAL PATCHv2 4/4] [redhat] Add Red Hat tainting +Bugzilla: +RH-Acked-by: Don Zickus +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Jiri Benc + +This is a combination of the following commits including support +for adding CONFIG_RH_DEPRECATED support + +rh_taint: add support + +Message-id: <1524831536-47239-1-git-send-email-darcari@redhat.com> +Patchwork-id: 211655 +O-Subject: [RHEL8.0 BZ 1565704 v2] rh_taint: add support +Bugzilla: 1565704 +RH-Acked-by: Jonathan Toppins +RH-Acked-by: Jiri Benc + +Bugzilla: http://bugzilla.redhat.com/1565704 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=15910441 +Upstream: RHEL Only +Test: Sanity boot of brew build. Previous private build testing of functions. + +rh_taint.c adds the following functions which are utilized by Red Hat to +indicate limited or no support for hardware and/or drivers. + +mark_hardware_unsupported +mark_hardware_deprecated +mark_tech_preview + +See code comments for usage. + +RHEL8 change: TAINT_AUX will be used in place of TAINT_TECH_PREVIEW as it +limits the number RHEL only changes that must be made to the kernel. + +If at a later date it is determined that additional flags are required, +the associated RHEL only infrastructure can be added at that time. + +Cc: David Arcari +Cc: Josh Poimboeuf +Signed-off-by: Herton R. Krzesinski + +rh_taint: add support for marking driver as unsupported + +Message-id: +Patchwork-id: 211020 +O-Subject: [RHEL8.0] rh_taint: add support for marking driver as unsupported +Bugzilla: 1565704 +RH-Acked-by: Jiri Benc +RH-Acked-by: David Arcari + +In some cases a driver needs to be enabled by Red Hat to support internal +testing but the driver is not intended to be supported on customer hardware. +This adds a function "make_driver_unsupported()" to facilitate such +situations. The function will print a kernel log message. + +Bugzilla: 1565704 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=15873552 +Tested: compile only + +Signed-off-by: Jonathan Toppins +Signed-off-by: Herton R. Krzesinski + +rh_taint: correct loaddable module support dependencies + +Message-id: <20181123111337.26898-5-prudo@redhat.com> +Patchwork-id: 233658 +O-Subject: [ARK PATCH RESEND v2 4/8] [kernel] rh_taint: correct loaddable module support dependencies +Bugzilla: 1652266 +RH-Acked-by: Jakub Racek +RH-Acked-by: Jiri Benc +RH-Acked-by: Cornelia Huck + +Bugzilla: 1652266 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=19252944 +Upstream Status: RHEL_only + +The kernel configuration for the s390/zfcpdump kernel variant turns +loaddable module support off. The build breaks in rh_taint.c due to +compiler errors caused by dereferencing struct module variables which +is just a declaration if CONFIG_MODULES is not set. + +To solve this build break, access struct module members only if +CONFIG_MODULES is enabled. + +Upstream Status: RHEL only +Signed-off-by: Philipp Rudo +--- + include/linux/kernel.h | 15 +++++++ + kernel/Makefile | 2 + + kernel/rh_taint.c | 93 ++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 110 insertions(+) + create mode 100644 kernel/rh_taint.c + +diff --git a/include/linux/kernel.h b/include/linux/kernel.h +index 9b7a8d74a9d6..2cb1c4fea0c9 100644 +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -1029,4 +1029,19 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } + /* OTHER_WRITABLE? Generally considered a bad idea. */ \ + BUILD_BUG_ON_ZERO((perms) & 2) + \ + (perms)) ++ ++struct module; ++ ++#ifdef CONFIG_RH_DISABLE_DEPRECATED ++void mark_hardware_unsupported(const char *msg); ++void mark_hardware_deprecated(const char *msg); ++void mark_tech_preview(const char *msg, struct module *mod); ++void mark_driver_unsupported(const char *name); ++#else ++static inline void mark_hardware_unsupported(const char *msg) { } ++static inline void mark_hardware_deprecated(const char *msg) { } ++static inline void mark_tech_preview(const char *msg, struct module *mod) { } ++static inline void mark_driver_unsupported(const char *name) { } ++#endif ++ + #endif +diff --git a/kernel/Makefile b/kernel/Makefile +index 4cb4130ced32..e62be9e51064 100644 +--- a/kernel/Makefile ++++ b/kernel/Makefile +@@ -12,6 +12,8 @@ obj-y = fork.o exec_domain.o panic.o \ + notifier.o ksysfs.o cred.o reboot.o \ + async.o range.o smpboot.o ucount.o + ++obj-$(CONFIG_RH_DISABLE_DEPRECATED) += rh_taint.o ++ + obj-$(CONFIG_MODULES) += kmod.o + obj-$(CONFIG_MULTIUSER) += groups.o + +diff --git a/kernel/rh_taint.c b/kernel/rh_taint.c +new file mode 100644 +index 000000000000..8d1641710ed7 +--- /dev/null ++++ b/kernel/rh_taint.c +@@ -0,0 +1,93 @@ ++#include ++#include ++ ++/* ++ * The following functions are used by Red Hat to indicate to users that ++ * hardware and drivers are unsupported, or have limited support in RHEL major ++ * and minor releases. These functions output loud warning messages to the end ++ * user and should be USED WITH CAUTION. ++ * ++ * Any use of these functions _MUST_ be documented in the RHEL Release Notes, ++ * and have approval of management. ++ */ ++ ++/** ++ * mark_hardware_unsupported() - Mark hardware, class, or type as unsupported. ++ * @msg: Hardware name, class, or type ++ * ++ * Called to mark a device, class of devices, or types of devices as not having ++ * support in any RHEL minor release. This does not TAINT the kernel. Red Hat ++ * will not fix bugs against this hardware in this minor release. Red Hat may ++ * declare support in a future major or minor update release. This cannot be ++ * used to mark drivers unsupported. ++ */ ++void mark_hardware_unsupported(const char *msg) ++{ ++ /* Print one single message */ ++ pr_crit("Warning: %s - this hardware has not undergone testing by Red Hat and might not be certified. Please consult https://hardware.redhat.com for certified hardware.\n", msg); ++} ++EXPORT_SYMBOL(mark_hardware_unsupported); ++ ++/** ++ * mark_hardware_deprecated() - Mark hardware, class, or type as deprecated. ++ * @msg: Hardware name, class, or type ++ * ++ * Called to minimize the support status of a previously supported device in ++ * a minor release. This does not TAINT the kernel. Marking hardware ++ * deprecated is usually done in conjunction with the hardware vendor. Future ++ * RHEL major releases may not include this driver. Driver updates and fixes ++ * for this device will be limited to critical issues in future minor releases. ++ */ ++void mark_hardware_deprecated(const char *msg) ++{ ++ pr_crit("Warning: %s - this hardware is not recommended for new deployments. It continues to be supported in this RHEL release, but it is likely to be removed in the next major release. Driver updates and fixes for this device will be limited to critical issues. Please contact Red Hat Support or your device's hardware vendor for additional information.\n", msg); ++} ++EXPORT_SYMBOL(mark_hardware_deprecated); ++ ++/** ++ * mark_tech_preview() - Mark driver or kernel subsystem as 'Tech Preview' ++ * @msg: Driver or kernel subsystem name ++ * ++ * Called to minimize the support status of a new driver. This does TAINT the ++ * kernel. Calling this function indicates that the driver or subsystem has ++ * had limited testing and is not marked for full support within this RHEL ++ * minor release. The next RHEL minor release may contain full support for ++ * this driver. Red Hat does not guarantee that bugs reported against this ++ * driver or subsystem will be resolved. ++ */ ++void mark_tech_preview(const char *msg, struct module *mod) ++{ ++ const char *str = NULL; ++ ++ if (msg) ++ str = msg; ++#ifdef CONFIG_MODULES ++ else if (mod && mod->name) ++ str = mod->name; ++#endif ++ ++ pr_warn("TECH PREVIEW: %s may not be fully supported.\n" ++ "Please review provided documentation for limitations.\n", ++ (str ? str : "kernel")); ++ add_taint(TAINT_AUX, LOCKDEP_STILL_OK); ++#ifdef CONFIG_MODULES ++ if (mod) ++ mod->taints |= (1U << TAINT_AUX); ++#endif ++} ++EXPORT_SYMBOL(mark_tech_preview); ++ ++/** ++ * mark_driver_unsupported - drivers that we know we don't want to support ++ * @name: the name of the driver ++ * ++ * In some cases Red Hat has chosen to build a driver for internal QE ++ * use. Use this function to mark those drivers as unsupported for ++ * customers. ++ */ ++void mark_driver_unsupported(const char *name) ++{ ++ pr_crit("Warning: %s - This driver has not undergone sufficient testing by Red Hat for this release and therefore cannot be used in production systems.\n", ++ name ? name : "kernel"); ++} ++EXPORT_SYMBOL(mark_driver_unsupported); +-- +2.26.0 + diff --git a/0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch b/0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch new file mode 100644 index 000000000..68484962d --- /dev/null +++ b/0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch @@ -0,0 +1,185 @@ +From 8be0f0be016b13c04d62f527bdd029a733e3aa39 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 2 Oct 2017 18:22:13 -0400 +Subject: [PATCH] Add efi_status_to_str() and rework efi_status_to_err(). + +This adds efi_status_to_str() for use when printing efi_status_t +messages, and reworks efi_status_to_err() so that the two use a common +list of errors. + +Upstream Status: RHEL only +Signed-off-by: Peter Jones +--- + drivers/firmware/efi/efi.c | 124 +++++++++++++++++++++++++++---------- + include/linux/efi.h | 3 + + 2 files changed, 96 insertions(+), 31 deletions(-) + +diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c +index 911a2bd0f6b7..3696e87f19ee 100644 +--- a/drivers/firmware/efi/efi.c ++++ b/drivers/firmware/efi/efi.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + #include + +@@ -831,40 +832,101 @@ int efi_mem_type(unsigned long phys_addr) + } + #endif + ++struct efi_error_code { ++ efi_status_t status; ++ int errno; ++ const char *description; ++}; ++ ++static const struct efi_error_code efi_error_codes[] = { ++ { EFI_SUCCESS, 0, "Success"}, ++#if 0 ++ { EFI_LOAD_ERROR, -EPICK_AN_ERRNO, "Load Error"}, ++#endif ++ { EFI_INVALID_PARAMETER, -EINVAL, "Invalid Parameter"}, ++ { EFI_UNSUPPORTED, -ENOSYS, "Unsupported"}, ++ { EFI_BAD_BUFFER_SIZE, -ENOSPC, "Bad Buffer Size"}, ++ { EFI_BUFFER_TOO_SMALL, -ENOSPC, "Buffer Too Small"}, ++ { EFI_NOT_READY, -EAGAIN, "Not Ready"}, ++ { EFI_DEVICE_ERROR, -EIO, "Device Error"}, ++ { EFI_WRITE_PROTECTED, -EROFS, "Write Protected"}, ++ { EFI_OUT_OF_RESOURCES, -ENOMEM, "Out of Resources"}, ++#if 0 ++ { EFI_VOLUME_CORRUPTED, -EPICK_AN_ERRNO, "Volume Corrupt"}, ++ { EFI_VOLUME_FULL, -EPICK_AN_ERRNO, "Volume Full"}, ++ { EFI_NO_MEDIA, -EPICK_AN_ERRNO, "No Media"}, ++ { EFI_MEDIA_CHANGED, -EPICK_AN_ERRNO, "Media changed"}, ++#endif ++ { EFI_NOT_FOUND, -ENOENT, "Not Found"}, ++#if 0 ++ { EFI_ACCESS_DENIED, -EPICK_AN_ERRNO, "Access Denied"}, ++ { EFI_NO_RESPONSE, -EPICK_AN_ERRNO, "No Response"}, ++ { EFI_NO_MAPPING, -EPICK_AN_ERRNO, "No mapping"}, ++ { EFI_TIMEOUT, -EPICK_AN_ERRNO, "Time out"}, ++ { EFI_NOT_STARTED, -EPICK_AN_ERRNO, "Not started"}, ++ { EFI_ALREADY_STARTED, -EPICK_AN_ERRNO, "Already started"}, ++#endif ++ { EFI_ABORTED, -EINTR, "Aborted"}, ++#if 0 ++ { EFI_ICMP_ERROR, -EPICK_AN_ERRNO, "ICMP Error"}, ++ { EFI_TFTP_ERROR, -EPICK_AN_ERRNO, "TFTP Error"}, ++ { EFI_PROTOCOL_ERROR, -EPICK_AN_ERRNO, "Protocol Error"}, ++ { EFI_INCOMPATIBLE_VERSION, -EPICK_AN_ERRNO, "Incompatible Version"}, ++#endif ++ { EFI_SECURITY_VIOLATION, -EACCES, "Security Policy Violation"}, ++#if 0 ++ { EFI_CRC_ERROR, -EPICK_AN_ERRNO, "CRC Error"}, ++ { EFI_END_OF_MEDIA, -EPICK_AN_ERRNO, "End of Media"}, ++ { EFI_END_OF_FILE, -EPICK_AN_ERRNO, "End of File"}, ++ { EFI_INVALID_LANGUAGE, -EPICK_AN_ERRNO, "Invalid Languages"}, ++ { EFI_COMPROMISED_DATA, -EPICK_AN_ERRNO, "Compromised Data"}, ++ ++ // warnings ++ { EFI_WARN_UNKOWN_GLYPH, -EPICK_AN_ERRNO, "Warning Unknown Glyph"}, ++ { EFI_WARN_DELETE_FAILURE, -EPICK_AN_ERRNO, "Warning Delete Failure"}, ++ { EFI_WARN_WRITE_FAILURE, -EPICK_AN_ERRNO, "Warning Write Failure"}, ++ { EFI_WARN_BUFFER_TOO_SMALL, -EPICK_AN_ERRNO, "Warning Buffer Too Small"}, ++#endif ++}; ++ ++static int ++efi_status_cmp_bsearch(const void *key, const void *item) ++{ ++ u64 status = (u64)(uintptr_t)key; ++ struct efi_error_code *code = (struct efi_error_code *)item; ++ ++ if (status < code->status) ++ return -1; ++ if (status > code->status) ++ return 1; ++ return 0; ++} ++ + int efi_status_to_err(efi_status_t status) + { +- int err; +- +- switch (status) { +- case EFI_SUCCESS: +- err = 0; +- break; +- case EFI_INVALID_PARAMETER: +- err = -EINVAL; +- break; +- case EFI_OUT_OF_RESOURCES: +- err = -ENOSPC; +- break; +- case EFI_DEVICE_ERROR: +- err = -EIO; +- break; +- case EFI_WRITE_PROTECTED: +- err = -EROFS; +- break; +- case EFI_SECURITY_VIOLATION: +- err = -EACCES; +- break; +- case EFI_NOT_FOUND: +- err = -ENOENT; +- break; +- case EFI_ABORTED: +- err = -EINTR; +- break; +- default: +- err = -EINVAL; +- } ++ struct efi_error_code *found; ++ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); + +- return err; ++ found = bsearch((void *)(uintptr_t)status, efi_error_codes, ++ sizeof(struct efi_error_code), num, ++ efi_status_cmp_bsearch); ++ if (!found) ++ return -EINVAL; ++ return found->errno; ++} ++ ++const char * ++efi_status_to_str(efi_status_t status) ++{ ++ struct efi_error_code *found; ++ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); ++ ++ found = bsearch((void *)(uintptr_t)status, efi_error_codes, ++ sizeof(struct efi_error_code), num, ++ efi_status_cmp_bsearch); ++ if (!found) ++ return "Unknown error code"; ++ return found->description; + } + + static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock); +diff --git a/include/linux/efi.h b/include/linux/efi.h +index 251f1f783cdf..fa8e23680314 100644 +--- a/include/linux/efi.h ++++ b/include/linux/efi.h +@@ -42,6 +42,8 @@ + #define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1))) + #define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1))) + ++#define EFI_IS_ERROR(x) ((x) & (1UL << (BITS_PER_LONG-1))) ++ + typedef unsigned long efi_status_t; + typedef u8 efi_bool_t; + typedef u16 efi_char16_t; /* UNICODE character */ +@@ -825,6 +827,7 @@ static inline bool efi_rt_services_supported(unsigned int mask) + #endif + + extern int efi_status_to_err(efi_status_t status); ++extern const char *efi_status_to_str(efi_status_t status); + + /* + * Variable Attributes +-- +2.26.0 + diff --git a/0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch b/0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch new file mode 100644 index 000000000..024fed1a2 --- /dev/null +++ b/0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch @@ -0,0 +1,32 @@ +From 7e92e6ac7978311bf36b144473d3f09cfd5a9a62 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 26 Feb 2020 13:38:40 -0500 +Subject: [PATCH] Add option of 13 for FORCE_MAX_ZONEORDER + +This is a hack, but it's what the other distros currently use +for aarch64 with 4K pages so we'll do the same while upstream +decides what the best outcome is (which isn't this). + +Upstream Status: RHEL only +Signed-off-by: Peter Robinson +[Add a dependency on RHEL_DIFFERENCES] +Signed-off-by: Jeremy Cline +--- + arch/arm64/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig +index 9e87f5847c92..f57bee916600 100644 +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -1125,6 +1125,7 @@ config XEN + config FORCE_MAX_ZONEORDER + int + default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE) ++ default "13" if (ARCH_THUNDER && !ARM64_64K_PAGES && !RHEL_DIFFERENCES) + default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE) + default "11" + help +-- +2.26.0 + diff --git a/0001-Add-support-for-deprecating-processors.patch b/0001-Add-support-for-deprecating-processors.patch new file mode 100644 index 000000000..d16c1459f --- /dev/null +++ b/0001-Add-support-for-deprecating-processors.patch @@ -0,0 +1,303 @@ +From 8d47dd05633e96999b9bcff01544a19dec69094c Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Wed, 13 Nov 2019 14:44:30 -0500 +Subject: [PATCH] Add support for deprecating processors + +Message-id: <20191113144431.9403-4-labbott@redhat.com> +Patchwork-id: 286081 +O-Subject: [ARK INTERNAL PATCHv2 3/4] [redhat] Add support for deprecating processors +Bugzilla: +RH-Acked-by: Don Zickus +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Jiri Benc + +This is the squashed version of the following patches +modifed to use the new CONFIG_RH_DISABLE_DEPRECATED option + +add rh_check_supported + +Message-id: <1525313397-75200-1-git-send-email-darcari@redhat.com> +Patchwork-id: 212189 +O-Subject: [RHEL8.0 BZ 1565717 v2] x86: add rh_check_supported +Bugzilla: 1565717 +RH-Acked-by: Steve Best +RH-Acked-by: Mikulas Patocka + +Description: + +Add code to verify that the booted x86 processor is supported by +Red Hat. In cases where the processor is not supported a critical +message is logged. + +Initially the supported set of processors for RHEL8 remains the same +as RHEL7. + +Bugzilla: http://bugzilla.redhat.com/1565717 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=15966242 + +Test: Booted brew build on supported (Haswell) and unsupported processor (CNL) + and achieved desired results. + +Upstream: RHEL Only + +Cc: David Arcari +Cc: Mikulas Patocka +Cc: Dave Young +Cc: Josh Poimboeuf +Signed-off-by: Herton R. Krzesinski + +update rh_check_supported processor list + +Message-id: <1530618602-17477-1-git-send-email-darcari@redhat.com> +Patchwork-id: 223452 +O-Subject: [RHEL8.0 BZ 1595918] x86: update rh_check_supported processor list +Bugzilla: 1595918 +RH-Acked-by: Jarod Wilson +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Steve Best + +Bugzilla: http://bugzilla.redhat.com/1595918 +Upstream Status: RHEL_only +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16916208 +Tested: Verified on a varity of supported and unsupported Intel and AMD systems. + Results as expected. + +In RHEL8, we are marking some of the older processors as unsupported. No code +is being removed; however, the older processors are not supported and as such +are not candidates for certification. + +Cc: David Arcari +Cc: Prarit Bhargava +Cc: Steve Best +Signed-off-by: Herton R. Krzesinski +Signed-off-by: Jakub Racek +refresh: rename FAM6_ATOM again, see f2c4db1bd + +mark whiskey-lake processor supported + +Message-id: <1533125629-12870-1-git-send-email-darcari@redhat.com> +Patchwork-id: 225809 +O-Subject: [ BZ 1609604] mark whiskey-lake processor supported +Bugzilla: 1609604 +RH-Acked-by: Steve Best +RH-Acked-by: Tony Camuso +RH-Acked-by: Prarit Bhargava + +Bugzilla: http://bugzilla.redhat.com/1609604 +Build Info: https://brewweb.devel.redhat.com/taskinfo?taskID=17474338 +Upstream Status: RHEL Only +Tested: Successful excecution of platform-test suite. + +Whiskey Lake is cpu model 142 with stepping 11. Stepping > 11 for cpu model +142 is not supported. + +For model 158, the highest supported stepping is 10. + +Cc: Prarit Bhargava +Cc: David Arcari +Cc: Dave Young +Signed-off-by: Herton R. Krzesinski + +mark intel knights landing and knights mill unsupported + +Message-id: <1533580277-126323-1-git-send-email-darcari@redhat.com> +Patchwork-id: 226187 +O-Subject: [RHEL8.0 BZ 1610493] mark intel knights landing and knights mill unsupported +Bugzilla: 1610493 +RH-Acked-by: Tony Camuso +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Steve Best + +Bugzilla: http://bugzilla.redhat.com/1610493 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=17625348 + +Tested: verified on KNL/KNM system +Upstream Status: RHEL Only +Depends: http://bugzilla.redhat.com/1609604 + +We are marking KNL/KNM processors as unsupported. No code is being removed; +however, the older processors are not supported and as such are not +candidates for certification. + +Upstream Status: RHEL only +Cc: Prarit Bhargava +Cc: David Arcari +Cc: Dave Young +Signed-off-by: Herton R. Krzesinski +--- + arch/x86/kernel/cpu/common.c | 1 + + arch/x86/kernel/setup.c | 132 ++++++++++++++++++++++++++++++++++- + 2 files changed, 132 insertions(+), 1 deletion(-) + +diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c +index bed0cb83fe24..a15622e0d79f 100644 +--- a/arch/x86/kernel/cpu/common.c ++++ b/arch/x86/kernel/cpu/common.c +@@ -1205,6 +1205,7 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) + cpu_detect(c); + get_cpu_vendor(c); + get_cpu_cap(c); ++ get_model_name(c); /* RHEL: get model name for unsupported check */ + get_cpu_address_sizes(c); + setup_force_cpu_cap(X86_FEATURE_CPUID); + +diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c +index 4b3fa6cd3106..e39ec0f88d28 100644 +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -44,6 +44,7 @@ + #include + #include + #include ++#include + + /* + * max_low_pfn_mapped: highest directly mapped pfn < 4 GB +@@ -747,7 +748,132 @@ static void __init trim_low_memory_range(void) + { + memblock_reserve(0, ALIGN(reserve_low, PAGE_SIZE)); + } +- ++ ++static bool valid_amd_processor(__u8 family, const char *model_id) ++{ ++ bool valid; ++ ++ switch(family) { ++ case 0x15: ++ valid = true; ++ break; ++ ++ case 0x17: ++ valid = strstr(model_id, "AMD EPYC 7"); ++ break; ++ ++ default: ++ valid = false; ++ break; ++ } ++ ++ return valid; ++} ++ ++static bool valid_intel_processor(__u8 family, __u8 model, __u8 stepping) ++{ ++ bool valid; ++ ++ if (family != 6) ++ return false; ++ ++ switch(model) { ++ case INTEL_FAM6_ATOM_GOLDMONT_D: ++ case INTEL_FAM6_ATOM_GOLDMONT_PLUS: ++ ++ case INTEL_FAM6_BROADWELL: ++ case INTEL_FAM6_BROADWELL_G: ++ case INTEL_FAM6_BROADWELL_X: ++ case INTEL_FAM6_BROADWELL_D: ++ ++ case INTEL_FAM6_HASWELL: ++ case INTEL_FAM6_HASWELL_G: ++ case INTEL_FAM6_HASWELL_L: ++ case INTEL_FAM6_HASWELL_X: ++ valid = true; ++ break; ++ ++ case INTEL_FAM6_KABYLAKE: ++ valid = (stepping <= 10); ++ break; ++ ++ case INTEL_FAM6_KABYLAKE_L: ++ valid = (stepping <= 11); ++ break; ++ ++ case INTEL_FAM6_SKYLAKE_L: ++ case INTEL_FAM6_SKYLAKE: ++ case INTEL_FAM6_SKYLAKE_X: ++ /* stepping > 4 is Cascade Lake and is not supported */ ++ valid = (stepping <= 4); ++ break; ++ ++ default: ++ valid = false; ++ break; ++ } ++ ++ return valid; ++} ++ ++static void rh_check_supported(void) ++{ ++ bool guest; ++ ++ guest = (x86_hyper_type != X86_HYPER_NATIVE || boot_cpu_has(X86_FEATURE_HYPERVISOR)); ++ ++ /* RHEL supports single cpu on guests only */ ++ if (((boot_cpu_data.x86_max_cores * smp_num_siblings) == 1) && ++ !guest && is_kdump_kernel()) { ++ pr_crit("Detected single cpu native boot.\n"); ++ pr_crit("Important: In this kernel, single threaded, single CPU 64-bit physical systems are unsupported."); ++ } ++ ++ /* ++ * If the RHEL kernel does not support this hardware, the kernel will ++ * attempt to boot, but no support is provided for this hardware ++ */ ++ switch (boot_cpu_data.x86_vendor) { ++ case X86_VENDOR_AMD: ++ if (!valid_amd_processor(boot_cpu_data.x86, ++ boot_cpu_data.x86_model_id)) { ++ pr_crit("Detected CPU family %xh model %d\n", ++ boot_cpu_data.x86, ++ boot_cpu_data.x86_model); ++ mark_hardware_unsupported("AMD Processor"); ++ } ++ break; ++ ++ case X86_VENDOR_INTEL: ++ if (!valid_intel_processor(boot_cpu_data.x86, ++ boot_cpu_data.x86_model, ++ boot_cpu_data.x86_stepping)) { ++ pr_crit("Detected CPU family %d model %d stepping %d\n", ++ boot_cpu_data.x86, ++ boot_cpu_data.x86_model, ++ boot_cpu_data.x86_stepping); ++ mark_hardware_unsupported("Intel Processor"); ++ } ++ break; ++ ++ default: ++ pr_crit("Detected processor %s %s\n", ++ boot_cpu_data.x86_vendor_id, ++ boot_cpu_data.x86_model_id); ++ mark_hardware_unsupported("Processor"); ++ break; ++ } ++ ++ /* ++ * Due to the complexity of x86 lapic & ioapic enumeration, and PCI IRQ ++ * routing, ACPI is required for x86. acpi=off is a valid debug kernel ++ * parameter, so just print out a loud warning in case something ++ * goes wrong (which is most of the time). ++ */ ++ if (acpi_disabled && !guest) ++ pr_crit("ACPI has been disabled or is not available on this hardware. This may result in a single cpu boot, incorrect PCI IRQ routing, or boot failure.\n"); ++} ++ + /* + * Dump out kernel offset information on panic. + */ +@@ -1244,6 +1370,10 @@ void __init setup_arch(char **cmdline_p) + efi_apply_memmap_quirks(); + #endif + ++#ifdef CONFIG_RH_DISABLE_DEPRECATED ++ rh_check_supported(); ++#endif ++ + unwind_init(); + } + +-- +2.26.0 + diff --git a/0001-Drop-that-for-now.patch b/0001-Drop-that-for-now.patch new file mode 100644 index 000000000..c991817e3 --- /dev/null +++ b/0001-Drop-that-for-now.patch @@ -0,0 +1,25 @@ +From 0791d647272fa837cad2ac55ab8d8294d2dffda7 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Wed, 23 Jan 2019 14:36:37 +0100 +Subject: [PATCH] Drop that for now + +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 0808100e660f..15a5cdd01839 100644 +--- a/Makefile ++++ b/Makefile +@@ -479,7 +479,7 @@ KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE + KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \ + -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ + -Werror=implicit-function-declaration -Werror=implicit-int \ +- -Wno-format-security \ ++ -Wno-format-security -Wno-address-of-packed-member \ + -std=gnu89 + KBUILD_CPPFLAGS := -D__KERNEL__ + KBUILD_AFLAGS_KERNEL := +-- +2.26.0 + diff --git a/0001-IB-rxe-Mark-Soft-RoCE-Transport-driver-as-tech-previ.patch b/0001-IB-rxe-Mark-Soft-RoCE-Transport-driver-as-tech-previ.patch new file mode 100644 index 000000000..97d5a1e97 --- /dev/null +++ b/0001-IB-rxe-Mark-Soft-RoCE-Transport-driver-as-tech-previ.patch @@ -0,0 +1,58 @@ +From c7b0e055fb9c5384e6abd297f478eb244c077c0a Mon Sep 17 00:00:00 2001 +From: Don Dutile +Date: Tue, 24 Jul 2018 22:29:16 -0400 +Subject: [PATCH] IB/rxe: Mark Soft-RoCE Transport driver as tech-preview + +Message-id: <20180724222916.19362-1-ddutile@redhat.com> +Patchwork-id: 225418 +O-Subject: [PATCH RHEL-8.0] IB/rxe: Mark Soft-RoCE Transport driver as tech-preview. +Bugzilla: 1605216 +RH-Acked-by: Jarod Wilson +RH-Acked-by: Jonathan Toppins +RH-Acked-by: Tony Camuso +RH-Acked-by: Honggang Li + +The Soft-RoCE driver implements the InfiniBand RDMA transport +over the Linux network stack. It enables a system with a +standard Ethernet adapter to interoperate with a RoCE +adapter or with another system running the RXE driver. + +Unfortunately, a wide range of tests and/or use-cases have shown +that the driver is not ready for enterprise use, and upstream bug +fixing may not be complete for RHEL-8.0. +Thus, recommendation from driver maintainer is to mark it as +tech-preview. It is expected that future bug fixes will enable it +to be upgraded to fully supported. In the mean time, it works +in a number of use cases, and can be used to demonstrate upstream +fixes on failing cases. + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1605216 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=17344161 + +Testing: +Simple boot test, and loading of rxe driver to show tech-preview +msg is generated in dmesg log. + +Upstream Status: RHEL only +Signed-off-by: Donald Dutile +--- + drivers/infiniband/sw/rxe/rxe.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/infiniband/sw/rxe/rxe.c b/drivers/infiniband/sw/rxe/rxe.c +index 4afdd2e20883..05e637aa0e3d 100644 +--- a/drivers/infiniband/sw/rxe/rxe.c ++++ b/drivers/infiniband/sw/rxe/rxe.c +@@ -335,6 +335,8 @@ static int __init rxe_module_init(void) + { + int err; + ++ mark_tech_preview("Soft-RoCE Transport Driver", THIS_MODULE); ++ + /* initialize slab caches for managed objects */ + err = rxe_cache_init(); + if (err) { +-- +2.26.0 + diff --git a/0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch b/0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch new file mode 100644 index 000000000..5b6dc9de9 --- /dev/null +++ b/0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch @@ -0,0 +1,330 @@ +From 6f6d7bfde6d535941200bf7aa946634d2d738ce0 Mon Sep 17 00:00:00 2001 +From: Benjamin Tissoires +Date: Mon, 3 Apr 2017 18:18:21 +0200 +Subject: [PATCH] Input: rmi4 - remove the need for artificial IRQ in case of + HID + +The IRQ from rmi4 may interfere with the one we currently use on i2c-hid. +Given that there is already a need for an external API from rmi4 to +forward the attention data, we can, in this particular case rely on a +separate workqueue to prevent cursor jumps. + +Reported-by: Cameron Gutman +Reported-by: Thorsten Leemhuis +Reported-by: Jason Ekstrand +Tested-by: Andrew Duggan +Signed-off-by: Benjamin Tissoires +Signed-off-by: Lyude +--- + drivers/hid/hid-rmi.c | 64 ----------------- + drivers/input/rmi4/rmi_driver.c | 124 +++++++++++++++++++------------- + include/linux/rmi.h | 1 + + 3 files changed, 75 insertions(+), 114 deletions(-) + +diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c +index 8cffa84c9650..6c4e3675601a 100644 +--- a/drivers/hid/hid-rmi.c ++++ b/drivers/hid/hid-rmi.c +@@ -322,19 +322,12 @@ static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) + { + struct rmi_data *hdata = hid_get_drvdata(hdev); + struct rmi_device *rmi_dev = hdata->xport.rmi_dev; +- unsigned long flags; + + if (!(test_bit(RMI_STARTED, &hdata->flags))) + return 0; + +- local_irq_save(flags); +- + rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2); + +- generic_handle_irq(hdata->rmi_irq); +- +- local_irq_restore(flags); +- + return 1; + } + +@@ -592,56 +585,6 @@ static const struct rmi_transport_ops hid_rmi_ops = { + .reset = rmi_hid_reset, + }; + +-static void rmi_irq_teardown(void *data) +-{ +- struct rmi_data *hdata = data; +- struct irq_domain *domain = hdata->domain; +- +- if (!domain) +- return; +- +- irq_dispose_mapping(irq_find_mapping(domain, 0)); +- +- irq_domain_remove(domain); +- hdata->domain = NULL; +- hdata->rmi_irq = 0; +-} +- +-static int rmi_irq_map(struct irq_domain *h, unsigned int virq, +- irq_hw_number_t hw_irq_num) +-{ +- irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); +- +- return 0; +-} +- +-static const struct irq_domain_ops rmi_irq_ops = { +- .map = rmi_irq_map, +-}; +- +-static int rmi_setup_irq_domain(struct hid_device *hdev) +-{ +- struct rmi_data *hdata = hid_get_drvdata(hdev); +- int ret; +- +- hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1, +- &rmi_irq_ops, hdata); +- if (!hdata->domain) +- return -ENOMEM; +- +- ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata); +- if (ret) +- return ret; +- +- hdata->rmi_irq = irq_create_mapping(hdata->domain, 0); +- if (hdata->rmi_irq <= 0) { +- hid_err(hdev, "Can't allocate an IRQ\n"); +- return hdata->rmi_irq < 0 ? hdata->rmi_irq : -ENXIO; +- } +- +- return 0; +-} +- + static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) + { + struct rmi_data *data = NULL; +@@ -714,18 +657,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) + + mutex_init(&data->page_mutex); + +- ret = rmi_setup_irq_domain(hdev); +- if (ret) { +- hid_err(hdev, "failed to allocate IRQ domain\n"); +- return ret; +- } +- + if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) + rmi_hid_pdata.f30_data.disable = true; + + data->xport.dev = hdev->dev.parent; + data->xport.pdata = rmi_hid_pdata; +- data->xport.pdata.irq = data->rmi_irq; + data->xport.proto_name = "hid"; + data->xport.ops = &hid_rmi_ops; + +diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c +index 190b9974526b..27a65991de0e 100644 +--- a/drivers/input/rmi4/rmi_driver.c ++++ b/drivers/input/rmi4/rmi_driver.c +@@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status, + attn_data.data = fifo_data; + + kfifo_put(&drvdata->attn_fifo, attn_data); ++ ++ schedule_work(&drvdata->attn_work); + } + EXPORT_SYMBOL_GPL(rmi_set_attn_data); + +-static irqreturn_t rmi_irq_fn(int irq, void *dev_id) ++static void attn_callback(struct work_struct *work) + { +- struct rmi_device *rmi_dev = dev_id; +- struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); ++ struct rmi_driver_data *drvdata = container_of(work, ++ struct rmi_driver_data, ++ attn_work); + struct rmi4_attn_data attn_data = {0}; + int ret, count; + + count = kfifo_get(&drvdata->attn_fifo, &attn_data); +- if (count) { +- *(drvdata->irq_status) = attn_data.irq_status; +- drvdata->attn_data = attn_data; +- } ++ if (!count) ++ return; + +- ret = rmi_process_interrupt_requests(rmi_dev); ++ *(drvdata->irq_status) = attn_data.irq_status; ++ drvdata->attn_data = attn_data; ++ ++ ret = rmi_process_interrupt_requests(drvdata->rmi_dev); + if (ret) +- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, ++ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev, + "Failed to process interrupt request: %d\n", ret); + +- if (count) { +- kfree(attn_data.data); +- attn_data.data = NULL; +- } ++ kfree(attn_data.data); ++ attn_data.data = NULL; + + if (!kfifo_is_empty(&drvdata->attn_fifo)) +- return rmi_irq_fn(irq, dev_id); ++ schedule_work(&drvdata->attn_work); ++} ++ ++static irqreturn_t rmi_irq_fn(int irq, void *dev_id) ++{ ++ struct rmi_device *rmi_dev = dev_id; ++ int ret; ++ ++ ret = rmi_process_interrupt_requests(rmi_dev); ++ if (ret) ++ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, ++ "Failed to process interrupt request: %d\n", ret); + + return IRQ_HANDLED; + } +@@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id) + static int rmi_irq_init(struct rmi_device *rmi_dev) + { + struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev); +- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); + int irq_flags = irq_get_trigger_type(pdata->irq); + int ret; + +@@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev) + return ret; + } + +- data->enabled = true; +- + return 0; + } + +@@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake) + if (data->enabled) + goto out; + +- enable_irq(irq); +- data->enabled = true; +- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { +- retval = disable_irq_wake(irq); +- if (retval) +- dev_warn(&rmi_dev->dev, +- "Failed to disable irq for wake: %d\n", +- retval); +- } ++ if (irq) { ++ enable_irq(irq); ++ data->enabled = true; ++ if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { ++ retval = disable_irq_wake(irq); ++ if (retval) ++ dev_warn(&rmi_dev->dev, ++ "Failed to disable irq for wake: %d\n", ++ retval); ++ } + +- /* +- * Call rmi_process_interrupt_requests() after enabling irq, +- * otherwise we may lose interrupt on edge-triggered systems. +- */ +- irq_flags = irq_get_trigger_type(pdata->irq); +- if (irq_flags & IRQ_TYPE_EDGE_BOTH) +- rmi_process_interrupt_requests(rmi_dev); ++ /* ++ * Call rmi_process_interrupt_requests() after enabling irq, ++ * otherwise we may lose interrupt on edge-triggered systems. ++ */ ++ irq_flags = irq_get_trigger_type(pdata->irq); ++ if (irq_flags & IRQ_TYPE_EDGE_BOTH) ++ rmi_process_interrupt_requests(rmi_dev); ++ } else { ++ data->enabled = true; ++ } + + out: + mutex_unlock(&data->enabled_mutex); +@@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake) + goto out; + + data->enabled = false; +- disable_irq(irq); +- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { +- retval = enable_irq_wake(irq); +- if (retval) +- dev_warn(&rmi_dev->dev, +- "Failed to enable irq for wake: %d\n", +- retval); +- } +- +- /* make sure the fifo is clean */ +- while (!kfifo_is_empty(&data->attn_fifo)) { +- count = kfifo_get(&data->attn_fifo, &attn_data); +- if (count) +- kfree(attn_data.data); ++ if (irq) { ++ disable_irq(irq); ++ if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { ++ retval = enable_irq_wake(irq); ++ if (retval) ++ dev_warn(&rmi_dev->dev, ++ "Failed to enable irq for wake: %d\n", ++ retval); ++ } ++ } else { ++ /* make sure the fifo is clean */ ++ while (!kfifo_is_empty(&data->attn_fifo)) { ++ count = kfifo_get(&data->attn_fifo, &attn_data); ++ if (count) ++ kfree(attn_data.data); ++ } + } + + out: +@@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev) + irq_domain_remove(data->irqdomain); + data->irqdomain = NULL; + ++ cancel_work_sync(&data->attn_work); ++ + rmi_f34_remove_sysfs(rmi_dev); + rmi_free_function_list(rmi_dev); + +@@ -1218,9 +1236,15 @@ static int rmi_driver_probe(struct device *dev) + } + } + +- retval = rmi_irq_init(rmi_dev); +- if (retval < 0) +- goto err_destroy_functions; ++ if (pdata->irq) { ++ retval = rmi_irq_init(rmi_dev); ++ if (retval < 0) ++ goto err_destroy_functions; ++ } ++ ++ data->enabled = true; ++ ++ INIT_WORK(&data->attn_work, attn_callback); + + if (data->f01_container->dev.driver) { + /* Driver already bound, so enable ATTN now. */ +diff --git a/include/linux/rmi.h b/include/linux/rmi.h +index 7b22366d0065..307a651b2755 100644 +--- a/include/linux/rmi.h ++++ b/include/linux/rmi.h +@@ -363,6 +363,7 @@ struct rmi_driver_data { + + struct rmi4_attn_data attn_data; + DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16); ++ struct work_struct attn_work; + }; + + int rmi_register_transport_device(struct rmi_transport_dev *xport); +-- +2.26.0 + diff --git a/0001-Introduce-CONFIG_RH_DISABLE_DEPRECATED.patch b/0001-Introduce-CONFIG_RH_DISABLE_DEPRECATED.patch new file mode 100644 index 000000000..3ba0a5d0f --- /dev/null +++ b/0001-Introduce-CONFIG_RH_DISABLE_DEPRECATED.patch @@ -0,0 +1,64 @@ +From 7f1dcaa76502498b932c61acf0d3388ae9ee911b Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Wed, 13 Nov 2019 14:44:28 -0500 +Subject: [PATCH] Introduce CONFIG_RH_DISABLE_DEPRECATED + +Message-id: <20191113144431.9403-2-labbott@redhat.com> +Patchwork-id: 286080 +O-Subject: [ARK INTERNAL PATCHv2 1/4] [redhat] Introduce CONFIG_RH_DISABLE_DEPRECATED +Bugzilla: +RH-Acked-by: Don Zickus +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Jiri Benc + +For many drivers that RHEL doesn't want to support, we've typically deleted +PCI ids from the tree. This precludes those drivers from being used at all +which is fine for RHEL but a problem if we want to use a similar source base +for Fedora. Instead of just deleting IDs, introduce a config +CONFIG_RH_DISABLE_DEPRECATED. This way RHEL can remove IDs while still allowing +kernels to be built with the option off from the same source. + +Upstream Status: RHEL only +Signed-off-by: Laura Abbott +--- + Kconfig | 2 ++ + Kconfig.redhat | 17 +++++++++++++++++ + 2 files changed, 19 insertions(+) + create mode 100644 Kconfig.redhat + +diff --git a/Kconfig b/Kconfig +index e10b3ee084d4..01c0df787518 100644 +--- a/Kconfig ++++ b/Kconfig +@@ -32,3 +32,5 @@ source "lib/Kconfig" + source "lib/Kconfig.debug" + + source "Documentation/Kconfig" ++ ++source "Kconfig.redhat" +diff --git a/Kconfig.redhat b/Kconfig.redhat +new file mode 100644 +index 000000000000..733a26bd887a +--- /dev/null ++++ b/Kconfig.redhat +@@ -0,0 +1,17 @@ ++# SPDX-License-Identifier: GPL-2.0-only ++# ++# Red Hat specific options ++# ++ ++menu "Red Hat options" ++ ++config RH_DISABLE_DEPRECATED ++ bool "Remove support for deprecated features" ++ help ++ Red Hat may choose to deprecate certain features in its kernels. ++ Enable this option to remove support for hardware that is no ++ longer supported. ++ ++ Unless you want a restricted kernel, say N here. ++ ++endmenu +-- +2.26.0 + diff --git a/0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch b/0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch new file mode 100644 index 000000000..928a411db --- /dev/null +++ b/0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch @@ -0,0 +1,44 @@ +From 0e4630025e6155b15d2a1226e86b701eeb57e7f1 Mon Sep 17 00:00:00 2001 +From: Robert Holmes +Date: Tue, 23 Apr 2019 07:39:29 +0000 +Subject: [PATCH] KEYS: Make use of platform keyring for module signature + verify + +This patch completes commit 278311e417be ("kexec, KEYS: Make use of +platform keyring for signature verify") which, while adding the +platform keyring for bzImage verification, neglected to also add +this keyring for module verification. + +As such, kernel modules signed with keys from the MokList variable +were not successfully verified. + +Signed-off-by: Robert Holmes +Signed-off-by: Jeremy Cline +--- + kernel/module_signing.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/kernel/module_signing.c b/kernel/module_signing.c +index 9d9fc678c91d..84ad75a53c83 100644 +--- a/kernel/module_signing.c ++++ b/kernel/module_signing.c +@@ -38,8 +38,15 @@ int mod_verify_sig(const void *mod, struct load_info *info) + modlen -= sig_len + sizeof(ms); + info->len = modlen; + +- return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, ++ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, + VERIFY_USE_SECONDARY_KEYRING, + VERIFYING_MODULE_SIGNATURE, + NULL, NULL); ++ if (ret == -ENOKEY && IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING)) { ++ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, ++ VERIFY_USE_PLATFORM_KEYRING, ++ VERIFYING_MODULE_SIGNATURE, ++ NULL, NULL); ++ } ++ return ret; + } +-- +2.26.0 + diff --git a/0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch b/0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch new file mode 100644 index 000000000..f6236e572 --- /dev/null +++ b/0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch @@ -0,0 +1,40 @@ +From 76564a6421c9903d3e6e6497d3492c214883beea Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 2 Oct 2017 18:18:30 -0400 +Subject: [PATCH] Make get_cert_list() use efi_status_to_str() to print error + messages. + +Upstream Status: RHEL only +Signed-off-by: Peter Jones +Signed-off-by: Jeremy Cline +--- + security/integrity/platform_certs/load_uefi.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c +index 253fb9a7fc98..8c95b68d86d4 100644 +--- a/security/integrity/platform_certs/load_uefi.c ++++ b/security/integrity/platform_certs/load_uefi.c +@@ -46,7 +46,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, + return NULL; + + if (*status != EFI_BUFFER_TOO_SMALL) { +- pr_err("Couldn't get size: 0x%lx\n", *status); ++ pr_err("Couldn't get size: %s (0x%lx)\n", ++ efi_status_to_str(*status), *status); + return NULL; + } + +@@ -57,7 +58,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, + *status = efi.get_variable(name, guid, NULL, &lsize, db); + if (*status != EFI_SUCCESS) { + kfree(db); +- pr_err("Error reading db var: 0x%lx\n", *status); ++ pr_err("Error reading db var: %s (0x%lx)\n", ++ efi_status_to_str(*status), *status); + return NULL; + } + +-- +2.26.0 + diff --git a/0001-PCI-brcmstb-Wait-for-Raspberry-Pi-s-firmware-when-pr.patch b/0001-PCI-brcmstb-Wait-for-Raspberry-Pi-s-firmware-when-pr.patch new file mode 100644 index 000000000..76bd6fb1f --- /dev/null +++ b/0001-PCI-brcmstb-Wait-for-Raspberry-Pi-s-firmware-when-pr.patch @@ -0,0 +1,57 @@ +From 44c851258128353245193308b9c14793fb055a63 Mon Sep 17 00:00:00 2001 +From: Nicolas Saenz Julienne +Date: Tue, 10 Mar 2020 13:52:41 +0100 +Subject: [PATCH] PCI: brcmstb: Wait for Raspberry Pi's firmware when present + +xHCI's PCI fixup, run at the end of pcie-brcmstb's probe, depends on +RPi4's VideoCore firmware interface to be up and running. It's possible +for both initializations to race, so make sure it's available prior to +starting. + +Signed-off-by: Nicolas Saenz Julienne +Reviewed-by: Florian Fainelli +--- + drivers/pci/controller/pcie-brcmstb.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/drivers/pci/controller/pcie-brcmstb.c b/drivers/pci/controller/pcie-brcmstb.c +index 6d79d14527a6..aee84679a997 100644 +--- a/drivers/pci/controller/pcie-brcmstb.c ++++ b/drivers/pci/controller/pcie-brcmstb.c +@@ -28,6 +28,8 @@ + #include + #include + ++#include ++ + #include "../pci.h" + + /* BRCM_PCIE_CAP_REGS - Offset for the mandatory capability config regs */ +@@ -917,11 +919,24 @@ static int brcm_pcie_probe(struct platform_device *pdev) + { + struct device_node *np = pdev->dev.of_node, *msi_np; + struct pci_host_bridge *bridge; ++ struct device_node *fw_np; + struct brcm_pcie *pcie; + struct pci_bus *child; + struct resource *res; + int ret; + ++ /* ++ * We have to wait for the Raspberry Pi's firmware interface to be up ++ * as some PCI fixups depend on it. ++ */ ++ fw_np = of_find_compatible_node(NULL, NULL, ++ "raspberrypi,bcm2835-firmware"); ++ if (fw_np && !rpi_firmware_get(fw_np)) { ++ of_node_put(fw_np); ++ return -EPROBE_DEFER; ++ } ++ of_node_put(fw_np); ++ + bridge = devm_pci_alloc_host_bridge(&pdev->dev, sizeof(*pcie)); + if (!bridge) + return -ENOMEM; +-- +2.26.0 + diff --git a/0001-Pull-the-RHEL-version-defines-out-of-the-Makefile.patch b/0001-Pull-the-RHEL-version-defines-out-of-the-Makefile.patch new file mode 100644 index 000000000..5e56690f2 --- /dev/null +++ b/0001-Pull-the-RHEL-version-defines-out-of-the-Makefile.patch @@ -0,0 +1,43 @@ +From a99885a5e77af594dfdce586cc83e5911d8401ce Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Tue, 17 Sep 2019 17:11:03 +0000 +Subject: [PATCH] Pull the RHEL version defines out of the Makefile + +This is done via the kernel-put-RHEL-info-into-generated-headers.patch +in the rhpatches branch. + +Signed-off-by: Jeremy Cline +--- + Makefile | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +diff --git a/Makefile b/Makefile +index 48a7abae02d2..2d826a14824a 100644 +--- a/Makefile ++++ b/Makefile +@@ -16,6 +16,7 @@ PHONY := _all + _all: + + # Set RHEL variables ++# Use this spot to avoid future merge conflicts + include Makefile.rhelver + + # We are using a recursive build, so we need to do a little thinking +@@ -1172,13 +1173,7 @@ endef + define filechk_version.h + echo \#define LINUX_VERSION_CODE $(shell \ + expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \ +- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \ +- echo '#define RHEL_MAJOR $(RHEL_MAJOR)'; \ +- echo '#define RHEL_MINOR $(RHEL_MINOR)'; \ +- echo '#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))'; \ +- echo '#define RHEL_RELEASE_CODE \ +- $(shell expr $(RHEL_MAJOR) \* 256 + $(RHEL_MINOR))'; \ +- echo '#define RHEL_RELEASE "$(RHEL_RELEASE)"' ++ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' + endef + + $(version_h): FORCE +-- +2.26.0 + diff --git a/0001-Removing-Obsolete-hba-pci-ids-from-rhel8.patch b/0001-Removing-Obsolete-hba-pci-ids-from-rhel8.patch new file mode 100644 index 000000000..b67be86c0 --- /dev/null +++ b/0001-Removing-Obsolete-hba-pci-ids-from-rhel8.patch @@ -0,0 +1,113 @@ +From 281cc9dd2a7e33adf59508983bcf235d5f117054 Mon Sep 17 00:00:00 2001 +From: Dick Kennedy +Date: Fri, 14 Feb 2020 15:09:41 -0500 +Subject: [PATCH] Removing Obsolete hba pci-ids from rhel8 + +Message-id: <1525206184-20470-1-git-send-email-dkennedy@redhat.com> +Patchwork-id: 212089 +O-Subject: [RHEL8 PATCH e-stor] Removing Obsolete hba pci-ids from rhel8. +Bugzilla: 1572321 +RH-Acked-by: Chris Leech +RH-Acked-by: Jarod Wilson + +These adapters printed an Obsolete Unsupported message is rhel7. They +are being removed for rhel8 + +brew-id: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID^U948800 +bugzilla: 1572321 +tested on: rhel-storage-44 and on rhel-storage-07 + +RHEL Specific + +Upstream Status: RHEL only +Signed-off-by: Herton R. Krzesinski + +Backport Notes: Simplify by filtering using pci_ids +- +--- + drivers/scsi/lpfc/lpfc_ids.h | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/drivers/scsi/lpfc/lpfc_ids.h b/drivers/scsi/lpfc/lpfc_ids.h +index d48414e295a0..ba0e384412c9 100644 +--- a/drivers/scsi/lpfc/lpfc_ids.h ++++ b/drivers/scsi/lpfc/lpfc_ids.h +@@ -24,6 +24,7 @@ + #include + + const struct pci_device_id lpfc_id_table[] = { ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_VIPER, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FIREFLY, +@@ -54,14 +55,19 @@ const struct pci_device_id lpfc_id_table[] = { + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_DCSP, + PCI_ANY_ID, PCI_ANY_ID, }, ++#endif + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BMID, + PCI_ANY_ID, PCI_ANY_ID, }, ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BSMB, + PCI_ANY_ID, PCI_ANY_ID, }, ++#endif + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR, + PCI_ANY_ID, PCI_ANY_ID, }, ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HORNET, + PCI_ANY_ID, PCI_ANY_ID, }, ++#endif + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_SCSP, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_DCSP, +@@ -70,6 +76,7 @@ const struct pci_device_id lpfc_id_table[] = { + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZSMB, + PCI_ANY_ID, PCI_ANY_ID, }, ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_TFLY, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP101, +@@ -80,6 +87,7 @@ const struct pci_device_id lpfc_id_table[] = { + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LPE11000S, + PCI_ANY_ID, PCI_ANY_ID, }, ++#endif + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_MID, +@@ -92,6 +100,7 @@ const struct pci_device_id lpfc_id_table[] = { + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_S, + PCI_ANY_ID, PCI_ANY_ID, }, ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_VF, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_PF, +@@ -102,18 +111,23 @@ const struct pci_device_id lpfc_id_table[] = { + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_SERVERENGINE, PCI_DEVICE_ID_TOMCAT, + PCI_ANY_ID, PCI_ANY_ID, }, ++#endif + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FALCON, + PCI_ANY_ID, PCI_ANY_ID, }, ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BALIUS, + PCI_ANY_ID, PCI_ANY_ID, }, ++#endif + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FC, + PCI_ANY_ID, PCI_ANY_ID, }, ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FC_VF, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE_VF, + PCI_ANY_ID, PCI_ANY_ID, }, ++#endif + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G6_FC, + PCI_ANY_ID, PCI_ANY_ID, }, + {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G7_FC, +-- +2.26.0 + diff --git a/0001-Rename-RH_DISABLE_DEPRECATED-to-RHEL_DIFFERENCES.patch b/0001-Rename-RH_DISABLE_DEPRECATED-to-RHEL_DIFFERENCES.patch new file mode 100644 index 000000000..82190bed9 --- /dev/null +++ b/0001-Rename-RH_DISABLE_DEPRECATED-to-RHEL_DIFFERENCES.patch @@ -0,0 +1,81 @@ +From 23e82748e63abb1ca113fa0a1a4129da49e7b623 Mon Sep 17 00:00:00 2001 +From: Don Zickus +Date: Tue, 3 Mar 2020 09:35:28 -0500 +Subject: [PATCH] Rename RH_DISABLE_DEPRECATED to RHEL_DIFFERENCES + +The intent of RH_DISABLE_DEPRECATED was to provide Red Hat a +simple way to disable drivers it did not want to support in RHEL. + +As the config option was applied to more drivers and infra, it became +clear the option was being used for not only deprecating drivers (which +implied limited support) to disabling drivers (implying no support). + +Using the word 'deprecated' seemed confusing in the second scenario. +Rename the option to be more generic and useable across more parts +of the kernel tree. + +The new wording is RHEL_DIFFERENCES. + +Upstream Status: RHEL only +--- + Kconfig.redhat | 2 +- + arch/x86/kernel/setup.c | 2 +- + include/linux/kernel.h | 2 +- + kernel/Makefile | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/Kconfig.redhat b/Kconfig.redhat +index 733a26bd887a..effb81d04bfd 100644 +--- a/Kconfig.redhat ++++ b/Kconfig.redhat +@@ -5,7 +5,7 @@ + + menu "Red Hat options" + +-config RH_DISABLE_DEPRECATED ++config RHEL_DIFFERENCES + bool "Remove support for deprecated features" + help + Red Hat may choose to deprecate certain features in its kernels. +diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c +index b6f5510f3d91..0fd824c4162d 100644 +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -1366,7 +1366,7 @@ void __init setup_arch(char **cmdline_p) + efi_apply_memmap_quirks(); + #endif + +-#ifdef CONFIG_RH_DISABLE_DEPRECATED ++#ifdef CONFIG_RHEL_DIFFERENCES + rh_check_supported(); + #endif + +diff --git a/include/linux/kernel.h b/include/linux/kernel.h +index 8588bb62e74c..b372b2daae7f 100644 +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -1049,7 +1049,7 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } + + struct module; + +-#ifdef CONFIG_RH_DISABLE_DEPRECATED ++#ifdef CONFIG_RHEL_DIFFERENCES + void mark_hardware_unsupported(const char *msg); + void mark_hardware_deprecated(const char *msg); + void mark_tech_preview(const char *msg, struct module *mod); +diff --git a/kernel/Makefile b/kernel/Makefile +index e62be9e51064..b1010f42dd18 100644 +--- a/kernel/Makefile ++++ b/kernel/Makefile +@@ -12,7 +12,7 @@ obj-y = fork.o exec_domain.o panic.o \ + notifier.o ksysfs.o cred.o reboot.o \ + async.o range.o smpboot.o ucount.o + +-obj-$(CONFIG_RH_DISABLE_DEPRECATED) += rh_taint.o ++obj-$(CONFIG_RHEL_DIFFERENCES) += rh_taint.o + + obj-$(CONFIG_MODULES) += kmod.o + obj-$(CONFIG_MULTIUSER) += groups.o +-- +2.26.0 + diff --git a/0001-USB-pci-quirks-Add-Raspberry-Pi-4-quirk.patch b/0001-USB-pci-quirks-Add-Raspberry-Pi-4-quirk.patch new file mode 100644 index 000000000..a59f99c73 --- /dev/null +++ b/0001-USB-pci-quirks-Add-Raspberry-Pi-4-quirk.patch @@ -0,0 +1,72 @@ +From 998e1590b5b2441d9bd381f7cab24c3644ccd8f4 Mon Sep 17 00:00:00 2001 +From: Nicolas Saenz Julienne +Date: Tue, 10 Mar 2020 13:52:42 +0100 +Subject: [PATCH] USB: pci-quirks: Add Raspberry Pi 4 quirk + +On the Raspberry Pi 4, after a PCI reset, VL805's firmware may either be +loaded directly from an EEPROM or, if not present, by the SoC's +VideCore. Inform VideCore that VL805 was just reset. + +Also, as this creates a dependency between XHCI_PCI and VideoCore's +firmware interface, reflect that on the firmware interface Kconfg. + +Signed-off-by: Nicolas Saenz Julienne +--- + drivers/firmware/Kconfig | 1 + + drivers/usb/host/pci-quirks.c | 16 ++++++++++++++++ + 2 files changed, 17 insertions(+) + +diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig +index 8007d4aa76dc..7ca346d3d337 100644 +--- a/drivers/firmware/Kconfig ++++ b/drivers/firmware/Kconfig +@@ -180,6 +180,7 @@ config ISCSI_IBFT + config RASPBERRYPI_FIRMWARE + tristate "Raspberry Pi Firmware Driver" + depends on BCM2835_MBOX ++ default XHCI_PCI + help + This option enables support for communicating with the firmware on the + Raspberry Pi. +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c +index beb2efa71341..0dc34668bb2a 100644 +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -16,6 +16,9 @@ + #include + #include + #include ++ ++#include ++ + #include "pci-quirks.h" + #include "xhci-ext-caps.h" + +@@ -1243,11 +1246,24 @@ static void quirk_usb_handoff_xhci(struct pci_dev *pdev) + + static void quirk_usb_early_handoff(struct pci_dev *pdev) + { ++ int ret; ++ + /* Skip Netlogic mips SoC's internal PCI USB controller. + * This device does not need/support EHCI/OHCI handoff + */ + if (pdev->vendor == 0x184e) /* vendor Netlogic */ + return; ++ ++ if (pdev->vendor == PCI_VENDOR_ID_VIA && pdev->device == 0x3483) { ++ ret = rpi_firmware_init_vl805(pdev); ++ if (ret) { ++ /* Firmware might be outdated, or something failed */ ++ dev_warn(&pdev->dev, ++ "Failed to load VL805's firmware: %d. Will continue to attempt to work, but bad things might happen. You should fix this...\n", ++ ret); ++ } ++ } ++ + if (pdev->class != PCI_CLASS_SERIAL_USB_UHCI && + pdev->class != PCI_CLASS_SERIAL_USB_OHCI && + pdev->class != PCI_CLASS_SERIAL_USB_EHCI && +-- +2.26.0 + diff --git a/0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch b/0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch new file mode 100644 index 000000000..d5b3677fe --- /dev/null +++ b/0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch @@ -0,0 +1,75 @@ +From e93a53852531a3ff04754642704603cad2f1c13d Mon Sep 17 00:00:00 2001 +From: Robert Richter +Date: Thu, 7 Jun 2018 22:59:32 -0400 +Subject: [PATCH] Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon + +Message-id: <1528412373-19128-2-git-send-email-rrichter@redhat.com> +Patchwork-id: 220950 +O-Subject: [RHEL-8.0 BZ 1563590 v2 1/2] PCI: Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon +Bugzilla: 1563590 +RH-Acked-by: Dean Nelson +RH-Acked-by: Mark Langsdorf +RH-Acked-by: Mark Salter + +From: Ashok Kumar Sekar + +PCI BAR 5 is not setup correctly for the on-board AHCI +controller on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 +by using BAR 4's resources which are populated correctly but NOT used +by the AHCI controller actually. + +RHEL-only: + +Both patches are in RHEL-7.6 also. Inclusion of the patches into RHEL-8 +was discussed. Since there are partners with Ax system configurations it +was decided to carry them in RHEL8 too. See: + + https://bugzilla.redhat.com/show_bug.cgi?id=1563590#c1 + +Upstream Status: RHEL only +Signed-off-by: Ashok Kumar Sekar +Signed-off-by: Jayachandran C +Signed-off-by: Robert Richter +Signed-off-by: Herton R. Krzesinski +--- + drivers/pci/quirks.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c +index 28c9a2409c50..ab4cae542b04 100644 +--- a/drivers/pci/quirks.c ++++ b/drivers/pci/quirks.c +@@ -4183,6 +4183,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000, + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084, + quirk_bridge_cavm_thrx2_pcie_root); + ++/* ++ * PCI BAR 5 is not setup correctly for the on-board AHCI controller ++ * on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 by ++ * using BAR 4's resources which are populated correctly and NOT ++ * actually used by the AHCI controller. ++ */ ++static void quirk_fix_vulcan_ahci_bars(struct pci_dev *dev) ++{ ++ struct resource *r = &dev->resource[4]; ++ ++ if (!(r->flags & IORESOURCE_MEM) || (r->start == 0)) ++ return; ++ ++ /* Set BAR5 resource to BAR4 */ ++ dev->resource[5] = *r; ++ ++ /* Update BAR5 in pci config space */ ++ pci_write_config_dword(dev, PCI_BASE_ADDRESS_5, r->start); ++ ++ /* Clear BAR4's resource */ ++ memset(r, 0, sizeof(*r)); ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9027, quirk_fix_vulcan_ahci_bars); ++ + /* + * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero) + * class code. Fix it. +-- +2.26.0 + diff --git a/0001-aacraid-Remove-depreciated-device-and-vendor-PCI-id-.patch b/0001-aacraid-Remove-depreciated-device-and-vendor-PCI-id-.patch new file mode 100644 index 000000000..5dd51c7d0 --- /dev/null +++ b/0001-aacraid-Remove-depreciated-device-and-vendor-PCI-id-.patch @@ -0,0 +1,51 @@ +From f5388f57ed6302459fc47be74a76b9ff27fb822b Mon Sep 17 00:00:00 2001 +From: Raghava Aditya Renukunta +Date: Thu, 2 Jan 2020 14:24:38 -0500 +Subject: [PATCH] aacraid: Remove depreciated device and vendor PCI id's + +Message-id: <20180315040041.9449.8525.stgit@dhcp187-32.khw.lab.eng.bos.redhat.com> +Patchwork-id: 206793 +O-Subject: [RHEL8 e-stor PATCH] scsi: aacraid: Remove depreciated device and vendor PCI id's +Bugzilla: 1495307 +RH-Acked-by: Maurizio Lombardi +RH-Acked-by: Tomas Henzl + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id95307 +Brew Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID552286 +Upstream Status: N/A (RHEL 8 internal) +Tested: Code Review + +Remove Vendor PCI ID and Device PCI ID of depreciated devices from +aacraid pci table, preventing these device from attaching to the aacraid +driver. + +Upstream Status: RHEL only +Signed-off-by: Raghava Aditya Renukunta +Signed-off-by: Herton R. Krzesinski +--- + drivers/scsi/aacraid/linit.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c +index 83a60b0a8cd8..9efb63c83234 100644 +--- a/drivers/scsi/aacraid/linit.c ++++ b/drivers/scsi/aacraid/linit.c +@@ -78,6 +78,7 @@ char aac_driver_version[] = AAC_DRIVER_FULL_VERSION; + * Note: The last field is used to index into aac_drivers below. + */ + static const struct pci_device_id aac_pci_tbl[] = { ++#ifndef CONFIG_RHEL_DIFFERENCES + { 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */ + { 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */ + { 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */ +@@ -145,6 +146,7 @@ static const struct pci_device_id aac_pci_tbl[] = { + { 0x9005, 0x0285, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 59 }, /* Adaptec Catch All */ + { 0x9005, 0x0286, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 60 }, /* Adaptec Rocket Catch All */ + { 0x9005, 0x0288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 61 }, /* Adaptec NEMER/ARK Catch All */ ++#endif + { 0x9005, 0x028b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 62 }, /* Adaptec PMC Series 6 (Tupelo) */ + { 0x9005, 0x028c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 63 }, /* Adaptec PMC Series 7 (Denali) */ + { 0x9005, 0x028d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 64 }, /* Adaptec PMC Series 8 */ +-- +2.26.0 + diff --git a/0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch b/0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch new file mode 100644 index 000000000..5c490bcb0 --- /dev/null +++ b/0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch @@ -0,0 +1,52 @@ +From 588d2ca996eb15310f0f70131ce1049284ddba8b Mon Sep 17 00:00:00 2001 +From: Mark Salter +Date: Thu, 10 May 2018 17:38:44 -0400 +Subject: [PATCH] aarch64: acpi scan: Fix regression related to X-Gene UARTs + +Message-id: <20180510173844.29580-4-msalter@redhat.com> +Patchwork-id: 214381 +O-Subject: [RHEL-8 BZ1519554 3/3] aarch64: acpi scan: Fix regression related to X-Gene UARTs +Bugzilla: 1519554 +RH-Acked-by: Al Stone +RH-Acked-by: Tony Camuso + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1519554 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16144520 + +Commit e361d1f85855 ("ACPI / scan: Fix enumeration for special UART +devices") caused a regression with some X-Gene based platforms (Mustang +and M400) with invalid DSDT. The DSDT makes it appear that the UART +device is also a slave device attached to itself. With the above commit +the UART won't be enumerated by ACPI scan (slave serial devices shouldn't +be). So check for X-Gene UART device and skip slace device check on it. + +Upstream Status: RHEL only +Signed-off-by: Mark Salter +Signed-off-by: Herton R. Krzesinski +--- + drivers/acpi/scan.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c +index 6d3448895382..221255007dc8 100644 +--- a/drivers/acpi/scan.c ++++ b/drivers/acpi/scan.c +@@ -1563,6 +1563,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) + if (!acpi_match_device_ids(device, i2c_multi_instantiate_ids)) + return false; + ++ /* ++ * Firmware on some arm64 X-Gene platforms will make the UART ++ * device appear as both a UART and a slave of that UART. Just ++ * bail out here for X-Gene UARTs. ++ */ ++ if (IS_ENABLED(CONFIG_ARM64) && ++ !strcmp(acpi_device_hid(device), "APMC0D08")) ++ return false; ++ + INIT_LIST_HEAD(&resource_list); + acpi_dev_get_resources(device, &resource_list, + acpi_check_serial_bus_slave, +-- +2.26.0 + diff --git a/0001-acpi-prefer-booting-with-ACPI-over-DTS.patch b/0001-acpi-prefer-booting-with-ACPI-over-DTS.patch new file mode 100644 index 000000000..e3116f241 --- /dev/null +++ b/0001-acpi-prefer-booting-with-ACPI-over-DTS.patch @@ -0,0 +1,56 @@ +From 1f5dcf4610aa214af0eb1d34c09bdf85fd10ef2b Mon Sep 17 00:00:00 2001 +From: Mark Salter +Date: Fri, 11 May 2018 21:01:17 -0400 +Subject: [PATCH] acpi: prefer booting with ACPI over DTS + +Message-id: <20180511210117.10457-1-msalter@redhat.com> +Patchwork-id: 214708 +O-Subject: [RHEL-8 BZ1576869] [RHEL only] acpi: prefer booting with ACPI over DTS +Bugzilla: 1576869 +RH-Acked-by: Jonathan Toppins +RH-Acked-by: Tony Camuso +RH-Acked-by: Bhupesh Sharma +RH-Acked-by: Dean Nelson + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1576869 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16208479 +Testing: Verified kernel defaults to ACPI on Mustang + +From: Jonathan Toppins + + This patch forces ACPI boot tables to be preferred over DTS. + + Currently for ACPI to be used a user either has to set acpi=on on the + kernel command line or make sure any device tree passed to the kernel + is empty. If the dtb passed to the kernel is non-empty then device-tree + will be chosen as the boot method of choice. + + RHEL does not wish to support this boot method so change table boot + preferences to use ACPI. In the event ACPI table checks fail the kernel + will fallback to using DTS to boot. + + Signed-off-by: Jonathan Toppins + +Upstream Status: RHEL only +Signed-off-by: Mark Salter +Signed-off-by: Herton R. Krzesinski +--- + arch/arm64/kernel/acpi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c +index a100483b47c4..29f693734edb 100644 +--- a/arch/arm64/kernel/acpi.c ++++ b/arch/arm64/kernel/acpi.c +@@ -39,7 +39,7 @@ int acpi_pci_disabled = 1; /* skip ACPI PCI scan and IRQ initialization */ + EXPORT_SYMBOL(acpi_pci_disabled); + + static bool param_acpi_off __initdata; +-static bool param_acpi_on __initdata; ++static bool param_acpi_on __initdata = true; + static bool param_acpi_force __initdata; + + static int __init parse_acpi(char *arg) +-- +2.26.0 + diff --git a/0001-add-Red-Hat-specific-taint-flags.patch b/0001-add-Red-Hat-specific-taint-flags.patch new file mode 100644 index 000000000..21592f7dc --- /dev/null +++ b/0001-add-Red-Hat-specific-taint-flags.patch @@ -0,0 +1,83 @@ +From 404fea0d6f78c71d1b1f313ab98eb7b2645424cb Mon Sep 17 00:00:00 2001 +From: Eugene Syromiatnikov +Date: Thu, 14 Jun 2018 16:35:59 -0400 +Subject: [PATCH] add Red Hat-specific taint flags + +Message-id: <56f71e5f8cf63afd0cdb1c4550c625cc90d59a75.1528991395.git.esyr@redhat.com> +Patchwork-id: 8249 +O-Subject: [kernel team] [RHEL8 PATCH v4 1/5] kernel: add Red Hat-specific taint flags +Bugzilla: 1559877 +RH-Acked-by: Jiri Benc +RH-Acked-by: Jesper Dangaard Brouer + +Based on RHEL 7 commit "Backport RH specific TAINT flags" by Prarit +Bhargava. + +Upstream Status: RHEL only +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1559877 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16716594 +Signed-off-by: Eugene Syromiatnikov +Signed-off-by: Herton R. Krzesinski +--- + include/linux/kernel.h | 19 ++++++++++++++++++- + kernel/panic.c | 14 ++++++++++++++ + 2 files changed, 32 insertions(+), 1 deletion(-) + +diff --git a/include/linux/kernel.h b/include/linux/kernel.h +index 2cb1c4fea0c9..c041d4e950f4 100644 +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -595,7 +595,24 @@ extern enum system_states { + #define TAINT_LIVEPATCH 15 + #define TAINT_AUX 16 + #define TAINT_RANDSTRUCT 17 +-#define TAINT_FLAGS_COUNT 18 ++/* Start of Red Hat-specific taint flags */ ++#define TAINT_18 18 ++#define TAINT_19 19 ++#define TAINT_20 20 ++#define TAINT_21 21 ++#define TAINT_22 22 ++#define TAINT_23 23 ++#define TAINT_24 24 ++#define TAINT_25 25 ++#define TAINT_26 26 ++#define TAINT_27 27 ++/* Bits 28 - 31 are reserved for Red Hat use only */ ++#define TAINT_RESERVED28 28 ++#define TAINT_RESERVED29 29 ++#define TAINT_RESERVED30 30 ++#define TAINT_RESERVED31 31 ++/* End of Red Hat-specific taint flags */ ++#define TAINT_FLAGS_COUNT 32 + + struct taint_flag { + char c_true; /* character printed when tainted */ +diff --git a/kernel/panic.c b/kernel/panic.c +index b69ee9e76cb2..02f9b2c36cc1 100644 +--- a/kernel/panic.c ++++ b/kernel/panic.c +@@ -376,6 +376,20 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = { + [ TAINT_LIVEPATCH ] = { 'K', ' ', true }, + [ TAINT_AUX ] = { 'X', ' ', true }, + [ TAINT_RANDSTRUCT ] = { 'T', ' ', true }, ++ [ TAINT_18 ] = { '?', '-', false }, ++ [ TAINT_19 ] = { '?', '-', false }, ++ [ TAINT_20 ] = { '?', '-', false }, ++ [ TAINT_21 ] = { '?', '-', false }, ++ [ TAINT_22 ] = { '?', '-', false }, ++ [ TAINT_23 ] = { '?', '-', false }, ++ [ TAINT_24 ] = { '?', '-', false }, ++ [ TAINT_25 ] = { '?', '-', false }, ++ [ TAINT_26 ] = { '?', '-', false }, ++ [ TAINT_27 ] = { '?', '-', false }, ++ [ TAINT_RESERVED28 ] = { '?', '-', false }, ++ [ TAINT_RESERVED29 ] = { '?', '-', false }, ++ [ TAINT_RESERVED30 ] = { '?', '-', false }, ++ [ TAINT_RESERVED31 ] = { '?', '-', false }, + }; + + /** +-- +2.26.0 + diff --git a/0001-add-pci_hw_vendor_status.patch b/0001-add-pci_hw_vendor_status.patch new file mode 100644 index 000000000..5d28a72c5 --- /dev/null +++ b/0001-add-pci_hw_vendor_status.patch @@ -0,0 +1,96 @@ +From 85b488a5a3ae9caa080e92d147b18125c1838d6e Mon Sep 17 00:00:00 2001 +From: Maurizio Lombardi +Date: Mon, 18 Jun 2018 12:51:25 -0400 +Subject: [PATCH] add pci_hw_vendor_status() + +Message-id: <1529326285-28560-1-git-send-email-mlombard@redhat.com> +Patchwork-id: 222337 +O-Subject: [RHEL8 PATCH] pci: add pci_hw_vendor_status() +Bugzilla: 1590829 +RH-Acked-by: Tomas Henzl +RH-Acked-by: Prarit Bhargava + +This patch adds pci_hw_vendor_status() like in RHEL7 which should be called +during the driver's probe to identify deprecated devices. + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1590829 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=16761315 + +See RHEL7 commits e0dddd9a63403ec82077ed410074fc6485873d4b and +3fcddde5ddf4b190c84ce9d83d56a75137513bd7 + +RHEL_only. + +Upstream Status: RHEL only +Signed-off-by: Maurizio Lombardi +Signed-off-by: Herton R. Krzesinski +--- + drivers/pci/pci-driver.c | 29 +++++++++++++++++++++++++++++ + include/linux/pci.h | 4 ++++ + 2 files changed, 33 insertions(+) + +diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c +index 0454ca0e4e3f..5cc490b821be 100644 +--- a/drivers/pci/pci-driver.c ++++ b/drivers/pci/pci-driver.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include "pci.h" + #include "pcie/portdrv.h" + +@@ -278,6 +279,34 @@ static const struct pci_device_id *pci_match_device(struct pci_driver *drv, + return found_id; + } + ++/** ++ * pci_hw_vendor_status - Tell if a PCI device is supported by the HW vendor ++ * @ids: array of PCI device id structures to search in ++ * @dev: the PCI device structure to match against ++ * ++ * Used by a driver to check whether this device is in its list of unsupported ++ * devices. Returns the matching pci_device_id structure or %NULL if there is ++ * no match. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++const struct pci_device_id *pci_hw_vendor_status( ++ const struct pci_device_id *ids, ++ struct pci_dev *dev) ++{ ++ char devinfo[64]; ++ const struct pci_device_id *ret = pci_match_id(ids, dev); ++ ++ if (ret) { ++ snprintf(devinfo, sizeof(devinfo), "%s %s", ++ dev_driver_string(&dev->dev), dev_name(&dev->dev)); ++ mark_hardware_deprecated(devinfo); ++ } ++ ++ return ret; ++} ++EXPORT_SYMBOL(pci_hw_vendor_status); ++ + struct drv_dev_and_id { + struct pci_driver *drv; + struct pci_dev *dev; +diff --git a/include/linux/pci.h b/include/linux/pci.h +index 83ce1cdf5676..88397dd562d9 100644 +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -1397,6 +1397,10 @@ int pci_add_dynid(struct pci_driver *drv, + unsigned long driver_data); + const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, + struct pci_dev *dev); ++/* Reserved for Internal Red Hat use only */ ++const struct pci_device_id *pci_hw_vendor_status( ++ const struct pci_device_id *ids, ++ struct pci_dev *dev); + int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, + int pass); + +-- +2.26.0 + diff --git a/0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch b/0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch new file mode 100644 index 000000000..b43284587 --- /dev/null +++ b/0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch @@ -0,0 +1,89 @@ +From 432b67a05003234c7b1db6a2355c6cff546e29d8 Mon Sep 17 00:00:00 2001 +From: Robert Richter +Date: Thu, 7 Jun 2018 22:59:33 -0400 +Subject: [PATCH] ahci: thunderx2: Fix for errata that affects stop engine + +Message-id: <1528412373-19128-3-git-send-email-rrichter@redhat.com> +Patchwork-id: 220952 +O-Subject: [RHEL-8.0 BZ 1563590 v2 2/2] ahci: thunderx2: Fix for errata that affects stop engine +Bugzilla: 1563590 +RH-Acked-by: Dean Nelson +RH-Acked-by: Mark Langsdorf +RH-Acked-by: Mark Salter + +From: Jayachandran C + +Apply workaround for this errata: + Synopsis: Resetting PxCMD.ST may hang the SATA device + + Description: An internal ping-pong buffer state is not reset + correctly for an PxCMD.ST=0 command for a SATA channel. This + may cause the SATA interface to hang when a PxCMD.ST=0 command + is received. + + Workaround: A SATA_BIU_CORE_ENABLE.sw_init_bsi must be asserted + by the driver whenever the PxCMD.ST needs to be de-asserted. This + will reset both the ports. So, it may not always work in a 2 + channel SATA system. + + Resolution: Fix in B0. + +Add the code to ahci_stop_engine() to do this. It is not easy to +stop the other "port" since it is associated with a different AHCI +interface. Please note that with this fix, SATA reset does not +hang any more, but it can cause failures on the other interface +if that is in active use. + +Unfortunately, we have nothing other the the CPU ID to check if the +SATA block has this issue. + +RHEL-only: + +Both patches are in RHEL-7.6 also. Inclusion of the patches into RHEL-8 +was discussed. Since there are partners with Ax system configurations it +was decided to carry them in RHEL8 too. See: + + https://bugzilla.redhat.com/show_bug.cgi?id=1563590#c1 + +[v3 with new delays] +Signed-off-by: Jayachandran C + +Upstream Status: RHEL only +Signed-off-by: Robert Richter +Signed-off-by: Herton R. Krzesinski +--- + drivers/ata/libahci.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c +index ea5bf5f4cbed..71c55cae27ac 100644 +--- a/drivers/ata/libahci.c ++++ b/drivers/ata/libahci.c +@@ -666,6 +666,24 @@ int ahci_stop_engine(struct ata_port *ap) + tmp &= ~PORT_CMD_START; + writel(tmp, port_mmio + PORT_CMD); + ++#ifdef CONFIG_ARM64 ++ /* Rev Ax of Cavium CN99XX needs a hack for port stop */ ++ if (dev_is_pci(ap->host->dev) && ++ to_pci_dev(ap->host->dev)->vendor == 0x14e4 && ++ to_pci_dev(ap->host->dev)->device == 0x9027 && ++ midr_is_cpu_model_range(read_cpuid_id(), ++ MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN), ++ MIDR_CPU_VAR_REV(0, 0), ++ MIDR_CPU_VAR_REV(0, MIDR_REVISION_MASK))) { ++ tmp = readl(hpriv->mmio + 0x8000); ++ udelay(100); ++ writel(tmp | (1 << 26), hpriv->mmio + 0x8000); ++ udelay(100); ++ writel(tmp & ~(1 << 26), hpriv->mmio + 0x8000); ++ dev_warn(ap->host->dev, "CN99XX SATA reset workaround applied\n"); ++ } ++#endif ++ + /* wait for engine to stop. This could be as long as 500 msec */ + tmp = ata_wait_register(ap, port_mmio + PORT_CMD, + PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500); +-- +2.26.0 + diff --git a/0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch b/0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch new file mode 100644 index 000000000..f7c85906e --- /dev/null +++ b/0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch @@ -0,0 +1,38 @@ +From 69d2216d9047c20e235ff8545ab1b21236207f7a Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Tue, 1 Oct 2019 15:51:23 +0000 +Subject: [PATCH] arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT + +Message-id: <20191001181256.22935-1-jcline@redhat.com> +Patchwork-id: 275498 +O-Subject: [ARK INTERNAL PATCH] [ARK INTERNAL PATCH] [redhat] Add patch + to drop the EXPERT setting from ARM64_FORCE_52BIT +Bugzilla: +RH-Acked-by: Laura Abbott + +We don't turn on EXPERT as there are few settings we actually want to +mess with. Remove the dependency for ARM64_FORCE_52BIT as we do want +that on in debug builds to help find 52-bit bugs. + +Upstream Status: RHEL only +Signed-off-by: Jeremy Cline +--- + arch/arm64/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig +index 40fb05d96c60..9e87f5847c92 100644 +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -857,7 +857,7 @@ endchoice + + config ARM64_FORCE_52BIT + bool "Force 52-bit virtual addresses for userspace" +- depends on ARM64_VA_BITS_52 && EXPERT ++ depends on ARM64_VA_BITS_52 + help + For systems with 52-bit userspace VAs enabled, the kernel will attempt + to maintain compatibility with older software by providing 48-bit VAs +-- +2.26.0 + diff --git a/0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch b/0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch new file mode 100644 index 000000000..425a7d5f5 --- /dev/null +++ b/0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch @@ -0,0 +1,31 @@ +From a7d3d6106d6dfa3aa6e914d5034821913f7893cc Mon Sep 17 00:00:00 2001 +From: Jon Masters +Date: Thu, 18 Jul 2019 15:47:26 -0400 +Subject: [PATCH] arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT + +We will use this to force CONFIG_HIGHPTE off on LPAE for now + +Signed-off-by: Jon Masters +--- + arch/arm/Kconfig | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index 66a04f6f4775..7b63103f088c 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -1542,9 +1542,9 @@ config HIGHMEM + If unsure, say n. + + config HIGHPTE +- bool "Allocate 2nd-level pagetables from highmem" if EXPERT ++ bool "Allocate 2nd-level pagetables from highmem" + depends on HIGHMEM +- default y ++ default n + help + The VM uses one page of physical memory for each page table. + For systems with a lot of processes, this can use a lot of +-- +2.26.0 + diff --git a/0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch b/0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch new file mode 100644 index 000000000..9852437da --- /dev/null +++ b/0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch @@ -0,0 +1,81 @@ +From a0353090b0ff53887acffcce47d90f634c12dfc8 Mon Sep 17 00:00:00 2001 +From: Icenowy Zheng +Date: Mon, 16 Mar 2020 21:35:03 +0800 +Subject: [PATCH] arm64: allwinner: dts: a64: add LCD-related device nodes for + PinePhone + +PinePhone uses PWM backlight and a XBD599 LCD panel over DSI for +display. + +Add its device nodes. + +Signed-off-by: Icenowy Zheng +--- + .../dts/allwinner/sun50i-a64-pinephone.dtsi | 37 +++++++++++++++++++ + 1 file changed, 37 insertions(+) + +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi +index cefda145c3c9..96d9150423e0 100644 +--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi ++++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi +@@ -16,6 +16,15 @@ aliases { + serial0 = &uart0; + }; + ++ backlight: backlight { ++ compatible = "pwm-backlight"; ++ pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>; ++ brightness-levels = <0 16 18 20 22 24 26 29 32 35 38 42 46 51 56 62 68 75 83 91 100>; ++ default-brightness-level = <15>; ++ enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ ++ power-supply = <®_ldo_io0>; ++ }; ++ + chosen { + stdout-path = "serial0:115200n8"; + }; +@@ -84,6 +93,30 @@ &dai { + status = "okay"; + }; + ++&de { ++ status = "okay"; ++}; ++ ++&dphy { ++ status = "okay"; ++}; ++ ++&dsi { ++ vcc-dsi-supply = <®_dldo1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ ++ panel@0 { ++ compatible = "xingbangda,xbd599"; ++ reg = <0>; ++ reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */ ++ iovcc-supply = <®_dldo2>; ++ vcc-supply = <®_ldo_io0>; ++ backlight = <&backlight>; ++ }; ++}; ++ + &ehci0 { + status = "okay"; + }; +@@ -188,6 +221,10 @@ &r_pio { + */ + }; + ++&r_pwm { ++ status = "okay"; ++}; ++ + &r_rsb { + status = "okay"; + +-- +2.26.0 + diff --git a/0001-backlight-lp855x-Ensure-regulators-are-disabled-on-p.patch b/0001-backlight-lp855x-Ensure-regulators-are-disabled-on-p.patch new file mode 100644 index 000000000..c6fdb5aa6 --- /dev/null +++ b/0001-backlight-lp855x-Ensure-regulators-are-disabled-on-p.patch @@ -0,0 +1,118 @@ +From 9b408dc1e89cfe36a8f715a7c7624687bb876028 Mon Sep 17 00:00:00 2001 +From: Jon Hunter +Date: Mon, 24 Feb 2020 14:07:48 +0000 +Subject: [PATCH] backlight: lp855x: Ensure regulators are disabled on probe + failure + +If probing the LP885x backlight fails after the regulators have been +enabled, then the following warning is seen when releasing the +regulators ... + + WARNING: CPU: 1 PID: 289 at drivers/regulator/core.c:2051 _regulator_put.part.28+0x158/0x160 + Modules linked in: tegra_xudc lp855x_bl(+) host1x pwm_tegra ip_tables x_tables ipv6 nf_defrag_ipv6 + CPU: 1 PID: 289 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200224 #1 + Hardware name: NVIDIA Jetson TX1 Developer Kit (DT) + + ... + + Call trace: + _regulator_put.part.28+0x158/0x160 + regulator_put+0x34/0x50 + devm_regulator_release+0x10/0x18 + release_nodes+0x12c/0x230 + devres_release_all+0x34/0x50 + really_probe+0x1c0/0x370 + driver_probe_device+0x58/0x100 + device_driver_attach+0x6c/0x78 + __driver_attach+0xb0/0xf0 + bus_for_each_dev+0x68/0xc8 + driver_attach+0x20/0x28 + bus_add_driver+0x160/0x1f0 + driver_register+0x60/0x110 + i2c_register_driver+0x40/0x80 + lp855x_driver_init+0x20/0x1000 [lp855x_bl] + do_one_initcall+0x58/0x1a0 + do_init_module+0x54/0x1d0 + load_module+0x1d80/0x21c8 + __do_sys_finit_module+0xe8/0x100 + __arm64_sys_finit_module+0x18/0x20 + el0_svc_common.constprop.3+0xb0/0x168 + do_el0_svc+0x20/0x98 + el0_sync_handler+0xf4/0x1b0 + el0_sync+0x140/0x180 + +Fix this by ensuring that the regulators are disabled, if enabled, on +probe failure. + +Finally, ensure that the vddio regulator is disabled in the driver +remove handler. + +Signed-off-by: Jon Hunter +Reviewed-by: Daniel Thompson +--- + drivers/video/backlight/lp855x_bl.c | 20 ++++++++++++++++---- + 1 file changed, 16 insertions(+), 4 deletions(-) + +diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c +index f68920131a4a..e94932c69f54 100644 +--- a/drivers/video/backlight/lp855x_bl.c ++++ b/drivers/video/backlight/lp855x_bl.c +@@ -456,7 +456,7 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id) + ret = regulator_enable(lp->enable); + if (ret < 0) { + dev_err(lp->dev, "failed to enable vddio: %d\n", ret); +- return ret; ++ goto disable_supply; + } + + /* +@@ -471,24 +471,34 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id) + ret = lp855x_configure(lp); + if (ret) { + dev_err(lp->dev, "device config err: %d", ret); +- return ret; ++ goto disable_vddio; + } + + ret = lp855x_backlight_register(lp); + if (ret) { + dev_err(lp->dev, + "failed to register backlight. err: %d\n", ret); +- return ret; ++ goto disable_vddio; + } + + ret = sysfs_create_group(&lp->dev->kobj, &lp855x_attr_group); + if (ret) { + dev_err(lp->dev, "failed to register sysfs. err: %d\n", ret); +- return ret; ++ goto disable_vddio; + } + + backlight_update_status(lp->bl); ++ + return 0; ++ ++disable_vddio: ++ if (lp->enable) ++ regulator_disable(lp->enable); ++disable_supply: ++ if (lp->supply) ++ regulator_disable(lp->supply); ++ ++ return ret; + } + + static int lp855x_remove(struct i2c_client *cl) +@@ -497,6 +507,8 @@ static int lp855x_remove(struct i2c_client *cl) + + lp->bl->props.brightness = 0; + backlight_update_status(lp->bl); ++ if (lp->enable) ++ regulator_disable(lp->enable); + if (lp->supply) + regulator_disable(lp->supply); + sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group); +-- +2.26.0 + diff --git a/0001-be2iscsi-remove-unsupported-device-IDs.patch b/0001-be2iscsi-remove-unsupported-device-IDs.patch new file mode 100644 index 000000000..ef9659f58 --- /dev/null +++ b/0001-be2iscsi-remove-unsupported-device-IDs.patch @@ -0,0 +1,71 @@ +From 7d89e4813e600130cdb17404ead39e017e45f416 Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Thu, 2 Jan 2020 14:24:43 -0500 +Subject: [PATCH] be2iscsi: remove unsupported device IDs + +Message-id: <20180503194032.1461134-1-cleech@redhat.com> +Patchwork-id: 212454 +O-Subject: [RHEL8 PATCH e-stor] scsi: be2iscsi: remove unsupported device IDs +Bugzilla: 1574502 +RH-Acked-by: Maurizio Lombardi +RH-Acked-by: Tom Coughlan +RH-Acked-by: Ewan Milne + +Bugzilla: 1574502 +Upstream Status: RHEL Specific +Build Info: brew 15975638 + +BladeEngine 2 generation devices are deprecated in RHEL 7 +and not supported in RHEL 8 + +Signed-off-by: Chris Leech +Signed-off-by: Herton R. Krzesinski + +be2iscsi: remove BE3 family support + +Message-id: <1530890927-5792-1-git-send-email-mlombard@redhat.com> +Patchwork-id: 223576 +O-Subject: [RHEL8 e-stor PATCH] be2iscsi: remove BE3 family support +Bugzilla: 1598366 +RH-Acked-by: Tomas Henzl +RH-Acked-by: Chris Leech + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id98366 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID996775 +Upstream: RHEL-only, they tried to mark BE3 as unsupported + in upstream kernel but the patch has been rejected. + See: https://marc.info/?l=linux-scsi&m2835991600881&w=2 + +Broadcom doesn't want to provide support for the BE3 device family +in RHEL8. + +This patch removes the BE3's PCI-IDs. + +Upstream Status: RHEL only +Signed-off-by: Maurizio Lombardi +Signed-off-by: Herton R. Krzesinski +--- + drivers/scsi/be2iscsi/be_main.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c +index 9b81cfbbc5c5..1ca08297939c 100644 +--- a/drivers/scsi/be2iscsi/be_main.c ++++ b/drivers/scsi/be2iscsi/be_main.c +@@ -370,11 +370,13 @@ static int beiscsi_eh_device_reset(struct scsi_cmnd *sc) + + /*------------------- PCI Driver operations and data ----------------- */ + static const struct pci_device_id beiscsi_pci_id_table[] = { ++#ifndef CONFIG_RHEL_DIFFERENCES + { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) }, + { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) }, + { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) }, + { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) }, + { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID3) }, ++#endif + { PCI_DEVICE(ELX_VENDOR_ID, OC_SKH_ID1) }, + { 0 } + }; +-- +2.26.0 + diff --git a/0001-bpf-Add-tech-preview-taint-for-syscall.patch b/0001-bpf-Add-tech-preview-taint-for-syscall.patch new file mode 100644 index 000000000..03c9e8152 --- /dev/null +++ b/0001-bpf-Add-tech-preview-taint-for-syscall.patch @@ -0,0 +1,53 @@ +From 0126c84a2e7cdad9c0f0f74005c4bf1900ceac9c Mon Sep 17 00:00:00 2001 +From: Eugene Syromiatnikov +Date: Thu, 14 Jun 2018 16:36:08 -0400 +Subject: [PATCH] bpf: Add tech preview taint for syscall + +Message-id: <394af3a9985d1ad9ea6741cb95ff145312d106b9.1528991396.git.esyr@redhat.com> +Patchwork-id: 8251 +O-Subject: [kernel team] [RHEL8 PATCH v4 3/5] [bpf] bpf: Add tech preview taint for syscall +Bugzilla: 1559877 +RH-Acked-by: Jiri Benc +RH-Acked-by: Jesper Dangaard Brouer + +Adding tech preview taint for using the eBPF syscall. + +Based on a RHEL 7 commit "bpf: Add tech preview taint for syscall" by +Jiri Olsa. + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1559877 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16716594 + +Upstream Status: RHEL only +Signed-off-by: Jiri Olsa +Signed-off-by: Eugene Syromiatnikov +Signed-off-by: Herton R. Krzesinski +--- + kernel/bpf/syscall.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c +index 39c033265bae..28ed55c3dd18 100644 +--- a/kernel/bpf/syscall.c ++++ b/kernel/bpf/syscall.c +@@ -3678,11 +3678,17 @@ static int link_update(union bpf_attr *attr) + SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, size) + { + union bpf_attr attr; ++ static int marked; + int err; + + if (sysctl_unprivileged_bpf_disabled && !capable(CAP_SYS_ADMIN)) + return -EPERM; + ++ if (!marked) { ++ mark_tech_preview("eBPF syscall", NULL); ++ marked = true; ++ } ++ + err = bpf_check_uarg_tail_zero(uattr, sizeof(attr), size); + if (err) + return err; +-- +2.26.0 + diff --git a/0001-bpf-set-unprivileged_bpf_disabled-to-1-by-default-ad.patch b/0001-bpf-set-unprivileged_bpf_disabled-to-1-by-default-ad.patch new file mode 100644 index 000000000..eec00a8ae --- /dev/null +++ b/0001-bpf-set-unprivileged_bpf_disabled-to-1-by-default-ad.patch @@ -0,0 +1,122 @@ +From 85ef89d4a06f1afc3272d2056c98005971f29026 Mon Sep 17 00:00:00 2001 +From: Eugene Syromiatnikov +Date: Thu, 14 Jun 2018 16:36:02 -0400 +Subject: [PATCH] bpf: set unprivileged_bpf_disabled to 1 by default, add a + boot parameter + +Message-id: <133022c6c389ca16060bd20ef69199de0800200b.1528991396.git.esyr@redhat.com> +Patchwork-id: 8250 +O-Subject: [kernel team] [RHEL8 PATCH v4 2/5] [bpf] bpf: set unprivileged_bpf_disabled to 1 by default, add a boot parameter +Bugzilla: 1561171 +RH-Acked-by: Jiri Benc +RH-Acked-by: Jesper Dangaard Brouer + +This patch sets kernel.unprivileged_bpf_disabled sysctl knob to 1 +by default, and provides an ability (in a form of a boot-time parameter) +to reset it to 0, as it is impossible to do so in runtime. Since +unprivileged BPF is considered unsupported, it also taints the kernel. + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1561171 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16716594 +Upstream: RHEL only. The patch (in a more generic form) has been + proposed upstream[1] and subsequently rejected. + +[1] https://lkml.org/lkml/2018/5/21/344 + +Upstream Status: RHEL only +Signed-off-by: Eugene Syromiatnikov +Signed-off-by: Herton R. Krzesinski +--- + .../admin-guide/kernel-parameters.txt | 8 +++++++ + include/linux/kernel.h | 2 +- + kernel/bpf/syscall.c | 21 ++++++++++++++++++- + kernel/panic.c | 2 +- + 4 files changed, 30 insertions(+), 3 deletions(-) + +diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt +index f2a93c8679e8..9af891d5b8eb 100644 +--- a/Documentation/admin-guide/kernel-parameters.txt ++++ b/Documentation/admin-guide/kernel-parameters.txt +@@ -5162,6 +5162,14 @@ + unknown_nmi_panic + [X86] Cause panic on unknown NMI. + ++ unprivileged_bpf_disabled= ++ Format: { "0" | "1" } ++ Sets the initial value of ++ kernel.unprivileged_bpf_disabled sysctl knob. ++ 0 - unprivileged bpf() syscall access is enabled. ++ 1 - unprivileged bpf() syscall access is disabled. ++ Default value is 1. ++ + usbcore.authorized_default= + [USB] Default USB device authorization: + (default -1 = authorized except for wireless USB, +diff --git a/include/linux/kernel.h b/include/linux/kernel.h +index c041d4e950f4..8588bb62e74c 100644 +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -610,7 +610,7 @@ extern enum system_states { + #define TAINT_RESERVED28 28 + #define TAINT_RESERVED29 29 + #define TAINT_RESERVED30 30 +-#define TAINT_RESERVED31 31 ++#define TAINT_UNPRIVILEGED_BPF 31 + /* End of Red Hat-specific taint flags */ + #define TAINT_FLAGS_COUNT 32 + +diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c +index d85f37239540..39c033265bae 100644 +--- a/kernel/bpf/syscall.c ++++ b/kernel/bpf/syscall.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -43,7 +44,25 @@ static DEFINE_SPINLOCK(prog_idr_lock); + static DEFINE_IDR(map_idr); + static DEFINE_SPINLOCK(map_idr_lock); + +-int sysctl_unprivileged_bpf_disabled __read_mostly; ++/* RHEL-only: default to 1 */ ++int sysctl_unprivileged_bpf_disabled __read_mostly = 1; ++ ++static int __init unprivileged_bpf_setup(char *str) ++{ ++ unsigned long disabled; ++ if (!kstrtoul(str, 0, &disabled)) ++ sysctl_unprivileged_bpf_disabled = !!disabled; ++ ++ if (!sysctl_unprivileged_bpf_disabled) { ++ pr_warn("Unprivileged BPF has been enabled " ++ "(unprivileged_bpf_disabled=0 has been supplied " ++ "in boot parameters), tainting the kernel"); ++ add_taint(TAINT_UNPRIVILEGED_BPF, LOCKDEP_STILL_OK); ++ } ++ ++ return 1; ++} ++__setup("unprivileged_bpf_disabled=", unprivileged_bpf_setup); + + static const struct bpf_map_ops * const bpf_map_types[] = { + #define BPF_PROG_TYPE(_id, _name, prog_ctx_type, kern_ctx_type) +diff --git a/kernel/panic.c b/kernel/panic.c +index 02f9b2c36cc1..fa06b8cbc457 100644 +--- a/kernel/panic.c ++++ b/kernel/panic.c +@@ -389,7 +389,7 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = { + [ TAINT_RESERVED28 ] = { '?', '-', false }, + [ TAINT_RESERVED29 ] = { '?', '-', false }, + [ TAINT_RESERVED30 ] = { '?', '-', false }, +- [ TAINT_RESERVED31 ] = { '?', '-', false }, ++ [ TAINT_UNPRIVILEGED_BPF ] = { 'u', ' ', false }, + }; + + /** +-- +2.26.0 + diff --git a/0001-drm-panel-add-Xingbangda-XBD599-panel.patch b/0001-drm-panel-add-Xingbangda-XBD599-panel.patch new file mode 100644 index 000000000..909a797bc --- /dev/null +++ b/0001-drm-panel-add-Xingbangda-XBD599-panel.patch @@ -0,0 +1,423 @@ +From 95dd2ea9683de1ce7fd81c60d352a6110048da70 Mon Sep 17 00:00:00 2001 +From: Icenowy Zheng +Date: Mon, 16 Mar 2020 21:35:01 +0800 +Subject: [PATCH] drm: panel: add Xingbangda XBD599 panel + +Xingbangda XBD599 is a 5.99" 720x1440 MIPI-DSI IPS LCD panel made by +Xingbangda, which is used on PinePhone final assembled phones. + +Add support for it. + +Signed-off-by: Icenowy Zheng +--- + drivers/gpu/drm/panel/Kconfig | 9 + + drivers/gpu/drm/panel/Makefile | 1 + + .../gpu/drm/panel/panel-xingbangda-xbd599.c | 366 ++++++++++++++++++ + 3 files changed, 376 insertions(+) + create mode 100644 drivers/gpu/drm/panel/panel-xingbangda-xbd599.c + +diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig +index a1723c1b5fbf..cf0c59015a44 100644 +--- a/drivers/gpu/drm/panel/Kconfig ++++ b/drivers/gpu/drm/panel/Kconfig +@@ -433,6 +433,15 @@ config DRM_PANEL_TRULY_NT35597_WQXGA + Say Y here if you want to enable support for Truly NT35597 WQXGA Dual DSI + Video Mode panel + ++config DRM_PANEL_XINGBANGDA_XBD599 ++ tristate "Xingbangda XBD599 panel" ++ depends on OF ++ depends on DRM_MIPI_DSI ++ depends on BACKLIGHT_CLASS_DEVICE ++ help ++ Say Y here if you want to enable support for the Xingbangda XBD599 ++ MIPI DSI Video Mode panel. ++ + config DRM_PANEL_XINPENG_XPP055C272 + tristate "Xinpeng XPP055C272 panel driver" + depends on OF +diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile +index 96a883cd6630..c84ed5215984 100644 +--- a/drivers/gpu/drm/panel/Makefile ++++ b/drivers/gpu/drm/panel/Makefile +@@ -46,4 +46,5 @@ obj-$(CONFIG_DRM_PANEL_TPO_TD028TTEC1) += panel-tpo-td028ttec1.o + obj-$(CONFIG_DRM_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o + obj-$(CONFIG_DRM_PANEL_TPO_TPG110) += panel-tpo-tpg110.o + obj-$(CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA) += panel-truly-nt35597.o ++obj-$(CONFIG_DRM_PANEL_XINGBANGDA_XBD599) += panel-xingbangda-xbd599.o + obj-$(CONFIG_DRM_PANEL_XINPENG_XPP055C272) += panel-xinpeng-xpp055c272.o +diff --git a/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c +new file mode 100644 +index 000000000000..b483f96ee1db +--- /dev/null ++++ b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c +@@ -0,0 +1,366 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Xingbangda XBD599 MIPI-DSI panel driver ++ * ++ * Copyright (C) 2019-2020 Icenowy Zheng ++ * ++ * Based on panel-rocktech-jh057n00900.c, which is: ++ * Copyright (C) Purism SPC 2019 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++/* Manufacturer specific Commands send via DSI */ ++#define ST7703_CMD_ALL_PIXEL_OFF 0x22 ++#define ST7703_CMD_ALL_PIXEL_ON 0x23 ++#define ST7703_CMD_SETDISP 0xB2 ++#define ST7703_CMD_SETRGBIF 0xB3 ++#define ST7703_CMD_SETCYC 0xB4 ++#define ST7703_CMD_SETBGP 0xB5 ++#define ST7703_CMD_SETVCOM 0xB6 ++#define ST7703_CMD_SETOTP 0xB7 ++#define ST7703_CMD_SETPOWER_EXT 0xB8 ++#define ST7703_CMD_SETEXTC 0xB9 ++#define ST7703_CMD_SETMIPI 0xBA ++#define ST7703_CMD_SETVDC 0xBC ++#define ST7703_CMD_SETSCR 0xC0 ++#define ST7703_CMD_SETPOWER 0xC1 ++#define ST7703_CMD_UNK_C6 0xC6 ++#define ST7703_CMD_SETPANEL 0xCC ++#define ST7703_CMD_SETGAMMA 0xE0 ++#define ST7703_CMD_SETEQ 0xE3 ++#define ST7703_CMD_SETGIP1 0xE9 ++#define ST7703_CMD_SETGIP2 0xEA ++ ++static const char * const regulator_names[] = { ++ "iovcc", ++ "vcc", ++}; ++ ++struct xbd599 { ++ struct device *dev; ++ struct drm_panel panel; ++ struct gpio_desc *reset_gpio; ++ struct regulator_bulk_data supplies[ARRAY_SIZE(regulator_names)]; ++ bool prepared; ++}; ++ ++static inline struct xbd599 *panel_to_xbd599(struct drm_panel *panel) ++{ ++ return container_of(panel, struct xbd599, panel); ++} ++ ++#define dsi_dcs_write_seq(dsi, cmd, seq...) do { \ ++ static const u8 d[] = { seq }; \ ++ int ret; \ ++ ret = mipi_dsi_dcs_write(dsi, cmd, d, ARRAY_SIZE(d)); \ ++ if (ret < 0) \ ++ return ret; \ ++ } while (0) ++ ++static int xbd599_init_sequence(struct xbd599 *ctx) ++{ ++ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); ++ struct device *dev = ctx->dev; ++ int ret; ++ ++ /* ++ * Init sequence was supplied by the panel vendor. ++ */ ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, ++ 0xF1, 0x12, 0x83); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, ++ 0x33, 0x81, 0x05, 0xF9, 0x0E, 0x0E, 0x20, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, ++ 0x00, 0x91, 0x0a, 0x00, 0x00, 0x02, 0x4F, 0x11, ++ 0x00, 0x00, 0x37); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, ++ 0x25, 0x22, 0x20, 0x03); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, ++ 0x10, 0x10, 0x05, 0x05, 0x03, 0xFF, 0x00, 0x00, ++ 0x00, 0x00); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, ++ 0x73, 0x73, 0x50, 0x50, 0x00, 0xC0, 0x08, 0x70, ++ 0x00); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x4E); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0B); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0xF0, 0x12, 0xF0); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, ++ 0x00, 0x00, 0x0B, 0x0B, 0x10, 0x10, 0x00, 0x00, ++ 0x00, 0x00, 0xFF, 0x00, 0xC0, 0x10); ++ dsi_dcs_write_seq(dsi, 0xC6, 0x01, 0x00, 0xFF, 0xFF, 0x00); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, ++ 0x74, 0x00, 0x32, 0x32, 0x77, 0xF1, 0xFF, 0xFF, ++ 0xCC, 0xCC, 0x77, 0x77); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x07, 0x07); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x2C, 0x2C); ++ dsi_dcs_write_seq(dsi, 0xBF, 0x02, 0x11, 0x00); ++ ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, ++ 0x82, 0x10, 0x06, 0x05, 0xA2, 0x0A, 0xA5, 0x12, ++ 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, ++ 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, ++ 0x03, 0x00, 0x00, 0x00, 0x75, 0x75, 0x31, 0x88, ++ 0x88, 0x88, 0x88, 0x88, 0x88, 0x13, 0x88, 0x64, ++ 0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, ++ 0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, ++ 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, ++ 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, ++ 0x57, 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, ++ 0x75, 0x88, 0x23, 0x14, 0x00, 0x00, 0x02, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, ++ 0xA5, 0x00, 0x00, 0x00, 0x00); ++ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, ++ 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, 0x35, ++ 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, 0x12, ++ 0x18, 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, ++ 0x35, 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, ++ 0x12, 0x18); ++ msleep(20); ++ ++ ret = mipi_dsi_dcs_exit_sleep_mode(dsi); ++ if (ret < 0) { ++ DRM_DEV_ERROR(dev, "Failed to exit sleep mode\n"); ++ return ret; ++ } ++ msleep(250); ++ ++ ret = mipi_dsi_dcs_set_display_on(dsi); ++ if (ret) ++ return ret; ++ msleep(50); ++ ++ DRM_DEV_DEBUG_DRIVER(dev, "Panel init sequence done\n"); ++ return 0; ++} ++ ++static int xbd599_prepare(struct drm_panel *panel) ++{ ++ struct xbd599 *ctx = panel_to_xbd599(panel); ++ int ret; ++ ++ if (ctx->prepared) ++ return 0; ++ ++ ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); ++ if (ret) ++ return ret; ++ ++ DRM_DEV_DEBUG_DRIVER(ctx->dev, "Resetting the panel\n"); ++ gpiod_set_value_cansleep(ctx->reset_gpio, 1); ++ usleep_range(20, 40); ++ gpiod_set_value_cansleep(ctx->reset_gpio, 0); ++ msleep(20); ++ ++ ctx->prepared = true; ++ ++ return 0; ++} ++ ++static int xbd599_enable(struct drm_panel *panel) ++{ ++ struct xbd599 *ctx = panel_to_xbd599(panel); ++ int ret; ++ ++ ret = xbd599_init_sequence(ctx); ++ if (ret < 0) { ++ DRM_DEV_ERROR(ctx->dev, "Panel init sequence failed: %d\n", ++ ret); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int xbd599_disable(struct drm_panel *panel) ++{ ++ struct xbd599 *ctx = panel_to_xbd599(panel); ++ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); ++ ++ return mipi_dsi_dcs_set_display_off(dsi); ++} ++ ++static int xbd599_unprepare(struct drm_panel *panel) ++{ ++ struct xbd599 *ctx = panel_to_xbd599(panel); ++ ++ if (!ctx->prepared) ++ return 0; ++ ++ gpiod_set_value_cansleep(ctx->reset_gpio, 1); ++ regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); ++ ctx->prepared = false; ++ ++ return 0; ++} ++ ++static const struct drm_display_mode xbd599_default_mode = { ++ .hdisplay = 720, ++ .hsync_start = 720 + 40, ++ .hsync_end = 720 + 40 + 40, ++ .htotal = 720 + 40 + 40 + 40, ++ .vdisplay = 1440, ++ .vsync_start = 1440 + 18, ++ .vsync_end = 1440 + 18 + 10, ++ .vtotal = 1440 + 18 + 10 + 17, ++ .vrefresh = 60, ++ .clock = 69000, ++ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, ++ ++ .width_mm = 68, ++ .height_mm = 136, ++ .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, ++}; ++ ++static int xbd599_get_modes(struct drm_panel *panel, ++ struct drm_connector *connector) ++{ ++ struct xbd599 *ctx = panel_to_xbd599(panel); ++ struct drm_display_mode *mode; ++ ++ mode = drm_mode_duplicate(connector->dev, &xbd599_default_mode); ++ if (!mode) { ++ DRM_DEV_ERROR(ctx->dev, "Failed to add mode\n"); ++ return -ENOMEM; ++ } ++ ++ drm_mode_set_name(mode); ++ ++ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; ++ connector->display_info.width_mm = mode->width_mm; ++ connector->display_info.height_mm = mode->height_mm; ++ drm_mode_probed_add(connector, mode); ++ ++ return 1; ++} ++ ++static const struct drm_panel_funcs xbd599_drm_funcs = { ++ .prepare = xbd599_prepare, ++ .enable = xbd599_enable, ++ .disable = xbd599_disable, ++ .unprepare = xbd599_unprepare, ++ .get_modes = xbd599_get_modes, ++}; ++ ++static int xbd599_probe(struct mipi_dsi_device *dsi) ++{ ++ struct device *dev = &dsi->dev; ++ struct xbd599 *ctx; ++ int i, ret; ++ ++ ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); ++ if (!ctx) ++ return -ENOMEM; ++ ++ for (i = 0; i < ARRAY_SIZE(ctx->supplies); i++) ++ ctx->supplies[i].supply = regulator_names[i]; ++ ++ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), ++ ctx->supplies); ++ if (ret < 0) { ++ DRM_DEV_ERROR(&dsi->dev, "cannot get regulators\n"); ++ return ret; ++ } ++ ++ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); ++ if (IS_ERR(ctx->reset_gpio)) { ++ DRM_DEV_ERROR(dev, "cannot get reset gpio\n"); ++ return PTR_ERR(ctx->reset_gpio); ++ } ++ ++ mipi_dsi_set_drvdata(dsi, ctx); ++ ++ ctx->dev = dev; ++ ++ dsi->lanes = 4; ++ dsi->format = MIPI_DSI_FMT_RGB888; ++ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; ++ ++ drm_panel_init(&ctx->panel, &dsi->dev, &xbd599_drm_funcs, ++ DRM_MODE_CONNECTOR_DSI); ++ ++ ret = drm_panel_of_backlight(&ctx->panel); ++ if (ret) ++ return ret; ++ ++ drm_panel_add(&ctx->panel); ++ ++ ret = mipi_dsi_attach(dsi); ++ if (ret < 0) { ++ DRM_DEV_ERROR(dev, "mipi_dsi_attach failed. Is host ready?\n"); ++ drm_panel_remove(&ctx->panel); ++ return ret; ++ } ++ ++ DRM_DEV_INFO(dev, "%ux%u@%u %ubpp dsi %udl - ready\n", ++ xbd599_default_mode.hdisplay, ++ xbd599_default_mode.vdisplay, ++ xbd599_default_mode.vrefresh, ++ mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes); ++ ++ return 0; ++} ++ ++static void xbd599_shutdown(struct mipi_dsi_device *dsi) ++{ ++ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); ++ int ret; ++ ++ ret = drm_panel_unprepare(&ctx->panel); ++ if (ret < 0) ++ DRM_DEV_ERROR(&dsi->dev, "Failed to unprepare panel: %d\n", ++ ret); ++} ++ ++static int xbd599_remove(struct mipi_dsi_device *dsi) ++{ ++ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); ++ int ret; ++ ++ xbd599_shutdown(dsi); ++ ++ ret = mipi_dsi_detach(dsi); ++ if (ret < 0) ++ DRM_DEV_ERROR(&dsi->dev, "Failed to detach from DSI host: %d\n", ++ ret); ++ ++ drm_panel_remove(&ctx->panel); ++ ++ return 0; ++} ++ ++static const struct of_device_id xbd599_of_match[] = { ++ { .compatible = "xingbangda,xbd599", }, ++ { /* sentinel */ } ++}; ++MODULE_DEVICE_TABLE(of, xbd599_of_match); ++ ++static struct mipi_dsi_driver xbd599_driver = { ++ .probe = xbd599_probe, ++ .remove = xbd599_remove, ++ .shutdown = xbd599_shutdown, ++ .driver = { ++ .name = "panel-xingbangda-xbd599", ++ .of_match_table = xbd599_of_match, ++ }, ++}; ++module_mipi_dsi_driver(xbd599_driver); ++ ++MODULE_AUTHOR("Icenowy Zheng "); ++MODULE_DESCRIPTION("DRM driver for Xingbangda XBD599 MIPI DSI panel"); ++MODULE_LICENSE("GPL v2"); +-- +2.26.0 + diff --git a/0001-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timing-calcu.patch b/0001-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timing-calcu.patch new file mode 100644 index 000000000..072547f7c --- /dev/null +++ b/0001-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timing-calcu.patch @@ -0,0 +1,59 @@ +From 6cacfd99805b403a5d3af8dab15c6d9d4d39a042 Mon Sep 17 00:00:00 2001 +From: Icenowy Zheng +Date: Mon, 16 Mar 2020 21:35:02 +0800 +Subject: [PATCH] drm/sun4i: sun6i_mipi_dsi: fix horizontal timing calculation + +The max() function call in horizontal timing calculation shouldn't pad a +length already subtracted with overhead to overhead, instead it should +only prevent the set timing to underflow. + +Signed-off-by: Icenowy Zheng +--- + drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +index 059939789730..5f2313c40328 100644 +--- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c ++++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +@@ -555,7 +555,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, + */ + #define HSA_PACKET_OVERHEAD 10 + hsa = max((unsigned int)HSA_PACKET_OVERHEAD, +- (mode->hsync_end - mode->hsync_start) * Bpp - HSA_PACKET_OVERHEAD); ++ (mode->hsync_end - mode->hsync_start) * Bpp) - HSA_PACKET_OVERHEAD; + + /* + * The backporch is set using a blanking packet (4 +@@ -564,7 +564,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, + */ + #define HBP_PACKET_OVERHEAD 6 + hbp = max((unsigned int)HBP_PACKET_OVERHEAD, +- (mode->htotal - mode->hsync_end) * Bpp - HBP_PACKET_OVERHEAD); ++ (mode->htotal - mode->hsync_end) * Bpp) - HBP_PACKET_OVERHEAD; + + /* + * The frontporch is set using a sync event (4 bytes) +@@ -574,7 +574,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, + */ + #define HFP_PACKET_OVERHEAD 16 + hfp = max((unsigned int)HFP_PACKET_OVERHEAD, +- (mode->hsync_start - mode->hdisplay) * Bpp - HFP_PACKET_OVERHEAD); ++ (mode->hsync_start - mode->hdisplay) * Bpp) - HFP_PACKET_OVERHEAD; + + /* + * The blanking is set using a sync event (4 bytes) +@@ -583,8 +583,8 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, + */ + #define HBLK_PACKET_OVERHEAD 10 + hblk = max((unsigned int)HBLK_PACKET_OVERHEAD, +- (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp - +- HBLK_PACKET_OVERHEAD); ++ (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp) - ++ HBLK_PACKET_OVERHEAD; + + /* + * And I'm not entirely sure what vblk is about. The driver in +-- +2.26.0 + diff --git a/0001-dt-bindings-Add-doc-for-Pine64-Pinebook-Pro.patch b/0001-dt-bindings-Add-doc-for-Pine64-Pinebook-Pro.patch new file mode 100644 index 000000000..293e36864 --- /dev/null +++ b/0001-dt-bindings-Add-doc-for-Pine64-Pinebook-Pro.patch @@ -0,0 +1,32 @@ +From d344ef5263fa74cdfc84e2160415f370e76634da Mon Sep 17 00:00:00 2001 +From: Emmanuel Vadot +Date: Wed, 4 Mar 2020 22:30:22 +0100 +Subject: [PATCH] dt-bindings: Add doc for Pine64 Pinebook Pro + +Add a compatible for Pine64 Pinebook Pro + +Signed-off-by: Emmanuel Vadot +Reviewed-by: Rob Herring +--- + Documentation/devicetree/bindings/arm/rockchip.yaml | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/Documentation/devicetree/bindings/arm/rockchip.yaml b/Documentation/devicetree/bindings/arm/rockchip.yaml +index 715586dea9bb..fff0439c6b78 100644 +--- a/Documentation/devicetree/bindings/arm/rockchip.yaml ++++ b/Documentation/devicetree/bindings/arm/rockchip.yaml +@@ -420,6 +420,11 @@ properties: + - const: pine64,rockpro64 + - const: rockchip,rk3399 + ++ - description: Pine64 PinebookPro ++ items: ++ - const: pine64,pinebook-pro ++ - const: rockchip,rk3399 ++ + - description: Radxa Rock + items: + - const: radxa,rock +-- +2.26.0 + diff --git a/0001-dt-bindings-panel-add-binding-for-Xingbangda-XBD599-.patch b/0001-dt-bindings-panel-add-binding-for-Xingbangda-XBD599-.patch new file mode 100644 index 000000000..652227adf --- /dev/null +++ b/0001-dt-bindings-panel-add-binding-for-Xingbangda-XBD599-.patch @@ -0,0 +1,74 @@ +From 7f066a24965b53e89fbd4b9a56dda48bdb5c51b7 Mon Sep 17 00:00:00 2001 +From: Icenowy Zheng +Date: Mon, 16 Mar 2020 21:35:00 +0800 +Subject: [PATCH] dt-bindings: panel: add binding for Xingbangda XBD599 panel + +Xingbangda XBD599 is a 5.99" 720x1440 MIPI-DSI LCD panel. + +Add its device tree binding. + +Signed-off-by: Icenowy Zheng +--- + .../display/panel/xingbangda,xbd599.yaml | 50 +++++++++++++++++++ + 1 file changed, 50 insertions(+) + create mode 100644 Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml + +diff --git a/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml b/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml +new file mode 100644 +index 000000000000..b27bcf11198f +--- /dev/null ++++ b/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml +@@ -0,0 +1,50 @@ ++# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) ++%YAML 1.2 ++--- ++$id: http://devicetree.org/schemas/display/panel/xingbangda,xbd599.yaml# ++$schema: http://devicetree.org/meta-schemas/core.yaml# ++ ++title: Xingbangda XBD599 5.99in MIPI-DSI LCD panel ++ ++maintainers: ++ - Icenowy Zheng ++ ++allOf: ++ - $ref: panel-common.yaml# ++ ++properties: ++ compatible: ++ const: xingbangda,xbd599 ++ reg: true ++ backlight: true ++ reset-gpios: true ++ vcc-supply: ++ description: regulator that supplies the VCC voltage ++ iovcc-supply: ++ description: regulator that supplies the IOVCC voltage ++ ++required: ++ - compatible ++ - reg ++ - backlight ++ - vcc-supply ++ - iovcc-supply ++ ++additionalProperties: false ++ ++examples: ++ - | ++ dsi { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ panel@0 { ++ compatible = "xingbangda,xbd599"; ++ reg = <0>; ++ backlight = <&backlight>; ++ iovcc-supply = <®_dldo2>; ++ vcc-supply = <®_ldo_io0>; ++ }; ++ }; ++ ++... +-- +2.26.0 + diff --git a/0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.patch b/0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.patch new file mode 100644 index 000000000..06a809395 --- /dev/null +++ b/0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.patch @@ -0,0 +1,35 @@ +From a59712e1e70f046eef3846ee5a8aebe17c8cc9c4 Mon Sep 17 00:00:00 2001 +From: Aaron Ma +Date: Tue, 24 Mar 2020 03:16:39 +0800 +Subject: [PATCH] e1000e: bump up timeout to wait when ME un-configure ULP mode + +ME takes 2+ seconds to un-configure ULP mode done after resume +from s2idle on some ThinkPad laptops. +Without enough wait, reset and re-init will fail with error. + +Fixes: f15bb6dde738cc8fa0 ("e1000e: Add support for S0ix") +BugLink: https://bugs.launchpad.net/bugs/1865570 +Signed-off-by: Aaron Ma +--- + drivers/net/ethernet/intel/e1000e/ich8lan.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c +index 735bf25952fc..15f6c0a4dc63 100644 +--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c ++++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c +@@ -1243,9 +1243,9 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force) + ew32(H2ME, mac_reg); + } + +- /* Poll up to 300msec for ME to clear ULP_CFG_DONE. */ ++ /* Poll up to 2.5sec for ME to clear ULP_CFG_DONE. */ + while (er32(FWSM) & E1000_FWSM_ULP_CFG_DONE) { +- if (i++ == 30) { ++ if (i++ == 250) { + ret_val = -E1000_ERR_PHY; + goto out; + } +-- +2.26.0 + diff --git a/0001-efi-Add-an-EFI_SECURE_BOOT-flag-to-indicate-secure-b.patch b/0001-efi-Add-an-EFI_SECURE_BOOT-flag-to-indicate-secure-b.patch new file mode 100644 index 000000000..7367c17b5 --- /dev/null +++ b/0001-efi-Add-an-EFI_SECURE_BOOT-flag-to-indicate-secure-b.patch @@ -0,0 +1,161 @@ +From 84d5140022d7531449720990ea6f36e8315c3504 Mon Sep 17 00:00:00 2001 +From: David Howells +Date: Tue, 27 Feb 2018 10:04:55 +0000 +Subject: [PATCH] efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode + +UEFI machines can be booted in Secure Boot mode. Add an EFI_SECURE_BOOT +flag that can be passed to efi_enabled() to find out whether secure boot is +enabled. + +Move the switch-statement in x86's setup_arch() that inteprets the +secure_boot boot parameter to generic code and set the bit there. + +Upstream Status: RHEL only +Suggested-by: Ard Biesheuvel +Signed-off-by: David Howells +Reviewed-by: Ard Biesheuvel +cc: linux-efi@vger.kernel.org +[Rebased for context; efi_is_table_address was moved to arch/x86] +Signed-off-by: Jeremy Cline +--- + arch/x86/kernel/setup.c | 14 +----------- + drivers/firmware/efi/Makefile | 1 + + drivers/firmware/efi/secureboot.c | 38 +++++++++++++++++++++++++++++++ + include/linux/efi.h | 18 ++++++++++----- + 4 files changed, 52 insertions(+), 19 deletions(-) + create mode 100644 drivers/firmware/efi/secureboot.c + +diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c +index e39ec0f88d28..08e9f5fc26a8 100644 +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -1250,19 +1250,7 @@ void __init setup_arch(char **cmdline_p) + /* Allocate bigger log buffer */ + setup_log_buf(1); + +- if (efi_enabled(EFI_BOOT)) { +- switch (boot_params.secure_boot) { +- case efi_secureboot_mode_disabled: +- pr_info("Secure boot disabled\n"); +- break; +- case efi_secureboot_mode_enabled: +- pr_info("Secure boot enabled\n"); +- break; +- default: +- pr_info("Secure boot could not be determined\n"); +- break; +- } +- } ++ efi_set_secure_boot(boot_params.secure_boot); + + reserve_initrd(); + +diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile +index 7a216984552b..f0ef02d733af 100644 +--- a/drivers/firmware/efi/Makefile ++++ b/drivers/firmware/efi/Makefile +@@ -25,6 +25,7 @@ obj-$(CONFIG_EFI_FAKE_MEMMAP) += fake_map.o + obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o + obj-$(CONFIG_EFI_TEST) += test/ + obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o ++obj-$(CONFIG_EFI) += secureboot.o + obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o + obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o + obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o +diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c +new file mode 100644 +index 000000000000..de0a3714a5d4 +--- /dev/null ++++ b/drivers/firmware/efi/secureboot.c +@@ -0,0 +1,38 @@ ++/* Core kernel secure boot support. ++ * ++ * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved. ++ * Written by David Howells (dhowells@redhat.com) ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public Licence ++ * as published by the Free Software Foundation; either version ++ * 2 of the Licence, or (at your option) any later version. ++ */ ++ ++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt ++ ++#include ++#include ++#include ++ ++/* ++ * Decide what to do when UEFI secure boot mode is enabled. ++ */ ++void __init efi_set_secure_boot(enum efi_secureboot_mode mode) ++{ ++ if (efi_enabled(EFI_BOOT)) { ++ switch (mode) { ++ case efi_secureboot_mode_disabled: ++ pr_info("Secure boot disabled\n"); ++ break; ++ case efi_secureboot_mode_enabled: ++ set_bit(EFI_SECURE_BOOT, &efi.flags); ++ pr_info("Secure boot enabled\n"); ++ break; ++ default: ++ pr_warn("Secure boot could not be determined (mode %u)\n", ++ mode); ++ break; ++ } ++ } ++} +diff --git a/include/linux/efi.h b/include/linux/efi.h +index fa8e23680314..a9a9e7e976e7 100644 +--- a/include/linux/efi.h ++++ b/include/linux/efi.h +@@ -778,6 +778,14 @@ extern int __init efi_setup_pcdp_console(char *); + #define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */ + #define EFI_MEM_NO_SOFT_RESERVE 11 /* Is the kernel configured to ignore soft reservations? */ + #define EFI_PRESERVE_BS_REGIONS 12 /* Are EFI boot-services memory segments available? */ ++#define EFI_SECURE_BOOT 13 /* Are we in Secure Boot mode? */ ++ ++enum efi_secureboot_mode { ++ efi_secureboot_mode_unset, ++ efi_secureboot_mode_unknown, ++ efi_secureboot_mode_disabled, ++ efi_secureboot_mode_enabled, ++}; + + #ifdef CONFIG_EFI + /* +@@ -789,6 +797,8 @@ static inline bool efi_enabled(int feature) + } + extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + ++extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode); ++ + bool __pure __efi_soft_reserve_enabled(void); + + static inline bool __pure efi_soft_reserve_enabled(void) +@@ -815,6 +825,8 @@ efi_capsule_pending(int *reset_type) + return false; + } + ++static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {} ++ + static inline bool efi_soft_reserve_enabled(void) + { + return false; +@@ -1086,12 +1098,6 @@ static inline bool efi_runtime_disabled(void) { return true; } + extern void efi_call_virt_check_flags(unsigned long flags, const char *call); + extern unsigned long efi_call_virt_save_flags(void); + +-enum efi_secureboot_mode { +- efi_secureboot_mode_unset, +- efi_secureboot_mode_unknown, +- efi_secureboot_mode_disabled, +- efi_secureboot_mode_enabled, +-}; + enum efi_secureboot_mode efi_get_secureboot(void); + + #ifdef CONFIG_RESET_ATTACK_MITIGATION +-- +2.26.0 + diff --git a/0001-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch b/0001-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch new file mode 100644 index 000000000..4d3d56713 --- /dev/null +++ b/0001-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch @@ -0,0 +1,72 @@ +From f8b4469d9bd35b145296f904130218afe52982e4 Mon Sep 17 00:00:00 2001 +From: David Howells +Date: Mon, 30 Sep 2019 21:28:16 +0000 +Subject: [PATCH] efi: Lock down the kernel if booted in secure boot mode + +UEFI Secure Boot provides a mechanism for ensuring that the firmware +will only load signed bootloaders and kernels. Certain use cases may +also require that all kernel modules also be signed. Add a +configuration option that to lock down the kernel - which includes +requiring validly signed modules - if the kernel is secure-booted. + +Upstream Status: RHEL only +Signed-off-by: David Howells +Signed-off-by: Jeremy Cline +--- + arch/x86/kernel/setup.c | 8 ++++++++ + security/lockdown/Kconfig | 13 +++++++++++++ + 2 files changed, 21 insertions(+) + +diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c +index 08e9f5fc26a8..b6f5510f3d91 100644 +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -1099,6 +1100,13 @@ void __init setup_arch(char **cmdline_p) + if (efi_enabled(EFI_BOOT)) + efi_init(); + ++ efi_set_secure_boot(boot_params.secure_boot); ++ ++#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT ++ if (efi_enabled(EFI_SECURE_BOOT)) ++ security_lock_kernel_down("EFI Secure Boot mode", LOCKDOWN_INTEGRITY_MAX); ++#endif ++ + dmi_setup(); + + /* +diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig +index e84ddf484010..d0501353a4b9 100644 +--- a/security/lockdown/Kconfig ++++ b/security/lockdown/Kconfig +@@ -16,6 +16,19 @@ config SECURITY_LOCKDOWN_LSM_EARLY + subsystem is fully initialised. If enabled, lockdown will + unconditionally be called before any other LSMs. + ++config LOCK_DOWN_IN_EFI_SECURE_BOOT ++ bool "Lock down the kernel in EFI Secure Boot mode" ++ default n ++ depends on EFI && SECURITY_LOCKDOWN_LSM_EARLY ++ help ++ UEFI Secure Boot provides a mechanism for ensuring that the firmware ++ will only load signed bootloaders and kernels. Secure boot mode may ++ be determined from EFI variables provided by the system firmware if ++ not indicated by the boot parameters. ++ ++ Enabling this option results in kernel lockdown being triggered if ++ EFI Secure Boot is set. ++ + choice + prompt "Kernel default lockdown mode" + default LOCK_DOWN_KERNEL_FORCE_NONE +-- +2.26.0 + diff --git a/0001-firmware-raspberrypi-Introduce-vl805-init-routine.patch b/0001-firmware-raspberrypi-Introduce-vl805-init-routine.patch new file mode 100644 index 000000000..9bc27d624 --- /dev/null +++ b/0001-firmware-raspberrypi-Introduce-vl805-init-routine.patch @@ -0,0 +1,110 @@ +From 6cbb2cc0a2a17914fec536d8ec9dd3f3d11971c0 Mon Sep 17 00:00:00 2001 +From: Nicolas Saenz Julienne +Date: Tue, 10 Mar 2020 13:52:40 +0100 +Subject: [PATCH] firmware: raspberrypi: Introduce vl805 init routine + +On the Raspberry Pi 4, after a PCI reset, VL805's firmware may either be +loaded directly from an EEPROM or, if not present, by the SoC's +VideCore. The function informs VideCore that VL805 was just reset, or +requests for a probe defer. + +Based on Tim Gover's downstream implementation. + +Signed-off-by: Nicolas Saenz Julienne +Reviewed-by: Florian Fainelli +--- + drivers/firmware/raspberrypi.c | 38 ++++++++++++++++++++++ + include/soc/bcm2835/raspberrypi-firmware.h | 7 ++++ + 2 files changed, 45 insertions(+) + +diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c +index da26a584dca0..cbb495aff6a0 100644 +--- a/drivers/firmware/raspberrypi.c ++++ b/drivers/firmware/raspberrypi.c +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + #include + + #define MBOX_MSG(chan, data28) (((data28) & ~0xf) | ((chan) & 0xf)) +@@ -286,6 +287,43 @@ struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node) + } + EXPORT_SYMBOL_GPL(rpi_firmware_get); + ++/* ++ * On the Raspberry Pi 4, after a PCI reset, VL805's firmware may either be ++ * loaded directly from an EEPROM or, if not present, by the SoC's VideCore. ++ * Inform VideCore that VL805 was just reset, or defer xhci's probe if not yet ++ * joinable trough the mailbox interface. ++ */ ++int rpi_firmware_init_vl805(struct pci_dev *pdev) ++{ ++ struct device_node *fw_np; ++ struct rpi_firmware *fw; ++ u32 dev_addr; ++ int ret; ++ ++ fw_np = of_find_compatible_node(NULL, NULL, ++ "raspberrypi,bcm2835-firmware"); ++ if (!fw_np) ++ return 0; ++ ++ fw = rpi_firmware_get(fw_np); ++ of_node_put(fw_np); ++ if (!fw) ++ return -EPROBE_DEFER; ++ ++ dev_addr = pdev->bus->number << 20 | PCI_SLOT(pdev->devfn) << 15 | ++ PCI_FUNC(pdev->devfn) << 12; ++ ++ ret = rpi_firmware_property(fw, RPI_FIRMWARE_NOTIFY_XHCI_RESET, ++ &dev_addr, sizeof(dev_addr)); ++ if (ret) ++ return ret; ++ ++ dev_dbg(&pdev->dev, "loaded Raspberry Pi's VL805 firmware\n"); ++ ++ return 0; ++} ++EXPORT_SYMBOL_GPL(rpi_firmware_init_vl805); ++ + static const struct of_device_id rpi_firmware_of_match[] = { + { .compatible = "raspberrypi,bcm2835-firmware", }, + {}, +diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h +index cc9cdbc66403..3025aca3c358 100644 +--- a/include/soc/bcm2835/raspberrypi-firmware.h ++++ b/include/soc/bcm2835/raspberrypi-firmware.h +@@ -10,6 +10,7 @@ + #include + + struct rpi_firmware; ++struct pci_dev; + + enum rpi_firmware_property_status { + RPI_FIRMWARE_STATUS_REQUEST = 0, +@@ -141,6 +142,7 @@ int rpi_firmware_property(struct rpi_firmware *fw, + int rpi_firmware_property_list(struct rpi_firmware *fw, + void *data, size_t tag_size); + struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node); ++int rpi_firmware_init_vl805(struct pci_dev *pdev); + #else + static inline int rpi_firmware_property(struct rpi_firmware *fw, u32 tag, + void *data, size_t len) +@@ -158,6 +160,11 @@ static inline struct rpi_firmware *rpi_firmware_get(struct device_node *firmware + { + return NULL; + } ++ ++static inline int rpi_firmware_init_vl805(struct pci_dev *pdev) ++{ ++ return 0; ++} + #endif + + #endif /* __SOC_RASPBERRY_FIRMWARE_H__ */ +-- +2.26.0 + diff --git a/0001-hpsa-remove-old-cciss-based-smartarray-pci-ids.patch b/0001-hpsa-remove-old-cciss-based-smartarray-pci-ids.patch new file mode 100644 index 000000000..ee4292c47 --- /dev/null +++ b/0001-hpsa-remove-old-cciss-based-smartarray-pci-ids.patch @@ -0,0 +1,55 @@ +From dd15cdb1c47b059a1656d71597f7aad227c927e2 Mon Sep 17 00:00:00 2001 +From: Joseph Szczypek +Date: Thu, 2 Jan 2020 14:24:40 -0500 +Subject: [PATCH] hpsa: remove old cciss-based smartarray pci ids + +Message-id: <1524750809-43700-2-git-send-email-jszczype@redhat.com> +Patchwork-id: 211573 +O-Subject: [RHEL8 e-stor PATCH 1/2] hpsa: remove old cciss-based smartarray pci ids +Bugzilla: 1471185 +RH-Acked-by: Maurizio Lombardi +RH-Acked-by: Tomas Henzl + +Per discussion with Microsemi, the old PCI IDs for smartarrays +originally used with the old cciss driver are not being +supported with RHEL8. They are also not supported with RHEL7. +Therefore the PCI IDs and the catch-all are being removed. + + Acked-by: Don Brace + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +--- + drivers/scsi/hpsa.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c +index 1e9302e99d05..b903580d626f 100644 +--- a/drivers/scsi/hpsa.c ++++ b/drivers/scsi/hpsa.c +@@ -82,7 +82,9 @@ MODULE_DESCRIPTION("Driver for HP Smart Array Controller version " \ + MODULE_SUPPORTED_DEVICE("HP Smart Array Controllers"); + MODULE_VERSION(HPSA_DRIVER_VERSION); + MODULE_LICENSE("GPL"); ++#ifndef CONFIG_RHEL_DIFFERENCES + MODULE_ALIAS("cciss"); ++#endif + + static int hpsa_simple_mode; + module_param(hpsa_simple_mode, int, S_IRUGO|S_IWUSR); +@@ -144,10 +146,12 @@ static const struct pci_device_id hpsa_pci_device_id[] = { + {PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x007D}, + {PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0088}, + {PCI_VENDOR_ID_HP, 0x333f, 0x103c, 0x333f}, ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, + PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, + {PCI_VENDOR_ID_COMPAQ, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, + PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, ++#endif + {0,} + }; + +-- +2.26.0 + diff --git a/0001-ice-mark-driver-as-tech-preview.patch b/0001-ice-mark-driver-as-tech-preview.patch new file mode 100644 index 000000000..7fe0f7952 --- /dev/null +++ b/0001-ice-mark-driver-as-tech-preview.patch @@ -0,0 +1,43 @@ +From 7e99c3732281171daf5f95f604c5b74a12ff247f Mon Sep 17 00:00:00 2001 +From: Jonathan Toppins +Date: Tue, 24 Jul 2018 19:17:40 -0400 +Subject: [PATCH] ice: mark driver as tech-preview + +Message-id: +Patchwork-id: 8526 +O-Subject: [kernel team] [PATCH RHEL8 1/3] [redhat] ice: mark driver as tech-preview +Bugzilla: 1495347 +RH-Acked-by: Steve Best +RH-Acked-by: Don Dutile +RH-Acked-by: David S. Miller +RH-Acked-by: Jarod Wilson +RH-Acked-by: Neil Horman +RH-Acked-by: Prarit Bhargava + +Upstream Status: RHEL-only +Bugzilla: 1495347 +Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=17334539 +Tested: booted and verified taint flags were set when the driver was loaded. + +Upstream Status: RHEL only +Signed-off-by: Jonathan Toppins +Signed-off-by: Herton R. Krzesinski +--- + drivers/net/ethernet/intel/ice/ice_main.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c +index 5b190c257124..d88fa9c54b16 100644 +--- a/drivers/net/ethernet/intel/ice/ice_main.c ++++ b/drivers/net/ethernet/intel/ice/ice_main.c +@@ -3638,6 +3638,7 @@ static int __init ice_module_init(void) + + pr_info("%s - version %s\n", ice_driver_string, ice_drv_ver); + pr_info("%s\n", ice_copyright); ++ mark_tech_preview(DRV_SUMMARY, THIS_MODULE); + + ice_wq = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0, KBUILD_MODNAME); + if (!ice_wq) { +-- +2.26.0 + diff --git a/0001-initial-commit-Add-Red-Hat-variables-in-the-top-leve.patch b/0001-initial-commit-Add-Red-Hat-variables-in-the-top-leve.patch new file mode 100644 index 000000000..88100cb70 --- /dev/null +++ b/0001-initial-commit-Add-Red-Hat-variables-in-the-top-leve.patch @@ -0,0 +1,43 @@ +From cd3a5d30570279538623ea8a1255db0ee4b728f7 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Tue, 23 Jul 2019 11:39:36 -0400 +Subject: [PATCH] [initial commit] Add Red Hat variables in the top level + makefile + +Signed-off-by: Laura Abbott +--- + Makefile | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 3e4868a6498b..502f9a9a2806 100644 +--- a/Makefile ++++ b/Makefile +@@ -15,6 +15,9 @@ NAME = Bobtail Squid + PHONY := _all + _all: + ++# Set RHEL variables ++include Makefile.rhelver ++ + # We are using a recursive build, so we need to do a little thinking + # to get the ordering right. + # +@@ -1160,7 +1163,13 @@ endef + define filechk_version.h + echo \#define LINUX_VERSION_CODE $(shell \ + expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \ +- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' ++ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \ ++ echo '#define RHEL_MAJOR $(RHEL_MAJOR)'; \ ++ echo '#define RHEL_MINOR $(RHEL_MINOR)'; \ ++ echo '#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))'; \ ++ echo '#define RHEL_RELEASE_CODE \ ++ $(shell expr $(RHEL_MAJOR) \* 256 + $(RHEL_MINOR))'; \ ++ echo '#define RHEL_RELEASE "$(RHEL_RELEASE)"' + endef + + $(version_h): FORCE +-- +2.26.0 + diff --git a/0001-iommu-arm-smmu-workaround-DMA-mode-issues.patch b/0001-iommu-arm-smmu-workaround-DMA-mode-issues.patch new file mode 100644 index 000000000..d9bef5f25 --- /dev/null +++ b/0001-iommu-arm-smmu-workaround-DMA-mode-issues.patch @@ -0,0 +1,98 @@ +From ad57e1e5bbf90b4b0edba18dd17b54cb5079d1cc Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Mon, 20 May 2019 22:21:02 -0400 +Subject: [PATCH] iommu/arm-smmu: workaround DMA mode issues + +Message-id: <20190520222102.19488-1-labbott@redhat.com> +Patchwork-id: 259215 +O-Subject: [ARK INTERNAL PATCH] iommu/arm-smmu: workaround DMA mode issues +Bugzilla: +RH-Acked-by: Mark Langsdorf +RH-Acked-by: Mark Salter + +From: Mark Salter + +Rebased for v5.2-rc1 + + Bugzilla: 1652259 + Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=19244562 + Upstream status: RHEL only. + + rhel8 commit 65feb1ed0ec9a088a63a90d46c0f7563ac96ad0f + Author: Mark Salter + Date: Wed Nov 21 17:15:59 2018 +0100 + + [iommu] iommu/arm-smmu: workaround DMA mode issues + + Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1624077 + Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=18112820 + Testing: Verified iommu.passthrough=1 no longer needed on gigabyte platforms. + Upstream Status: RHEL-only + + In RHEL_ALT 7.5 we carried a RHEL-only patch which forced the arm smmuv2 + into bypass mode due to performance issues on CN88xx. This was intended + to be a temporary hack until the issues were resolved. Another vendor + had issues with the iommu in bypass mode so we reverted the RHEL-only + patch so that iommu is in DMA mode by default (upstream default). + + It turns on that there are remaining SMMU DMA mode issues on Gigabyte + platformws with CN88xx cpus. The problem manifests itself by pcie + card drivers failing to initialize the cards when SMMU is in DMA mode. + The root cause has not been determined yet, but looks likely to be + a hw or firmware issue. This patch forces bypass mode for Gigabyte + platforms. CN88xx isn't officially supported in RHEL but we have a + lot of them being used internally for testing, so I think we want + this to support that use case in RHEL8. + + Signed-off-by: Mark Salter + Signed-off-by: Herton R. Krzesinski + + Acked-by: Mark Salter + Acked-by: Donald Dutile + +Upstream Status: RHEL only +Signed-off-by: Laura Abbott +--- + drivers/iommu/iommu.c | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c +index 2b471419e26c..83c8d9845aed 100644 +--- a/drivers/iommu/iommu.c ++++ b/drivers/iommu/iommu.c +@@ -7,6 +7,7 @@ + #define pr_fmt(fmt) "iommu: " fmt + + #include ++#include + #include + #include + #include +@@ -2658,3 +2659,24 @@ int iommu_sva_get_pasid(struct iommu_sva *handle) + return ops->sva_get_pasid(handle); + } + EXPORT_SYMBOL_GPL(iommu_sva_get_pasid); ++ ++#ifdef CONFIG_ARM64 ++static int __init iommu_quirks(void) ++{ ++ const char *vendor, *name; ++ ++ vendor = dmi_get_system_info(DMI_SYS_VENDOR); ++ name = dmi_get_system_info(DMI_PRODUCT_NAME); ++ ++ if (vendor && ++ (strncmp(vendor, "GIGABYTE", 8) == 0 && name && ++ (strncmp(name, "R120", 4) == 0 || ++ strncmp(name, "R270", 4) == 0))) { ++ pr_warn("Gigabyte %s detected, force iommu passthrough mode", name); ++ iommu_def_domain_type = IOMMU_DOMAIN_IDENTITY; ++ } ++ ++ return 0; ++} ++arch_initcall(iommu_quirks); ++#endif +-- +2.26.0 + diff --git a/0001-ipmi-do-not-configure-ipmi-for-HPE-m400.patch b/0001-ipmi-do-not-configure-ipmi-for-HPE-m400.patch new file mode 100644 index 000000000..f79c4e90c --- /dev/null +++ b/0001-ipmi-do-not-configure-ipmi-for-HPE-m400.patch @@ -0,0 +1,123 @@ +From a4b4f429ce8f886677bab6b1bd6f11b44c7c194d Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Sun, 10 Feb 2019 01:27:54 +0000 +Subject: [PATCH] ipmi: do not configure ipmi for HPE m400 + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1670017 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=20147017 + +Commit 913a89f009d9 ("ipmi: Don't initialize anything in the core until +something uses it") added new locking which broke context. + + Message-id: <20180713142210.15700-1-tcamuso@redhat.com> + Patchwork-id: 224899 + O-Subject: [RHEL8 BZ 1583537 1/1] ipmi: do not configure ipmi for HPE m400 + Bugzilla: 1583537 + RH-Acked-by: Dean Nelson + RH-Acked-by: Al Stone + RH-Acked-by: Mark Salter + + bugzilla:https://bugzilla.redhat.com/show_bug.cgi?id=1583537 + brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=17150528 + + RHEL-only + + The ARM-based HPE m400 reports host-side ipmi as residing in intel + port-io space, which does not exist in ARM processors. Therefore, when + running on an m400, host-side ipmi configuration code must simply return + zero without trying to configure the host-side ipmi. + + This patch prevents panic on boot by averting attempts to configure + host-side ipmi on this platform. + + Though HPE m400 is not certified with RHEL, and HPE has relegated it to + EOL status, the platform is still used extensively in ARM development + and test for RHEL. + + Testing: + Boot without blacklisting ipmi and check to see that no ipmi modules + are loaded. + + Signed-off-by: Tony Camuso + + cc: Prarit Bhargava + cc: Brendan Conoboy + cc: Jeff Bastian + cc: Scott Herold + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Laura Abbott +Acked-by: Tony Camuso +Acked-by: Dean Nelson +Acked-by: Jarod Wilson +Acked-by: Mark Salter +--- + drivers/char/ipmi/ipmi_dmi.c | 15 +++++++++++++++ + drivers/char/ipmi/ipmi_msghandler.c | 16 +++++++++++++++- + 2 files changed, 30 insertions(+), 1 deletion(-) + +diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c +index bbf7029e224b..cf7faa970dd6 100644 +--- a/drivers/char/ipmi/ipmi_dmi.c ++++ b/drivers/char/ipmi/ipmi_dmi.c +@@ -215,6 +215,21 @@ static int __init scan_for_dmi_ipmi(void) + { + const struct dmi_device *dev = NULL; + ++#ifdef CONFIG_ARM64 ++ /* RHEL-only ++ * If this is ARM-based HPE m400, return now, because that platform ++ * reports the host-side ipmi address as intel port-io space, which ++ * does not exist in the ARM architecture. ++ */ ++ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); ++ ++ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { ++ pr_debug("%s does not support host ipmi\n", dmistr); ++ return 0; ++ } ++ /* END RHEL-only */ ++#endif ++ + while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev))) + dmi_decode_ipmi((const struct dmi_header *) dev->device_data); + +diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c +index c48d8f086382..0fc980a87ed0 100644 +--- a/drivers/char/ipmi/ipmi_msghandler.c ++++ b/drivers/char/ipmi/ipmi_msghandler.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + + #define IPMI_DRIVER_VERSION "39.2" + +@@ -5154,8 +5155,21 @@ static int __init ipmi_init_msghandler_mod(void) + { + int rv; + +- pr_info("version " IPMI_DRIVER_VERSION "\n"); ++#ifdef CONFIG_ARM64 ++ /* RHEL-only ++ * If this is ARM-based HPE m400, return now, because that platform ++ * reports the host-side ipmi address as intel port-io space, which ++ * does not exist in the ARM architecture. ++ */ ++ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); + ++ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { ++ pr_debug("%s does not support host ipmi\n", dmistr); ++ return -ENOSYS; ++ } ++ /* END RHEL-only */ ++#endif ++ pr_info("version " IPMI_DRIVER_VERSION "\n"); + mutex_lock(&ipmi_interfaces_mutex); + rv = ipmi_register_driver(); + mutex_unlock(&ipmi_interfaces_mutex); +-- +2.26.0 + diff --git a/0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch b/0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch new file mode 100644 index 000000000..71a8964ac --- /dev/null +++ b/0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch @@ -0,0 +1,214 @@ +From a7f75341e54bf990749b0e6319e53d38f2343ae7 Mon Sep 17 00:00:00 2001 +From: Myron Stowe +Date: Fri, 29 Jun 2018 20:05:41 -0400 +Subject: [PATCH] kABI: Add generic kABI macros to use for kABI workarounds + +Message-id: <20180629200436.151355.18581.stgit@tak.stowe> +Patchwork-id: 223206 +O-Subject: [RHEL8.0 PATCH v3] kABI: Add generic kABI macros to use for kABI workarounds +Bugzilla: 1546831 +RH-Acked-by: Larry Woodman +RH-Acked-by: Jarod Wilson + +Some kernel subsystem maintainers have asked about kABI for RHEL8.0 +- getting kABI related "extension" structures and such into place. The +consensus was to wait until the 4.17 re-base. Now that that's occurred, +lets get this first step, kABI macros, into RHEL8.0 so developers will +notice, and use, them in subsequent kABI related efforts. + +Content taken from RHEL 7. No functional change intended. + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1546831 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=16694565 +Upstream Status: N/A (RHEL only) +Testing: Passed through brew build. + +Upstream Status: RHEL only +Signed-off-by: Myron Stowe +Signed-off-by: Herton R. Krzesinski +--- + include/linux/rh_kabi.h | 172 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 172 insertions(+) + create mode 100644 include/linux/rh_kabi.h + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +new file mode 100644 +index 000000000000..e0d3353802bb +--- /dev/null ++++ b/include/linux/rh_kabi.h +@@ -0,0 +1,172 @@ ++/* ++ * rh_kabi.h - Red Hat kABI abstraction header ++ * ++ * Copyright (c) 2014 Don Zickus ++ * Copyright (c) 2015-2017 Jiri Benc ++ * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa ++ * Copyright (c) 2016-2018 Prarit Bhargava ++ * Copyright (c) 2017 Paolo Abeni, Larry Woodman ++ * ++ * This file is released under the GPLv2. ++ * See the file COPYING for more details. ++ * ++ * These kabi macros hide the changes from the kabi checker and from the ++ * process that computes the exported symbols' checksums. ++ * They have 2 variants: one (defined under __GENKSYMS__) used when ++ * generating the checksums, and the other used when building the kernel's ++ * binaries. ++ * ++ * The use of these macros does not guarantee that the usage and modification ++ * of code is correct. As with all Red Hat only changes, an engineer must ++ * explain why the use of the macro is valid in the patch containing the ++ * changes. ++ * ++ */ ++ ++#ifndef _LINUX_RH_KABI_H ++#define _LINUX_RH_KABI_H ++ ++#include ++#include ++ ++/* ++ * RH_KABI_CONST ++ * Adds a new const modifier to a function parameter preserving the old ++ * checksum. ++ * ++ * RH_KABI_DEPRECATE ++ * Mark the element as deprecated and make it unusable by modules while ++ * preserving kABI checksums. ++ * ++ * RH_KABI_DEPRECATE_FN ++ * Mark the function pointer as deprecated and make it unusable by modules ++ * while preserving kABI checksums. ++ * ++ * RH_KABI_EXTEND ++ * Simple macro for adding a new element to a struct. ++ * ++ * Warning: only use if a hole exists for _all_ arches. Use pahole to verify. ++ * ++ * RH_KABI_FILL_HOLE ++ * Simple macro for filling a hole in a struct. ++ * ++ * RH_KABI_RENAME ++ * Simple macro for renaming an element without changing its type. This ++ * macro can be used in bitfields, for example. ++ * ++ * NOTE: does not include the final ';' ++ * ++ * RH_KABI_REPLACE ++ * Simple replacement of _orig with a union of _orig and _new. ++ * ++ * The RH_KABI_REPLACE* macros attempt to add the ability to use the '_new' ++ * element while preserving size alignment with the '_orig' element. ++ * ++ * The #ifdef __GENKSYMS__ preserves the kABI agreement, while the anonymous ++ * union structure preserves the size alignment (assuming the '_new' element ++ * is not bigger than the '_orig' element). ++ * ++ * RH_KABI_REPLACE_UNSAFE ++ * Unsafe version of RH_KABI_REPLACE. Only use for typedefs. ++ * ++ * RH_KABI_FORCE_CHANGE ++ * Force change of the symbol checksum. The argument of the macro is a ++ * version for cases we need to do this more than once. ++ * ++ * This macro does the opposite: it changes the symbol checksum without ++ * actually changing anything about the exported symbol. It is useful for ++ * symbols that are not whitelisted, we're changing them in an ++ * incompatible way and want to prevent 3rd party modules to silently ++ * corrupt memory. Instead, by changing the symbol checksum, such modules ++ * won't be loaded by the kernel. This macro should only be used as a ++ * last resort when all other KABI workarounds have failed. ++ * ++ * NOTE ++ * Don't use ';' after these macros as it messes up the kABI checker by ++ * changing what the resulting token string looks like. Instead let this ++ * macro add the ';' so it can be properly hidden from the kABI checker ++ * (mainly for RH_KABI_EXTEND, but applied to all macros for uniformity). ++ * ++ */ ++#ifdef __GENKSYMS__ ++ ++# define RH_KABI_CONST ++# define RH_KABI_EXTEND(_new) ++# define RH_KABI_FILL_HOLE(_new) ++# define RH_KABI_FORCE_CHANGE(ver) __attribute__((rh_kabi_change ## ver)) ++# define RH_KABI_RENAME(_orig, _new) _orig ++ ++# define _RH_KABI_DEPRECATE(_type, _orig) _type _orig ++# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args) ++# define _RH_KABI_REPLACE(_orig, _new) _orig ++# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _orig ++ ++#else ++ ++# define RH_KABI_ALIGN_WARNING ". Disable CONFIG_RH_KABI_SIZE_ALIGN_CHECKS if debugging." ++ ++# define RH_KABI_CONST const ++# define RH_KABI_EXTEND(_new) _new; ++# define RH_KABI_FILL_HOLE(_new) _new; ++# define RH_KABI_FORCE_CHANGE(ver) ++# define RH_KABI_RENAME(_orig, _new) _new ++ ++ ++#if IS_BUILTIN(CONFIG_RH_KABI_SIZE_ALIGN_CHECKS) ++# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) \ ++ union { \ ++ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \ ++ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_new) " is larger than " __stringify(_orig) RH_KABI_ALIGN_WARNING); \ ++ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \ ++ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) RH_KABI_ALIGN_WARNING); \ ++ } ++#else ++# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) ++#endif ++ ++# define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig ++# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ ++ _type (* rh_reserved_##_orig)(_args) ++# define _RH_KABI_REPLACE(_orig, _new) \ ++ union { \ ++ _new; \ ++ struct { \ ++ _orig; \ ++ } __UNIQUE_ID(rh_kabi_hide); \ ++ __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new); \ ++ } ++# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _new ++ ++#endif /* __GENKSYMS__ */ ++ ++/* semicolon added wrappers for the RH_KABI_REPLACE macros */ ++# define RH_KABI_DEPRECATE(_type, _orig) _RH_KABI_DEPRECATE(_type, _orig); ++# define RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ ++ _RH_KABI_DEPRECATE_FN(_type, _orig, _args); ++# define RH_KABI_REPLACE(_orig, _new) _RH_KABI_REPLACE(_orig, _new); ++# define RH_KABI_REPLACE_UNSAFE(_orig, _new) _RH_KABI_REPLACE_UNSAFE(_orig, _new); ++/* ++ * Macro for breaking up a random element into two smaller chunks using an ++ * anonymous struct inside an anonymous union. ++ */ ++# define RH_KABI_REPLACE2(orig, _new1, _new2) RH_KABI_REPLACE(orig, struct{ _new1; _new2;}) ++ ++# define RH_KABI_RESERVE(n) _RH_KABI_RESERVE(n); ++/* ++ * Simple wrappers to replace standard Red Hat reserved elements. ++ */ ++# define RH_KABI_USE(n, _new) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), _new) ++/* ++ * Macros for breaking up a reserved element into two smaller chunks using ++ * an anonymous struct inside an anonymous union. ++ */ ++# define RH_KABI_USE2(n, _new1, _new2) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), struct{ _new1; _new2; }) ++ ++/* ++ * We tried to standardize on Red Hat reserved names. These wrappers ++ * leverage those common names making it easier to read and find in the ++ * code. ++ */ ++# define _RH_KABI_RESERVE(n) unsigned long rh_reserved##n ++ ++#endif /* _LINUX_RH_KABI_H */ +-- +2.26.0 + diff --git a/0001-kdump-add-support-for-crashkernel-auto.patch b/0001-kdump-add-support-for-crashkernel-auto.patch new file mode 100644 index 000000000..29c28d9cc --- /dev/null +++ b/0001-kdump-add-support-for-crashkernel-auto.patch @@ -0,0 +1,189 @@ +From 444adaf2d57962e7dc92e3de7b45af298511858f Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Tue, 23 Jul 2019 15:24:30 +0000 +Subject: [PATCH] kdump: add support for crashkernel=auto + +Rebased for v5.3-rc1 because the documentation has moved. + + Message-id: <20180604013831.574215750@redhat.com> + Patchwork-id: 8166 + O-Subject: [kernel team] [PATCH RHEL8.0 V2 2/2] kdump: add support for crashkernel=auto + Bugzilla: 1507353 + RH-Acked-by: Don Zickus + RH-Acked-by: Baoquan He + RH-Acked-by: Pingfan Liu + + Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1507353 + Build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16534135 + Tested: ppc64le, x86_64 with several memory sizes. + kdump qe tested 160M on various x86 machines in lab. + + We continue to provide crashkernel=auto like we did in RHEL6 + and RHEL7, this will simplify the kdump deployment for common + use cases that kdump just works with the auto reserved values. + But this is still a best effort estimation, we can not know the + exact memory requirement because it depends on a lot of different + factors. + + The implementation of crashkernel=auto is simplified as a wrapper + to use below kernel cmdline: + x86_64: crashkernel=1G-64G:160M,64G-1T:256M,1T-:512M + s390x: crashkernel=4G-64G:160M,64G-1T:256M,1T-:512M + arm64: crashkernel=2G-:512M + ppc64: crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G + + The difference between this way and the old implementation in + RHEL6/7 is we do not scale the crash reserved memory size according + to system memory size anymore. + + Latest effort to move upstream is below thread: + https://lkml.org/lkml/2018/5/20/262 + But unfortunately it is still unlikely to be accepted, thus we + will still use a RHEL only patch in RHEL8. + + Copied old patch description about the history reason see below: + ''' + Non-upstream explanations: + Besides "crashkenrel=X@Y" format, upstream also has advanced + "crashkernel=range1:size1[,range2:size2,...][@offset]", and + "crashkernel=X,high{low}" formats, but they need more careful + manual configuration, and have different values for different + architectures. + + Most of the distributions use the standard "crashkernel=X@Y" + upstream format, and use crashkernel range format for advanced + scenarios, heavily relying on the user's involvement. + + While "crashkernel=auto" is redhat's special feature, it exists + and has been used as the default boot cmdline since 2008 rhel6. + It does not require users to figure out how many crash memory + size for their systems, also has been proved to be able to work + pretty well for common scenarios. + + "crashkernel=auto" was tested/based on rhel-related products, as + we have stable kernel configurations which means more or less + stable memory consumption. In 2014 we tried to post them again to + upstream but NACKed by people because they think it's not general + and unnecessary, users can specify their own values or do that by + scripts. However our customers insist on having it added to rhel. + + Also see one previous discussion related to this backport to Pegas: + On 10/17/2016 at 10:15 PM, Don Zickus wrote: + > On Fri, Oct 14, 2016 at 10:57:41AM +0800, Dave Young wrote: + >> Don, agree with you we should evaluate them instead of just inherit + >> them blindly. Below is what I think about kdump auto memory: + >> There are two issues for crashkernel=auto in upstream: + >> 1) It will be seen as a policy which should not go to kernel + >> 2) It is hard to get a good number for the crash reserved size, + >> considering various different kernel config options one can setups. + >> In RHEL we are easier because our supported Kconfig is limited. + >> I digged the upstream mail archive, but I'm not sure I got all the + >> information, at least Michael Ellerman was objecting the series for + >> 1). + > Yes, I know. Vivek and I have argued about this for years. :-) + > + > I had hoped all the changes internally to the makedumpfile would allow + > the memory configuration to stabilize at a number like 192M or 128M and + > only in the rare cases extend beyond that. + > + > So I always treated that as a temporary hack until things were better. + > With the hope of every new RHEL release we get smarter and better. :-) + > Ideally it would be great if we could get the number down to 64M for most + > cases and just turn it on in Fedora. Maybe someday.... ;-) + > + > We can have this conversation when the patch gets reposted/refreshed + > for upstream on rhkl? + > + > Cheers, + > Don + + We had proposed to drop the historic crashkernel=auto code and move + to use crashkernel=range:size format and pass them in anaconda. + + The initial reason is crashkernel=range:size works just fine because + we do not need complex algorithm to scale crashkernel reserved size + any more. The old linear scaling is mainly for old makedumpfile + requirements, now it is not necessary. + + But With the new approach, backward compatibility is potentially at risk. + For e.g. let's consider the following cases: + 1) When we upgrade from an older distribution like rhel-alt-7.4(which + uses crashkernel=auto) to rhel-alt-7.5 (which uses the crashkernel=xY + format) + In this case we can use anaconda scripts for checking + 'crashkernel=auto' in kernel spec and update to the new + 'crashkernel=range:size' format. + 2) When we upgrade from rhel-alt-7.5(which uses crashkernel=xY format) + to rhel-alt-7.6(which uses crashkernel=xY format), but the x and/or Y + values are changed in rhel-alt-7.6. + For example from crashkernel=2G-:160M to crashkernel=2G-:192M, then we have + no way to determine if the X and/or Y values were distribution + provided or user specified ones. + Since it is recommended to give precedence to user-specified values, + so we cannot do an upgrade in such a case." + + Thus turn back to resolve it in kernel, and add a simpler version + which just hacks to use the range:size style in code, and make + rhel-only code easily to maintain. + ''' + + Signed-off-by: Dave Young + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Jeremy Cline +--- + Documentation/admin-guide/kdump/kdump.rst | 11 +++++++++++ + kernel/crash_core.c | 14 ++++++++++++++ + 2 files changed, 25 insertions(+) + +diff --git a/Documentation/admin-guide/kdump/kdump.rst b/Documentation/admin-guide/kdump/kdump.rst +index ac7e131d2935..3b3bf30e537d 100644 +--- a/Documentation/admin-guide/kdump/kdump.rst ++++ b/Documentation/admin-guide/kdump/kdump.rst +@@ -285,6 +285,17 @@ This would mean: + 2) if the RAM size is between 512M and 2G (exclusive), then reserve 64M + 3) if the RAM size is larger than 2G, then reserve 128M + ++Or you can use crashkernel=auto if you have enough memory. The threshold ++is 2G on x86_64, arm64, ppc64 and ppc64le. The threshold is 4G for s390x. ++If your system memory is less than the threshold crashkernel=auto will not ++reserve memory. ++ ++The automatically reserved memory size varies based on architecture. ++The size changes according to system memory size like below: ++ x86_64: 1G-64G:160M,64G-1T:256M,1T-:512M ++ s390x: 4G-64G:160M,64G-1T:256M,1T-:512M ++ arm64: 2G-:512M ++ ppc64: 2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G + + + Boot into System Kernel +diff --git a/kernel/crash_core.c b/kernel/crash_core.c +index d631d22089ba..c252221b2f4b 100644 +--- a/kernel/crash_core.c ++++ b/kernel/crash_core.c +@@ -258,6 +258,20 @@ static int __init __parse_crashkernel(char *cmdline, + if (suffix) + return parse_crashkernel_suffix(ck_cmdline, crash_size, + suffix); ++ ++ if (strncmp(ck_cmdline, "auto", 4) == 0) { ++#ifdef CONFIG_X86_64 ++ ck_cmdline = "1G-64G:160M,64G-1T:256M,1T-:512M"; ++#elif defined(CONFIG_S390) ++ ck_cmdline = "4G-64G:160M,64G-1T:256M,1T-:512M"; ++#elif defined(CONFIG_ARM64) ++ ck_cmdline = "2G-:512M"; ++#elif defined(CONFIG_PPC64) ++ ck_cmdline = "2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G"; ++#endif ++ pr_info("Using crashkernel=auto, the size choosed is a best effort estimation.\n"); ++ } ++ + /* + * if the commandline contains a ':', then that's the extended + * syntax -- if not, it must be the classic syntax +-- +2.26.0 + diff --git a/0001-kdump-fix-a-grammar-issue-in-a-kernel-message.patch b/0001-kdump-fix-a-grammar-issue-in-a-kernel-message.patch new file mode 100644 index 000000000..59babe581 --- /dev/null +++ b/0001-kdump-fix-a-grammar-issue-in-a-kernel-message.patch @@ -0,0 +1,43 @@ +From c6da56678008c035bbce3e9de751e76c5a2ee338 Mon Sep 17 00:00:00 2001 +From: Dave Young +Date: Tue, 12 Jun 2018 00:54:22 -0400 +Subject: [PATCH] kdump: fix a grammar issue in a kernel message + +Message-id: <20180612005422.GA2568@dhcp-128-65.nay.redhat.com> +Patchwork-id: 8201 +O-Subject: [kernel team] [RHEL8.0 PATCH V2] kdump: fix a grammar issue in a kernel message +Bugzilla: 1507353 +RH-Acked-by: Myron Stowe +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Jiri Benc + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1507353 +Upstream Status: RHEL-only as crashkernel=auto is not accepted in upstream +Build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16661950 +Test: verified on a kvm guest + +s/choosed/chosen + +Upstream Status: RHEL only +Signed-off-by: Dave Young +Signed-off-by: Herton R. Krzesinski +--- + kernel/crash_core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/crash_core.c b/kernel/crash_core.c +index c252221b2f4b..df551fc9034c 100644 +--- a/kernel/crash_core.c ++++ b/kernel/crash_core.c +@@ -269,7 +269,7 @@ static int __init __parse_crashkernel(char *cmdline, + #elif defined(CONFIG_PPC64) + ck_cmdline = "2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G"; + #endif +- pr_info("Using crashkernel=auto, the size choosed is a best effort estimation.\n"); ++ pr_info("Using crashkernel=auto, the size chosen is a best effort estimation.\n"); + } + + /* +-- +2.26.0 + diff --git a/0001-kdump-round-up-the-total-memory-size-to-128M-for-cra.patch b/0001-kdump-round-up-the-total-memory-size-to-128M-for-cra.patch new file mode 100644 index 000000000..5e637ca04 --- /dev/null +++ b/0001-kdump-round-up-the-total-memory-size-to-128M-for-cra.patch @@ -0,0 +1,93 @@ +From d7b5388312fd3dd7ae8072c142aae658da7980de Mon Sep 17 00:00:00 2001 +From: Dave Young +Date: Mon, 4 Jun 2018 01:38:25 -0400 +Subject: [PATCH] kdump: round up the total memory size to 128M for crashkernel + reservation + +Message-id: <20180604013831.523644967@redhat.com> +Patchwork-id: 8165 +O-Subject: [kernel team] [PATCH RHEL8.0 V2 1/2] kdump: round up the total memory size to 128M for crashkernel reservation +Bugzilla: 1507353 +RH-Acked-by: Don Zickus +RH-Acked-by: Baoquan He +RH-Acked-by: Pingfan Liu + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1507353 +Build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16534135 +Tested: ppc64le, x86_64 with several memory sizes. + +The total memory size we get in kernel is usually slightly less than 2G with +2G memory module machine. The main reason is bios/firmware reserve some area +it will not export all memory as usable to Linux. + +2G memory X86 kvm guest test result of the total_mem value: +UEFI boot with ovmf: 0x7ef10000 +Legacy boot kvm guest: 0x7ff7cc00 +This is also a problem on arm64 UEFI booted system according to my test. + +Thus for example crashkernel=1G-2G:128M, if we have a 1G memory +machine, we get total size 1023M from firmware then it will not fall +into 1G-2G thus no memory reserved. User will never know that, it is +hard to let user to know the exact total value we get in kernel + +An option is to use dmi/smbios to get physical memory size, but it's not +reliable as well. According to Prarit hardware vendors sometimes screw this up. +Thus round up total size to 128M to workaround this problem. + +Posted below patch in upstream, but no response yet: +http://lists.infradead.org/pipermail/kexec/2018-April/020568.html + +Upstream Status: RHEL only +Signed-off-by: Dave Young +Signed-off-by: Herton R. Krzesinski +--- + kernel/crash_core.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/kernel/crash_core.c b/kernel/crash_core.c +index 9f1557b98468..d631d22089ba 100644 +--- a/kernel/crash_core.c ++++ b/kernel/crash_core.c +@@ -7,6 +7,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -39,6 +40,15 @@ static int __init parse_crashkernel_mem(char *cmdline, + unsigned long long *crash_base) + { + char *cur = cmdline, *tmp; ++ unsigned long long total_mem = system_ram; ++ ++ /* ++ * Firmware sometimes reserves some memory regions for it's own use. ++ * so we get less than actual system memory size. ++ * Workaround this by round up the total size to 128M which is ++ * enough for most test cases. ++ */ ++ total_mem = roundup(total_mem, SZ_128M); + + /* for each entry of the comma-separated list */ + do { +@@ -83,13 +93,13 @@ static int __init parse_crashkernel_mem(char *cmdline, + return -EINVAL; + } + cur = tmp; +- if (size >= system_ram) { ++ if (size >= total_mem) { + pr_warn("crashkernel: invalid size\n"); + return -EINVAL; + } + + /* match ? */ +- if (system_ram >= start && system_ram < end) { ++ if (total_mem >= start && total_mem < end) { + *crash_size = size; + break; + } +-- +2.26.0 + diff --git a/0001-kernel-add-SUPPORT_REMOVED-kernel-taint.patch b/0001-kernel-add-SUPPORT_REMOVED-kernel-taint.patch new file mode 100644 index 000000000..539a083a5 --- /dev/null +++ b/0001-kernel-add-SUPPORT_REMOVED-kernel-taint.patch @@ -0,0 +1,53 @@ +From d312a43dd323205fc681cbeaa800da2ada9e16dc Mon Sep 17 00:00:00 2001 +From: Tomas Henzl +Date: Thu, 9 Aug 2018 13:44:15 -0400 +Subject: [PATCH] kernel: add SUPPORT_REMOVED kernel taint + +Message-id: +Patchwork-id: 226423 +O-Subject: [RHEL-8.0 V4 01/10] kernel: add SUPPORT_REMOVED kernel taint +Bugzilla: 1602033 +RH-Acked-by: Maurizio Lombardi +RH-Acked-by: Jiri Benc +RH-Acked-by: Rob Evers + +Upstream Status: RHEL only + +rh_taint, pci : add information about removed hardware + +Upstream Status: RHEL only +Signed-off-by: Herton R. Krzesinski +--- + include/linux/kernel.h | 2 +- + kernel/panic.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/linux/kernel.h b/include/linux/kernel.h +index b372b2daae7f..8c1ace147540 100644 +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -605,7 +605,7 @@ extern enum system_states { + #define TAINT_24 24 + #define TAINT_25 25 + #define TAINT_26 26 +-#define TAINT_27 27 ++#define TAINT_SUPPORT_REMOVED 27 + /* Bits 28 - 31 are reserved for Red Hat use only */ + #define TAINT_RESERVED28 28 + #define TAINT_RESERVED29 29 +diff --git a/kernel/panic.c b/kernel/panic.c +index fa06b8cbc457..4f08e4f4a6b0 100644 +--- a/kernel/panic.c ++++ b/kernel/panic.c +@@ -385,7 +385,7 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = { + [ TAINT_24 ] = { '?', '-', false }, + [ TAINT_25 ] = { '?', '-', false }, + [ TAINT_26 ] = { '?', '-', false }, +- [ TAINT_27 ] = { '?', '-', false }, ++ [ TAINT_SUPPORT_REMOVED ] = { 'h', ' ', false }, + [ TAINT_RESERVED28 ] = { '?', '-', false }, + [ TAINT_RESERVED29 ] = { '?', '-', false }, + [ TAINT_RESERVED30 ] = { '?', '-', false }, +-- +2.26.0 + diff --git a/0001-megaraid_sas-remove-deprecated-pci-ids.patch b/0001-megaraid_sas-remove-deprecated-pci-ids.patch new file mode 100644 index 000000000..eec133f0a --- /dev/null +++ b/0001-megaraid_sas-remove-deprecated-pci-ids.patch @@ -0,0 +1,47 @@ +From efa70639e722576719dfa980da086ab20ba8a3b7 Mon Sep 17 00:00:00 2001 +From: Tomas Henzl +Date: Thu, 2 Jan 2020 14:24:37 -0500 +Subject: [PATCH] megaraid_sas: remove deprecated pci-ids + +Message-id: <20180403143030.4971-2-thenzl@redhat.com> +Patchwork-id: 7432 +O-Subject: [kernel team] [RHEL8 e-stor PATCH] megaraid_sas: remove deprecated pci-ids +Bugzilla: 1509329 +RH-Acked-by: Maurizio Lombardi +RH-Acked-by: Chris Leech + +bz#1509329 +brew - task_15594743 + +RH specific - remove EOL devices from the pci-id table +(devices to remove were selected by Broadcom) + +Upstream Status: RHEL only +Signed-off-by: Herton R. Krzesinski +--- + drivers/scsi/megaraid/megaraid_sas_base.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index babe85d7b537..9b4df28defd2 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -133,6 +133,7 @@ static void megasas_get_pd_info(struct megasas_instance *instance, + */ + static struct pci_device_id megasas_pci_table[] = { + ++#ifndef CONFIG_RHEL_DIFFERENCES + {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS1064R)}, + /* xscale IOP */ + {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS1078R)}, +@@ -151,6 +152,7 @@ static struct pci_device_id megasas_pci_table[] = { + /* xscale IOP, vega */ + {PCI_DEVICE(PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_PERC5)}, + /* xscale IOP */ ++#endif + {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FUSION)}, + /* Fusion */ + {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_PLASMA)}, +-- +2.26.0 + diff --git a/0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch b/0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch new file mode 100644 index 000000000..568dafb7c --- /dev/null +++ b/0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch @@ -0,0 +1,71 @@ +From c781d5feeecf6dff4e0d424df5d88660e00aeb8d Mon Sep 17 00:00:00 2001 +From: Murphy Zhou +Date: Sun, 29 Sep 2019 17:56:59 +0800 +Subject: [PATCH] mm/kmemleak: skip late_init if not skip disable + +Now if DEFAULT_OFF set to y, kmemleak_init will start the cleanup_work +workqueue. Then late_init call will set kmemleak_initialized to 1, the +cleaup workqueue will try to do cleanup, triggering: + +[24.738773] ================================================================== +[24.742784] BUG: KASAN: global-out-of-bounds in __kmemleak_do_cleanup+0x166/0x180 +[24.744144] Key type ._fscrypt registered +[24.745680] Read of size 8 at addr ffffffff88746c90 by task kworker/3:1/171 +[24.745687] +[24.745697] CPU: 3 PID: 171 Comm: kworker/3:1 Not tainted 5.3.0-v5.3-12475-gcbafe18 #1 +[24.745701] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011 +[24.745710] Workqueue: events kmemleak_do_cleanup +[24.745717] Call Trace: +[24.745736] dump_stack+0x7c/0xc0 +[24.745755] print_address_description.constprop.4+0x1f/0x300 +[24.751562] Key type .fscrypt registered +[24.754370] __kasan_report.cold.8+0x76/0xb2 +[24.754388] ? __kmemleak_do_cleanup+0x166/0x180 +[24.754407] kasan_report+0xe/0x20 +[24.778543] __kmemleak_do_cleanup+0x166/0x180 +[24.780795] process_one_work+0x919/0x17d0 +[24.782929] ? pwq_dec_nr_in_flight+0x320/0x320 +[24.785092] worker_thread+0x87/0xb40 +[24.786948] ? __kthread_parkme+0xc3/0x190 +[24.789217] ? process_one_work+0x17d0/0x17d0 +[24.791414] kthread+0x333/0x3f0 +[24.793031] ? kthread_create_worker_on_cpu+0xc0/0xc0 +[24.795473] ret_from_fork+0x3a/0x50 +[24.797303] +[24.798091] The buggy address belongs to the variable: +[24.800634] mem_pool_free_count+0x10/0x40 +[24.802656] +[24.803434] Memory state around the buggy address: +[24.805793] ffffffff88746b80: 04 fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 +[24.809177] ffffffff88746c00: 00 fa fa fa fa fa fa fa 00 00 fa fa fa fa fa fa +[24.812407] >ffffffff88746c80: 04 fa fa fa fa fa fa fa 00 00 fa fa fa fa fa fa +[24.815638] ^ +[24.817372] ffffffff88746d00: 00 00 fa fa fa fa fa fa 00 00 00 00 00 00 00 00 +[24.820740] ffffffff88746d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +[24.824021] ================================================================== + +Fixes: c5665868183f ("mm: kmemleak: use the memory pool for early allocations") +Signed-off-by: Murphy Zhou +--- + mm/kmemleak.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/mm/kmemleak.c b/mm/kmemleak.c +index e362dc3d2028..0c3dfb8eef67 100644 +--- a/mm/kmemleak.c ++++ b/mm/kmemleak.c +@@ -1958,6 +1958,11 @@ void __init kmemleak_init(void) + */ + static int __init kmemleak_late_init(void) + { ++ if (!kmemleak_skip_disable) { ++ kmemleak_disable(); ++ return 0; ++ } ++ + kmemleak_initialized = 1; + + debugfs_create_file("kmemleak", 0644, NULL, NULL, &kmemleak_fops); +-- +2.26.0 + diff --git a/0001-modules-add-rhelversion-MODULE_INFO-tag.patch b/0001-modules-add-rhelversion-MODULE_INFO-tag.patch new file mode 100644 index 000000000..ac92cce7c --- /dev/null +++ b/0001-modules-add-rhelversion-MODULE_INFO-tag.patch @@ -0,0 +1,151 @@ +From 363400b236384f01175a85ffc51d7aeccc3423a3 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Mon, 7 Jan 2019 21:03:10 +0000 +Subject: [PATCH] modules: add rhelversion MODULE_INFO tag + +There were several changes in the 5.0-rc1 kernel that required +this patch to be rebased with some context diff. + + Patchwork-id: 7379 + O-Subject: [kernel team] [RHEL8.0 BZ 1544999 1/2] modules: add rhelversion MODULE_INFO tag + Bugzilla: 1544999 + RH-Acked-by: Tony Camuso + RH-Acked-by: Oleg Nesterov + RH-Acked-by: Jarod Wilson + + Bugzilla: http://bugzilla.redhat.com/1544999 + + kernel-alt commit 9816b4b6ca5d4c0504d8806ce99442c90afbc8e6 + Author: Prarit Bhargava + Date: Fri Feb 9 18:09:26 2018 -0500 + + [kernel] modules: add rhelversion MODULE_INFO tag + + Message-id: <20180209180926.5955-3-prarit@redhat.com> + Patchwork-id: 205587 + O-Subject: [RHEL-ALT-7.5 BZ 1542796 2/2] modules: add rhelversion MODULE_INFO tag + Bugzilla: 1542796 + RH-Acked-by: David Arcari + RH-Acked-by: Tony Camuso + RH-Acked-by: Steve Best + + Bugzilla: http://bugzilla.redhat.com/1542796 + + rhel7 commit 9af8c3992ce5fff253c49abc0dedb3ec77badba4 + Author: Kyle McMartin + Date: Fri Sep 12 17:46:12 2014 -0400 + + [kernel] modules: add rhelversion MODULE_INFO tag + + Message-id: <20140912174612.GS29420@redacted.bos.redhat.com> + Patchwork-id: 94052 + O-Subject: [RHEL7.1 PATCH 2/6 v4] modules: add rhelversion MODULE_INFO tag + Bugzilla: 1110315 + RH-Acked-by: Prarit Bhargava + RH-Acked-by: Johannes Weiner + RH-Acked-by: Don Zickus + + From: Kyle McMartin + + Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1110315 + + >From kylem's RHEL8 post: + + Let's not lose this ability in RHEL8. Sadly can't be applied to RHEL7 + because it breaks KABI due to the struct module change. + + Inspired by bits of a147e4729d9920ccae2c717ca65c811cc0f93a1d in RHEL6, + which got lost for RHEL7.0. :/ + + Kyle is correct and doing this would break RHEL7's KABI. I'm taking this + patch in as a base and the next patch will resolve the KABI issues. + + [v2]: dzickus, cleanup add_rhelversion() + [v4]: resubmitted along with 16k stacks change + + Signed-off-by: Jarod Wilson + + Cc: Richard Guy Briggs + Cc: Peter Rajnoha + Cc: Laura Abbott + Cc: Josh Poimboeuf + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Herton R. Krzesinski +Acked-by: Don Zickus +Acked-by: Prarit Bhargava +--- + include/linux/module.h | 1 + + kernel/module.c | 2 ++ + scripts/mod/modpost.c | 8 ++++++++ + 3 files changed, 11 insertions(+) + +diff --git a/include/linux/module.h b/include/linux/module.h +index 1ad393e62bef..3fb19abee033 100644 +--- a/include/linux/module.h ++++ b/include/linux/module.h +@@ -371,6 +371,7 @@ struct module { + struct module_attribute *modinfo_attrs; + const char *version; + const char *srcversion; ++ const char *rhelversion; + struct kobject *holders_dir; + + /* Exported symbols */ +diff --git a/kernel/module.c b/kernel/module.c +index 646f1e2330d2..aed5b1fcadf8 100644 +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -799,6 +799,7 @@ static struct module_attribute modinfo_##field = { \ + + MODINFO_ATTR(version); + MODINFO_ATTR(srcversion); ++MODINFO_ATTR(rhelversion); + + static char last_unloaded_module[MODULE_NAME_LEN+1]; + +@@ -1263,6 +1264,7 @@ static struct module_attribute *modinfo_attrs[] = { + &module_uevent, + &modinfo_version, + &modinfo_srcversion, ++ &modinfo_rhelversion, + &modinfo_initstate, + &modinfo_coresize, + &modinfo_initsize, +diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c +index 5c3c50c5ec52..188eb460cede 100644 +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -21,6 +21,7 @@ + #include + #include "modpost.h" + #include "../../include/linux/license.h" ++#include "../../include/generated/uapi/linux/version.h" + + /* Are we using CONFIG_MODVERSIONS? */ + static int modversions = 0; +@@ -2381,6 +2382,12 @@ static void add_srcversion(struct buffer *b, struct module *mod) + } + } + ++static void add_rhelversion(struct buffer *b, struct module *mod) ++{ ++ buf_printf(b, "MODULE_INFO(rhelversion, \"%d.%d\");\n", RHEL_MAJOR, ++ RHEL_MINOR); ++} ++ + static void write_if_changed(struct buffer *b, const char *fname) + { + char *tmp; +@@ -2644,6 +2651,7 @@ int main(int argc, char **argv) + add_depends(&buf, mod); + add_moddevtable(&buf, mod); + add_srcversion(&buf, mod); ++ add_rhelversion(&buf, mod); + + sprintf(fname, "%s.mod.c", mod->name); + write_if_changed(&buf, fname); +-- +2.26.0 + diff --git a/0001-mpt-remove-certain-deprecated-pci-ids.patch b/0001-mpt-remove-certain-deprecated-pci-ids.patch new file mode 100644 index 000000000..34086cfac --- /dev/null +++ b/0001-mpt-remove-certain-deprecated-pci-ids.patch @@ -0,0 +1,71 @@ +From 8cb15c81a1a2180f824da5aad58f252ce23e1bbd Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Thu, 2 Jan 2020 14:24:36 -0500 +Subject: [PATCH] mpt*: remove certain deprecated pci-ids + +Message-id: <20190708192032.20922-1-jcline@redhat.com> +Patchwork-id: 266421 +O-Subject: [ARK INTERNAL PATCH] mpt*: remove certain deprecated pci-ids +Bugzilla: +RH-Acked-by: Don Zickus +RH-Acked-by: Jarod Wilson + +Commit 8f8384503e40 ("scsi: mpt3sas: Add support for NVMe Switch +Adapter") introduced a new PCI device ID which broke the patch context. + + Message-id: <20180403143030.4971-1-thenzl@redhat.com> + Patchwork-id: 7431 + O-Subject: [kernel team] [RHEL8 e-stor PATCH] mpt*: remove certain deprecated pci-ids + Bugzilla: 1511953 + RH-Acked-by: Maurizio Lombardi + RH-Acked-by: Chris Leech + + bz#1511953 + brew - task_15594743 + + RH specific - remove EOL devices from the pci-id table + (devices to remove were selected by Broadcom) + + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Jeremy Cline +--- + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index 04a40afe60e3..cec7799dc23f 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -11031,6 +11031,7 @@ bool scsih_ncq_prio_supp(struct scsi_device *sdev) + * The pci device ids are defined in mpi/mpi2_cnfg.h. + */ + static const struct pci_device_id mpt3sas_pci_table[] = { ++#ifndef CONFIG_RHEL_DIFFERENCES + /* Spitfire ~ 2004 */ + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2004, + PCI_ANY_ID, PCI_ANY_ID }, +@@ -11049,6 +11050,7 @@ static const struct pci_device_id mpt3sas_pci_table[] = { + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2116_2, + PCI_ANY_ID, PCI_ANY_ID }, ++#endif + /* Thunderbolt ~ 2208 */ + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_1, + PCI_ANY_ID, PCI_ANY_ID }, +@@ -11073,9 +11075,11 @@ static const struct pci_device_id mpt3sas_pci_table[] = { + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SWITCH_MPI_EP_1, + PCI_ANY_ID, PCI_ANY_ID }, ++#ifndef CONFIG_RHEL_DIFFERENCES + /* SSS6200 */ + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SSS6200, + PCI_ANY_ID, PCI_ANY_ID }, ++#endif + /* Fury ~ 3004 and 3008 */ + { MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3004, + PCI_ANY_ID, PCI_ANY_ID }, +-- +2.26.0 + diff --git a/0001-mptsas-Taint-kernel-if-mptsas-is-loaded.patch b/0001-mptsas-Taint-kernel-if-mptsas-is-loaded.patch new file mode 100644 index 000000000..9434a6000 --- /dev/null +++ b/0001-mptsas-Taint-kernel-if-mptsas-is-loaded.patch @@ -0,0 +1,51 @@ +From 91b12f6f400144722cbf26410ed77d910e91dda7 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Thu, 2 Jan 2020 14:24:46 -0500 +Subject: [PATCH] mptsas: Taint kernel if mptsas is loaded + +Author: Tomas Henzl +Date: Thu Jan 31 16:54:50 2019 -0500 + + [message] mptsas: Taint kernel if mptsas is loaded + + Message-id: <20190131165452.7562-2-thenzl@redhat.com> + Patchwork-id: 239764 + O-Subject: [RHEL8 e-stor 1/3] mptsas: Taint kernel if mptsas is loaded + Bugzilla: 1666730 + RH-Acked-by: Jarod Wilson + RH-Acked-by: Tony Camuso + RH-Acked-by: Maurizio Lombardi + + RHEL-only + + We are only keeping it to ease developer transitions, we're not + supporting it, so mark it as unsupported by tainting the kernel and + issuing an impossible to misunderstand message to the log + + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Laura Abbott +--- + drivers/message/fusion/mptsas.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c +index 6a79cd0ebe2b..c17614cd6ed8 100644 +--- a/drivers/message/fusion/mptsas.c ++++ b/drivers/message/fusion/mptsas.c +@@ -5290,6 +5290,11 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id) + ioc, MPI_SAS_OP_CLEAR_ALL_PERSISTENT); + } + ++#ifdef CONFIG_RHEL_DIFFERENCES ++ add_taint(TAINT_SUPPORT_REMOVED, LOCKDEP_STILL_OK); ++ pr_warn("MPTSAS MODULE IS NOT SUPPORTED\n"); ++#endif ++ + error = scsi_add_host(sh, &ioc->pcidev->dev); + if (error) { + dprintk(ioc, printk(MYIOC_s_ERR_FMT +-- +2.26.0 + diff --git a/0001-mptsas-pci-id-table-changes.patch b/0001-mptsas-pci-id-table-changes.patch new file mode 100644 index 000000000..ed02cf9ad --- /dev/null +++ b/0001-mptsas-pci-id-table-changes.patch @@ -0,0 +1,58 @@ +From 17b7b240a30ab7342db5e2853d13a41fb88bf2ee Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Thu, 2 Jan 2020 14:24:47 -0500 +Subject: [PATCH] mptsas: pci-id table changes + +Author: Tomas Henzl +Date: Thu Jan 31 16:54:51 2019 -0500 + + [message] mptsas: pci-id table changes + + Message-id: <20190131165452.7562-3-thenzl@redhat.com> + Patchwork-id: 239765 + O-Subject: [RHEL8 e-stor 2/3] mptsas: pci-id table changes + Bugzilla: 1666730 + RH-Acked-by: Jarod Wilson + RH-Acked-by: Tony Camuso + RH-Acked-by: Maurizio Lombardi + + RHEL-only + + We want to provide this driver only for the virtualisation use case, + so we remove all other entries from the pci-id table and add only the + single entry needed for virtualisation. + + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Laura Abbott +--- + drivers/message/fusion/mptsas.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c +index c17614cd6ed8..ca44a35ec411 100644 +--- a/drivers/message/fusion/mptsas.c ++++ b/drivers/message/fusion/mptsas.c +@@ -5358,6 +5358,10 @@ static void mptsas_remove(struct pci_dev *pdev) + } + + static struct pci_device_id mptsas_pci_table[] = { ++#ifdef CONFIG_RHEL_DIFFERENCES ++ { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068, ++ PCI_VENDOR_ID_VMWARE, PCI_ANY_ID }, ++#else + { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1064, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068, +@@ -5370,6 +5374,7 @@ static struct pci_device_id mptsas_pci_table[] = { + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068_820XELP, + PCI_ANY_ID, PCI_ANY_ID }, ++#endif + {0} /* Terminating entry */ + }; + MODULE_DEVICE_TABLE(pci, mptsas_pci_table); +-- +2.26.0 + diff --git a/0001-mptspi-Taint-kernel-if-mptspi-is-loaded.patch b/0001-mptspi-Taint-kernel-if-mptspi-is-loaded.patch new file mode 100644 index 000000000..d346699e1 --- /dev/null +++ b/0001-mptspi-Taint-kernel-if-mptspi-is-loaded.patch @@ -0,0 +1,51 @@ +From 1452b94264d571fe1675845b9947199539052275 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Thu, 2 Jan 2020 14:24:48 -0500 +Subject: [PATCH] mptspi: Taint kernel if mptspi is loaded + +Author: Tomas Henzl +Date: Thu Jan 10 16:11:43 2019 -0500 + + [message] mptspi: Taint kernel if mptspi is loaded + + Message-id: <20190110161145.5117-2-thenzl@redhat.com> + Patchwork-id: 237188 + O-Subject: [RHEL-8.0 e-stor 1/3] mptspi: Taint kernel if mptspi is loaded + Bugzilla: 1651803 + RH-Acked-by: Maurizio Lombardi + RH-Acked-by: Jarod Wilson + RH-Acked-by: Chris Leech + + RHEL-only + We are only keeping it to ease developer transitions, we're not + supporting it, so mark it as unsupported by tainting the kernel and + issuing an impossible to misunderstand message to the log + + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Laura Abbott +--- + drivers/message/fusion/mptspi.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c +index eabc4de5816c..c028f5944694 100644 +--- a/drivers/message/fusion/mptspi.c ++++ b/drivers/message/fusion/mptspi.c +@@ -1534,6 +1534,12 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id) + 0, 0, 0, 0, 5); + + scsi_scan_host(sh); ++ ++#ifdef CONFIG_RHEL_DIFFERENCES ++ add_taint(TAINT_SUPPORT_REMOVED, LOCKDEP_STILL_OK); ++ pr_warn("MPTSPI MODULE IS NOT SUPPORTED\n"); ++#endif ++ + return 0; + + out_mptspi_probe: +-- +2.26.0 + diff --git a/0001-mptspi-pci-id-table-changes.patch b/0001-mptspi-pci-id-table-changes.patch new file mode 100644 index 000000000..0d509829c --- /dev/null +++ b/0001-mptspi-pci-id-table-changes.patch @@ -0,0 +1,56 @@ +From 6e16943b6263eebcb9dd43c6ef2127cfce96ae44 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Thu, 2 Jan 2020 14:24:45 -0500 +Subject: [PATCH] mptspi: pci-id table changes + +Author: Tomas Henzl +Date: Thu Jan 10 16:11:44 2019 -0500 + + [message] mptspi: pci-id table changes + + Message-id: <20190110161145.5117-3-thenzl@redhat.com> + Patchwork-id: 237190 + O-Subject: [RHEL-8.0 e-stor 2/3] mptspi: pci-id table changes + Bugzilla: 1651803 + RH-Acked-by: Maurizio Lombardi + RH-Acked-by: Jarod Wilson + RH-Acked-by: Chris Leech + + RHEL-only + We want to provide this driver only for the virtualisation use case, + so we remove all other entries from the pci-id table and add only the + single entry needed for virtualisation. + + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Laura Abbott +--- + drivers/message/fusion/mptspi.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c +index c028f5944694..1f458e35effb 100644 +--- a/drivers/message/fusion/mptspi.c ++++ b/drivers/message/fusion/mptspi.c +@@ -1238,12 +1238,17 @@ static struct spi_function_template mptspi_transport_functions = { + */ + + static struct pci_device_id mptspi_pci_table[] = { ++#ifdef CONFIG_RHEL_DIFFERENCES ++ { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, ++ PCI_VENDOR_ID_VMWARE, PCI_ANY_ID }, ++#else + { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_ATTO, MPI_MANUFACTPAGE_DEVID_53C1030, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1035, + PCI_ANY_ID, PCI_ANY_ID }, ++#endif + {0} /* Terminating entry */ + }; + MODULE_DEVICE_TABLE(pci, mptspi_pci_table); +-- +2.26.0 + diff --git a/0001-put-RHEL-info-into-generated-headers.patch b/0001-put-RHEL-info-into-generated-headers.patch new file mode 100644 index 000000000..e7aa3486d --- /dev/null +++ b/0001-put-RHEL-info-into-generated-headers.patch @@ -0,0 +1,82 @@ +From 011b97c3927ab43e0d677c7beecff6e23b30c99d Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Mon, 7 Jan 2019 20:55:21 +0000 +Subject: [PATCH] put RHEL info into generated headers + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1663728 + +Commit 43fee2b23895 ("kbuild: do not redirect the first prerequisite for +filechk") upstream introduced some context diff. This just fixes that up. + + Bugzilla: http://bugzilla.redhat.com/1544999 + + kernel-alt commit b3bbf3db12b8a48491eb4175eae25eb907f092ac + Author: Prarit Bhargava + Date: Fri Feb 9 18:09:25 2018 -0500 + + [kernel] put RHEL info into generated headers + + Message-id: <20180209180926.5955-2-prarit@redhat.com> + Patchwork-id: 205585 + O-Subject: [RHEL-ALT-7.5 BZ 1542796 1/2] put RHEL info into generated headers + Bugzilla: 1542796 + RH-Acked-by: David Arcari + RH-Acked-by: Tony Camuso + RH-Acked-by: Steve Best + + Bugzilla: http://bugzilla.redhat.com/1542796 + + rhel7 commit 6199c642a685fba61a298901190659dbedb7c3c3 + Author: Jarod Wilson + Date: Thu Oct 10 20:14:33 2013 -0400 + + [redhat] put RHEL info into generated headers + + Message-id: <1381436073-8850-1-git-send-email-jarod@redhat.com> + Patchwork-id: 69475 + O-Subject: [RHEL7 PATCH] [redhat] put RHEL info into generated headers + Bugzilla: + RH-Acked-by: Neil Horman + RH-Acked-by: Rafael Aquini + RH-Acked-by: Kyle McMartin + + While glancing at the differences between RHEL6 and RHEL7's modifications to the + top-level Makefile, some discrepancies popped up... This brings RHEL7 in line + with all of the customizations we make in RHEL6 to get distro info propagated. + + Signed-off-by: Jarod Wilson + + Cc: Herton R. Krzesinski + Signed-off-by: Herton R. Krzesinski + + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Acked-by: Don Zickus +Acked-by: Prarit Bhargava +--- + Makefile | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 49b2709ff44e..0808100e660f 100644 +--- a/Makefile ++++ b/Makefile +@@ -1183,7 +1183,13 @@ endef + define filechk_version.h + echo \#define LINUX_VERSION_CODE $(shell \ + expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \ +- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' ++ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \ ++ echo '#define RHEL_MAJOR $(RHEL_MAJOR)'; \ ++ echo '#define RHEL_MINOR $(RHEL_MINOR)'; \ ++ echo '#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))'; \ ++ echo '#define RHEL_RELEASE_CODE \ ++ $(shell expr $(RHEL_MAJOR) \* 256 + $(RHEL_MINOR))'; \ ++ echo '#define RHEL_RELEASE "$(RHEL_RELEASE)"' + endef + + $(version_h): FORCE +-- +2.26.0 + diff --git a/0001-qla2xxx-Remove-PCI-IDs-of-deprecated-adapter.patch b/0001-qla2xxx-Remove-PCI-IDs-of-deprecated-adapter.patch new file mode 100644 index 000000000..bd9f0194b --- /dev/null +++ b/0001-qla2xxx-Remove-PCI-IDs-of-deprecated-adapter.patch @@ -0,0 +1,79 @@ +From a5da988261d925878ac5c003c7bfddb795179fef Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Thu, 2 Jan 2020 14:24:44 -0500 +Subject: [PATCH] qla2xxx: Remove PCI IDs of deprecated adapter + +Message-id: <20190708192223.21890-1-jcline@redhat.com> +Patchwork-id: 266422 +O-Subject: [ARK INTERNAL PATCH] qla2xxx: Remove PCI IDs of deprecated adapter +Bugzilla: +RH-Acked-by: Don Zickus +RH-Acked-by: Jarod Wilson + +Commit ecc89f25e225 ("scsi: qla2xxx: Add Device ID for ISP28XX") +introduced addition device IDs which broke the patch context. + + Message-id: <20180503234750.33648-1-hmadhani@redhat.com> + Patchwork-id: 212501 + O-Subject: [RHEL 8 e-stor PATCH v2] qla2xxx: Remove PCI IDs of deprecated adapter + Bugzilla: 1572233 + RH-Acked-by: Tomas Henzl + RH-Acked-by: Chris Leech + RH-Acked-by: Tom Coughlan + + Bugzilla: + ======== https://bugzilla.redhat.com/show_bug.cgi?id72233 + + commit none + + Brewbuild: + ========== https://brewweb.engineering.redhat.com/brew/taskinfo?taskID977226 + + Tetsing: + ======= N/A. PCI IDs are removed as part of this patch + + Signed-off-by: Himanshu Madhani + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Jeremy Cline + +Note: Simplified backport to just pci-ids +--- + drivers/scsi/qla2xxx/qla_os.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c +index d190db5ea7d9..e0e3d300f3be 100644 +--- a/drivers/scsi/qla2xxx/qla_os.c ++++ b/drivers/scsi/qla2xxx/qla_os.c +@@ -7759,6 +7759,7 @@ static const struct pci_error_handlers qla2xxx_err_handler = { + }; + + static struct pci_device_id qla2xxx_pci_tbl[] = { ++#ifndef CONFIG_RHEL_DIFFERENCES + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2300) }, +@@ -7771,13 +7772,18 @@ static struct pci_device_id qla2xxx_pci_tbl[] = { + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8432) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5422) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5432) }, ++#endif + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2532) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2031) }, ++#ifndef CONFIG_RHEL_DIFFERENCES + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8001) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8021) }, ++#endif + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8031) }, ++#ifndef CONFIG_RHEL_DIFFERENCES + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISPF001) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8044) }, ++#endif + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2071) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2271) }, + { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2261) }, +-- +2.26.0 + diff --git a/0001-qla4xxx-Remove-deprecated-PCI-IDs-from-RHEL-8.patch b/0001-qla4xxx-Remove-deprecated-PCI-IDs-from-RHEL-8.patch new file mode 100644 index 000000000..af550ec64 --- /dev/null +++ b/0001-qla4xxx-Remove-deprecated-PCI-IDs-from-RHEL-8.patch @@ -0,0 +1,56 @@ +From 887f53d23da5b992e6c1e41ab96690f9339db19c Mon Sep 17 00:00:00 2001 +From: Chad Dupuis +Date: Thu, 2 Jan 2020 14:24:39 -0500 +Subject: [PATCH] qla4xxx: Remove deprecated PCI IDs from RHEL 8 + +Message-id: <1524063895-23086-1-git-send-email-cdupuis@redhat.com> +Patchwork-id: 209742 +O-Subject: [RHEL 8 e-stor PATCH] qla4xxx: Remove depricated PCI IDs from RHEL 8. +Bugzilla: 1518874 +RH-Acked-by: Tomas Henzl +RH-Acked-by: Jarod Wilson + +Bugzilla: 1518874 + +RHEL 8 specific + +Brew build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID822250 + +Three PCI device IDs are marked as deprecated in RHEL 7: + +PCI_DEVICE_ID_QLOGIC_ISP8022 +PCI_DEVICE_ID_QLOGIC_ISP8324 +PCI_DEVICE_ID_QLOGIC_ISP8042 + +This patch removes them from the PCI table in RHEL 8 so the +qla4xxx driver will not bind to the hardware. + +Upstream Status: RHEL only +Signed-off-by: Herton R. Krzesinski +--- + drivers/scsi/qla4xxx/ql4_os.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c +index 5504ab11decc..e83771818767 100644 +--- a/drivers/scsi/qla4xxx/ql4_os.c ++++ b/drivers/scsi/qla4xxx/ql4_os.c +@@ -9842,6 +9842,7 @@ static struct pci_device_id qla4xxx_pci_tbl[] = { + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + }, ++#ifndef CONFIG_RHEL_DIFFERENCES + { + .vendor = PCI_VENDOR_ID_QLOGIC, + .device = PCI_DEVICE_ID_QLOGIC_ISP8022, +@@ -9860,6 +9861,7 @@ static struct pci_device_id qla4xxx_pci_tbl[] = { + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + }, ++#endif + {0, 0}, + }; + MODULE_DEVICE_TABLE(pci, qla4xxx_pci_tbl); +-- +2.26.0 + diff --git a/0001-redhat-rh_kabi-Add-macros-to-size-and-extend-structs.patch b/0001-redhat-rh_kabi-Add-macros-to-size-and-extend-structs.patch new file mode 100644 index 000000000..4561538bf --- /dev/null +++ b/0001-redhat-rh_kabi-Add-macros-to-size-and-extend-structs.patch @@ -0,0 +1,201 @@ +From cedb6dec3b60ec7c9bd8b2c87c4883db9ac53ed8 Mon Sep 17 00:00:00 2001 +From: Prarit Bhargava +Date: Wed, 19 Feb 2020 11:52:16 +0100 +Subject: [PATCH] redhat: rh_kabi: Add macros to size and extend structs + +RH-Acked-by: Ivan Vecera +RH-Acked-by: Jarod Wilson +RH-Acked-by: Jiri Benc + +Upstream: RHEL-only + +As noted in the reviews, there are some areas of future work: + +1) A further restriction on the access of the extended struct fields +would be to require the addition of an accessor function. +2) Additional macros to use RH_KABI_EXTEND fields. +3) Additional macros to mark extended struts' field for internal kernel +versus module use. + +The RHEL7 code contains macros to extend kernel structs. For example, the +RH_KABI_EXTEND() can be used to extend a struct when used appropriately. +This macro (and others similar to it) has a significant shortcoming as it +cannot be used in the case where a struct is known to allocate the struct +within a 3rd party module. For example, in RHELX.0, suppose there exists +a struct, + +struct in_kernel { + int foo0; +}; + +and an exported function, + +void in_kernel_set_foo(struct in_kernel *ink) +{ + ... + ink->foo0 = 0xBA5EBA11; + ... +} + +Let's also suppose a struct in_kernel is statically defined within a 3rd +party module, or dynamically allocated as + + struct in_kernel *3rd_party_ink; + ... + ink = kmalloc(sizeof(*3rd_party_ink), GFP_KERNEL); + ... + +In RHELX.1, suppose the struct is expanded by + +struct in_kernel { + int foo0; + RH_KABI_EXTEND(foo1) +}; + +and the exported function is modified as + +void in_kernel_set_foo(struct in_kernel *ink) +{ + ... + ink->foo0 = 0xBA5EBA11; + ink->foo1 = 0xBA5EBA11; + ... +} + +The 3rd party module, compiled against RHELX.0, will not have allocated +memory for foo1, and in_kernel_set_foo() will reference garbage in memory. + +To fix this problem, Jiri Benc came up with an great solution that should +be unified for all future RHELX.0 expansions of structs. RHEL7 commit +e33a3c136b56 ("[net] introduce net_device_ops_extended") adds a size +parameter to net_device_ops that can be queried to validate memory +accesses. In the patch, net_device_ops is expanded by embedding a +net_device_ops_extended struct and addig a size parameter. The size +parameter is used to compare the offset of a parameter in the +net_device_ops_extended struct to the size of the struct at compile time, +and if valid, the memory access can be programmatically allowed to occur. + +I have taken his idea and created several new standard macros that allow +structs to be expanded by embedding a new struct or by adding a pointer +to a new struct. + +There are, however, some rules that must be followed when using these +new macros: + +1. The default name of the extended struct is ##name##_rh. For example, +pci_dev_rh, device_rh, net_device_ops_rh, etc. +2. _rh structs cannot be shrunk in size as such changes would break the +size & offset comparison. +3. The size field _must_ be set at the spot of allocation for use. Use of the +_rh fields without setting the size field via RH_KABI_SET_SIZE|_PTR() is +invalid in the kernel or in a 3rd party module. +4. These new macros do not preclude expansions like + +struct in_kernel_rh { +}; + +struct in_kernel { + ... + RH_KABI_EXTEND(void *ptr1) + RH_KABI_EXTEND(void *ptr2) + RH_KABI_EXTEND(void *ptr3) + RH_KABI_EXTEND(void *ptr4) + RH_KABI_SIZE_AND_EXTEND_PTR(in_kernel) +}; + +These macros are generally intended for pre-KABI freeze use, however, +there may be cases where these macros can be used post-KABI freeze. +Due to the design of RH_KABI_EXTEND() which embeds __GENKSYMS__ care must +be taken when using RH_KABI_SIZE_AND_EXTEND|_PTR() post-KABI freeze to +ensure that structs are not embedded within another struct, verifying +offsets, etc. + +Add RH_KABI_SIZE_AND_EXTEND(), RH_KABI_SIZE_AND_EXTEND_PTR(), and +other macros that allow for safe expansion of structs. + +v2: Cleanup comments. +v3: Cleanup comments. + +Upstream Status: RHEL only +Signed-off-by: Prarit Bhargava +Signed-off-by: Jiri Benc +--- + include/linux/rh_kabi.h | 64 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 64 insertions(+) + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +index 87f2bd530df7..d551df994583 100644 +--- a/include/linux/rh_kabi.h ++++ b/include/linux/rh_kabi.h +@@ -186,4 +186,68 @@ + + #define RH_KABI_EXCLUDE(_elem) _RH_KABI_EXCLUDE(_elem); + ++/* ++ * RHEL macros to extend structs. ++ * ++ * base struct: The struct being extended. For example, pci_dev. ++ * extended struct: The Red Hat struct being added to the base struct. ++ * For example, pci_dev_rh. ++ * ++ * These macros should be used to extend structs before KABI freeze. ++ * They can be used post-KABI freeze in the limited case of the base ++ * struct not being embedded in another struct. ++ * ++ * Extended structs cannot be shrunk in size as changes will break ++ * the size & offset comparison. ++ * ++ * Extended struct elements are not guaranteed for access by modules unless ++ * explicitly commented as such in the declaration of the extended struct or ++ * the element in the extended struct. ++ */ ++ ++/* ++ * RH_KABI_SIZE_AND_EXTEND|_PTR() extends a struct by embedding or adding ++ * a pointer in a base struct. The name of the new struct is the name ++ * of the base struct appended with _rh. ++ */ ++#define RH_KABI_SIZE_AND_EXTEND_PTR(_struct) \ ++ size_t _struct##_size_rh; \ ++ RH_KABI_EXCLUDE(struct _struct##_rh *_struct##_rh) ++ ++#define RH_KABI_SIZE_AND_EXTEND(_struct) \ ++ size_t _struct##_size_rh; \ ++ RH_KABI_EXCLUDE(struct _struct##_rh _struct##_rh) ++ ++/* ++ * RH_KABI_SET_SIZE calculates and sets the size of the extended struct and ++ * stores it in the size_rh field for structs that are dynamically allocated. ++ * This macro MUST be called when expanding a base struct with ++ * RH_KABI_SIZE_AND_EXTEND, and it MUST be called from the allocation site ++ * regardless of being allocated in the kernel or a module. ++ */ ++#define RH_KABI_SET_SIZE(_name, _struct) ({ \ ++ _name._struct##_size_rh = sizeof(struct _struct##_rh); \ ++}) ++ ++/* ++ * RH_KABI_INIT_SIZE calculates and sets the size of the extended struct and ++ * stores it in the size_rh field for structs that are statically allocated. ++ * This macro MUST be called when expanding a base struct with ++ * RH_KABI_SIZE_AND_EXTEND, and it MUST be called from the declaration site ++ * regardless of being allocated in the kernel or a module. ++ */ ++#define RH_KABI_INIT_SIZE(_struct) \ ++ ._struct##_size_rh = sizeof(struct _struct##_rh), ++ ++/* ++ * RH_KABI_CHECK_EXT verifies allocated memory exists. This MUST be called to ++ * verify that memory in the _rh struct is valid, and can be called ++ * regardless if RH_KABI_SIZE_AND_EXTEND or RH_KABI_SIZE_AND_EXTEND_PTR is ++ * used. ++ */ ++#define RH_KABI_CHECK_EXT(_ptr, _struct, _field) ({ \ ++ size_t __off = offsetof(struct _struct##_rh, _field); \ ++ _ptr->_struct##_size_rh > __off ? true : false; \ ++}) ++ + #endif /* _LINUX_RH_KABI_H */ +-- +2.26.0 + diff --git a/0001-redhat-rh_kabi-Fix-RH_KABI_SET_SIZE-to-use-dereferen.patch b/0001-redhat-rh_kabi-Fix-RH_KABI_SET_SIZE-to-use-dereferen.patch new file mode 100644 index 000000000..d66a624e1 --- /dev/null +++ b/0001-redhat-rh_kabi-Fix-RH_KABI_SET_SIZE-to-use-dereferen.patch @@ -0,0 +1,47 @@ +From a1b242a1e3d4a0fb3712a7f63dc7a1fba01df75e Mon Sep 17 00:00:00 2001 +From: Tony Camuso +Date: Wed, 19 Feb 2020 11:52:17 +0100 +Subject: [PATCH] redhat: rh_kabi: Fix RH_KABI_SET_SIZE to use dereference + operator + +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Jiri Benc + +Upstream Status: RHEL only + +Since this macro is intended to record the sizeof extension structs that +are dynamically allocated, using the structure dereference operator '->' +is a better choice, else the macro would have to be invoked with the +_name argument dereferenced as (*_name). + +Also added a short note explaining that, unlike the other RH_KABI +macros that are invoked from within structs, this macro is invoked +outside a struct and therefore needs a semicolon termination. + +Upstream Status: RHEL only +Signed-off-by: Tony Camuso +Signed-off-by: Jiri Benc +--- + include/linux/rh_kabi.h | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +index d551df994583..9a4fea93ad99 100644 +--- a/include/linux/rh_kabi.h ++++ b/include/linux/rh_kabi.h +@@ -224,9 +224,11 @@ + * This macro MUST be called when expanding a base struct with + * RH_KABI_SIZE_AND_EXTEND, and it MUST be called from the allocation site + * regardless of being allocated in the kernel or a module. ++ * Note: since this macro is intended to be invoked outside of a struct, ++ * a semicolon is necessary at the end of the line where it is invoked. + */ + #define RH_KABI_SET_SIZE(_name, _struct) ({ \ +- _name._struct##_size_rh = sizeof(struct _struct##_rh); \ ++ _name->_struct##_size_rh = sizeof(struct _struct##_rh); \ + }) + + /* +-- +2.26.0 + diff --git a/0001-redhat-rh_kabi-Indirect-EXTEND-macros-so-nesting-of-.patch b/0001-redhat-rh_kabi-Indirect-EXTEND-macros-so-nesting-of-.patch new file mode 100644 index 000000000..142212472 --- /dev/null +++ b/0001-redhat-rh_kabi-Indirect-EXTEND-macros-so-nesting-of-.patch @@ -0,0 +1,50 @@ +From 6319fc7f2c963314fed1447ad502cf03f98a29b1 Mon Sep 17 00:00:00 2001 +From: Don Dutile +Date: Wed, 19 Feb 2020 11:52:18 +0100 +Subject: [PATCH] redhat: rh_kabi: Indirect EXTEND macros so nesting of other + macros will resolve. + +RH-Acked-by: Neil Horman +RH-Acked-by: Jonathan Toppins +RH-Acked-by: Jiri Benc +RH-Acked-by: Prarit Bhargava + +Upstream status: RHEL only + +rh_kabi: Indirect EXTEND macros so nesting of other macros will resolve. + +Upstream Status: RHEL only +Suggested-by: Jiri Benc +Signed-off-by: Donald Dutile +Signed-off-by: Jiri Benc +--- + include/linux/rh_kabi.h | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +index 9a4fea93ad99..cdc636d3013d 100644 +--- a/include/linux/rh_kabi.h ++++ b/include/linux/rh_kabi.h +@@ -210,13 +210,17 @@ + * a pointer in a base struct. The name of the new struct is the name + * of the base struct appended with _rh. + */ +-#define RH_KABI_SIZE_AND_EXTEND_PTR(_struct) \ ++#define _RH_KABI_SIZE_AND_EXTEND_PTR(_struct) \ + size_t _struct##_size_rh; \ + RH_KABI_EXCLUDE(struct _struct##_rh *_struct##_rh) ++#define RH_KABI_SIZE_AND_EXTEND_PTR(_struct) \ ++ _RH_KABI_SIZE_AND_EXTEND_PTR(_struct) + +-#define RH_KABI_SIZE_AND_EXTEND(_struct) \ ++#define _RH_KABI_SIZE_AND_EXTEND(_struct) \ + size_t _struct##_size_rh; \ + RH_KABI_EXCLUDE(struct _struct##_rh _struct##_rh) ++#define RH_KABI_SIZE_AND_EXTEND(_struct) \ ++ _RH_KABI_SIZE_AND_EXTEND(_struct) + + /* + * RH_KABI_SET_SIZE calculates and sets the size of the extended struct and +-- +2.26.0 + diff --git a/0001-redhat-rh_kabi-add-a-comment-with-warning-about-RH_K.patch b/0001-redhat-rh_kabi-add-a-comment-with-warning-about-RH_K.patch new file mode 100644 index 000000000..918c9877a --- /dev/null +++ b/0001-redhat-rh_kabi-add-a-comment-with-warning-about-RH_K.patch @@ -0,0 +1,67 @@ +From 597e056b1c23adf4dfc44cb725d1ab30ea227a5c Mon Sep 17 00:00:00 2001 +From: Jiri Benc +Date: Wed, 19 Feb 2020 11:52:20 +0100 +Subject: [PATCH] redhat: rh_kabi add a comment with warning about + RH_KABI_EXCLUDE usage + +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Don Zickus + +Upstream status: RHEL only + +We've seen attempts of incorrect RH_KABI_EXCLUDE usage. The macro is +dangerous and any structure marked by it becomes fragile. It completely +mutes the kABI checker and a future attempt to whitelist anything using +a structure annotated by RH_KABI_EXCLUDE will generate easily broken, error +prone code. Also, it bypasses module loading checks for the structure and +can lead to kernel crashes triggered by 3rd party modules unless carefully +prevented by RH_KABI_FORCE_CHANGE. + +As such, it should not be used routinely. The only valid usage is a code +heavily in flux upstream that is going to be refactored and turned upside +down, which is indirectly whitelisted and which we expect to need +backported. + +Any usage of this macro requires deep understanding of how kABI works. + +Add a big fat warning to stop the misuse. + +Upstream Status: RHEL only +Signed-off-by: Jiri Benc +--- + include/linux/rh_kabi.h | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +index 4debb7aaad48..b90601e8a657 100644 +--- a/include/linux/rh_kabi.h ++++ b/include/linux/rh_kabi.h +@@ -2,7 +2,7 @@ + * rh_kabi.h - Red Hat kABI abstraction header + * + * Copyright (c) 2014 Don Zickus +- * Copyright (c) 2015-2017 Jiri Benc ++ * Copyright (c) 2015-2018 Jiri Benc + * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa + * Copyright (c) 2016-2018 Prarit Bhargava + * Copyright (c) 2017 Paolo Abeni, Larry Woodman +@@ -93,7 +93,16 @@ + * corrupt memory. Instead, by changing the symbol checksum, such modules + * won't be loaded by the kernel. This macro should only be used as a + * last resort when all other KABI workarounds have failed. ++ * + * RH_KABI_EXCLUDE ++ * !!! WARNING: DANGEROUS, DO NOT USE unless you are aware of all the !!! ++ * !!! implications. This should be used ONLY EXCEPTIONALLY and only !!! ++ * !!! under specific circumstances. Very likely, this macro does not !!! ++ * !!! do what you expect it to do. Note that any usage of this macro !!! ++ * !!! MUST be paired with a RH_KABI_FORCE_CHANGE annotation of !!! ++ * !!! a suitable symbol (or an equivalent safeguard) and the commit !!! ++ * !!! log MUST explain why the chosen solution is appropriate. !!! ++ * + * Exclude the element from checksum generation. Any such element is + * considered not to be part of the kABI whitelist and may be changed at + * will. Note however that it's the responsibility of the developer +-- +2.26.0 + diff --git a/0001-redhat-rh_kabi-deduplication-friendly-structs.patch b/0001-redhat-rh_kabi-deduplication-friendly-structs.patch new file mode 100644 index 000000000..1e1edd71e --- /dev/null +++ b/0001-redhat-rh_kabi-deduplication-friendly-structs.patch @@ -0,0 +1,65 @@ +From 712d5caafb841524ec3a5e9499e5ab9f4818d9ca Mon Sep 17 00:00:00 2001 +From: Jiri Benc +Date: Wed, 19 Feb 2020 11:52:21 +0100 +Subject: [PATCH] redhat: rh_kabi: deduplication friendly structs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Acked-by: Bruno Meneguele +RH-Acked-by: Jesper Brouer +RH-Acked-by: Prarit Bhargava +RH-Acked-by: Jiri Olsa +RH-Acked-by: Toke Høiland-Jørgensen + +Upstream status: RHEL only + +We don't really need the field names to be globally unique, it is enough +when they are unique in the given struct. Since structs do not generally +span mutliple files, using the line number is enough to ensure an unique +identifier. It means that we can't use two RH_KABI_RENAME macros on the same +line but that's not happening anyway. + +This allows pahole to deduplicate the type info of structs using kABI +macros, lowering the size of vmlinuz from 26M to 8.5M. + +Upstream Status: RHEL only +Signed-off-by: Jiri Benc +--- + include/linux/rh_kabi.h | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +index b90601e8a657..ea9c136bf884 100644 +--- a/include/linux/rh_kabi.h ++++ b/include/linux/rh_kabi.h +@@ -163,6 +163,8 @@ + # define __RH_KABI_CHECK_SIZE(_item, _size) + #endif + ++#define RH_KABI_UNIQUE_ID __PASTE(rh_kabi_hidden_, __LINE__) ++ + # define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig + # define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ + _type (* rh_reserved_##_orig)(_args) +@@ -171,7 +173,7 @@ + _new; \ + struct { \ + _orig; \ +- } __UNIQUE_ID(rh_kabi_hide); \ ++ } RH_KABI_UNIQUE_ID; \ + __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new); \ + } + # define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _new +@@ -218,7 +220,7 @@ + #define RH_KABI_EXTEND_WITH_SIZE(_new, _size) \ + RH_KABI_EXTEND(union { \ + _new; \ +- unsigned long __UNIQUE_ID(rh_kabi_reserved)[_size]; \ ++ unsigned long RH_KABI_UNIQUE_ID[_size]; \ + __RH_KABI_CHECK_SIZE(_new, 8 * (_size)); \ + }) + +-- +2.26.0 + diff --git a/0001-redhat-rh_kabi-introduce-RH_KABI_EXTEND_WITH_SIZE.patch b/0001-redhat-rh_kabi-introduce-RH_KABI_EXTEND_WITH_SIZE.patch new file mode 100644 index 000000000..aa66e0dfd --- /dev/null +++ b/0001-redhat-rh_kabi-introduce-RH_KABI_EXTEND_WITH_SIZE.patch @@ -0,0 +1,101 @@ +From 3e3a0562776eed6e2689d69ff5cd93e77106f2d7 Mon Sep 17 00:00:00 2001 +From: Jiri Benc +Date: Wed, 19 Feb 2020 11:52:19 +0100 +Subject: [PATCH] redhat: rh_kabi: introduce RH_KABI_EXTEND_WITH_SIZE +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Acked-by: Toke Høiland-Jørgensen +RH-Acked-by: Hangbin Liu + +Upstream status: RHEL only + +This allows addition of a struct into struct while reserving extra space. +See the documentation in rh_kabi.h for details. + +The check for size is automatically disabled in -debug kernels that have +many fields larger than the production kernels (mutexes etc.) and that are +not under kABI guarantee. + +I'm also moving a misplaced comment for RH_KABI_FILL_HOLE. + +(Pointed out by Sabrina:) We need to force align the added field to 8 byte +offset. Otherwise, if the required alignment of the added field changed +later (e.g. it was a structure with only a single field that was changed +from int to char) and the previous field was smaller than long, it could +lead to the whole union shifting position and offsets of the following +fields could change. It's also safer to align the size, too. + +Let the 'size' parameter specify number of longs to be added and not number +of bytes. Note we assume a 64 bit architecture, which is the case for RHEL. + +Upstream Status: RHEL only +Signed-off-by: Jiri Benc +--- + include/linux/rh_kabi.h | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +index cdc636d3013d..4debb7aaad48 100644 +--- a/include/linux/rh_kabi.h ++++ b/include/linux/rh_kabi.h +@@ -45,11 +45,24 @@ + * RH_KABI_EXTEND + * Simple macro for adding a new element to a struct. + * +- * Warning: only use if a hole exists for _all_ arches. Use pahole to verify. ++ * RH_KABI_EXTEND_WITH_SIZE ++ * Adds a new element (usually a struct) to a struct and reserves extra ++ * space for the new element. The provided 'size' is the total space to ++ * be added in longs (i.e. it's 8 * 'size' bytes), including the size of ++ * the added element. It is automatically checked that the new element ++ * does not overflow the reserved space, now nor in the future. However, ++ * no attempt is done to check the content of the added element (struct) ++ * for kABI conformance - kABI checking inside the added element is ++ * effectively switched off. ++ * For any struct being added by RH_KABI_EXTEND_WITH_SIZE, it is ++ * recommended its content to be documented as not covered by kABI ++ * guarantee. + * + * RH_KABI_FILL_HOLE + * Simple macro for filling a hole in a struct. + * ++ * Warning: only use if a hole exists for _all_ arches. Use pahole to verify. ++ * + * RH_KABI_RENAME + * Simple macro for renaming an element without changing its type. This + * macro can be used in bitfields, for example. +@@ -133,8 +146,12 @@ + _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \ + __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) RH_KABI_ALIGN_WARNING); \ + } ++# define __RH_KABI_CHECK_SIZE(_item, _size) \ ++ _Static_assert(sizeof(struct{_item;}) <= _size, \ ++ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_item) " is larger than the reserved size (" __stringify(_size) " bytes)" RH_KABI_ALIGN_WARNING) + #else + # define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) ++# define __RH_KABI_CHECK_SIZE(_item, _size) + #endif + + # define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig +@@ -186,6 +203,16 @@ + + #define RH_KABI_EXCLUDE(_elem) _RH_KABI_EXCLUDE(_elem); + ++/* ++ * Extending a struct while reserving extra space. ++ */ ++#define RH_KABI_EXTEND_WITH_SIZE(_new, _size) \ ++ RH_KABI_EXTEND(union { \ ++ _new; \ ++ unsigned long __UNIQUE_ID(rh_kabi_reserved)[_size]; \ ++ __RH_KABI_CHECK_SIZE(_new, 8 * (_size)); \ ++ }) ++ + /* + * RHEL macros to extend structs. + * +-- +2.26.0 + diff --git a/0001-rh_kabi-introduce-RH_KABI_EXCLUDE.patch b/0001-rh_kabi-introduce-RH_KABI_EXCLUDE.patch new file mode 100644 index 000000000..73b92c499 --- /dev/null +++ b/0001-rh_kabi-introduce-RH_KABI_EXCLUDE.patch @@ -0,0 +1,104 @@ +From e68e07854e5f1a75f0058a5cdb7043e74ff05987 Mon Sep 17 00:00:00 2001 +From: Jakub Racek +Date: Thu, 22 Nov 2018 12:59:45 +0100 +Subject: [PATCH] rh_kabi: introduce RH_KABI_EXCLUDE + +Message-id: <1542891606-8048-24-git-send-email-jracek@redhat.com> +Patchwork-id: 233503 +O-Subject: [ARK PATCH 23/44] [kernel] rh_kabi: introduce RH_KABI_EXCLUDE +Bugzilla: 1652256 +RH-Acked-by: Don Zickus +RH-Acked-by: Jiri Benc + +From: Jiri Benc + +Bugzilla: 1652256 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=19244562 + +rhel8 commit 1c588b1bbe6ea3e9e1701ccf10e22f73f687ad02 +Author: Jiri Benc +Date: Wed Nov 21 17:15:39 2018 +0100 + + [kernel] rh_kabi: introduce RH_KABI_EXCLUDE + + Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1568551 + + Add a way to exclude certain fields of a structure that would be otherwise + kABI whitelisted. The new RH_KABI_EXCLUDE macro serves two purposes: + + 1. Not adding the excluded fields to symbol checksums, making their later + changes easier. + + 2. Document that the given fields are not considered to be kABI whitelisted + by Red Hat. + + Note that: + + - This needs to be done _before_ the actual structure gets whitelisted. + + - It still allows later conversion of the excluded fields to whitelist + covered fields by simply changing RH_KABI_EXCLUDE to RH_KABI_EXTEND. + + - The excluded fields can be modified at will but extra care needs to be + taken to not cause problems with 3rd party drivers using the fields. See + the comment inside the patch for details. + + Signed-off-by: Jiri Benc + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Jakub Racek +--- + include/linux/rh_kabi.h | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h +index e0d3353802bb..87f2bd530df7 100644 +--- a/include/linux/rh_kabi.h ++++ b/include/linux/rh_kabi.h +@@ -80,6 +80,18 @@ + * corrupt memory. Instead, by changing the symbol checksum, such modules + * won't be loaded by the kernel. This macro should only be used as a + * last resort when all other KABI workarounds have failed. ++ * RH_KABI_EXCLUDE ++ * Exclude the element from checksum generation. Any such element is ++ * considered not to be part of the kABI whitelist and may be changed at ++ * will. Note however that it's the responsibility of the developer ++ * changing the element to ensure 3rd party drivers using this element ++ * won't panic, for example by not allowing them to be loaded. That can ++ * be achieved by changing another, non-whitelisted symbol they use, ++ * either by nature of the change or by using RH_KABI_FORCE_CHANGE. ++ * ++ * Also note that any change to the element must preserve its size. Change ++ * of the size is not allowed and would constitute a silent kABI breakage. ++ * Beware that the RH_KABI_EXCLUDE macro does not do any size checks. + * + * NOTE + * Don't use ';' after these macros as it messes up the kABI checker by +@@ -100,6 +112,7 @@ + # define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args) + # define _RH_KABI_REPLACE(_orig, _new) _orig + # define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _orig ++# define _RH_KABI_EXCLUDE(_elem) + + #else + +@@ -137,6 +150,8 @@ + } + # define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _new + ++# define _RH_KABI_EXCLUDE(_elem) _elem ++ + #endif /* __GENKSYMS__ */ + + /* semicolon added wrappers for the RH_KABI_REPLACE macros */ +@@ -169,4 +184,6 @@ + */ + # define _RH_KABI_RESERVE(n) unsigned long rh_reserved##n + ++#define RH_KABI_EXCLUDE(_elem) _RH_KABI_EXCLUDE(_elem); ++ + #endif /* _LINUX_RH_KABI_H */ +-- +2.26.0 + diff --git a/0001-s390-Lock-down-the-kernel-when-the-IPL-secure-flag-i.patch b/0001-s390-Lock-down-the-kernel-when-the-IPL-secure-flag-i.patch new file mode 100644 index 000000000..792e1880c --- /dev/null +++ b/0001-s390-Lock-down-the-kernel-when-the-IPL-secure-flag-i.patch @@ -0,0 +1,67 @@ +From 74b1d77af819053398b9b5adde9b49d7481339af Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Wed, 30 Oct 2019 14:37:49 +0000 +Subject: [PATCH] s390: Lock down the kernel when the IPL secure flag is set + +Automatically lock down the kernel to LOCKDOWN_CONFIDENTIALITY_MAX if +the IPL secure flag is set. + +Upstream Status: RHEL only +Suggested-by: Philipp Rudo +Signed-off-by: Jeremy Cline +--- + arch/s390/include/asm/ipl.h | 1 + + arch/s390/kernel/ipl.c | 5 +++++ + arch/s390/kernel/setup.c | 4 ++++ + 3 files changed, 10 insertions(+) + +diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h +index b63bd66404b8..3482d9602e68 100644 +--- a/arch/s390/include/asm/ipl.h ++++ b/arch/s390/include/asm/ipl.h +@@ -109,6 +109,7 @@ int ipl_report_add_component(struct ipl_report *report, struct kexec_buf *kbuf, + unsigned char flags, unsigned short cert); + int ipl_report_add_certificate(struct ipl_report *report, void *key, + unsigned long addr, unsigned long len); ++bool ipl_get_secureboot(void); + + /* + * DIAG 308 support +diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c +index 4a71061974fd..9baf0b570c3d 100644 +--- a/arch/s390/kernel/ipl.c ++++ b/arch/s390/kernel/ipl.c +@@ -1901,3 +1901,8 @@ int ipl_report_free(struct ipl_report *report) + } + + #endif ++ ++bool ipl_get_secureboot(void) ++{ ++ return !!ipl_secure_flag; ++} +diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c +index 36445dd40fdb..b338a050c5aa 100644 +--- a/arch/s390/kernel/setup.c ++++ b/arch/s390/kernel/setup.c +@@ -49,6 +49,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -1093,6 +1094,9 @@ void __init setup_arch(char **cmdline_p) + + log_component_list(); + ++ if (ipl_get_secureboot()) ++ security_lock_kernel_down("Secure IPL mode", LOCKDOWN_INTEGRITY_MAX); ++ + /* Have one command line that is parsed and saved in /proc/cmdline */ + /* boot_command_line has been already set up in early.c */ + *cmdline_p = boot_command_line; +-- +2.26.0 + diff --git a/0001-scsi-smartpqi-add-inspur-advantech-ids.patch b/0001-scsi-smartpqi-add-inspur-advantech-ids.patch new file mode 100644 index 000000000..67f40f302 --- /dev/null +++ b/0001-scsi-smartpqi-add-inspur-advantech-ids.patch @@ -0,0 +1,70 @@ +From 0d44204e07c47e50d339c640b74515bee716ef0e Mon Sep 17 00:00:00 2001 +From: Don Brace +Date: Mon, 16 Jul 2018 19:20:41 -0400 +Subject: [PATCH] scsi: smartpqi: add inspur advantech ids + +Message-id: <1531768843-2544-4-git-send-email-dbrace@redhat.com> +Patchwork-id: 224988 +O-Subject: [RHEL 8.0 e-stor V2 PATCH 3/5] scsi: smartpqi: add inspur advantech ids +Bugzilla: 1503736 +RH-Acked-by: Ewan Milne +RH-Acked-by: Tomas Henzl + +From: Kevin Barnett + +Add support for these new device IDs: + + Advantech MIC-8312BridgeB + INSPUR PM8204-2GB + INSPUR PM8204-4GB + INSPUR PM8222-SHBA + +Upstream Status: RHEL only +Reviewed-by: Scott Benesh +Signed-off-by: Kevin Barnett +Signed-off-by: Don Brace +Signed-off-by: Martin K. Petersen +(cherry picked from commit 9f8d05fa98442de78d1ab30235b0cc656ed7aff0) +Signed-off-by: Don Brace +Signed-off-by: Herton R. Krzesinski +--- + drivers/scsi/smartpqi/smartpqi_init.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c +index cd157f11eb22..c5dc6cf57a71 100644 +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -8247,6 +8247,18 @@ static const struct pci_device_id pqi_pci_id_table[] = { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + 0x19e5, 0xd22c) + }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1bd4, 0x004a) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1bd4, 0x004b) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1bd4, 0x004c) ++ }, + { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + PCI_VENDOR_ID_ADAPTEC2, 0x0110) +@@ -8383,6 +8395,10 @@ static const struct pci_device_id pqi_pci_id_table[] = { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + PCI_VENDOR_ID_ADVANTECH, 0x8312) + }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ PCI_VENDOR_ID_ADVANTECH, 0x8312) ++ }, + { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + PCI_VENDOR_ID_DELL, 0x1fe0) +-- +2.26.0 + diff --git a/0001-security-lockdown-expose-a-hook-to-lock-the-kernel-d.patch b/0001-security-lockdown-expose-a-hook-to-lock-the-kernel-d.patch new file mode 100644 index 000000000..154271305 --- /dev/null +++ b/0001-security-lockdown-expose-a-hook-to-lock-the-kernel-d.patch @@ -0,0 +1,103 @@ +From 154a1cadac2380c5439c20d0073176601fae2ca1 Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Mon, 30 Sep 2019 21:22:47 +0000 +Subject: [PATCH] security: lockdown: expose a hook to lock the kernel down + +In order to automatically lock down kernels running on UEFI machines +booted in Secure Boot mode, expose the lock_kernel_down() hook. + +Upstream Status: RHEL only +Signed-off-by: Jeremy Cline +--- + include/linux/lsm_hook_defs.h | 2 ++ + include/linux/lsm_hooks.h | 6 ++++++ + include/linux/security.h | 5 +++++ + security/lockdown/lockdown.c | 1 + + security/security.c | 6 ++++++ + 5 files changed, 20 insertions(+) + +diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h +index 9cd4455528e5..dfa09696a0e5 100644 +--- a/include/linux/lsm_hook_defs.h ++++ b/include/linux/lsm_hook_defs.h +@@ -371,6 +371,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux) + #endif /* CONFIG_BPF_SYSCALL */ + + LSM_HOOK(int, 0, locked_down, enum lockdown_reason what) ++LSM_HOOK(int, 0, lock_kernel_down, const char *where, enum lockdown_reason level) ++ + + #ifdef CONFIG_PERF_EVENTS + LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type) +diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h +index 988ca0df7824..4ed37b95417c 100644 +--- a/include/linux/lsm_hooks.h ++++ b/include/linux/lsm_hooks.h +@@ -1476,6 +1476,12 @@ + * + * @what: kernel feature being accessed + * ++ * @lock_kernel_down ++ * Put the kernel into lock-down mode. ++ * ++ * @where: Where the lock-down is originating from (e.g. command line option) ++ * @level: The lock-down level (can only increase) ++ * + * Security hooks for perf events + * + * @perf_event_open: +diff --git a/include/linux/security.h b/include/linux/security.h +index a8d9310472df..381305889d89 100644 +--- a/include/linux/security.h ++++ b/include/linux/security.h +@@ -446,6 +446,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); + int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); + int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); + int security_locked_down(enum lockdown_reason what); ++int security_lock_kernel_down(const char *where, enum lockdown_reason level); + #else /* CONFIG_SECURITY */ + + static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data) +@@ -1273,6 +1274,10 @@ static inline int security_locked_down(enum lockdown_reason what) + { + return 0; + } ++static inline int security_lock_kernel_down(const char *where, enum lockdown_reason level) ++{ ++ return 0; ++} + #endif /* CONFIG_SECURITY */ + + #ifdef CONFIG_SECURITY_NETWORK +diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c +index 5a952617a0eb..61cc3cdc4d25 100644 +--- a/security/lockdown/lockdown.c ++++ b/security/lockdown/lockdown.c +@@ -73,6 +73,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what) + + static struct security_hook_list lockdown_hooks[] __lsm_ro_after_init = { + LSM_HOOK_INIT(locked_down, lockdown_is_locked_down), ++ LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down), + }; + + static int __init lockdown_lsm_init(void) +diff --git a/security/security.c b/security/security.c +index 7fed24b9d57e..37fab5c5d974 100644 +--- a/security/security.c ++++ b/security/security.c +@@ -2456,6 +2456,12 @@ int security_locked_down(enum lockdown_reason what) + } + EXPORT_SYMBOL(security_locked_down); + ++int security_lock_kernel_down(const char *where, enum lockdown_reason level) ++{ ++ return call_int_hook(lock_kernel_down, 0, where, level); ++} ++EXPORT_SYMBOL(security_lock_kernel_down); ++ + #ifdef CONFIG_PERF_EVENTS + int security_perf_event_open(struct perf_event_attr *attr, int type) + { +-- +2.26.0 + diff --git a/0001-soc-bcm2835-Sync-xHCI-reset-firmware-property-with-d.patch b/0001-soc-bcm2835-Sync-xHCI-reset-firmware-property-with-d.patch new file mode 100644 index 000000000..e58eb1ddc --- /dev/null +++ b/0001-soc-bcm2835-Sync-xHCI-reset-firmware-property-with-d.patch @@ -0,0 +1,32 @@ +From 9f336599cba799b8e740a336b4c851aee896ce62 Mon Sep 17 00:00:00 2001 +From: Nicolas Saenz Julienne +Date: Tue, 10 Mar 2020 13:52:39 +0100 +Subject: [PATCH] soc: bcm2835: Sync xHCI reset firmware property with + downstream + +The property is needed in order to trigger VL805's firmware load. Note +that there is a gap between the property introduced and the previous +one. This is also the case downstream. + +Signed-off-by: Nicolas Saenz Julienne +Reviewed-by: Florian Fainelli +--- + include/soc/bcm2835/raspberrypi-firmware.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h +index 7800e12ee042..cc9cdbc66403 100644 +--- a/include/soc/bcm2835/raspberrypi-firmware.h ++++ b/include/soc/bcm2835/raspberrypi-firmware.h +@@ -90,7 +90,7 @@ enum rpi_firmware_property_tag { + RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, + RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049, + RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050, +- ++ RPI_FIRMWARE_NOTIFY_XHCI_RESET = 0x00030058, + + /* Dispmanx TAGS */ + RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, +-- +2.26.0 + diff --git a/0001-tags.sh-Ignore-redhat-rpm.patch b/0001-tags.sh-Ignore-redhat-rpm.patch new file mode 100644 index 000000000..93c6fdeef --- /dev/null +++ b/0001-tags.sh-Ignore-redhat-rpm.patch @@ -0,0 +1,54 @@ +From 7828abcee3951b11c0a1357a3ac6be7da7895078 Mon Sep 17 00:00:00 2001 +From: Jeremy Cline +Date: Tue, 23 Jul 2019 15:26:09 +0000 +Subject: [PATCH] tags.sh: Ignore redhat/rpm + +Rebased for v5.3-rc1. Commit 95fd3f87bfbe ("kbuild: add a flag to force +absolute path for srctree") changed the context. + + Message-id: <20180529180112.28376-1-prarit@redhat.com> + Patchwork-id: 8101 + O-Subject: [kernel team] [RHEL8.0 BZ 1582586] scripts/tags.sh: Ignore redhat/rpm + Bugzilla: 1582586 + RH-Acked-by: Tony Camuso + RH-Acked-by: Jarod Wilson + RH-Acked-by: Neil Horman + + Bugzilla: http://bugzilla.redhat.com/1582586 + Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=16502319 + + RHEL_only. + + If 'make cscope' is run on a tree which has had 'make rh-rpm', + 'make rh-cross-*', etc., on it, the tags information contains entries + from the redhat/rpm/ directories. + + Ignore the tags search in redhat/rpm. + + Backport of RHEL7 464ad7779507 ("[scripts] tags.sh: ignore redhat/rpm"). + + Signed-off-by: Prarit Bhargava + Signed-off-by: Herton R. Krzesinski + +Upstream Status: RHEL only +Signed-off-by: Jeremy Cline +--- + scripts/tags.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/scripts/tags.sh b/scripts/tags.sh +index 4e18ae5282a6..805341c0aaf3 100755 +--- a/scripts/tags.sh ++++ b/scripts/tags.sh +@@ -16,6 +16,8 @@ fi + ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )" + # tags and cscope files should also ignore MODVERSION *.mod.c files + ignore="$ignore ( -name *.mod.c ) -prune -o" ++# RHEL tags and cscope should also ignore redhat/rpm ++ignore="$ignore ( -path redhat/rpm ) -prune -o" + + # Use make KBUILD_ABS_SRCTREE=1 {tags|cscope} + # to force full paths for a non-O= build +-- +2.26.0 + diff --git a/0001-tty-sysrq-Export-sysrq_mask.patch b/0001-tty-sysrq-Export-sysrq_mask.patch new file mode 100644 index 000000000..d6126ec37 --- /dev/null +++ b/0001-tty-sysrq-Export-sysrq_mask.patch @@ -0,0 +1,32 @@ +From bea79e0eef96456b406a1cc6eb7fed8ca6aca234 Mon Sep 17 00:00:00 2001 +From: Dmitry Safonov +Date: Wed, 1 Apr 2020 15:39:04 +0100 +Subject: [PATCH] tty/sysrq: Export sysrq_mask() + +Build fix for serial_core being module: + ERROR: modpost: "sysrq_mask" [drivers/tty/serial/serial_core.ko] undefined! + +Reported-by: Michael Ellerman +Reported-by: "kernelci.org bot" +Signed-off-by: Dmitry Safonov +Cc: Jiri Slaby +Cc: Greg Kroah-Hartman +--- + drivers/tty/sysrq.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c +index 5e0d0813da55..a0760bcd7a97 100644 +--- a/drivers/tty/sysrq.c ++++ b/drivers/tty/sysrq.c +@@ -74,6 +74,7 @@ int sysrq_mask(void) + return 1; + return sysrq_enabled; + } ++EXPORT_SYMBOL_GPL(sysrq_mask); + + /* + * A value of 1 means 'all', other nonzero values are an op mask: +-- +2.26.0 + diff --git a/Patchlist b/Patchlist new file mode 100644 index 000000000..e87123dc9 --- /dev/null +++ b/Patchlist @@ -0,0 +1,75 @@ +0001-initial-commit-Add-Red-Hat-variables-in-the-top-leve.patch +0001-Pull-the-RHEL-version-defines-out-of-the-Makefile.patch +0001-Introduce-CONFIG_RH_DISABLE_DEPRECATED.patch +0001-Add-Red-Hat-tainting.patch +0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch +0001-modules-add-rhelversion-MODULE_INFO-tag.patch +0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch +0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch +0001-acpi-prefer-booting-with-ACPI-over-DTS.patch +0001-kdump-round-up-the-total-memory-size-to-128M-for-cra.patch +0001-kdump-add-support-for-crashkernel-auto.patch +0001-put-RHEL-info-into-generated-headers.patch +0001-tags.sh-Ignore-redhat-rpm.patch +0001-kdump-fix-a-grammar-issue-in-a-kernel-message.patch +0001-add-Red-Hat-specific-taint-flags.patch +0001-bpf-set-unprivileged_bpf_disabled-to-1-by-default-ad.patch +0001-bpf-Add-tech-preview-taint-for-syscall.patch +0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch +0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch +0001-add-pci_hw_vendor_status.patch +0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch +0001-ice-mark-driver-as-tech-preview.patch +0001-scsi-smartpqi-add-inspur-advantech-ids.patch +0001-IB-rxe-Mark-Soft-RoCE-Transport-driver-as-tech-previ.patch +0001-ipmi-do-not-configure-ipmi-for-HPE-m400.patch +0001-rh_kabi-introduce-RH_KABI_EXCLUDE.patch +0001-iommu-arm-smmu-workaround-DMA-mode-issues.patch +0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch +0001-Add-support-for-deprecating-processors.patch +0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch +0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch +0001-security-lockdown-expose-a-hook-to-lock-the-kernel-d.patch +0001-efi-Add-an-EFI_SECURE_BOOT-flag-to-indicate-secure-b.patch +0001-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch +0001-s390-Lock-down-the-kernel-when-the-IPL-secure-flag-i.patch +0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch +0001-Rename-RH_DISABLE_DEPRECATED-to-RHEL_DIFFERENCES.patch +0001-kernel-add-SUPPORT_REMOVED-kernel-taint.patch +0001-mpt-remove-certain-deprecated-pci-ids.patch +0001-megaraid_sas-remove-deprecated-pci-ids.patch +0001-aacraid-Remove-depreciated-device-and-vendor-PCI-id-.patch +0001-qla4xxx-Remove-deprecated-PCI-IDs-from-RHEL-8.patch +0001-hpsa-remove-old-cciss-based-smartarray-pci-ids.patch +0001-mptspi-Taint-kernel-if-mptspi-is-loaded.patch +0001-be2iscsi-remove-unsupported-device-IDs.patch +0001-qla2xxx-Remove-PCI-IDs-of-deprecated-adapter.patch +0001-mptspi-pci-id-table-changes.patch +0001-mptsas-Taint-kernel-if-mptsas-is-loaded.patch +0001-mptsas-pci-id-table-changes.patch +0001-Removing-Obsolete-hba-pci-ids-from-rhel8.patch +0001-redhat-rh_kabi-Add-macros-to-size-and-extend-structs.patch +0001-redhat-rh_kabi-Fix-RH_KABI_SET_SIZE-to-use-dereferen.patch +0001-redhat-rh_kabi-Indirect-EXTEND-macros-so-nesting-of-.patch +0001-redhat-rh_kabi-introduce-RH_KABI_EXTEND_WITH_SIZE.patch +0001-redhat-rh_kabi-add-a-comment-with-warning-about-RH_K.patch +0001-redhat-rh_kabi-deduplication-friendly-structs.patch +0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch +0001-ARM-tegra-usb-no-reset.patch +0001-backlight-lp855x-Ensure-regulators-are-disabled-on-p.patch +0001-dt-bindings-Add-doc-for-Pine64-Pinebook-Pro.patch +0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch +0001-Drop-that-for-now.patch +0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch +0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch +0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch +0001-soc-bcm2835-Sync-xHCI-reset-firmware-property-with-d.patch +0001-firmware-raspberrypi-Introduce-vl805-init-routine.patch +0001-PCI-brcmstb-Wait-for-Raspberry-Pi-s-firmware-when-pr.patch +0001-USB-pci-quirks-Add-Raspberry-Pi-4-quirk.patch +0001-dt-bindings-panel-add-binding-for-Xingbangda-XBD599-.patch +0001-drm-panel-add-Xingbangda-XBD599-panel.patch +0001-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timing-calcu.patch +0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch +0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.patch +0001-tty-sysrq-Export-sysrq_mask.patch diff --git a/filter-modules.sh.fedora b/filter-modules.sh.fedora index eb246e157..9c2783be9 100755 --- a/filter-modules.sh.fedora +++ b/filter-modules.sh.fedora @@ -14,7 +14,7 @@ # listed here. # Set the default dirs/modules to filter out -driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb soundwire staging tty uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn leds media/common media/dvb-core media/dvb-frontends media/firewire media/i2c media/mc media/mmc media/pci media/platform media/radio media/rc media/spi media/tuners media/usb media/v4l2-core memstick mfd mmc mtd nfc ntb pcmcia platform power ssb soundwire staging tty uio uwb w1" chardrvs="mwave pcmcia" diff --git a/filter-modules.sh.rhel b/filter-modules.sh.rhel index c417efadf..55c7109e7 100755 --- a/filter-modules.sh.rhel +++ b/filter-modules.sh.rhel @@ -14,7 +14,7 @@ # listed here. # Set the default dirs/modules to filter out -driverdirs="atm auxdisplay bcma bluetooth firewire fmc iio infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb staging tty uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc iio infiniband isdn leds media/common media/dvb-core media/dvb-frontends media/firewire media/i2c media/mc media/mmc media/pci media/platform media/radio media/rc media/spi media/tuners media/usb media/v4l2-core memstick mfd mmc mtd nfc ntb pcmcia platform power ssb staging tty uio uwb w1" chardrvs="mwave pcmcia" diff --git a/kernel-aarch64-debug-fedora.config b/kernel-aarch64-debug-fedora.config index 66f3293b2..cce04c020 100644 --- a/kernel-aarch64-debug-fedora.config +++ b/kernel-aarch64-debug-fedora.config @@ -1529,7 +1529,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set CONFIG_DRM_DW_HDMI_AHB_AUDIO=m CONFIG_DRM_DW_HDMI_CEC=m diff --git a/kernel-aarch64-fedora.config b/kernel-aarch64-fedora.config index 3299f5d92..2f17a4023 100644 --- a/kernel-aarch64-fedora.config +++ b/kernel-aarch64-fedora.config @@ -1521,7 +1521,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set CONFIG_DRM_DW_HDMI_AHB_AUDIO=m CONFIG_DRM_DW_HDMI_CEC=m diff --git a/kernel-armv7hl-debug-fedora.config b/kernel-armv7hl-debug-fedora.config index 05e35c125..aa52b7c4a 100644 --- a/kernel-armv7hl-debug-fedora.config +++ b/kernel-armv7hl-debug-fedora.config @@ -1527,7 +1527,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set CONFIG_DRM_DW_HDMI_AHB_AUDIO=m CONFIG_DRM_DW_HDMI_CEC=m diff --git a/kernel-armv7hl-fedora.config b/kernel-armv7hl-fedora.config index 41ac57792..37e0e91ff 100644 --- a/kernel-armv7hl-fedora.config +++ b/kernel-armv7hl-fedora.config @@ -1520,7 +1520,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set CONFIG_DRM_DW_HDMI_AHB_AUDIO=m CONFIG_DRM_DW_HDMI_CEC=m diff --git a/kernel-armv7hl-lpae-debug-fedora.config b/kernel-armv7hl-lpae-debug-fedora.config index 4bd53d1b6..7597f917e 100644 --- a/kernel-armv7hl-lpae-debug-fedora.config +++ b/kernel-armv7hl-lpae-debug-fedora.config @@ -1495,7 +1495,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set CONFIG_DRM_DW_HDMI_AHB_AUDIO=m CONFIG_DRM_DW_HDMI_CEC=m diff --git a/kernel-armv7hl-lpae-fedora.config b/kernel-armv7hl-lpae-fedora.config index b98f47c16..09399993b 100644 --- a/kernel-armv7hl-lpae-fedora.config +++ b/kernel-armv7hl-lpae-fedora.config @@ -1488,7 +1488,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set CONFIG_DRM_DW_HDMI_AHB_AUDIO=m CONFIG_DRM_DW_HDMI_CEC=m diff --git a/kernel-i686-debug-fedora.config b/kernel-i686-debug-fedora.config index 12e8cdd33..6147380a0 100644 --- a/kernel-i686-debug-fedora.config +++ b/kernel-i686-debug-fedora.config @@ -1288,7 +1288,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel-i686-fedora.config b/kernel-i686-fedora.config index d5f92305e..f88dae950 100644 --- a/kernel-i686-fedora.config +++ b/kernel-i686-fedora.config @@ -1279,7 +1279,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel-ppc64le-debug-fedora.config b/kernel-ppc64le-debug-fedora.config index 9fa8f485d..1bd1eaa35 100644 --- a/kernel-ppc64le-debug-fedora.config +++ b/kernel-ppc64le-debug-fedora.config @@ -1191,7 +1191,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel-ppc64le-fedora.config b/kernel-ppc64le-fedora.config index ee5db6c99..8f40ac5e9 100644 --- a/kernel-ppc64le-fedora.config +++ b/kernel-ppc64le-fedora.config @@ -1182,7 +1182,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel-s390x-debug-fedora.config b/kernel-s390x-debug-fedora.config index 00e4ea494..cbb00353c 100644 --- a/kernel-s390x-debug-fedora.config +++ b/kernel-s390x-debug-fedora.config @@ -1198,7 +1198,7 @@ CONFIG_DRM_ANALOGIX_ANX78XX=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel-s390x-fedora.config b/kernel-s390x-fedora.config index 629a21a76..d25e69fd9 100644 --- a/kernel-s390x-fedora.config +++ b/kernel-s390x-fedora.config @@ -1189,7 +1189,7 @@ CONFIG_DRM_ANALOGIX_ANX78XX=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel-x86_64-debug-fedora.config b/kernel-x86_64-debug-fedora.config index f9eba7a4b..c0a9e5dab 100644 --- a/kernel-x86_64-debug-fedora.config +++ b/kernel-x86_64-debug-fedora.config @@ -1324,7 +1324,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel-x86_64-fedora.config b/kernel-x86_64-fedora.config index 7815d0ff4..ae1473303 100644 --- a/kernel-x86_64-fedora.config +++ b/kernel-x86_64-fedora.config @@ -1315,7 +1315,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_DISPLAY_CONNECTOR=m CONFIG_DRM_DP_AUX_CHARDEV=y -# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_DP_CEC=y # CONFIG_DRM_DUMB_VGA_DAC is not set # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set # CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set diff --git a/kernel.spec b/kernel.spec index 7e085081e..ebdf078d9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -30,7 +30,7 @@ Summary: The Linux kernel # For a stable, released kernel, released_kernel should be 1. %global released_kernel 0 -%global distro_build 0.rc2.20200422git18bf34080c4c.1 +%global distro_build 0.rc2.20200423git7adc4b399952.1 %if 0%{?fedora} %define secure_boot_arch x86_64 @@ -69,10 +69,10 @@ Summary: The Linux kernel %endif %define rpmversion 5.7.0 -%define pkgrelease 0.rc2.20200422git18bf34080c4c.1 +%define pkgrelease 0.rc2.20200423git7adc4b399952.1 # allow pkg_release to have configurable %%{?dist} tag -%define specrelease 0.rc2.20200422git18bf34080c4c.1%{?buildid}%{?dist} +%define specrelease 0.rc2.20200423git7adc4b399952.1%{?buildid}%{?dist} %define pkg_release %{specrelease} @@ -568,7 +568,7 @@ BuildRequires: asciidoc # exact git commit you can run # # xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-20200422git18bf34080c4c.tar.xz +Source0: linux-20200423git7adc4b399952.tar.xz # Name of the packaged file containing signing key @@ -697,6 +697,7 @@ Source2001: cpupower.config # source tree, but in the mean time we carry this to support the legacy workflow Source3000: merge.pl Source3001: kernel-local +Source3002: Patchlist Source4000: README.rst @@ -704,6 +705,86 @@ Source4000: README.rst Patch1: patch-%{rpmversion}-redhat.patch +%if !%{nopatches} + +Patch2: 0001-initial-commit-Add-Red-Hat-variables-in-the-top-leve.patch +Patch3: 0001-Pull-the-RHEL-version-defines-out-of-the-Makefile.patch +Patch4: 0001-Introduce-CONFIG_RH_DISABLE_DEPRECATED.patch +Patch5: 0001-Add-Red-Hat-tainting.patch +Patch6: 0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch +Patch7: 0001-modules-add-rhelversion-MODULE_INFO-tag.patch +Patch8: 0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch +Patch9: 0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch +Patch10: 0001-acpi-prefer-booting-with-ACPI-over-DTS.patch +Patch11: 0001-kdump-round-up-the-total-memory-size-to-128M-for-cra.patch +Patch12: 0001-kdump-add-support-for-crashkernel-auto.patch +Patch13: 0001-put-RHEL-info-into-generated-headers.patch +Patch14: 0001-tags.sh-Ignore-redhat-rpm.patch +Patch15: 0001-kdump-fix-a-grammar-issue-in-a-kernel-message.patch +Patch16: 0001-add-Red-Hat-specific-taint-flags.patch +Patch17: 0001-bpf-set-unprivileged_bpf_disabled-to-1-by-default-ad.patch +Patch18: 0001-bpf-Add-tech-preview-taint-for-syscall.patch +Patch19: 0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch +Patch20: 0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch +Patch21: 0001-add-pci_hw_vendor_status.patch +Patch22: 0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch +Patch23: 0001-ice-mark-driver-as-tech-preview.patch +Patch24: 0001-scsi-smartpqi-add-inspur-advantech-ids.patch +Patch25: 0001-IB-rxe-Mark-Soft-RoCE-Transport-driver-as-tech-previ.patch +Patch26: 0001-ipmi-do-not-configure-ipmi-for-HPE-m400.patch +Patch27: 0001-rh_kabi-introduce-RH_KABI_EXCLUDE.patch +Patch28: 0001-iommu-arm-smmu-workaround-DMA-mode-issues.patch +Patch29: 0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch +Patch30: 0001-Add-support-for-deprecating-processors.patch +Patch31: 0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch +Patch32: 0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch +Patch33: 0001-security-lockdown-expose-a-hook-to-lock-the-kernel-d.patch +Patch34: 0001-efi-Add-an-EFI_SECURE_BOOT-flag-to-indicate-secure-b.patch +Patch35: 0001-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch +Patch36: 0001-s390-Lock-down-the-kernel-when-the-IPL-secure-flag-i.patch +Patch37: 0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch +Patch38: 0001-Rename-RH_DISABLE_DEPRECATED-to-RHEL_DIFFERENCES.patch +Patch39: 0001-kernel-add-SUPPORT_REMOVED-kernel-taint.patch +Patch40: 0001-mpt-remove-certain-deprecated-pci-ids.patch +Patch41: 0001-megaraid_sas-remove-deprecated-pci-ids.patch +Patch42: 0001-aacraid-Remove-depreciated-device-and-vendor-PCI-id-.patch +Patch43: 0001-qla4xxx-Remove-deprecated-PCI-IDs-from-RHEL-8.patch +Patch44: 0001-hpsa-remove-old-cciss-based-smartarray-pci-ids.patch +Patch45: 0001-mptspi-Taint-kernel-if-mptspi-is-loaded.patch +Patch46: 0001-be2iscsi-remove-unsupported-device-IDs.patch +Patch47: 0001-qla2xxx-Remove-PCI-IDs-of-deprecated-adapter.patch +Patch48: 0001-mptspi-pci-id-table-changes.patch +Patch49: 0001-mptsas-Taint-kernel-if-mptsas-is-loaded.patch +Patch50: 0001-mptsas-pci-id-table-changes.patch +Patch51: 0001-Removing-Obsolete-hba-pci-ids-from-rhel8.patch +Patch52: 0001-redhat-rh_kabi-Add-macros-to-size-and-extend-structs.patch +Patch53: 0001-redhat-rh_kabi-Fix-RH_KABI_SET_SIZE-to-use-dereferen.patch +Patch54: 0001-redhat-rh_kabi-Indirect-EXTEND-macros-so-nesting-of-.patch +Patch55: 0001-redhat-rh_kabi-introduce-RH_KABI_EXTEND_WITH_SIZE.patch +Patch56: 0001-redhat-rh_kabi-add-a-comment-with-warning-about-RH_K.patch +Patch57: 0001-redhat-rh_kabi-deduplication-friendly-structs.patch +Patch58: 0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch +Patch59: 0001-ARM-tegra-usb-no-reset.patch +Patch60: 0001-backlight-lp855x-Ensure-regulators-are-disabled-on-p.patch +Patch61: 0001-dt-bindings-Add-doc-for-Pine64-Pinebook-Pro.patch +Patch62: 0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch +Patch63: 0001-Drop-that-for-now.patch +Patch64: 0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch +Patch65: 0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch +Patch66: 0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch +Patch67: 0001-soc-bcm2835-Sync-xHCI-reset-firmware-property-with-d.patch +Patch68: 0001-firmware-raspberrypi-Introduce-vl805-init-routine.patch +Patch69: 0001-PCI-brcmstb-Wait-for-Raspberry-Pi-s-firmware-when-pr.patch +Patch70: 0001-USB-pci-quirks-Add-Raspberry-Pi-4-quirk.patch +Patch71: 0001-dt-bindings-panel-add-binding-for-Xingbangda-XBD599-.patch +Patch72: 0001-drm-panel-add-Xingbangda-XBD599-panel.patch +Patch73: 0001-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timing-calcu.patch +Patch74: 0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch +Patch75: 0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.patch +Patch76: 0001-tty-sysrq-Export-sysrq_mask.patch + +%endif + # empty final patch to facilitate testing of kernel patches Patch999999: linux-kernel-test.patch @@ -1196,12 +1277,93 @@ ApplyOptionalPatch() fi } -%setup -q -n kernel-20200422git18bf34080c4c -c -mv linux-20200422git18bf34080c4c linux-%{KVERREL} +%setup -q -n kernel-20200423git7adc4b399952 -c +mv linux-20200423git7adc4b399952 linux-%{KVERREL} cd linux-%{KVERREL} ApplyOptionalPatch patch-%{rpmversion}-redhat.patch + +%if !%{nopatches} + +ApplyOptionalPatch 0001-initial-commit-Add-Red-Hat-variables-in-the-top-leve.patch +ApplyOptionalPatch 0001-Pull-the-RHEL-version-defines-out-of-the-Makefile.patch +ApplyOptionalPatch 0001-Introduce-CONFIG_RH_DISABLE_DEPRECATED.patch +ApplyOptionalPatch 0001-Add-Red-Hat-tainting.patch +ApplyOptionalPatch 0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch +ApplyOptionalPatch 0001-modules-add-rhelversion-MODULE_INFO-tag.patch +ApplyOptionalPatch 0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch +ApplyOptionalPatch 0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch +ApplyOptionalPatch 0001-acpi-prefer-booting-with-ACPI-over-DTS.patch +ApplyOptionalPatch 0001-kdump-round-up-the-total-memory-size-to-128M-for-cra.patch +ApplyOptionalPatch 0001-kdump-add-support-for-crashkernel-auto.patch +ApplyOptionalPatch 0001-put-RHEL-info-into-generated-headers.patch +ApplyOptionalPatch 0001-tags.sh-Ignore-redhat-rpm.patch +ApplyOptionalPatch 0001-kdump-fix-a-grammar-issue-in-a-kernel-message.patch +ApplyOptionalPatch 0001-add-Red-Hat-specific-taint-flags.patch +ApplyOptionalPatch 0001-bpf-set-unprivileged_bpf_disabled-to-1-by-default-ad.patch +ApplyOptionalPatch 0001-bpf-Add-tech-preview-taint-for-syscall.patch +ApplyOptionalPatch 0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch +ApplyOptionalPatch 0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch +ApplyOptionalPatch 0001-add-pci_hw_vendor_status.patch +ApplyOptionalPatch 0001-kABI-Add-generic-kABI-macros-to-use-for-kABI-workaro.patch +ApplyOptionalPatch 0001-ice-mark-driver-as-tech-preview.patch +ApplyOptionalPatch 0001-scsi-smartpqi-add-inspur-advantech-ids.patch +ApplyOptionalPatch 0001-IB-rxe-Mark-Soft-RoCE-Transport-driver-as-tech-previ.patch +ApplyOptionalPatch 0001-ipmi-do-not-configure-ipmi-for-HPE-m400.patch +ApplyOptionalPatch 0001-rh_kabi-introduce-RH_KABI_EXCLUDE.patch +ApplyOptionalPatch 0001-iommu-arm-smmu-workaround-DMA-mode-issues.patch +ApplyOptionalPatch 0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch +ApplyOptionalPatch 0001-Add-support-for-deprecating-processors.patch +ApplyOptionalPatch 0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch +ApplyOptionalPatch 0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch +ApplyOptionalPatch 0001-security-lockdown-expose-a-hook-to-lock-the-kernel-d.patch +ApplyOptionalPatch 0001-efi-Add-an-EFI_SECURE_BOOT-flag-to-indicate-secure-b.patch +ApplyOptionalPatch 0001-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch +ApplyOptionalPatch 0001-s390-Lock-down-the-kernel-when-the-IPL-secure-flag-i.patch +ApplyOptionalPatch 0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch +ApplyOptionalPatch 0001-Rename-RH_DISABLE_DEPRECATED-to-RHEL_DIFFERENCES.patch +ApplyOptionalPatch 0001-kernel-add-SUPPORT_REMOVED-kernel-taint.patch +ApplyOptionalPatch 0001-mpt-remove-certain-deprecated-pci-ids.patch +ApplyOptionalPatch 0001-megaraid_sas-remove-deprecated-pci-ids.patch +ApplyOptionalPatch 0001-aacraid-Remove-depreciated-device-and-vendor-PCI-id-.patch +ApplyOptionalPatch 0001-qla4xxx-Remove-deprecated-PCI-IDs-from-RHEL-8.patch +ApplyOptionalPatch 0001-hpsa-remove-old-cciss-based-smartarray-pci-ids.patch +ApplyOptionalPatch 0001-mptspi-Taint-kernel-if-mptspi-is-loaded.patch +ApplyOptionalPatch 0001-be2iscsi-remove-unsupported-device-IDs.patch +ApplyOptionalPatch 0001-qla2xxx-Remove-PCI-IDs-of-deprecated-adapter.patch +ApplyOptionalPatch 0001-mptspi-pci-id-table-changes.patch +ApplyOptionalPatch 0001-mptsas-Taint-kernel-if-mptsas-is-loaded.patch +ApplyOptionalPatch 0001-mptsas-pci-id-table-changes.patch +ApplyOptionalPatch 0001-Removing-Obsolete-hba-pci-ids-from-rhel8.patch +ApplyOptionalPatch 0001-redhat-rh_kabi-Add-macros-to-size-and-extend-structs.patch +ApplyOptionalPatch 0001-redhat-rh_kabi-Fix-RH_KABI_SET_SIZE-to-use-dereferen.patch +ApplyOptionalPatch 0001-redhat-rh_kabi-Indirect-EXTEND-macros-so-nesting-of-.patch +ApplyOptionalPatch 0001-redhat-rh_kabi-introduce-RH_KABI_EXTEND_WITH_SIZE.patch +ApplyOptionalPatch 0001-redhat-rh_kabi-add-a-comment-with-warning-about-RH_K.patch +ApplyOptionalPatch 0001-redhat-rh_kabi-deduplication-friendly-structs.patch +ApplyOptionalPatch 0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch +ApplyOptionalPatch 0001-ARM-tegra-usb-no-reset.patch +ApplyOptionalPatch 0001-backlight-lp855x-Ensure-regulators-are-disabled-on-p.patch +ApplyOptionalPatch 0001-dt-bindings-Add-doc-for-Pine64-Pinebook-Pro.patch +ApplyOptionalPatch 0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch +ApplyOptionalPatch 0001-Drop-that-for-now.patch +ApplyOptionalPatch 0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch +ApplyOptionalPatch 0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch +ApplyOptionalPatch 0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch +ApplyOptionalPatch 0001-soc-bcm2835-Sync-xHCI-reset-firmware-property-with-d.patch +ApplyOptionalPatch 0001-firmware-raspberrypi-Introduce-vl805-init-routine.patch +ApplyOptionalPatch 0001-PCI-brcmstb-Wait-for-Raspberry-Pi-s-firmware-when-pr.patch +ApplyOptionalPatch 0001-USB-pci-quirks-Add-Raspberry-Pi-4-quirk.patch +ApplyOptionalPatch 0001-dt-bindings-panel-add-binding-for-Xingbangda-XBD599-.patch +ApplyOptionalPatch 0001-drm-panel-add-Xingbangda-XBD599-panel.patch +ApplyOptionalPatch 0001-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timing-calcu.patch +ApplyOptionalPatch 0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch +ApplyOptionalPatch 0001-e1000e-bump-up-timeout-to-wait-when-ME-un-configure-.patch +ApplyOptionalPatch 0001-tty-sysrq-Export-sysrq_mask.patch + +%endif + ApplyOptionalPatch linux-kernel-test.patch # END OF PATCH APPLICATIONS @@ -1231,6 +1393,7 @@ pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ tools/perf/tests/attr.py \ tools/perf/scripts/python/stat-cpi.py \ tools/perf/scripts/python/sched-migration.py \ + tools/testing/selftests/drivers/net/mlxsw/sharedbuffer_configuration.py \ Documentation \ scripts/gen_compile_commands.py @@ -2457,6 +2620,7 @@ fi %{_bindir}/lsgpio %{_bindir}/gpio-hammer %{_bindir}/gpio-event-mon +%{_bindir}/gpio-watch %{_mandir}/man1/kvm_stat* %{_bindir}/kvm_stat @@ -2490,6 +2654,7 @@ fi %{_mandir}/man8/bpftool-net.8.gz %{_mandir}/man8/bpftool-feature.8.gz %{_mandir}/man8/bpftool-btf.8.gz +%{_mandir}/man8/bpftool-struct_ops.8.gz %if %{with_debuginfo} %files -f bpftool-debuginfo.list -n bpftool-debuginfo @@ -2603,8 +2768,14 @@ fi # # %changelog -* Wed Apr 22 2020 Justin M. Forbes [5.7.0-0.rc2.20200422git18bf34080c4c.1] -- 18bf34080c4c rebase +* Thu Apr 23 2020 CKI@GitLab [5.7.0-0.rc2.20200423git7adc4b399952.1] +- 7adc4b399952 rebase +- Match template format in kernel.spec.template ("Justin M. Forbes") +- Break out the Patches into individual files for dist-git ("Justin M. Forbes") +- Break the Red Hat patch into individual commits (Jeremy Cline) +- Adjust module filtering so CONFIG_DRM_DP_CEC can be set (Jeremy Cline) +- Add a script to generate release tags and branches (Jeremy Cline) +- Set CONFIG_VDPA for fedora ("Justin M. Forbes") - Provide defaults in ark-rebase-patches.sh (Jeremy Cline) - Default ark-rebase-patches.sh to not report issues (Jeremy Cline) diff --git a/patch-5.7.0-redhat.patch b/patch-5.7.0-redhat.patch index bda3b0012..9246b5c50 100644 --- a/patch-5.7.0-redhat.patch +++ b/patch-5.7.0-redhat.patch @@ -1,296 +1,13 @@ - .get_maintainer.conf | 1 + - .gitlab-ci.yml | 10 + - Documentation/admin-guide/kdump/kdump.rst | 11 + - Documentation/admin-guide/kernel-parameters.txt | 8 + - .../devicetree/bindings/arm/rockchip.yaml | 5 + - .../bindings/display/panel/xingbangda,xbd599.yaml | 50 +++ - Kconfig | 2 + - Kconfig.redhat | 17 + - Makefile | 14 +- - Makefile.rhelver | 45 +++ - arch/arm/Kconfig | 4 +- - arch/arm/include/asm/uaccess.h | 8 +- - arch/arm64/Kconfig | 3 +- - .../boot/dts/allwinner/sun50i-a64-pinephone.dtsi | 37 +++ - arch/arm64/kernel/acpi.c | 2 +- - arch/s390/include/asm/ipl.h | 1 + - arch/s390/kernel/ipl.c | 5 + - arch/s390/kernel/setup.c | 4 + - arch/x86/kernel/cpu/common.c | 1 + - arch/x86/kernel/setup.c | 154 ++++++++- - drivers/acpi/apei/hest.c | 8 + - drivers/acpi/irq.c | 17 +- - drivers/acpi/scan.c | 9 + - drivers/ata/libahci.c | 18 + - drivers/char/ipmi/ipmi_dmi.c | 15 + - drivers/char/ipmi/ipmi_msghandler.c | 16 +- - drivers/firmware/Kconfig | 1 + - drivers/firmware/efi/Makefile | 1 + - drivers/firmware/efi/efi.c | 124 +++++-- - drivers/firmware/efi/secureboot.c | 38 +++ - drivers/firmware/raspberrypi.c | 38 +++ - drivers/gpu/drm/panel/Kconfig | 9 + - drivers/gpu/drm/panel/Makefile | 1 + - drivers/gpu/drm/panel/panel-xingbangda-xbd599.c | 366 +++++++++++++++++++++ - drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 10 +- - drivers/hid/hid-rmi.c | 64 ---- - drivers/infiniband/sw/rxe/rxe.c | 2 + - drivers/input/rmi4/rmi_driver.c | 124 ++++--- - drivers/iommu/iommu.c | 22 ++ - drivers/message/fusion/mptsas.c | 10 + - drivers/message/fusion/mptspi.c | 11 + - drivers/net/ethernet/intel/e1000e/ich8lan.c | 4 +- - drivers/net/ethernet/intel/ice/ice_main.c | 1 + - drivers/pci/controller/pcie-brcmstb.c | 15 + - drivers/pci/pci-driver.c | 29 ++ - drivers/pci/quirks.c | 24 ++ - drivers/scsi/aacraid/linit.c | 2 + - drivers/scsi/be2iscsi/be_main.c | 2 + - drivers/scsi/hpsa.c | 4 + - drivers/scsi/lpfc/lpfc_ids.h | 14 + - drivers/scsi/megaraid/megaraid_sas_base.c | 2 + - drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 + - drivers/scsi/qla2xxx/qla_os.c | 6 + - drivers/scsi/qla4xxx/ql4_os.c | 2 + - drivers/scsi/smartpqi/smartpqi_init.c | 16 + - drivers/tty/sysrq.c | 1 + - drivers/usb/core/hub.c | 7 + - drivers/usb/host/pci-quirks.c | 16 + - drivers/video/backlight/lp855x_bl.c | 20 +- - include/linux/efi.h | 21 +- - include/linux/kernel.h | 34 +- - include/linux/lsm_hook_defs.h | 2 + - include/linux/lsm_hooks.h | 6 + - include/linux/module.h | 1 + - include/linux/pci.h | 4 + - include/linux/rh_kabi.h | 297 +++++++++++++++++ - include/linux/rmi.h | 1 + - include/linux/security.h | 5 + - include/soc/bcm2835/raspberrypi-firmware.h | 9 +- - kernel/Makefile | 2 + - kernel/bpf/syscall.c | 27 +- - kernel/crash_core.c | 28 +- - kernel/module.c | 2 + - kernel/module_signing.c | 9 +- - kernel/panic.c | 14 + - kernel/rh_taint.c | 93 ++++++ - mm/kmemleak.c | 5 + - scripts/mod/modpost.c | 8 + - scripts/tags.sh | 2 + - security/integrity/platform_certs/load_uefi.c | 6 +- - security/lockdown/Kconfig | 13 + - security/lockdown/lockdown.c | 1 + - security/security.c | 6 + - 83 files changed, 1855 insertions(+), 196 deletions(-) +From 8474ffe83a89d7b5d2c6515875a308ff682df6f9 Mon Sep 17 00:00:00 2001 +From: Kernel Team +Date: Thu, 23 Apr 2020 16:41:20 -0400 +Subject: [PATCH] Include Makefile.rhelver -diff --git a/.get_maintainer.conf b/.get_maintainer.conf -new file mode 100644 -index 000000000000..cc51b82e2f48 ---- /dev/null -+++ b/.get_maintainer.conf -@@ -0,0 +1 @@ -+# --mpath redhat/rhdocs/MAINTAINERS --no-git --no-git-fallback -diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml -new file mode 100644 -index 000000000000..f4cf9dff3436 ---- /dev/null -+++ b/.gitlab-ci.yml -@@ -0,0 +1,10 @@ -+# CI definitions for ark-patches and internal are maintained in a single file -+# outside the main repository because the two branches are regularly merged -+# together in release branches. Rather than trying to keep the two branches in -+# sync or have merge conflicts each time we merge the two branches, the -+# definition is stored externally and included in each branch. -+# -+# To update any CI jobs, please submit any merge requests to -+# https://gitlab.com/cki-project/kernel-ark-ci/. -+include: -+ - remote: 'https://gitlab.com/cki-project/kernel-ark-ci/raw/master/gitlab-ci.yml' -diff --git a/Documentation/admin-guide/kdump/kdump.rst b/Documentation/admin-guide/kdump/kdump.rst -index ac7e131d2935..3b3bf30e537d 100644 ---- a/Documentation/admin-guide/kdump/kdump.rst -+++ b/Documentation/admin-guide/kdump/kdump.rst -@@ -285,6 +285,17 @@ This would mean: - 2) if the RAM size is between 512M and 2G (exclusive), then reserve 64M - 3) if the RAM size is larger than 2G, then reserve 128M +Used to set the RHEL version. +--- + Makefile.rhelver | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) -+Or you can use crashkernel=auto if you have enough memory. The threshold -+is 2G on x86_64, arm64, ppc64 and ppc64le. The threshold is 4G for s390x. -+If your system memory is less than the threshold crashkernel=auto will not -+reserve memory. -+ -+The automatically reserved memory size varies based on architecture. -+The size changes according to system memory size like below: -+ x86_64: 1G-64G:160M,64G-1T:256M,1T-:512M -+ s390x: 4G-64G:160M,64G-1T:256M,1T-:512M -+ arm64: 2G-:512M -+ ppc64: 2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G - - - Boot into System Kernel -diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt -index f2a93c8679e8..9af891d5b8eb 100644 ---- a/Documentation/admin-guide/kernel-parameters.txt -+++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -5162,6 +5162,14 @@ - unknown_nmi_panic - [X86] Cause panic on unknown NMI. - -+ unprivileged_bpf_disabled= -+ Format: { "0" | "1" } -+ Sets the initial value of -+ kernel.unprivileged_bpf_disabled sysctl knob. -+ 0 - unprivileged bpf() syscall access is enabled. -+ 1 - unprivileged bpf() syscall access is disabled. -+ Default value is 1. -+ - usbcore.authorized_default= - [USB] Default USB device authorization: - (default -1 = authorized except for wireless USB, -diff --git a/Documentation/devicetree/bindings/arm/rockchip.yaml b/Documentation/devicetree/bindings/arm/rockchip.yaml -index 715586dea9bb..fff0439c6b78 100644 ---- a/Documentation/devicetree/bindings/arm/rockchip.yaml -+++ b/Documentation/devicetree/bindings/arm/rockchip.yaml -@@ -420,6 +420,11 @@ properties: - - const: pine64,rockpro64 - - const: rockchip,rk3399 - -+ - description: Pine64 PinebookPro -+ items: -+ - const: pine64,pinebook-pro -+ - const: rockchip,rk3399 -+ - - description: Radxa Rock - items: - - const: radxa,rock -diff --git a/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml b/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml -new file mode 100644 -index 000000000000..b27bcf11198f ---- /dev/null -+++ b/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml -@@ -0,0 +1,50 @@ -+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) -+%YAML 1.2 -+--- -+$id: http://devicetree.org/schemas/display/panel/xingbangda,xbd599.yaml# -+$schema: http://devicetree.org/meta-schemas/core.yaml# -+ -+title: Xingbangda XBD599 5.99in MIPI-DSI LCD panel -+ -+maintainers: -+ - Icenowy Zheng -+ -+allOf: -+ - $ref: panel-common.yaml# -+ -+properties: -+ compatible: -+ const: xingbangda,xbd599 -+ reg: true -+ backlight: true -+ reset-gpios: true -+ vcc-supply: -+ description: regulator that supplies the VCC voltage -+ iovcc-supply: -+ description: regulator that supplies the IOVCC voltage -+ -+required: -+ - compatible -+ - reg -+ - backlight -+ - vcc-supply -+ - iovcc-supply -+ -+additionalProperties: false -+ -+examples: -+ - | -+ dsi { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ panel@0 { -+ compatible = "xingbangda,xbd599"; -+ reg = <0>; -+ backlight = <&backlight>; -+ iovcc-supply = <®_dldo2>; -+ vcc-supply = <®_ldo_io0>; -+ }; -+ }; -+ -+... -diff --git a/Kconfig b/Kconfig -index e10b3ee084d4..01c0df787518 100644 ---- a/Kconfig -+++ b/Kconfig -@@ -32,3 +32,5 @@ source "lib/Kconfig" - source "lib/Kconfig.debug" - - source "Documentation/Kconfig" -+ -+source "Kconfig.redhat" -diff --git a/Kconfig.redhat b/Kconfig.redhat -new file mode 100644 -index 000000000000..effb81d04bfd ---- /dev/null -+++ b/Kconfig.redhat -@@ -0,0 +1,17 @@ -+# SPDX-License-Identifier: GPL-2.0-only -+# -+# Red Hat specific options -+# -+ -+menu "Red Hat options" -+ -+config RHEL_DIFFERENCES -+ bool "Remove support for deprecated features" -+ help -+ Red Hat may choose to deprecate certain features in its kernels. -+ Enable this option to remove support for hardware that is no -+ longer supported. -+ -+ Unless you want a restricted kernel, say N here. -+ -+endmenu -diff --git a/Makefile b/Makefile -index 49b2709ff44e..e6e36dcbebfb 100644 ---- a/Makefile -+++ b/Makefile -@@ -15,6 +15,10 @@ NAME = Kleptomaniac Octopus - PHONY := _all - _all: - -+# Set RHEL variables -+# Use this spot to avoid future merge conflicts -+include Makefile.rhelver -+ - # We are using a recursive build, so we need to do a little thinking - # to get the ordering right. - # -@@ -479,7 +483,7 @@ KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE - KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \ - -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ - -Werror=implicit-function-declaration -Werror=implicit-int \ -- -Wno-format-security \ -+ -Wno-format-security -Wno-address-of-packed-member \ - -std=gnu89 - KBUILD_CPPFLAGS := -D__KERNEL__ - KBUILD_AFLAGS_KERNEL := -@@ -1183,7 +1187,13 @@ endef - define filechk_version.h - echo \#define LINUX_VERSION_CODE $(shell \ - expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \ -- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' -+ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \ -+ echo '#define RHEL_MAJOR $(RHEL_MAJOR)'; \ -+ echo '#define RHEL_MINOR $(RHEL_MINOR)'; \ -+ echo '#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))'; \ -+ echo '#define RHEL_RELEASE_CODE \ -+ $(shell expr $(RHEL_MAJOR) \* 256 + $(RHEL_MINOR))'; \ -+ echo '#define RHEL_RELEASE "$(RHEL_RELEASE)"' - endef - - $(version_h): FORCE diff --git a/Makefile.rhelver b/Makefile.rhelver new file mode 100644 index 000000000000..7fb2464bc6de @@ -342,3253 +59,6 @@ index 000000000000..7fb2464bc6de + RHEL_RELEASE:=$(RHEL_RELEASE).$(EARLY_YRELEASE) + endif +endif -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 66a04f6f4775..7b63103f088c 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -1542,9 +1542,9 @@ config HIGHMEM - If unsure, say n. +-- +2.26.0 - config HIGHPTE -- bool "Allocate 2nd-level pagetables from highmem" if EXPERT -+ bool "Allocate 2nd-level pagetables from highmem" - depends on HIGHMEM -- default y -+ default n - help - The VM uses one page of physical memory for each page table. - For systems with a lot of processes, this can use a lot of -diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h -index 98c6b91be4a8..60055827dddc 100644 ---- a/arch/arm/include/asm/uaccess.h -+++ b/arch/arm/include/asm/uaccess.h -@@ -191,11 +191,12 @@ extern int __get_user_64t_4(void *); - #define __get_user_check(x, p) \ - ({ \ - unsigned long __limit = current_thread_info()->addr_limit - 1; \ -+ unsigned int __ua_flags = uaccess_save_and_enable(); \ - register typeof(*(p)) __user *__p asm("r0") = (p); \ - register __inttype(x) __r2 asm("r2"); \ - register unsigned long __l asm("r1") = __limit; \ - register int __e asm("r0"); \ -- unsigned int __ua_flags = uaccess_save_and_enable(); \ -+ unsigned int __err; \ - switch (sizeof(*(__p))) { \ - case 1: \ - if (sizeof((x)) >= 8) \ -@@ -223,9 +224,10 @@ extern int __get_user_64t_4(void *); - break; \ - default: __e = __get_user_bad(); break; \ - } \ -- uaccess_restore(__ua_flags); \ -+ __err = __e; \ - x = (typeof(*(p))) __r2; \ -- __e; \ -+ uaccess_restore(__ua_flags); \ -+ __err; \ - }) - - #define get_user(x, p) \ -diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 40fb05d96c60..f57bee916600 100644 ---- a/arch/arm64/Kconfig -+++ b/arch/arm64/Kconfig -@@ -857,7 +857,7 @@ endchoice - - config ARM64_FORCE_52BIT - bool "Force 52-bit virtual addresses for userspace" -- depends on ARM64_VA_BITS_52 && EXPERT -+ depends on ARM64_VA_BITS_52 - help - For systems with 52-bit userspace VAs enabled, the kernel will attempt - to maintain compatibility with older software by providing 48-bit VAs -@@ -1125,6 +1125,7 @@ config XEN - config FORCE_MAX_ZONEORDER - int - default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE) -+ default "13" if (ARCH_THUNDER && !ARM64_64K_PAGES && !RHEL_DIFFERENCES) - default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE) - default "11" - help -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -index cefda145c3c9..96d9150423e0 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -@@ -16,6 +16,15 @@ aliases { - serial0 = &uart0; - }; - -+ backlight: backlight { -+ compatible = "pwm-backlight"; -+ pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>; -+ brightness-levels = <0 16 18 20 22 24 26 29 32 35 38 42 46 51 56 62 68 75 83 91 100>; -+ default-brightness-level = <15>; -+ enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ -+ power-supply = <®_ldo_io0>; -+ }; -+ - chosen { - stdout-path = "serial0:115200n8"; - }; -@@ -84,6 +93,30 @@ &dai { - status = "okay"; - }; - -+&de { -+ status = "okay"; -+}; -+ -+&dphy { -+ status = "okay"; -+}; -+ -+&dsi { -+ vcc-dsi-supply = <®_dldo1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "okay"; -+ -+ panel@0 { -+ compatible = "xingbangda,xbd599"; -+ reg = <0>; -+ reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */ -+ iovcc-supply = <®_dldo2>; -+ vcc-supply = <®_ldo_io0>; -+ backlight = <&backlight>; -+ }; -+}; -+ - &ehci0 { - status = "okay"; - }; -@@ -188,6 +221,10 @@ &r_pio { - */ - }; - -+&r_pwm { -+ status = "okay"; -+}; -+ - &r_rsb { - status = "okay"; - -diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c -index a100483b47c4..29f693734edb 100644 ---- a/arch/arm64/kernel/acpi.c -+++ b/arch/arm64/kernel/acpi.c -@@ -39,7 +39,7 @@ int acpi_pci_disabled = 1; /* skip ACPI PCI scan and IRQ initialization */ - EXPORT_SYMBOL(acpi_pci_disabled); - - static bool param_acpi_off __initdata; --static bool param_acpi_on __initdata; -+static bool param_acpi_on __initdata = true; - static bool param_acpi_force __initdata; - - static int __init parse_acpi(char *arg) -diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h -index b63bd66404b8..3482d9602e68 100644 ---- a/arch/s390/include/asm/ipl.h -+++ b/arch/s390/include/asm/ipl.h -@@ -109,6 +109,7 @@ int ipl_report_add_component(struct ipl_report *report, struct kexec_buf *kbuf, - unsigned char flags, unsigned short cert); - int ipl_report_add_certificate(struct ipl_report *report, void *key, - unsigned long addr, unsigned long len); -+bool ipl_get_secureboot(void); - - /* - * DIAG 308 support -diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c -index 4a71061974fd..9baf0b570c3d 100644 ---- a/arch/s390/kernel/ipl.c -+++ b/arch/s390/kernel/ipl.c -@@ -1901,3 +1901,8 @@ int ipl_report_free(struct ipl_report *report) - } - - #endif -+ -+bool ipl_get_secureboot(void) -+{ -+ return !!ipl_secure_flag; -+} -diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c -index 36445dd40fdb..b338a050c5aa 100644 ---- a/arch/s390/kernel/setup.c -+++ b/arch/s390/kernel/setup.c -@@ -49,6 +49,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -1093,6 +1094,9 @@ void __init setup_arch(char **cmdline_p) - - log_component_list(); - -+ if (ipl_get_secureboot()) -+ security_lock_kernel_down("Secure IPL mode", LOCKDOWN_INTEGRITY_MAX); -+ - /* Have one command line that is parsed and saved in /proc/cmdline */ - /* boot_command_line has been already set up in early.c */ - *cmdline_p = boot_command_line; -diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c -index bed0cb83fe24..a15622e0d79f 100644 ---- a/arch/x86/kernel/cpu/common.c -+++ b/arch/x86/kernel/cpu/common.c -@@ -1205,6 +1205,7 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) - cpu_detect(c); - get_cpu_vendor(c); - get_cpu_cap(c); -+ get_model_name(c); /* RHEL: get model name for unsupported check */ - get_cpu_address_sizes(c); - setup_force_cpu_cap(X86_FEATURE_CPUID); - -diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 4b3fa6cd3106..0fd824c4162d 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - - #include -@@ -44,6 +45,7 @@ - #include - #include - #include -+#include - - /* - * max_low_pfn_mapped: highest directly mapped pfn < 4 GB -@@ -747,7 +749,132 @@ static void __init trim_low_memory_range(void) - { - memblock_reserve(0, ALIGN(reserve_low, PAGE_SIZE)); - } -- -+ -+static bool valid_amd_processor(__u8 family, const char *model_id) -+{ -+ bool valid; -+ -+ switch(family) { -+ case 0x15: -+ valid = true; -+ break; -+ -+ case 0x17: -+ valid = strstr(model_id, "AMD EPYC 7"); -+ break; -+ -+ default: -+ valid = false; -+ break; -+ } -+ -+ return valid; -+} -+ -+static bool valid_intel_processor(__u8 family, __u8 model, __u8 stepping) -+{ -+ bool valid; -+ -+ if (family != 6) -+ return false; -+ -+ switch(model) { -+ case INTEL_FAM6_ATOM_GOLDMONT_D: -+ case INTEL_FAM6_ATOM_GOLDMONT_PLUS: -+ -+ case INTEL_FAM6_BROADWELL: -+ case INTEL_FAM6_BROADWELL_G: -+ case INTEL_FAM6_BROADWELL_X: -+ case INTEL_FAM6_BROADWELL_D: -+ -+ case INTEL_FAM6_HASWELL: -+ case INTEL_FAM6_HASWELL_G: -+ case INTEL_FAM6_HASWELL_L: -+ case INTEL_FAM6_HASWELL_X: -+ valid = true; -+ break; -+ -+ case INTEL_FAM6_KABYLAKE: -+ valid = (stepping <= 10); -+ break; -+ -+ case INTEL_FAM6_KABYLAKE_L: -+ valid = (stepping <= 11); -+ break; -+ -+ case INTEL_FAM6_SKYLAKE_L: -+ case INTEL_FAM6_SKYLAKE: -+ case INTEL_FAM6_SKYLAKE_X: -+ /* stepping > 4 is Cascade Lake and is not supported */ -+ valid = (stepping <= 4); -+ break; -+ -+ default: -+ valid = false; -+ break; -+ } -+ -+ return valid; -+} -+ -+static void rh_check_supported(void) -+{ -+ bool guest; -+ -+ guest = (x86_hyper_type != X86_HYPER_NATIVE || boot_cpu_has(X86_FEATURE_HYPERVISOR)); -+ -+ /* RHEL supports single cpu on guests only */ -+ if (((boot_cpu_data.x86_max_cores * smp_num_siblings) == 1) && -+ !guest && is_kdump_kernel()) { -+ pr_crit("Detected single cpu native boot.\n"); -+ pr_crit("Important: In this kernel, single threaded, single CPU 64-bit physical systems are unsupported."); -+ } -+ -+ /* -+ * If the RHEL kernel does not support this hardware, the kernel will -+ * attempt to boot, but no support is provided for this hardware -+ */ -+ switch (boot_cpu_data.x86_vendor) { -+ case X86_VENDOR_AMD: -+ if (!valid_amd_processor(boot_cpu_data.x86, -+ boot_cpu_data.x86_model_id)) { -+ pr_crit("Detected CPU family %xh model %d\n", -+ boot_cpu_data.x86, -+ boot_cpu_data.x86_model); -+ mark_hardware_unsupported("AMD Processor"); -+ } -+ break; -+ -+ case X86_VENDOR_INTEL: -+ if (!valid_intel_processor(boot_cpu_data.x86, -+ boot_cpu_data.x86_model, -+ boot_cpu_data.x86_stepping)) { -+ pr_crit("Detected CPU family %d model %d stepping %d\n", -+ boot_cpu_data.x86, -+ boot_cpu_data.x86_model, -+ boot_cpu_data.x86_stepping); -+ mark_hardware_unsupported("Intel Processor"); -+ } -+ break; -+ -+ default: -+ pr_crit("Detected processor %s %s\n", -+ boot_cpu_data.x86_vendor_id, -+ boot_cpu_data.x86_model_id); -+ mark_hardware_unsupported("Processor"); -+ break; -+ } -+ -+ /* -+ * Due to the complexity of x86 lapic & ioapic enumeration, and PCI IRQ -+ * routing, ACPI is required for x86. acpi=off is a valid debug kernel -+ * parameter, so just print out a loud warning in case something -+ * goes wrong (which is most of the time). -+ */ -+ if (acpi_disabled && !guest) -+ pr_crit("ACPI has been disabled or is not available on this hardware. This may result in a single cpu boot, incorrect PCI IRQ routing, or boot failure.\n"); -+} -+ - /* - * Dump out kernel offset information on panic. - */ -@@ -973,6 +1100,13 @@ void __init setup_arch(char **cmdline_p) - if (efi_enabled(EFI_BOOT)) - efi_init(); - -+ efi_set_secure_boot(boot_params.secure_boot); -+ -+#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT -+ if (efi_enabled(EFI_SECURE_BOOT)) -+ security_lock_kernel_down("EFI Secure Boot mode", LOCKDOWN_INTEGRITY_MAX); -+#endif -+ - dmi_setup(); - - /* -@@ -1124,19 +1258,7 @@ void __init setup_arch(char **cmdline_p) - /* Allocate bigger log buffer */ - setup_log_buf(1); - -- if (efi_enabled(EFI_BOOT)) { -- switch (boot_params.secure_boot) { -- case efi_secureboot_mode_disabled: -- pr_info("Secure boot disabled\n"); -- break; -- case efi_secureboot_mode_enabled: -- pr_info("Secure boot enabled\n"); -- break; -- default: -- pr_info("Secure boot could not be determined\n"); -- break; -- } -- } -+ efi_set_secure_boot(boot_params.secure_boot); - - reserve_initrd(); - -@@ -1244,6 +1366,10 @@ void __init setup_arch(char **cmdline_p) - efi_apply_memmap_quirks(); - #endif - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ rh_check_supported(); -+#endif -+ - unwind_init(); - } - -diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c -index 822402480f7d..3f87d8602560 100644 ---- a/drivers/acpi/apei/hest.c -+++ b/drivers/acpi/apei/hest.c -@@ -88,6 +88,14 @@ int apei_hest_parse(apei_hest_func_t func, void *data) - if (hest_disable || !hest_tab) - return -EINVAL; - -+#ifdef CONFIG_ARM64 -+ /* Ignore broken firmware */ -+ if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) && -+ !strncmp(hest_tab->header.oem_table_id, "ProLiant", 8) && -+ MIDR_IMPLEMENTOR(read_cpuid_id()) == ARM_CPU_IMP_APM) -+ return -EINVAL; -+#endif -+ - hest_hdr = (struct acpi_hest_header *)(hest_tab + 1); - for (i = 0; i < hest_tab->error_source_count; i++) { - len = hest_esrc_len(hest_hdr); -diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c -index e209081d644b..7484bcf59a1b 100644 ---- a/drivers/acpi/irq.c -+++ b/drivers/acpi/irq.c -@@ -126,6 +126,7 @@ struct acpi_irq_parse_one_ctx { - unsigned int index; - unsigned long *res_flags; - struct irq_fwspec *fwspec; -+ bool skip_producer_check; - }; - - /** -@@ -197,7 +198,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, - return AE_CTRL_TERMINATE; - case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: - eirq = &ares->data.extended_irq; -- if (eirq->producer_consumer == ACPI_PRODUCER) -+ if (!ctx->skip_producer_check && -+ eirq->producer_consumer == ACPI_PRODUCER) - return AE_OK; - if (ctx->index >= eirq->interrupt_count) { - ctx->index -= eirq->interrupt_count; -@@ -232,8 +234,19 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, - static int acpi_irq_parse_one(acpi_handle handle, unsigned int index, - struct irq_fwspec *fwspec, unsigned long *flags) - { -- struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec }; -+ struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false }; - -+ /* -+ * Firmware on arm64-based HPE m400 platform incorrectly marks -+ * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER. -+ * Don't do the producer/consumer check for that device. -+ */ -+ if (IS_ENABLED(CONFIG_ARM64)) { -+ struct acpi_device *adev = acpi_bus_get_acpi_device(handle); -+ -+ if (adev && !strcmp(acpi_device_hid(adev), "APMC0D08")) -+ ctx.skip_producer_check = true; -+ } - acpi_walk_resources(handle, METHOD_NAME__CRS, acpi_irq_parse_one_cb, &ctx); - return ctx.rc; - } -diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c -index 6d3448895382..221255007dc8 100644 ---- a/drivers/acpi/scan.c -+++ b/drivers/acpi/scan.c -@@ -1563,6 +1563,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) - if (!acpi_match_device_ids(device, i2c_multi_instantiate_ids)) - return false; - -+ /* -+ * Firmware on some arm64 X-Gene platforms will make the UART -+ * device appear as both a UART and a slave of that UART. Just -+ * bail out here for X-Gene UARTs. -+ */ -+ if (IS_ENABLED(CONFIG_ARM64) && -+ !strcmp(acpi_device_hid(device), "APMC0D08")) -+ return false; -+ - INIT_LIST_HEAD(&resource_list); - acpi_dev_get_resources(device, &resource_list, - acpi_check_serial_bus_slave, -diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c -index ea5bf5f4cbed..71c55cae27ac 100644 ---- a/drivers/ata/libahci.c -+++ b/drivers/ata/libahci.c -@@ -666,6 +666,24 @@ int ahci_stop_engine(struct ata_port *ap) - tmp &= ~PORT_CMD_START; - writel(tmp, port_mmio + PORT_CMD); - -+#ifdef CONFIG_ARM64 -+ /* Rev Ax of Cavium CN99XX needs a hack for port stop */ -+ if (dev_is_pci(ap->host->dev) && -+ to_pci_dev(ap->host->dev)->vendor == 0x14e4 && -+ to_pci_dev(ap->host->dev)->device == 0x9027 && -+ midr_is_cpu_model_range(read_cpuid_id(), -+ MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN), -+ MIDR_CPU_VAR_REV(0, 0), -+ MIDR_CPU_VAR_REV(0, MIDR_REVISION_MASK))) { -+ tmp = readl(hpriv->mmio + 0x8000); -+ udelay(100); -+ writel(tmp | (1 << 26), hpriv->mmio + 0x8000); -+ udelay(100); -+ writel(tmp & ~(1 << 26), hpriv->mmio + 0x8000); -+ dev_warn(ap->host->dev, "CN99XX SATA reset workaround applied\n"); -+ } -+#endif -+ - /* wait for engine to stop. This could be as long as 500 msec */ - tmp = ata_wait_register(ap, port_mmio + PORT_CMD, - PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500); -diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c -index bbf7029e224b..cf7faa970dd6 100644 ---- a/drivers/char/ipmi/ipmi_dmi.c -+++ b/drivers/char/ipmi/ipmi_dmi.c -@@ -215,6 +215,21 @@ static int __init scan_for_dmi_ipmi(void) - { - const struct dmi_device *dev = NULL; - -+#ifdef CONFIG_ARM64 -+ /* RHEL-only -+ * If this is ARM-based HPE m400, return now, because that platform -+ * reports the host-side ipmi address as intel port-io space, which -+ * does not exist in the ARM architecture. -+ */ -+ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); -+ -+ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { -+ pr_debug("%s does not support host ipmi\n", dmistr); -+ return 0; -+ } -+ /* END RHEL-only */ -+#endif -+ - while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev))) - dmi_decode_ipmi((const struct dmi_header *) dev->device_data); - -diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c -index c48d8f086382..0fc980a87ed0 100644 ---- a/drivers/char/ipmi/ipmi_msghandler.c -+++ b/drivers/char/ipmi/ipmi_msghandler.c -@@ -33,6 +33,7 @@ - #include - #include - #include -+#include - - #define IPMI_DRIVER_VERSION "39.2" - -@@ -5154,8 +5155,21 @@ static int __init ipmi_init_msghandler_mod(void) - { - int rv; - -- pr_info("version " IPMI_DRIVER_VERSION "\n"); -+#ifdef CONFIG_ARM64 -+ /* RHEL-only -+ * If this is ARM-based HPE m400, return now, because that platform -+ * reports the host-side ipmi address as intel port-io space, which -+ * does not exist in the ARM architecture. -+ */ -+ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); - -+ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { -+ pr_debug("%s does not support host ipmi\n", dmistr); -+ return -ENOSYS; -+ } -+ /* END RHEL-only */ -+#endif -+ pr_info("version " IPMI_DRIVER_VERSION "\n"); - mutex_lock(&ipmi_interfaces_mutex); - rv = ipmi_register_driver(); - mutex_unlock(&ipmi_interfaces_mutex); -diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig -index 8007d4aa76dc..7ca346d3d337 100644 ---- a/drivers/firmware/Kconfig -+++ b/drivers/firmware/Kconfig -@@ -180,6 +180,7 @@ config ISCSI_IBFT - config RASPBERRYPI_FIRMWARE - tristate "Raspberry Pi Firmware Driver" - depends on BCM2835_MBOX -+ default XHCI_PCI - help - This option enables support for communicating with the firmware on the - Raspberry Pi. -diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile -index 7a216984552b..f0ef02d733af 100644 ---- a/drivers/firmware/efi/Makefile -+++ b/drivers/firmware/efi/Makefile -@@ -25,6 +25,7 @@ obj-$(CONFIG_EFI_FAKE_MEMMAP) += fake_map.o - obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o - obj-$(CONFIG_EFI_TEST) += test/ - obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o -+obj-$(CONFIG_EFI) += secureboot.o - obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o - obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o - obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o -diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c -index 911a2bd0f6b7..3696e87f19ee 100644 ---- a/drivers/firmware/efi/efi.c -+++ b/drivers/firmware/efi/efi.c -@@ -31,6 +31,7 @@ - #include - #include - #include -+#include - - #include - -@@ -831,40 +832,101 @@ int efi_mem_type(unsigned long phys_addr) - } - #endif - -+struct efi_error_code { -+ efi_status_t status; -+ int errno; -+ const char *description; -+}; -+ -+static const struct efi_error_code efi_error_codes[] = { -+ { EFI_SUCCESS, 0, "Success"}, -+#if 0 -+ { EFI_LOAD_ERROR, -EPICK_AN_ERRNO, "Load Error"}, -+#endif -+ { EFI_INVALID_PARAMETER, -EINVAL, "Invalid Parameter"}, -+ { EFI_UNSUPPORTED, -ENOSYS, "Unsupported"}, -+ { EFI_BAD_BUFFER_SIZE, -ENOSPC, "Bad Buffer Size"}, -+ { EFI_BUFFER_TOO_SMALL, -ENOSPC, "Buffer Too Small"}, -+ { EFI_NOT_READY, -EAGAIN, "Not Ready"}, -+ { EFI_DEVICE_ERROR, -EIO, "Device Error"}, -+ { EFI_WRITE_PROTECTED, -EROFS, "Write Protected"}, -+ { EFI_OUT_OF_RESOURCES, -ENOMEM, "Out of Resources"}, -+#if 0 -+ { EFI_VOLUME_CORRUPTED, -EPICK_AN_ERRNO, "Volume Corrupt"}, -+ { EFI_VOLUME_FULL, -EPICK_AN_ERRNO, "Volume Full"}, -+ { EFI_NO_MEDIA, -EPICK_AN_ERRNO, "No Media"}, -+ { EFI_MEDIA_CHANGED, -EPICK_AN_ERRNO, "Media changed"}, -+#endif -+ { EFI_NOT_FOUND, -ENOENT, "Not Found"}, -+#if 0 -+ { EFI_ACCESS_DENIED, -EPICK_AN_ERRNO, "Access Denied"}, -+ { EFI_NO_RESPONSE, -EPICK_AN_ERRNO, "No Response"}, -+ { EFI_NO_MAPPING, -EPICK_AN_ERRNO, "No mapping"}, -+ { EFI_TIMEOUT, -EPICK_AN_ERRNO, "Time out"}, -+ { EFI_NOT_STARTED, -EPICK_AN_ERRNO, "Not started"}, -+ { EFI_ALREADY_STARTED, -EPICK_AN_ERRNO, "Already started"}, -+#endif -+ { EFI_ABORTED, -EINTR, "Aborted"}, -+#if 0 -+ { EFI_ICMP_ERROR, -EPICK_AN_ERRNO, "ICMP Error"}, -+ { EFI_TFTP_ERROR, -EPICK_AN_ERRNO, "TFTP Error"}, -+ { EFI_PROTOCOL_ERROR, -EPICK_AN_ERRNO, "Protocol Error"}, -+ { EFI_INCOMPATIBLE_VERSION, -EPICK_AN_ERRNO, "Incompatible Version"}, -+#endif -+ { EFI_SECURITY_VIOLATION, -EACCES, "Security Policy Violation"}, -+#if 0 -+ { EFI_CRC_ERROR, -EPICK_AN_ERRNO, "CRC Error"}, -+ { EFI_END_OF_MEDIA, -EPICK_AN_ERRNO, "End of Media"}, -+ { EFI_END_OF_FILE, -EPICK_AN_ERRNO, "End of File"}, -+ { EFI_INVALID_LANGUAGE, -EPICK_AN_ERRNO, "Invalid Languages"}, -+ { EFI_COMPROMISED_DATA, -EPICK_AN_ERRNO, "Compromised Data"}, -+ -+ // warnings -+ { EFI_WARN_UNKOWN_GLYPH, -EPICK_AN_ERRNO, "Warning Unknown Glyph"}, -+ { EFI_WARN_DELETE_FAILURE, -EPICK_AN_ERRNO, "Warning Delete Failure"}, -+ { EFI_WARN_WRITE_FAILURE, -EPICK_AN_ERRNO, "Warning Write Failure"}, -+ { EFI_WARN_BUFFER_TOO_SMALL, -EPICK_AN_ERRNO, "Warning Buffer Too Small"}, -+#endif -+}; -+ -+static int -+efi_status_cmp_bsearch(const void *key, const void *item) -+{ -+ u64 status = (u64)(uintptr_t)key; -+ struct efi_error_code *code = (struct efi_error_code *)item; -+ -+ if (status < code->status) -+ return -1; -+ if (status > code->status) -+ return 1; -+ return 0; -+} -+ - int efi_status_to_err(efi_status_t status) - { -- int err; -- -- switch (status) { -- case EFI_SUCCESS: -- err = 0; -- break; -- case EFI_INVALID_PARAMETER: -- err = -EINVAL; -- break; -- case EFI_OUT_OF_RESOURCES: -- err = -ENOSPC; -- break; -- case EFI_DEVICE_ERROR: -- err = -EIO; -- break; -- case EFI_WRITE_PROTECTED: -- err = -EROFS; -- break; -- case EFI_SECURITY_VIOLATION: -- err = -EACCES; -- break; -- case EFI_NOT_FOUND: -- err = -ENOENT; -- break; -- case EFI_ABORTED: -- err = -EINTR; -- break; -- default: -- err = -EINVAL; -- } -+ struct efi_error_code *found; -+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); - -- return err; -+ found = bsearch((void *)(uintptr_t)status, efi_error_codes, -+ sizeof(struct efi_error_code), num, -+ efi_status_cmp_bsearch); -+ if (!found) -+ return -EINVAL; -+ return found->errno; -+} -+ -+const char * -+efi_status_to_str(efi_status_t status) -+{ -+ struct efi_error_code *found; -+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); -+ -+ found = bsearch((void *)(uintptr_t)status, efi_error_codes, -+ sizeof(struct efi_error_code), num, -+ efi_status_cmp_bsearch); -+ if (!found) -+ return "Unknown error code"; -+ return found->description; - } - - static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock); -diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c -new file mode 100644 -index 000000000000..de0a3714a5d4 ---- /dev/null -+++ b/drivers/firmware/efi/secureboot.c -@@ -0,0 +1,38 @@ -+/* Core kernel secure boot support. -+ * -+ * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved. -+ * Written by David Howells (dhowells@redhat.com) -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public Licence -+ * as published by the Free Software Foundation; either version -+ * 2 of the Licence, or (at your option) any later version. -+ */ -+ -+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -+ -+#include -+#include -+#include -+ -+/* -+ * Decide what to do when UEFI secure boot mode is enabled. -+ */ -+void __init efi_set_secure_boot(enum efi_secureboot_mode mode) -+{ -+ if (efi_enabled(EFI_BOOT)) { -+ switch (mode) { -+ case efi_secureboot_mode_disabled: -+ pr_info("Secure boot disabled\n"); -+ break; -+ case efi_secureboot_mode_enabled: -+ set_bit(EFI_SECURE_BOOT, &efi.flags); -+ pr_info("Secure boot enabled\n"); -+ break; -+ default: -+ pr_warn("Secure boot could not be determined (mode %u)\n", -+ mode); -+ break; -+ } -+ } -+} -diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c -index da26a584dca0..cbb495aff6a0 100644 ---- a/drivers/firmware/raspberrypi.c -+++ b/drivers/firmware/raspberrypi.c -@@ -12,6 +12,7 @@ - #include - #include - #include -+#include - #include - - #define MBOX_MSG(chan, data28) (((data28) & ~0xf) | ((chan) & 0xf)) -@@ -286,6 +287,43 @@ struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node) - } - EXPORT_SYMBOL_GPL(rpi_firmware_get); - -+/* -+ * On the Raspberry Pi 4, after a PCI reset, VL805's firmware may either be -+ * loaded directly from an EEPROM or, if not present, by the SoC's VideCore. -+ * Inform VideCore that VL805 was just reset, or defer xhci's probe if not yet -+ * joinable trough the mailbox interface. -+ */ -+int rpi_firmware_init_vl805(struct pci_dev *pdev) -+{ -+ struct device_node *fw_np; -+ struct rpi_firmware *fw; -+ u32 dev_addr; -+ int ret; -+ -+ fw_np = of_find_compatible_node(NULL, NULL, -+ "raspberrypi,bcm2835-firmware"); -+ if (!fw_np) -+ return 0; -+ -+ fw = rpi_firmware_get(fw_np); -+ of_node_put(fw_np); -+ if (!fw) -+ return -EPROBE_DEFER; -+ -+ dev_addr = pdev->bus->number << 20 | PCI_SLOT(pdev->devfn) << 15 | -+ PCI_FUNC(pdev->devfn) << 12; -+ -+ ret = rpi_firmware_property(fw, RPI_FIRMWARE_NOTIFY_XHCI_RESET, -+ &dev_addr, sizeof(dev_addr)); -+ if (ret) -+ return ret; -+ -+ dev_dbg(&pdev->dev, "loaded Raspberry Pi's VL805 firmware\n"); -+ -+ return 0; -+} -+EXPORT_SYMBOL_GPL(rpi_firmware_init_vl805); -+ - static const struct of_device_id rpi_firmware_of_match[] = { - { .compatible = "raspberrypi,bcm2835-firmware", }, - {}, -diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig -index a1723c1b5fbf..cf0c59015a44 100644 ---- a/drivers/gpu/drm/panel/Kconfig -+++ b/drivers/gpu/drm/panel/Kconfig -@@ -433,6 +433,15 @@ config DRM_PANEL_TRULY_NT35597_WQXGA - Say Y here if you want to enable support for Truly NT35597 WQXGA Dual DSI - Video Mode panel - -+config DRM_PANEL_XINGBANGDA_XBD599 -+ tristate "Xingbangda XBD599 panel" -+ depends on OF -+ depends on DRM_MIPI_DSI -+ depends on BACKLIGHT_CLASS_DEVICE -+ help -+ Say Y here if you want to enable support for the Xingbangda XBD599 -+ MIPI DSI Video Mode panel. -+ - config DRM_PANEL_XINPENG_XPP055C272 - tristate "Xinpeng XPP055C272 panel driver" - depends on OF -diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile -index 96a883cd6630..c84ed5215984 100644 ---- a/drivers/gpu/drm/panel/Makefile -+++ b/drivers/gpu/drm/panel/Makefile -@@ -46,4 +46,5 @@ obj-$(CONFIG_DRM_PANEL_TPO_TD028TTEC1) += panel-tpo-td028ttec1.o - obj-$(CONFIG_DRM_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o - obj-$(CONFIG_DRM_PANEL_TPO_TPG110) += panel-tpo-tpg110.o - obj-$(CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA) += panel-truly-nt35597.o -+obj-$(CONFIG_DRM_PANEL_XINGBANGDA_XBD599) += panel-xingbangda-xbd599.o - obj-$(CONFIG_DRM_PANEL_XINPENG_XPP055C272) += panel-xinpeng-xpp055c272.o -diff --git a/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -new file mode 100644 -index 000000000000..b483f96ee1db ---- /dev/null -+++ b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -@@ -0,0 +1,366 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Xingbangda XBD599 MIPI-DSI panel driver -+ * -+ * Copyright (C) 2019-2020 Icenowy Zheng -+ * -+ * Based on panel-rocktech-jh057n00900.c, which is: -+ * Copyright (C) Purism SPC 2019 -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+/* Manufacturer specific Commands send via DSI */ -+#define ST7703_CMD_ALL_PIXEL_OFF 0x22 -+#define ST7703_CMD_ALL_PIXEL_ON 0x23 -+#define ST7703_CMD_SETDISP 0xB2 -+#define ST7703_CMD_SETRGBIF 0xB3 -+#define ST7703_CMD_SETCYC 0xB4 -+#define ST7703_CMD_SETBGP 0xB5 -+#define ST7703_CMD_SETVCOM 0xB6 -+#define ST7703_CMD_SETOTP 0xB7 -+#define ST7703_CMD_SETPOWER_EXT 0xB8 -+#define ST7703_CMD_SETEXTC 0xB9 -+#define ST7703_CMD_SETMIPI 0xBA -+#define ST7703_CMD_SETVDC 0xBC -+#define ST7703_CMD_SETSCR 0xC0 -+#define ST7703_CMD_SETPOWER 0xC1 -+#define ST7703_CMD_UNK_C6 0xC6 -+#define ST7703_CMD_SETPANEL 0xCC -+#define ST7703_CMD_SETGAMMA 0xE0 -+#define ST7703_CMD_SETEQ 0xE3 -+#define ST7703_CMD_SETGIP1 0xE9 -+#define ST7703_CMD_SETGIP2 0xEA -+ -+static const char * const regulator_names[] = { -+ "iovcc", -+ "vcc", -+}; -+ -+struct xbd599 { -+ struct device *dev; -+ struct drm_panel panel; -+ struct gpio_desc *reset_gpio; -+ struct regulator_bulk_data supplies[ARRAY_SIZE(regulator_names)]; -+ bool prepared; -+}; -+ -+static inline struct xbd599 *panel_to_xbd599(struct drm_panel *panel) -+{ -+ return container_of(panel, struct xbd599, panel); -+} -+ -+#define dsi_dcs_write_seq(dsi, cmd, seq...) do { \ -+ static const u8 d[] = { seq }; \ -+ int ret; \ -+ ret = mipi_dsi_dcs_write(dsi, cmd, d, ARRAY_SIZE(d)); \ -+ if (ret < 0) \ -+ return ret; \ -+ } while (0) -+ -+static int xbd599_init_sequence(struct xbd599 *ctx) -+{ -+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -+ struct device *dev = ctx->dev; -+ int ret; -+ -+ /* -+ * Init sequence was supplied by the panel vendor. -+ */ -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, -+ 0xF1, 0x12, 0x83); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, -+ 0x33, 0x81, 0x05, 0xF9, 0x0E, 0x0E, 0x20, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, -+ 0x00, 0x91, 0x0a, 0x00, 0x00, 0x02, 0x4F, 0x11, -+ 0x00, 0x00, 0x37); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, -+ 0x25, 0x22, 0x20, 0x03); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, -+ 0x10, 0x10, 0x05, 0x05, 0x03, 0xFF, 0x00, 0x00, -+ 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, -+ 0x73, 0x73, 0x50, 0x50, 0x00, 0xC0, 0x08, 0x70, -+ 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x4E); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0B); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0xF0, 0x12, 0xF0); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, -+ 0x00, 0x00, 0x0B, 0x0B, 0x10, 0x10, 0x00, 0x00, -+ 0x00, 0x00, 0xFF, 0x00, 0xC0, 0x10); -+ dsi_dcs_write_seq(dsi, 0xC6, 0x01, 0x00, 0xFF, 0xFF, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, -+ 0x74, 0x00, 0x32, 0x32, 0x77, 0xF1, 0xFF, 0xFF, -+ 0xCC, 0xCC, 0x77, 0x77); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x07, 0x07); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x2C, 0x2C); -+ dsi_dcs_write_seq(dsi, 0xBF, 0x02, 0x11, 0x00); -+ -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, -+ 0x82, 0x10, 0x06, 0x05, 0xA2, 0x0A, 0xA5, 0x12, -+ 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, -+ 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -+ 0x03, 0x00, 0x00, 0x00, 0x75, 0x75, 0x31, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x13, 0x88, 0x64, -+ 0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -+ 0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, -+ 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -+ 0x57, 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -+ 0x75, 0x88, 0x23, 0x14, 0x00, 0x00, 0x02, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, -+ 0xA5, 0x00, 0x00, 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, -+ 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, 0x35, -+ 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, 0x12, -+ 0x18, 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, -+ 0x35, 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, -+ 0x12, 0x18); -+ msleep(20); -+ -+ ret = mipi_dsi_dcs_exit_sleep_mode(dsi); -+ if (ret < 0) { -+ DRM_DEV_ERROR(dev, "Failed to exit sleep mode\n"); -+ return ret; -+ } -+ msleep(250); -+ -+ ret = mipi_dsi_dcs_set_display_on(dsi); -+ if (ret) -+ return ret; -+ msleep(50); -+ -+ DRM_DEV_DEBUG_DRIVER(dev, "Panel init sequence done\n"); -+ return 0; -+} -+ -+static int xbd599_prepare(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ int ret; -+ -+ if (ctx->prepared) -+ return 0; -+ -+ ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -+ if (ret) -+ return ret; -+ -+ DRM_DEV_DEBUG_DRIVER(ctx->dev, "Resetting the panel\n"); -+ gpiod_set_value_cansleep(ctx->reset_gpio, 1); -+ usleep_range(20, 40); -+ gpiod_set_value_cansleep(ctx->reset_gpio, 0); -+ msleep(20); -+ -+ ctx->prepared = true; -+ -+ return 0; -+} -+ -+static int xbd599_enable(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ int ret; -+ -+ ret = xbd599_init_sequence(ctx); -+ if (ret < 0) { -+ DRM_DEV_ERROR(ctx->dev, "Panel init sequence failed: %d\n", -+ ret); -+ return ret; -+ } -+ -+ return 0; -+} -+ -+static int xbd599_disable(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -+ -+ return mipi_dsi_dcs_set_display_off(dsi); -+} -+ -+static int xbd599_unprepare(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ -+ if (!ctx->prepared) -+ return 0; -+ -+ gpiod_set_value_cansleep(ctx->reset_gpio, 1); -+ regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -+ ctx->prepared = false; -+ -+ return 0; -+} -+ -+static const struct drm_display_mode xbd599_default_mode = { -+ .hdisplay = 720, -+ .hsync_start = 720 + 40, -+ .hsync_end = 720 + 40 + 40, -+ .htotal = 720 + 40 + 40 + 40, -+ .vdisplay = 1440, -+ .vsync_start = 1440 + 18, -+ .vsync_end = 1440 + 18 + 10, -+ .vtotal = 1440 + 18 + 10 + 17, -+ .vrefresh = 60, -+ .clock = 69000, -+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, -+ -+ .width_mm = 68, -+ .height_mm = 136, -+ .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, -+}; -+ -+static int xbd599_get_modes(struct drm_panel *panel, -+ struct drm_connector *connector) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ struct drm_display_mode *mode; -+ -+ mode = drm_mode_duplicate(connector->dev, &xbd599_default_mode); -+ if (!mode) { -+ DRM_DEV_ERROR(ctx->dev, "Failed to add mode\n"); -+ return -ENOMEM; -+ } -+ -+ drm_mode_set_name(mode); -+ -+ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; -+ connector->display_info.width_mm = mode->width_mm; -+ connector->display_info.height_mm = mode->height_mm; -+ drm_mode_probed_add(connector, mode); -+ -+ return 1; -+} -+ -+static const struct drm_panel_funcs xbd599_drm_funcs = { -+ .prepare = xbd599_prepare, -+ .enable = xbd599_enable, -+ .disable = xbd599_disable, -+ .unprepare = xbd599_unprepare, -+ .get_modes = xbd599_get_modes, -+}; -+ -+static int xbd599_probe(struct mipi_dsi_device *dsi) -+{ -+ struct device *dev = &dsi->dev; -+ struct xbd599 *ctx; -+ int i, ret; -+ -+ ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); -+ if (!ctx) -+ return -ENOMEM; -+ -+ for (i = 0; i < ARRAY_SIZE(ctx->supplies); i++) -+ ctx->supplies[i].supply = regulator_names[i]; -+ -+ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), -+ ctx->supplies); -+ if (ret < 0) { -+ DRM_DEV_ERROR(&dsi->dev, "cannot get regulators\n"); -+ return ret; -+ } -+ -+ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); -+ if (IS_ERR(ctx->reset_gpio)) { -+ DRM_DEV_ERROR(dev, "cannot get reset gpio\n"); -+ return PTR_ERR(ctx->reset_gpio); -+ } -+ -+ mipi_dsi_set_drvdata(dsi, ctx); -+ -+ ctx->dev = dev; -+ -+ dsi->lanes = 4; -+ dsi->format = MIPI_DSI_FMT_RGB888; -+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; -+ -+ drm_panel_init(&ctx->panel, &dsi->dev, &xbd599_drm_funcs, -+ DRM_MODE_CONNECTOR_DSI); -+ -+ ret = drm_panel_of_backlight(&ctx->panel); -+ if (ret) -+ return ret; -+ -+ drm_panel_add(&ctx->panel); -+ -+ ret = mipi_dsi_attach(dsi); -+ if (ret < 0) { -+ DRM_DEV_ERROR(dev, "mipi_dsi_attach failed. Is host ready?\n"); -+ drm_panel_remove(&ctx->panel); -+ return ret; -+ } -+ -+ DRM_DEV_INFO(dev, "%ux%u@%u %ubpp dsi %udl - ready\n", -+ xbd599_default_mode.hdisplay, -+ xbd599_default_mode.vdisplay, -+ xbd599_default_mode.vrefresh, -+ mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes); -+ -+ return 0; -+} -+ -+static void xbd599_shutdown(struct mipi_dsi_device *dsi) -+{ -+ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -+ int ret; -+ -+ ret = drm_panel_unprepare(&ctx->panel); -+ if (ret < 0) -+ DRM_DEV_ERROR(&dsi->dev, "Failed to unprepare panel: %d\n", -+ ret); -+} -+ -+static int xbd599_remove(struct mipi_dsi_device *dsi) -+{ -+ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -+ int ret; -+ -+ xbd599_shutdown(dsi); -+ -+ ret = mipi_dsi_detach(dsi); -+ if (ret < 0) -+ DRM_DEV_ERROR(&dsi->dev, "Failed to detach from DSI host: %d\n", -+ ret); -+ -+ drm_panel_remove(&ctx->panel); -+ -+ return 0; -+} -+ -+static const struct of_device_id xbd599_of_match[] = { -+ { .compatible = "xingbangda,xbd599", }, -+ { /* sentinel */ } -+}; -+MODULE_DEVICE_TABLE(of, xbd599_of_match); -+ -+static struct mipi_dsi_driver xbd599_driver = { -+ .probe = xbd599_probe, -+ .remove = xbd599_remove, -+ .shutdown = xbd599_shutdown, -+ .driver = { -+ .name = "panel-xingbangda-xbd599", -+ .of_match_table = xbd599_of_match, -+ }, -+}; -+module_mipi_dsi_driver(xbd599_driver); -+ -+MODULE_AUTHOR("Icenowy Zheng "); -+MODULE_DESCRIPTION("DRM driver for Xingbangda XBD599 MIPI DSI panel"); -+MODULE_LICENSE("GPL v2"); -diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -index 059939789730..5f2313c40328 100644 ---- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -@@ -555,7 +555,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HSA_PACKET_OVERHEAD 10 - hsa = max((unsigned int)HSA_PACKET_OVERHEAD, -- (mode->hsync_end - mode->hsync_start) * Bpp - HSA_PACKET_OVERHEAD); -+ (mode->hsync_end - mode->hsync_start) * Bpp) - HSA_PACKET_OVERHEAD; - - /* - * The backporch is set using a blanking packet (4 -@@ -564,7 +564,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HBP_PACKET_OVERHEAD 6 - hbp = max((unsigned int)HBP_PACKET_OVERHEAD, -- (mode->htotal - mode->hsync_end) * Bpp - HBP_PACKET_OVERHEAD); -+ (mode->htotal - mode->hsync_end) * Bpp) - HBP_PACKET_OVERHEAD; - - /* - * The frontporch is set using a sync event (4 bytes) -@@ -574,7 +574,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HFP_PACKET_OVERHEAD 16 - hfp = max((unsigned int)HFP_PACKET_OVERHEAD, -- (mode->hsync_start - mode->hdisplay) * Bpp - HFP_PACKET_OVERHEAD); -+ (mode->hsync_start - mode->hdisplay) * Bpp) - HFP_PACKET_OVERHEAD; - - /* - * The blanking is set using a sync event (4 bytes) -@@ -583,8 +583,8 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HBLK_PACKET_OVERHEAD 10 - hblk = max((unsigned int)HBLK_PACKET_OVERHEAD, -- (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp - -- HBLK_PACKET_OVERHEAD); -+ (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp) - -+ HBLK_PACKET_OVERHEAD; - - /* - * And I'm not entirely sure what vblk is about. The driver in -diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c -index 8cffa84c9650..6c4e3675601a 100644 ---- a/drivers/hid/hid-rmi.c -+++ b/drivers/hid/hid-rmi.c -@@ -322,19 +322,12 @@ static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) - { - struct rmi_data *hdata = hid_get_drvdata(hdev); - struct rmi_device *rmi_dev = hdata->xport.rmi_dev; -- unsigned long flags; - - if (!(test_bit(RMI_STARTED, &hdata->flags))) - return 0; - -- local_irq_save(flags); -- - rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2); - -- generic_handle_irq(hdata->rmi_irq); -- -- local_irq_restore(flags); -- - return 1; - } - -@@ -592,56 +585,6 @@ static const struct rmi_transport_ops hid_rmi_ops = { - .reset = rmi_hid_reset, - }; - --static void rmi_irq_teardown(void *data) --{ -- struct rmi_data *hdata = data; -- struct irq_domain *domain = hdata->domain; -- -- if (!domain) -- return; -- -- irq_dispose_mapping(irq_find_mapping(domain, 0)); -- -- irq_domain_remove(domain); -- hdata->domain = NULL; -- hdata->rmi_irq = 0; --} -- --static int rmi_irq_map(struct irq_domain *h, unsigned int virq, -- irq_hw_number_t hw_irq_num) --{ -- irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); -- -- return 0; --} -- --static const struct irq_domain_ops rmi_irq_ops = { -- .map = rmi_irq_map, --}; -- --static int rmi_setup_irq_domain(struct hid_device *hdev) --{ -- struct rmi_data *hdata = hid_get_drvdata(hdev); -- int ret; -- -- hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1, -- &rmi_irq_ops, hdata); -- if (!hdata->domain) -- return -ENOMEM; -- -- ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata); -- if (ret) -- return ret; -- -- hdata->rmi_irq = irq_create_mapping(hdata->domain, 0); -- if (hdata->rmi_irq <= 0) { -- hid_err(hdev, "Can't allocate an IRQ\n"); -- return hdata->rmi_irq < 0 ? hdata->rmi_irq : -ENXIO; -- } -- -- return 0; --} -- - static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) - { - struct rmi_data *data = NULL; -@@ -714,18 +657,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) - - mutex_init(&data->page_mutex); - -- ret = rmi_setup_irq_domain(hdev); -- if (ret) { -- hid_err(hdev, "failed to allocate IRQ domain\n"); -- return ret; -- } -- - if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) - rmi_hid_pdata.f30_data.disable = true; - - data->xport.dev = hdev->dev.parent; - data->xport.pdata = rmi_hid_pdata; -- data->xport.pdata.irq = data->rmi_irq; - data->xport.proto_name = "hid"; - data->xport.ops = &hid_rmi_ops; - -diff --git a/drivers/infiniband/sw/rxe/rxe.c b/drivers/infiniband/sw/rxe/rxe.c -index 4afdd2e20883..05e637aa0e3d 100644 ---- a/drivers/infiniband/sw/rxe/rxe.c -+++ b/drivers/infiniband/sw/rxe/rxe.c -@@ -335,6 +335,8 @@ static int __init rxe_module_init(void) - { - int err; - -+ mark_tech_preview("Soft-RoCE Transport Driver", THIS_MODULE); -+ - /* initialize slab caches for managed objects */ - err = rxe_cache_init(); - if (err) { -diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c -index 190b9974526b..27a65991de0e 100644 ---- a/drivers/input/rmi4/rmi_driver.c -+++ b/drivers/input/rmi4/rmi_driver.c -@@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status, - attn_data.data = fifo_data; - - kfifo_put(&drvdata->attn_fifo, attn_data); -+ -+ schedule_work(&drvdata->attn_work); - } - EXPORT_SYMBOL_GPL(rmi_set_attn_data); - --static irqreturn_t rmi_irq_fn(int irq, void *dev_id) -+static void attn_callback(struct work_struct *work) - { -- struct rmi_device *rmi_dev = dev_id; -- struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); -+ struct rmi_driver_data *drvdata = container_of(work, -+ struct rmi_driver_data, -+ attn_work); - struct rmi4_attn_data attn_data = {0}; - int ret, count; - - count = kfifo_get(&drvdata->attn_fifo, &attn_data); -- if (count) { -- *(drvdata->irq_status) = attn_data.irq_status; -- drvdata->attn_data = attn_data; -- } -+ if (!count) -+ return; - -- ret = rmi_process_interrupt_requests(rmi_dev); -+ *(drvdata->irq_status) = attn_data.irq_status; -+ drvdata->attn_data = attn_data; -+ -+ ret = rmi_process_interrupt_requests(drvdata->rmi_dev); - if (ret) -- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, -+ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev, - "Failed to process interrupt request: %d\n", ret); - -- if (count) { -- kfree(attn_data.data); -- attn_data.data = NULL; -- } -+ kfree(attn_data.data); -+ attn_data.data = NULL; - - if (!kfifo_is_empty(&drvdata->attn_fifo)) -- return rmi_irq_fn(irq, dev_id); -+ schedule_work(&drvdata->attn_work); -+} -+ -+static irqreturn_t rmi_irq_fn(int irq, void *dev_id) -+{ -+ struct rmi_device *rmi_dev = dev_id; -+ int ret; -+ -+ ret = rmi_process_interrupt_requests(rmi_dev); -+ if (ret) -+ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, -+ "Failed to process interrupt request: %d\n", ret); - - return IRQ_HANDLED; - } -@@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id) - static int rmi_irq_init(struct rmi_device *rmi_dev) - { - struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev); -- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); - int irq_flags = irq_get_trigger_type(pdata->irq); - int ret; - -@@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev) - return ret; - } - -- data->enabled = true; -- - return 0; - } - -@@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake) - if (data->enabled) - goto out; - -- enable_irq(irq); -- data->enabled = true; -- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { -- retval = disable_irq_wake(irq); -- if (retval) -- dev_warn(&rmi_dev->dev, -- "Failed to disable irq for wake: %d\n", -- retval); -- } -+ if (irq) { -+ enable_irq(irq); -+ data->enabled = true; -+ if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { -+ retval = disable_irq_wake(irq); -+ if (retval) -+ dev_warn(&rmi_dev->dev, -+ "Failed to disable irq for wake: %d\n", -+ retval); -+ } - -- /* -- * Call rmi_process_interrupt_requests() after enabling irq, -- * otherwise we may lose interrupt on edge-triggered systems. -- */ -- irq_flags = irq_get_trigger_type(pdata->irq); -- if (irq_flags & IRQ_TYPE_EDGE_BOTH) -- rmi_process_interrupt_requests(rmi_dev); -+ /* -+ * Call rmi_process_interrupt_requests() after enabling irq, -+ * otherwise we may lose interrupt on edge-triggered systems. -+ */ -+ irq_flags = irq_get_trigger_type(pdata->irq); -+ if (irq_flags & IRQ_TYPE_EDGE_BOTH) -+ rmi_process_interrupt_requests(rmi_dev); -+ } else { -+ data->enabled = true; -+ } - - out: - mutex_unlock(&data->enabled_mutex); -@@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake) - goto out; - - data->enabled = false; -- disable_irq(irq); -- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { -- retval = enable_irq_wake(irq); -- if (retval) -- dev_warn(&rmi_dev->dev, -- "Failed to enable irq for wake: %d\n", -- retval); -- } -- -- /* make sure the fifo is clean */ -- while (!kfifo_is_empty(&data->attn_fifo)) { -- count = kfifo_get(&data->attn_fifo, &attn_data); -- if (count) -- kfree(attn_data.data); -+ if (irq) { -+ disable_irq(irq); -+ if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { -+ retval = enable_irq_wake(irq); -+ if (retval) -+ dev_warn(&rmi_dev->dev, -+ "Failed to enable irq for wake: %d\n", -+ retval); -+ } -+ } else { -+ /* make sure the fifo is clean */ -+ while (!kfifo_is_empty(&data->attn_fifo)) { -+ count = kfifo_get(&data->attn_fifo, &attn_data); -+ if (count) -+ kfree(attn_data.data); -+ } - } - - out: -@@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev) - irq_domain_remove(data->irqdomain); - data->irqdomain = NULL; - -+ cancel_work_sync(&data->attn_work); -+ - rmi_f34_remove_sysfs(rmi_dev); - rmi_free_function_list(rmi_dev); - -@@ -1218,9 +1236,15 @@ static int rmi_driver_probe(struct device *dev) - } - } - -- retval = rmi_irq_init(rmi_dev); -- if (retval < 0) -- goto err_destroy_functions; -+ if (pdata->irq) { -+ retval = rmi_irq_init(rmi_dev); -+ if (retval < 0) -+ goto err_destroy_functions; -+ } -+ -+ data->enabled = true; -+ -+ INIT_WORK(&data->attn_work, attn_callback); - - if (data->f01_container->dev.driver) { - /* Driver already bound, so enable ATTN now. */ -diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c -index 2b471419e26c..83c8d9845aed 100644 ---- a/drivers/iommu/iommu.c -+++ b/drivers/iommu/iommu.c -@@ -7,6 +7,7 @@ - #define pr_fmt(fmt) "iommu: " fmt - - #include -+#include - #include - #include - #include -@@ -2658,3 +2659,24 @@ int iommu_sva_get_pasid(struct iommu_sva *handle) - return ops->sva_get_pasid(handle); - } - EXPORT_SYMBOL_GPL(iommu_sva_get_pasid); -+ -+#ifdef CONFIG_ARM64 -+static int __init iommu_quirks(void) -+{ -+ const char *vendor, *name; -+ -+ vendor = dmi_get_system_info(DMI_SYS_VENDOR); -+ name = dmi_get_system_info(DMI_PRODUCT_NAME); -+ -+ if (vendor && -+ (strncmp(vendor, "GIGABYTE", 8) == 0 && name && -+ (strncmp(name, "R120", 4) == 0 || -+ strncmp(name, "R270", 4) == 0))) { -+ pr_warn("Gigabyte %s detected, force iommu passthrough mode", name); -+ iommu_def_domain_type = IOMMU_DOMAIN_IDENTITY; -+ } -+ -+ return 0; -+} -+arch_initcall(iommu_quirks); -+#endif -diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c -index 6a79cd0ebe2b..ca44a35ec411 100644 ---- a/drivers/message/fusion/mptsas.c -+++ b/drivers/message/fusion/mptsas.c -@@ -5290,6 +5290,11 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id) - ioc, MPI_SAS_OP_CLEAR_ALL_PERSISTENT); - } - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ add_taint(TAINT_SUPPORT_REMOVED, LOCKDEP_STILL_OK); -+ pr_warn("MPTSAS MODULE IS NOT SUPPORTED\n"); -+#endif -+ - error = scsi_add_host(sh, &ioc->pcidev->dev); - if (error) { - dprintk(ioc, printk(MYIOC_s_ERR_FMT -@@ -5353,6 +5358,10 @@ static void mptsas_remove(struct pci_dev *pdev) - } - - static struct pci_device_id mptsas_pci_table[] = { -+#ifdef CONFIG_RHEL_DIFFERENCES -+ { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068, -+ PCI_VENDOR_ID_VMWARE, PCI_ANY_ID }, -+#else - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1064, - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068, -@@ -5365,6 +5374,7 @@ static struct pci_device_id mptsas_pci_table[] = { - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068_820XELP, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - {0} /* Terminating entry */ - }; - MODULE_DEVICE_TABLE(pci, mptsas_pci_table); -diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c -index eabc4de5816c..1f458e35effb 100644 ---- a/drivers/message/fusion/mptspi.c -+++ b/drivers/message/fusion/mptspi.c -@@ -1238,12 +1238,17 @@ static struct spi_function_template mptspi_transport_functions = { - */ - - static struct pci_device_id mptspi_pci_table[] = { -+#ifdef CONFIG_RHEL_DIFFERENCES -+ { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, -+ PCI_VENDOR_ID_VMWARE, PCI_ANY_ID }, -+#else - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_ATTO, MPI_MANUFACTPAGE_DEVID_53C1030, - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1035, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - {0} /* Terminating entry */ - }; - MODULE_DEVICE_TABLE(pci, mptspi_pci_table); -@@ -1534,6 +1539,12 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id) - 0, 0, 0, 0, 5); - - scsi_scan_host(sh); -+ -+#ifdef CONFIG_RHEL_DIFFERENCES -+ add_taint(TAINT_SUPPORT_REMOVED, LOCKDEP_STILL_OK); -+ pr_warn("MPTSPI MODULE IS NOT SUPPORTED\n"); -+#endif -+ - return 0; - - out_mptspi_probe: -diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c -index 735bf25952fc..15f6c0a4dc63 100644 ---- a/drivers/net/ethernet/intel/e1000e/ich8lan.c -+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c -@@ -1243,9 +1243,9 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force) - ew32(H2ME, mac_reg); - } - -- /* Poll up to 300msec for ME to clear ULP_CFG_DONE. */ -+ /* Poll up to 2.5sec for ME to clear ULP_CFG_DONE. */ - while (er32(FWSM) & E1000_FWSM_ULP_CFG_DONE) { -- if (i++ == 30) { -+ if (i++ == 250) { - ret_val = -E1000_ERR_PHY; - goto out; - } -diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c -index 5b190c257124..d88fa9c54b16 100644 ---- a/drivers/net/ethernet/intel/ice/ice_main.c -+++ b/drivers/net/ethernet/intel/ice/ice_main.c -@@ -3638,6 +3638,7 @@ static int __init ice_module_init(void) - - pr_info("%s - version %s\n", ice_driver_string, ice_drv_ver); - pr_info("%s\n", ice_copyright); -+ mark_tech_preview(DRV_SUMMARY, THIS_MODULE); - - ice_wq = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0, KBUILD_MODNAME); - if (!ice_wq) { -diff --git a/drivers/pci/controller/pcie-brcmstb.c b/drivers/pci/controller/pcie-brcmstb.c -index 6d79d14527a6..aee84679a997 100644 ---- a/drivers/pci/controller/pcie-brcmstb.c -+++ b/drivers/pci/controller/pcie-brcmstb.c -@@ -28,6 +28,8 @@ - #include - #include - -+#include -+ - #include "../pci.h" - - /* BRCM_PCIE_CAP_REGS - Offset for the mandatory capability config regs */ -@@ -917,11 +919,24 @@ static int brcm_pcie_probe(struct platform_device *pdev) - { - struct device_node *np = pdev->dev.of_node, *msi_np; - struct pci_host_bridge *bridge; -+ struct device_node *fw_np; - struct brcm_pcie *pcie; - struct pci_bus *child; - struct resource *res; - int ret; - -+ /* -+ * We have to wait for the Raspberry Pi's firmware interface to be up -+ * as some PCI fixups depend on it. -+ */ -+ fw_np = of_find_compatible_node(NULL, NULL, -+ "raspberrypi,bcm2835-firmware"); -+ if (fw_np && !rpi_firmware_get(fw_np)) { -+ of_node_put(fw_np); -+ return -EPROBE_DEFER; -+ } -+ of_node_put(fw_np); -+ - bridge = devm_pci_alloc_host_bridge(&pdev->dev, sizeof(*pcie)); - if (!bridge) - return -ENOMEM; -diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c -index 0454ca0e4e3f..5cc490b821be 100644 ---- a/drivers/pci/pci-driver.c -+++ b/drivers/pci/pci-driver.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include "pci.h" - #include "pcie/portdrv.h" - -@@ -278,6 +279,34 @@ static const struct pci_device_id *pci_match_device(struct pci_driver *drv, - return found_id; - } - -+/** -+ * pci_hw_vendor_status - Tell if a PCI device is supported by the HW vendor -+ * @ids: array of PCI device id structures to search in -+ * @dev: the PCI device structure to match against -+ * -+ * Used by a driver to check whether this device is in its list of unsupported -+ * devices. Returns the matching pci_device_id structure or %NULL if there is -+ * no match. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+const struct pci_device_id *pci_hw_vendor_status( -+ const struct pci_device_id *ids, -+ struct pci_dev *dev) -+{ -+ char devinfo[64]; -+ const struct pci_device_id *ret = pci_match_id(ids, dev); -+ -+ if (ret) { -+ snprintf(devinfo, sizeof(devinfo), "%s %s", -+ dev_driver_string(&dev->dev), dev_name(&dev->dev)); -+ mark_hardware_deprecated(devinfo); -+ } -+ -+ return ret; -+} -+EXPORT_SYMBOL(pci_hw_vendor_status); -+ - struct drv_dev_and_id { - struct pci_driver *drv; - struct pci_dev *dev; -diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index 28c9a2409c50..ab4cae542b04 100644 ---- a/drivers/pci/quirks.c -+++ b/drivers/pci/quirks.c -@@ -4183,6 +4183,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000, - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084, - quirk_bridge_cavm_thrx2_pcie_root); - -+/* -+ * PCI BAR 5 is not setup correctly for the on-board AHCI controller -+ * on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 by -+ * using BAR 4's resources which are populated correctly and NOT -+ * actually used by the AHCI controller. -+ */ -+static void quirk_fix_vulcan_ahci_bars(struct pci_dev *dev) -+{ -+ struct resource *r = &dev->resource[4]; -+ -+ if (!(r->flags & IORESOURCE_MEM) || (r->start == 0)) -+ return; -+ -+ /* Set BAR5 resource to BAR4 */ -+ dev->resource[5] = *r; -+ -+ /* Update BAR5 in pci config space */ -+ pci_write_config_dword(dev, PCI_BASE_ADDRESS_5, r->start); -+ -+ /* Clear BAR4's resource */ -+ memset(r, 0, sizeof(*r)); -+} -+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9027, quirk_fix_vulcan_ahci_bars); -+ - /* - * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero) - * class code. Fix it. -diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c -index 83a60b0a8cd8..9efb63c83234 100644 ---- a/drivers/scsi/aacraid/linit.c -+++ b/drivers/scsi/aacraid/linit.c -@@ -78,6 +78,7 @@ char aac_driver_version[] = AAC_DRIVER_FULL_VERSION; - * Note: The last field is used to index into aac_drivers below. - */ - static const struct pci_device_id aac_pci_tbl[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - { 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */ - { 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */ - { 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */ -@@ -145,6 +146,7 @@ static const struct pci_device_id aac_pci_tbl[] = { - { 0x9005, 0x0285, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 59 }, /* Adaptec Catch All */ - { 0x9005, 0x0286, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 60 }, /* Adaptec Rocket Catch All */ - { 0x9005, 0x0288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 61 }, /* Adaptec NEMER/ARK Catch All */ -+#endif - { 0x9005, 0x028b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 62 }, /* Adaptec PMC Series 6 (Tupelo) */ - { 0x9005, 0x028c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 63 }, /* Adaptec PMC Series 7 (Denali) */ - { 0x9005, 0x028d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 64 }, /* Adaptec PMC Series 8 */ -diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c -index 9b81cfbbc5c5..1ca08297939c 100644 ---- a/drivers/scsi/be2iscsi/be_main.c -+++ b/drivers/scsi/be2iscsi/be_main.c -@@ -370,11 +370,13 @@ static int beiscsi_eh_device_reset(struct scsi_cmnd *sc) - - /*------------------- PCI Driver operations and data ----------------- */ - static const struct pci_device_id beiscsi_pci_id_table[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) }, - { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) }, - { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) }, - { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) }, - { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID3) }, -+#endif - { PCI_DEVICE(ELX_VENDOR_ID, OC_SKH_ID1) }, - { 0 } - }; -diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c -index 1e9302e99d05..b903580d626f 100644 ---- a/drivers/scsi/hpsa.c -+++ b/drivers/scsi/hpsa.c -@@ -82,7 +82,9 @@ MODULE_DESCRIPTION("Driver for HP Smart Array Controller version " \ - MODULE_SUPPORTED_DEVICE("HP Smart Array Controllers"); - MODULE_VERSION(HPSA_DRIVER_VERSION); - MODULE_LICENSE("GPL"); -+#ifndef CONFIG_RHEL_DIFFERENCES - MODULE_ALIAS("cciss"); -+#endif - - static int hpsa_simple_mode; - module_param(hpsa_simple_mode, int, S_IRUGO|S_IWUSR); -@@ -144,10 +146,12 @@ static const struct pci_device_id hpsa_pci_device_id[] = { - {PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x007D}, - {PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0088}, - {PCI_VENDOR_ID_HP, 0x333f, 0x103c, 0x333f}, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, - {PCI_VENDOR_ID_COMPAQ, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, -+#endif - {0,} - }; - -diff --git a/drivers/scsi/lpfc/lpfc_ids.h b/drivers/scsi/lpfc/lpfc_ids.h -index d48414e295a0..ba0e384412c9 100644 ---- a/drivers/scsi/lpfc/lpfc_ids.h -+++ b/drivers/scsi/lpfc/lpfc_ids.h -@@ -24,6 +24,7 @@ - #include - - const struct pci_device_id lpfc_id_table[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_VIPER, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FIREFLY, -@@ -54,14 +55,19 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_DCSP, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BMID, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BSMB, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HORNET, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_SCSP, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_DCSP, -@@ -70,6 +76,7 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZSMB, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_TFLY, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP101, -@@ -80,6 +87,7 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LPE11000S, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_MID, -@@ -92,6 +100,7 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_S, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_VF, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_PF, -@@ -102,18 +111,23 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_SERVERENGINE, PCI_DEVICE_ID_TOMCAT, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FALCON, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BALIUS, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FC, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FC_VF, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE_VF, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G6_FC, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G7_FC, -diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c -index babe85d7b537..9b4df28defd2 100644 ---- a/drivers/scsi/megaraid/megaraid_sas_base.c -+++ b/drivers/scsi/megaraid/megaraid_sas_base.c -@@ -133,6 +133,7 @@ static void megasas_get_pd_info(struct megasas_instance *instance, - */ - static struct pci_device_id megasas_pci_table[] = { - -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS1064R)}, - /* xscale IOP */ - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS1078R)}, -@@ -151,6 +152,7 @@ static struct pci_device_id megasas_pci_table[] = { - /* xscale IOP, vega */ - {PCI_DEVICE(PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_PERC5)}, - /* xscale IOP */ -+#endif - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FUSION)}, - /* Fusion */ - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_PLASMA)}, -diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c -index 04a40afe60e3..cec7799dc23f 100644 ---- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c -+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c -@@ -11031,6 +11031,7 @@ bool scsih_ncq_prio_supp(struct scsi_device *sdev) - * The pci device ids are defined in mpi/mpi2_cnfg.h. - */ - static const struct pci_device_id mpt3sas_pci_table[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - /* Spitfire ~ 2004 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2004, - PCI_ANY_ID, PCI_ANY_ID }, -@@ -11049,6 +11050,7 @@ static const struct pci_device_id mpt3sas_pci_table[] = { - PCI_ANY_ID, PCI_ANY_ID }, - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2116_2, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - /* Thunderbolt ~ 2208 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_1, - PCI_ANY_ID, PCI_ANY_ID }, -@@ -11073,9 +11075,11 @@ static const struct pci_device_id mpt3sas_pci_table[] = { - PCI_ANY_ID, PCI_ANY_ID }, - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SWITCH_MPI_EP_1, - PCI_ANY_ID, PCI_ANY_ID }, -+#ifndef CONFIG_RHEL_DIFFERENCES - /* SSS6200 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SSS6200, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - /* Fury ~ 3004 and 3008 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3004, - PCI_ANY_ID, PCI_ANY_ID }, -diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c -index d190db5ea7d9..e0e3d300f3be 100644 ---- a/drivers/scsi/qla2xxx/qla_os.c -+++ b/drivers/scsi/qla2xxx/qla_os.c -@@ -7759,6 +7759,7 @@ static const struct pci_error_handlers qla2xxx_err_handler = { - }; - - static struct pci_device_id qla2xxx_pci_tbl[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2300) }, -@@ -7771,13 +7772,18 @@ static struct pci_device_id qla2xxx_pci_tbl[] = { - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8432) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5422) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5432) }, -+#endif - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2532) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2031) }, -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8001) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8021) }, -+#endif - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8031) }, -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISPF001) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8044) }, -+#endif - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2071) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2271) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2261) }, -diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c -index 5504ab11decc..e83771818767 100644 ---- a/drivers/scsi/qla4xxx/ql4_os.c -+++ b/drivers/scsi/qla4xxx/ql4_os.c -@@ -9842,6 +9842,7 @@ static struct pci_device_id qla4xxx_pci_tbl[] = { - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - }, -+#ifndef CONFIG_RHEL_DIFFERENCES - { - .vendor = PCI_VENDOR_ID_QLOGIC, - .device = PCI_DEVICE_ID_QLOGIC_ISP8022, -@@ -9860,6 +9861,7 @@ static struct pci_device_id qla4xxx_pci_tbl[] = { - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - }, -+#endif - {0, 0}, - }; - MODULE_DEVICE_TABLE(pci, qla4xxx_pci_tbl); -diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c -index cd157f11eb22..c5dc6cf57a71 100644 ---- a/drivers/scsi/smartpqi/smartpqi_init.c -+++ b/drivers/scsi/smartpqi/smartpqi_init.c -@@ -8247,6 +8247,18 @@ static const struct pci_device_id pqi_pci_id_table[] = { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - 0x19e5, 0xd22c) - }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ 0x1bd4, 0x004a) -+ }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ 0x1bd4, 0x004b) -+ }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ 0x1bd4, 0x004c) -+ }, - { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - PCI_VENDOR_ID_ADAPTEC2, 0x0110) -@@ -8383,6 +8395,10 @@ static const struct pci_device_id pqi_pci_id_table[] = { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - PCI_VENDOR_ID_ADVANTECH, 0x8312) - }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ PCI_VENDOR_ID_ADVANTECH, 0x8312) -+ }, - { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - PCI_VENDOR_ID_DELL, 0x1fe0) -diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c -index 5e0d0813da55..a0760bcd7a97 100644 ---- a/drivers/tty/sysrq.c -+++ b/drivers/tty/sysrq.c -@@ -74,6 +74,7 @@ int sysrq_mask(void) - return 1; - return sysrq_enabled; - } -+EXPORT_SYMBOL_GPL(sysrq_mask); - - /* - * A value of 1 means 'all', other nonzero values are an op mask: -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index 54cd8ef795ec..4afeea51b2c9 100644 ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -5504,6 +5504,13 @@ static void hub_event(struct work_struct *work) - (u16) hub->change_bits[0], - (u16) hub->event_bits[0]); - -+ /* Don't disconnect USB-SATA on TrimSlice */ -+ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) { -+ if ((hdev->state == 7) && (hub->change_bits[0] == 0) && -+ (hub->event_bits[0] == 0x2)) -+ hub->event_bits[0] = 0; -+ } -+ - /* Lock the device, then check to see if we were - * disconnected while waiting for the lock to succeed. */ - usb_lock_device(hdev); -diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c -index beb2efa71341..0dc34668bb2a 100644 ---- a/drivers/usb/host/pci-quirks.c -+++ b/drivers/usb/host/pci-quirks.c -@@ -16,6 +16,9 @@ - #include - #include - #include -+ -+#include -+ - #include "pci-quirks.h" - #include "xhci-ext-caps.h" - -@@ -1243,11 +1246,24 @@ static void quirk_usb_handoff_xhci(struct pci_dev *pdev) - - static void quirk_usb_early_handoff(struct pci_dev *pdev) - { -+ int ret; -+ - /* Skip Netlogic mips SoC's internal PCI USB controller. - * This device does not need/support EHCI/OHCI handoff - */ - if (pdev->vendor == 0x184e) /* vendor Netlogic */ - return; -+ -+ if (pdev->vendor == PCI_VENDOR_ID_VIA && pdev->device == 0x3483) { -+ ret = rpi_firmware_init_vl805(pdev); -+ if (ret) { -+ /* Firmware might be outdated, or something failed */ -+ dev_warn(&pdev->dev, -+ "Failed to load VL805's firmware: %d. Will continue to attempt to work, but bad things might happen. You should fix this...\n", -+ ret); -+ } -+ } -+ - if (pdev->class != PCI_CLASS_SERIAL_USB_UHCI && - pdev->class != PCI_CLASS_SERIAL_USB_OHCI && - pdev->class != PCI_CLASS_SERIAL_USB_EHCI && -diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c -index f68920131a4a..e94932c69f54 100644 ---- a/drivers/video/backlight/lp855x_bl.c -+++ b/drivers/video/backlight/lp855x_bl.c -@@ -456,7 +456,7 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id) - ret = regulator_enable(lp->enable); - if (ret < 0) { - dev_err(lp->dev, "failed to enable vddio: %d\n", ret); -- return ret; -+ goto disable_supply; - } - - /* -@@ -471,24 +471,34 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id) - ret = lp855x_configure(lp); - if (ret) { - dev_err(lp->dev, "device config err: %d", ret); -- return ret; -+ goto disable_vddio; - } - - ret = lp855x_backlight_register(lp); - if (ret) { - dev_err(lp->dev, - "failed to register backlight. err: %d\n", ret); -- return ret; -+ goto disable_vddio; - } - - ret = sysfs_create_group(&lp->dev->kobj, &lp855x_attr_group); - if (ret) { - dev_err(lp->dev, "failed to register sysfs. err: %d\n", ret); -- return ret; -+ goto disable_vddio; - } - - backlight_update_status(lp->bl); -+ - return 0; -+ -+disable_vddio: -+ if (lp->enable) -+ regulator_disable(lp->enable); -+disable_supply: -+ if (lp->supply) -+ regulator_disable(lp->supply); -+ -+ return ret; - } - - static int lp855x_remove(struct i2c_client *cl) -@@ -497,6 +507,8 @@ static int lp855x_remove(struct i2c_client *cl) - - lp->bl->props.brightness = 0; - backlight_update_status(lp->bl); -+ if (lp->enable) -+ regulator_disable(lp->enable); - if (lp->supply) - regulator_disable(lp->supply); - sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group); -diff --git a/include/linux/efi.h b/include/linux/efi.h -index 251f1f783cdf..a9a9e7e976e7 100644 ---- a/include/linux/efi.h -+++ b/include/linux/efi.h -@@ -42,6 +42,8 @@ - #define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1))) - #define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1))) - -+#define EFI_IS_ERROR(x) ((x) & (1UL << (BITS_PER_LONG-1))) -+ - typedef unsigned long efi_status_t; - typedef u8 efi_bool_t; - typedef u16 efi_char16_t; /* UNICODE character */ -@@ -776,6 +778,14 @@ extern int __init efi_setup_pcdp_console(char *); - #define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */ - #define EFI_MEM_NO_SOFT_RESERVE 11 /* Is the kernel configured to ignore soft reservations? */ - #define EFI_PRESERVE_BS_REGIONS 12 /* Are EFI boot-services memory segments available? */ -+#define EFI_SECURE_BOOT 13 /* Are we in Secure Boot mode? */ -+ -+enum efi_secureboot_mode { -+ efi_secureboot_mode_unset, -+ efi_secureboot_mode_unknown, -+ efi_secureboot_mode_disabled, -+ efi_secureboot_mode_enabled, -+}; - - #ifdef CONFIG_EFI - /* -@@ -787,6 +797,8 @@ static inline bool efi_enabled(int feature) - } - extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); - -+extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode); -+ - bool __pure __efi_soft_reserve_enabled(void); - - static inline bool __pure efi_soft_reserve_enabled(void) -@@ -813,6 +825,8 @@ efi_capsule_pending(int *reset_type) - return false; - } - -+static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {} -+ - static inline bool efi_soft_reserve_enabled(void) - { - return false; -@@ -825,6 +839,7 @@ static inline bool efi_rt_services_supported(unsigned int mask) - #endif - - extern int efi_status_to_err(efi_status_t status); -+extern const char *efi_status_to_str(efi_status_t status); - - /* - * Variable Attributes -@@ -1083,12 +1098,6 @@ static inline bool efi_runtime_disabled(void) { return true; } - extern void efi_call_virt_check_flags(unsigned long flags, const char *call); - extern unsigned long efi_call_virt_save_flags(void); - --enum efi_secureboot_mode { -- efi_secureboot_mode_unset, -- efi_secureboot_mode_unknown, -- efi_secureboot_mode_disabled, -- efi_secureboot_mode_enabled, --}; - enum efi_secureboot_mode efi_get_secureboot(void); - - #ifdef CONFIG_RESET_ATTACK_MITIGATION -diff --git a/include/linux/kernel.h b/include/linux/kernel.h -index 9b7a8d74a9d6..8c1ace147540 100644 ---- a/include/linux/kernel.h -+++ b/include/linux/kernel.h -@@ -595,7 +595,24 @@ extern enum system_states { - #define TAINT_LIVEPATCH 15 - #define TAINT_AUX 16 - #define TAINT_RANDSTRUCT 17 --#define TAINT_FLAGS_COUNT 18 -+/* Start of Red Hat-specific taint flags */ -+#define TAINT_18 18 -+#define TAINT_19 19 -+#define TAINT_20 20 -+#define TAINT_21 21 -+#define TAINT_22 22 -+#define TAINT_23 23 -+#define TAINT_24 24 -+#define TAINT_25 25 -+#define TAINT_26 26 -+#define TAINT_SUPPORT_REMOVED 27 -+/* Bits 28 - 31 are reserved for Red Hat use only */ -+#define TAINT_RESERVED28 28 -+#define TAINT_RESERVED29 29 -+#define TAINT_RESERVED30 30 -+#define TAINT_UNPRIVILEGED_BPF 31 -+/* End of Red Hat-specific taint flags */ -+#define TAINT_FLAGS_COUNT 32 - - struct taint_flag { - char c_true; /* character printed when tainted */ -@@ -1029,4 +1046,19 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } - /* OTHER_WRITABLE? Generally considered a bad idea. */ \ - BUILD_BUG_ON_ZERO((perms) & 2) + \ - (perms)) -+ -+struct module; -+ -+#ifdef CONFIG_RHEL_DIFFERENCES -+void mark_hardware_unsupported(const char *msg); -+void mark_hardware_deprecated(const char *msg); -+void mark_tech_preview(const char *msg, struct module *mod); -+void mark_driver_unsupported(const char *name); -+#else -+static inline void mark_hardware_unsupported(const char *msg) { } -+static inline void mark_hardware_deprecated(const char *msg) { } -+static inline void mark_tech_preview(const char *msg, struct module *mod) { } -+static inline void mark_driver_unsupported(const char *name) { } -+#endif -+ - #endif -diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h -index 9cd4455528e5..dfa09696a0e5 100644 ---- a/include/linux/lsm_hook_defs.h -+++ b/include/linux/lsm_hook_defs.h -@@ -371,6 +371,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux) - #endif /* CONFIG_BPF_SYSCALL */ - - LSM_HOOK(int, 0, locked_down, enum lockdown_reason what) -+LSM_HOOK(int, 0, lock_kernel_down, const char *where, enum lockdown_reason level) -+ - - #ifdef CONFIG_PERF_EVENTS - LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type) -diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h -index 988ca0df7824..4ed37b95417c 100644 ---- a/include/linux/lsm_hooks.h -+++ b/include/linux/lsm_hooks.h -@@ -1476,6 +1476,12 @@ - * - * @what: kernel feature being accessed - * -+ * @lock_kernel_down -+ * Put the kernel into lock-down mode. -+ * -+ * @where: Where the lock-down is originating from (e.g. command line option) -+ * @level: The lock-down level (can only increase) -+ * - * Security hooks for perf events - * - * @perf_event_open: -diff --git a/include/linux/module.h b/include/linux/module.h -index 1ad393e62bef..3fb19abee033 100644 ---- a/include/linux/module.h -+++ b/include/linux/module.h -@@ -371,6 +371,7 @@ struct module { - struct module_attribute *modinfo_attrs; - const char *version; - const char *srcversion; -+ const char *rhelversion; - struct kobject *holders_dir; - - /* Exported symbols */ -diff --git a/include/linux/pci.h b/include/linux/pci.h -index 83ce1cdf5676..88397dd562d9 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1397,6 +1397,10 @@ int pci_add_dynid(struct pci_driver *drv, - unsigned long driver_data); - const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, - struct pci_dev *dev); -+/* Reserved for Internal Red Hat use only */ -+const struct pci_device_id *pci_hw_vendor_status( -+ const struct pci_device_id *ids, -+ struct pci_dev *dev); - int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, - int pass); - -diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h -new file mode 100644 -index 000000000000..ea9c136bf884 ---- /dev/null -+++ b/include/linux/rh_kabi.h -@@ -0,0 +1,297 @@ -+/* -+ * rh_kabi.h - Red Hat kABI abstraction header -+ * -+ * Copyright (c) 2014 Don Zickus -+ * Copyright (c) 2015-2018 Jiri Benc -+ * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa -+ * Copyright (c) 2016-2018 Prarit Bhargava -+ * Copyright (c) 2017 Paolo Abeni, Larry Woodman -+ * -+ * This file is released under the GPLv2. -+ * See the file COPYING for more details. -+ * -+ * These kabi macros hide the changes from the kabi checker and from the -+ * process that computes the exported symbols' checksums. -+ * They have 2 variants: one (defined under __GENKSYMS__) used when -+ * generating the checksums, and the other used when building the kernel's -+ * binaries. -+ * -+ * The use of these macros does not guarantee that the usage and modification -+ * of code is correct. As with all Red Hat only changes, an engineer must -+ * explain why the use of the macro is valid in the patch containing the -+ * changes. -+ * -+ */ -+ -+#ifndef _LINUX_RH_KABI_H -+#define _LINUX_RH_KABI_H -+ -+#include -+#include -+ -+/* -+ * RH_KABI_CONST -+ * Adds a new const modifier to a function parameter preserving the old -+ * checksum. -+ * -+ * RH_KABI_DEPRECATE -+ * Mark the element as deprecated and make it unusable by modules while -+ * preserving kABI checksums. -+ * -+ * RH_KABI_DEPRECATE_FN -+ * Mark the function pointer as deprecated and make it unusable by modules -+ * while preserving kABI checksums. -+ * -+ * RH_KABI_EXTEND -+ * Simple macro for adding a new element to a struct. -+ * -+ * RH_KABI_EXTEND_WITH_SIZE -+ * Adds a new element (usually a struct) to a struct and reserves extra -+ * space for the new element. The provided 'size' is the total space to -+ * be added in longs (i.e. it's 8 * 'size' bytes), including the size of -+ * the added element. It is automatically checked that the new element -+ * does not overflow the reserved space, now nor in the future. However, -+ * no attempt is done to check the content of the added element (struct) -+ * for kABI conformance - kABI checking inside the added element is -+ * effectively switched off. -+ * For any struct being added by RH_KABI_EXTEND_WITH_SIZE, it is -+ * recommended its content to be documented as not covered by kABI -+ * guarantee. -+ * -+ * RH_KABI_FILL_HOLE -+ * Simple macro for filling a hole in a struct. -+ * -+ * Warning: only use if a hole exists for _all_ arches. Use pahole to verify. -+ * -+ * RH_KABI_RENAME -+ * Simple macro for renaming an element without changing its type. This -+ * macro can be used in bitfields, for example. -+ * -+ * NOTE: does not include the final ';' -+ * -+ * RH_KABI_REPLACE -+ * Simple replacement of _orig with a union of _orig and _new. -+ * -+ * The RH_KABI_REPLACE* macros attempt to add the ability to use the '_new' -+ * element while preserving size alignment with the '_orig' element. -+ * -+ * The #ifdef __GENKSYMS__ preserves the kABI agreement, while the anonymous -+ * union structure preserves the size alignment (assuming the '_new' element -+ * is not bigger than the '_orig' element). -+ * -+ * RH_KABI_REPLACE_UNSAFE -+ * Unsafe version of RH_KABI_REPLACE. Only use for typedefs. -+ * -+ * RH_KABI_FORCE_CHANGE -+ * Force change of the symbol checksum. The argument of the macro is a -+ * version for cases we need to do this more than once. -+ * -+ * This macro does the opposite: it changes the symbol checksum without -+ * actually changing anything about the exported symbol. It is useful for -+ * symbols that are not whitelisted, we're changing them in an -+ * incompatible way and want to prevent 3rd party modules to silently -+ * corrupt memory. Instead, by changing the symbol checksum, such modules -+ * won't be loaded by the kernel. This macro should only be used as a -+ * last resort when all other KABI workarounds have failed. -+ * -+ * RH_KABI_EXCLUDE -+ * !!! WARNING: DANGEROUS, DO NOT USE unless you are aware of all the !!! -+ * !!! implications. This should be used ONLY EXCEPTIONALLY and only !!! -+ * !!! under specific circumstances. Very likely, this macro does not !!! -+ * !!! do what you expect it to do. Note that any usage of this macro !!! -+ * !!! MUST be paired with a RH_KABI_FORCE_CHANGE annotation of !!! -+ * !!! a suitable symbol (or an equivalent safeguard) and the commit !!! -+ * !!! log MUST explain why the chosen solution is appropriate. !!! -+ * -+ * Exclude the element from checksum generation. Any such element is -+ * considered not to be part of the kABI whitelist and may be changed at -+ * will. Note however that it's the responsibility of the developer -+ * changing the element to ensure 3rd party drivers using this element -+ * won't panic, for example by not allowing them to be loaded. That can -+ * be achieved by changing another, non-whitelisted symbol they use, -+ * either by nature of the change or by using RH_KABI_FORCE_CHANGE. -+ * -+ * Also note that any change to the element must preserve its size. Change -+ * of the size is not allowed and would constitute a silent kABI breakage. -+ * Beware that the RH_KABI_EXCLUDE macro does not do any size checks. -+ * -+ * NOTE -+ * Don't use ';' after these macros as it messes up the kABI checker by -+ * changing what the resulting token string looks like. Instead let this -+ * macro add the ';' so it can be properly hidden from the kABI checker -+ * (mainly for RH_KABI_EXTEND, but applied to all macros for uniformity). -+ * -+ */ -+#ifdef __GENKSYMS__ -+ -+# define RH_KABI_CONST -+# define RH_KABI_EXTEND(_new) -+# define RH_KABI_FILL_HOLE(_new) -+# define RH_KABI_FORCE_CHANGE(ver) __attribute__((rh_kabi_change ## ver)) -+# define RH_KABI_RENAME(_orig, _new) _orig -+ -+# define _RH_KABI_DEPRECATE(_type, _orig) _type _orig -+# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args) -+# define _RH_KABI_REPLACE(_orig, _new) _orig -+# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _orig -+# define _RH_KABI_EXCLUDE(_elem) -+ -+#else -+ -+# define RH_KABI_ALIGN_WARNING ". Disable CONFIG_RH_KABI_SIZE_ALIGN_CHECKS if debugging." -+ -+# define RH_KABI_CONST const -+# define RH_KABI_EXTEND(_new) _new; -+# define RH_KABI_FILL_HOLE(_new) _new; -+# define RH_KABI_FORCE_CHANGE(ver) -+# define RH_KABI_RENAME(_orig, _new) _new -+ -+ -+#if IS_BUILTIN(CONFIG_RH_KABI_SIZE_ALIGN_CHECKS) -+# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) \ -+ union { \ -+ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \ -+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_new) " is larger than " __stringify(_orig) RH_KABI_ALIGN_WARNING); \ -+ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \ -+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) RH_KABI_ALIGN_WARNING); \ -+ } -+# define __RH_KABI_CHECK_SIZE(_item, _size) \ -+ _Static_assert(sizeof(struct{_item;}) <= _size, \ -+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_item) " is larger than the reserved size (" __stringify(_size) " bytes)" RH_KABI_ALIGN_WARNING) -+#else -+# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) -+# define __RH_KABI_CHECK_SIZE(_item, _size) -+#endif -+ -+#define RH_KABI_UNIQUE_ID __PASTE(rh_kabi_hidden_, __LINE__) -+ -+# define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig -+# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ -+ _type (* rh_reserved_##_orig)(_args) -+# define _RH_KABI_REPLACE(_orig, _new) \ -+ union { \ -+ _new; \ -+ struct { \ -+ _orig; \ -+ } RH_KABI_UNIQUE_ID; \ -+ __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new); \ -+ } -+# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _new -+ -+# define _RH_KABI_EXCLUDE(_elem) _elem -+ -+#endif /* __GENKSYMS__ */ -+ -+/* semicolon added wrappers for the RH_KABI_REPLACE macros */ -+# define RH_KABI_DEPRECATE(_type, _orig) _RH_KABI_DEPRECATE(_type, _orig); -+# define RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ -+ _RH_KABI_DEPRECATE_FN(_type, _orig, _args); -+# define RH_KABI_REPLACE(_orig, _new) _RH_KABI_REPLACE(_orig, _new); -+# define RH_KABI_REPLACE_UNSAFE(_orig, _new) _RH_KABI_REPLACE_UNSAFE(_orig, _new); -+/* -+ * Macro for breaking up a random element into two smaller chunks using an -+ * anonymous struct inside an anonymous union. -+ */ -+# define RH_KABI_REPLACE2(orig, _new1, _new2) RH_KABI_REPLACE(orig, struct{ _new1; _new2;}) -+ -+# define RH_KABI_RESERVE(n) _RH_KABI_RESERVE(n); -+/* -+ * Simple wrappers to replace standard Red Hat reserved elements. -+ */ -+# define RH_KABI_USE(n, _new) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), _new) -+/* -+ * Macros for breaking up a reserved element into two smaller chunks using -+ * an anonymous struct inside an anonymous union. -+ */ -+# define RH_KABI_USE2(n, _new1, _new2) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), struct{ _new1; _new2; }) -+ -+/* -+ * We tried to standardize on Red Hat reserved names. These wrappers -+ * leverage those common names making it easier to read and find in the -+ * code. -+ */ -+# define _RH_KABI_RESERVE(n) unsigned long rh_reserved##n -+ -+#define RH_KABI_EXCLUDE(_elem) _RH_KABI_EXCLUDE(_elem); -+ -+/* -+ * Extending a struct while reserving extra space. -+ */ -+#define RH_KABI_EXTEND_WITH_SIZE(_new, _size) \ -+ RH_KABI_EXTEND(union { \ -+ _new; \ -+ unsigned long RH_KABI_UNIQUE_ID[_size]; \ -+ __RH_KABI_CHECK_SIZE(_new, 8 * (_size)); \ -+ }) -+ -+/* -+ * RHEL macros to extend structs. -+ * -+ * base struct: The struct being extended. For example, pci_dev. -+ * extended struct: The Red Hat struct being added to the base struct. -+ * For example, pci_dev_rh. -+ * -+ * These macros should be used to extend structs before KABI freeze. -+ * They can be used post-KABI freeze in the limited case of the base -+ * struct not being embedded in another struct. -+ * -+ * Extended structs cannot be shrunk in size as changes will break -+ * the size & offset comparison. -+ * -+ * Extended struct elements are not guaranteed for access by modules unless -+ * explicitly commented as such in the declaration of the extended struct or -+ * the element in the extended struct. -+ */ -+ -+/* -+ * RH_KABI_SIZE_AND_EXTEND|_PTR() extends a struct by embedding or adding -+ * a pointer in a base struct. The name of the new struct is the name -+ * of the base struct appended with _rh. -+ */ -+#define _RH_KABI_SIZE_AND_EXTEND_PTR(_struct) \ -+ size_t _struct##_size_rh; \ -+ RH_KABI_EXCLUDE(struct _struct##_rh *_struct##_rh) -+#define RH_KABI_SIZE_AND_EXTEND_PTR(_struct) \ -+ _RH_KABI_SIZE_AND_EXTEND_PTR(_struct) -+ -+#define _RH_KABI_SIZE_AND_EXTEND(_struct) \ -+ size_t _struct##_size_rh; \ -+ RH_KABI_EXCLUDE(struct _struct##_rh _struct##_rh) -+#define RH_KABI_SIZE_AND_EXTEND(_struct) \ -+ _RH_KABI_SIZE_AND_EXTEND(_struct) -+ -+/* -+ * RH_KABI_SET_SIZE calculates and sets the size of the extended struct and -+ * stores it in the size_rh field for structs that are dynamically allocated. -+ * This macro MUST be called when expanding a base struct with -+ * RH_KABI_SIZE_AND_EXTEND, and it MUST be called from the allocation site -+ * regardless of being allocated in the kernel or a module. -+ * Note: since this macro is intended to be invoked outside of a struct, -+ * a semicolon is necessary at the end of the line where it is invoked. -+ */ -+#define RH_KABI_SET_SIZE(_name, _struct) ({ \ -+ _name->_struct##_size_rh = sizeof(struct _struct##_rh); \ -+}) -+ -+/* -+ * RH_KABI_INIT_SIZE calculates and sets the size of the extended struct and -+ * stores it in the size_rh field for structs that are statically allocated. -+ * This macro MUST be called when expanding a base struct with -+ * RH_KABI_SIZE_AND_EXTEND, and it MUST be called from the declaration site -+ * regardless of being allocated in the kernel or a module. -+ */ -+#define RH_KABI_INIT_SIZE(_struct) \ -+ ._struct##_size_rh = sizeof(struct _struct##_rh), -+ -+/* -+ * RH_KABI_CHECK_EXT verifies allocated memory exists. This MUST be called to -+ * verify that memory in the _rh struct is valid, and can be called -+ * regardless if RH_KABI_SIZE_AND_EXTEND or RH_KABI_SIZE_AND_EXTEND_PTR is -+ * used. -+ */ -+#define RH_KABI_CHECK_EXT(_ptr, _struct, _field) ({ \ -+ size_t __off = offsetof(struct _struct##_rh, _field); \ -+ _ptr->_struct##_size_rh > __off ? true : false; \ -+}) -+ -+#endif /* _LINUX_RH_KABI_H */ -diff --git a/include/linux/rmi.h b/include/linux/rmi.h -index 7b22366d0065..307a651b2755 100644 ---- a/include/linux/rmi.h -+++ b/include/linux/rmi.h -@@ -363,6 +363,7 @@ struct rmi_driver_data { - - struct rmi4_attn_data attn_data; - DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16); -+ struct work_struct attn_work; - }; - - int rmi_register_transport_device(struct rmi_transport_dev *xport); -diff --git a/include/linux/security.h b/include/linux/security.h -index a8d9310472df..381305889d89 100644 ---- a/include/linux/security.h -+++ b/include/linux/security.h -@@ -446,6 +446,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); - int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); - int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); - int security_locked_down(enum lockdown_reason what); -+int security_lock_kernel_down(const char *where, enum lockdown_reason level); - #else /* CONFIG_SECURITY */ - - static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data) -@@ -1273,6 +1274,10 @@ static inline int security_locked_down(enum lockdown_reason what) - { - return 0; - } -+static inline int security_lock_kernel_down(const char *where, enum lockdown_reason level) -+{ -+ return 0; -+} - #endif /* CONFIG_SECURITY */ - - #ifdef CONFIG_SECURITY_NETWORK -diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h -index 7800e12ee042..3025aca3c358 100644 ---- a/include/soc/bcm2835/raspberrypi-firmware.h -+++ b/include/soc/bcm2835/raspberrypi-firmware.h -@@ -10,6 +10,7 @@ - #include - - struct rpi_firmware; -+struct pci_dev; - - enum rpi_firmware_property_status { - RPI_FIRMWARE_STATUS_REQUEST = 0, -@@ -90,7 +91,7 @@ enum rpi_firmware_property_tag { - RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, - RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049, - RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050, -- -+ RPI_FIRMWARE_NOTIFY_XHCI_RESET = 0x00030058, - - /* Dispmanx TAGS */ - RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, -@@ -141,6 +142,7 @@ int rpi_firmware_property(struct rpi_firmware *fw, - int rpi_firmware_property_list(struct rpi_firmware *fw, - void *data, size_t tag_size); - struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node); -+int rpi_firmware_init_vl805(struct pci_dev *pdev); - #else - static inline int rpi_firmware_property(struct rpi_firmware *fw, u32 tag, - void *data, size_t len) -@@ -158,6 +160,11 @@ static inline struct rpi_firmware *rpi_firmware_get(struct device_node *firmware - { - return NULL; - } -+ -+static inline int rpi_firmware_init_vl805(struct pci_dev *pdev) -+{ -+ return 0; -+} - #endif - - #endif /* __SOC_RASPBERRY_FIRMWARE_H__ */ -diff --git a/kernel/Makefile b/kernel/Makefile -index 4cb4130ced32..b1010f42dd18 100644 ---- a/kernel/Makefile -+++ b/kernel/Makefile -@@ -12,6 +12,8 @@ obj-y = fork.o exec_domain.o panic.o \ - notifier.o ksysfs.o cred.o reboot.o \ - async.o range.o smpboot.o ucount.o - -+obj-$(CONFIG_RHEL_DIFFERENCES) += rh_taint.o -+ - obj-$(CONFIG_MODULES) += kmod.o - obj-$(CONFIG_MULTIUSER) += groups.o - -diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c -index d85f37239540..28ed55c3dd18 100644 ---- a/kernel/bpf/syscall.c -+++ b/kernel/bpf/syscall.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -43,7 +44,25 @@ static DEFINE_SPINLOCK(prog_idr_lock); - static DEFINE_IDR(map_idr); - static DEFINE_SPINLOCK(map_idr_lock); - --int sysctl_unprivileged_bpf_disabled __read_mostly; -+/* RHEL-only: default to 1 */ -+int sysctl_unprivileged_bpf_disabled __read_mostly = 1; -+ -+static int __init unprivileged_bpf_setup(char *str) -+{ -+ unsigned long disabled; -+ if (!kstrtoul(str, 0, &disabled)) -+ sysctl_unprivileged_bpf_disabled = !!disabled; -+ -+ if (!sysctl_unprivileged_bpf_disabled) { -+ pr_warn("Unprivileged BPF has been enabled " -+ "(unprivileged_bpf_disabled=0 has been supplied " -+ "in boot parameters), tainting the kernel"); -+ add_taint(TAINT_UNPRIVILEGED_BPF, LOCKDEP_STILL_OK); -+ } -+ -+ return 1; -+} -+__setup("unprivileged_bpf_disabled=", unprivileged_bpf_setup); - - static const struct bpf_map_ops * const bpf_map_types[] = { - #define BPF_PROG_TYPE(_id, _name, prog_ctx_type, kern_ctx_type) -@@ -3659,11 +3678,17 @@ static int link_update(union bpf_attr *attr) - SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, size) - { - union bpf_attr attr; -+ static int marked; - int err; - - if (sysctl_unprivileged_bpf_disabled && !capable(CAP_SYS_ADMIN)) - return -EPERM; - -+ if (!marked) { -+ mark_tech_preview("eBPF syscall", NULL); -+ marked = true; -+ } -+ - err = bpf_check_uarg_tail_zero(uattr, sizeof(attr), size); - if (err) - return err; -diff --git a/kernel/crash_core.c b/kernel/crash_core.c -index 9f1557b98468..df551fc9034c 100644 ---- a/kernel/crash_core.c -+++ b/kernel/crash_core.c -@@ -7,6 +7,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -39,6 +40,15 @@ static int __init parse_crashkernel_mem(char *cmdline, - unsigned long long *crash_base) - { - char *cur = cmdline, *tmp; -+ unsigned long long total_mem = system_ram; -+ -+ /* -+ * Firmware sometimes reserves some memory regions for it's own use. -+ * so we get less than actual system memory size. -+ * Workaround this by round up the total size to 128M which is -+ * enough for most test cases. -+ */ -+ total_mem = roundup(total_mem, SZ_128M); - - /* for each entry of the comma-separated list */ - do { -@@ -83,13 +93,13 @@ static int __init parse_crashkernel_mem(char *cmdline, - return -EINVAL; - } - cur = tmp; -- if (size >= system_ram) { -+ if (size >= total_mem) { - pr_warn("crashkernel: invalid size\n"); - return -EINVAL; - } - - /* match ? */ -- if (system_ram >= start && system_ram < end) { -+ if (total_mem >= start && total_mem < end) { - *crash_size = size; - break; - } -@@ -248,6 +258,20 @@ static int __init __parse_crashkernel(char *cmdline, - if (suffix) - return parse_crashkernel_suffix(ck_cmdline, crash_size, - suffix); -+ -+ if (strncmp(ck_cmdline, "auto", 4) == 0) { -+#ifdef CONFIG_X86_64 -+ ck_cmdline = "1G-64G:160M,64G-1T:256M,1T-:512M"; -+#elif defined(CONFIG_S390) -+ ck_cmdline = "4G-64G:160M,64G-1T:256M,1T-:512M"; -+#elif defined(CONFIG_ARM64) -+ ck_cmdline = "2G-:512M"; -+#elif defined(CONFIG_PPC64) -+ ck_cmdline = "2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G"; -+#endif -+ pr_info("Using crashkernel=auto, the size chosen is a best effort estimation.\n"); -+ } -+ - /* - * if the commandline contains a ':', then that's the extended - * syntax -- if not, it must be the classic syntax -diff --git a/kernel/module.c b/kernel/module.c -index 646f1e2330d2..aed5b1fcadf8 100644 ---- a/kernel/module.c -+++ b/kernel/module.c -@@ -799,6 +799,7 @@ static struct module_attribute modinfo_##field = { \ - - MODINFO_ATTR(version); - MODINFO_ATTR(srcversion); -+MODINFO_ATTR(rhelversion); - - static char last_unloaded_module[MODULE_NAME_LEN+1]; - -@@ -1263,6 +1264,7 @@ static struct module_attribute *modinfo_attrs[] = { - &module_uevent, - &modinfo_version, - &modinfo_srcversion, -+ &modinfo_rhelversion, - &modinfo_initstate, - &modinfo_coresize, - &modinfo_initsize, -diff --git a/kernel/module_signing.c b/kernel/module_signing.c -index 9d9fc678c91d..84ad75a53c83 100644 ---- a/kernel/module_signing.c -+++ b/kernel/module_signing.c -@@ -38,8 +38,15 @@ int mod_verify_sig(const void *mod, struct load_info *info) - modlen -= sig_len + sizeof(ms); - info->len = modlen; - -- return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, -+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, - VERIFY_USE_SECONDARY_KEYRING, - VERIFYING_MODULE_SIGNATURE, - NULL, NULL); -+ if (ret == -ENOKEY && IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING)) { -+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, -+ VERIFY_USE_PLATFORM_KEYRING, -+ VERIFYING_MODULE_SIGNATURE, -+ NULL, NULL); -+ } -+ return ret; - } -diff --git a/kernel/panic.c b/kernel/panic.c -index b69ee9e76cb2..4f08e4f4a6b0 100644 ---- a/kernel/panic.c -+++ b/kernel/panic.c -@@ -376,6 +376,20 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = { - [ TAINT_LIVEPATCH ] = { 'K', ' ', true }, - [ TAINT_AUX ] = { 'X', ' ', true }, - [ TAINT_RANDSTRUCT ] = { 'T', ' ', true }, -+ [ TAINT_18 ] = { '?', '-', false }, -+ [ TAINT_19 ] = { '?', '-', false }, -+ [ TAINT_20 ] = { '?', '-', false }, -+ [ TAINT_21 ] = { '?', '-', false }, -+ [ TAINT_22 ] = { '?', '-', false }, -+ [ TAINT_23 ] = { '?', '-', false }, -+ [ TAINT_24 ] = { '?', '-', false }, -+ [ TAINT_25 ] = { '?', '-', false }, -+ [ TAINT_26 ] = { '?', '-', false }, -+ [ TAINT_SUPPORT_REMOVED ] = { 'h', ' ', false }, -+ [ TAINT_RESERVED28 ] = { '?', '-', false }, -+ [ TAINT_RESERVED29 ] = { '?', '-', false }, -+ [ TAINT_RESERVED30 ] = { '?', '-', false }, -+ [ TAINT_UNPRIVILEGED_BPF ] = { 'u', ' ', false }, - }; - - /** -diff --git a/kernel/rh_taint.c b/kernel/rh_taint.c -new file mode 100644 -index 000000000000..8d1641710ed7 ---- /dev/null -+++ b/kernel/rh_taint.c -@@ -0,0 +1,93 @@ -+#include -+#include -+ -+/* -+ * The following functions are used by Red Hat to indicate to users that -+ * hardware and drivers are unsupported, or have limited support in RHEL major -+ * and minor releases. These functions output loud warning messages to the end -+ * user and should be USED WITH CAUTION. -+ * -+ * Any use of these functions _MUST_ be documented in the RHEL Release Notes, -+ * and have approval of management. -+ */ -+ -+/** -+ * mark_hardware_unsupported() - Mark hardware, class, or type as unsupported. -+ * @msg: Hardware name, class, or type -+ * -+ * Called to mark a device, class of devices, or types of devices as not having -+ * support in any RHEL minor release. This does not TAINT the kernel. Red Hat -+ * will not fix bugs against this hardware in this minor release. Red Hat may -+ * declare support in a future major or minor update release. This cannot be -+ * used to mark drivers unsupported. -+ */ -+void mark_hardware_unsupported(const char *msg) -+{ -+ /* Print one single message */ -+ pr_crit("Warning: %s - this hardware has not undergone testing by Red Hat and might not be certified. Please consult https://hardware.redhat.com for certified hardware.\n", msg); -+} -+EXPORT_SYMBOL(mark_hardware_unsupported); -+ -+/** -+ * mark_hardware_deprecated() - Mark hardware, class, or type as deprecated. -+ * @msg: Hardware name, class, or type -+ * -+ * Called to minimize the support status of a previously supported device in -+ * a minor release. This does not TAINT the kernel. Marking hardware -+ * deprecated is usually done in conjunction with the hardware vendor. Future -+ * RHEL major releases may not include this driver. Driver updates and fixes -+ * for this device will be limited to critical issues in future minor releases. -+ */ -+void mark_hardware_deprecated(const char *msg) -+{ -+ pr_crit("Warning: %s - this hardware is not recommended for new deployments. It continues to be supported in this RHEL release, but it is likely to be removed in the next major release. Driver updates and fixes for this device will be limited to critical issues. Please contact Red Hat Support or your device's hardware vendor for additional information.\n", msg); -+} -+EXPORT_SYMBOL(mark_hardware_deprecated); -+ -+/** -+ * mark_tech_preview() - Mark driver or kernel subsystem as 'Tech Preview' -+ * @msg: Driver or kernel subsystem name -+ * -+ * Called to minimize the support status of a new driver. This does TAINT the -+ * kernel. Calling this function indicates that the driver or subsystem has -+ * had limited testing and is not marked for full support within this RHEL -+ * minor release. The next RHEL minor release may contain full support for -+ * this driver. Red Hat does not guarantee that bugs reported against this -+ * driver or subsystem will be resolved. -+ */ -+void mark_tech_preview(const char *msg, struct module *mod) -+{ -+ const char *str = NULL; -+ -+ if (msg) -+ str = msg; -+#ifdef CONFIG_MODULES -+ else if (mod && mod->name) -+ str = mod->name; -+#endif -+ -+ pr_warn("TECH PREVIEW: %s may not be fully supported.\n" -+ "Please review provided documentation for limitations.\n", -+ (str ? str : "kernel")); -+ add_taint(TAINT_AUX, LOCKDEP_STILL_OK); -+#ifdef CONFIG_MODULES -+ if (mod) -+ mod->taints |= (1U << TAINT_AUX); -+#endif -+} -+EXPORT_SYMBOL(mark_tech_preview); -+ -+/** -+ * mark_driver_unsupported - drivers that we know we don't want to support -+ * @name: the name of the driver -+ * -+ * In some cases Red Hat has chosen to build a driver for internal QE -+ * use. Use this function to mark those drivers as unsupported for -+ * customers. -+ */ -+void mark_driver_unsupported(const char *name) -+{ -+ pr_crit("Warning: %s - This driver has not undergone sufficient testing by Red Hat for this release and therefore cannot be used in production systems.\n", -+ name ? name : "kernel"); -+} -+EXPORT_SYMBOL(mark_driver_unsupported); -diff --git a/mm/kmemleak.c b/mm/kmemleak.c -index e362dc3d2028..0c3dfb8eef67 100644 ---- a/mm/kmemleak.c -+++ b/mm/kmemleak.c -@@ -1958,6 +1958,11 @@ void __init kmemleak_init(void) - */ - static int __init kmemleak_late_init(void) - { -+ if (!kmemleak_skip_disable) { -+ kmemleak_disable(); -+ return 0; -+ } -+ - kmemleak_initialized = 1; - - debugfs_create_file("kmemleak", 0644, NULL, NULL, &kmemleak_fops); -diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c -index 5c3c50c5ec52..188eb460cede 100644 ---- a/scripts/mod/modpost.c -+++ b/scripts/mod/modpost.c -@@ -21,6 +21,7 @@ - #include - #include "modpost.h" - #include "../../include/linux/license.h" -+#include "../../include/generated/uapi/linux/version.h" - - /* Are we using CONFIG_MODVERSIONS? */ - static int modversions = 0; -@@ -2381,6 +2382,12 @@ static void add_srcversion(struct buffer *b, struct module *mod) - } - } - -+static void add_rhelversion(struct buffer *b, struct module *mod) -+{ -+ buf_printf(b, "MODULE_INFO(rhelversion, \"%d.%d\");\n", RHEL_MAJOR, -+ RHEL_MINOR); -+} -+ - static void write_if_changed(struct buffer *b, const char *fname) - { - char *tmp; -@@ -2644,6 +2651,7 @@ int main(int argc, char **argv) - add_depends(&buf, mod); - add_moddevtable(&buf, mod); - add_srcversion(&buf, mod); -+ add_rhelversion(&buf, mod); - - sprintf(fname, "%s.mod.c", mod->name); - write_if_changed(&buf, fname); -diff --git a/scripts/tags.sh b/scripts/tags.sh -index 4e18ae5282a6..805341c0aaf3 100755 ---- a/scripts/tags.sh -+++ b/scripts/tags.sh -@@ -16,6 +16,8 @@ fi - ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )" - # tags and cscope files should also ignore MODVERSION *.mod.c files - ignore="$ignore ( -name *.mod.c ) -prune -o" -+# RHEL tags and cscope should also ignore redhat/rpm -+ignore="$ignore ( -path redhat/rpm ) -prune -o" - - # Use make KBUILD_ABS_SRCTREE=1 {tags|cscope} - # to force full paths for a non-O= build -diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c -index 253fb9a7fc98..8c95b68d86d4 100644 ---- a/security/integrity/platform_certs/load_uefi.c -+++ b/security/integrity/platform_certs/load_uefi.c -@@ -46,7 +46,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, - return NULL; - - if (*status != EFI_BUFFER_TOO_SMALL) { -- pr_err("Couldn't get size: 0x%lx\n", *status); -+ pr_err("Couldn't get size: %s (0x%lx)\n", -+ efi_status_to_str(*status), *status); - return NULL; - } - -@@ -57,7 +58,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, - *status = efi.get_variable(name, guid, NULL, &lsize, db); - if (*status != EFI_SUCCESS) { - kfree(db); -- pr_err("Error reading db var: 0x%lx\n", *status); -+ pr_err("Error reading db var: %s (0x%lx)\n", -+ efi_status_to_str(*status), *status); - return NULL; - } - -diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig -index e84ddf484010..d0501353a4b9 100644 ---- a/security/lockdown/Kconfig -+++ b/security/lockdown/Kconfig -@@ -16,6 +16,19 @@ config SECURITY_LOCKDOWN_LSM_EARLY - subsystem is fully initialised. If enabled, lockdown will - unconditionally be called before any other LSMs. - -+config LOCK_DOWN_IN_EFI_SECURE_BOOT -+ bool "Lock down the kernel in EFI Secure Boot mode" -+ default n -+ depends on EFI && SECURITY_LOCKDOWN_LSM_EARLY -+ help -+ UEFI Secure Boot provides a mechanism for ensuring that the firmware -+ will only load signed bootloaders and kernels. Secure boot mode may -+ be determined from EFI variables provided by the system firmware if -+ not indicated by the boot parameters. -+ -+ Enabling this option results in kernel lockdown being triggered if -+ EFI Secure Boot is set. -+ - choice - prompt "Kernel default lockdown mode" - default LOCK_DOWN_KERNEL_FORCE_NONE -diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c -index 5a952617a0eb..61cc3cdc4d25 100644 ---- a/security/lockdown/lockdown.c -+++ b/security/lockdown/lockdown.c -@@ -73,6 +73,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what) - - static struct security_hook_list lockdown_hooks[] __lsm_ro_after_init = { - LSM_HOOK_INIT(locked_down, lockdown_is_locked_down), -+ LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down), - }; - - static int __init lockdown_lsm_init(void) -diff --git a/security/security.c b/security/security.c -index 7fed24b9d57e..37fab5c5d974 100644 ---- a/security/security.c -+++ b/security/security.c -@@ -2456,6 +2456,12 @@ int security_locked_down(enum lockdown_reason what) - } - EXPORT_SYMBOL(security_locked_down); - -+int security_lock_kernel_down(const char *where, enum lockdown_reason level) -+{ -+ return call_int_hook(lock_kernel_down, 0, where, level); -+} -+EXPORT_SYMBOL(security_lock_kernel_down); -+ - #ifdef CONFIG_PERF_EVENTS - int security_perf_event_open(struct perf_event_attr *attr, int type) - { diff --git a/sources b/sources index 72d7f5f97..88bdd6a1f 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (linux-20200422git18bf34080c4c.tar.xz) = 710c06a172c6f8fb1c1190a9df731ed827f6d43c4845043afdfe04e1842a7697a0508379291f6337bea6ca5c8cc0921ca6bbcd0646e9ef5ee0bd4fd9fae68857 -SHA512 (kernel-abi-whitelists-5.7.0-0.rc2.20200422git18bf34080c4c.1.tar.bz2) = f2a27f487ac296709c544cca7d6438902055d3929192570f8dbeae3b78902a3bddaa1073e7073facb2a3c77752f8d436cf4b06e22ed797a7704bff5f461d4978 -SHA512 (kernel-kabi-dw-5.7.0-0.rc2.20200422git18bf34080c4c.1.tar.bz2) = 14c8b4fb877e28e55faa980a8aaf9d22c947c5ad879c96657a1a0010109139a692ba91988dbc04b0859c82cb4ee43e6bf4d59899e81442eb54896720752d5f27 +SHA512 (linux-20200423git7adc4b399952.tar.xz) = bfb23db4877b1ba658a8eb89f1d06360c7a6c843d8114b1ba3c15ac035d3accca3bca5e56dcdd8d0d246a0c0bd0930102509dab5fa6eed963f9b744ff5d3aaf7 +SHA512 (kernel-abi-whitelists-5.7.0-0.rc2.20200423git7adc4b399952.1.tar.bz2) = 0f23fa69e02ccd41013f7d9c553c91a786ecd55909dbbaa4d1c7f0a3913aa74bcaca2f53a332d91f855f345473b8804da2736db3ca51bddc11d15bb739ea60f4 +SHA512 (kernel-kabi-dw-5.7.0-0.rc2.20200423git7adc4b399952.1.tar.bz2) = 18c4086f382f82ed657bc8b6c7474c3d0630179dc406f92f9b61427d520e8c04e696269a25a45fc9d8a6f3208d460f4b3cc5f38ee86067db1b015387d2267396 diff --git a/update_scripts.sh b/update_scripts.sh index 77d795287..bbfd6f11f 100755 --- a/update_scripts.sh +++ b/update_scripts.sh @@ -8,5 +8,5 @@ TARGET=$1 for i in $RPM_SOURCE_DIR/*.$TARGET; do NEW=`echo $i | sed s/.$TARGET//` - mv $i $NEW + cp $i $NEW done