[PATCH] ARM: mvebu: armada-xp: configure PLL and PHY register

Jan Lübbe jlu at pengutronix.de
Wed Aug 16 03:51:06 PDT 2017


On Wed, 2017-08-16 at 10:17 +0200, Uwe Kleine-König wrote:
> Hallo Jan,
> 
> On Tue, Aug 15, 2017 at 11:47:37AM +0200, Jan Luebbe wrote:
> > The PLL setup is needed to use the USB ports in Linux.
> > 
> > This code is ported from mainline U-Boot arch/arm/mach-mvebu/cpu.c.
> 
> Actually this is a work around because Linux doesn't do the necessary
> setup before making use of the hardware, right?
> 
> If so, wouldn't it be better to teach Linux about the needed setup?

It would still be needed for barebox USB support.

> > +static void setup_usb_phys(void)
> > +{
> > +	int dev;
> > +
> > +	/*
> > +	 * USB PLL init
> > +	 */
> > +
> > +	/* Setup PLL frequency */
> > +	/* USB REF frequency = 25 MHz */
> > +	clrsetbits_le32(MV_USB_PHY_PLL_REG(1), 0x3ff, 0x605);
> > +
> > +	/* Power up PLL and PHY channel */
> > +	setbits_le32(MV_USB_PHY_PLL_REG(2), BIT(9));
> > + 
> > +	/* Assert VCOCAL_START */
> > +	setbits_le32(MV_USB_PHY_PLL_REG(1), BIT(21));
> > + 
> > +	mdelay(1);
> > + 
> > +	/*
> > +	 * USB PHY init (change from defaults) specific for 40nm
> > (78X30 78X60)
> 
> I assume this comment also comes from U-Boot. Still I wonder if it
> makes sense to use the more common names instead of "78X30 78X60".
> That would be "Armada XP" but not "Armada 370", wouldn't it? (Armada
> 370 = 88F6710, 88F6707, and 88F6W11). If so, this code shouldn't be
> reached on Armada 370?
> 
> Some other places in barebox suggest, that MV78xx0 is neither XP nor
> 370 (e.g.
> 	dts/Bindings/net/marvell-orion-mdio.txt
> 	dts/Bindings/arm/marvell/mvebu-system-controller.txt
> 	drivers/bus/Kconfig
> 	drivers/spi/mvebu_spi.c
> )

As far as I can see, there is no authoritative source on the naming. So
 I'd like to avoid making changes without being sure that it is
actually correct.

> > +	 */
> > +
> > +	for (dev = 0; dev < 3; dev++) {
> > +		setbits_le32(MV_USB_X3_PHY_CHANNEL(dev, 3),
> > BIT(15));
> > +
> > +		/* Assert REG_RCAL_START in channel REG 1 */
> > +		setbits_le32(MV_USB_X3_PHY_CHANNEL(dev, 1),
> > BIT(12));
> > +		udelay(40);
> > +		clrbits_le32(MV_USB_X3_PHY_CHANNEL(dev, 1),
> > BIT(12));
> > +	}
> 
> Can this be made quicker using:
> 
> 	for (dev = 0; dev < 3; dev++) {
> 		setbits_le32(MV_USB_X3_PHY_CHANNEL(dev, 3), BIT(15));
> 
> 		/* Assert REG_RCAL_START in channel REG 1 */
> 		setbits_le32(MV_USB_X3_PHY_CHANNEL(dev, 1), BIT(12));
> 	}
> 
> 	udelay(40;
> 
> 	for (dev = 0; dev < 3; dev++)
> 		clrbits_le32(MV_USB_X3_PHY_CHANNEL(dev, 1), BIT(12));
> 
> ?

Possibly. Nevertheless I'd prefer to keep the code identical to the one
from U-Boot, at least until someone is interested in refactoring this
on a larger scale.

> > +}
> > +
> >  static int armada_370_xp_init_soc(void)
> >  {
> >  	u32 reg;
> > @@ -109,6 +151,9 @@ static int armada_370_xp_init_soc(void)
> >  		reg = readl(ARMADA_XP_PUP_ENABLE);
> >  		reg |= GE0_PUP_EN | GE1_PUP_EN | LCD_PUP_EN |
> > NAND_PUP_EN | SPI_PUP_EN;
> >  		writel(reg, ARMADA_XP_PUP_ENABLE);
> > +
> > +		/* Configure USB PLL and PHYs on AXP */
> > +		setup_usb_phys();
> >  	}
> >  
> >  	return 0;
> > diff --git a/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h
> > b/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h
> > index 1dad05317211..b972df151a74 100644
> > --- a/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h
> > +++ b/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h
> > @@ -72,4 +72,6 @@
> >  	 (((port) % 4) * ARMADA_370_XP_PCIE_PORT_OFFSET))
> >  #define  PCIE_DEVICE_VENDOR_ID		0x000
> >  
> > +#define ARMADA_370_XP_USB_BASE		(ARMADA_370_XP_INT_R
> > EGS_BASE + 0x50000)
> 
> Instead of hardcoding this address, this could be done depending on
> the device at the same address specified in the device tree.
> 
-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list