From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Fri, 06 May 2016 18:59:36 +0200 Subject: [U-Boot] [PATCH 4/8] mips: ath79: Add support for ungating USB on ar933x and ar934x In-Reply-To: <572C815D.30904@gmail.com> References: <1462472097-6407-1-git-send-email-marex@denx.de> <1462472097-6407-4-git-send-email-marex@denx.de> <572C815D.30904@gmail.com> Message-ID: <572CCD78.8090602@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 05/06/2016 01:34 PM, Daniel Schwierzeck wrote: > > > 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 Hm ok, off-by-one character error. Fixed. >> 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 OK, dropped. >> + >> + /* >> + * 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; >> +} >> > -- Best regards, Marek Vasut