kernel-5.15-0
* Fri Nov 12 2021 Justin M. Forbes <jforbes@fedoraproject.org> [5.15-0] - usb: xhci: tegra: Check padctrl interrupt presence in device tree (Dmitry Osipenko) - Fedora: Enable MediaTek bluetooth pieces (Peter Robinson) - x86/PCI/ACPI: Replace printk calls with pr_info/pr_warn calls (Hans de Goede) - x86/PCI: Ignore E820 reservations for bridge windows on newer systems (Hans de Goede) - Revert "[scsi] megaraid_sas: re-add certain pci-ids" (Justin M. Forbes) - Revert "wireguard: disable in FIPS mode" (Justin M. Forbes) - Revert "[fs] dax: mark tech preview" (Justin M. Forbes) - Revert "wireguard: mark as Tech Preview" (Justin M. Forbes) - Revert "add pci_hw_vendor_status()" (Justin M. Forbes) - Input: i8042 - Add quirk for Fujitsu Lifebook T725 (Takashi Iwai) Resolves: rhbz# Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
This commit is contained in:
parent
3c5151dfa4
commit
d0578f42bd
18 changed files with 338 additions and 43 deletions
|
|
@ -1,3 +1,4 @@
|
|||
Documentation/admin-guide/kernel-parameters.txt | 9 ++
|
||||
Makefile | 4 +
|
||||
arch/arm/Kconfig | 4 +-
|
||||
arch/arm64/Kconfig | 3 +-
|
||||
|
|
@ -6,7 +7,11 @@
|
|||
arch/s390/include/asm/ipl.h | 1 +
|
||||
arch/s390/kernel/ipl.c | 5 +
|
||||
arch/s390/kernel/setup.c | 4 +
|
||||
arch/x86/include/asm/pci_x86.h | 10 ++
|
||||
arch/x86/kernel/resource.c | 4 +
|
||||
arch/x86/kernel/setup.c | 22 ++--
|
||||
arch/x86/pci/acpi.c | 49 ++++++--
|
||||
arch/x86/pci/common.c | 6 +
|
||||
crypto/rng.c | 73 +++++++++++-
|
||||
drivers/acpi/apei/hest.c | 8 ++
|
||||
drivers/acpi/irq.c | 17 ++-
|
||||
|
|
@ -28,6 +33,7 @@
|
|||
drivers/nvme/host/nvme.h | 4 +
|
||||
drivers/pci/quirks.c | 24 ++++
|
||||
drivers/usb/core/hub.c | 7 ++
|
||||
drivers/usb/host/xhci-tegra.c | 41 +++++--
|
||||
fs/btrfs/async-thread.c | 14 +++
|
||||
include/linux/efi.h | 22 ++--
|
||||
include/linux/lsm_hook_defs.h | 2 +
|
||||
|
|
@ -42,10 +48,30 @@
|
|||
security/lockdown/Kconfig | 13 +++
|
||||
security/lockdown/lockdown.c | 1 +
|
||||
security/security.c | 6 +
|
||||
44 files changed, 708 insertions(+), 192 deletions(-)
|
||||
50 files changed, 805 insertions(+), 214 deletions(-)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index 43dc35fe5bc0..07f1615206d4 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -3949,6 +3949,15 @@
|
||||
please report a bug.
|
||||
nocrs [X86] Ignore PCI host bridge windows from ACPI.
|
||||
If you need to use this, please report a bug.
|
||||
+ use_e820 [X86] Use E820 reservations to exclude parts of
|
||||
+ PCI host bridge windows. This is a workaround
|
||||
+ for BIOS defects in host bridge _CRS methods.
|
||||
+ If you need to use this, please report a bug to
|
||||
+ <linux-pci@vger.kernel.org>.
|
||||
+ no_e820 [X86] Ignore E820 reservations for PCI host
|
||||
+ bridge windows. This is the default on modern
|
||||
+ hardware. If you need to use this, please report
|
||||
+ a bug to <linux-pci@vger.kernel.org>.
|
||||
routeirq Do IRQ routing for all PCI devices.
|
||||
This is normally done in pci_enable_device(),
|
||||
so this option is a temporary workaround
|
||||
diff --git a/Makefile b/Makefile
|
||||
index ffcc7eadc44b..7c94a55d6770 100644
|
||||
index 14480187ac75..b3146bb9a64f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -18,6 +18,10 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
|
||||
|
|
@ -180,6 +206,60 @@ index 67e5fff96ee0..0d58c1f07176 100644
|
|||
/* 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/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
|
||||
index 490411dba438..0bb4e7dd0ffc 100644
|
||||
--- a/arch/x86/include/asm/pci_x86.h
|
||||
+++ b/arch/x86/include/asm/pci_x86.h
|
||||
@@ -39,6 +39,8 @@ do { \
|
||||
#define PCI_ROOT_NO_CRS 0x100000
|
||||
#define PCI_NOASSIGN_BARS 0x200000
|
||||
#define PCI_BIG_ROOT_WINDOW 0x400000
|
||||
+#define PCI_USE_E820 0x800000
|
||||
+#define PCI_NO_E820 0x1000000
|
||||
|
||||
extern unsigned int pci_probe;
|
||||
extern unsigned long pirq_table_addr;
|
||||
@@ -64,6 +66,8 @@ void pcibios_scan_specific_bus(int busn);
|
||||
|
||||
/* pci-irq.c */
|
||||
|
||||
+struct pci_dev;
|
||||
+
|
||||
struct irq_info {
|
||||
u8 bus, devfn; /* Bus, device and function */
|
||||
struct {
|
||||
@@ -232,3 +236,9 @@ static inline void mmio_config_writel(void __iomem *pos, u32 val)
|
||||
# define x86_default_pci_init_irq NULL
|
||||
# define x86_default_pci_fixup_irqs NULL
|
||||
#endif
|
||||
+
|
||||
+#if defined(CONFIG_PCI) && defined(CONFIG_ACPI)
|
||||
+extern bool pci_use_e820;
|
||||
+#else
|
||||
+#define pci_use_e820 false
|
||||
+#endif
|
||||
diff --git a/arch/x86/kernel/resource.c b/arch/x86/kernel/resource.c
|
||||
index 9b9fb7882c20..e8dc9bc327bd 100644
|
||||
--- a/arch/x86/kernel/resource.c
|
||||
+++ b/arch/x86/kernel/resource.c
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/ioport.h>
|
||||
#include <asm/e820/api.h>
|
||||
+#include <asm/pci_x86.h>
|
||||
|
||||
static void resource_clip(struct resource *res, resource_size_t start,
|
||||
resource_size_t end)
|
||||
@@ -28,6 +29,9 @@ static void remove_e820_regions(struct resource *avail)
|
||||
int i;
|
||||
struct e820_entry *entry;
|
||||
|
||||
+ if (!pci_use_e820)
|
||||
+ return;
|
||||
+
|
||||
for (i = 0; i < e820_table->nr_entries; i++) {
|
||||
entry = &e820_table->entries[i];
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index 40ed44ead063..31aac8c787cf 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
|
|
@ -227,6 +307,123 @@ index 40ed44ead063..31aac8c787cf 100644
|
|||
|
||||
reserve_initrd();
|
||||
|
||||
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
|
||||
index 948656069cdd..f357dac92610 100644
|
||||
--- a/arch/x86/pci/acpi.c
|
||||
+++ b/arch/x86/pci/acpi.c
|
||||
@@ -1,4 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
+
|
||||
+#define pr_fmt(fmt) "PCI: " fmt
|
||||
+
|
||||
#include <linux/pci.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/init.h>
|
||||
@@ -21,6 +24,8 @@ struct pci_root_info {
|
||||
|
||||
static bool pci_use_crs = true;
|
||||
static bool pci_ignore_seg = false;
|
||||
+/* Consumed in arch/x86/kernel/resource.c */
|
||||
+bool pci_use_e820 = false;
|
||||
|
||||
static int __init set_use_crs(const struct dmi_system_id *id)
|
||||
{
|
||||
@@ -36,7 +41,7 @@ static int __init set_nouse_crs(const struct dmi_system_id *id)
|
||||
|
||||
static int __init set_ignore_seg(const struct dmi_system_id *id)
|
||||
{
|
||||
- printk(KERN_INFO "PCI: %s detected: ignoring ACPI _SEG\n", id->ident);
|
||||
+ pr_info("%s detected: ignoring ACPI _SEG\n", id->ident);
|
||||
pci_ignore_seg = true;
|
||||
return 0;
|
||||
}
|
||||
@@ -156,10 +161,35 @@ void __init pci_acpi_crs_quirks(void)
|
||||
else if (pci_probe & PCI_USE__CRS)
|
||||
pci_use_crs = true;
|
||||
|
||||
- printk(KERN_INFO "PCI: %s host bridge windows from ACPI; "
|
||||
- "if necessary, use \"pci=%s\" and report a bug\n",
|
||||
- pci_use_crs ? "Using" : "Ignoring",
|
||||
- pci_use_crs ? "nocrs" : "use_crs");
|
||||
+ pr_info("%s host bridge windows from ACPI; if necessary, use \"pci=%s\" and report a bug\n",
|
||||
+ pci_use_crs ? "Using" : "Ignoring",
|
||||
+ pci_use_crs ? "nocrs" : "use_crs");
|
||||
+
|
||||
+ /*
|
||||
+ * Some BIOS-es contain a bug where they add addresses which map to
|
||||
+ * system RAM in the PCI host bridge window returned by the ACPI _CRS
|
||||
+ * method, see commit 4dc2287c1805 ("x86: avoid E820 regions when
|
||||
+ * allocating address space"). To avoid this Linux by default excludes
|
||||
+ * E820 reservations when allocating addresses since 2010.
|
||||
+ * In 2020 some systems have shown-up with E820 reservations which cover
|
||||
+ * the entire _CRS returned PCI host bridge window, causing all attempts
|
||||
+ * to assign memory to PCI BARs to fail if Linux uses E820 reservations.
|
||||
+ *
|
||||
+ * Ideally Linux would fully stop using E820 reservations, but then
|
||||
+ * the old systems this was added for will regress.
|
||||
+ * Instead keep the old behavior for old systems, while ignoring the
|
||||
+ * E820 reservations for any systems from now on.
|
||||
+ */
|
||||
+ if (year >= 0 && year < 2018)
|
||||
+ pci_use_e820 = true;
|
||||
+
|
||||
+ if (pci_probe & PCI_NO_E820)
|
||||
+ pci_use_e820 = false;
|
||||
+ else if (pci_probe & PCI_USE_E820)
|
||||
+ pci_use_e820 = true;
|
||||
+
|
||||
+ pr_info("%s E820 reservations for host bridge windows\n",
|
||||
+ pci_use_e820 ? "Using" : "Ignoring");
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCI_MMCONFIG
|
||||
@@ -334,9 +364,8 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
|
||||
root->segment = domain = 0;
|
||||
|
||||
if (domain && !pci_domains_supported) {
|
||||
- printk(KERN_WARNING "pci_bus %04x:%02x: "
|
||||
- "ignored (multiple domains not supported)\n",
|
||||
- domain, busnum);
|
||||
+ pr_warn("pci_bus %04x:%02x: ignored (multiple domains not supported)\n",
|
||||
+ domain, busnum);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -404,7 +433,7 @@ int __init pci_acpi_init(void)
|
||||
if (acpi_noirq)
|
||||
return -ENODEV;
|
||||
|
||||
- printk(KERN_INFO "PCI: Using ACPI for IRQ routing\n");
|
||||
+ pr_info("Using ACPI for IRQ routing\n");
|
||||
acpi_irq_penalty_init();
|
||||
pcibios_enable_irq = acpi_pci_irq_enable;
|
||||
pcibios_disable_irq = acpi_pci_irq_disable;
|
||||
@@ -416,7 +445,7 @@ int __init pci_acpi_init(void)
|
||||
* also do it here in case there are still broken drivers that
|
||||
* don't use pci_enable_device().
|
||||
*/
|
||||
- printk(KERN_INFO "PCI: Routing PCI interrupts for all devices because \"pci=routeirq\" specified\n");
|
||||
+ pr_info("Routing PCI interrupts for all devices because \"pci=routeirq\" specified\n");
|
||||
for_each_pci_dev(dev)
|
||||
acpi_pci_irq_enable(dev);
|
||||
}
|
||||
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
|
||||
index 3507f456fcd0..091ec7e94fcb 100644
|
||||
--- a/arch/x86/pci/common.c
|
||||
+++ b/arch/x86/pci/common.c
|
||||
@@ -595,6 +595,12 @@ char *__init pcibios_setup(char *str)
|
||||
} else if (!strcmp(str, "nocrs")) {
|
||||
pci_probe |= PCI_ROOT_NO_CRS;
|
||||
return NULL;
|
||||
+ } else if (!strcmp(str, "use_e820")) {
|
||||
+ pci_probe |= PCI_USE_E820;
|
||||
+ return NULL;
|
||||
+ } else if (!strcmp(str, "no_e820")) {
|
||||
+ pci_probe |= PCI_NO_E820;
|
||||
+ return NULL;
|
||||
#ifdef CONFIG_PHYS_ADDR_T_64BIT
|
||||
} else if (!strcmp(str, "big_root_window")) {
|
||||
pci_probe |= PCI_BIG_ROOT_WINDOW;
|
||||
diff --git a/crypto/rng.c b/crypto/rng.c
|
||||
index fea082b25fe4..50a9d040bed1 100644
|
||||
--- a/crypto/rng.c
|
||||
|
|
@ -1484,6 +1681,91 @@ index 86658a81d284..5647f4756e97 100644
|
|||
/* 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/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
|
||||
index 1bf494b649bd..c8af2cd2216d 100644
|
||||
--- a/drivers/usb/host/xhci-tegra.c
|
||||
+++ b/drivers/usb/host/xhci-tegra.c
|
||||
@@ -1400,6 +1400,7 @@ static void tegra_xusb_deinit_usb_phy(struct tegra_xusb *tegra)
|
||||
|
||||
static int tegra_xusb_probe(struct platform_device *pdev)
|
||||
{
|
||||
+ struct of_phandle_args args;
|
||||
struct tegra_xusb *tegra;
|
||||
struct device_node *np;
|
||||
struct resource *regs;
|
||||
@@ -1454,10 +1455,17 @@ static int tegra_xusb_probe(struct platform_device *pdev)
|
||||
goto put_padctl;
|
||||
}
|
||||
|
||||
- tegra->padctl_irq = of_irq_get(np, 0);
|
||||
- if (tegra->padctl_irq <= 0) {
|
||||
- err = (tegra->padctl_irq == 0) ? -ENODEV : tegra->padctl_irq;
|
||||
- goto put_padctl;
|
||||
+ /* Older device-trees don't have padctrl interrupt */
|
||||
+ err = of_irq_parse_one(np, 0, &args);
|
||||
+ if (!err) {
|
||||
+ tegra->padctl_irq = of_irq_get(np, 0);
|
||||
+ if (tegra->padctl_irq <= 0) {
|
||||
+ err = (tegra->padctl_irq == 0) ? -ENODEV : tegra->padctl_irq;
|
||||
+ goto put_padctl;
|
||||
+ }
|
||||
+ } else {
|
||||
+ dev_dbg(&pdev->dev,
|
||||
+ "%pOF is missing an interrupt, disabling PM support\n", np);
|
||||
}
|
||||
|
||||
tegra->host_clk = devm_clk_get(&pdev->dev, "xusb_host");
|
||||
@@ -1696,11 +1704,15 @@ static int tegra_xusb_probe(struct platform_device *pdev)
|
||||
goto remove_usb3;
|
||||
}
|
||||
|
||||
- err = devm_request_threaded_irq(&pdev->dev, tegra->padctl_irq, NULL, tegra_xusb_padctl_irq,
|
||||
- IRQF_ONESHOT, dev_name(&pdev->dev), tegra);
|
||||
- if (err < 0) {
|
||||
- dev_err(&pdev->dev, "failed to request padctl IRQ: %d\n", err);
|
||||
- goto remove_usb3;
|
||||
+ if (tegra->padctl_irq) {
|
||||
+ err = devm_request_threaded_irq(&pdev->dev, tegra->padctl_irq,
|
||||
+ NULL, tegra_xusb_padctl_irq,
|
||||
+ IRQF_ONESHOT, dev_name(&pdev->dev),
|
||||
+ tegra);
|
||||
+ if (err < 0) {
|
||||
+ dev_err(&pdev->dev, "failed to request padctl IRQ: %d\n", err);
|
||||
+ goto remove_usb3;
|
||||
+ }
|
||||
}
|
||||
|
||||
err = tegra_xusb_enable_firmware_messages(tegra);
|
||||
@@ -1718,13 +1730,16 @@ static int tegra_xusb_probe(struct platform_device *pdev)
|
||||
/* Enable wake for both USB 2.0 and USB 3.0 roothubs */
|
||||
device_init_wakeup(&tegra->hcd->self.root_hub->dev, true);
|
||||
device_init_wakeup(&xhci->shared_hcd->self.root_hub->dev, true);
|
||||
- device_init_wakeup(tegra->dev, true);
|
||||
|
||||
pm_runtime_use_autosuspend(tegra->dev);
|
||||
pm_runtime_set_autosuspend_delay(tegra->dev, 2000);
|
||||
pm_runtime_mark_last_busy(tegra->dev);
|
||||
pm_runtime_set_active(tegra->dev);
|
||||
- pm_runtime_enable(tegra->dev);
|
||||
+
|
||||
+ if (tegra->padctl_irq) {
|
||||
+ device_init_wakeup(tegra->dev, true);
|
||||
+ pm_runtime_enable(tegra->dev);
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1772,7 +1787,9 @@ static int tegra_xusb_remove(struct platform_device *pdev)
|
||||
dma_free_coherent(&pdev->dev, tegra->fw.size, tegra->fw.virt,
|
||||
tegra->fw.phys);
|
||||
|
||||
- pm_runtime_disable(&pdev->dev);
|
||||
+ if (tegra->padctl_irq)
|
||||
+ pm_runtime_disable(&pdev->dev);
|
||||
+
|
||||
pm_runtime_put(&pdev->dev);
|
||||
|
||||
tegra_xusb_powergate_partitions(tegra);
|
||||
diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c
|
||||
index 309516e6a968..d39af03b456c 100644
|
||||
--- a/fs/btrfs/async-thread.c
|
||||
|
|
@ -1585,7 +1867,7 @@ index 6b5d36babfcc..fd4a5d66a9d0 100644
|
|||
enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var)
|
||||
{
|
||||
diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
|
||||
index 2adeea44c0d5..517013ece679 100644
|
||||
index 61590c1f2d33..4c10750865c2 100644
|
||||
--- a/include/linux/lsm_hook_defs.h
|
||||
+++ b/include/linux/lsm_hook_defs.h
|
||||
@@ -394,6 +394,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux)
|
||||
|
|
@ -1598,7 +1880,7 @@ index 2adeea44c0d5..517013ece679 100644
|
|||
#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 5c4c5c0602cb..753b53038690 100644
|
||||
index 59024618554e..ab9ca4d393da 100644
|
||||
--- a/include/linux/lsm_hooks.h
|
||||
+++ b/include/linux/lsm_hooks.h
|
||||
@@ -1545,6 +1545,12 @@
|
||||
|
|
@ -1652,7 +1934,7 @@ index ab7eea01ab42..fff7c5f737fc 100644
|
|||
|
||||
int rmi_register_transport_device(struct rmi_transport_dev *xport);
|
||||
diff --git a/include/linux/security.h b/include/linux/security.h
|
||||
index 5b7288521300..f966f591c91e 100644
|
||||
index 46a02ce34d00..37e991a10d70 100644
|
||||
--- a/include/linux/security.h
|
||||
+++ b/include/linux/security.h
|
||||
@@ -472,6 +472,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen);
|
||||
|
|
@ -1663,7 +1945,7 @@ index 5b7288521300..f966f591c91e 100644
|
|||
#else /* CONFIG_SECURITY */
|
||||
|
||||
static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data)
|
||||
@@ -1348,6 +1349,10 @@ static inline int security_locked_down(enum lockdown_reason what)
|
||||
@@ -1353,6 +1354,10 @@ static inline int security_locked_down(enum lockdown_reason what)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1782,7 +2064,7 @@ index 87cbdc64d272..18555cf18da7 100644
|
|||
|
||||
static int __init lockdown_lsm_init(void)
|
||||
diff --git a/security/security.c b/security/security.c
|
||||
index 9ffa9e9c5c55..36484cc9842d 100644
|
||||
index 67264cb08fb3..85a0227bfac1 100644
|
||||
--- a/security/security.c
|
||||
+++ b/security/security.c
|
||||
@@ -2599,6 +2599,12 @@ int security_locked_down(enum lockdown_reason what)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue