From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Schwierzeck Date: Fri, 6 May 2016 13:34:53 +0200 Subject: [U-Boot] [PATCH 4/8] mips: ath79: Add support for ungating USB on ar933x and ar934x In-Reply-To: <1462472097-6407-4-git-send-email-marex@denx.de> References: <1462472097-6407-1-git-send-email-marex@denx.de> <1462472097-6407-4-git-send-email-marex@denx.de> Message-ID: <572C815D.30904@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Am 05.05.2016 um 20:14 schrieb Marek Vasut: > Add code to ungate the USB controller on ar933x and ar934x . > > Signed-off-by: Marek Vasut > Cc: Daniel Schwierzeck > Cc: Wills Wang > --- > arch/mips/mach-ath79/include/mach/ath79.h | 2 + > arch/mips/mach-ath79/reset.c | 61 +++++++++++++++++++++++++++++++ > 2 files changed, 63 insertions(+) > there are checkpatch.pl warnings: warning: arch/mips/mach-ath79/reset.c,112: line over 80 characters > diff --git a/arch/mips/mach-ath79/include/mach/ath79.h b/arch/mips/mach-ath79/include/mach/ath79.h > index 90d80b8..682b6a2 100644 > --- a/arch/mips/mach-ath79/include/mach/ath79.h > +++ b/arch/mips/mach-ath79/include/mach/ath79.h > @@ -140,4 +140,6 @@ static inline int soc_is_qca956x(void) > return soc_is_tp9343() || soc_is_qca9561(); > } > > +int ath79_usb_reset(void); > + > #endif /* __ASM_MACH_ATH79_H */ > diff --git a/arch/mips/mach-ath79/reset.c b/arch/mips/mach-ath79/reset.c > index ba38609..bf4bc3b 100644 > --- a/arch/mips/mach-ath79/reset.c > +++ b/arch/mips/mach-ath79/reset.c > @@ -5,6 +5,7 @@ > */ > > #include > +#include > #include > #include > #include > @@ -69,3 +70,63 @@ u32 get_bootstrap(void) > > return 0; > } > + > +static int usb_reset_ar933x(void __iomem *reset_regs) > +{ > + /* Ungate the USB block */ > + setbits_be32(reset_regs + AR933X_RESET_REG_RESET_MODULE, > + AR933X_RESET_USBSUS_OVERRIDE); > + mdelay(1); > + clrbits_be32(reset_regs + AR933X_RESET_REG_RESET_MODULE, > + AR933X_RESET_USB_HOST); > + mdelay(1); > + clrbits_be32(reset_regs + AR933X_RESET_REG_RESET_MODULE, > + AR933X_RESET_USB_PHY); > + mdelay(1); > + > + return 0; > +} > + > +static int usb_reset_ar934x(void __iomem *reset_regs) > +{ > + /* Ungate the USB block */ > + setbits_be32(reset_regs + AR934X_RESET_REG_RESET_MODULE, > + AR934X_RESET_USBSUS_OVERRIDE); > + mdelay(1); > + clrbits_be32(reset_regs + AR934X_RESET_REG_RESET_MODULE, > + AR934X_RESET_USB_PHY); > + mdelay(1); > + clrbits_be32(reset_regs + AR934X_RESET_REG_RESET_MODULE, > + AR934X_RESET_USB_PHY_ANALOG); > + mdelay(1); > + clrbits_be32(reset_regs + AR934X_RESET_REG_RESET_MODULE, > + AR934X_RESET_USB_HOST); > + mdelay(1); > + > + return 0; > +} > + > +int ath79_usb_reset(void) > +{ > + void __iomem *usbc_regs = map_physmem(AR71XX_USB_CTRL_BASE, > + AR71XX_USB_CTRL_SIZE, MAP_NOCACHE); > + void __iomem *reset_regs = map_physmem(AR71XX_RESET_BASE, > + AR71XX_RESET_SIZE, MAP_NOCACHE); > + > + if (!usbc_regs || !reset_regs) > + return -EINVAL; those checks are not necessary > + > + /* > + * Turn on the Buff and Desc swap bits. > + * NOTE: This write into an undocumented register in mandatory to > + * get the USB controller operational in BigEndian mode. > + */ > + writel(0xf0000, usbc_regs + AR71XX_USB_CTRL_REG_CONFIG); > + > + if (soc_is_ar933x()) > + return usb_reset_ar933x(reset_regs); > + if (soc_is_ar934x()) > + return usb_reset_ar934x(reset_regs); > + > + return -EINVAL; > +} > -- - Daniel -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 473 bytes Desc: OpenPGP digital signature URL: