Move usb device-tree fixup from ehci drv so that it becomes
available to all ppc and arm platforms
Signed-off-by: Ramneek Mehresh
---
board/freescale/common/Makefile | 2 +
board/freescale/common/usb.c| 203
board/freescale/corenet_ds/corenet_ds.c | 1 -
drivers/usb/host/ehci-fsl.c | 196 --
include/fdt_support.h | 4 +-
5 files changed, 207 insertions(+), 199 deletions(-)
create mode 100644 board/freescale/common/usb.c
diff --git a/board/freescale/common/Makefile b/board/freescale/common/Makefile
index 51d2814..4b83303 100644
--- a/board/freescale/common/Makefile
+++ b/board/freescale/common/Makefile
@@ -64,6 +64,8 @@ obj-$(CONFIG_POWER_PFUZE100) += pfuze.o
obj-$(CONFIG_LS102XA_STREAM_ID)+= ls102xa_stream_id.o
+obj-$(CONFIG_USB_DEVTREE_FIXUP)+= usb.o
+
# deal with common files for P-series corenet based devices
obj-$(CONFIG_P2041RDB) += p_corenet/
obj-$(CONFIG_P3041DS) += p_corenet/
diff --git a/board/freescale/common/usb.c b/board/freescale/common/usb.c
new file mode 100644
index 000..b99fa2b
--- /dev/null
+++ b/board/freescale/common/usb.c
@@ -0,0 +1,203 @@
+/*
+ * (C) Copyright 2015 Freescale Semiconductor, Inc.
+ *
+ * Author: Ramneek Mehresh ramneek.mehr...@freescale.com
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ *
+ * FSL board device-tree fix-up
+ */
+#include
+#include
+#include
+#include
+
+#ifndef CONFIG_USB_MAX_CONTROLLER_COUNT
+#define CONFIG_USB_MAX_CONTROLLER_COUNT1
+#endif
+
+static const char *fdt_usb_get_node_type(void *blob, int start_offset,
+int *node_offset)
+{
+ const char *compat_dr = "fsl-usb2-dr";
+ const char *compat_mph = "fsl-usb2-mph";
+ const char *compat_snps = "snps,dwc3";
+ const char *node_type = NULL;
+
+ *node_offset = fdt_node_offset_by_compatible(blob, start_offset,
+compat_mph);
+ if (*node_offset < 0) {
+ *node_offset = fdt_node_offset_by_compatible(blob,
+start_offset,
+compat_dr);
+ if (*node_offset < 0) {
+ *node_offset = fdt_node_offset_by_compatible(blob,
+ start_offset, compat_snps);
+ if (*node_offset < 0) {
+ printf("ERROR:could not find node:%s",
+ fdt_strerror(*node_offset));
+ } else {
+ node_type = compat_snps;
+ }
+ } else {
+ node_type = compat_dr;
+ }
+ } else {
+ node_type = compat_mph;
+ }
+
+ return node_type;
+}
+
+static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
+ const char *phy_type, int start_offset)
+{
+ const char *prop_mode = "dr_mode";
+ const char *prop_type = "phy_type";
+ const char *node_type = NULL;
+ int node_offset;
+ int err;
+
+ node_type = fdt_usb_get_node_type(blob, start_offset, _offset);
+ if (!node_type)
+ return -1;
+
+ if (mode) {
+ err = fdt_setprop(blob, node_offset, prop_mode, mode,
+ strlen(mode) + 1);
+ if (err < 0)
+ printf("WARNING: could not set %s for %s: %s.\n",
+ prop_mode, node_type, fdt_strerror(err));
+ }
+
+ if (phy_type) {
+ err = fdt_setprop(blob, node_offset, prop_type, phy_type,
+ strlen(phy_type) + 1);
+ if (err < 0)
+ printf("WARNING: could not set %s for %s: %s.\n",
+ prop_type, node_type, fdt_strerror(err));
+ }
+
+ return node_offset;
+}
+
+static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum,
+int start_offset)
+{
+ int node_offset, err;
+ const char *node_type = NULL;
+
+ node_type = fdt_usb_get_node_type(blob, start_offset, _offset);
+ if (!node_type)
+ return -1;
+
+ err = fdt_setprop(blob, node_offset, prop_erratum, NULL, 0);
+ if (err < 0) {
+ printf("%s: ERROR: could not set %s for %s: %s.\n", __func__,
+ prop_erratum, node_type, fdt_strerror(err));
+ }
+
+ return node_offset;
+}
+
+void fdt_fixup_dr_usb(void *blob, bd_t *bd)
+{
+ static const char * const modes[] = { "host", "peripheral", "otg" };
+ static const char * const phys[] = { "ulpi", "utmi", "utmi_dual" };
+ int