[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