+++ /dev/null
-From ab8133272d4f3c75ef3d9ac4664af29314be343d Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 18 May 2022 08:20:07 +0200
-Subject: net: fec: Avoid allocating rx buffer using ATOMIC in ndo_open
-
-From: Michael Trimarchi <michael@amarulasolutions.com>
-
-[ Upstream commit b885aab3d39d1c81709e957324c7fb9aeac02c38 ]
-
-Make ndo_open less sensitive to memory pressure.
-
-Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
-Reviewed-by: Jakub Kicinski <kuba@kernel.org>
-Link: https://lore.kernel.org/r/20220518062007.10056-1-michael@amarulasolutions.com
-Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-Stable-dep-of: a1477dc87dc4 ("net: fec: Restart PPS after link state change")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/freescale/fec_main.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
-index a591ca0b37787..c6d08395a289c 100644
---- a/drivers/net/ethernet/freescale/fec_main.c
-+++ b/drivers/net/ethernet/freescale/fec_main.c
-@@ -2952,7 +2952,7 @@ fec_enet_alloc_rxq_buffers(struct net_device *ndev, unsigned int queue)
- rxq = fep->rx_queue[queue];
- bdp = rxq->bd.base;
- for (i = 0; i < rxq->bd.ring_size; i++) {
-- skb = netdev_alloc_skb(ndev, FEC_ENET_RX_FRSIZE);
-+ skb = __netdev_alloc_skb(ndev, FEC_ENET_RX_FRSIZE, GFP_KERNEL);
- if (!skb)
- goto err_alloc;
-
---
-2.43.0
-
+++ /dev/null
-From c5939dea05ec63f123e8dcadd7a2ef7c404667ed Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 24 Sep 2024 11:37:06 +0200
-Subject: net: fec: Reload PTP registers after link-state change
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: Csókás, Bence <csokas.bence@prolan.hu>
-
-[ Upstream commit d9335d0232d2da605585eea1518ac6733518f938 ]
-
-On link-state change, the controller gets reset,
-which clears all PTP registers, including PHC time,
-calibrated clock correction values etc. For correct
-IEEE 1588 operation we need to restore these after
-the reset.
-
-Fixes: 6605b730c061 ("FEC: Add time stamping code and a PTP hardware clock")
-Signed-off-by: Csókás, Bence <csokas.bence@prolan.hu>
-Reviewed-by: Wei Fang <wei.fang@nxp.com>
-Link: https://patch.msgid.link/20240924093705.2897329-2-csokas.bence@prolan.hu
-Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/freescale/fec.h | 3 +++
- drivers/net/ethernet/freescale/fec_ptp.c | 20 ++++++++++++++++++++
- 2 files changed, 23 insertions(+)
-
-diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
-index 44fd2eaccb8fa..eb5c330752fb5 100644
---- a/drivers/net/ethernet/freescale/fec.h
-+++ b/drivers/net/ethernet/freescale/fec.h
-@@ -595,6 +595,9 @@ struct fec_enet_private {
-
- struct {
- int pps_enable;
-+ u64 ns_sys, ns_phc;
-+ u32 at_corr;
-+ u8 at_inc_corr;
- } ptp_saved_state;
-
- u64 ethtool_stats[];
-diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c
-index 0726291fbb4c0..7148f0086e329 100644
---- a/drivers/net/ethernet/freescale/fec_ptp.c
-+++ b/drivers/net/ethernet/freescale/fec_ptp.c
-@@ -638,24 +638,44 @@ void fec_ptp_init(struct platform_device *pdev, int irq_idx)
- void fec_ptp_save_state(struct fec_enet_private *fep)
- {
- unsigned long flags;
-+ u32 atime_inc_corr;
-
- spin_lock_irqsave(&fep->tmreg_lock, flags);
-
- fep->ptp_saved_state.pps_enable = fep->pps_enable;
-
-+ fep->ptp_saved_state.ns_phc = timecounter_read(&fep->tc);
-+ fep->ptp_saved_state.ns_sys = ktime_get_ns();
-+
-+ fep->ptp_saved_state.at_corr = readl(fep->hwp + FEC_ATIME_CORR);
-+ atime_inc_corr = readl(fep->hwp + FEC_ATIME_INC) & FEC_T_INC_CORR_MASK;
-+ fep->ptp_saved_state.at_inc_corr = (u8)(atime_inc_corr >> FEC_T_INC_CORR_OFFSET);
-+
- spin_unlock_irqrestore(&fep->tmreg_lock, flags);
- }
-
- /* Restore PTP functionality after a reset */
- void fec_ptp_restore_state(struct fec_enet_private *fep)
- {
-+ u32 atime_inc = readl(fep->hwp + FEC_ATIME_INC) & FEC_T_INC_MASK;
- unsigned long flags;
-+ u32 counter;
-+ u64 ns;
-
- spin_lock_irqsave(&fep->tmreg_lock, flags);
-
- /* Reset turned it off, so adjust our status flag */
- fep->pps_enable = 0;
-
-+ writel(fep->ptp_saved_state.at_corr, fep->hwp + FEC_ATIME_CORR);
-+ atime_inc |= ((u32)fep->ptp_saved_state.at_inc_corr) << FEC_T_INC_CORR_OFFSET;
-+ writel(atime_inc, fep->hwp + FEC_ATIME_INC);
-+
-+ ns = ktime_get_ns() - fep->ptp_saved_state.ns_sys + fep->ptp_saved_state.ns_phc;
-+ counter = ns & fep->cc.mask;
-+ writel(counter, fep->hwp + FEC_ATIME);
-+ timecounter_init(&fep->tc, &fep->cc, ns);
-+
- spin_unlock_irqrestore(&fep->tmreg_lock, flags);
-
- /* Restart PPS if needed */
---
-2.43.0
-
+++ /dev/null
-From ad298337babdfde4aeedc6eb66eb24fc1affd356 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 24 Sep 2024 11:37:04 +0200
-Subject: net: fec: Restart PPS after link state change
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: Csókás, Bence <csokas.bence@prolan.hu>
-
-[ Upstream commit a1477dc87dc4996dcf65a4893d4e2c3a6b593002 ]
-
-On link state change, the controller gets reset,
-causing PPS to drop out. Re-enable PPS if it was
-enabled before the controller reset.
-
-Fixes: 6605b730c061 ("FEC: Add time stamping code and a PTP hardware clock")
-Signed-off-by: Csókás, Bence <csokas.bence@prolan.hu>
-Link: https://patch.msgid.link/20240924093705.2897329-1-csokas.bence@prolan.hu
-Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/freescale/fec.h | 6 +++++
- drivers/net/ethernet/freescale/fec_main.c | 11 ++++++++-
- drivers/net/ethernet/freescale/fec_ptp.c | 30 +++++++++++++++++++++++
- 3 files changed, 46 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
-index 6ea98af63b341..44fd2eaccb8fa 100644
---- a/drivers/net/ethernet/freescale/fec.h
-+++ b/drivers/net/ethernet/freescale/fec.h
-@@ -593,10 +593,16 @@ struct fec_enet_private {
- int pps_enable;
- unsigned int next_counter;
-
-+ struct {
-+ int pps_enable;
-+ } ptp_saved_state;
-+
- u64 ethtool_stats[];
- };
-
- void fec_ptp_init(struct platform_device *pdev, int irq_idx);
-+void fec_ptp_restore_state(struct fec_enet_private *fep);
-+void fec_ptp_save_state(struct fec_enet_private *fep);
- void fec_ptp_stop(struct platform_device *pdev);
- void fec_ptp_start_cyclecounter(struct net_device *ndev);
- void fec_ptp_disable_hwts(struct net_device *ndev);
-diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
-index c6d08395a289c..250b543e10ee8 100644
---- a/drivers/net/ethernet/freescale/fec_main.c
-+++ b/drivers/net/ethernet/freescale/fec_main.c
-@@ -966,6 +966,8 @@ fec_restart(struct net_device *ndev)
- u32 rcntl = OPT_FRAME_SIZE | 0x04;
- u32 ecntl = FEC_ECR_ETHEREN;
-
-+ fec_ptp_save_state(fep);
-+
- /* Whack a reset. We should wait for this.
- * For i.MX6SX SOC, enet use AXI bus, we use disable MAC
- * instead of reset MAC itself.
-@@ -1127,8 +1129,10 @@ fec_restart(struct net_device *ndev)
- writel(ecntl, fep->hwp + FEC_ECNTRL);
- fec_enet_active_rxring(ndev);
-
-- if (fep->bufdesc_ex)
-+ if (fep->bufdesc_ex) {
- fec_ptp_start_cyclecounter(ndev);
-+ fec_ptp_restore_state(fep);
-+ }
-
- /* Enable interrupts we wish to service */
- if (fep->link)
-@@ -1174,6 +1178,8 @@ fec_stop(struct net_device *ndev)
- netdev_err(ndev, "Graceful transmit stop did not complete!\n");
- }
-
-+ fec_ptp_save_state(fep);
-+
- /* Whack a reset. We should wait for this.
- * For i.MX6SX SOC, enet use AXI bus, we use disable MAC
- * instead of reset MAC itself.
-@@ -1206,6 +1212,9 @@ fec_stop(struct net_device *ndev)
- val = readl(fep->hwp + FEC_ECNTRL);
- val |= FEC_ECR_EN1588;
- writel(val, fep->hwp + FEC_ECNTRL);
-+
-+ fec_ptp_start_cyclecounter(ndev);
-+ fec_ptp_restore_state(fep);
- }
- }
-
-diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c
-index 84e0855069a84..0726291fbb4c0 100644
---- a/drivers/net/ethernet/freescale/fec_ptp.c
-+++ b/drivers/net/ethernet/freescale/fec_ptp.c
-@@ -635,6 +635,36 @@ void fec_ptp_init(struct platform_device *pdev, int irq_idx)
- schedule_delayed_work(&fep->time_keep, HZ);
- }
-
-+void fec_ptp_save_state(struct fec_enet_private *fep)
-+{
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&fep->tmreg_lock, flags);
-+
-+ fep->ptp_saved_state.pps_enable = fep->pps_enable;
-+
-+ spin_unlock_irqrestore(&fep->tmreg_lock, flags);
-+}
-+
-+/* Restore PTP functionality after a reset */
-+void fec_ptp_restore_state(struct fec_enet_private *fep)
-+{
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&fep->tmreg_lock, flags);
-+
-+ /* Reset turned it off, so adjust our status flag */
-+ fep->pps_enable = 0;
-+
-+ spin_unlock_irqrestore(&fep->tmreg_lock, flags);
-+
-+ /* Restart PPS if needed */
-+ if (fep->ptp_saved_state.pps_enable) {
-+ /* Re-enable PPS */
-+ fec_ptp_enable_pps(fep, 1);
-+ }
-+}
-+
- void fec_ptp_stop(struct platform_device *pdev)
- {
- struct net_device *ndev = platform_get_drvdata(pdev);
---
-2.43.0
-
netfilter-nf_tables-prevent-nf_skb_duplicated-corrup.patch
bluetooth-btmrvl-use-irqf_no_autoen-flag-in-request_.patch
net-ethernet-lantiq_etop-fix-memory-disclosure.patch
-net-fec-avoid-allocating-rx-buffer-using-atomic-in-n.patch
-net-fec-restart-pps-after-link-state-change.patch
-net-fec-reload-ptp-registers-after-link-state-change.patch
net-avoid-potential-underflow-in-qdisc_pkt_len_init-.patch
net-add-more-sanity-checks-to-qdisc_pkt_len_init.patch
ipv4-ip_gre-fix-drops-of-small-packets-in-ipgre_xmit.patch