-LINUX_VERSION-5.10 = .109
-LINUX_KERNEL_HASH-5.10.109 = 18fb22ecb249669ea775474aee614dcb0697cab299068074fd9f0bafa32113dc
+LINUX_VERSION-5.10 = .110
+LINUX_KERNEL_HASH-5.10.110 = dbef6a06325433481551cb8cfca9254d908d0ae950bc809f3da8ade00c485693
xhci->quirks |= XHCI_RESET_ON_RESUME;
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -427,10 +427,14 @@ static int xhci_try_enable_msi(struct us
+@@ -425,10 +425,14 @@ static int xhci_try_enable_msi(struct us
free_irq(hcd->irq, hcd);
hcd->irq = 0;
hcd->msi_enabled = 1;
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1892,6 +1892,7 @@ struct xhci_hcd {
+@@ -1895,6 +1895,7 @@ struct xhci_hcd {
struct xhci_hub usb2_rhub;
struct xhci_hub usb3_rhub;
/* support xHCI 1.0 spec USB2 hardware LPM */
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
-@@ -1003,7 +1003,7 @@ config SND_SOC_PCM3168A_SPI
+@@ -1008,7 +1008,7 @@ config SND_SOC_PCM3168A_SPI
select REGMAP_SPI
config SND_SOC_PCM5102A
static u64 mchp_pit64b_clksrc_read(struct clocksource *cs)
{
return mchp_pit64b_cnt_read(mchp_pit64b_cs_base);
-@@ -128,7 +172,7 @@ static u64 mchp_pit64b_sched_read_clk(vo
+@@ -128,7 +172,7 @@ static u64 notrace mchp_pit64b_sched_rea
static int mchp_pit64b_clkevt_shutdown(struct clock_event_device *cedev)
{
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
-@@ -8596,8 +8596,6 @@ int alloc_contig_range(unsigned long sta
+@@ -8603,8 +8603,6 @@ int alloc_contig_range(unsigned long sta
/* Make sure the range is really isolated. */
if (test_pages_isolated(outer_start, end, 0)) {
depends on I2C
select SND_SOC_AD193X
-@@ -804,7 +808,7 @@ config SND_SOC_HDAC_HDA
+@@ -809,7 +813,7 @@ config SND_SOC_HDAC_HDA
select SND_HDA
config SND_SOC_ICS43432
config SND_SOC_INNO_RK3036
tristate "Inno codec driver for RK3036 SoC"
-@@ -825,6 +829,13 @@ config SND_SOC_LOCHNAGAR_SC
+@@ -830,6 +834,13 @@ config SND_SOC_LOCHNAGAR_SC
This driver support the sound card functionality of the Cirrus
Logic Lochnagar audio development board.
config SND_SOC_MADERA
tristate
default y if SND_SOC_CS47L15=y
-@@ -1125,6 +1136,10 @@ config SND_SOC_RT5616
+@@ -1130,6 +1141,10 @@ config SND_SOC_RT5616
tristate "Realtek RT5616 CODEC"
depends on I2C
config SND_SOC_RT5631
tristate "Realtek ALC5631/RT5631 CODEC"
depends on I2C
-@@ -1346,6 +1361,9 @@ config SND_SOC_TFA9879
+@@ -1351,6 +1366,9 @@ config SND_SOC_TFA9879
tristate "NXP Semiconductors TFA9879 amplifier"
depends on I2C
config SND_SOC_TLV320AIC23
tristate
-@@ -1784,4 +1802,8 @@ config SND_SOC_TPA6130A2
+@@ -1789,4 +1807,8 @@ config SND_SOC_TPA6130A2
tristate "Texas Instruments TPA6130A2 headphone amplifier"
depends on I2C
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -1474,6 +1474,103 @@ command_cleanup:
+@@ -1472,6 +1472,103 @@ command_cleanup:
}
/*
* non-error returns are a promise to giveback() the urb later
* we drop ownership so next owner (or urb unlink) can get it
*/
-@@ -5380,6 +5477,7 @@ static const struct hc_driver xhci_hc_dr
+@@ -5378,6 +5475,7 @@ static const struct hc_driver xhci_hc_dr
.endpoint_reset = xhci_endpoint_reset,
.check_bandwidth = xhci_check_bandwidth,
.reset_bandwidth = xhci_reset_bandwidth,
val);
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1653,8 +1653,8 @@ struct urb_priv {
+@@ -1656,8 +1656,8 @@ struct urb_priv {
* Each segment table entry is 4*32bits long. 1K seems like an ok size:
* (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
* meaning 64 ring segments.
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
-@@ -313,6 +313,9 @@ static void bcm54xx_adjust_rxrefclk(stru
+@@ -314,6 +314,9 @@ static void bcm54xx_adjust_rxrefclk(stru
static int bcm54xx_config_init(struct phy_device *phydev)
{
int reg, err, val;
reg = phy_read(phydev, MII_BCM54XX_ECR);
if (reg < 0)
-@@ -368,6 +371,8 @@ static int bcm54xx_config_init(struct ph
+@@ -369,6 +372,8 @@ static int bcm54xx_config_init(struct ph
bcm54xx_phydsp_config(phydev);
/* Encode link speed into LED1 and LED3 pair (green/amber).
* Also flash these two LEDs on activity. This means configuring
* them for MULTICOLOR and encoding link/activity into them.
-@@ -377,8 +382,8 @@ static int bcm54xx_config_init(struct ph
+@@ -378,8 +383,8 @@ static int bcm54xx_config_init(struct ph
bcm_phy_write_shadow(phydev, BCM5482_SHD_LEDS1, val);
val = BCM_LED_MULTICOLOR_IN_PHASE |
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
-@@ -314,7 +314,7 @@ static int bcm54xx_config_init(struct ph
+@@ -315,7 +315,7 @@ static int bcm54xx_config_init(struct ph
{
int reg, err, val;
u32 led_modes[] = {BCM_LED_MULTICOLOR_LINK_ACT,
struct device_node *np = phydev->mdio.dev.of_node;
reg = phy_read(phydev, MII_BCM54XX_ECR);
-@@ -373,10 +373,6 @@ static int bcm54xx_config_init(struct ph
+@@ -374,10 +374,6 @@ static int bcm54xx_config_init(struct ph
of_property_read_u32_array(np, "led-modes", led_modes, 2);
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1885,6 +1885,7 @@ struct xhci_hcd {
+@@ -1888,6 +1888,7 @@ struct xhci_hcd {
#define XHCI_SG_TRB_CACHE_SIZE_QUIRK BIT_ULL(39)
#define XHCI_NO_SOFT_RETRY BIT_ULL(40)
#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)
--- a/arch/arm/boot/dts/bcm2711.dtsi
+++ b/arch/arm/boot/dts/bcm2711.dtsi
-@@ -510,8 +510,8 @@
+@@ -560,8 +560,8 @@
msi-controller;
msi-parent = <&pcie0>;
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
-@@ -252,7 +252,8 @@ static void bcm54xx_adjust_rxrefclk(stru
+@@ -253,7 +253,8 @@ static void bcm54xx_adjust_rxrefclk(stru
BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610 &&
BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610M &&
BRCM_PHY_MODEL(phydev) != PHY_ID_BCM54810 &&
return;
val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3);
-@@ -763,13 +764,21 @@ static struct phy_driver broadcom_driver
+@@ -784,13 +785,21 @@ static struct phy_driver broadcom_driver
.config_intr = bcm_phy_config_intr,
}, {
.phy_id = PHY_ID_BCM54210E,
.phy_id = PHY_ID_BCM5461,
.phy_id_mask = 0xfffffff0,
.name = "Broadcom BCM5461",
-@@ -925,7 +934,8 @@ module_phy_driver(broadcom_drivers);
+@@ -946,7 +955,8 @@ module_phy_driver(broadcom_drivers);
static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
{ PHY_ID_BCM5411, 0xfffffff0 },
{ PHY_ID_BCM5421, 0xfffffff0 },
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
-@@ -82,6 +82,11 @@ static int bcm54210e_config_init(struct
+@@ -83,6 +83,11 @@ static int bcm54210e_config_init(struct
return 0;
}
static int bcm54612e_config_init(struct phy_device *phydev)
{
int reg;
-@@ -357,6 +362,9 @@ static int bcm54xx_config_init(struct ph
+@@ -358,6 +363,9 @@ static int bcm54xx_config_init(struct ph
case PHY_ID_BCM54616S:
err = bcm54616s_config_init(phydev);
break;
--- a/arch/arm/boot/dts/bcm2711.dtsi
+++ b/arch/arm/boot/dts/bcm2711.dtsi
-@@ -561,6 +561,7 @@
+@@ -611,6 +611,7 @@
&dsi1 {
interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-@@ -6528,9 +6528,7 @@ void amdgpu_dm_connector_init_helper(str
+@@ -6531,9 +6531,7 @@ void amdgpu_dm_connector_init_helper(str
if (connector_type == DRM_MODE_CONNECTOR_HDMIA ||
connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
connector_type == DRM_MODE_CONNECTOR_eDP) {
* clk_get_parent - return the parent of a clk
* @clk: the clk whose parent gets returned
*
-@@ -3838,6 +3958,7 @@ __clk_register(struct device *dev, struc
+@@ -3851,6 +3971,7 @@ __clk_register(struct device *dev, struc
goto fail_parents;
INIT_HLIST_HEAD(&core->clks);
status = "disabled";
};
-@@ -1115,7 +1115,3 @@
+@@ -1165,7 +1165,3 @@
&usb {
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
};
/*
* Reset a halted HC.
*
-@@ -608,10 +651,20 @@ static int xhci_init(struct usb_hcd *hcd
+@@ -606,10 +649,20 @@ static int xhci_init(struct usb_hcd *hcd
static int xhci_run_finished(struct xhci_hcd *xhci)
{
xhci->shared_hcd->state = HC_STATE_RUNNING;
xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
-@@ -621,6 +674,10 @@ static int xhci_run_finished(struct xhci
+@@ -619,6 +672,10 @@ static int xhci_run_finished(struct xhci
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
"Finished xhci_run for USB3 roothub");
return 0;
/*
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1885,6 +1885,7 @@ struct xhci_hcd {
+@@ -1888,6 +1888,7 @@ struct xhci_hcd {
#define XHCI_SG_TRB_CACHE_SIZE_QUIRK BIT_ULL(39)
#define XHCI_NO_SOFT_RETRY BIT_ULL(40)
#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)
+++ /dev/null
-From e852442da56f43795cb6255d90b9fd0c84b209bb Mon Sep 17 00:00:00 2001
-From: Yaliang Wang <Yaliang.Wang@windriver.com>
-Date: Thu, 10 Mar 2022 19:31:16 +0800
-Subject: [PATCH] MIPS: pgalloc: fix memory leak caused by pgd_free()
-
-pgd page is freed by generic implementation pgd_free() since commit
-f9cb654cb550 ("asm-generic: pgalloc: provide generic pgd_free()"),
-however, there are scenarios that the system uses more than one page as
-the pgd table, in such cases the generic implementation pgd_free() won't
-be applicable anymore. For example, when PAGE_SIZE_4KB is enabled and
-MIPS_VA_BITS_48 is not enabled in a 64bit system, the macro "PGD_ORDER"
-will be set as "1", which will cause allocating two pages as the pgd
-table. Well, at the same time, the generic implementation pgd_free()
-just free one pgd page, which will result in the memory leak.
-
-The memory leak can be easily detected by executing shell command:
-"while true; do ls > /dev/null; grep MemFree /proc/meminfo; done"
-
-Fixes: f9cb654cb550 ("asm-generic: pgalloc: provide generic pgd_free()")
-Signed-off-by: Yaliang Wang <Yaliang.Wang@windriver.com>
-Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
-(cherry picked from commit 2bc5bab9a763d520937e4f3fe8df51c6a1eceb97)
----
- arch/mips/include/asm/pgalloc.h | 6 ++++++
- 1 file changed, 6 insertions(+)
-
---- a/arch/mips/include/asm/pgalloc.h
-+++ b/arch/mips/include/asm/pgalloc.h
-@@ -15,6 +15,7 @@
-
- #define __HAVE_ARCH_PMD_ALLOC_ONE
- #define __HAVE_ARCH_PUD_ALLOC_ONE
-+#define __HAVE_ARCH_PGD_FREE
- #include <asm-generic/pgalloc.h>
-
- static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
-@@ -49,6 +50,11 @@ static inline void pud_populate(struct m
- extern void pgd_init(unsigned long page);
- extern pgd_t *pgd_alloc(struct mm_struct *mm);
-
-+static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
-+{
-+ free_pages((unsigned long)pgd, PGD_ORDER);
-+}
-+
- #define __pte_free_tlb(tlb,pte,address) \
- do { \
- pgtable_pte_page_dtor(pte); \
enum udp_conntrack {
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
-@@ -1438,6 +1438,11 @@ void nf_conntrack_tcp_init_net(struct ne
+@@ -1447,6 +1447,11 @@ void nf_conntrack_tcp_init_net(struct ne
tn->tcp_loose = nf_ct_tcp_loose;
tn->tcp_be_liberal = nf_ct_tcp_be_liberal;
tn->tcp_max_retrans = nf_ct_tcp_max_retrans;
}
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
-@@ -1831,8 +1831,8 @@ static int axienet_probe(struct platform
+@@ -1843,8 +1843,8 @@ static int axienet_probe(struct platform
struct device_node *np;
struct axienet_local *lp;
struct net_device *ndev;
int addr_width = 32;
u32 value;
-@@ -2032,13 +2032,14 @@ static int axienet_probe(struct platform
+@@ -2044,13 +2044,14 @@ static int axienet_probe(struct platform
dev_info(&pdev->dev, "Ethernet core IRQ not defined\n");
/* Retrieve the MAC address */
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -881,8 +881,13 @@ advk_pci_bridge_emul_pcie_conf_read(stru
+@@ -883,8 +883,13 @@ advk_pci_bridge_emul_pcie_conf_read(stru
case PCI_EXP_DEVCAP:
case PCI_EXP_DEVCTL:
default:
return PCI_BRIDGE_EMUL_NOT_HANDLED;
}
-@@ -896,10 +901,6 @@ advk_pci_bridge_emul_pcie_conf_write(str
+@@ -898,10 +903,6 @@ advk_pci_bridge_emul_pcie_conf_write(str
struct advk_pcie *pcie = bridge->data;
switch (reg) {
case PCI_EXP_LNKCTL:
advk_writel(pcie, new, PCIE_CORE_PCIEXP_CAP + reg);
if (new & PCI_EXP_LNKCTL_RL)
-@@ -921,6 +922,12 @@ advk_pci_bridge_emul_pcie_conf_write(str
+@@ -923,6 +924,12 @@ advk_pci_bridge_emul_pcie_conf_write(str
advk_writel(pcie, new, PCIE_ISR0_REG);
break;
/* Enable summary interrupt for GIC SPI source */
reg = PCIE_IRQ_ALL_MASK & (~PCIE_IRQ_ENABLE_INTS_MASK);
-@@ -1399,7 +1401,7 @@ static void advk_pcie_handle_msi(struct
+@@ -1401,7 +1403,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);
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1698,11 +1698,13 @@ static int advk_pcie_remove(struct platf
+@@ -1700,11 +1700,13 @@ static int advk_pcie_remove(struct platf
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
int i;
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1696,6 +1696,7 @@ static int advk_pcie_remove(struct platf
+@@ -1698,6 +1698,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);
int i;
/* Remove PCI bus with all devices */
-@@ -1704,6 +1705,11 @@ static int advk_pcie_remove(struct platf
+@@ -1706,6 +1707,11 @@ static int advk_pcie_remove(struct platf
pci_remove_root_bus(bridge->bus);
pci_unlock_rescan_remove();
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1710,6 +1710,27 @@ static int advk_pcie_remove(struct platf
+@@ -1712,6 +1712,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);
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1735,6 +1735,9 @@ static int advk_pcie_remove(struct platf
+@@ -1737,6 +1737,9 @@ static int advk_pcie_remove(struct platf
advk_pcie_remove_msi_irq_domain(pcie);
advk_pcie_remove_irq_domain(pcie);
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1738,6 +1738,10 @@ static int advk_pcie_remove(struct platf
+@@ -1740,6 +1740,10 @@ static int advk_pcie_remove(struct platf
/* Free config space for emulated root bridge */
pci_bridge_emul_cleanup(&pcie->bridge);
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1742,6 +1742,11 @@ static int advk_pcie_remove(struct platf
+@@ -1744,6 +1744,11 @@ static int advk_pcie_remove(struct platf
if (pcie->reset_gpio)
gpiod_set_value_cansleep(pcie->reset_gpio, 1);
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1751,6 +1751,9 @@ static int advk_pcie_remove(struct platf
+@@ -1753,6 +1753,9 @@ static int advk_pcie_remove(struct platf
for (i = 0; i < OB_WIN_COUNT; i++)
advk_pcie_disable_ob_win(pcie, i);
+MODULE_LICENSE("GPL");
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -3065,6 +3065,7 @@ int wake_up_state(struct task_struct *p,
+@@ -3066,6 +3066,7 @@ int wake_up_state(struct task_struct *p,
{
return try_to_wake_up(p, state, 0);
}
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
-@@ -1192,6 +1192,73 @@ static struct mtd_info * __init open_mtd
+@@ -1185,6 +1185,73 @@ static struct mtd_info * __init open_mtd
return mtd;
}
static int __init ubi_init(void)
{
int err, i, k;
-@@ -1275,6 +1342,12 @@ static int __init ubi_init(void)
+@@ -1268,6 +1335,12 @@ static int __init ubi_init(void)
}
}
if (ret < 0)
goto out;
-@@ -565,6 +571,17 @@ full_scan:
+@@ -567,6 +573,17 @@ full_scan:
return err;
}
/*
* Get the required data from the packet.
*/
-@@ -1130,7 +1136,7 @@ int nf_conntrack_tcp_packet(struct nf_co
+@@ -1139,7 +1145,7 @@ int nf_conntrack_tcp_packet(struct nf_co
IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED &&
timeouts[new_state] > timeouts[TCP_CONNTRACK_UNACK])
timeout = timeouts[TCP_CONNTRACK_UNACK];
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -5436,6 +5436,7 @@ static int mv88e6xxx_register_switch(str
+@@ -5437,6 +5437,7 @@ static int mv88e6xxx_register_switch(str
ds->ops = &mv88e6xxx_switch_ops;
ds->ageing_time_min = chip->info->age_time_coeff;
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
/*
* The Mellanox Tavor device gives false positive parity errors. Mark this
* device with a broken_parity_status to allow PCI scanning code to "skip"
-@@ -3323,6 +3324,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
+@@ -3335,6 +3336,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
/*
* Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.
* To work around this, query the size it should be configured to by the
-@@ -3348,6 +3351,8 @@ static void quirk_intel_ntb(struct pci_d
+@@ -3360,6 +3363,8 @@ static void quirk_intel_ntb(struct pci_d
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb);
/*
* Some BIOS implementations leave the Intel GPU interrupts enabled, even
* though no one is handling them (e.g., if the i915 driver is never
-@@ -3386,6 +3391,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
+@@ -3398,6 +3403,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq);
/* PIO registers base address and register offsets */
#define PIO_BASE_ADDR 0x4000
#define PIO_CTRL (PIO_BASE_ADDR + 0x0)
-@@ -966,7 +962,7 @@ static int advk_sw_pci_bridge_init(struc
+@@ -968,7 +964,7 @@ static int advk_sw_pci_bridge_init(struc
bridge->conf.pref_mem_limit = cpu_to_le16(PCI_PREF_RANGE_TYPE_64);
/* Support interrupt A for MSI feature */
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1393,7 +1393,7 @@ static void advk_pcie_remove_irq_domain(
+@@ -1395,7 +1395,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;
msi_mask = advk_readl(pcie, PCIE_MSI_MASK_REG);
msi_val = advk_readl(pcie, PCIE_MSI_STATUS_REG);
-@@ -1403,13 +1403,12 @@ static void advk_pcie_handle_msi(struct
+@@ -1405,13 +1405,12 @@ static void advk_pcie_handle_msi(struct
if (!(BIT(msi_idx) & msi_status))
continue;
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1189,7 +1189,7 @@ static void advk_msi_irq_compose_msi_msg
+@@ -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);
}
static int advk_msi_set_affinity(struct irq_data *irq_data,
-@@ -1206,15 +1206,11 @@ static int advk_msi_irq_domain_alloc(str
+@@ -1208,15 +1208,11 @@ static int advk_msi_irq_domain_alloc(str
int hwirq, i;
mutex_lock(&pcie->msi_used_lock);
for (i = 0; i < nr_irqs; i++)
irq_domain_set_info(domain, virq + i, hwirq + i,
-@@ -1232,7 +1228,7 @@ static void advk_msi_irq_domain_free(str
+@@ -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);
struct irq_domain *irq_domain;
struct irq_chip irq_chip;
raw_spinlock_t irq_lock;
-@@ -1442,21 +1443,26 @@ static void advk_pcie_handle_int(struct
+@@ -1444,21 +1445,26 @@ static void advk_pcie_handle_int(struct
}
}
}
static void __maybe_unused advk_pcie_disable_phy(struct advk_pcie *pcie)
-@@ -1523,7 +1529,7 @@ static int advk_pcie_probe(struct platfo
+@@ -1525,7 +1531,7 @@ static int advk_pcie_probe(struct platfo
struct advk_pcie *pcie;
struct pci_host_bridge *bridge;
struct resource_entry *entry;
bridge = devm_pci_alloc_host_bridge(dev, sizeof(struct advk_pcie));
if (!bridge)
-@@ -1611,17 +1617,9 @@ static int advk_pcie_probe(struct platfo
+@@ -1613,17 +1619,9 @@ static int advk_pcie_probe(struct platfo
if (IS_ERR(pcie->base))
return PTR_ERR(pcie->base);
pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node,
"reset-gpios", 0,
-@@ -1670,11 +1668,14 @@ static int advk_pcie_probe(struct platfo
+@@ -1672,11 +1670,14 @@ static int advk_pcie_probe(struct platfo
return ret;
}
advk_pcie_remove_msi_irq_domain(pcie);
advk_pcie_remove_irq_domain(pcie);
return ret;
-@@ -1722,6 +1723,9 @@ static int advk_pcie_remove(struct platf
+@@ -1724,6 +1725,9 @@ static int advk_pcie_remove(struct platf
advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_REG);
advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG);
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1439,7 +1439,9 @@ static void advk_pcie_handle_int(struct
+@@ -1441,7 +1441,9 @@ static void advk_pcie_handle_int(struct
PCIE_ISR1_REG);
virq = irq_find_mapping(pcie->irq_domain, i);
struct msi_domain_info msi_domain_info;
DECLARE_BITMAP(msi_used, MSI_IRQ_NUM);
struct mutex msi_used_lock;
-@@ -1199,6 +1197,12 @@ static int advk_msi_set_affinity(struct
+@@ -1201,6 +1199,12 @@ static int advk_msi_set_affinity(struct
return -EINVAL;
}
static int advk_msi_irq_domain_alloc(struct irq_domain *domain,
unsigned int virq,
unsigned int nr_irqs, void *args)
-@@ -1215,7 +1219,7 @@ static int advk_msi_irq_domain_alloc(str
+@@ -1217,7 +1221,7 @@ static int advk_msi_irq_domain_alloc(str
for (i = 0; i < nr_irqs; i++)
irq_domain_set_info(domain, virq + i, hwirq + i,
domain->host_data, handle_simple_irq,
NULL, NULL);
-@@ -1285,29 +1289,23 @@ static const struct irq_domain_ops advk_
+@@ -1287,29 +1291,23 @@ static const struct irq_domain_ops advk_
.xlate = irq_domain_xlate_onecell,
};
DECLARE_BITMAP(msi_used, MSI_IRQ_NUM);
struct mutex msi_used_lock;
u16 msi_msg;
-@@ -1293,20 +1292,20 @@ static struct irq_chip advk_msi_irq_chip
+@@ -1295,20 +1294,20 @@ static struct irq_chip advk_msi_irq_chip
.name = "advk-MSI",
};
msi_msg_phys = virt_to_phys(&pcie->msi_msg);
advk_writel(pcie, lower_32_bits(msi_msg_phys),
-@@ -1322,7 +1321,8 @@ static int advk_pcie_init_msi_irq_domain
+@@ -1324,7 +1323,8 @@ static int advk_pcie_init_msi_irq_domain
pcie->msi_domain =
pci_msi_create_irq_domain(of_node_to_fwnode(node),
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1301,7 +1301,6 @@ static struct msi_domain_info advk_msi_d
+@@ -1303,7 +1303,6 @@ static struct msi_domain_info advk_msi_d
static int advk_pcie_init_msi_irq_domain(struct advk_pcie *pcie)
{
struct device *dev = &pcie->pdev->dev;
phys_addr_t msi_msg_phys;
mutex_init(&pcie->msi_used_lock);
-@@ -1320,7 +1319,7 @@ static int advk_pcie_init_msi_irq_domain
+@@ -1322,7 +1321,7 @@ static int advk_pcie_init_msi_irq_domain
return -ENOMEM;
pcie->msi_domain =
/* Unmask summary MSI interrupt */
reg = advk_readl(pcie, PCIE_ISR0_MASK_REG);
-@@ -1198,10 +1197,52 @@ static int advk_msi_set_affinity(struct
+@@ -1200,10 +1199,52 @@ static int advk_msi_set_affinity(struct
return -EINVAL;
}
};
static int advk_msi_irq_domain_alloc(struct irq_domain *domain,
-@@ -1291,7 +1332,9 @@ static const struct irq_domain_ops advk_
+@@ -1293,7 +1334,9 @@ static const struct irq_domain_ops advk_
};
static struct irq_chip advk_msi_irq_chip = {
};
static struct msi_domain_info advk_msi_domain_info = {
-@@ -1305,6 +1348,7 @@ static int advk_pcie_init_msi_irq_domain
+@@ -1307,6 +1350,7 @@ static int advk_pcie_init_msi_irq_domain
struct device *dev = &pcie->pdev->dev;
phys_addr_t msi_msg_phys;
/* Enable MSI */
reg = advk_readl(pcie, PCIE_CORE_CTRL2_REG);
reg |= PCIE_CORE_CTRL2_MSI_ENABLE;
-@@ -1184,10 +1189,10 @@ static void advk_msi_irq_compose_msi_msg
+@@ -1186,10 +1191,10 @@ static void advk_msi_irq_compose_msi_msg
struct msi_msg *msg)
{
struct advk_pcie *pcie = irq_data_get_irq_chip_data(data);
msg->data = data->hwirq;
}
-@@ -1346,18 +1351,10 @@ static struct msi_domain_info advk_msi_d
+@@ -1348,18 +1353,10 @@ static struct msi_domain_info advk_msi_d
static int advk_pcie_init_msi_irq_domain(struct advk_pcie *pcie)
{
struct device *dev = &pcie->pdev->dev;
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -1344,7 +1344,7 @@ static struct irq_chip advk_msi_irq_chip
+@@ -1346,7 +1346,7 @@ static struct irq_chip advk_msi_irq_chip
static struct msi_domain_info advk_msi_domain_info = {
.flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
if (mask & (PCI_BRIDGE_CTL_BUS_RESET << 16)) {
u32 val = advk_readl(pcie, PCIE_CORE_CTRL1_REG);
if (new & (PCI_BRIDGE_CTL_BUS_RESET << 16))
-@@ -1466,6 +1487,19 @@ static void advk_pcie_handle_int(struct
+@@ -1468,6 +1489,19 @@ static void advk_pcie_handle_int(struct
isr1_mask = advk_readl(pcie, PCIE_ISR1_MASK_REG);
isr1_status = isr1_val & ((~isr1_mask) & PCIE_ISR1_ALL_MASK);
+++ /dev/null
-From 5f354992eeef9a51c67796dc9f7f578d3584baa2 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
-Date: Wed, 8 Dec 2021 05:57:54 +0100
-Subject: [PATCH] PCI: aardvark: Fix reading PCI_EXP_RTSTA_PME bit on emulated
- bridge
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The emulated bridge returns incorrect value for PCI_EXP_RTSTA register
-during readout in advk_pci_bridge_emul_pcie_conf_read() function: the
-correct bit is BIT(16), but we are setting BIT(23), because the code
-does
- *value = (isr0 & PCIE_MSG_PM_PME_MASK) << 16
-where
- PCIE_MSG_PM_PME_MASK
-is
- BIT(7).
-
-The code should probably have been something like
- *value = (!!(isr0 & PCIE_MSG_PM_PME_MASK)) << 16,
-but we are better of using an if() and using the proper macro for this
-bit.
-
-Fixes: 8a3ebd8de328 ("PCI: aardvark: Implement emulated root PCI bridge config space")
-Signed-off-by: Pali Rohár <pali@kernel.org>
-Signed-off-by: Marek Behún <kabel@kernel.org>
----
- drivers/pci/controller/pci-aardvark.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- a/drivers/pci/controller/pci-aardvark.c
-+++ b/drivers/pci/controller/pci-aardvark.c
-@@ -874,7 +874,9 @@ advk_pci_bridge_emul_pcie_conf_read(stru
- case PCI_EXP_RTSTA: {
- u32 isr0 = advk_readl(pcie, PCIE_ISR0_REG);
- u32 msglog = advk_readl(pcie, PCIE_MSG_LOG_REG);
-- *value = (isr0 & PCIE_MSG_PM_PME_MASK) << 16 | (msglog >> 16);
-+ *value = msglog >> 16;
-+ if (isr0 & PCIE_MSG_PM_PME_MASK)
-+ *value |= PCI_EXP_RTSTA_PME;
- return PCI_BRIDGE_EMUL_HANDLED;
- }
-
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
-@@ -605,5 +605,79 @@
+@@ -606,5 +606,79 @@
reg = <4>;
};
};
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
-@@ -190,7 +190,7 @@
+@@ -191,7 +191,7 @@
reg = <0x1800000 0x60000>;
};
compatible = "qcom,prng";
reg = <0x22000 0x140>;
clocks = <&gcc GCC_PRNG_AHB_CLK>;
-@@ -300,7 +300,7 @@
+@@ -301,7 +301,7 @@
status = "disabled";
};
compatible = "qcom,crypto-v5.1";
reg = <0x08e3a000 0x6000>;
clocks = <&gcc GCC_CRYPTO_AHB_CLK>,
-@@ -386,7 +386,7 @@
+@@ -387,7 +387,7 @@
dma-names = "rx", "tx";
};
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
-@@ -209,6 +209,16 @@
+@@ -210,6 +210,16 @@
interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
};
+++ /dev/null
-From a63c7162a1dae9f1185897641dc3e47e295563d6 Mon Sep 17 00:00:00 2001
-From: Pavel Kubelun <be.dissent@gmail.com>
-Date: Mon, 6 May 2019 20:55:16 +0300
-Subject: [PATCH] ARM: dts: qcom: ipq4019: fix sleep clock
-
-It seems like sleep_clk was copied from ipq806x.
-Fix ipq40xx sleep_clk to the value QSDK defines.
-
-Link: https://source.codeaurora.org/quic/qsdk/oss/kernel/linux-msm/commit/?id=d92ec59973484acc86dd24b67f10f8911b4b4b7d
-Link: https://patchwork.kernel.org/comment/22721613/
-Suggested-by: Bjorn Andersson <bjorn.andersson@linaro.org> [clock-output-names]
-Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com> [just fixed the value]
----
---- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
-+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
-@@ -142,7 +142,8 @@
- clocks {
- sleep_clk: sleep_clk {
- compatible = "fixed-clock";
-- clock-frequency = <32768>;
-+ clock-frequency = <32000>;
-+ clock-output-names = "gcc_sleep_clk_src";
- #clock-cells = <0>;
- };
-
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
-@@ -1275,6 +1275,7 @@ static const struct of_device_id qcom_sc
+@@ -1269,6 +1269,7 @@ static const struct of_device_id qcom_sc
SCM_HAS_BUS_CLK)
},
{ .compatible = "qcom,scm-ipq4019" },
(transaction layer end-to-end CRC checking).
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
-@@ -1419,6 +1419,8 @@ void pci_walk_bus(struct pci_bus *top, i
+@@ -1420,6 +1420,8 @@ void pci_walk_bus(struct pci_bus *top, i
void *userdata);
int pci_cfg_space_size(struct pci_dev *dev);
unsigned char pci_bus_max_busnr(struct pci_bus *bus);
},
[PORT_NPCM] = {
.name = "Nuvoton 16550",
-@@ -2725,6 +2725,11 @@ serial8250_do_set_termios(struct uart_po
+@@ -2735,6 +2735,11 @@ serial8250_do_set_termios(struct uart_po
unsigned long flags;
unsigned int baud, quot, frac = 0;
#include <linux/platform_data/x86/apple.h>
#include <linux/pm_runtime.h>
#include <linux/suspend.h>
-@@ -5772,3 +5773,34 @@ static void nvidia_ion_ahci_fixup(struct
+@@ -5784,3 +5785,34 @@ static void nvidia_ion_ahci_fixup(struct
pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup);