|
|
|
@ -16,17 +16,23 @@ |
|
|
|
|
/* Information about a USB port */ |
|
|
|
|
struct ehci_pci_priv { |
|
|
|
|
struct ehci_ctrl ehci; |
|
|
|
|
struct phy phy; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_DM_USB |
|
|
|
|
|
|
|
|
|
static void ehci_pci_init(struct udevice *dev, struct ehci_hccr **ret_hccr, |
|
|
|
|
static int ehci_pci_init(struct udevice *dev, struct ehci_hccr **ret_hccr, |
|
|
|
|
struct ehci_hcor **ret_hcor) |
|
|
|
|
{ |
|
|
|
|
struct ehci_pci_priv *priv = dev_get_priv(dev); |
|
|
|
|
struct ehci_hccr *hccr; |
|
|
|
|
struct ehci_hcor *hcor; |
|
|
|
|
int ret; |
|
|
|
|
u32 cmd; |
|
|
|
|
|
|
|
|
|
ret = ehci_setup_phy(dev, &priv->phy, 0); |
|
|
|
|
if (ret) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
hccr = (struct ehci_hccr *)dm_pci_map_bar(dev, |
|
|
|
|
PCI_BASE_ADDRESS_0, PCI_REGION_MEM); |
|
|
|
|
hcor = (struct ehci_hcor *)((uintptr_t) hccr + |
|
|
|
@ -43,6 +49,8 @@ static void ehci_pci_init(struct udevice *dev, struct ehci_hccr **ret_hccr, |
|
|
|
|
dm_pci_read_config32(dev, PCI_COMMAND, &cmd); |
|
|
|
|
cmd |= PCI_COMMAND_MASTER; |
|
|
|
|
dm_pci_write_config32(dev, PCI_COMMAND, cmd); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#else |
|
|
|
@ -120,12 +128,27 @@ static int ehci_pci_probe(struct udevice *dev) |
|
|
|
|
{ |
|
|
|
|
struct ehci_hccr *hccr; |
|
|
|
|
struct ehci_hcor *hcor; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
ehci_pci_init(dev, &hccr, &hcor); |
|
|
|
|
ret = ehci_pci_init(dev, &hccr, &hcor); |
|
|
|
|
if (ret) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
return ehci_register(dev, hccr, hcor, NULL, 0, USB_INIT_HOST); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int ehci_pci_remove(struct udevice *dev) |
|
|
|
|
{ |
|
|
|
|
struct ehci_pci_priv *priv = dev_get_priv(dev); |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
ret = ehci_deregister(dev); |
|
|
|
|
if (ret) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
return ehci_shutdown_phy(dev, &priv->phy); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const struct udevice_id ehci_pci_ids[] = { |
|
|
|
|
{ .compatible = "ehci-pci" }, |
|
|
|
|
{ } |
|
|
|
@ -135,7 +158,7 @@ U_BOOT_DRIVER(ehci_pci) = { |
|
|
|
|
.name = "ehci_pci", |
|
|
|
|
.id = UCLASS_USB, |
|
|
|
|
.probe = ehci_pci_probe, |
|
|
|
|
.remove = ehci_deregister, |
|
|
|
|
.remove = ehci_pci_remove, |
|
|
|
|
.of_match = ehci_pci_ids, |
|
|
|
|
.ops = &ehci_usb_ops, |
|
|
|
|
.platdata_auto_alloc_size = sizeof(struct usb_platdata), |
|
|
|
|