[linux 1/2] drivers/net/ftgmac100: Make EDO{R,T}R bits configurable
Cédric Le Goater
clg at kaod.org
Sat Jun 25 03:13:20 AEST 2016
On 06/24/2016 09:25 AM, Joel Stanley wrote:
> From: Andrew Jeffery <andrew at aj.id.au>
>
> These bits are #defined at a fixed location. In order to support future
> hardware that has chosen to move these bits around move the bits into a
> member of the struct ftgmac100.
>
> Signed-off-by: Andrew Jeffery <andrew at aj.id.au>
> Signed-off-by: Joel Stanley <joel at jms.id.au>
Reviewed-by: Cédric Le Goater <clg at kaod.org>
C.
> ---
> drivers/net/ethernet/faraday/ftgmac100.c | 39 ++++++++++++++++++++------------
> drivers/net/ethernet/faraday/ftgmac100.h | 2 --
> 2 files changed, 25 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
> index 818477bbd491..2c2675d6ee3b 100644
> --- a/drivers/net/ethernet/faraday/ftgmac100.c
> +++ b/drivers/net/ethernet/faraday/ftgmac100.c
> @@ -79,6 +79,9 @@ struct ftgmac100 {
>
> bool use_ncsi;
> bool enabled;
> +
> + uint32_t rxdes0_edorr_mask;
> + uint32_t txdes0_edotr_mask;
> };
>
> static int ftgmac100_alloc_rx_page(struct ftgmac100 *priv,
> @@ -268,10 +271,11 @@ static bool ftgmac100_rxdes_packet_ready(struct ftgmac100_rxdes *rxdes)
> return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_RXPKT_RDY);
> }
>
> -static void ftgmac100_rxdes_set_dma_own(struct ftgmac100_rxdes *rxdes)
> +static void ftgmac100_rxdes_set_dma_own(const struct ftgmac100 *priv,
> + struct ftgmac100_rxdes *rxdes)
> {
> /* clear status bits */
> - rxdes->rxdes0 &= cpu_to_le32(FTGMAC100_RXDES0_EDORR);
> + rxdes->rxdes0 &= cpu_to_le32(priv->rxdes0_edorr_mask);
> }
>
> static bool ftgmac100_rxdes_rx_error(struct ftgmac100_rxdes *rxdes)
> @@ -309,9 +313,10 @@ static bool ftgmac100_rxdes_multicast(struct ftgmac100_rxdes *rxdes)
> return rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_MULTICAST);
> }
>
> -static void ftgmac100_rxdes_set_end_of_ring(struct ftgmac100_rxdes *rxdes)
> +static void ftgmac100_rxdes_set_end_of_ring(const struct ftgmac100 *priv,
> + struct ftgmac100_rxdes *rxdes)
> {
> - rxdes->rxdes0 |= cpu_to_le32(FTGMAC100_RXDES0_EDORR);
> + rxdes->rxdes0 |= cpu_to_le32(priv->rxdes0_edorr_mask);
> }
>
> static void ftgmac100_rxdes_set_dma_addr(struct ftgmac100_rxdes *rxdes,
> @@ -401,7 +406,7 @@ ftgmac100_rx_locate_first_segment(struct ftgmac100 *priv)
> if (ftgmac100_rxdes_first_segment(rxdes))
> return rxdes;
>
> - ftgmac100_rxdes_set_dma_own(rxdes);
> + ftgmac100_rxdes_set_dma_own(priv, rxdes);
> ftgmac100_rx_pointer_advance(priv);
> rxdes = ftgmac100_current_rxdes(priv);
> }
> @@ -472,7 +477,7 @@ static void ftgmac100_rx_drop_packet(struct ftgmac100 *priv)
> if (ftgmac100_rxdes_last_segment(rxdes))
> done = true;
>
> - ftgmac100_rxdes_set_dma_own(rxdes);
> + ftgmac100_rxdes_set_dma_own(priv, rxdes);
> ftgmac100_rx_pointer_advance(priv);
> rxdes = ftgmac100_current_rxdes(priv);
> } while (!done && ftgmac100_rxdes_packet_ready(rxdes));
> @@ -564,10 +569,10 @@ static bool ftgmac100_rx_packet(struct ftgmac100 *priv, int *processed)
> /******************************************************************************
> * internal functions (transmit descriptor)
> *****************************************************************************/
> -static void ftgmac100_txdes_reset(struct ftgmac100_txdes *txdes)
> +static void ftgmac100_txdes_reset(const struct ftgmac100 *priv, struct ftgmac100_txdes *txdes)
> {
> /* clear all except end of ring bit */
> - txdes->txdes0 &= cpu_to_le32(FTGMAC100_TXDES0_EDOTR);
> + txdes->txdes0 &= cpu_to_le32(priv->txdes0_edotr_mask);
> txdes->txdes1 = 0;
> txdes->txdes2 = 0;
> txdes->txdes3 = 0;
> @@ -588,9 +593,10 @@ static void ftgmac100_txdes_set_dma_own(struct ftgmac100_txdes *txdes)
> txdes->txdes0 |= cpu_to_le32(FTGMAC100_TXDES0_TXDMA_OWN);
> }
>
> -static void ftgmac100_txdes_set_end_of_ring(struct ftgmac100_txdes *txdes)
> +static void ftgmac100_txdes_set_end_of_ring(const struct ftgmac100 *priv,
> + struct ftgmac100_txdes *txdes)
> {
> - txdes->txdes0 |= cpu_to_le32(FTGMAC100_TXDES0_EDOTR);
> + txdes->txdes0 |= cpu_to_le32(priv->txdes0_edotr_mask);
> }
>
> static void ftgmac100_txdes_set_first_segment(struct ftgmac100_txdes *txdes)
> @@ -709,7 +715,7 @@ static bool ftgmac100_tx_complete_packet(struct ftgmac100 *priv)
>
> dev_kfree_skb(skb);
>
> - ftgmac100_txdes_reset(txdes);
> + ftgmac100_txdes_reset(priv, txdes);
>
> ftgmac100_tx_clean_pointer_advance(priv);
>
> @@ -800,7 +806,7 @@ static int ftgmac100_alloc_rx_page(struct ftgmac100 *priv,
>
> ftgmac100_rxdes_set_page(priv, rxdes, page);
> ftgmac100_rxdes_set_dma_addr(rxdes, map);
> - ftgmac100_rxdes_set_dma_own(rxdes);
> + ftgmac100_rxdes_set_dma_own(priv, rxdes);
> return 0;
> }
>
> @@ -847,7 +853,8 @@ static int ftgmac100_alloc_buffers(struct ftgmac100 *priv)
> return -ENOMEM;
>
> /* initialize RX ring */
> - ftgmac100_rxdes_set_end_of_ring(&priv->descs->rxdes[RX_QUEUE_ENTRIES - 1]);
> + ftgmac100_rxdes_set_end_of_ring(priv,
> + &priv->descs->rxdes[RX_QUEUE_ENTRIES - 1]);
>
> for (i = 0; i < RX_QUEUE_ENTRIES; i++) {
> struct ftgmac100_rxdes *rxdes = &priv->descs->rxdes[i];
> @@ -857,7 +864,8 @@ static int ftgmac100_alloc_buffers(struct ftgmac100 *priv)
> }
>
> /* initialize TX ring */
> - ftgmac100_txdes_set_end_of_ring(&priv->descs->txdes[TX_QUEUE_ENTRIES - 1]);
> + ftgmac100_txdes_set_end_of_ring(priv,
> + &priv->descs->txdes[TX_QUEUE_ENTRIES - 1]);
> return 0;
>
> err:
> @@ -1350,6 +1358,9 @@ static int ftgmac100_probe(struct platform_device *pdev)
> priv->use_ncsi = false;
> }
>
> + priv->rxdes0_edorr_mask = BIT(15);
> + priv->txdes0_edotr_mask = BIT(15);
> +
> netdev->ethtool_ops = &ftgmac100_ethtool_ops;
> netdev->netdev_ops = &ftgmac100_netdev_ops;
> if (pdev->dev.of_node &&
> diff --git a/drivers/net/ethernet/faraday/ftgmac100.h b/drivers/net/ethernet/faraday/ftgmac100.h
> index 13408d448b05..c258586ce4a4 100644
> --- a/drivers/net/ethernet/faraday/ftgmac100.h
> +++ b/drivers/net/ethernet/faraday/ftgmac100.h
> @@ -189,7 +189,6 @@ struct ftgmac100_txdes {
> } __attribute__ ((aligned(16)));
>
> #define FTGMAC100_TXDES0_TXBUF_SIZE(x) ((x) & 0x3fff)
> -#define FTGMAC100_TXDES0_EDOTR (1 << 15)
> #define FTGMAC100_TXDES0_CRC_ERR (1 << 19)
> #define FTGMAC100_TXDES0_LTS (1 << 28)
> #define FTGMAC100_TXDES0_FTS (1 << 29)
> @@ -215,7 +214,6 @@ struct ftgmac100_rxdes {
> } __attribute__ ((aligned(16)));
>
> #define FTGMAC100_RXDES0_VDBC 0x3fff
> -#define FTGMAC100_RXDES0_EDORR (1 << 15)
> #define FTGMAC100_RXDES0_MULTICAST (1 << 16)
> #define FTGMAC100_RXDES0_BROADCAST (1 << 17)
> #define FTGMAC100_RXDES0_RX_ERR (1 << 18)
>
More information about the openbmc
mailing list