mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
Merge branch 'master' of git://git.denx.de/u-boot-usb
This commit is contained in:
commit
373ae16c92
16 changed files with 138 additions and 12 deletions
|
@ -571,11 +571,11 @@ static void do_usb_start(void)
|
|||
return;
|
||||
|
||||
/* Driver model will probe the devices as they are found */
|
||||
#ifndef CONFIG_DM_USB
|
||||
# ifdef CONFIG_USB_STORAGE
|
||||
/* try to recognize storage devices immediately */
|
||||
usb_stor_curr_dev = usb_stor_scan(1);
|
||||
# endif
|
||||
#ifndef CONFIG_DM_USB
|
||||
# ifdef CONFIG_USB_KEYBOARD
|
||||
drv_usb_kbd_init();
|
||||
# endif
|
||||
|
|
|
@ -303,7 +303,6 @@ void usb_stor_reset(void)
|
|||
usb_max_devs = 0;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_DM_USB
|
||||
/*******************************************************************************
|
||||
* scan the usb and reports device info
|
||||
* to the user if mode = 1
|
||||
|
@ -311,11 +310,12 @@ void usb_stor_reset(void)
|
|||
*/
|
||||
int usb_stor_scan(int mode)
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
if (mode == 1)
|
||||
printf(" scanning usb for storage devices... ");
|
||||
|
||||
#ifndef CONFIG_DM_USB
|
||||
unsigned char i;
|
||||
|
||||
usb_disable_asynch(1); /* asynch transfer not allowed */
|
||||
|
||||
usb_stor_reset();
|
||||
|
@ -329,12 +329,12 @@ int usb_stor_scan(int mode)
|
|||
} /* for */
|
||||
|
||||
usb_disable_asynch(0); /* asynch transfer allowed */
|
||||
#endif
|
||||
printf("%d Storage Device(s) found\n", usb_max_devs);
|
||||
if (usb_max_devs > 0)
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int usb_stor_irq(struct usb_device *dev)
|
||||
{
|
||||
|
|
|
@ -10,6 +10,7 @@ CONFIG_CMD_BOOTZ=y
|
|||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_CMD_PING=y
|
||||
|
@ -34,3 +35,7 @@ CONFIG_DM_REGULATOR=y
|
|||
CONFIG_DM_REGULATOR_PFUZE100=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
|
|
|
@ -11,6 +11,7 @@ CONFIG_CMD_BOOTZ=y
|
|||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_CMD_PING=y
|
||||
|
@ -35,3 +36,7 @@ CONFIG_DM_REGULATOR=y
|
|||
CONFIG_DM_REGULATOR_PFUZE100=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
|
|
|
@ -66,6 +66,7 @@ CONFIG_DEBUG_UART_ANNOUNCE=y
|
|||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_ZYNQMP=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
|
|
|
@ -58,6 +58,7 @@ CONFIG_DEBUG_UART_ANNOUNCE=y
|
|||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_ZYNQMP=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_ULPI_VIEWPORT=y
|
||||
|
|
|
@ -58,6 +58,7 @@ CONFIG_DEBUG_UART_ANNOUNCE=y
|
|||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_ZYNQMP=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_ULPI_VIEWPORT=y
|
||||
|
|
|
@ -58,6 +58,7 @@ CONFIG_DEBUG_UART_ANNOUNCE=y
|
|||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_ZYNQMP=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_ULPI_VIEWPORT=y
|
||||
|
|
|
@ -58,6 +58,7 @@ CONFIG_DEBUG_UART_ANNOUNCE=y
|
|||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_ZYNQMP=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GADGET=y
|
||||
CONFIG_USB_ULPI_VIEWPORT=y
|
||||
|
|
|
@ -63,13 +63,11 @@ static char *state_names[] = {
|
|||
"WAIT_FOR_NULL_COMPLETE",
|
||||
};
|
||||
|
||||
#define DRIVER_DESC "DWC2 HS USB OTG Device Driver, (c) Samsung Electronics"
|
||||
#define DRIVER_VERSION "15 March 2009"
|
||||
|
||||
struct dwc2_udc *the_controller;
|
||||
|
||||
static const char driver_name[] = "dwc2-udc";
|
||||
static const char driver_desc[] = DRIVER_DESC;
|
||||
static const char ep0name[] = "ep0-control";
|
||||
|
||||
/* Max packet size*/
|
||||
|
|
|
@ -507,6 +507,7 @@ static const struct usb_cdc_mdlm_desc mdlm_desc = {
|
|||
* can't really use its struct. All we do here is say that we're using
|
||||
* the submode of "SAFE" which directly matches the CDC Subset.
|
||||
*/
|
||||
#ifdef CONFIG_USB_ETH_SUBSET
|
||||
static const u8 mdlm_detail_desc[] = {
|
||||
6,
|
||||
USB_DT_CS_INTERFACE,
|
||||
|
@ -516,6 +517,7 @@ static const u8 mdlm_detail_desc[] = {
|
|||
0, /* network control capabilities (none) */
|
||||
0, /* network data capabilities ("raw" encapsulation) */
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -37,6 +37,12 @@ config USB_XHCI_ROCKCHIP
|
|||
help
|
||||
Enables support for the on-chip xHCI controller on Rockchip SoCs.
|
||||
|
||||
config USB_XHCI_ZYNQMP
|
||||
bool "Support for Xilinx ZynqMP on-chip xHCI USB controller"
|
||||
depends on ARCH_ZYNQMP
|
||||
help
|
||||
Enables support for the on-chip xHCI controller on Xilinx ZynqMP SoCs.
|
||||
|
||||
endif # USB_XHCI_HCD
|
||||
|
||||
config USB_EHCI_HCD
|
||||
|
|
|
@ -15,10 +15,14 @@
|
|||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/imx-common/iomux-v3.h>
|
||||
#include <asm/imx-common/sys_proto.h>
|
||||
#include <dm.h>
|
||||
#include <power/regulator.h>
|
||||
|
||||
#include "ehci.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define USB_OTGREGS_OFFSET 0x000
|
||||
#define USB_H1REGS_OFFSET 0x200
|
||||
#define USB_H2REGS_OFFSET 0x400
|
||||
|
@ -48,6 +52,7 @@
|
|||
#define ANADIG_USB2_PLL_480_CTRL_EN_USB_CLKS 0x00000040
|
||||
|
||||
#define USBNC_OFFSET 0x200
|
||||
#define USBNC_PHY_STATUS_OFFSET 0x23C
|
||||
#define USBNC_PHYSTATUS_ID_DIG (1 << 4) /* otg_id status */
|
||||
#define USBNC_PHYCFG2_ACAENB (1 << 4) /* otg_id detection enable */
|
||||
#define UCTRL_PWR_POL (1 << 9) /* OTG Polarity of Power Pin */
|
||||
|
@ -384,6 +389,7 @@ int ehci_hcd_stop(int index)
|
|||
struct ehci_mx6_priv_data {
|
||||
struct ehci_ctrl ctrl;
|
||||
struct usb_ehci *ehci;
|
||||
struct udevice *vbus_supply;
|
||||
enum usb_init_type init_type;
|
||||
int portnr;
|
||||
};
|
||||
|
@ -399,7 +405,15 @@ static int mx6_init_after_reset(struct ehci_ctrl *dev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
board_ehci_power(priv->portnr, (type == USB_INIT_DEVICE) ? 0 : 1);
|
||||
if (priv->vbus_supply) {
|
||||
ret = regulator_set_enable(priv->vbus_supply,
|
||||
(type == USB_INIT_DEVICE) ?
|
||||
false : true);
|
||||
if (ret) {
|
||||
puts("Error enabling VBUS supply\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (type == USB_INIT_DEVICE)
|
||||
return 0;
|
||||
|
@ -417,24 +431,108 @@ static const struct ehci_ops mx6_ehci_ops = {
|
|||
.init_after_reset = mx6_init_after_reset
|
||||
};
|
||||
|
||||
static int ehci_usb_phy_mode(struct udevice *dev)
|
||||
{
|
||||
struct usb_platdata *plat = dev_get_platdata(dev);
|
||||
void *__iomem addr = (void *__iomem)dev_get_addr(dev);
|
||||
void *__iomem phy_ctrl, *__iomem phy_status;
|
||||
const void *blob = gd->fdt_blob;
|
||||
int offset = dev->of_offset, phy_off;
|
||||
u32 val;
|
||||
|
||||
/*
|
||||
* About fsl,usbphy, Refer to
|
||||
* Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt.
|
||||
*/
|
||||
if (is_mx6()) {
|
||||
phy_off = fdtdec_lookup_phandle(blob,
|
||||
offset,
|
||||
"fsl,usbphy");
|
||||
if (phy_off < 0)
|
||||
return -EINVAL;
|
||||
|
||||
addr = (void __iomem *)fdtdec_get_addr(blob, phy_off,
|
||||
"reg");
|
||||
if ((fdt_addr_t)addr == FDT_ADDR_T_NONE)
|
||||
return -EINVAL;
|
||||
|
||||
phy_ctrl = (void __iomem *)(addr + USBPHY_CTRL);
|
||||
val = readl(phy_ctrl);
|
||||
|
||||
if (val & USBPHY_CTRL_OTG_ID)
|
||||
plat->init_type = USB_INIT_DEVICE;
|
||||
else
|
||||
plat->init_type = USB_INIT_HOST;
|
||||
} else if (is_mx7()) {
|
||||
phy_status = (void __iomem *)(addr +
|
||||
USBNC_PHY_STATUS_OFFSET);
|
||||
val = readl(phy_status);
|
||||
|
||||
if (val & USBNC_PHYSTATUS_ID_DIG)
|
||||
plat->init_type = USB_INIT_DEVICE;
|
||||
else
|
||||
plat->init_type = USB_INIT_HOST;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ehci_usb_ofdata_to_platdata(struct udevice *dev)
|
||||
{
|
||||
struct usb_platdata *plat = dev_get_platdata(dev);
|
||||
const char *mode;
|
||||
|
||||
mode = fdt_getprop(gd->fdt_blob, dev->of_offset, "dr_mode", NULL);
|
||||
if (mode) {
|
||||
if (strcmp(mode, "peripheral") == 0)
|
||||
plat->init_type = USB_INIT_DEVICE;
|
||||
else if (strcmp(mode, "host") == 0)
|
||||
plat->init_type = USB_INIT_HOST;
|
||||
else if (strcmp(mode, "otg") == 0)
|
||||
return ehci_usb_phy_mode(dev);
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ehci_usb_phy_mode(dev);
|
||||
}
|
||||
|
||||
static int ehci_usb_probe(struct udevice *dev)
|
||||
{
|
||||
struct usb_platdata *plat = dev_get_platdata(dev);
|
||||
struct usb_ehci *ehci = (struct usb_ehci *)dev_get_addr(dev);
|
||||
struct ehci_mx6_priv_data *priv = dev_get_priv(dev);
|
||||
enum usb_init_type type = plat->init_type;
|
||||
struct ehci_hccr *hccr;
|
||||
struct ehci_hcor *hcor;
|
||||
int ret;
|
||||
|
||||
priv->ehci = ehci;
|
||||
priv->portnr = dev->seq;
|
||||
priv->init_type = plat->init_type;
|
||||
priv->init_type = type;
|
||||
|
||||
ret = device_get_supply_regulator(dev, "vbus-supply",
|
||||
&priv->vbus_supply);
|
||||
if (ret)
|
||||
debug("%s: No vbus supply\n", dev->name);
|
||||
|
||||
ret = ehci_mx6_common_init(ehci, priv->portnr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
board_ehci_power(priv->portnr, (priv->init_type == USB_INIT_DEVICE) ? 0 : 1);
|
||||
if (priv->vbus_supply) {
|
||||
ret = regulator_set_enable(priv->vbus_supply,
|
||||
(type == USB_INIT_DEVICE) ?
|
||||
false : true);
|
||||
if (ret) {
|
||||
puts("Error enabling VBUS supply\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->init_type == USB_INIT_HOST) {
|
||||
setbits_le32(&ehci->usbmode, CM_HOST);
|
||||
|
@ -460,6 +558,7 @@ U_BOOT_DRIVER(usb_mx6) = {
|
|||
.name = "ehci_mx6",
|
||||
.id = UCLASS_USB,
|
||||
.of_match = mx6_usb_ids,
|
||||
.ofdata_to_platdata = ehci_usb_ofdata_to_platdata,
|
||||
.probe = ehci_usb_probe,
|
||||
.remove = ehci_deregister,
|
||||
.ops = &ehci_usb_ops,
|
||||
|
|
|
@ -149,4 +149,12 @@
|
|||
|
||||
#define CONFIG_IOMUX_LPSR
|
||||
|
||||
/* USB Configs */
|
||||
#ifdef CONFIG_CMD_USB
|
||||
#define CONFIG_USB_HOST_ETHER
|
||||
#define CONFIG_USB_ETHER_ASIX
|
||||
#define CONFIG_USB_ETHER_RTL8152
|
||||
#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
|
||||
#endif
|
||||
|
||||
#endif /* __CONFIG_H */
|
||||
|
|
|
@ -109,7 +109,6 @@
|
|||
|
||||
#if defined(CONFIG_ZYNQMP_USB)
|
||||
#define CONFIG_SYS_USB_XHCI_MAX_ROOT_PORTS 2
|
||||
#define CONFIG_USB_XHCI_ZYNQMP
|
||||
|
||||
#define CONFIG_SYS_DFU_DATA_BUF_SIZE 0x1800000
|
||||
#define DFU_DEFAULT_POLL_TIMEOUT 300
|
||||
|
|
|
@ -6819,7 +6819,6 @@ CONFIG_USB_XHCI_FSL
|
|||
CONFIG_USB_XHCI_KEYSTONE
|
||||
CONFIG_USB_XHCI_OMAP
|
||||
CONFIG_USB_XHCI_PCI
|
||||
CONFIG_USB_XHCI_ZYNQMP
|
||||
CONFIG_USER_LOWLEVEL_INIT
|
||||
CONFIG_USE_FDT
|
||||
CONFIG_USE_INTERRUPT
|
||||
|
|
Loading…
Reference in a new issue