Module Name:    src
Committed By:   skrll
Date:           Mon Dec 29 22:58:59 UTC 2014

Modified Files:
        src/sys/arch/arm/samsung: exynos5_reg.h exynos_soc.c

Log Message:
Fixup USB Phy initialisation for Exynos5410.

odroid-xu now detects USB devices.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/samsung/exynos5_reg.h
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/samsung/exynos_soc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/samsung/exynos5_reg.h
diff -u src/sys/arch/arm/samsung/exynos5_reg.h:1.19 src/sys/arch/arm/samsung/exynos5_reg.h:1.20
--- src/sys/arch/arm/samsung/exynos5_reg.h:1.19	Thu Oct  2 16:17:33 2014
+++ src/sys/arch/arm/samsung/exynos5_reg.h	Mon Dec 29 22:58:59 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: exynos5_reg.h,v 1.19 2014/10/02 16:17:33 skrll Exp $	*/
+/*	$NetBSD: exynos5_reg.h,v 1.20 2014/12/29 22:58:59 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -363,41 +363,42 @@
 
 /* used Exynos5 USB PHY registers */
 #define USB_PHY_HOST_CTRL0		0x00
-#define   HOST_CTRL0_PHY_SWRST		__BIT(0)
-#define   HOST_CTRL0_LINK_SWRST		__BIT(1)
-#define   HOST_CTRL0_UTMI_SWRST		__BIT(2)
-#define   HOST_CTRL0_WORDINTERFACE	__BIT(3)
-#define   HOST_CTRL0_FORCESUSPEND	__BIT(4)
-#define   HOST_CTRL0_FORCESLEEP		__BIT(5)
-#define   HOST_CTRL0_SIDDQ		__BIT(6)
-#define   HOST_CTRL0_COMMONON_N		__BIT(9)	/* common block configuration during suspend */
-#define   HOST_CTRL0_TESTBURNIN		__BIT(11)
-#define   HOST_CTRL0_RETENABLE		__BIT(10)
-#define   HOST_CTRL0_FSEL_MASK		__BITS(16, 18)	/* holds FSEL_CLKSEL_ */
-#define   HOST_CTRL0_REFCLKSEL_MASK	__BITS(19, 20)
-#define   HOST_CTRL0_REFCLKSEL_XTAL	__SHIFTIN(HOST_CRTL0_REFCLK_MASK, 0)
-#define   HOST_CTRL0_REFCLKSEL_EXTL	__SHIFTIN(HOST_CRTL0_REFCLK_MASK, 1)
-#define   HOST_CTRL0_REFCLKSEL_CLKCORE	__SHIFTIN(HOST_CRTL0_REFCLK_MASK, 2)
-#define   HOST_CTRL0_PHY_SWRST_ALL	__BIT(31)
+#define  HOST_CTRL0_PHY_SWRST		__BIT(0)
+#define  HOST_CTRL0_LINK_SWRST		__BIT(1)
+#define  HOST_CTRL0_UTMI_SWRST		__BIT(2)
+#define  HOST_CTRL0_WORDINTERFACE	__BIT(3)
+#define  HOST_CTRL0_FORCESUSPEND	__BIT(4)
+#define  HOST_CTRL0_FORCESLEEP		__BIT(5)
+#define  HOST_CTRL0_SIDDQ		__BIT(6)
+#define  HOST_CTRL0_COMMONON_N		__BIT(9)	/* common block configuration during suspend */
+#define  HOST_CTRL0_RETENABLE		__BIT(10)
+#define  HOST_CTRL0_TESTBURNIN		__BIT(11)
+#define  HOST_CTRL0_FSEL_MASK		__BITS(16, 18)	/* holds FSEL_CLKSEL_ */
+#define  HOST_CTRL0_REFCLKSEL_MASK	__BITS(19, 20)
+#define   HOST_CTRL0_REFCLKSEL_XTAL	0
+#define   HOST_CTRL0_REFCLKSEL_EXTL	1
+#define   HOST_CTRL0_REFCLKSEL_CLKCORE	2
+#define  HOST_CTRL0_PHY_SWRST_ALL     __BIT(31)
 
 #define USB_PHY_HSIC_CTRL1		0x10
 #define USB_PHY_HSIC_TUNE1		0x14
 #define USB_PHY_HSIC_CTRL2		0x20
 #define USB_PHY_HSIC_TUNE2		0x24
-#define   HSIC_CTRL_PHY_SWRST		__BIT(0)
-#define   HSIC_CTRL_UTMI_SWRST		__BIT(2)
-#define   HSIC_CTRL_WORDINTERFACE	__BIT(3)
-#define   HSIC_CTRL_FORCESUSPEND	__BIT(4)
-#define   HSIC_CTRL_FORCESLEEP		__BIT(5)
-#define   HSIC_CTRL_SIDDQ		__BIT(6)
-#define   HSIC_CTRL_REFCLKDIV_MASK	__BITS(16,22)
-#define      REFCLKDIV_12		__SHIFTIN(HSIC_CTRL_REFCLKDIV_MASK, 0x24)
-#define      REFCLKDIV_15		__SHIFTIN(HSIC_CTRL_REFCLKDIV_MASK, 0x1c)
-#define      REFCLKDIV_16		__SHIFTIN(HSIC_CTRL_REFCLKDIV_MASK, 0x1a)
-#define      REFCLKDIV_19_2		__SHIFTIN(HSIC_CTRL_REFCLKDIV_MASK, 0x15)
-#define      REFCLKDIV_20		__SHIFTIN(HSIC_CTRL_REFCLKDIV_MASK, 0x14)
-#define   HSIC_CTRL_REFCLKSEL_MASK	__BITS(23, 24)
-#define      REFCLKSEL_HSIC_DEFAULT	__SHIFTIN(HSIC_CTRL_REFCLKSEL_MASK, 2)
+
+#define  HSIC_CTRL_PHY_SWRST		__BIT(0)
+#define  HSIC_CTRL_UTMI_SWRST		__BIT(2)
+#define  HSIC_CTRL_WORDINTERFACE	__BIT(3)
+#define  HSIC_CTRL_FORCESUSPEND	__BIT(4)
+#define  HSIC_CTRL_FORCESLEEP		__BIT(5)
+#define  HSIC_CTRL_SIDDQ		__BIT(6)
+#define  HSIC_CTRL_REFCLKDIV_MASK	__BITS(16,22)
+#define    HSIC_CTRL_REFCLKDIV_12		0x24
+#define    HSIC_CTRL_REFCLKDIV_15		0x1c
+#define    HSIC_CTRL_REFCLKDIV_16		0x1a
+#define    HSIC_CTRL_REFCLKDIV_19_2		0x15
+#define    HSIC_CTRL_REFCLKDIV_20		0x14
+#define  HSIC_CTRL_REFCLKSEL_MASK	__BITS(23, 24)
+#define    HSIC_CTRL_REFCLKSEL_DEFAULT	2
 
 #define USB_PHY_HOST_EHCICTRL		0x30
 #define   HOST_EHCICTRL_ENA_INCR16	__BIT(26)

Index: src/sys/arch/arm/samsung/exynos_soc.c
diff -u src/sys/arch/arm/samsung/exynos_soc.c:1.26 src/sys/arch/arm/samsung/exynos_soc.c:1.27
--- src/sys/arch/arm/samsung/exynos_soc.c:1.26	Mon Dec 29 22:34:08 2014
+++ src/sys/arch/arm/samsung/exynos_soc.c	Mon Dec 29 22:58:59 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: exynos_soc.c,v 1.26 2014/12/29 22:34:08 skrll Exp $	*/
+/*	$NetBSD: exynos_soc.c,v 1.27 2014/12/29 22:58:59 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
 #define	_ARM32_BUS_DMA_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: exynos_soc.c,v 1.26 2014/12/29 22:34:08 skrll Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exynos_soc.c,v 1.27 2014/12/29 22:58:59 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -878,34 +878,55 @@ static void
 exynos5410_usb2phy_enable(bus_space_handle_t usb2phy_bsh)
 {
 	uint32_t phyhost; //, phyotg;
-	uint32_t phyhsic1, phyhsic2, hsic_ctrl;
-	uint32_t ehcictrl; //, ohcictrl;
+	uint32_t phyhsic;
+	uint32_t ehcictrl, ohcictrl;
 
 	/* host configuration: */
 	phyhost = bus_space_read_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HOST_CTRL0);
+	    USB_PHY_HOST_CTRL0);
 
 	/* host phy reference clock; assumption its 24 MHz now */
 	phyhost &= ~HOST_CTRL0_FSEL_MASK;
-	phyhost |= __SHIFTIN(HOST_CTRL0_FSEL_MASK, FSEL_CLKSEL_24M);
+	phyhost |= __SHIFTIN(FSEL_CLKSEL_24M, HOST_CTRL0_FSEL_MASK);
 
 	/* enable normal mode of operation */
 	phyhost &= ~(HOST_CTRL0_FORCESUSPEND | HOST_CTRL0_FORCESLEEP);
 
 	/* host phy reset */
 	phyhost &= ~(HOST_CTRL0_PHY_SWRST | HOST_CTRL0_PHY_SWRST_ALL |
-		HOST_CTRL0_SIDDQ | HOST_CTRL0_COMMONON_N);
+	    HOST_CTRL0_SIDDQ | HOST_CTRL0_FORCESUSPEND |
+	    HOST_CTRL0_FORCESLEEP);
 
 	/* host link reset */
-	phyhost |= HOST_CTRL0_LINK_SWRST | HOST_CTRL0_UTMI_SWRST;
-
+	phyhost |= HOST_CTRL0_LINK_SWRST | HOST_CTRL0_UTMI_SWRST |
+	    HOST_CTRL0_COMMONON_N;
 	/* do the reset */
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HOST_CTRL0, phyhost);
+	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh, USB_PHY_HOST_CTRL0,
+	    phyhost);
 	DELAY(10000);
+
 	phyhost &= ~(HOST_CTRL0_LINK_SWRST | HOST_CTRL0_UTMI_SWRST);
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HOST_CTRL0, phyhost);
+	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh, USB_PHY_HOST_CTRL0,
+	   phyhost);
+
+	/* HSIC control */
+	phyhsic =
+	    __SHIFTIN(HSIC_CTRL_REFCLKDIV_12, HSIC_CTRL_REFCLKDIV_MASK) |
+	    __SHIFTIN(HSIC_CTRL_REFCLKSEL_DEFAULT, HSIC_CTRL_REFCLKSEL_MASK) |
+	    HSIC_CTRL_PHY_SWRST;
+
+	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh, USB_PHY_HSIC_CTRL1,
+	   phyhsic);
+	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh, USB_PHY_HSIC_CTRL2,
+	   phyhsic);
+	DELAY(10);
+
+	phyhsic &= ~HSIC_CTRL_PHY_SWRST;
+	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh, USB_PHY_HSIC_CTRL1,
+	   phyhsic);
+	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh, USB_PHY_HSIC_CTRL2,
+	   phyhsic);
+	DELAY(80);
 
 #if 0
 	/* otg configuration: */
@@ -935,57 +956,21 @@ exynos5410_usb2phy_enable(bus_space_hand
 		USB_PHY_OTG_SYS, phyotg);
 #endif
 
-	/* HSIC phy configuration: */
-	hsic_ctrl = HSIC_CTRL_FORCESUSPEND | HSIC_CTRL_FORCESLEEP |
-		HSIC_CTRL_SIDDQ;
-
-	phyhsic1 = bus_space_read_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL1);
-	phyhsic2 = bus_space_read_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL1);
-
-	phyhsic1 &= ~hsic_ctrl;
-	phyhsic2 &= ~hsic_ctrl;
-
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL1, phyhsic1);
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL2, phyhsic2);
-	DELAY(10000);
-
-	hsic_ctrl = REFCLKDIV_12 | REFCLKSEL_HSIC_DEFAULT |
-		HSIC_CTRL_UTMI_SWRST;
-
-	phyhsic1 |= hsic_ctrl;
-	phyhsic2 |= hsic_ctrl;
-
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL1, phyhsic1);
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL2, phyhsic2);
-
-	DELAY(10000);
-
-	hsic_ctrl = HSIC_CTRL_PHY_SWRST | HSIC_CTRL_UTMI_SWRST;
-
-	phyhsic1 &= ~hsic_ctrl;
-	phyhsic2 &= ~hsic_ctrl;
-
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL1, phyhsic1);
-	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HSIC_CTRL2, phyhsic2);
-	DELAY(20000);
-
 	/* enable EHCI DMA burst: */
 	ehcictrl = bus_space_read_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HOST_EHCICTRL);
+	    USB_PHY_HOST_EHCICTRL);
 	ehcictrl |= HOST_EHCICTRL_ENA_INCRXALIGN |
-		HOST_EHCICTRL_ENA_INCR4 | HOST_EHCICTRL_ENA_INCR8 |
-		HOST_EHCICTRL_ENA_INCR16;
+	    HOST_EHCICTRL_ENA_INCR4 | HOST_EHCICTRL_ENA_INCR8 |
+	    HOST_EHCICTRL_ENA_INCR16;
 	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
-		USB_PHY_HOST_EHCICTRL, ehcictrl);
-	DELAY(10000);
+	    USB_PHY_HOST_EHCICTRL, ehcictrl);
+
+	/* Set OHCI suspend */
+	ohcictrl = bus_space_read_4(&exynos_bs_tag, usb2phy_bsh,
+	    USB_PHY_HOST_OHCICTRL);
+	ohcictrl |= HOST_OHCICTRL_SUSPLGCY;
+	bus_space_write_4(&exynos_bs_tag, usb2phy_bsh,
+	    USB_PHY_HOST_OHCICTRL, ohcictrl);
 }
 
 

Reply via email to