lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 11 Nov 2019 13:15:11 +0100
From:   Matthias Brugger <matthias.bgg@...il.com>
To:     Stefan Wahren <wahrenst@....net>,
        Matthias Brugger <matthias.bgg@...nel.org>,
        Matthias Brugger <mbrugger@...e.com>,
        "David S . Miller" <davem@...emloft.net>,
        Florian Fainelli <f.fainelli@...il.com>
Cc:     Eric Anholt <eric@...olt.net>,
        Nicolas Saenz Julienne <nsaenzjulienne@...e.de>,
        Doug Berger <opendmb@...il.com>, netdev@...r.kernel.org,
        bcm-kernel-feedback-list@...adcom.com,
        linux-arm-kernel@...ts.infradead.org
Subject: Re: [PATCH V4 net-next 4/7] net: bcmgenet: Add BCM2711 support



On 11/11/2019 07:55, Stefan Wahren wrote:
> The BCM2711 needs a different maximum DMA burst length. If not set
> accordingly a timeout in the transmit queue happens and no package
> can be sent. So use the new compatible to derive this value.
> 
> Until now the GENET HW version was used as the platform identifier.
> This doesn't work with SoC-specific modifications, so introduce a proper
> platform data structure.
> 
> Signed-off-by: Stefan Wahren <wahrenst@....net>
> Acked-by: Florian Fainelli <f.fainelli@...il.com>

Reviewed-by: Matthias Brugger <mbrugger@...e.com>

> =2D--
>  drivers/net/ethernet/broadcom/genet/bcmgenet.c | 63 +++++++++++++++++++++=
> +----
>  drivers/net/ethernet/broadcom/genet/bcmgenet.h |  1 +
>  2 files changed, 54 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/=
> ethernet/broadcom/genet/bcmgenet.c
> index ee4d8ef..120fa05 100644
> =2D-- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> @@ -2576,7 +2576,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *p=
> riv)
>  	}
> 
>  	/* Init rDma */
> -	bcmgenet_rdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
> +	bcmgenet_rdma_writel(priv, priv->dma_max_burst_length,
> +			     DMA_SCB_BURST_SIZE);
> 
>  	/* Initialize Rx queues */
>  	ret =3D bcmgenet_init_rx_queues(priv->dev);
> @@ -2589,7 +2590,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *p=
> riv)
>  	}
> 
>  	/* Init tDma */
> -	bcmgenet_tdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
> +	bcmgenet_tdma_writel(priv, priv->dma_max_burst_length,
> +			     DMA_SCB_BURST_SIZE);
> 
>  	/* Initialize Tx queues */
>  	bcmgenet_init_tx_queues(priv->dev);
> @@ -3420,12 +3422,48 @@ static void bcmgenet_set_hw_params(struct bcmgenet=
> _priv *priv)
>  		params->words_per_bd);
>  }
> 
> +struct bcmgenet_plat_data {
> +	enum bcmgenet_version version;
> +	u32 dma_max_burst_length;
> +};
> +
> +static const struct bcmgenet_plat_data v1_plat_data =3D {
> +	.version =3D GENET_V1,
> +	.dma_max_burst_length =3D DMA_MAX_BURST_LENGTH,
> +};
> +
> +static const struct bcmgenet_plat_data v2_plat_data =3D {
> +	.version =3D GENET_V2,
> +	.dma_max_burst_length =3D DMA_MAX_BURST_LENGTH,
> +};
> +
> +static const struct bcmgenet_plat_data v3_plat_data =3D {
> +	.version =3D GENET_V3,
> +	.dma_max_burst_length =3D DMA_MAX_BURST_LENGTH,
> +};
> +
> +static const struct bcmgenet_plat_data v4_plat_data =3D {
> +	.version =3D GENET_V4,
> +	.dma_max_burst_length =3D DMA_MAX_BURST_LENGTH,
> +};
> +
> +static const struct bcmgenet_plat_data v5_plat_data =3D {
> +	.version =3D GENET_V5,
> +	.dma_max_burst_length =3D DMA_MAX_BURST_LENGTH,
> +};
> +
> +static const struct bcmgenet_plat_data bcm2711_plat_data =3D {
> +	.version =3D GENET_V5,
> +	.dma_max_burst_length =3D 0x08,
> +};
> +
>  static const struct of_device_id bcmgenet_match[] =3D {
> -	{ .compatible =3D "brcm,genet-v1", .data =3D (void *)GENET_V1 },
> -	{ .compatible =3D "brcm,genet-v2", .data =3D (void *)GENET_V2 },
> -	{ .compatible =3D "brcm,genet-v3", .data =3D (void *)GENET_V3 },
> -	{ .compatible =3D "brcm,genet-v4", .data =3D (void *)GENET_V4 },
> -	{ .compatible =3D "brcm,genet-v5", .data =3D (void *)GENET_V5 },
> +	{ .compatible =3D "brcm,genet-v1", .data =3D &v1_plat_data },
> +	{ .compatible =3D "brcm,genet-v2", .data =3D &v2_plat_data },
> +	{ .compatible =3D "brcm,genet-v3", .data =3D &v3_plat_data },
> +	{ .compatible =3D "brcm,genet-v4", .data =3D &v4_plat_data },
> +	{ .compatible =3D "brcm,genet-v5", .data =3D &v5_plat_data },
> +	{ .compatible =3D "brcm,bcm2711-genet-v5", .data =3D &bcm2711_plat_data =
> },
>  	{ },
>  };
>  MODULE_DEVICE_TABLE(of, bcmgenet_match);
> @@ -3435,6 +3473,7 @@ static int bcmgenet_probe(struct platform_device *pd=
> ev)
>  	struct bcmgenet_platform_data *pd =3D pdev->dev.platform_data;
>  	struct device_node *dn =3D pdev->dev.of_node;
>  	const struct of_device_id *of_id =3D NULL;
> +	const struct bcmgenet_plat_data *pdata;
>  	struct bcmgenet_priv *priv;
>  	struct net_device *dev;
>  	const void *macaddr;
> @@ -3516,10 +3555,14 @@ static int bcmgenet_probe(struct platform_device *=
> pdev)
> 
>  	priv->dev =3D dev;
>  	priv->pdev =3D pdev;
> -	if (of_id)
> -		priv->version =3D (enum bcmgenet_version)of_id->data;
> -	else
> +	if (of_id) {
> +		pdata =3D of_id->data;
> +		priv->version =3D pdata->version;
> +		priv->dma_max_burst_length =3D pdata->dma_max_burst_length;
> +	} else {
>  		priv->version =3D pd->genet_version;
> +		priv->dma_max_burst_length =3D DMA_MAX_BURST_LENGTH;
> +	}
> 
>  	priv->clk =3D devm_clk_get(&priv->pdev->dev, "enet");
>  	if (IS_ERR(priv->clk)) {
> diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/=
> ethernet/broadcom/genet/bcmgenet.h
> index dbc69d8..a565919 100644
> =2D-- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h
> +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
> @@ -664,6 +664,7 @@ struct bcmgenet_priv {
>  	bool crc_fwd_en;
> 
>  	unsigned int dma_rx_chk_bit;
> +	u32 dma_max_burst_length;
> 
>  	u32 msg_enable;
> 
> =2D-
> 2.7.4
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ