[U-Boot] [PATCH v1 19/41] net: mvpp2: adjust mvpp2_{rxq, txq}_init for PPv2.2

Joe Hershberger joe.hershberger at gmail.com
Tue Mar 21 17:25:35 UTC 2017


On Tue, Mar 21, 2017 at 9:27 AM, Stefan Roese <sr at denx.de> wrote:
> From: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
>
> In PPv2.2, the MVPP2_RXQ_DESC_ADDR_REG and MVPP2_TXQ_DESC_ADDR_REG
> registers have a slightly different layout, because they need to contain
> a 64-bit address for the RX and TX descriptor arrays. This commit
> adjusts those functions accordingly.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> Signed-off-by: Stefan Roese <sr at denx.de>

Acked-by: Joe Hershberger <joe.hershberger at ni.com>

>
>  drivers/net/mvpp2.c | 26 +++++++++++++++++++++-----
>  1 file changed, 21 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
> index ca663ce822..c297097c3a 100644
> --- a/drivers/net/mvpp2.c
> +++ b/drivers/net/mvpp2.c
> @@ -143,6 +143,7 @@ do {                                                                        \
>  /* Descriptor Manager Top Registers */
>  #define MVPP2_RXQ_NUM_REG                      0x2040
>  #define MVPP2_RXQ_DESC_ADDR_REG                        0x2044
> +#define     MVPP22_DESC_ADDR_OFFS              8
>  #define MVPP2_RXQ_DESC_SIZE_REG                        0x2048
>  #define     MVPP2_RXQ_DESC_SIZE_MASK           0x3ff0
>  #define MVPP2_RXQ_STATUS_UPDATE_REG(rxq)       (0x3000 + 4 * (rxq))
> @@ -184,6 +185,7 @@ do {                                                                        \
>  #define MVPP2_TXQ_RSVD_CLR_REG                 0x20b8
>  #define     MVPP2_TXQ_RSVD_CLR_OFFSET          16
>  #define MVPP2_AGGR_TXQ_DESC_ADDR_REG(cpu)      (0x2100 + 4 * (cpu))
> +#define     MVPP22_AGGR_TXQ_DESC_ADDR_OFFS     8
>  #define MVPP2_AGGR_TXQ_DESC_SIZE_REG(cpu)      (0x2140 + 4 * (cpu))
>  #define     MVPP2_AGGR_TXQ_DESC_SIZE_MASK      0x3ff0
>  #define MVPP2_AGGR_TXQ_STATUS_REG(cpu)         (0x2180 + 4 * (cpu))
> @@ -3108,6 +3110,8 @@ static int mvpp2_aggr_txq_init(struct udevice *dev,
>                                int desc_num, int cpu,
>                                struct mvpp2 *priv)
>  {
> +       u32 txq_dma;
> +
>         /* Allocate memory for TX descriptors */
>         aggr_txq->descs = buffer_loc.aggr_tx_descs;
>         aggr_txq->descs_dma = (dma_addr_t)buffer_loc.aggr_tx_descs;
> @@ -3124,10 +3128,16 @@ static int mvpp2_aggr_txq_init(struct udevice *dev,
>         aggr_txq->next_desc_to_proc = mvpp2_read(priv,
>                                                  MVPP2_AGGR_TXQ_INDEX_REG(cpu));
>
> -       /* Set Tx descriptors queue starting address */
> -       /* indirect access */
> -       mvpp2_write(priv, MVPP2_AGGR_TXQ_DESC_ADDR_REG(cpu),
> -                   aggr_txq->descs_dma);
> +       /* Set Tx descriptors queue starting address indirect
> +        * access
> +        */

Single line comment?

> +       if (priv->hw_version == MVPP21)
> +               txq_dma = aggr_txq->descs_dma;
> +       else
> +               txq_dma = aggr_txq->descs_dma >>
> +                       MVPP22_AGGR_TXQ_DESC_ADDR_OFFS;
> +
> +       mvpp2_write(priv, MVPP2_AGGR_TXQ_DESC_ADDR_REG(cpu), txq_dma);
>         mvpp2_write(priv, MVPP2_AGGR_TXQ_DESC_SIZE_REG(cpu), desc_num);
>
>         return 0;
> @@ -3138,6 +3148,8 @@ static int mvpp2_rxq_init(struct mvpp2_port *port,
>                           struct mvpp2_rx_queue *rxq)
>
>  {
> +       u32 rxq_dma;
> +
>         rxq->size = port->rx_ring_size;
>
>         /* Allocate memory for RX descriptors */
> @@ -3156,7 +3168,11 @@ static int mvpp2_rxq_init(struct mvpp2_port *port,
>
>         /* Set Rx descriptors queue starting address - indirect access */
>         mvpp2_write(port->priv, MVPP2_RXQ_NUM_REG, rxq->id);
> -       mvpp2_write(port->priv, MVPP2_RXQ_DESC_ADDR_REG, rxq->descs_dma);
> +       if (port->priv->hw_version == MVPP21)
> +               rxq_dma = rxq->descs_dma;
> +       else
> +               rxq_dma = rxq->descs_dma >> MVPP22_DESC_ADDR_OFFS;
> +       mvpp2_write(port->priv, MVPP2_RXQ_DESC_ADDR_REG, rxq_dma);
>         mvpp2_write(port->priv, MVPP2_RXQ_DESC_SIZE_REG, rxq->size);
>         mvpp2_write(port->priv, MVPP2_RXQ_INDEX_REG, 0);
>
> --
> 2.12.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot


More information about the U-Boot mailing list