mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 13:11:31 +00:00
usb: UniPhier: add UniPhier on-chip EHCI host driver support
Support EHCI host driver used on Panasonic UniPhier platform. Since Device Tree is not supported on UniPhier yet, the base address of USB cores are passed from board files (platdevice.c). TODO for me: Move the base address to device trees. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Acked-by: Marek Vasut <marex@denx.de>
This commit is contained in:
parent
113ef59e45
commit
048899ba8c
8 changed files with 119 additions and 0 deletions
|
@ -13,3 +13,16 @@ SERIAL_DEVICE(0, 0x54006800, UART_MASTER_CLK)
|
|||
SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK)
|
||||
SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK)
|
||||
SERIAL_DEVICE(3, 0x54006b00, UART_MASTER_CLK)
|
||||
|
||||
/* USB : TODO for Masahiro Yamada: move base address to Device Tree */
|
||||
struct uniphier_ehci_platform_data uniphier_ehci_platdata[] = {
|
||||
{
|
||||
.base = 0x5a800100,
|
||||
},
|
||||
{
|
||||
.base = 0x5a810100,
|
||||
},
|
||||
{
|
||||
.base = 0x5a820100,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -13,3 +13,13 @@ SERIAL_DEVICE(0, 0x54006800, UART_MASTER_CLK)
|
|||
SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK)
|
||||
SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK)
|
||||
SERIAL_DEVICE(3, 0x54006b00, UART_MASTER_CLK)
|
||||
|
||||
/* USB : TODO for Masahiro Yamada: move base address to Device Tree */
|
||||
struct uniphier_ehci_platform_data uniphier_ehci_platdata[] = {
|
||||
{
|
||||
.base = 0x5a800100,
|
||||
},
|
||||
{
|
||||
.base = 0x5a810100,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -13,3 +13,16 @@ SERIAL_DEVICE(0, 0x54006800, UART_MASTER_CLK)
|
|||
SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK)
|
||||
SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK)
|
||||
SERIAL_DEVICE(3, 0x54006b00, UART_MASTER_CLK)
|
||||
|
||||
/* USB : TODO for Masahiro Yamada: move base address to Device Tree */
|
||||
struct uniphier_ehci_platform_data uniphier_ehci_platdata[] = {
|
||||
{
|
||||
.base = 0x5a800100,
|
||||
},
|
||||
{
|
||||
.base = 0x5a810100,
|
||||
},
|
||||
{
|
||||
.base = 0x5a820100,
|
||||
},
|
||||
};
|
||||
|
|
33
arch/arm/include/asm/arch-uniphier/ehci-uniphier.h
Normal file
33
arch/arm/include/asm/arch-uniphier/ehci-uniphier.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright (C) 2014 Panasonic Corporation
|
||||
* Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __PLAT_UNIPHIER_EHCI_H
|
||||
#define __PLAT_UNIPHIER_EHCI_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/io.h>
|
||||
#include "mio-regs.h"
|
||||
|
||||
struct uniphier_ehci_platform_data {
|
||||
unsigned long base;
|
||||
};
|
||||
|
||||
extern struct uniphier_ehci_platform_data uniphier_ehci_platdata[];
|
||||
|
||||
static inline void uniphier_ehci_reset(int index, int on)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
tmp = readl(MIO_USB_RSTCTRL(index));
|
||||
if (on)
|
||||
tmp &= ~MIO_USB_RSTCTRL_XRST;
|
||||
else
|
||||
tmp |= MIO_USB_RSTCTRL_XRST;
|
||||
writel(tmp, MIO_USB_RSTCTRL(index));
|
||||
}
|
||||
|
||||
#endif /* __PLAT_UNIPHIER_EHCI_H */
|
|
@ -21,4 +21,6 @@ U_BOOT_DEVICE(serial##n) = { \
|
|||
.platdata = &serial_device##n \
|
||||
};
|
||||
|
||||
#include <asm/arch/ehci-uniphier.h>
|
||||
|
||||
#endif /* ARCH_PLATDEVICE_H */
|
||||
|
|
|
@ -45,4 +45,12 @@ config USB_EHCI
|
|||
|
||||
if USB_EHCI_HCD
|
||||
|
||||
config USB_EHCI_UNIPHIER
|
||||
bool "Support for Panasonic UniPhier on-chip EHCI USB controller"
|
||||
depends on ARCH_UNIPHIER
|
||||
default y
|
||||
---help---
|
||||
Enables support for the on-chip EHCI controller on Panasonic
|
||||
UniPhier SoCs.
|
||||
|
||||
endif
|
||||
|
|
|
@ -37,6 +37,7 @@ obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
|
|||
obj-$(CONFIG_USB_EHCI_SPEAR) += ehci-spear.o
|
||||
obj-$(CONFIG_USB_EHCI_SUNXI) += ehci-sunxi.o
|
||||
obj-$(CONFIG_USB_EHCI_TEGRA) += ehci-tegra.o
|
||||
obj-$(CONFIG_USB_EHCI_UNIPHIER) += ehci-uniphier.o
|
||||
obj-$(CONFIG_USB_EHCI_VCT) += ehci-vct.o
|
||||
obj-$(CONFIG_USB_EHCI_RMOBILE) += ehci-rmobile.o
|
||||
obj-$(CONFIG_USB_EHCI_ZYNQ) += ehci-zynq.o
|
||||
|
|
39
drivers/usb/host/ehci-uniphier.c
Normal file
39
drivers/usb/host/ehci-uniphier.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright (C) 2014 Panasonic Corporation
|
||||
* Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <usb.h>
|
||||
#include <asm/arch/ehci-uniphier.h>
|
||||
#include "ehci.h"
|
||||
|
||||
/*
|
||||
* Create the appropriate control structures to manage
|
||||
* a new EHCI host controller.
|
||||
*/
|
||||
int ehci_hcd_init(int index, enum usb_init_type init, struct ehci_hccr **hccr,
|
||||
struct ehci_hcor **hcor)
|
||||
{
|
||||
struct ehci_hccr *cr;
|
||||
struct ehci_hcor *or;
|
||||
|
||||
uniphier_ehci_reset(index, 0);
|
||||
|
||||
cr = (struct ehci_hccr *)(uniphier_ehci_platdata[index].base);
|
||||
or = (void *)cr + HC_LENGTH(ehci_readl(&cr->cr_capbase));
|
||||
|
||||
*hccr = cr;
|
||||
*hcor = or;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ehci_hcd_stop(int index)
|
||||
{
|
||||
uniphier_ehci_reset(index, 1);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue