From: Daniel Thompson <daniel@riscstar.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: Alex Elder <elder@riscstar.com>,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com,
maxime.chevallier@bootlin.com, rmk+kernel@armlinux.org.uk,
andersson@kernel.org, konradybcio@kernel.org, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, linusw@kernel.org,
brgl@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org,
mohd.anwar@oss.qualcomm.com, a0987203069@gmail.com,
alexandre.torgue@foss.st.com, ast@kernel.org,
boon.khai.ng@altera.com, chenchuangyu@xiaomi.com,
chenhuacai@kernel.org, daniel@iogearbox.net, hawk@kernel.org,
hkallweit1@gmail.com, inochiama@gmail.com,
john.fastabend@gmail.com, julianbraha@gmail.com,
livelycarpet87@gmail.com, matthew.gerlach@altera.com,
mcoquelin.stm32@gmail.com, me@ziyao.cc,
prabhakar.mahadev-lad.rj@bp.renesas.com,
richardcochran@gmail.com, rohan.g.thomas@altera.com,
sdf@fomichev.me, siyanteng@cqsoftware.com.cn,
weishangjuan@eswincomputing.com, wens@kernel.org,
netdev@vger.kernel.org, bpf@vger.kernel.org,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-gpio@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next 10/12] net: stmmac: tc956x: add TC956x/QPS615 support
Date: Thu, 7 May 2026 17:03:46 +0100 [thread overview]
Message-ID: <afy34kj2hPxIlArO@aspen.lan> (raw)
In-Reply-To: <2ce5897d-5bbb-486a-b0f0-0e30e54b451a@lunn.ch>
On Fri, May 01, 2026 at 09:04:58PM +0200, Andrew Lunn wrote:
> > +static struct tc956x_mac_speed mac_speed[] = {
> > + { PHY_INTERFACE_MODE_2500BASEX, SPEED_2500, SP_SEL_SGMII_2500M, },
> > + { PHY_INTERFACE_MODE_SGMII, SPEED_2500, SP_SEL_SGMII_2500M, },
> > + { PHY_INTERFACE_MODE_SGMII, SPEED_1000, SP_SEL_SGMII_1000M, },
>
> That looks odd. Some vendors implemented 2500BaseX using SGMII
> overclocked. But that is not strictly 2500BaseX. Having the 2500BASEX
> entry suggests you have real 2500BASEX, so why have an SGMII entry
> with SPEED_2500?
This is a consequence of the code that uses this lookup table being
called both during initialization and from the fix_mac_speed() callback.
During initialization we only have the value in plat->phy_interface to
go on so we run the lookup table using plat->phy_interface (which is
typically PHY_INTERFACE_MODE_SGMII) and with the maximum permitted
speed.
I haven't got detailed enough notes to allow me to double check but I
think there were problems completing the initial MAC reset if we didn't
write something sensible to the hardware during initialization.
During fix_max_speed() we get told to adopt 2500base-x. Reviewing the
code I can see we don't propagate that and just use
plat->phy_interface for fix_mac_speed(). I will fix the code to that
the requested interface propagates properly to the lookup table but I
think we would still rely on the SGMII entry to get sane initial values
to write to the hardware.
> > +/* We have one IRQ chip instance with 25 IRQs in its domain */
>
> One per MAC, or one overall?
One per MAC.
> > +static struct irq_domain *
> > +tc956x_msigen_irq_domain_instantiate(struct tc956x_data *td)
> > +{
> > + struct irq_domain_chip_generic_info dgc_info;
> > + struct irq_domain_info info;
> > +
> > + dgc_info.name = "tc956x-msigen";
>
> If it is one per MAC, maybe this name should indicate which instance
> of the MAC this is.
Will do.
> > +static int tc956x_mac_setup(void *apriv, struct mac_device_info *mac)
> > +{
> > + struct stmmac_priv *priv = apriv;
> > + struct stmmac_desc_ops *desc;
> > + struct stmmac_dma_ops *dma;
> > + struct tc956x_data *td;
> > +
> > + td = priv->plat->bsp_priv;
> > +
> > + /* dwxgmac301_dma_ops needs extending to provide DMA address translation */
> > + dma = &td->dma;
> > + *dma = dwxgmac301_dma_ops;
> > + dma->init_rx_chan = tc956x_dma_init_rx_chan;
> > + dma->init_tx_chan = tc956x_dma_init_tx_chan;
> > + mac->dma = dma;
>
> I could be reading this wrong....
>
> dma points to the global dwxgmac301_dma_ops, which you added a few
> patches back.
>
> You then modify it, changing two values in it.
>
> Doesn't that break any other dwxgmac301 in the system? Shouldn't you
> be making a copy of the global structure, and then making
> modifications to your copy? mac->dma then points to your copy?
That's exactly what this code does.
`*dma = dwxgmac301_dma_ops` is a structure copy, we never take a pointer
to dwxgmac301_dma_ops (and if we did, dwxgmac301_dma_ops is const so I
think we'd get a kernel oops if we tried to write to rodata).
Would to code be easier to read if we dropped the local `dma` variable
since that would make it clearer that td->dma is not a pointer? More
like:
+ /* dwxgmac301_dma_ops needs extending to provide DMA address translation */
+ td->dma = dwxgmac301_dma_ops;
+ td->dma.init_rx_chan = tc956x_dma_init_rx_chan;
+ td->dma.init_tx_chan = tc956x_dma_init_tx_chan;
+ mac->dma = &dma;
>
> > + /* dwxgmac210_desc_ops also needs extending for the same reason */
> > + desc = &td->desc;
> > + *desc = dwxgmac210_desc_ops;
> > + desc->set_addr = tc956x_desc_set_addr;
> > + desc->set_sec_addr = tc956x_desc_set_sec_addr;
> > + mac->desc = desc;
>
> And the same problem here?
>
> > +/* Called by tc956x_dwmac_probe(); return errors with dev_err_probe() */
> > +static int tc956x_dwmac_parse_dt(struct tc956x_data *td)
> > +{
> > + struct device_node *mdio_node;
> > + struct device *dev = td->dev;
> > + struct device_node *np;
> > +
> > + np = dev_of_node(dev);
> > + if (!np)
> > + return dev_err_probe(dev, -EINVAL, "no devicetree node\n");
> > +
> > + /* Find the MDIO bus */
> > + for_each_child_of_node(np, mdio_node) {
> > + if (of_device_is_compatible(mdio_node,
> > + "snps,dwmac-mdio"))
> > + break;
> > + }
>
> It looks like if you put the ethernet properties into an ethernet node
> in DT, this might go away? Or at least allow you to use
> stmmac_of_get_mdio().
Alex has started looking into adding an ethernet node.
Daniel.
next prev parent reply other threads:[~2026-05-07 16:03 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260501155421.3329862-1-elder@riscstar.com>
[not found] ` <20260501155421.3329862-10-elder@riscstar.com>
2026-05-04 12:46 ` [PATCH net-next 09/12] gpio: tc956x: add TC956x/QPS615 support Bartosz Golaszewski
2026-05-04 13:07 ` Alex Elder
[not found] ` <1fe6bcb7-b5c0-454f-ad54-5014006edab5@gmail.com>
2026-05-06 18:51 ` Alex Elder
[not found] ` <736fb3b7-c88a-4ec4-96ad-d1b79cc48d30@lunn.ch>
[not found] ` <30cec7dd-ac3c-47ab-896a-c29992bd5ba5@riscstar.com>
[not found] ` <3666e3e6-e6f3-4cbf-b9fe-caa394fbab7c@lunn.ch>
2026-05-06 18:21 ` Alex Elder
2026-05-06 19:43 ` Andrew Lunn
2026-05-06 20:25 ` Alex Elder
2026-05-06 21:43 ` Andrew Lunn
2026-05-06 22:41 ` Alex Elder
[not found] ` <3e5a42cc-53b8-4065-a32a-d754be40b4c7@lunn.ch>
2026-05-07 18:39 ` Alex Elder
[not found] ` <20260501155421.3329862-5-elder@riscstar.com>
[not found] ` <9203d8dd-8ec0-415e-9c2e-5b06b1b8dc11@lunn.ch>
[not found] ` <539b9de3-4a78-44cf-9085-06cd0cab2d17@riscstar.com>
[not found] ` <4cbe1a04-4a49-4e4d-95f4-ed4df1afa24f@lunn.ch>
2026-05-04 13:36 ` [PATCH net-next 04/12] net: stmmac: dma: create a separate dma_device pointer Alex Elder
[not found] ` <20260501155421.3329862-3-elder@riscstar.com>
[not found] ` <f9a581a2-02ea-4948-8c97-835cb7638b1d@lunn.ch>
2026-05-05 15:58 ` [PATCH net-next 02/12] net: pcs: pcs-xpcs: select operating mode for 10G-baseR capable PCS Daniel Thompson
[not found] ` <20260501155421.3329862-4-elder@riscstar.com>
[not found] ` <91332fc1-11ed-444e-a211-699420cf0108@lunn.ch>
2026-05-06 9:46 ` [PATCH net-next 03/12] net: pcs: pcs-xpcs: Preserve BMCR_ANENBLE during link up Daniel Thompson
[not found] ` <20260501155421.3329862-11-elder@riscstar.com>
2026-05-05 16:38 ` [PATCH net-next 10/12] net: stmmac: tc956x: add TC956x/QPS615 support Mohd Ayaan Anwar
2026-05-05 16:46 ` Alex Elder
2026-05-06 2:30 ` Xilin Wu
2026-05-06 17:44 ` Alex Elder
2026-05-07 13:57 ` Xilin Wu
2026-05-07 14:14 ` Andrew Lunn
2026-05-11 15:41 ` Daniel Thompson
2026-05-06 12:59 ` Xilin Wu
2026-05-06 14:19 ` Andrew Lunn
2026-05-06 14:35 ` Xilin Wu
2026-05-06 14:45 ` Andrew Lunn
2026-05-06 15:38 ` Xilin Wu
2026-05-06 15:39 ` Daniel Thompson
2026-05-06 15:44 ` Xilin Wu
2026-05-06 15:56 ` Andrew Lunn
2026-05-06 16:00 ` Xilin Wu
2026-05-06 15:28 ` Daniel Thompson
2026-05-06 19:52 ` Andrew Lunn
2026-05-07 18:44 ` Alex Elder
2026-05-08 13:09 ` Xilin Wu
2026-05-08 13:36 ` Andrew Lunn
2026-05-08 13:41 ` Xilin Wu
[not found] ` <2ce5897d-5bbb-486a-b0f0-0e30e54b451a@lunn.ch>
2026-05-07 16:03 ` Daniel Thompson [this message]
2026-05-07 16:29 ` Andrew Lunn
2026-05-08 11:25 ` Daniel Thompson
2026-05-08 13:34 ` Andrew Lunn
2026-05-08 15:54 ` Daniel Thompson
[not found] ` <20260501155421.3329862-9-elder@riscstar.com>
2026-05-07 14:12 ` [PATCH net-next 08/12] dt-bindings: net: toshiba,tc965x-dwmac: add TC956x Ethernet bridge Bjorn Andersson
2026-05-07 14:19 ` Andrew Lunn
2026-05-07 16:12 ` Bjorn Andersson
2026-05-07 18:37 ` Alex Elder
2026-05-10 2:25 ` Bjorn Andersson
[not found] ` <20260504-fascinating-teal-tarsier-b116c8@quoll>
2026-05-04 13:34 ` Alex Elder
2026-05-07 14:47 ` Daniel Thompson
[not found] ` <1f34cbce-e2dd-4e80-b136-55d0efa50002@lunn.ch>
2026-05-07 22:17 ` Alex Elder
2026-05-07 23:39 ` Rob Herring
2026-05-07 23:41 ` Rob Herring
[not found] ` <20260501155421.3329862-13-elder@riscstar.com>
[not found] ` <d29621c3-07fc-4720-abff-d8901a0d791c@lunn.ch>
2026-05-05 16:25 ` [PATCH net-next 12/12] arm64: dts: qcom: qcs6490-rb3gen2: enable TC9564 with a single QCS8081 phy Daniel Thompson
2026-05-05 16:42 ` Mohd Ayaan Anwar
2026-05-05 16:46 ` Alex Elder
2026-05-08 14:03 ` Konrad Dybcio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=afy34kj2hPxIlArO@aspen.lan \
--to=daniel@riscstar.com \
--cc=a0987203069@gmail.com \
--cc=alexandre.torgue@foss.st.com \
--cc=andersson@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=arnd@arndb.de \
--cc=ast@kernel.org \
--cc=boon.khai.ng@altera.com \
--cc=bpf@vger.kernel.org \
--cc=brgl@kernel.org \
--cc=chenchuangyu@xiaomi.com \
--cc=chenhuacai@kernel.org \
--cc=conor+dt@kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=elder@riscstar.com \
--cc=gregkh@linuxfoundation.org \
--cc=hawk@kernel.org \
--cc=hkallweit1@gmail.com \
--cc=inochiama@gmail.com \
--cc=john.fastabend@gmail.com \
--cc=julianbraha@gmail.com \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=livelycarpet87@gmail.com \
--cc=matthew.gerlach@altera.com \
--cc=maxime.chevallier@bootlin.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=me@ziyao.cc \
--cc=mohd.anwar@oss.qualcomm.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=richardcochran@gmail.com \
--cc=rmk+kernel@armlinux.org.uk \
--cc=robh@kernel.org \
--cc=rohan.g.thomas@altera.com \
--cc=sdf@fomichev.me \
--cc=siyanteng@cqsoftware.com.cn \
--cc=weishangjuan@eswincomputing.com \
--cc=wens@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox