kernel: bump 5.10 to 5.10.111
Removed upstreamed:
pending-5.10/850-0003-PCI-aardvark-Fix-support-for-MSI-interrupts.patch
apm821xx/patches-5.10/150-ata-sata_dwc_460ex-Fix-crash-due-to-OOB-write.patch
All other patches automatically rebased.
Build system: x86_64
Build-tested: bcm2711/RPi4B, mt7622/RT3200
Run-tested: bcm2711/RPi4B, mt7622/RT3200
Signed-off-by: John Audia <graysky@archlinux.us>
(cherry picked from commit 0085dd6cb5)
This commit is contained in:
committed by
Hauke Mehrtens
parent
d86980eab2
commit
143cbb22e1
@@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -280,6 +280,12 @@ void sfp_parse_support(struct sfp_bus *b
|
||||
@@ -286,6 +286,12 @@ void sfp_parse_support(struct sfp_bus *b
|
||||
br_min <= 1300 && br_max >= 1200)
|
||||
phylink_set(modes, 1000baseX_Full);
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/* For active or passive cables, select the link modes
|
||||
* based on the bit rates and the cable compliance bytes.
|
||||
*/
|
||||
@@ -399,6 +405,9 @@ phy_interface_t sfp_select_interface(str
|
||||
@@ -405,6 +411,9 @@ phy_interface_t sfp_select_interface(str
|
||||
if (phylink_test(link_modes, 1000baseX_Full))
|
||||
return PHY_INTERFACE_MODE_1000BASEX;
|
||||
|
||||
|
||||
@@ -1398,7 +1398,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
|
||||
phy_mode = device_get_phy_mode(&pdev->dev);
|
||||
@@ -644,7 +644,7 @@ void stmmac_remove_config_dt(struct plat
|
||||
@@ -643,7 +643,7 @@ void stmmac_remove_config_dt(struct plat
|
||||
}
|
||||
#else
|
||||
struct plat_stmmacenet_data *
|
||||
@@ -1834,7 +1834,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/*
|
||||
--- a/drivers/staging/wfx/main.c
|
||||
+++ b/drivers/staging/wfx/main.c
|
||||
@@ -334,7 +334,6 @@ int wfx_probe(struct wfx_dev *wdev)
|
||||
@@ -339,7 +339,6 @@ int wfx_probe(struct wfx_dev *wdev)
|
||||
{
|
||||
int i;
|
||||
int err;
|
||||
@@ -1842,7 +1842,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
struct gpio_desc *gpio_saved;
|
||||
|
||||
// During first part of boot, gpio_wakeup cannot yet been used. So
|
||||
@@ -423,9 +422,9 @@ int wfx_probe(struct wfx_dev *wdev)
|
||||
@@ -428,9 +427,9 @@ int wfx_probe(struct wfx_dev *wdev)
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(wdev->addresses); i++) {
|
||||
eth_zero_addr(wdev->addresses[i].addr);
|
||||
|
||||
@@ -48,7 +48,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
/* Enable summary interrupt for GIC SPI source */
|
||||
reg = PCIE_IRQ_ALL_MASK & (~PCIE_IRQ_ENABLE_INTS_MASK);
|
||||
@@ -1401,7 +1403,7 @@ static void advk_pcie_handle_msi(struct
|
||||
@@ -1397,7 +1399,7 @@ static void advk_pcie_handle_msi(struct
|
||||
|
||||
msi_mask = advk_readl(pcie, PCIE_MSI_MASK_REG);
|
||||
msi_val = advk_readl(pcie, PCIE_MSI_STATUS_REG);
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1700,11 +1700,13 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1696,11 +1696,13 @@ static int advk_pcie_remove(struct platf
|
||||
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
|
||||
int i;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1698,6 +1698,7 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1694,6 +1694,7 @@ static int advk_pcie_remove(struct platf
|
||||
{
|
||||
struct advk_pcie *pcie = platform_get_drvdata(pdev);
|
||||
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
int i;
|
||||
|
||||
/* Remove PCI bus with all devices */
|
||||
@@ -1706,6 +1707,11 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1702,6 +1703,11 @@ static int advk_pcie_remove(struct platf
|
||||
pci_remove_root_bus(bridge->bus);
|
||||
pci_unlock_rescan_remove();
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1712,6 +1712,27 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1708,6 +1708,27 @@ static int advk_pcie_remove(struct platf
|
||||
val &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
|
||||
advk_writel(pcie, val, PCIE_CORE_CMD_STATUS_REG);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1737,6 +1737,9 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1733,6 +1733,9 @@ static int advk_pcie_remove(struct platf
|
||||
advk_pcie_remove_msi_irq_domain(pcie);
|
||||
advk_pcie_remove_irq_domain(pcie);
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1740,6 +1740,10 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1736,6 +1736,10 @@ static int advk_pcie_remove(struct platf
|
||||
/* Free config space for emulated root bridge */
|
||||
pci_bridge_emul_cleanup(&pcie->bridge);
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1744,6 +1744,11 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1740,6 +1740,11 @@ static int advk_pcie_remove(struct platf
|
||||
if (pcie->reset_gpio)
|
||||
gpiod_set_value_cansleep(pcie->reset_gpio, 1);
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1753,6 +1753,9 @@ static int advk_pcie_remove(struct platf
|
||||
@@ -1749,6 +1749,9 @@ static int advk_pcie_remove(struct platf
|
||||
for (i = 0; i < OB_WIN_COUNT; i++)
|
||||
advk_pcie_disable_ob_win(pcie, i);
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
struct rtnl_link {
|
||||
rtnl_doit_func doit;
|
||||
@@ -4684,7 +4684,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
||||
@@ -4695,7 +4695,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
||||
brport_nla_put_flag(skb, flags, mask,
|
||||
IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
|
||||
brport_nla_put_flag(skb, flags, mask,
|
||||
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1395,7 +1395,7 @@ static void advk_pcie_remove_irq_domain(
|
||||
@@ -1391,7 +1391,7 @@ static void advk_pcie_remove_irq_domain(
|
||||
static void advk_pcie_handle_msi(struct advk_pcie *pcie)
|
||||
{
|
||||
u32 msi_val, msi_mask, msi_status, msi_idx;
|
||||
@@ -36,7 +36,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
|
||||
|
||||
msi_mask = advk_readl(pcie, PCIE_MSI_MASK_REG);
|
||||
msi_val = advk_readl(pcie, PCIE_MSI_STATUS_REG);
|
||||
@@ -1405,13 +1405,12 @@ static void advk_pcie_handle_msi(struct
|
||||
@@ -1401,13 +1401,12 @@ static void advk_pcie_handle_msi(struct
|
||||
if (!(BIT(msi_idx) & msi_status))
|
||||
continue;
|
||||
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
From bb03b126ea6c9e57177b537dd022246fa5dbef16 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
|
||||
Date: Fri, 12 Feb 2021 16:24:07 +0100
|
||||
Subject: [PATCH] PCI: aardvark: Fix support for MSI interrupts
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Aardvark hardware supports Multi-MSI and MSI_FLAG_MULTI_PCI_MSI is already
|
||||
set for the MSI chip. But when allocating MSI interrupt numbers for
|
||||
Multi-MSI, the numbers need to be properly aligned, otherwise endpoint
|
||||
devices send MSI interrupt with incorrect numbers.
|
||||
|
||||
Fix this issue by using function bitmap_find_free_region() instead of
|
||||
bitmap_find_next_zero_area().
|
||||
|
||||
To ensure that aligned MSI interrupt numbers are used by endpoint devices,
|
||||
we cannot use Linux virtual irq numbers (as they are random and not
|
||||
properly aligned). Instead we need to use the aligned hwirq numbers.
|
||||
|
||||
This change fixes receiving MSI interrupts on Armada 3720 boards and
|
||||
allows using NVMe disks which use Multi-MSI feature with 3 interrupts.
|
||||
|
||||
Without this NVMe disks freeze booting as linux nvme-core.c is waiting
|
||||
60s for an interrupt.
|
||||
|
||||
Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
Signed-off-by: Marek Behún <kabel@kernel.org>
|
||||
---
|
||||
drivers/pci/controller/pci-aardvark.c | 16 ++++++----------
|
||||
1 file changed, 6 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1191,7 +1191,7 @@ static void advk_msi_irq_compose_msi_msg
|
||||
|
||||
msg->address_lo = lower_32_bits(msi_msg);
|
||||
msg->address_hi = upper_32_bits(msi_msg);
|
||||
- msg->data = data->irq;
|
||||
+ msg->data = data->hwirq;
|
||||
}
|
||||
|
||||
static int advk_msi_set_affinity(struct irq_data *irq_data,
|
||||
@@ -1208,15 +1208,11 @@ static int advk_msi_irq_domain_alloc(str
|
||||
int hwirq, i;
|
||||
|
||||
mutex_lock(&pcie->msi_used_lock);
|
||||
- hwirq = bitmap_find_next_zero_area(pcie->msi_used, MSI_IRQ_NUM,
|
||||
- 0, nr_irqs, 0);
|
||||
- if (hwirq >= MSI_IRQ_NUM) {
|
||||
- mutex_unlock(&pcie->msi_used_lock);
|
||||
- return -ENOSPC;
|
||||
- }
|
||||
-
|
||||
- bitmap_set(pcie->msi_used, hwirq, nr_irqs);
|
||||
+ hwirq = bitmap_find_free_region(pcie->msi_used, MSI_IRQ_NUM,
|
||||
+ order_base_2(nr_irqs));
|
||||
mutex_unlock(&pcie->msi_used_lock);
|
||||
+ if (hwirq < 0)
|
||||
+ return -ENOSPC;
|
||||
|
||||
for (i = 0; i < nr_irqs; i++)
|
||||
irq_domain_set_info(domain, virq + i, hwirq + i,
|
||||
@@ -1234,7 +1230,7 @@ static void advk_msi_irq_domain_free(str
|
||||
struct advk_pcie *pcie = domain->host_data;
|
||||
|
||||
mutex_lock(&pcie->msi_used_lock);
|
||||
- bitmap_clear(pcie->msi_used, d->hwirq, nr_irqs);
|
||||
+ bitmap_release_region(pcie->msi_used, d->hwirq, order_base_2(nr_irqs));
|
||||
mutex_unlock(&pcie->msi_used_lock);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user