Skip to contentSkip to conversation

Make usb device-tree fixup independent of USB controller

PATCH New Sriram Dash 2 participants 7 messages Apr 5, 2016

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

v6 cover Make usb device-tree fixup independent of USB controller

Makes usb device-tree fixup independent of Controller type. This enables the usage of device-tree fixup as a common framework for EHCI and XHCI controllers

Sriram Dash (4):
drivers:usb:common:fsl-dt-fixup: Move device-tree fixup framework to
common file
drivers:usb:common:fsl-dt-fixup: Remove code duplication for
fdt_usb_get_node_type
drivers:usb:common:fsl-dt-fixup: Add device-tree fixup support for
xhci controller
drivers:usb:common:fsl-dt-fixup: fix return value of
fdt_usb_get_node_type

 Makefile                          |   1 +
 drivers/usb/common/Makefile       |   7 ++
 drivers/usb/common/fsl-dt-fixup.c | 202 ++++++++++++++++++++++++++++++++++++++
 drivers/usb/host/ehci-fsl.c       | 195 ------------------------------------
 include/fdt_support.h             |   4 +-
 5 files changed, 212 insertions(+), 197 deletions(-)
 create mode 100644 drivers/usb/common/Makefile
 create mode 100644 drivers/usb/common/fsl-dt-fixup.c
Signature · 1 line
2.1.0
#1 lore raw

PATCH v6 1/4 drivers:usb:common:fsl-dt-fixup: Move device-tree fixup framework to common file

Move usb device-tree fixup framework from ehci-fsl.c to common place so that it can be used by other drivers as well (xhci-fsl.c).

---
Changes in v6:
- No update
Changes in v5:
- No update
Changes in v4:
- Retain copyright info
- Remove #include from fsl-dt-fixup.c which are not used currently.
Changes in v3:
- git commit -M -C to generate patches
- Break the patch 1(Moving dt fix up and removing code duplication) into 2 patches
Changes in v2:
- Remove the #defines from the patch

 Makefile                                           |   1 +
 drivers/usb/common/Makefile                        |   6 +
 .../usb/{host/ehci-fsl.c => common/fsl-dt-fixup.c} | 157 -----------------
 drivers/usb/host/ehci-fsl.c                        | 195 ---------------------
 4 files changed, 7 insertions(+), 352 deletions(-)
 create mode 100644 drivers/usb/common/Makefile
 copy drivers/usb/{host/ehci-fsl.c => common/fsl-dt-fixup.c} (54%)
Makefile +1 -0
index 25ef3c1..ea7fd00 100644
@@ -648,6 +648,7 @@ libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
 libs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/
 libs-y += drivers/serial/
 libs-y += drivers/usb/dwc3/
+libs-y += drivers/usb/common/
 libs-y += drivers/usb/emul/
 libs-y += drivers/usb/eth/
 libs-y += drivers/usb/gadget/
drivers/usb/common/Makefile new file +6 -0
new file mode 100644
index 0000000..a38ee4a
@@ -0,0 +1,6 @@
+# (C) Copyright 2016 Freescale Semiconductor, Inc.
+#
+# SPDX-License-Identifier:      GPL-2.0+
+#
+
+obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o
drivers/usb/common/fsl-dt-fixup.c renamed from drivers/usb/host/ehci-fsl.c +0 -157

176 lines not on this page · raw message

drivers/usb/host/ehci-fsl.c +0 -195

198 lines not on this page · raw message

Signature · 1 line
2.1.0
#2 lore raw

PATCH v6 2/4 drivers:usb:common:fsl-dt-fixup: Remove code duplication for fdt_usb_get_node_type

In reply to Sriram Dash

Call fdt_usb_get_node_type() from fdt_fixup_usb_mode_phy_type() to avoid code duplication.

---
Changes in v6:
- no update.
Changes in v5:
- reorder the functions and gets rid of the forward declaration
Changes in v4:
- Make minimal modification to code
Changes in v3:
- Move the duplication of code to new patch

 drivers/usb/common/fsl-dt-fixup.c | 72 ++++++++++++++++-----------------------
 1 file changed, 29 insertions(+), 43 deletions(-)
drivers/usb/common/fsl-dt-fixup.c +29 -43
index 92adb46..eb13f12 100644
@@ -19,33 +19,45 @@
 #define CONFIG_USB_MAX_CONTROLLER_COUNT 1
 #endif
 
-static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
-				       const char *phy_type, int start_offset)
+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 *prop_mode = "dr_mode";
-	const char *prop_type = "phy_type";
 	const char *node_type = NULL;
-	int node_offset;
-	int err;
 
-	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) {
-			printf("WARNING: could not find compatible node: %s",
-			       fdt_strerror(node_offset));
-			return -1;
+	*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) {
+			printf("ERROR: could not find compatible node: %s\n",
+			       fdt_strerror(*node_offset));
+		} else {
+			node_type = compat_dr;
 		}
-		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, &node_offset);
+	if (!node_type)
+		return -1;
+
 	if (mode) {
 		err = fdt_setprop(blob, node_offset, prop_mode, mode,
 				  strlen(mode) + 1);
@@ -65,32 +77,6 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
 	return node_offset;
 }
 
-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 *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) {
-			printf("ERROR: could not find compatible node: %s\n",
-			       fdt_strerror(*node_offset));
-		} else {
-			node_type = compat_dr;
-		}
-	} else {
-		node_type = compat_mph;
-	}
-
-	return node_type;
-}
-
 static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum,
 				 int start_offset)
 {
Signature · 1 line
2.1.0
#3 lore raw

PATCH v6 3/4 drivers:usb:common:fsl-dt-fixup: Add device-tree fixup support for xhci controller

In reply to Sriram Dash

Enables usb device-tree fixup code to incorporate xhci controller

---
Changes in v6:
- static const char * const array
Changes in v5:
- Make the array static const
Changes in v4:
- Use a terminating entry in the array for getting node type for controller
Changes in v3:
- Modify the Makefile to remove comparison
- Put the supported controllers in array and checking from array
Changes in v2:
- Remove the #defines from the patch and adding controller support

 drivers/usb/common/Makefile       |  1 +
 drivers/usb/common/fsl-dt-fixup.c | 32 ++++++++++++++++----------------
 include/fdt_support.h             |  4 ++--
 3 files changed, 19 insertions(+), 18 deletions(-)
drivers/usb/common/Makefile +1 -0
index a38ee4a..2f3d43d 100644
@@ -4,3 +4,4 @@
 #
 
 obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o
+obj-$(CONFIG_USB_XHCI_FSL) += fsl-dt-fixup.o
drivers/usb/common/fsl-dt-fixup.c +16 -16
index eb13f12..46488dc 100644
@@ -19,27 +19,27 @@
 #define CONFIG_USB_MAX_CONTROLLER_COUNT 1
 #endif
 
+static const char * const compat_usb_fsl[] = {
+	"fsl-usb2-mph",
+	"fsl-usb2-dr",
+	"snps,dwc3",
+	NULL
+};
+
 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 *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) {
-			printf("ERROR: could not find compatible node: %s\n",
-			       fdt_strerror(*node_offset));
-		} else {
-			node_type = compat_dr;
+	int i;
+
+	for (i = 0; compat_usb_fsl[i]; i++) {
+		*node_offset = fdt_node_offset_by_compatible
+					(blob, start_offset,
+					 compat_usb_fsl[i]);
+		if (*node_offset >= 0) {
+			node_type = compat_usb_fsl[i];
+			break;
 		}
-	} else {
-		node_type = compat_mph;
 	}
 
 	return node_type;
include/fdt_support.h +2 -2
index 296add0..d34e959 100644
@@ -113,11 +113,11 @@ void fdt_fixup_qe_firmware(void *fdt);
  */
 int fdt_fixup_display(void *blob, const char *path, const char *display);
 
-#if defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB)
+#if defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL)
 void fdt_fixup_dr_usb(void *blob, bd_t *bd);
 #else
 static inline void fdt_fixup_dr_usb(void *blob, bd_t *bd) {}
-#endif /* defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) */
+#endif /* defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL) */
 
 #if defined(CONFIG_SYS_FSL_SEC_COMPAT)
 void fdt_fixup_crypto_node(void *blob, int sec_rev);
Signature · 1 line
2.1.0
#4 lore raw

PATCH v6 3/4 drivers:usb:common:fsl-dt-fixup: Add device-tree fixup support for xhci controller

Quoted 7 lines · Sriram Dash

Enables usb device-tree fixup code to incorporate xhci controller

---
Changes in v6:
- static const char * const array

This changelog entry is completely useless, it tells me exactly nothing about what you changed.

Quoted 91 lines

Changes in v5:
- Make the array static const
Changes in v4:
- Use a terminating entry in the array for getting node type for controller
Changes in v3:
- Modify the Makefile to remove comparison
- Put the supported controllers in array and checking from array
Changes in v2:
- Remove the #defines from the patch and adding controller support

 drivers/usb/common/Makefile       |  1 +
 drivers/usb/common/fsl-dt-fixup.c | 32 ++++++++++++++++----------------
 include/fdt_support.h             |  4 ++--
 3 files changed, 19 insertions(+), 18 deletions(-)
drivers/usb/common/Makefile +1 -0
index a38ee4a..2f3d43d 100644
@@ -4,3 +4,4 @@
 #
 
 obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o
+obj-$(CONFIG_USB_XHCI_FSL) += fsl-dt-fixup.o
drivers/usb/common/fsl-dt-fixup.c +16 -16
index eb13f12..46488dc 100644
@@ -19,27 +19,27 @@
 #define CONFIG_USB_MAX_CONTROLLER_COUNT 1
 #endif
 
+static const char * const compat_usb_fsl[] = {
+	"fsl-usb2-mph",
+	"fsl-usb2-dr",
+	"snps,dwc3",
+	NULL
+};
+
 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 *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) {
-			printf("ERROR: could not find compatible node: %s\n",
-			       fdt_strerror(*node_offset));
-		} else {
-			node_type = compat_dr;
+	int i;
+
+	for (i = 0; compat_usb_fsl[i]; i++) {
+		*node_offset = fdt_node_offset_by_compatible
+					(blob, start_offset,
+					 compat_usb_fsl[i]);
+		if (*node_offset >= 0) {
+			node_type = compat_usb_fsl[i];
+			break;
 		}
-	} else {
-		node_type = compat_mph;
 	}
 
 	return node_type;
include/fdt_support.h +2 -2
index 296add0..d34e959 100644
@@ -113,11 +113,11 @@ void fdt_fixup_qe_firmware(void *fdt);
  */
 int fdt_fixup_display(void *blob, const char *path, const char *display);
 
-#if defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB)
+#if defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL)
 void fdt_fixup_dr_usb(void *blob, bd_t *bd);
 #else
 static inline void fdt_fixup_dr_usb(void *blob, bd_t *bd) {}
-#endif /* defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) */
+#endif /* defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL) */
 
 #if defined(CONFIG_SYS_FSL_SEC_COMPAT)
 void fdt_fixup_crypto_node(void *blob, int sec_rev);
Signature · 2 lines
Best regards,
Marek Vasut
#5 lore raw

PATCH v6 4/4 drivers:usb:common:fsl-dt-fixup: fix return value of fdt_usb_get_node_type

In reply to Sriram Dash

Changes the return type of fdt_usb_get_node_type from char* to int

---
Changes in v6:
- change the description of the patch
Changes in v5:
- Modified title and description
- Using error codes for return type.

 drivers/usb/common/fsl-dt-fixup.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)
drivers/usb/common/fsl-dt-fixup.c +14 -11
index 46488dc..6f31932 100644
@@ -26,23 +26,24 @@ static const char * const compat_usb_fsl[] = {
 	NULL
 };
 
-static const char *fdt_usb_get_node_type(void *blob, int start_offset,
-					 int *node_offset)
+static int fdt_usb_get_node_type(void *blob, int start_offset,
+				 int *node_offset, const char **node_type)
 {
-	const char *node_type = NULL;
 	int i;
+	int ret = -ENOENT;
 
 	for (i = 0; compat_usb_fsl[i]; i++) {
 		*node_offset = fdt_node_offset_by_compatible
 					(blob, start_offset,
 					 compat_usb_fsl[i]);
 		if (*node_offset >= 0) {
-			node_type = compat_usb_fsl[i];
+			*node_type = compat_usb_fsl[i];
+			ret = 0;
 			break;
 		}
 	}
 
-	return node_type;
+	return ret;
 }
 
 static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
@@ -54,9 +55,10 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
 	int node_offset;
 	int err;
 
-	node_type = fdt_usb_get_node_type(blob, start_offset, &node_offset);
-	if (!node_type)
-		return -1;
+	err = fdt_usb_get_node_type(blob, start_offset,
+				    &node_offset, &node_type);
+	if (err < 0)
+		return err;
 
 	if (mode) {
 		err = fdt_setprop(blob, node_offset, prop_mode, mode,
@@ -83,9 +85,10 @@ static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum,
 	int node_offset, err;
 	const char *node_type = NULL;
 
-	node_type = fdt_usb_get_node_type(blob, start_offset, &node_offset);
-	if (!node_type)
-		return -1;
+	err = fdt_usb_get_node_type(blob, start_offset,
+				    &node_offset, &node_type);
+	if (err < 0)
+		return err;
 
 	err = fdt_setprop(blob, node_offset, prop_erratum, NULL, 0);
 	if (err < 0) {
Signature · 1 line
2.1.0
#6 lore raw

v6 cover Make usb device-tree fixup independent of USB controller

In reply to Sriram Dash
Quoted 13 lines · Sriram Dash

Makes usb device-tree fixup independent of Controller type. This enables the usage of device-tree fixup as a common framework for EHCI and XHCI controllers

Sriram Dash (4):
drivers:usb:common:fsl-dt-fixup: Move device-tree fixup framework to
common file
drivers:usb:common:fsl-dt-fixup: Remove code duplication for
fdt_usb_get_node_type
drivers:usb:common:fsl-dt-fixup: Add device-tree fixup support for
xhci controller
drivers:usb:common:fsl-dt-fixup: fix return value of
fdt_usb_get_node_type

Quoted 9 lines
 Makefile                          |   1 +
 drivers/usb/common/Makefile       |   7 ++
 drivers/usb/common/fsl-dt-fixup.c | 202 ++++++++++++++++++++++++++++++++++++++
 drivers/usb/host/ehci-fsl.c       | 195 ------------------------------------
 include/fdt_support.h             |   4 +-
 5 files changed, 212 insertions(+), 197 deletions(-)
 create mode 100644 drivers/usb/common/Makefile
 create mode 100644 drivers/usb/common/fsl-dt-fixup.c

Applied all to u-boot-usb/master

Signature · 2 lines
Best regards,
Marek Vasut