[U-Boot] [PATCH 04/15] net: mvneta: Add support for Armada 3700 SoC

Joe Hershberger joe.hershberger at gmail.com
Fri Sep 16 19:59:09 CEST 2016


On Fri, Sep 16, 2016 at 8:09 AM, Stefan Roese <sr at denx.de> wrote:
> This patch adds support for the Armada 3700 SoC to the Marvell mvneta
> network driver.
>
> Not like A380, in Armada3700, there are two layers of decode windows for GBE:
> First layer is:  GbE Address window that resides inside the GBE unit,
> Second layer is: Fabric address window which is located in the NIC400
>                  (South Fabric).
> To simplify the address decode configuration for Armada3700, we bypass the
> first layer of GBE decode window by setting the first window to 4GB.
>
> Signed-off-by: Stefan Roese <sr at denx.de>
> Cc: Nadav Haklai <nadavh at marvell.com>
> Cc: Kostya Porotchkin <kostap at marvell.com>
> Cc: Wilson Ding <dingwei at marvell.com>
> Cc: Victor Gu <xigu at marvell.com>
> Cc: Hua Jing <jinghua at marvell.com>
> Cc: Terry Zhou <bjzhou at marvell.com>
> Cc: Hanna Hawa <hannah at marvell.com>
> Cc: Haim Boot <hayim at marvell.com>
> Cc: Joe Hershberger <joe.hershberger at ni.com>
> ---
>  drivers/net/mvneta.c | 39 ++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 38 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c
> index 433e186..2b98a92 100644
> --- a/drivers/net/mvneta.c
> +++ b/drivers/net/mvneta.c
> @@ -91,7 +91,10 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define MVNETA_WIN_BASE(w)                      (0x2200 + ((w) << 3))
>  #define MVNETA_WIN_SIZE(w)                      (0x2204 + ((w) << 3))
>  #define MVNETA_WIN_REMAP(w)                     (0x2280 + ((w) << 2))
> +#define MVNETA_WIN_SIZE_MASK                   (0xffff0000)
>  #define MVNETA_BASE_ADDR_ENABLE                 0x2290
> +#define MVNETA_PORT_ACCESS_PROTECT              0x2294
> +#define      MVNETA_PORT_ACCESS_PROTECT_WIN0_RW        0x3
>  #define MVNETA_PORT_CONFIG                      0x2400
>  #define      MVNETA_UNI_PROMISC_MODE            BIT(0)
>  #define      MVNETA_DEF_RXQ(q)                  ((q) << 1)
> @@ -1241,6 +1244,36 @@ static int mvneta_init2(struct mvneta_port *pp)
>  }
>
>  /* platform glue : initialize decoding windows */
> +
> +/*
> + * Not like A380, in Armada3700, there are two layers of decode windows for GBE:
> + * First layer is:  GbE Address window that resides inside the GBE unit,
> + * Second layer is: Fabric address window which is located in the NIC400
> + *                  (South Fabric).
> + * To simplify the address decode configuration for Armada3700, we bypass the
> + * first layer of GBE decode window by setting the first window to 4GB.
> + */
> +static void mvneta_bypass_mbus_windows(struct mvneta_port *pp)
> +{
> +       u32 tmp_value;
> +
> +       /*
> +        * Set window size to 4GB, to bypass GBE address decode, leave the
> +        * work to MBUS decode window
> +        */
> +       mvreg_write(pp, MVNETA_WIN_SIZE(0), MVNETA_WIN_SIZE_MASK);
> +
> +       /* Enable GBE address decode window 0 by set bit 0 to 0 */
> +       tmp_value = mvreg_read(pp, MVNETA_BASE_ADDR_ENABLE);
> +       tmp_value = tmp_value & ~(1);

It would be good to have a defined name for this bitfield above like the others.

Also, you could use:

#define MVNETA_BASE_ADDR_ENABLE_BIT 0
clear_bit(MVNETA_BASE_ADDR_ENABLE_BIT, pp->base + MVNETA_BASE_ADDR_ENABLE);

> +       mvreg_write(pp, MVNETA_BASE_ADDR_ENABLE, tmp_value);
> +
> +       /* Set GBE address decode window 0 to full Access (read or write) */
> +       tmp_value = mvreg_read(pp, MVNETA_PORT_ACCESS_PROTECT);
> +       tmp_value = tmp_value | MVNETA_PORT_ACCESS_PROTECT_WIN0_RW;
> +       mvreg_write(pp, MVNETA_PORT_ACCESS_PROTECT, tmp_value);

Or:

setbits_le32(pp->base + MVNETA_PORT_ACCESS_PROTECT,
MVNETA_PORT_ACCESS_PROTECT_WIN0_RW)

> +}
> +
>  static void mvneta_conf_mbus_windows(struct mvneta_port *pp)
>  {
>         const struct mbus_dram_target_info *dram;
> @@ -1609,7 +1642,10 @@ static int mvneta_probe(struct udevice *dev)
>         pp->base = (void __iomem *)pdata->iobase;
>
>         /* Configure MBUS address windows */
> -       mvneta_conf_mbus_windows(pp);
> +       if (of_device_is_compatible(dev, "marvell,armada-3700-neta"))
> +               mvneta_bypass_mbus_windows(pp);
> +       else
> +               mvneta_conf_mbus_windows(pp);
>
>         /* PHY interface is already decoded in mvneta_ofdata_to_platdata() */
>         pp->phy_interface = pdata->phy_interface;
> @@ -1672,6 +1708,7 @@ static int mvneta_ofdata_to_platdata(struct udevice *dev)
>  static const struct udevice_id mvneta_ids[] = {
>         { .compatible = "marvell,armada-370-neta" },
>         { .compatible = "marvell,armada-xp-neta" },
> +       { .compatible = "marvell,armada-3700-neta" },
>         { }
>  };
>
> --
> 2.9.3
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot


More information about the U-Boot mailing list