[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <arxxtmtifgus4qfai5nkemg46l5ql5ptqfodnflqpf2eenfj57@4x4h3vmcuw5x>
Date: Fri, 3 May 2024 21:08:17 +0300
From: Serge Semin <fancer.lancer@...il.com>
To: Yanteng Si <siyanteng@...ngson.cn>
Cc: andrew@...n.ch, hkallweit1@...il.com, peppe.cavallaro@...com,
alexandre.torgue@...s.st.com, joabreu@...opsys.com, Jose.Abreu@...opsys.com,
chenhuacai@...nel.org, linux@...linux.org.uk, guyinggang@...ngson.cn,
netdev@...r.kernel.org, chris.chenfeiyang@...il.com, siyanteng01@...il.com
Subject: Re: [PATCH net-next v12 06/15] net: stmmac: dwmac-loongson: Split up
the platform data initialization
> [PATCH net-next v12 06/15] net: stmmac: dwmac-loongson: Split up the platform data initialization
Please convert the subject to being more specific, like this:
net: stmmac: dwmac-loongson: Detach GMAC-specific platform data init
On Thu, Apr 25, 2024 at 09:04:37PM +0800, Yanteng Si wrote:
> Based on IP core classification, loongson has two types of network
What is the real company name? At least start the name with the
capital letter.
* everywhere
> devices: GMAC and GNET. GMAC's ip_core id is 0x35/0x37, while GNET's
> ip_core id is 0x37/0x10.
s/ip_core/IP-core
Once again the IP-core ID isn't _hex_, but a number of the format:
"v+Major.Minor"
so use the _real_ IP-core version number everywhere. Note mentioning
that some of your GNET device has the GMAC_VERSION.SNPSVER hardwired
to 0x10 is completely redundant in this and many other context. The
only place where it's relevant is the patch(es) where you have the
Snps ID override.
>
> Device tables:
>
> device type pci_id snps_id channel
> ls2k1000 gmac 7a03 0x35/0x37 1
> ls7a1000 gmac 7a03 0x35/0x37 1
> ls2k2000 gnet 7a13 0x10 8
> ls7a2000 gnet 7a13 0x37 1
s/gmac/GMAC
s/gnet/GNET
s/pci_id/PCI Dev ID
s/snsp_id/Synopys Version
s/channels/DMA-channels
s/ls2k/LS2K
s/ls7a/LS7A
* everywhere
>
> The GMAC device only has a MAC chip inside and needs an
> external PHY chip;
>
> To later distinguish 8-channel gnet devices from single-channel
> gnet/gmac devices, move rx_queues_to_use loongson_default_data
> to loongson_dwmac_probe(). Also move mac_interface to
> loongson_default_data().
Again. This is only a part of the reason why you need this change.
The main reason is to provide the two-leveled platform data init
functions: fist one is the common method initializing the data common
for both GMAC and GNET, second one is the device-specific data
initializer.
To sum up I would change the commit log to something like this:
"Loongson delivers two types of the network devices: Loongson GMAC and
Loongson GNET in the framework of four CPU/Chipsets revisions:
Chip Network PCI Dev ID Synopys Version DMA-channel
LS2K1000 CPU GMAC 0x7a03 v3.50a/v3.73a 1
LS7A1000 Chipset GMAC 0x7a03 v3.50a/v3.73a 1
LS2K2000 CPU GNET 0x7a13 v3.73a 8
LS7A2000 Chipset GNET 0x7a13 v3.73a 1
The driver currently supports the chips with the Loongson GMAC network
device. As a preparation before adding the Loongson GNET support
detach the Loongson GMAC-specific platform data initializations to the
loongson_gmac_data() method and preserve the common settings in the
loongson_default_data().
While at it drop the return value statement from the
loongson_default_data() method as redundant."
>
> Signed-off-by: Feiyang Chen <chenfeiyang@...ngson.cn>
> Signed-off-by: Yinggang Gu <guyinggang@...ngson.cn>
> Signed-off-by: Yanteng Si <siyanteng@...ngson.cn>
> ---
> .../ethernet/stmicro/stmmac/dwmac-loongson.c | 20 ++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
> index 4e0838db4259..904e288d0be0 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
> @@ -11,22 +11,20 @@
>
> #define PCI_DEVICE_ID_LOONGSON_GMAC 0x7a03
>
> -static int loongson_default_data(struct plat_stmmacenet_data *plat)
> +static void loongson_default_data(struct plat_stmmacenet_data *plat)
> {
> plat->clk_csr = 2; /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */
> plat->has_gmac = 1;
> plat->force_sf_dma_mode = 1;
>
> + plat->mac_interface = PHY_INTERFACE_MODE_GMII;
> +
I double-checked this part in my HW and in the databooks. DW GMAC with
_RGMII_ PHY-interfaces can't be equipped with a PCS (STMMAC driver is
wrong in considering otherwise at least in the Auto-negotiation part).
PCS is only available for the RTI, RTBI and SGMII interfaces.
You can double-check that by checking out the DMA_HW_FEATURE.PCSSEL
flag state. I'll be surprised if it's set in your case. If it isn't
then either drop the plat_stmmacenet_data::mac_interface
initialization or (as Russell suggested) initialize it with
PHY_INTERFACE_MODE_NA. But do that in a separate pre-requisite patch!
> /* Set default value for unicast filter entries */
> plat->unicast_filter_entries = 1;
>
> /* Set the maxmtu to a default of JUMBO_LEN */
> plat->maxmtu = JUMBO_LEN;
>
> - /* Set default number of RX and TX queues to use */
> - plat->tx_queues_to_use = 1;
> - plat->rx_queues_to_use = 1;
> -
> /* Disable Priority config by default */
> plat->tx_queues_cfg[0].use_prio = false;
> plat->rx_queues_cfg[0].use_prio = false;
> @@ -41,6 +39,12 @@ static int loongson_default_data(struct plat_stmmacenet_data *plat)
> plat->dma_cfg->pblx8 = true;
>
> plat->multicast_filter_bins = 256;
> +}
> +
> +static int loongson_gmac_data(struct plat_stmmacenet_data *plat)
> +{
> + loongson_default_data(plat);
> +
> return 0;
> }
>
> @@ -109,11 +113,10 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
> }
>
> plat->phy_interface = phy_mode;
> - plat->mac_interface = PHY_INTERFACE_MODE_GMII;
>
> pci_set_master(pdev);
>
> - loongson_default_data(plat);
> + loongson_gmac_data(plat);
> pci_enable_msi(pdev);
> memset(&res, 0, sizeof(res));
> res.addr = pcim_iomap_table(pdev)[0];
> @@ -138,6 +141,9 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
> goto err_disable_msi;
> }
>
> + plat->tx_queues_to_use = 1;
> + plat->rx_queues_to_use = 1;
> +
You can freely move this to loongson_gmac_data() method. And then, in
the patch adding the GNET-support, you'll be able to provide these fields
initialization in the loongson_gnet_data() method together with the
plat->tx_queues_cfg[*].coe_unsupported flag init. Thus the probe()
method will get to be smaller and easier to read, and the
loongson_*_data() method will be more coherent.
-Serge(y)
> ret = stmmac_dvr_probe(&pdev->dev, plat, &res);
> if (ret)
> goto err_disable_msi;
> --
> 2.31.4
>
Powered by blists - more mailing lists