Skip to content
Snippets Groups Projects
Commit 149c751d authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

usb: UniPhier: support OF configuration


If CONFIG_OF_CONTROL is defined, search device tree nodes that are
compatible with "panasonic,uniphier-ehci" and take the base address
from their "reg" property.

Signed-off-by: default avatarMasahiro Yamada <yamada.m@jp.panasonic.com>
Cc: Marek Vasut <marex@denx.de>
parent 625177d2
No related branches found
No related tags found
No related merge requests found
...@@ -14,7 +14,6 @@ SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK) ...@@ -14,7 +14,6 @@ SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK)
SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK) SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK)
SERIAL_DEVICE(3, 0x54006b00, 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[] = { struct uniphier_ehci_platform_data uniphier_ehci_platdata[] = {
{ {
.base = 0x5a800100, .base = 0x5a800100,
......
...@@ -14,7 +14,6 @@ SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK) ...@@ -14,7 +14,6 @@ SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK)
SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK) SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK)
SERIAL_DEVICE(3, 0x54006b00, 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[] = { struct uniphier_ehci_platform_data uniphier_ehci_platdata[] = {
{ {
.base = 0x5a800100, .base = 0x5a800100,
......
...@@ -14,7 +14,6 @@ SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK) ...@@ -14,7 +14,6 @@ SERIAL_DEVICE(1, 0x54006900, UART_MASTER_CLK)
SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK) SERIAL_DEVICE(2, 0x54006a00, UART_MASTER_CLK)
SERIAL_DEVICE(3, 0x54006b00, 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[] = { struct uniphier_ehci_platform_data uniphier_ehci_platdata[] = {
{ {
.base = 0x5a800100, .base = 0x5a800100,
......
...@@ -32,3 +32,11 @@ ...@@ -32,3 +32,11 @@
&uart1 { &uart1 {
status = "okay"; status = "okay";
}; };
&usb0 {
status = "okay";
};
&usb1 {
status = "okay";
};
...@@ -56,5 +56,23 @@ ...@@ -56,5 +56,23 @@
reg = <0x54006b00 0x20>; reg = <0x54006b00 0x20>;
clock-frequency = <36864000>; clock-frequency = <36864000>;
}; };
usb0: usb@5a800100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a800100 0x100>;
};
usb1: usb@5a810100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a810100 0x100>;
};
usb2: usb@5a820100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a820100 0x100>;
};
}; };
}; };
...@@ -32,3 +32,11 @@ ...@@ -32,3 +32,11 @@
&uart1 { &uart1 {
status = "okay"; status = "okay";
}; };
&usb0 {
status = "okay";
};
&usb1 {
status = "okay";
};
...@@ -62,5 +62,17 @@ ...@@ -62,5 +62,17 @@
reg = <0x54006b00 0x20>; reg = <0x54006b00 0x20>;
clock-frequency = <73728000>; clock-frequency = <73728000>;
}; };
usb0: usb@5a800100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a800100 0x100>;
};
usb1: usb@5a810100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a810100 0x100>;
};
}; };
}; };
...@@ -32,3 +32,11 @@ ...@@ -32,3 +32,11 @@
&uart1 { &uart1 {
status = "okay"; status = "okay";
}; };
&usb0 {
status = "okay";
};
&usb1 {
status = "okay";
};
...@@ -56,5 +56,23 @@ ...@@ -56,5 +56,23 @@
reg = <0x54006b00 0x20>; reg = <0x54006b00 0x20>;
clock-frequency = <80000000>; clock-frequency = <80000000>;
}; };
usb0: usb@5a800100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a800100 0x100>;
};
usb1: usb@5a810100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a810100 0x100>;
};
usb2: usb@5a820100 {
compatible = "panasonic,uniphier-ehci", "usb-ehci";
status = "disabled";
reg = <0x5a820100 0x100>;
};
}; };
}; };
...@@ -6,10 +6,43 @@ ...@@ -6,10 +6,43 @@
*/ */
#include <common.h> #include <common.h>
#include <linux/err.h>
#include <usb.h> #include <usb.h>
#include <asm/arch/ehci-uniphier.h> #include <asm/arch/ehci-uniphier.h>
#include "ehci.h" #include "ehci.h"
#ifdef CONFIG_OF_CONTROL
#include <fdtdec.h>
DECLARE_GLOBAL_DATA_PTR;
#define FDT gd->fdt_blob
#define COMPAT "panasonic,uniphier-ehci"
static int get_uniphier_ehci_base(int index, struct ehci_hccr **base)
{
int offset;
for (offset = fdt_node_offset_by_compatible(FDT, 0, COMPAT);
offset >= 0;
offset = fdt_node_offset_by_compatible(FDT, offset, COMPAT)) {
if (index == 0) {
*base = (struct ehci_hccr *)
fdtdec_get_addr(FDT, offset, "reg");
return 0;
}
index--;
}
return -ENODEV; /* not found */
}
#else
static int get_uniphier_ehci_base(int index, struct ehci_hccr **base)
{
*base = (struct ehci_hccr *)uniphier_ehci_platdata[index].base;
return 0;
}
#endif
/* /*
* Create the appropriate control structures to manage * Create the appropriate control structures to manage
* a new EHCI host controller. * a new EHCI host controller.
...@@ -17,12 +50,15 @@ ...@@ -17,12 +50,15 @@
int ehci_hcd_init(int index, enum usb_init_type init, struct ehci_hccr **hccr, int ehci_hcd_init(int index, enum usb_init_type init, struct ehci_hccr **hccr,
struct ehci_hcor **hcor) struct ehci_hcor **hcor)
{ {
int ret;
struct ehci_hccr *cr; struct ehci_hccr *cr;
struct ehci_hcor *or; struct ehci_hcor *or;
uniphier_ehci_reset(index, 0); uniphier_ehci_reset(index, 0);
cr = (struct ehci_hccr *)(uniphier_ehci_platdata[index].base); ret = get_uniphier_ehci_base(index, &cr);
if (ret < 0)
return ret;
or = (void *)cr + HC_LENGTH(ehci_readl(&cr->cr_capbase)); or = (void *)cr + HC_LENGTH(ehci_readl(&cr->cr_capbase));
*hccr = cr; *hccr = cr;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment