* Lynx 10G SerDes Driver on my kernel @ 2025-12-02 11:12 Tanjeff Moos 2025-12-02 16:29 ` Vladimir Oltean 0 siblings, 1 reply; 14+ messages in thread From: Tanjeff Moos @ 2025-12-02 11:12 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org Hello Vladimir, I want to use your Lynx 10G SerDes driver (plus fman and fsl_guts) on our OpenWRT kernel (6.6.110) and don't know how to integrate it properly. I only found the driver in the NXP kernel[1]. Did you send patch to a linux kernel mailing list that I may apply? Kind regards, Tanjeff [1] https://github.com/nxp-imx/linux-imx.git -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-02 11:12 Lynx 10G SerDes Driver on my kernel Tanjeff Moos @ 2025-12-02 16:29 ` Vladimir Oltean 2025-12-03 11:41 ` Tanjeff Moos 0 siblings, 1 reply; 14+ messages in thread From: Vladimir Oltean @ 2025-12-02 16:29 UTC (permalink / raw) To: Tanjeff Moos; +Cc: Sean Anderson, linux-phy@lists.infradead.org Hi Tanjeff, On Tue, Dec 02, 2025 at 12:12:26PM +0100, Tanjeff Moos wrote: > Hello Vladimir, > > I want to use your Lynx 10G SerDes driver (plus fman and fsl_guts) on > our OpenWRT kernel (6.6.110) and don't know how to integrate it properly. > > I only found the driver in the NXP kernel[1]. Did you send patch to a > linux kernel mailing list that I may apply? > > Kind regards, Tanjeff > > > [1] https://github.com/nxp-imx/linux-imx.git > (I'm unsure why you CCed linux-phy, but OK) Picking the right base kernel seems to be of utmost importance. From what I know, OpenWRT maintain their own kernel version and don't use vendor kernels (they import patches from vendor kernels as .patch files, however). I see this commit in OpenWRT: commit 6942ca412124a1f322e19e2289a59ed8e27b9c24 Author: Pawel Dembicki <paweldembicki@gmail.com> Date: Sat Nov 1 23:36:36 2025 +0100 layerscape: switch to Linux 6.12 Linux 6.12 has been validated on Layerscape platforms, including NXP reference boards and multiple custom designs. Tests covered system boot, networking, storage, and common peripherals, with no regressions observed. Enable 6.12 as the default to continue broader testing and integration. Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com> Link: https://github.com/openwrt/openwrt/pull/20614 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> To integrate the Lynx 10G driver, you'll need to do that on your own as patches. The correct git tree used by Layerscape boards in Linux Factory is: https://github.com/nxp-qoriq/linux/tree/lf-6.12.34-2.1.0 My strong recommendation, assuming you want something stable, is to integrate the NXP Linux Factory patches, which you'll receive some official NXP support for. The rest of the email is just for the sake of full transparency. I will be talking about my development work, which I strongly recommend that you do not integrate into OpenWrt at this stage. The SerDes patches (both for the 10G and the 28G Lynx) are being constantly reworked in an attempt to get as much upstream as possible. Since the 10G and the 28G Lynx SerDes blocks are very similar, they should share a lot of code. For that reason, adding a new driver for the 10G Lynx depends on some changes being made in the 28G Lynx. I am keeping a personal development branch on top of linux-next here: https://github.com/vladimiroltean/linux/commits/net-phy-upstreaming *However* I modify it frequently, *and* I only retest those modifications rigorously when I need to (i.e. when I need to submit some patches upstream). I am doing this because any time I am making a change as a result of a review comment, it has to propagate during rebase like a shock wave through a huge stack of dishes. So if you pick up the patches from this branch today, there is no guarantee you will find them in the same state next week. The bottleneck is on the patches being accepted into linux-phy. Currently a group of 15 patches from this development branch have been submitted to the mailing list a week ago: https://lore.kernel.org/linux-phy/20251125114847.804961-1-vladimir.oltean@nxp.com/ and that's about it. There are 22 more linux-phy patches on top of that to be accepted until mainline gains some support for the 10G Lynx. And that isn't considering: - device trees, which are also waiting for the acceptance of the driver - networking consumer driver changes (I'm moving SerDes handling into the Lynx PCS driver, in order for not just dpaa-eth to benefit from it, but also enetc, felix, dpaa2) Out of curiosity, for what platform and what use case do you need the patches? -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-02 16:29 ` Vladimir Oltean @ 2025-12-03 11:41 ` Tanjeff Moos 2025-12-03 12:26 ` Vladimir Oltean 0 siblings, 1 reply; 14+ messages in thread From: Tanjeff Moos @ 2025-12-03 11:41 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org Hi Vladimir, Am 02.12.25 um 17:29 schrieb Vladimir Oltean: > Hi Tanjeff, > > On Tue, Dec 02, 2025 at 12:12:26PM +0100, Tanjeff Moos wrote: >> Hello Vladimir, >> >> I want to use your Lynx 10G SerDes driver (plus fman and fsl_guts) on >> our OpenWRT kernel (6.6.110) and don't know how to integrate it properly. >> >> I only found the driver in the NXP kernel[1]. Did you send patch to a >> linux kernel mailing list that I may apply? >> >> Kind regards, Tanjeff >> >> >> [1] https://github.com/nxp-imx/linux-imx.git >> > > (I'm unsure why you CCed linux-phy, but OK) > > Picking the right base kernel seems to be of utmost importance. From > what I know, OpenWRT maintain their own kernel version and don't use > vendor kernels (they import patches from vendor kernels as .patch files, > however). > > I see this commit in OpenWRT: > > commit 6942ca412124a1f322e19e2289a59ed8e27b9c24 > Author: Pawel Dembicki <paweldembicki@gmail.com> > Date: Sat Nov 1 23:36:36 2025 +0100 > > layerscape: switch to Linux 6.12 > > Linux 6.12 has been validated on Layerscape platforms, including NXP > reference boards and multiple custom designs. Tests covered system > boot, networking, storage, and common peripherals, with no regressions > observed. > > Enable 6.12 as the default to continue broader testing and integration. > > Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com> > Link: https://github.com/openwrt/openwrt/pull/20614 > Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> This commit is on the main branch, but not on a release branch. We base our OpenWRT build on the stable version v24.10.4, which still uses kernel v6.6 for layerscape. Nevertheless I will consider updating the kernel. > To integrate the Lynx 10G driver, you'll need to do that on your own as > patches. The correct git tree used by Layerscape boards in Linux Factory is: > https://github.com/nxp-qoriq/linux/tree/lf-6.12.34-2.1.0 > > My strong recommendation, assuming you want something stable, is to > integrate the NXP Linux Factory patches, which you'll receive some > official NXP support for. > > The rest of the email is just for the sake of full transparency. I will > be talking about my development work, which I strongly recommend that > you do not integrate into OpenWrt at this stage. > > The SerDes patches (both for the 10G and the 28G Lynx) are being > constantly reworked in an attempt to get as much upstream as possible. > Since the 10G and the 28G Lynx SerDes blocks are very similar, they > should share a lot of code. For that reason, adding a new driver for the > 10G Lynx depends on some changes being made in the 28G Lynx. > > I am keeping a personal development branch on top of linux-next here: > https://github.com/vladimiroltean/linux/commits/net-phy-upstreaming > *However* I modify it frequently, *and* I only retest those > modifications rigorously when I need to (i.e. when I need to submit some > patches upstream). I am doing this because any time I am making a change > as a result of a review comment, it has to propagate during rebase like > a shock wave through a huge stack of dishes. > > So if you pick up the patches from this branch today, there is no > guarantee you will find them in the same state next week. > > The bottleneck is on the patches being accepted into linux-phy. > Currently a group of 15 patches from this development branch have been > submitted to the mailing list a week ago: > https://lore.kernel.org/linux-phy/20251125114847.804961-1-vladimir.oltean@nxp.com/ > and that's about it. There are 22 more linux-phy patches on top of that > to be accepted until mainline gains some support for the 10G Lynx. And > that isn't considering: > - device trees, which are also waiting for the acceptance of the driver > - networking consumer driver changes (I'm moving SerDes handling into > the Lynx PCS driver, in order for not just dpaa-eth to benefit from > it, but also enetc, felix, dpaa2) > > Out of curiosity, for what platform and what use case do you need the patches? We build WLAN access points for railway (i.e. passenger WLAN). We design the hardware ourselves. Older models are still based on PowerPC QorIQ (T1024 and others), but the most recent model uses a Layerscape LS1046A. This is the one I work with. We use OpenWRT with our own additions. We build binary images for all devices (PowerPC and ARM) from the same OpenWRT tree, using different configuration files. Currently, all devices use the same kernel version (v6.6.110 + OpenWRT patches + our patches). Speaking of the device I'm working with, we connected two Broadcom BCM84891L PHYs (100M / 1G / 2.5G / 5G / 10G) to MAC9 and MAC10. The PHY supports different protocols for different speeds. The only protocol supporting all speeds is USXGMII, but this is not supported by LS1046A. Therefore we use SGMII (for 100M / 1G), 2500Base-X (for 2.5G) and XFI (for 2.5G / 5G / 10G). Yes, we use different protocols for 2.5G; see below. So far I didn't manage to switch the LS1046A SerDes between SGMII and XFI protocols without changing the RCW. However, I can switch between SGMII and 2500Base-X at runtime. Therefore we provide different variants of the device: - "Slow" Ethernet (100M / 1G / 2.5G), switching between SGMII and 2500Base-X at runtime. Here we use the BCM54991L PHY (only up to 2.5G, otherwise identical), but this is not relevant for my problem. - "Fast" Ethernet (2.5G / 5G / 10G), using XFI + rate limiting in the MAC. I patched fman and fman_memac to alter SerDes settings when the PHY reports speed changes. This is rude, but worked... I created the patches for kernel 5.15.167, and they do not apply on v6.6.110. Instead of reworking my patch, I'd rather use your work, which is much cleaner. Also I hope that it supports switching between SGMII and XFI, which would allow our "fast" variant to support all speeds from 100M to 10G. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-03 11:41 ` Tanjeff Moos @ 2025-12-03 12:26 ` Vladimir Oltean 2025-12-03 16:25 ` Tanjeff Moos 0 siblings, 1 reply; 14+ messages in thread From: Vladimir Oltean @ 2025-12-03 12:26 UTC (permalink / raw) To: Tanjeff Moos; +Cc: Sean Anderson, linux-phy@lists.infradead.org On Wed, Dec 03, 2025 at 12:41:16PM +0100, Tanjeff Moos wrote: > I created the patches for kernel 5.15.167, and they do not apply on > v6.6.110. Instead of reworking my patch, I'd rather use your work, which > is much cleaner. Also I hope that it supports switching between SGMII > and XFI, which would allow our "fast" variant to support all speeds from > 100M to 10G. The intention, based on hardware capabilities, is for the SerDes driver to read the PLL clock net frequencies at probe time, and build for each of the 2 PLLs a list of supported SerDes protocols. The phy_validate() API function is supposed to return which SerDes protocols can be used on a particular lane. Phylink in particular uses this information to build its phylink_config :: supported_interfaces map. In the SerDes, each lane can be reconfigured to use the clock net provided by PLLF or PLLS ("F" = first, "S" - second), further divided or multiplied by a configurable power of 2 factor. Furthermore, each lane may support only a subset of SerDes protocols that its PLL selection can support (depending which protocol converters are instantiated on it). For LS1046A, lanes 2 and 3 have all the required protocol converters to support LANE_MODE_1000BASEX_SGMII, LANE_MODE_2500BASEX and LANE_MODE_10GBASER: https://github.com/nxp-qoriq/linux/blob/lf-6.12.34-2.1.0/drivers/phy/freescale/phy-fsl-lynx-10g.c#L774-L790 but there is an incompatibility between your use case and the PLL frequencies. Each SerDes protocol requires a different clock net frequency: - LANE_MODE_1000BASEX_SGMII requires PLLnCR0_FRATE_5G - LANE_MODE_2500BASEX requires PLLnCR0_FRATE_3_125G - LANE_MODE_10GBASER requires PLLnCR0_FRATE_5_15625G https://github.com/nxp-qoriq/linux/blob/lf-6.12.34-2.1.0/drivers/phy/freescale/phy-fsl-lynx-10g.c#L2273-L2298 The problem is that 2 PLLs can't provide 3 distinct clock net frequencies. So you can either support 1G and 2.5G, or 1G and 10G, or 2.5G and 10G. Reading your message carefully, it seems that you aren't requesting the "fast" Ethernet device to support the 2.5G media speed via LANE_MODE_2500BASEX, because that isn't going to be possible. You are just requesting to support the 10G, 5G and 2.5G media speeds via LANE_MODE_10GBASER (with pause-based rate adaptation in the Ethernet PHY), and the 1G and 100M media speeds via LANE_MODE_1000BASEX_SGMII. That second case *is* going to be possible, provided that your PLL clock net frequencies are properly provisioned. Look at the output from lynx_10g_pll_dump() to avoid any unpleasant surprises. It should tell you that PLLF supports LANE_MODE_1000BASEX_SGMII, and PLLS supports LANE_MODE_10GBASER. If it doesn't, you need to make changes to your hardware design. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-03 12:26 ` Vladimir Oltean @ 2025-12-03 16:25 ` Tanjeff Moos 2025-12-03 18:00 ` Vladimir Oltean 0 siblings, 1 reply; 14+ messages in thread From: Tanjeff Moos @ 2025-12-03 16:25 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org On 12/3/25 13:26, Vladimir Oltean wrote: > On Wed, Dec 03, 2025 at 12:41:16PM +0100, Tanjeff Moos wrote: >> I created the patches for kernel 5.15.167, and they do not apply on >> v6.6.110. Instead of reworking my patch, I'd rather use your work, which >> is much cleaner. Also I hope that it supports switching between SGMII >> and XFI, which would allow our "fast" variant to support all speeds from >> 100M to 10G. > > The intention, based on hardware capabilities, is for the SerDes driver > to read the PLL clock net frequencies at probe time, and build for each > of the 2 PLLs a list of supported SerDes protocols. > > The phy_validate() API function is supposed to return which SerDes protocols > can be used on a particular lane. Phylink in particular uses this > information to build its phylink_config :: supported_interfaces map. > > In the SerDes, each lane can be reconfigured to use the clock net > provided by PLLF or PLLS ("F" = first, "S" - second), further divided or > multiplied by a configurable power of 2 factor. > > Furthermore, each lane may support only a subset of SerDes protocols > that its PLL selection can support (depending which protocol converters > are instantiated on it). > > For LS1046A, lanes 2 and 3 have all the required protocol converters to > support LANE_MODE_1000BASEX_SGMII, LANE_MODE_2500BASEX and LANE_MODE_10GBASER: > https://github.com/nxp-qoriq/linux/blob/lf-6.12.34-2.1.0/drivers/phy/freescale/phy-fsl-lynx-10g.c#L774-L790 > > but there is an incompatibility between your use case and the PLL frequencies. > Each SerDes protocol requires a different clock net frequency: > - LANE_MODE_1000BASEX_SGMII requires PLLnCR0_FRATE_5G > - LANE_MODE_2500BASEX requires PLLnCR0_FRATE_3_125G > - LANE_MODE_10GBASER requires PLLnCR0_FRATE_5_15625G > https://github.com/nxp-qoriq/linux/blob/lf-6.12.34-2.1.0/drivers/phy/freescale/phy-fsl-lynx-10g.c#L2273-L2298 According to LS1046ARM [1] SGMII requires 1.25 Gbps. I don't understand where the 5 GHz comes from. I believe I am missing some knowledge here. > The problem is that 2 PLLs can't provide 3 distinct clock net frequencies. > So you can either support 1G and 2.5G, or 1G and 10G, or 2.5G and 10G. According to table 31-4 "Valid SerDes RCW Encodings and Reference Clocks" (page 1919): - SGMII can be used with PLL=100 MHz or PLL=125 MHZ - 2.5G SGMII can be used with PLL=125 MHz or PLL=156.25 MHZ - XFI can be used with PLL=156.25 MHZ My clocks receive the following frequencies (on all devices, "fast" and "slow"): - PLL 1: 125 MHz - PLL 2: 156.25 MHz By choosing the right PLL I can use SGMII, 2.5G SGMII or XFI, which I actually do. It is possible to freely assign PLL 1 or PLL 2 to any lane using LNxGCR0[RPLL_LES]. > Reading your message carefully, it seems that you aren't requesting the > "fast" Ethernet device to support the 2.5G media speed via LANE_MODE_2500BASEX, > because that isn't going to be possible. Correct. > You are just requesting to support the 10G, 5G and 2.5G media speeds via > LANE_MODE_10GBASER (with pause-based rate adaptation in the Ethernet PHY), > and the 1G and 100M media speeds via LANE_MODE_1000BASEX_SGMII. Yes, that is my minimum target. I hoped that the "fast" device can support all speeds, but it's not mandatory. > That second case *is* going to be possible, provided that your PLL clock > net frequencies are properly provisioned. > > Look at the output from lynx_10g_pll_dump() to avoid any unpleasant > surprises. It should tell you that PLLF supports LANE_MODE_1000BASEX_SGMII, > and PLLS supports LANE_MODE_10GBASER. If it doesn't, you need to make > changes to your hardware design. I will, thank you. Kind regards, Tanjeff [1] LS1046A Reference Manual, LS1046ARM, Rev. 3, 08/2021 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-03 16:25 ` Tanjeff Moos @ 2025-12-03 18:00 ` Vladimir Oltean 2025-12-04 19:01 ` Tanjeff Moos 0 siblings, 1 reply; 14+ messages in thread From: Vladimir Oltean @ 2025-12-03 18:00 UTC (permalink / raw) To: Tanjeff Moos; +Cc: Sean Anderson, linux-phy@lists.infradead.org On Wed, Dec 03, 2025 at 05:25:46PM +0100, Tanjeff Moos wrote: > > Each SerDes protocol requires a different clock net frequency: > > - LANE_MODE_1000BASEX_SGMII requires PLLnCR0_FRATE_5G > > - LANE_MODE_2500BASEX requires PLLnCR0_FRATE_3_125G > > - LANE_MODE_10GBASER requires PLLnCR0_FRATE_5_15625G > > https://github.com/nxp-qoriq/linux/blob/lf-6.12.34-2.1.0/drivers/phy/freescale/phy-fsl-lynx-10g.c#L2273-L2298 > > According to LS1046ARM [1] SGMII requires 1.25 Gbps. I don't understand > where the 5 GHz comes from. I believe I am missing some knowledge here. The clock net is an internal frequency provided by the PLL for lanes. It is given by PLLnCR0[FRATE_SEL]. I said that the lane can further divide or multiply it using a power of 2 factor. Indeed SGMII wants a 1.25 Gbps baud rate, and it gets that by dividing the 5 GHz clock net provided by the PLL (PLLnCR0_FRATE_5G) by 4 (it uses RAT_SEL_QUARTER for LNaGCR0_TRAT_SEL and LNaGCR0_RRAT_SEL). Because we _know_ that lanes can divide the 5 GHz clock net frequency by 4 to get 1.25, we say that a PLL which uses PLLnCR0_FRATE_5G is good for SGMII. > > The problem is that 2 PLLs can't provide 3 distinct clock net frequencies. > > So you can either support 1G and 2.5G, or 1G and 10G, or 2.5G and 10G. > > According to table 31-4 "Valid SerDes RCW Encodings and Reference Clocks" > (page 1919): > - SGMII can be used with PLL=100 MHz or PLL=125 MHZ > - 2.5G SGMII can be used with PLL=125 MHz or PLL=156.25 MHZ > - XFI can be used with PLL=156.25 MHZ > My clocks receive the following frequencies (on all devices, "fast" and > "slow"): > - PLL 1: 125 MHz > - PLL 2: 156.25 MHz > By choosing the right PLL I can use SGMII, 2.5G SGMII or XFI, which I > actually do. It is possible to freely assign PLL 1 or PLL 2 to any lane > using LNxGCR0[RPLL_LES]. Oof, this is hard to explain, let me try. The short summary is: you can use the 125 MHz PLL refclk for both SGMII and 2.5G SGMII, but not at the same time. The clock net frequency is derived from the PLL reference clock, but they are not one and the same thing. Their relationship is: - From one reference clock you can provide one of two clock net frequencies. - One clock net frequency can be provided from different reference clock frequencies. The entity that loads the RCW configures the SerDes PLLs in this way. It knows the SerDes protocols per lane, and their respective mappings to a PLL or the other, through RCW[SRDS_PRTCL_S1]. 1. It looks at PLLF. Based on which SerDes protocols are mapped to it, it programs the clock net frequency (PLLnCR0[FRATE_SEL]) at the right value for those protocols. It is a *fact* that SGMII requires an FRATE_SEL of 5 GHz, 2500Base-X of 3.125 GHz, etc etc. 2. Then, the RCW loader asks itself - how do I obtain this PLLnCR0[FRATE_SEL]? As you say: SGMII (aka the 5 GHz clock net frequency) can be obtained from 100 MHz or 125 MHz reference clock. This information sits in the RCW[SRDS_PLL_REF_CLK_SEL_S1] field. If 1, it will try to obtain the clock net from the higher frequency for that protocol. If 0, from the lower reference clock frequency. So applied to the particular case of SGMII from step 1, you are telling it in the RCW to generate 5 GHz clock net from the higher reference clock, aka 125 MHz. This translates into a write to PLLnCR0[RFCLK_SEL] of 001b (aka 125 MHz). This is all to say - when you use SGMII from the 125 MHz refclk, you have to use RCW[SRDS_PLL_REF_CLK_SEL_S1]=1, and when you use 2500Base-X from the same refclk, you have to set RCW[SRDS_PLL_REF_CLK_SEL_S1]=0. What happens under the hood is that these 2 settings result in different clock net frequencies produced by that PLL, incompatible with each other. You can either produce one, or the other, at any given time. In Linux we don't change the PLL refclk and clock net selection that was made by the RCW. Doing so would mean powering down all lanes that use that PLL, and unbinding and rebinding the Ethernet driver (because the supported_interfaces mask will change, and the phylink instances need to be destroyed and re-created to pick up that change). It is a very invasive operation. > > You are just requesting to support the 10G, 5G and 2.5G media speeds via > > LANE_MODE_10GBASER (with pause-based rate adaptation in the Ethernet PHY), > > and the 1G and 100M media speeds via LANE_MODE_1000BASEX_SGMII. > > Yes, that is my minimum target. I hoped that the "fast" device can support > all speeds, but it's not mandatory. What do you mean "can support all speeds", do you mean the media side speeds? By switching from 10GBase-R to SGMII it would support them all, wouldn't it? Above I'm just re-explaining why you can't support 3 SerDes protocols which require different clock net frequencies when architecturally we have just 2 PLLs. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-03 18:00 ` Vladimir Oltean @ 2025-12-04 19:01 ` Tanjeff Moos 2025-12-04 19:34 ` Vladimir Oltean 0 siblings, 1 reply; 14+ messages in thread From: Tanjeff Moos @ 2025-12-04 19:01 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org On 12/3/25 19:00, Vladimir Oltean wrote: > On Wed, Dec 03, 2025 at 05:25:46PM +0100, Tanjeff Moos wrote: >>> Each SerDes protocol requires a different clock net frequency: >>> - LANE_MODE_1000BASEX_SGMII requires PLLnCR0_FRATE_5G >>> - LANE_MODE_2500BASEX requires PLLnCR0_FRATE_3_125G >>> - LANE_MODE_10GBASER requires PLLnCR0_FRATE_5_15625G >>> https://urldefense.com/v3/__https://github.com/nxp-qoriq/linux/blob/lf-6.12.34-2.1.0/drivers/phy/freescale/phy-fsl-lynx-10g.c*L2273-L2298__;Iw!!I9LPvj3b!C2MhsRe43DSJeXGT0xpGpqZ8TOnWlFtW1VY2DPka6a9H7t5QWgCMneu8mRvQGeR1ZcaSQidiREblHfFkXcKclJkqX_1ePg$ >> >> According to LS1046ARM [1] SGMII requires 1.25 Gbps. I don't understand >> where the 5 GHz comes from. I believe I am missing some knowledge here. > > The clock net is an internal frequency provided by the PLL for lanes. > It is given by PLLnCR0[FRATE_SEL]. I said that the lane can further > divide or multiply it using a power of 2 factor. > > Indeed SGMII wants a 1.25 Gbps baud rate, and it gets that by dividing > the 5 GHz clock net provided by the PLL (PLLnCR0_FRATE_5G) by 4 (it uses > RAT_SEL_QUARTER for LNaGCR0_TRAT_SEL and LNaGCR0_RRAT_SEL). > > Because we _know_ that lanes can divide the 5 GHz clock net frequency by > 4 to get 1.25, we say that a PLL which uses PLLnCR0_FRATE_5G is good for > SGMII. > >>> The problem is that 2 PLLs can't provide 3 distinct clock net frequencies. >>> So you can either support 1G and 2.5G, or 1G and 10G, or 2.5G and 10G. 1G and 10G is sufficient. 1G (SGMII) also supports 100M. 10G (XFI) also supports 2.5G and 5G via rate limiting. >> >> According to table 31-4 "Valid SerDes RCW Encodings and Reference Clocks" >> (page 1919): >> - SGMII can be used with PLL=100 MHz or PLL=125 MHZ >> - 2.5G SGMII can be used with PLL=125 MHz or PLL=156.25 MHZ >> - XFI can be used with PLL=156.25 MHZ >> My clocks receive the following frequencies (on all devices, "fast" and >> "slow"): >> - PLL 1: 125 MHz >> - PLL 2: 156.25 MHz >> By choosing the right PLL I can use SGMII, 2.5G SGMII or XFI, which I >> actually do. It is possible to freely assign PLL 1 or PLL 2 to any lane >> using LNxGCR0[RPLL_LES]. > > Oof, this is hard to explain, let me try. The short summary is: you can > use the 125 MHz PLL refclk for both SGMII and 2.5G SGMII, but not at the > same time. > > The clock net frequency is derived from the PLL reference clock, but > they are not one and the same thing. Their relationship is: > - From one reference clock you can provide one of two clock net > frequencies. > - One clock net frequency can be provided from different reference clock > frequencies. > > The entity that loads the RCW configures the SerDes PLLs in this way. > > It knows the SerDes protocols per lane, and their respective mappings to > a PLL or the other, through RCW[SRDS_PRTCL_S1]. > > 1. It looks at PLLF. Based on which SerDes protocols are mapped to it, it > programs the clock net frequency (PLLnCR0[FRATE_SEL]) at the right value > for those protocols. It is a *fact* that SGMII requires an FRATE_SEL of > 5 GHz, 2500Base-X of 3.125 GHz, etc etc. > > 2. Then, the RCW loader asks itself - how do I obtain this PLLnCR0[FRATE_SEL]? > > As you say: SGMII (aka the 5 GHz clock net frequency) can be obtained > from 100 MHz or 125 MHz reference clock. This information sits in the > RCW[SRDS_PLL_REF_CLK_SEL_S1] field. If 1, it will try to obtain the > clock net from the higher frequency for that protocol. If 0, from the > lower reference clock frequency. > > So applied to the particular case of SGMII from step 1, you are telling > it in the RCW to generate 5 GHz clock net from the higher reference > clock, aka 125 MHz. This translates into a write to PLLnCR0[RFCLK_SEL] > of 001b (aka 125 MHz). > > This is all to say - when you use SGMII from the 125 MHz refclk, you > have to use RCW[SRDS_PLL_REF_CLK_SEL_S1]=1, and when you use 2500Base-X > from the same refclk, you have to set RCW[SRDS_PLL_REF_CLK_SEL_S1]=0. > > What happens under the hood is that these 2 settings result in different > clock net frequencies produced by that PLL, incompatible with each other. > You can either produce one, or the other, at any given time. Wow, this was an elaborate explanation which pushed my understanding one level up. Thank you for investing your time! For clarity, I like to re-state my PLL configuration: - "slow" devices: - RCW[SRDS_PRTCL_S1] = 0x2233 - RCW[SRDS_PLL_REF_CLK_SEL_S1] = 0b11 - PLL 1: 5 GHz (derived from external 125 MHz) - PLL 2: 3.125 GHz (derived from external 156.25 MHz) - "fast" devices: - RCW[SRDS_PRTCL_S1] = 0x1133 - RCW[SRDS_PLL_REF_CLK_SEL_S1] = 0b11 - PLL 1: 5 GHz (derived from external 125 MHz) - PLL 2: 5.15625 GHz (derived from external 156.25 MHz) My patch never reconfigures the PLLs or their clock net frequencies. It assigns lanes to PLL 1 (for SGMII) or PLL 2 (for 2.5SGMII). This is only done on "slow" devices. The "fast" devices always use XFI (PLL 2). > > In Linux we don't change the PLL refclk and clock net selection that was > made by the RCW. Doing so would mean powering down all lanes that use > that PLL, and unbinding and rebinding the Ethernet driver (because the > supported_interfaces mask will change, and the phylink instances need to > be destroyed and re-created to pick up that change). It is a very > invasive operation. The lynx-10g driver seems to alter PLL assignment in lynx_10g_lane_set_pll(). That means that a lane could be operated in SGMII or 2.5SGMII mode by assigning the correct PLL (given that the PLLs are properly pre-configured via RCW). But it also means that in theory I could configure PLL1 = 5 GHz and PLL2 = 5.15625 GHz and then switch between SGMII (100M/1G) and XFI (2.5G / 5G / 10G via rate limiting). This way all media speeds would be possible. However, switching to another PLL isn't enough, I also have to switch the lane's protocol. This worked for SGMII and 2.5SGMII, but I never managed to switch between SGMII to XFI. > >>> You are just requesting to support the 10G, 5G and 2.5G media speeds via >>> LANE_MODE_10GBASER (with pause-based rate adaptation in the Ethernet PHY), >>> and the 1G and 100M media speeds via LANE_MODE_1000BASEX_SGMII. >> >> Yes, that is my minimum target. I hoped that the "fast" device can support >> all speeds, but it's not mandatory. > > What do you mean "can support all speeds", do you mean the media side > speeds? Yes, indeed. > By switching from 10GBase-R to SGMII it would support them all, > wouldn't it? I don't think so. SGMII does only support 100M and 1G. Tell me if I'm wrong. > Above I'm just re-explaining why you can't support 3 SerDes > protocols which require different clock net frequencies when architecturally > we have just 2 PLLs. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-04 19:01 ` Tanjeff Moos @ 2025-12-04 19:34 ` Vladimir Oltean 2025-12-05 11:38 ` Tanjeff Moos 0 siblings, 1 reply; 14+ messages in thread From: Vladimir Oltean @ 2025-12-04 19:34 UTC (permalink / raw) To: Tanjeff Moos; +Cc: Sean Anderson, linux-phy@lists.infradead.org On Thu, Dec 04, 2025 at 08:01:10PM +0100, Tanjeff Moos wrote: > For clarity, I like to re-state my PLL configuration: > > - "slow" devices: > - RCW[SRDS_PRTCL_S1] = 0x2233 > - RCW[SRDS_PLL_REF_CLK_SEL_S1] = 0b11 > - PLL 1: 5 GHz (derived from external 125 MHz) > - PLL 2: 3.125 GHz (derived from external 156.25 MHz) > > - "fast" devices: > - RCW[SRDS_PRTCL_S1] = 0x1133 > - RCW[SRDS_PLL_REF_CLK_SEL_S1] = 0b11 > - PLL 1: 5 GHz (derived from external 125 MHz) > - PLL 2: 5.15625 GHz (derived from external 156.25 MHz) > > My patch never reconfigures the PLLs or their clock net frequencies. It > assigns lanes to PLL 1 (for SGMII) or PLL 2 (for 2.5SGMII). This is only > done on "slow" devices. The "fast" devices always use XFI (PLL 2). And the lynx-10g kernel driver does the same as your patch, plus more (below). > > In Linux we don't change the PLL refclk and clock net selection that was > > made by the RCW. Doing so would mean powering down all lanes that use > > that PLL, and unbinding and rebinding the Ethernet driver (because the > > supported_interfaces mask will change, and the phylink instances need to > > be destroyed and re-created to pick up that change). It is a very > > invasive operation. > The lynx-10g driver seems to alter PLL assignment in lynx_10g_lane_set_pll(). Yes. > That means that a lane could be operated in SGMII or 2.5SGMII mode by assigning > the correct PLL (given that the PLLs are properly pre-configured via RCW). Yes. > But it also means that in theory I could configure PLL1 = 5 GHz and PLL2 = 5.15625 GHz > and then switch between SGMII (100M/1G) and XFI (2.5G / 5G / 10G via rate limiting). > This way all media speeds would be possible. Yes. > However, switching to another PLL isn't enough, I also have to switch the lane's protocol. Yes. > This worked for SGMII and 2.5SGMII, but I never managed to switch between SGMII to XFI. Yes, the SoC architecture on devices with the 10G Lynx didn't initially target the use case of switching between SGMII and XFI, so you won't find documentation on how to do that. We've since validated that the use case works on LS1088A, LS2088A and LS1046A by implementing a procedure called "RCW override", where you use undocumented SoC features in drivers/soc/fsl/guts.c to essentially change the RCW[SRDS_PRTCL_S1] value to something different than what was originally loaded at boot time. We've tested the feature on the above SoCs and it is seamlessly integrated in the lynx-10g driver (it is not invasive, the user is essentially unaware that this is taking place). As mentioned earlier, lynx-10g is in our upstreaming queue, but it may take a while to reach it. You can get the driver with the RCW override support from Linux Factory, though. > >>> You are just requesting to support the 10G, 5G and 2.5G media speeds via > >>> LANE_MODE_10GBASER (with pause-based rate adaptation in the Ethernet PHY), > >>> and the 1G and 100M media speeds via LANE_MODE_1000BASEX_SGMII. > >> > >> Yes, that is my minimum target. I hoped that the "fast" device can support > >> all speeds, but it's not mandatory. > > > > What do you mean "can support all speeds", do you mean the media side > > speeds? > Yes, indeed. > > > By switching from 10GBase-R to SGMII it would support them all, > > wouldn't it? > I don't think so. SGMII does only support 100M and 1G. Tell me if I'm wrong. I hope I didn't confuse you by naming XFI "10GBase-R". This is what the 10GbE SerDes protocol should truly be called - XFI is the name of an electrical standard. All I meant to say here was that by using XFI for the >1G media speeds and SGMII for the <=1G ones, and dynamically switching SerDes protocols each time your Broadcom PHY changes phydev->interface as a result of a media side auto-negotiation process, you should be able to support them all. Basically, the lynx_pcs_config() function, called by phylink on major protocol reconfig paths, calls phy_set_mode_ext(lynx->serdes[i], PHY_MODE_ETHERNET, ifmode), and this is what triggers the SerDes protocol change. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-04 19:34 ` Vladimir Oltean @ 2025-12-05 11:38 ` Tanjeff Moos 2025-12-05 12:44 ` Vladimir Oltean 0 siblings, 1 reply; 14+ messages in thread From: Tanjeff Moos @ 2025-12-05 11:38 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org On 12/4/25 20:34, Vladimir Oltean wrote: > On Thu, Dec 04, 2025 at 08:01:10PM +0100, Tanjeff Moos wrote: >> This worked for SGMII and 2.5SGMII, but I never managed to switch between SGMII to XFI. > > Yes, the SoC architecture on devices with the 10G Lynx didn't initially > target the use case of switching between SGMII and XFI, so you won't find > documentation on how to do that. We've since validated that the use case > works on LS1088A, LS2088A and LS1046A by implementing a procedure called > "RCW override", where you use undocumented SoC features in drivers/soc/fsl/guts.c > to essentially change the RCW[SRDS_PRTCL_S1] value to something different > than what was originally loaded at boot time. We've tested the feature > on the above SoCs and it is seamlessly integrated in the lynx-10g driver > (it is not invasive, the user is essentially unaware that this is taking > place). Sounds promising! > > As mentioned earlier, lynx-10g is in our upstreaming queue, but it may > take a while to reach it. You can get the driver with the RCW override > support from Linux Factory, though. I'm still unsure how to get it. Probably I'm completely off track... I tried flexbuild (https://github.com/nxp/flexbuild) to get sources, but didn't find the patches. I also tried repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-walnascar -m imx-6.12.34-2.1.0.xml to get the Yocto repo (LF is yocto-based, right?). The "IMX" looks suspicious, since we are talking about qoriq, but I didn't find LF for qoriq. The repo https://github.com/nxp-qoriq/linux.git has a branch net/phy which was merged with commit 0229b2500383. So I will try to "extract" this branch with "git format-patch" so I can apply its commits to my OpenWRT-Repo. BTW, I'm still working on getting my board running again after I upgraded to kernel 6.12.34 (by merging the corresponding OpenWRT commit). >>> By switching from 10GBase-R to SGMII it would support them all, >>> wouldn't it? >> I don't think so. SGMII does only support 100M and 1G. Tell me if I'm wrong. > > I hope I didn't confuse you by naming XFI "10GBase-R". This is what the > 10GbE SerDes protocol should truly be called - XFI is the name of an > electrical standard. I did grasp the meaning. But yeah, the terms are confusing, even data sheets mix them up. It took me some time to understand that my PHY does no SGMII (i.e. no in-band autoneg) despite its manual claiming that it does. Anyhow, thanks for clarifying it. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-05 11:38 ` Tanjeff Moos @ 2025-12-05 12:44 ` Vladimir Oltean 2025-12-08 16:50 ` Tanjeff Moos 2026-02-05 16:47 ` Tanjeff Moos 0 siblings, 2 replies; 14+ messages in thread From: Vladimir Oltean @ 2025-12-05 12:44 UTC (permalink / raw) To: Tanjeff Moos; +Cc: Sean Anderson, linux-phy@lists.infradead.org On Fri, Dec 05, 2025 at 12:38:17PM +0100, Tanjeff Moos wrote: > > As mentioned earlier, lynx-10g is in our upstreaming queue, but it may > > take a while to reach it. You can get the driver with the RCW override > > support from Linux Factory, though. > I'm still unsure how to get it. Probably I'm completely off track... > > I tried flexbuild (https://github.com/nxp/flexbuild) to get sources, but > didn't find the patches. > > I also tried > repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-walnascar -m imx-6.12.34-2.1.0.xml > to get the Yocto repo (LF is yocto-based, right?). The "IMX" looks suspicious, > since we are talking about qoriq, but I didn't find LF for qoriq. > > The repo https://github.com/nxp-qoriq/linux.git has a branch net/phy which was > merged with commit 0229b2500383. So I will try to "extract" this branch with > "git format-patch" so I can apply its commits to my OpenWRT-Repo. > > BTW, I'm still working on getting my board running again after I upgraded to > kernel 6.12.34 (by merging the corresponding OpenWRT commit). To my knowledge, LF is just the kernel component. It is a common development process between i.MX and Layerscape. You don't need the user space BSP distribution (Yocto, Flexbuild, whatever). The nxp-qoriq/linux has tags indicating LF releases. The latest is lf-6.12.49-2.2.0, which is what you should be looking at. You can first try to run this kernel directly, and then see using "git log" what you need to pick up from: - drivers/net/pcs/pcs-lynx.c - drivers/net/ethernet/freescale/fman/ - drivers/phy/freescale/phy-fsl-lynx-10g.c - drivers/soc/fsl/guts.c - include/linux/phy/phy-fsl-lynx.h - Documentation/devicetree/bindings/phy/fsl,lynx-10g.yaml The truth is I don't have something ready-made to give you either, and some assembly will be required. The Linux Factory changes were made in chronological order, and it took me some time to disentangle the base SerDes patches from the backplane link training work (which require their own clause 72/73 API which I also had to introduce), and the resulting linearized changes are in my personal net-phy-upstreaming branch. If you want to take a look there, you can, but you are On Your Own in terms of figuring out what you need and integrating these changes into OpenWrt sadly. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-05 12:44 ` Vladimir Oltean @ 2025-12-08 16:50 ` Tanjeff Moos 2026-02-05 16:47 ` Tanjeff Moos 1 sibling, 0 replies; 14+ messages in thread From: Tanjeff Moos @ 2025-12-08 16:50 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org On 12/5/25 13:44, Vladimir Oltean wrote: > The latest is > lf-6.12.49-2.2.0, which is what you should be looking at. On Dec 02 you wrote: To integrate the Lynx 10G driver, you'll need to do that on your own as patches. The correct git tree used by Layerscape boards in Linux Factory is: https://github.com/nxp-qoriq/linux/tree/lf-6.12.34-2.1.0 But since lf-6.12.49-2.2.0 is newer I rather choose this one. > The truth is I don't have something ready-made to give you either, and > some assembly will be required. The Linux Factory changes were made in > chronological order, and it took me some time to disentangle the base > SerDes patches from the backplane link training work (which require > their own clause 72/73 API which I also had to introduce), and the > resulting linearized changes are in my personal net-phy-upstreaming > branch. If you want to take a look there, you can, but you are On Your > Own in terms of figuring out what you need and integrating these changes > into OpenWrt sadly. I'll give it a try. Thanks a lot for your hints! I'll come back to you if I have questions :) Regards, Tanjeff -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2025-12-05 12:44 ` Vladimir Oltean 2025-12-08 16:50 ` Tanjeff Moos @ 2026-02-05 16:47 ` Tanjeff Moos 2026-02-08 13:42 ` Vladimir Oltean 1 sibling, 1 reply; 14+ messages in thread From: Tanjeff Moos @ 2026-02-05 16:47 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org Hello Vladimir, I wish you a great year 2026! Meanwhile I ported some of your code and I got my networking partially running. Details follow, but first I have a question. == Question == The lynx-10g driver disables the managed lanes in lynx_10g_init(), and they are never enabled afterwards. Probably I didn't port the associated code, but can't find where it is. I modified lynx_10g_init() to leave the lane enabled, which solves the problem, but this is a dirty hack. Question: How is the lane supposed to be enabled? == Status of my work == In case you are interested I provide some details here. I ported only part of your code (tag lf-6.12.49-2.2.0), mainly the lynx-10g driver plus some changes you did in pcs-lynx.c, phy-core.c, guts.c, the dpaa drivers plus their associated header files. I deliberately omitted code dealing with c72 autonegotiation (for backplane), as I don't need it. I'm still working with kernel 6.6.119 plus OpenWRT patches and cannot easily upgrade. So far, I have a 2.5 GbE PHY and can run the following modes: - 100M : SGMII - 1G: SGMII - 2.5G: 2500BaseX Switching forth and back the modes works seamlessly (with my dirty hack to power on the lane!). But I didn't test RCW rewriting as it is not needed in this scenario. Kind regards so far, Tanjeff -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2026-02-05 16:47 ` Tanjeff Moos @ 2026-02-08 13:42 ` Vladimir Oltean 2026-02-12 8:30 ` Tanjeff Moos 0 siblings, 1 reply; 14+ messages in thread From: Vladimir Oltean @ 2026-02-08 13:42 UTC (permalink / raw) To: Tanjeff Moos; +Cc: Sean Anderson, linux-phy@lists.infradead.org On Thu, Feb 05, 2026 at 05:47:12PM +0100, Tanjeff Moos wrote: > Question: How is the lane supposed to be enabled? By a phy_init() and phy_power_on() sequence. In current mainline this is done by the fman_memac driver: https://elixir.bootlin.com/linux/v6.18.6/source/drivers/net/ethernet/freescale/fman/fman_memac.c#L526-L545 In LF I've moved the phy_init() https://github.com/nxp-qoriq/linux/blob/lf-6.12.y/drivers/net/pcs/pcs-lynx.c#L563 and phy_power_on() https://github.com/nxp-qoriq/linux/blob/lf-6.12.y/drivers/net/pcs/pcs-lynx.c#L435 to the Lynx PCS driver to simplify MAC drivers a little bit, since they all have to go through the same steps (the Lynx PCS is present in dpaa1, dpaa2, enetc, felix switch). -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Lynx 10G SerDes Driver on my kernel 2026-02-08 13:42 ` Vladimir Oltean @ 2026-02-12 8:30 ` Tanjeff Moos 0 siblings, 0 replies; 14+ messages in thread From: Tanjeff Moos @ 2026-02-12 8:30 UTC (permalink / raw) To: Vladimir Oltean; +Cc: Sean Anderson, linux-phy@lists.infradead.org Am 08.02.26 um 14:42 schrieb Vladimir Oltean: > In LF I've moved the phy_init() > https://github.com/nxp-qoriq/linux/blob/lf-6.12.y/drivers/net/pcs/pcs-lynx.c#L563 > and phy_power_on() > https://github.com/nxp-qoriq/linux/blob/lf-6.12.y/drivers/net/pcs/pcs-lynx.c#L435 > to the Lynx PCS driver to simplify MAC drivers a little bit, since they > all have to go through the same steps (the Lynx PCS is present in dpaa1, > dpaa2, enetc, felix switch). Found it, thanks. I missed this code while porting. Meanwhile I can confirm that all speeds work now, from 100M to 10G. The lynx-10g driver switches between sgmii and 10-BaseR on my "fast" devices. On my "slow" devices it properly switches between sgmii and 2500-BaseX. All works well, thank you for your extensive support on that! Kind regards, Tanjeff -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2026-02-12 8:30 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-12-02 11:12 Lynx 10G SerDes Driver on my kernel Tanjeff Moos 2025-12-02 16:29 ` Vladimir Oltean 2025-12-03 11:41 ` Tanjeff Moos 2025-12-03 12:26 ` Vladimir Oltean 2025-12-03 16:25 ` Tanjeff Moos 2025-12-03 18:00 ` Vladimir Oltean 2025-12-04 19:01 ` Tanjeff Moos 2025-12-04 19:34 ` Vladimir Oltean 2025-12-05 11:38 ` Tanjeff Moos 2025-12-05 12:44 ` Vladimir Oltean 2025-12-08 16:50 ` Tanjeff Moos 2026-02-05 16:47 ` Tanjeff Moos 2026-02-08 13:42 ` Vladimir Oltean 2026-02-12 8:30 ` Tanjeff Moos
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox