From: Zxl hhyccc Date: Sat, 25 May 2024 11:38:35 +0000 (+0800) Subject: kernel: bump 6.1 to 6.1.92 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=2d6cedab2765cb6ba5aa8deb408b54e9cdaecd08;p=openwrt%2Fstaging%2Fldir.git kernel: bump 6.1 to 6.1.92 https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.1.92 Removed upstreamed: bcm27xx/patches-6.1/950-0270-net-bcmgenet-Reset-RBUF-on-first-open.patch generic/backport-6.1/600-v6.9-03-net-gro-add-flush-check-in-udp_gro_receive_segment.patch generic/pending-6.1/681-net-bridge-fix-multicast-to-unicast-with-fraglist-GS.patch generic/pending-6.1/682-net-core-reject-skb_copy-_expand-for-fraglist-GSO-sk.patch generic/pending-6.1/684-net-bridge-fix-corrupted-ethernet-header-on-multicas.patch generic/pending-6.1/778-net-l2tp-drop-flow-hash-on-forward.patch imx/patches-6.1/002-6.2-phy-freescale-imx8m-pcie-Refine-i.MX8MM-PCIe-PHY-dri.patch All other patches automatically rebased. Signed-off-by: Zxl hhyccc --- diff --git a/include/kernel-6.1 b/include/kernel-6.1 index 6717917ac1..026ef91a52 100644 --- a/include/kernel-6.1 +++ b/include/kernel-6.1 @@ -1,2 +1,2 @@ -LINUX_VERSION-6.1 = .89 -LINUX_KERNEL_HASH-6.1.89 = 12bab8e092618d1d4eeaf4201e6e70054c94896198956bd84ff0e908b0264719 +LINUX_VERSION-6.1 = .92 +LINUX_KERNEL_HASH-6.1.92 = 9019f427bfdc9ced5bc954d760d37ac08c0cdffb45ad28087fc45a73e64336c9 diff --git a/target/linux/bcm27xx/patches-6.1/950-0080-Revert-net-bcmgenet-Request-APD-DLL-disable-and-IDDQ.patch b/target/linux/bcm27xx/patches-6.1/950-0080-Revert-net-bcmgenet-Request-APD-DLL-disable-and-IDDQ.patch index 9a29d61792..57a59c1ae4 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0080-Revert-net-bcmgenet-Request-APD-DLL-disable-and-IDDQ.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0080-Revert-net-bcmgenet-Request-APD-DLL-disable-and-IDDQ.patch @@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c -@@ -290,9 +290,7 @@ int bcmgenet_mii_probe(struct net_device +@@ -303,9 +303,7 @@ int bcmgenet_mii_probe(struct net_device struct device_node *dn = kdev->of_node; phy_interface_t phy_iface = priv->phy_interface; struct phy_device *phydev; diff --git a/target/linux/bcm27xx/patches-6.1/950-0106-Add-dwc_otg-driver.patch b/target/linux/bcm27xx/patches-6.1/950-0106-Add-dwc_otg-driver.patch index 600fe08126..89ed666567 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0106-Add-dwc_otg-driver.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0106-Add-dwc_otg-driver.patch @@ -1185,7 +1185,7 @@ Signed-off-by: Jonathan Bell } --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -5697,7 +5697,7 @@ static void port_event(struct usb_hub *h +@@ -5698,7 +5698,7 @@ static void port_event(struct usb_hub *h port_dev->over_current_count++; port_over_current_notify(port_dev); diff --git a/target/linux/bcm27xx/patches-6.1/950-0179-bcmgenet-Better-coalescing-parameter-defaults.patch b/target/linux/bcm27xx/patches-6.1/950-0179-bcmgenet-Better-coalescing-parameter-defaults.patch index b805f1df30..41c6199005 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0179-bcmgenet-Better-coalescing-parameter-defaults.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0179-bcmgenet-Better-coalescing-parameter-defaults.patch @@ -18,7 +18,7 @@ Signed-off-by: Phil Elwell --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c -@@ -2659,7 +2659,7 @@ static void bcmgenet_init_tx_ring(struct +@@ -2665,7 +2665,7 @@ static void bcmgenet_init_tx_ring(struct bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX); bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX); @@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell /* Disable rate control for now */ bcmgenet_tdma_ring_writel(priv, index, flow_period_val, TDMA_FLOW_PERIOD); -@@ -4140,9 +4140,12 @@ static int bcmgenet_probe(struct platfor +@@ -4160,9 +4160,12 @@ static int bcmgenet_probe(struct platfor netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1); /* Set default coalescing parameters */ diff --git a/target/linux/bcm27xx/patches-6.1/950-0180-net-genet-enable-link-energy-detect-powerdown-for-ex.patch b/target/linux/bcm27xx/patches-6.1/950-0180-net-genet-enable-link-energy-detect-powerdown-for-ex.patch index cc76ba5db9..44d8613b5e 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0180-net-genet-enable-link-energy-detect-powerdown-for-ex.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0180-net-genet-enable-link-energy-detect-powerdown-for-ex.patch @@ -20,7 +20,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c -@@ -296,6 +296,8 @@ int bcmgenet_mii_probe(struct net_device +@@ -309,6 +309,8 @@ int bcmgenet_mii_probe(struct net_device /* Communicate the integrated PHY revision */ if (priv->internal_phy) phy_flags = priv->gphy_rev; diff --git a/target/linux/bcm27xx/patches-6.1/950-0189-net-bcmgenet-Workaround-2-for-Pi4-Ethernet-fail.patch b/target/linux/bcm27xx/patches-6.1/950-0189-net-bcmgenet-Workaround-2-for-Pi4-Ethernet-fail.patch index da60efe07f..1507baa65b 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0189-net-bcmgenet-Workaround-2-for-Pi4-Ethernet-fail.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0189-net-bcmgenet-Workaround-2-for-Pi4-Ethernet-fail.patch @@ -37,7 +37,7 @@ Signed-off-by: Phil Elwell static inline void bcmgenet_writel(u32 value, void __iomem *offset) { -@@ -2490,6 +2493,11 @@ static void reset_umac(struct bcmgenet_p +@@ -2494,6 +2497,11 @@ static void reset_umac(struct bcmgenet_p bcmgenet_rbuf_ctrl_set(priv, 0); udelay(10); @@ -47,5 +47,5 @@ Signed-off-by: Phil Elwell + } + /* issue soft reset and disable MAC while updating its registers */ + spin_lock_bh(&priv->reg_lock); bcmgenet_umac_writel(priv, CMD_SW_RESET, UMAC_CMD); - udelay(2); diff --git a/target/linux/bcm27xx/patches-6.1/950-0227-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch b/target/linux/bcm27xx/patches-6.1/950-0227-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch index ef96ffe86e..2a3e2d781e 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0227-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0227-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch @@ -32,7 +32,7 @@ Signed-off-by: Phil Elwell --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c -@@ -3679,6 +3679,7 @@ static int spi_set_cs_timing(struct spi_ +@@ -3690,6 +3690,7 @@ static int spi_set_cs_timing(struct spi_ */ int spi_setup(struct spi_device *spi) { @@ -40,7 +40,7 @@ Signed-off-by: Phil Elwell unsigned bad_bits, ugly_bits; int status = 0; -@@ -3699,6 +3700,14 @@ int spi_setup(struct spi_device *spi) +@@ -3710,6 +3711,14 @@ int spi_setup(struct spi_device *spi) (SPI_TX_DUAL | SPI_TX_QUAD | SPI_TX_OCTAL | SPI_RX_DUAL | SPI_RX_QUAD | SPI_RX_OCTAL))) return -EINVAL; diff --git a/target/linux/bcm27xx/patches-6.1/950-0270-net-bcmgenet-Reset-RBUF-on-first-open.patch b/target/linux/bcm27xx/patches-6.1/950-0270-net-bcmgenet-Reset-RBUF-on-first-open.patch deleted file mode 100644 index e21de6f79f..0000000000 --- a/target/linux/bcm27xx/patches-6.1/950-0270-net-bcmgenet-Reset-RBUF-on-first-open.patch +++ /dev/null @@ -1,70 +0,0 @@ -From e857a27d5bca6269cea7a0ca0058aa8fffe90a83 Mon Sep 17 00:00:00 2001 -From: Phil Elwell -Date: Fri, 25 Sep 2020 15:07:23 +0100 -Subject: [PATCH] net: bcmgenet: Reset RBUF on first open - -If the RBUF logic is not reset when the kernel starts then there -may be some data left over from any network boot loader. If the -64-byte packet headers are enabled then this can be fatal. - -Extend bcmgenet_dma_disable to do perform the reset, but not when -called from bcmgenet_resume in order to preserve a wake packet. - -N.B. This different handling of resume is just based on a hunch - -why else wouldn't one reset the RBUF as well as the TBUF? If this -isn't the case then it's easy to change the patch to make the RBUF -reset unconditional. - -See: https://github.com/raspberrypi/linux/issues/3850 - -Signed-off-by: Phil Elwell ---- - drivers/net/ethernet/broadcom/genet/bcmgenet.c | 16 ++++++++++++---- - 1 file changed, 12 insertions(+), 4 deletions(-) - ---- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c -+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c -@@ -3306,7 +3306,7 @@ static void bcmgenet_get_hw_addr(struct - } - - /* Returns a reusable dma control register value */ --static u32 bcmgenet_dma_disable(struct bcmgenet_priv *priv) -+static u32 bcmgenet_dma_disable(struct bcmgenet_priv *priv, bool flush_rx) - { - unsigned int i; - u32 reg; -@@ -3331,6 +3331,14 @@ static u32 bcmgenet_dma_disable(struct b - udelay(10); - bcmgenet_umac_writel(priv, 0, UMAC_TX_FLUSH); - -+ if (flush_rx) { -+ reg = bcmgenet_rbuf_ctrl_get(priv); -+ bcmgenet_rbuf_ctrl_set(priv, reg | BIT(0)); -+ udelay(10); -+ bcmgenet_rbuf_ctrl_set(priv, reg); -+ udelay(10); -+ } -+ - return dma_ctrl; - } - -@@ -3394,8 +3402,8 @@ static int bcmgenet_open(struct net_devi - - bcmgenet_set_hw_addr(priv, dev->dev_addr); - -- /* Disable RX/TX DMA and flush TX queues */ -- dma_ctrl = bcmgenet_dma_disable(priv); -+ /* Disable RX/TX DMA and flush TX and RX queues */ -+ dma_ctrl = bcmgenet_dma_disable(priv, true); - - /* Reinitialize TDMA and RDMA and SW housekeeping */ - ret = bcmgenet_init_dma(priv); -@@ -4269,7 +4277,7 @@ static int bcmgenet_resume(struct device - bcmgenet_hfb_create_rxnfc_filter(priv, rule); - - /* Disable RX/TX DMA and flush TX queues */ -- dma_ctrl = bcmgenet_dma_disable(priv); -+ dma_ctrl = bcmgenet_dma_disable(priv, false); - - /* Reinitialize TDMA and RDMA and SW housekeeping */ - ret = bcmgenet_init_dma(priv); diff --git a/target/linux/bcm27xx/patches-6.1/950-0513-net-bcmgenet-Add-eee-module-parameter.patch b/target/linux/bcm27xx/patches-6.1/950-0513-net-bcmgenet-Add-eee-module-parameter.patch index cd9820fc9d..1d035c105c 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0513-net-bcmgenet-Add-eee-module-parameter.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0513-net-bcmgenet-Add-eee-module-parameter.patch @@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell static inline void bcmgenet_writel(u32 value, void __iomem *offset) { -@@ -3440,6 +3443,17 @@ static int bcmgenet_open(struct net_devi +@@ -3448,6 +3451,17 @@ static int bcmgenet_open(struct net_devi bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause); diff --git a/target/linux/bcm27xx/patches-6.1/950-0865-usb-dwc3-Set-DMA-and-coherent-masks-early.patch b/target/linux/bcm27xx/patches-6.1/950-0865-usb-dwc3-Set-DMA-and-coherent-masks-early.patch index e67cb66880..cf92da67a8 100644 --- a/target/linux/bcm27xx/patches-6.1/950-0865-usb-dwc3-Set-DMA-and-coherent-masks-early.patch +++ b/target/linux/bcm27xx/patches-6.1/950-0865-usb-dwc3-Set-DMA-and-coherent-masks-early.patch @@ -212,7 +212,7 @@ Signed-off-by: Jonathan Bell }, --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c -@@ -1179,6 +1179,24 @@ static void dwc3_config_threshold(struct +@@ -1180,6 +1180,24 @@ static void dwc3_config_threshold(struct } } @@ -237,7 +237,7 @@ Signed-off-by: Jonathan Bell /** * dwc3_core_init - Low-level initialization of DWC3 Core * @dwc: Pointer to our controller context structure -@@ -1271,6 +1289,8 @@ static int dwc3_core_init(struct dwc3 *d +@@ -1257,6 +1275,8 @@ static int dwc3_core_init(struct dwc3 *d dwc3_set_incr_burst_type(dwc); @@ -246,7 +246,7 @@ Signed-off-by: Jonathan Bell usb_phy_set_suspend(dwc->usb2_phy, 0); usb_phy_set_suspend(dwc->usb3_phy, 0); ret = phy_power_on(dwc->usb2_generic_phy); -@@ -1504,6 +1524,7 @@ static void dwc3_get_properties(struct d +@@ -1490,6 +1510,7 @@ static void dwc3_get_properties(struct d u8 tx_thr_num_pkt_prd = 0; u8 tx_max_burst_prd = 0; u8 tx_fifo_resize_max_num; @@ -254,7 +254,7 @@ Signed-off-by: Jonathan Bell const char *usb_psy_name; int ret; -@@ -1526,6 +1547,9 @@ static void dwc3_get_properties(struct d +@@ -1512,6 +1533,9 @@ static void dwc3_get_properties(struct d */ tx_fifo_resize_max_num = 6; @@ -264,7 +264,7 @@ Signed-off-by: Jonathan Bell dwc->maximum_speed = usb_get_maximum_speed(dev); dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev); dwc->dr_mode = usb_get_dr_mode(dev); -@@ -1641,6 +1665,9 @@ static void dwc3_get_properties(struct d +@@ -1627,6 +1651,9 @@ static void dwc3_get_properties(struct d dwc->dis_split_quirk = device_property_read_bool(dev, "snps,dis-split-quirk"); @@ -274,7 +274,7 @@ Signed-off-by: Jonathan Bell dwc->lpm_nyet_threshold = lpm_nyet_threshold; dwc->tx_de_emphasis = tx_de_emphasis; -@@ -1658,6 +1685,8 @@ static void dwc3_get_properties(struct d +@@ -1644,6 +1671,8 @@ static void dwc3_get_properties(struct d dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd; dwc->tx_max_burst_prd = tx_max_burst_prd; @@ -283,7 +283,7 @@ Signed-off-by: Jonathan Bell dwc->imod_interval = 0; dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num; -@@ -1866,6 +1895,12 @@ static int dwc3_probe(struct platform_de +@@ -1852,6 +1881,12 @@ static int dwc3_probe(struct platform_de dwc3_get_properties(dwc); @@ -326,7 +326,7 @@ Signed-off-by: Jonathan Bell --- a/drivers/usb/dwc3/host.c +++ b/drivers/usb/dwc3/host.c -@@ -30,10 +30,10 @@ static void dwc3_host_fill_xhci_irq_res( +@@ -51,10 +51,10 @@ static void dwc3_host_fill_xhci_irq_res( static int dwc3_host_get_irq(struct dwc3 *dwc) { @@ -339,7 +339,7 @@ Signed-off-by: Jonathan Bell if (irq > 0) { dwc3_host_fill_xhci_irq_res(dwc, irq, "host"); goto out; -@@ -42,7 +42,7 @@ static int dwc3_host_get_irq(struct dwc3 +@@ -63,7 +63,7 @@ static int dwc3_host_get_irq(struct dwc3 if (irq == -EPROBE_DEFER) goto out; @@ -348,7 +348,7 @@ Signed-off-by: Jonathan Bell if (irq > 0) { dwc3_host_fill_xhci_irq_res(dwc, irq, "dwc_usb3"); goto out; -@@ -51,7 +51,7 @@ static int dwc3_host_get_irq(struct dwc3 +@@ -72,7 +72,7 @@ static int dwc3_host_get_irq(struct dwc3 if (irq == -EPROBE_DEFER) goto out; @@ -357,7 +357,7 @@ Signed-off-by: Jonathan Bell if (irq > 0) { dwc3_host_fill_xhci_irq_res(dwc, irq, NULL); goto out; -@@ -66,16 +66,23 @@ out: +@@ -87,16 +87,23 @@ out: int dwc3_host_init(struct dwc3 *dwc) { diff --git a/target/linux/bcm47xx/patches-6.1/209-b44-register-adm-switch.patch b/target/linux/bcm47xx/patches-6.1/209-b44-register-adm-switch.patch index af4e218f9e..1b9dcb3adc 100644 --- a/target/linux/bcm47xx/patches-6.1/209-b44-register-adm-switch.patch +++ b/target/linux/bcm47xx/patches-6.1/209-b44-register-adm-switch.patch @@ -19,7 +19,7 @@ Subject: [PATCH 210/210] b44: register adm switch #include #include -@@ -2249,6 +2251,69 @@ static void b44_adjust_link(struct net_d +@@ -2251,6 +2253,69 @@ static void b44_adjust_link(struct net_d } } @@ -89,7 +89,7 @@ Subject: [PATCH 210/210] b44: register adm switch static int b44_register_phy_one(struct b44 *bp) { __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; -@@ -2285,6 +2350,9 @@ static int b44_register_phy_one(struct b +@@ -2287,6 +2352,9 @@ static int b44_register_phy_one(struct b if (!mdiobus_is_registered_device(bp->mii_bus, bp->phy_addr) && (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) { @@ -99,7 +99,7 @@ Subject: [PATCH 210/210] b44: register adm switch dev_info(sdev->dev, "could not find PHY at %i, use fixed one\n", bp->phy_addr); -@@ -2479,6 +2547,7 @@ static void b44_remove_one(struct ssb_de +@@ -2481,6 +2549,7 @@ static void b44_remove_one(struct ssb_de unregister_netdev(dev); if (bp->flags & B44_FLAG_EXTERNAL_PHY) b44_unregister_phy_one(bp); diff --git a/target/linux/bcm47xx/patches-6.1/210-b44_phy_fix.patch b/target/linux/bcm47xx/patches-6.1/210-b44_phy_fix.patch index ffe029b9fe..af9736518b 100644 --- a/target/linux/bcm47xx/patches-6.1/210-b44_phy_fix.patch +++ b/target/linux/bcm47xx/patches-6.1/210-b44_phy_fix.patch @@ -43,7 +43,7 @@ if (bp->flags & B44_FLAG_EXTERNAL_PHY) return 0; -@@ -2179,6 +2204,8 @@ static int b44_get_invariants(struct b44 +@@ -2181,6 +2206,8 @@ static int b44_get_invariants(struct b44 * valid PHY address. */ bp->phy_addr &= 0x1F; diff --git a/target/linux/generic/backport-6.1/600-v6.9-03-net-gro-add-flush-check-in-udp_gro_receive_segment.patch b/target/linux/generic/backport-6.1/600-v6.9-03-net-gro-add-flush-check-in-udp_gro_receive_segment.patch deleted file mode 100644 index 55dac85df8..0000000000 --- a/target/linux/generic/backport-6.1/600-v6.9-03-net-gro-add-flush-check-in-udp_gro_receive_segment.patch +++ /dev/null @@ -1,48 +0,0 @@ -From: Richard Gobert -Date: Tue, 30 Apr 2024 16:35:55 +0200 -Subject: [PATCH] net: gro: add flush check in udp_gro_receive_segment - -GRO-GSO path is supposed to be transparent and as such L3 flush checks are -relevant to all UDP flows merging in GRO. This patch uses the same logic -and code from tcp_gro_receive, terminating merge if flush is non zero. - -Fixes: e20cf8d3f1f7 ("udp: implement GRO for plain UDP sockets.") -Signed-off-by: Richard Gobert -Reviewed-by: Willem de Bruijn -Signed-off-by: Paolo Abeni ---- - ---- a/net/ipv4/udp_offload.c -+++ b/net/ipv4/udp_offload.c -@@ -463,6 +463,7 @@ static struct sk_buff *udp_gro_receive_s - struct sk_buff *p; - unsigned int ulen; - int ret = 0; -+ int flush; - - /* requires non zero csum, for symmetry with GSO */ - if (!uh->check) { -@@ -496,13 +497,22 @@ static struct sk_buff *udp_gro_receive_s - return p; - } - -+ flush = NAPI_GRO_CB(p)->flush; -+ -+ if (NAPI_GRO_CB(p)->flush_id != 1 || -+ NAPI_GRO_CB(p)->count != 1 || -+ !NAPI_GRO_CB(p)->is_atomic) -+ flush |= NAPI_GRO_CB(p)->flush_id; -+ else -+ NAPI_GRO_CB(p)->is_atomic = false; -+ - /* Terminate the flow on len mismatch or if it grow "too much". - * Under small packet flood GRO count could elsewhere grow a lot - * leading to excessive truesize values. - * On len mismatch merge the first packet shorter than gso_size, - * otherwise complete the GRO packet. - */ -- if (ulen > ntohs(uh2->len)) { -+ if (ulen > ntohs(uh2->len) || flush) { - pp = p; - } else { - if (NAPI_GRO_CB(skb)->is_flist) { diff --git a/target/linux/generic/hack-6.1/221-module_exports.patch b/target/linux/generic/hack-6.1/221-module_exports.patch index 967510bcb6..573eeb15d7 100644 --- a/target/linux/generic/hack-6.1/221-module_exports.patch +++ b/target/linux/generic/hack-6.1/221-module_exports.patch @@ -115,7 +115,7 @@ Signed-off-by: Felix Fietkau .previous --- a/scripts/Makefile.build +++ b/scripts/Makefile.build -@@ -388,7 +388,7 @@ targets += $(real-dtb-y) $(lib-y) $(alwa +@@ -391,7 +391,7 @@ targets += $(real-dtb-y) $(lib-y) $(alwa # Linker scripts preprocessor (.lds.S -> .lds) # --------------------------------------------------------------------------- quiet_cmd_cpp_lds_S = LDS $@ diff --git a/target/linux/generic/hack-6.1/721-net-add-packet-mangeling.patch b/target/linux/generic/hack-6.1/721-net-add-packet-mangeling.patch index bf286523d6..696a78e53e 100644 --- a/target/linux/generic/hack-6.1/721-net-add-packet-mangeling.patch +++ b/target/linux/generic/hack-6.1/721-net-add-packet-mangeling.patch @@ -60,7 +60,7 @@ Signed-off-by: Felix Fietkau */ --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -3045,6 +3045,10 @@ static inline int pskb_trim(struct sk_bu +@@ -3060,6 +3060,10 @@ static inline int pskb_trim(struct sk_bu return (len < skb->len) ? __pskb_trim(skb, len) : 0; } @@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau /** * pskb_trim_unique - remove end from a paged unique (not cloned) buffer * @skb: buffer to alter -@@ -3194,16 +3198,6 @@ static inline struct sk_buff *dev_alloc_ +@@ -3209,16 +3213,6 @@ static inline struct sk_buff *dev_alloc_ } diff --git a/target/linux/generic/hack-6.1/901-debloat_sock_diag.patch b/target/linux/generic/hack-6.1/901-debloat_sock_diag.patch index ec71f9af4b..09b59478aa 100644 --- a/target/linux/generic/hack-6.1/901-debloat_sock_diag.patch +++ b/target/linux/generic/hack-6.1/901-debloat_sock_diag.patch @@ -60,7 +60,7 @@ Signed-off-by: Felix Fietkau static void sock_def_write_space_wfree(struct sock *sk); static void sock_def_write_space(struct sock *sk); -@@ -585,6 +587,18 @@ discard_and_relse: +@@ -586,6 +588,18 @@ discard_and_relse: } EXPORT_SYMBOL(__sk_receive_skb); @@ -79,7 +79,7 @@ Signed-off-by: Felix Fietkau INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *, u32)); INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *, -@@ -2188,9 +2202,11 @@ static void __sk_free(struct sock *sk) +@@ -2189,9 +2203,11 @@ static void __sk_free(struct sock *sk) if (likely(sk->sk_net_refcnt)) sock_inuse_add(sock_net(sk), -1); diff --git a/target/linux/generic/hack-6.1/902-debloat_proc.patch b/target/linux/generic/hack-6.1/902-debloat_proc.patch index a90169efc9..d9de0b4fec 100644 --- a/target/linux/generic/hack-6.1/902-debloat_proc.patch +++ b/target/linux/generic/hack-6.1/902-debloat_proc.patch @@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -4114,6 +4114,8 @@ static __net_initdata struct pernet_oper +@@ -4115,6 +4115,8 @@ static __net_initdata struct pernet_oper static int __init proto_init(void) { diff --git a/target/linux/generic/pending-6.1/655-increase_skb_pad.patch b/target/linux/generic/pending-6.1/655-increase_skb_pad.patch index 8af331cb23..9d77ceaf93 100644 --- a/target/linux/generic/pending-6.1/655-increase_skb_pad.patch +++ b/target/linux/generic/pending-6.1/655-increase_skb_pad.patch @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -3012,7 +3012,7 @@ static inline int pskb_network_may_pull( +@@ -3027,7 +3027,7 @@ static inline int pskb_network_may_pull( * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) */ #ifndef NET_SKB_PAD diff --git a/target/linux/generic/pending-6.1/681-net-bridge-fix-multicast-to-unicast-with-fraglist-GS.patch b/target/linux/generic/pending-6.1/681-net-bridge-fix-multicast-to-unicast-with-fraglist-GS.patch deleted file mode 100644 index 6a53a678d8..0000000000 --- a/target/linux/generic/pending-6.1/681-net-bridge-fix-multicast-to-unicast-with-fraglist-GS.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Felix Fietkau -Date: Sat, 27 Apr 2024 18:54:25 +0200 -Subject: [PATCH] net: bridge: fix multicast-to-unicast with fraglist GSO - -Calling skb_copy on a SKB_GSO_FRAGLIST skb is not valid, since it returns -an invalid linearized skb. This code only needs to change the ethernet -header, so pskb_copy is the right function to call here. - -Fixes: 6db6f0eae605 ("bridge: multicast to unicast") -Signed-off-by: Felix Fietkau ---- - ---- a/net/bridge/br_forward.c -+++ b/net/bridge/br_forward.c -@@ -261,7 +261,7 @@ static void maybe_deliver_addr(struct ne - if (skb->dev == p->dev && ether_addr_equal(src, addr)) - return; - -- skb = skb_copy(skb, GFP_ATOMIC); -+ skb = pskb_copy(skb, GFP_ATOMIC); - if (!skb) { - DEV_STATS_INC(dev, tx_dropped); - return; diff --git a/target/linux/generic/pending-6.1/682-net-core-reject-skb_copy-_expand-for-fraglist-GSO-sk.patch b/target/linux/generic/pending-6.1/682-net-core-reject-skb_copy-_expand-for-fraglist-GSO-sk.patch deleted file mode 100644 index 719cac9bcf..0000000000 --- a/target/linux/generic/pending-6.1/682-net-core-reject-skb_copy-_expand-for-fraglist-GSO-sk.patch +++ /dev/null @@ -1,59 +0,0 @@ -From: Felix Fietkau -Date: Sat, 27 Apr 2024 19:29:45 +0200 -Subject: [PATCH] net: core: reject skb_copy(_expand) for fraglist GSO skbs - -SKB_GSO_FRAGLIST skbs must not be linearized, otherwise they become -invalid. Return NULL if such an skb is passed to skb_copy or -skb_copy_expand, in order to prevent a crash on a potential later -call to skb_gso_segment. - -Fixes: 3a1296a38d0c ("net: Support GRO/GSO fraglist chaining.") -Signed-off-by: Felix Fietkau ---- - ---- a/net/core/skbuff.c -+++ b/net/core/skbuff.c -@@ -1720,11 +1720,17 @@ static inline int skb_alloc_rx_flag(cons - - struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask) - { -- int headerlen = skb_headroom(skb); -- unsigned int size = skb_end_offset(skb) + skb->data_len; -- struct sk_buff *n = __alloc_skb(size, gfp_mask, -- skb_alloc_rx_flag(skb), NUMA_NO_NODE); -+ struct sk_buff *n; -+ unsigned int size; -+ int headerlen; - -+ if (WARN_ON_ONCE(skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST)) -+ return NULL; -+ -+ headerlen = skb_headroom(skb); -+ size = skb_end_offset(skb) + skb->data_len; -+ n = __alloc_skb(size, gfp_mask, -+ skb_alloc_rx_flag(skb), NUMA_NO_NODE); - if (!n) - return NULL; - -@@ -2037,12 +2043,17 @@ struct sk_buff *skb_copy_expand(const st - /* - * Allocate the copy buffer - */ -- struct sk_buff *n = __alloc_skb(newheadroom + skb->len + newtailroom, -- gfp_mask, skb_alloc_rx_flag(skb), -- NUMA_NO_NODE); -- int oldheadroom = skb_headroom(skb); - int head_copy_len, head_copy_off; -+ struct sk_buff *n; -+ int oldheadroom; -+ -+ if (WARN_ON_ONCE(skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST)) -+ return NULL; - -+ oldheadroom = skb_headroom(skb); -+ n = __alloc_skb(newheadroom + skb->len + newtailroom, -+ gfp_mask, skb_alloc_rx_flag(skb), -+ NUMA_NO_NODE); - if (!n) - return NULL; - diff --git a/target/linux/generic/pending-6.1/684-net-bridge-fix-corrupted-ethernet-header-on-multicas.patch b/target/linux/generic/pending-6.1/684-net-bridge-fix-corrupted-ethernet-header-on-multicas.patch deleted file mode 100644 index c315790082..0000000000 --- a/target/linux/generic/pending-6.1/684-net-bridge-fix-corrupted-ethernet-header-on-multicas.patch +++ /dev/null @@ -1,42 +0,0 @@ -From: Felix Fietkau -Date: Sun, 5 May 2024 20:36:56 +0200 -Subject: [PATCH] net: bridge: fix corrupted ethernet header on - multicast-to-unicast - -The change from skb_copy to pskb_copy unfortunately changed the data -copying to omit the ethernet header, since it was pulled before reaching -this point. Fix this by calling __skb_push/pull around pskb_copy. - -Fixes: 59c878cbcdd8 ("net: bridge: fix multicast-to-unicast with fraglist GSO") -Signed-off-by: Felix Fietkau ---- - ---- a/net/bridge/br_forward.c -+++ b/net/bridge/br_forward.c -@@ -253,6 +253,7 @@ static void maybe_deliver_addr(struct ne - { - struct net_device *dev = BR_INPUT_SKB_CB(skb)->brdev; - const unsigned char *src = eth_hdr(skb)->h_source; -+ struct sk_buff *nskb; - - if (!should_deliver(p, skb)) - return; -@@ -261,12 +262,16 @@ static void maybe_deliver_addr(struct ne - if (skb->dev == p->dev && ether_addr_equal(src, addr)) - return; - -- skb = pskb_copy(skb, GFP_ATOMIC); -- if (!skb) { -+ __skb_push(skb, ETH_HLEN); -+ nskb = pskb_copy(skb, GFP_ATOMIC); -+ __skb_pull(skb, ETH_HLEN); -+ if (!nskb) { - DEV_STATS_INC(dev, tx_dropped); - return; - } - -+ skb = nskb; -+ __skb_pull(skb, ETH_HLEN); - if (!is_broadcast_ether_addr(addr)) - memcpy(eth_hdr(skb)->h_dest, addr, ETH_ALEN); - diff --git a/target/linux/generic/pending-6.1/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch b/target/linux/generic/pending-6.1/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch index 20d1c13045..367c41bff0 100644 --- a/target/linux/generic/pending-6.1/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch +++ b/target/linux/generic/pending-6.1/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch @@ -134,7 +134,7 @@ Signed-off-by: Felix Fietkau return -EMSGSIZE; timerval = br_timer_value(&p->message_age_timer); -@@ -878,6 +880,7 @@ static const struct nla_policy br_port_p +@@ -879,6 +881,7 @@ static const struct nla_policy br_port_p [IFLA_BRPORT_LOCKED] = { .type = NLA_U8 }, [IFLA_BRPORT_BACKUP_PORT] = { .type = NLA_U32 }, [IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT] = { .type = NLA_U32 }, @@ -142,7 +142,7 @@ Signed-off-by: Felix Fietkau }; /* Change the state of the port and notify spanning tree */ -@@ -943,6 +946,7 @@ static int br_setport(struct net_bridge_ +@@ -944,6 +947,7 @@ static int br_setport(struct net_bridge_ br_set_port_flag(p, tb, IFLA_BRPORT_NEIGH_SUPPRESS, BR_NEIGH_SUPPRESS); br_set_port_flag(p, tb, IFLA_BRPORT_ISOLATED, BR_ISOLATED); br_set_port_flag(p, tb, IFLA_BRPORT_LOCKED, BR_PORT_LOCKED); diff --git a/target/linux/generic/pending-6.1/760-net-core-add-optional-threading-for-backlog-processi.patch b/target/linux/generic/pending-6.1/760-net-core-add-optional-threading-for-backlog-processi.patch index 69b2721738..6ccc3eb389 100644 --- a/target/linux/generic/pending-6.1/760-net-core-add-optional-threading-for-backlog-processi.patch +++ b/target/linux/generic/pending-6.1/760-net-core-add-optional-threading-for-backlog-processi.patch @@ -177,15 +177,15 @@ Signed-off-by: Felix Fietkau sd->backlog.weight = weight_p; --- a/net/core/sysctl_net_core.c +++ b/net/core/sysctl_net_core.c -@@ -29,6 +29,7 @@ static int int_3600 = 3600; - static int min_sndbuf = SOCK_MIN_SNDBUF; +@@ -30,6 +30,7 @@ static int min_sndbuf = SOCK_MIN_SNDBUF; static int min_rcvbuf = SOCK_MIN_RCVBUF; static int max_skb_frags = MAX_SKB_FRAGS; + static int min_mem_pcpu_rsv = SK_MEMORY_PCPU_RESERVE; +static int backlog_threaded; static int net_msg_warn; /* Unused, but still a sysctl */ -@@ -112,6 +113,23 @@ static int rps_sock_flow_sysctl(struct c +@@ -113,6 +114,23 @@ static int rps_sock_flow_sysctl(struct c } #endif /* CONFIG_RPS */ @@ -209,7 +209,7 @@ Signed-off-by: Felix Fietkau #ifdef CONFIG_NET_FLOW_LIMIT static DEFINE_MUTEX(flow_limit_update_mutex); -@@ -473,6 +491,15 @@ static struct ctl_table net_core_table[] +@@ -482,6 +500,15 @@ static struct ctl_table net_core_table[] .proc_handler = rps_sock_flow_sysctl }, #endif diff --git a/target/linux/generic/pending-6.1/778-net-l2tp-drop-flow-hash-on-forward.patch b/target/linux/generic/pending-6.1/778-net-l2tp-drop-flow-hash-on-forward.patch deleted file mode 100644 index a2c0edcbbf..0000000000 --- a/target/linux/generic/pending-6.1/778-net-l2tp-drop-flow-hash-on-forward.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4a44a52f16ccd3d03e0cb5fb437a5eb31a5f9f05 Mon Sep 17 00:00:00 2001 -From: David Bauer -Date: Mon, 26 Feb 2024 21:39:34 +0100 -Subject: [PATCH] net l2tp: drop flow hash on forward - -Drop the flow-hash of the skb when forwarding to the L2TP netdev. - -This avoids the L2TP qdisc from using the flow-hash from the outer -packet, which is identical for every flow within the tunnel. - -This does not affect every platform but is specific for the ethernet -driver. It depends on the platform including L4 information in the -flow-hash. - -Signed-off-by: David Bauer ---- - net/l2tp/l2tp_eth.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/net/l2tp/l2tp_eth.c -+++ b/net/l2tp/l2tp_eth.c -@@ -136,6 +136,9 @@ static void l2tp_eth_dev_recv(struct l2t - /* checksums verified by L2TP */ - skb->ip_summed = CHECKSUM_NONE; - -+ /* drop outer flow-hash */ -+ skb_clear_hash(skb); -+ - skb_dst_drop(skb); - nf_reset_ct(skb); - diff --git a/target/linux/imx/patches-6.1/001-6.2-phy-freescale-imx8m-pcie-Refine-register-definitions.patch b/target/linux/imx/patches-6.1/001-6.2-phy-freescale-imx8m-pcie-Refine-register-definitions.patch index 0af479aae9..01731755df 100644 --- a/target/linux/imx/patches-6.1/001-6.2-phy-freescale-imx8m-pcie-Refine-register-definitions.patch +++ b/target/linux/imx/patches-6.1/001-6.2-phy-freescale-imx8m-pcie-Refine-register-definitions.patch @@ -20,7 +20,7 @@ Reviewed-by: Lucas Stach --- a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c +++ b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c -@@ -31,12 +31,10 @@ +@@ -32,12 +32,10 @@ #define IMX8MM_PCIE_PHY_CMN_REG065 0x194 #define ANA_AUX_RX_TERM (BIT(7) | BIT(4)) #define ANA_AUX_TX_LVL GENMASK(3, 0) @@ -35,8 +35,8 @@ Reviewed-by: Lucas Stach #define IMX8MM_GPR_PCIE_REF_CLK_SEL GENMASK(25, 24) #define IMX8MM_GPR_PCIE_REF_CLK_PLL FIELD_PREP(IMX8MM_GPR_PCIE_REF_CLK_SEL, 0x3) -@@ -131,9 +129,8 @@ static int imx8_pcie_phy_power_on(struct - reset_control_deassert(imx8_phy->reset); +@@ -152,9 +150,8 @@ static int imx8_pcie_phy_power_on(struct + } /* Polling to check the phy is ready or not. */ - ret = readl_poll_timeout(imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG75, diff --git a/target/linux/imx/patches-6.1/002-6.2-phy-freescale-imx8m-pcie-Refine-i.MX8MM-PCIe-PHY-dri.patch b/target/linux/imx/patches-6.1/002-6.2-phy-freescale-imx8m-pcie-Refine-i.MX8MM-PCIe-PHY-dri.patch deleted file mode 100644 index c2264c0bb4..0000000000 --- a/target/linux/imx/patches-6.1/002-6.2-phy-freescale-imx8m-pcie-Refine-i.MX8MM-PCIe-PHY-dri.patch +++ /dev/null @@ -1,197 +0,0 @@ -From fb681544808b85c0cdf41a627401e5d470633914 Mon Sep 17 00:00:00 2001 -From: Richard Zhu -Date: Thu, 13 Oct 2022 09:47:01 +0800 -Subject: [PATCH 2/3] phy: freescale: imx8m-pcie: Refine i.MX8MM PCIe PHY - driver - -To make it more flexible and easy to expand. Refine i.MX8MM PCIe PHY -driver. -- Use gpr compatible string to avoid the codes duplications when add - another platform PCIe PHY support. -- Re-arrange the codes to let it more flexible and easy to expand. -No functional change. Re-arrange the TX tuning, since internal registers -can be wrote through APB interface before assertion of CMN_RST. - -Signed-off-by: Richard Zhu -Signed-off-by: Lucas Stach -Tested-by: Marek Vasut -Tested-by: Richard Leitner -Tested-by: Alexander Stein -Reviewed-by: Lucas Stach -Reviewed-by: Ahmad Fatoum ---- - drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 106 +++++++++++++-------- - 1 file changed, 66 insertions(+), 40 deletions(-) - ---- a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c -+++ b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c -@@ -11,6 +11,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -45,6 +46,15 @@ - #define IMX8MM_GPR_PCIE_SSC_EN BIT(16) - #define IMX8MM_GPR_PCIE_AUX_EN_OVERRIDE BIT(9) - -+enum imx8_pcie_phy_type { -+ IMX8MM, -+}; -+ -+struct imx8_pcie_phy_drvdata { -+ const char *gpr; -+ enum imx8_pcie_phy_type variant; -+}; -+ - struct imx8_pcie_phy { - void __iomem *base; - struct clk *clk; -@@ -55,6 +65,7 @@ struct imx8_pcie_phy { - u32 tx_deemph_gen1; - u32 tx_deemph_gen2; - bool clkreq_unused; -+ const struct imx8_pcie_phy_drvdata *drvdata; - }; - - static int imx8_pcie_phy_power_on(struct phy *phy) -@@ -66,31 +77,17 @@ static int imx8_pcie_phy_power_on(struct - reset_control_assert(imx8_phy->reset); - - pad_mode = imx8_phy->refclk_pad_mode; -- /* Set AUX_EN_OVERRIDE 1'b0, when the CLKREQ# isn't hooked */ -- regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -- IMX8MM_GPR_PCIE_AUX_EN_OVERRIDE, -- imx8_phy->clkreq_unused ? -- 0 : IMX8MM_GPR_PCIE_AUX_EN_OVERRIDE); -- regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -- IMX8MM_GPR_PCIE_AUX_EN, -- IMX8MM_GPR_PCIE_AUX_EN); -- regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -- IMX8MM_GPR_PCIE_POWER_OFF, 0); -- regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -- IMX8MM_GPR_PCIE_SSC_EN, 0); -- -- regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -- IMX8MM_GPR_PCIE_REF_CLK_SEL, -- pad_mode == IMX8_PCIE_REFCLK_PAD_INPUT ? -- IMX8MM_GPR_PCIE_REF_CLK_EXT : -- IMX8MM_GPR_PCIE_REF_CLK_PLL); -- usleep_range(100, 200); -- -- /* Do the PHY common block reset */ -- regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -- IMX8MM_GPR_PCIE_CMN_RST, -- IMX8MM_GPR_PCIE_CMN_RST); -- usleep_range(200, 500); -+ switch (imx8_phy->drvdata->variant) { -+ case IMX8MM: -+ /* Tune PHY de-emphasis setting to pass PCIe compliance. */ -+ if (imx8_phy->tx_deemph_gen1) -+ writel(imx8_phy->tx_deemph_gen1, -+ imx8_phy->base + PCIE_PHY_TRSV_REG5); -+ if (imx8_phy->tx_deemph_gen2) -+ writel(imx8_phy->tx_deemph_gen2, -+ imx8_phy->base + PCIE_PHY_TRSV_REG6); -+ break; -+ } - - if (pad_mode == IMX8_PCIE_REFCLK_PAD_INPUT || - pad_mode == IMX8_PCIE_REFCLK_PAD_UNUSED) { -@@ -118,15 +115,37 @@ static int imx8_pcie_phy_power_on(struct - imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG065); - } - -- /* Tune PHY de-emphasis setting to pass PCIe compliance. */ -- if (imx8_phy->tx_deemph_gen1) -- writel(imx8_phy->tx_deemph_gen1, -- imx8_phy->base + PCIE_PHY_TRSV_REG5); -- if (imx8_phy->tx_deemph_gen2) -- writel(imx8_phy->tx_deemph_gen2, -- imx8_phy->base + PCIE_PHY_TRSV_REG6); -+ /* Set AUX_EN_OVERRIDE 1'b0, when the CLKREQ# isn't hooked */ -+ regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -+ IMX8MM_GPR_PCIE_AUX_EN_OVERRIDE, -+ imx8_phy->clkreq_unused ? -+ 0 : IMX8MM_GPR_PCIE_AUX_EN_OVERRIDE); -+ regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -+ IMX8MM_GPR_PCIE_AUX_EN, -+ IMX8MM_GPR_PCIE_AUX_EN); -+ regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -+ IMX8MM_GPR_PCIE_POWER_OFF, 0); -+ regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -+ IMX8MM_GPR_PCIE_SSC_EN, 0); - -- reset_control_deassert(imx8_phy->reset); -+ regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -+ IMX8MM_GPR_PCIE_REF_CLK_SEL, -+ pad_mode == IMX8_PCIE_REFCLK_PAD_INPUT ? -+ IMX8MM_GPR_PCIE_REF_CLK_EXT : -+ IMX8MM_GPR_PCIE_REF_CLK_PLL); -+ usleep_range(100, 200); -+ -+ /* Do the PHY common block reset */ -+ regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14, -+ IMX8MM_GPR_PCIE_CMN_RST, -+ IMX8MM_GPR_PCIE_CMN_RST); -+ -+ switch (imx8_phy->drvdata->variant) { -+ case IMX8MM: -+ reset_control_deassert(imx8_phy->reset); -+ usleep_range(200, 500); -+ break; -+ } - - /* Polling to check the phy is ready or not. */ - ret = readl_poll_timeout(imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG075, -@@ -157,6 +176,17 @@ static const struct phy_ops imx8_pcie_ph - .owner = THIS_MODULE, - }; - -+static const struct imx8_pcie_phy_drvdata imx8mm_drvdata = { -+ .gpr = "fsl,imx8mm-iomuxc-gpr", -+ .variant = IMX8MM, -+}; -+ -+static const struct of_device_id imx8_pcie_phy_of_match[] = { -+ {.compatible = "fsl,imx8mm-pcie-phy", .data = &imx8mm_drvdata, }, -+ { }, -+}; -+MODULE_DEVICE_TABLE(of, imx8_pcie_phy_of_match); -+ - static int imx8_pcie_phy_probe(struct platform_device *pdev) - { - struct phy_provider *phy_provider; -@@ -169,6 +199,8 @@ static int imx8_pcie_phy_probe(struct pl - if (!imx8_phy) - return -ENOMEM; - -+ imx8_phy->drvdata = of_device_get_match_data(dev); -+ - /* get PHY refclk pad mode */ - of_property_read_u32(np, "fsl,refclk-pad-mode", - &imx8_phy->refclk_pad_mode); -@@ -194,7 +226,7 @@ static int imx8_pcie_phy_probe(struct pl - - /* Grab GPR config register range */ - imx8_phy->iomuxc_gpr = -- syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); -+ syscon_regmap_lookup_by_compatible(imx8_phy->drvdata->gpr); - if (IS_ERR(imx8_phy->iomuxc_gpr)) { - dev_err(dev, "unable to find iomuxc registers\n"); - return PTR_ERR(imx8_phy->iomuxc_gpr); -@@ -222,12 +254,6 @@ static int imx8_pcie_phy_probe(struct pl - return PTR_ERR_OR_ZERO(phy_provider); - } - --static const struct of_device_id imx8_pcie_phy_of_match[] = { -- {.compatible = "fsl,imx8mm-pcie-phy",}, -- { }, --}; --MODULE_DEVICE_TABLE(of, imx8_pcie_phy_of_match); -- - static struct platform_driver imx8_pcie_phy_driver = { - .probe = imx8_pcie_phy_probe, - .driver = { diff --git a/target/linux/imx/patches-6.1/003-6.3-phy-freescale-imx8m-pcie-Add-i.MX8MP-PCIe-PHY-suppor.patch b/target/linux/imx/patches-6.1/003-6.3-phy-freescale-imx8m-pcie-Add-i.MX8MP-PCIe-PHY-suppor.patch index 03b41e4153..dbcfd40e57 100644 --- a/target/linux/imx/patches-6.1/003-6.3-phy-freescale-imx8m-pcie-Add-i.MX8MP-PCIe-PHY-suppor.patch +++ b/target/linux/imx/patches-6.1/003-6.3-phy-freescale-imx8m-pcie-Add-i.MX8MP-PCIe-PHY-suppor.patch @@ -57,7 +57,7 @@ Reviewed-by: Ahmad Fatoum } if (pad_mode == IMX8_PCIE_REFCLK_PAD_INPUT || -@@ -141,6 +145,9 @@ static int imx8_pcie_phy_power_on(struct +@@ -143,6 +147,9 @@ static int imx8_pcie_phy_power_on(struct IMX8MM_GPR_PCIE_CMN_RST); switch (imx8_phy->drvdata->variant) { @@ -67,7 +67,7 @@ Reviewed-by: Ahmad Fatoum case IMX8MM: reset_control_deassert(imx8_phy->reset); usleep_range(200, 500); -@@ -181,8 +188,14 @@ static const struct imx8_pcie_phy_drvdat +@@ -183,8 +190,14 @@ static const struct imx8_pcie_phy_drvdat .variant = IMX8MM, }; @@ -82,7 +82,7 @@ Reviewed-by: Ahmad Fatoum { }, }; MODULE_DEVICE_TABLE(of, imx8_pcie_phy_of_match); -@@ -238,6 +251,14 @@ static int imx8_pcie_phy_probe(struct pl +@@ -240,6 +253,14 @@ static int imx8_pcie_phy_probe(struct pl return PTR_ERR(imx8_phy->reset); }