Skip to contentSkip to conversation

Enable USB peripheral mode on dm365 EVM

PATCH Superseded Constantine Shulyupin 4 participants 5 messages Oct 10, 2012 – Oct 25, 2012

Subsystems (5)

v6 of 7 Superseded Latest is v7 →

lore
Share & tools
lore
#0 lore raw

PATCH v6 1/1 Enable USB peripheral mode on dm365 EVM

From: Constantine Shulyupin <[email protected]>

Sets USB PHY clock source to 24 MHz clock and call USB configuration from board initialization.

Tested with OTG configuration, usb gadget g_zero on DM365 EVM connected to PC.

References:

Definition of USB_PHY_CTRL and PHYCLKFREQ:
- http://www.makelinux.com/lib/ti/DM36x_ARM/doc-141

Original patch by miguel.aguilar at ridgerun.com three years ago:
- http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html

---

Note:

Changelog

Changes since v5 http://www.spinics.net/lists/kernel/msg1413120.html
accordingy feedback of nsekhar at ti.com http://www.spinics.net/lists/kernel/msg1414914.html
- phy configuration moved to drivers/usb/musb/davinci.c
- USB_OTG configuration is submitted in separated patch: http://www.spinics.net/lists/kernel/msg1414964.html
- Setting current limit to 1000 mA. Any way the current is limited to 510 mA in davinci_setup_usb.

Changes since v4 http://www.spinics.net/lists/kernel/msg1412995.html
- removed fix of dev_info in musb_init_controller

Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html:
- removed optional altering of pr_info

Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2:
- removed optional code and reordered
- removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USB

This patch is based on code from projects Arago, Angstom and RidgeRun.

---
 arch/arm/mach-davinci/board-dm365-evm.c |    2 ++
 drivers/usb/musb/davinci.c              |    3 +++
 drivers/usb/musb/davinci.h              |    1 +
 3 files changed, 6 insertions(+)
arch/arm/mach-davinci/board-dm365-evm.c +2 -0
index 688a9c5..ba5ffc1 100644
@@ -38,6 +38,7 @@
 #include <mach/mmc.h>
 #include <mach/nand.h>
 #include <mach/keyscan.h>
+#include <mach/usb.h>
 
 #include <media/tvp514x.h>
 
@@ -610,6 +611,7 @@ static __init void dm365_evm_init(void)
 
 	dm365_init_spi0(BIT(0), dm365_evm_spi_info,
 			ARRAY_SIZE(dm365_evm_spi_info));
+	davinci_setup_usb(1000, 8);
 }
 
 MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")
drivers/usb/musb/davinci.c +3 -0
index 472c8b4..af09ebf 100644
@@ -428,6 +428,9 @@ static int davinci_musb_init(struct musb *musb)
 		__raw_writel(deepsleep, DM355_DEEPSLEEP);
 	}
 
+	if (machine_is_davinci_dm365_evm())
+		writel(readl(USB_PHY_CTRL) | USBPHY_CLKFREQ_24MHZ, USB_PHY_CTRL);
+
 	/* reset the controller */
 	musb_writel(tibase, DAVINCI_USB_CTRL_REG, 0x1);
 
drivers/usb/musb/davinci.h +1 -0
index 371baa0..e737d97 100644
@@ -16,6 +16,7 @@
 
 /* Integrated highspeed/otg PHY */
 #define USBPHY_CTL_PADDR	0x01c40034
+#define USBPHY_CLKFREQ_24MHZ	BIT(13)
 #define USBPHY_DATAPOL		BIT(11)	/* (dm355) switch D+/D- */
 #define USBPHY_PHYCLKGD		BIT(8)
 #define USBPHY_SESNDEN		BIT(7)	/* v(sess_end) comparator */
Signature · 1 line
1.7.9.5
#1 lore raw

Hello.

Quoted 58 lines · Constantine Shulyupin

From: Constantine Shulyupin <[email protected]>

Sets USB PHY clock source to 24 MHz clock and call USB configuration from board initialization.

Tested with OTG configuration, usb gadget g_zero on DM365 EVM connected to PC.

References:

Definition of USB_PHY_CTRL and PHYCLKFREQ:
- http://www.makelinux.com/lib/ti/DM36x_ARM/doc-141

Original patch by miguel.aguilar at ridgerun.com three years ago:
- http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html

---

Note:

Changelog

Changes since v5 http://www.spinics.net/lists/kernel/msg1413120.html
accordingy feedback of nsekhar at ti.com http://www.spinics.net/lists/kernel/msg1414914.html
- phy configuration moved to drivers/usb/musb/davinci.c
- USB_OTG configuration is submitted in separated patch: http://www.spinics.net/lists/kernel/msg1414964.html
- Setting current limit to 1000 mA. Any way the current is limited to 510 mA in davinci_setup_usb.

Changes since v4 http://www.spinics.net/lists/kernel/msg1412995.html
- removed fix of dev_info in musb_init_controller

Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html:
- removed optional altering of pr_info

Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2:
- removed optional code and reordered
- removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USB

This patch is based on code from projects Arago, Angstom and RidgeRun.

---
  arch/arm/mach-davinci/board-dm365-evm.c |    2 ++
  drivers/usb/musb/davinci.c              |    3 +++
  drivers/usb/musb/davinci.h              |    1 +
  3 files changed, 6 insertions(+)
arch/arm/mach-davinci/board-dm365-evm.c +1 -0
index 688a9c5..ba5ffc1 100644
@@ -38,6 +38,7 @@
  #include <mach/mmc.h>
  #include <mach/nand.h>
  #include <mach/keyscan.h>
+#include <mach/usb.h>
 
  #include <media/tvp514x.h>
 

arch/arm/mach-davinci/board-dm365-evm.c static __init void dm365_evm_init(void) · line 617

Quoted 7 lines
arch/arm/mach-davinci/board-dm365-evm.c +1 -0
@@ -610,6 +611,7 @@ static __init void dm365_evm_init(void)
 
  	dm365_init_spi0(BIT(0), dm365_evm_spi_info,
  			ARRAY_SIZE(dm365_evm_spi_info));
+	davinci_setup_usb(1000, 8);
  }
 
  MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")

You need to split the patch at this point. Above part should be
applied to the DaVinci tree, below part to the MUSB tree.

drivers/usb/musb/davinci.c static int davinci_musb_init(struct musb *musb) · line 432

Quoted 10 lines
drivers/usb/musb/davinci.c +2 -0
index 472c8b4..af09ebf 100644
@@ -428,6 +428,9 @@ static int davinci_musb_init(struct musb *musb)
  		__raw_writel(deepsleep, DM355_DEEPSLEEP);
  	}
 
+	if (machine_is_davinci_dm365_evm())
+		writel(readl(USB_PHY_CTRL) | USBPHY_CLKFREQ_24MHZ, USB_PHY_CTRL);

I'd put that to the board file instead, like in board-da830-evm.c....

WBR, Sergei

#2 lore raw

Sekhar Nori: Looks like all PHY related configuration is currently happening in drivers/usb/musb/davinci.c and the same register is also being written to for other platforms. Can you move the code you have included in board file to the driver? As we move towards DT, we need to avoid register configurations from board files anyway.

Quoted 1 line

From http://www.spinics.net/lists/kernel/msg1414914.html

Quoted 96 lines · Sergei Shtylyov

Hello.

Quoted 65 lines · Constantine Shulyupin

From: Constantine Shulyupin <[email protected]>

Sets USB PHY clock source to 24 MHz clock and call USB configuration from board initialization.

Tested with OTG configuration, usb gadget g_zero on DM365 EVM connected to PC.

References:

Definition of USB_PHY_CTRL and PHYCLKFREQ:
- http://www.makelinux.com/lib/ti/DM36x_ARM/doc-141

Original patch by miguel.aguilar at ridgerun.com three years ago:
-
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html

---

Note:

Changelog

Changes since v5 http://www.spinics.net/lists/kernel/msg1413120.html
accordingy feedback of nsekhar at ti.com
http://www.spinics.net/lists/kernel/msg1414914.html
- phy configuration moved to drivers/usb/musb/davinci.c
- USB_OTG configuration is submitted in separated patch:
http://www.spinics.net/lists/kernel/msg1414964.html
- Setting current limit to 1000 mA. Any way the current is limited to 510 mA in davinci_setup_usb.

Changes since v4 http://www.spinics.net/lists/kernel/msg1412995.html
- removed fix of dev_info in musb_init_controller

Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html:
- removed optional altering of pr_info

Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2:
- removed optional code and reordered
- removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USB

This patch is based on code from projects Arago, Angstom and RidgeRun.

---
  arch/arm/mach-davinci/board-dm365-evm.c |    2 ++
  drivers/usb/musb/davinci.c              |    3 +++
  drivers/usb/musb/davinci.h              |    1 +
  3 files changed, 6 insertions(+)
arch/arm/mach-davinci/board-dm365-evm.c +1 -0
index 688a9c5..ba5ffc1 100644
@@ -38,6 +38,7 @@
  #include <mach/mmc.h>
  #include <mach/nand.h>
  #include <mach/keyscan.h>
+#include <mach/usb.h>
    #include <media/tvp514x.h>
  @@ -610,6 +611,7 @@ static __init void dm365_evm_init(void)
        dm365_init_spi0(BIT(0), dm365_evm_spi_info,
Quoted 4 lines
                        ARRAY_SIZE(dm365_evm_spi_info));
+       davinci_setup_usb(1000, 8);
  }
    MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")

You need to split the patch at this point. Above part should be applied
to the DaVinci tree, below part to the MUSB tree.

drivers/usb/musb/davinci.c static int davinci_musb_init(struct musb *musb) · line 432

Quoted 10 lines
drivers/usb/musb/davinci.c +1 -0
index 472c8b4..af09ebf 100644
@@ -428,6 +428,9 @@ static int davinci_musb_init(struct musb *musb)
                __raw_writel(deepsleep, DM355_DEEPSLEEP);
        }
  +     if (machine_is_davinci_dm365_evm())
+               writel(readl(USB_PHY_CTRL) | USBPHY_CLKFREQ_24MHZ,
 USB_PHY_CTRL);

I'd put that to the board file instead, like in board-da830-evm.c....

WBR, Sergei

Signature · 4 lines
Constantine Shulyupin
http://www.MakeLinux.com/
Embedded Linux Systems,
Device Drivers, TI DaVinci
maintainer
#3 lore raw
In reply to Constantine Shulyupin
Quoted 8 lines · Constantine Shulyupin

From: Constantine Shulyupin <[email protected]>

Sets USB PHY clock source to 24 MHz clock and call USB configuration from board initialization.

Tested with OTG configuration, usb gadget g_zero on DM365 EVM connected to PC.

References:

Quoted 7 lines

Definition of USB_PHY_CTRL and PHYCLKFREQ:
- http://www.makelinux.com/lib/ti/DM36x_ARM/doc-141

Original patch by miguel.aguilar at ridgerun.com three years ago:
- http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html

Note, Felipe is the right person to be sending these types of patches to, not me. scripts/get_maintainer.pl is your friend :)

thanks,

greg k-h

#4 lore raw
In reply to Constantine Shulyupin

Hi,

Quoted 70 lines · Constantine Shulyupin

From: Constantine Shulyupin <[email protected]>

Sets USB PHY clock source to 24 MHz clock and call USB configuration from board initialization.

Tested with OTG configuration, usb gadget g_zero on DM365 EVM connected to PC.

References:

Definition of USB_PHY_CTRL and PHYCLKFREQ:
- http://www.makelinux.com/lib/ti/DM36x_ARM/doc-141

Original patch by miguel.aguilar at ridgerun.com three years ago:
- http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html

---

Note:

Changelog

Changes since v5 http://www.spinics.net/lists/kernel/msg1413120.html
accordingy feedback of nsekhar at ti.com http://www.spinics.net/lists/kernel/msg1414914.html
- phy configuration moved to drivers/usb/musb/davinci.c
- USB_OTG configuration is submitted in separated patch: http://www.spinics.net/lists/kernel/msg1414964.html
- Setting current limit to 1000 mA. Any way the current is limited to 510 mA in davinci_setup_usb.

Changes since v4 http://www.spinics.net/lists/kernel/msg1412995.html
- removed fix of dev_info in musb_init_controller

Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html:
- removed optional altering of pr_info

Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2:
- removed optional code and reordered
- removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USB

This patch is based on code from projects Arago, Angstom and RidgeRun.

---
 arch/arm/mach-davinci/board-dm365-evm.c |    2 ++
 drivers/usb/musb/davinci.c              |    3 +++
 drivers/usb/musb/davinci.h              |    1 +
 3 files changed, 6 insertions(+)
arch/arm/mach-davinci/board-dm365-evm.c +2 -0
index 688a9c5..ba5ffc1 100644
@@ -38,6 +38,7 @@
 #include <mach/mmc.h>
 #include <mach/nand.h>
 #include <mach/keyscan.h>
+#include <mach/usb.h>
 
 #include <media/tvp514x.h>
 
@@ -610,6 +611,7 @@ static __init void dm365_evm_init(void)
 
 	dm365_init_spi0(BIT(0), dm365_evm_spi_info,
 			ARRAY_SIZE(dm365_evm_spi_info));
+	davinci_setup_usb(1000, 8);
 }
 
 MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")
drivers/usb/musb/davinci.c +0 -0
index 472c8b4..af09ebf 100644

drivers/usb/musb/davinci.c static int davinci_musb_init(struct musb *musb) · line 432

Quoted 5 lines
drivers/usb/musb/davinci.c +2 -0
@@ -428,6 +428,9 @@ static int davinci_musb_init(struct musb *musb)
 		__raw_writel(deepsleep, DM355_DEEPSLEEP);
 	}
 
+	if (machine_is_davinci_dm365_evm())
+		writel(readl(USB_PHY_CTRL) | USBPHY_CLKFREQ_24MHZ, USB_PHY_CTRL);

no such checks in drivers. Please find another way to do this.

Signature · 8 lines
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121025/bfb7ee0f/attachment.sig>