On Fri, Sep 16, 2016 at 8:09 AM, Stefan Roese <s...@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 <s...@denx.de> > Cc: Nadav Haklai <nad...@marvell.com> > Cc: Kostya Porotchkin <kos...@marvell.com> > Cc: Wilson Ding <ding...@marvell.com> > Cc: Victor Gu <x...@marvell.com> > Cc: Hua Jing <jing...@marvell.com> > Cc: Terry Zhou <bjz...@marvell.com> > Cc: Hanna Hawa <han...@marvell.com> > Cc: Haim Boot <ha...@marvell.com> > Cc: Joe Hershberger <joe.hershber...@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@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot