Patchwork [U-Boot] powerpc/mpc8xxx: Fix USB device-tree fixup

login
register
mail settings
Submitter ramneek mehresh
Date Sept. 19, 2012, 8:28 a.m.
Message ID <1348043331-17290-1-git-send-email-ramneek.mehresh@freescale.com>
Download mbox | patch
Permalink /patch/184949/
State Accepted, archived
Delegated to: Andy Fleming
Headers show

Comments

ramneek mehresh - Sept. 19, 2012, 8:28 a.m.
Fix usb device-tree fixup:
	- wrong modification of dr_mode and phy_type when
	  "usb1" is not mentioned inside hwconfig string;
	   now allows hwconfig strings like:
		"usb2:dr_mode=host,phy_type=ulpi"
	- add warning message for using usb_dr_mode
	  and usb_phy_type env variables (if either is used)

Signed-off-by: Ramneek Mehresh <ramneek.mehresh@freescale.com>
---
Applies on git://git.denx.de/u-boot.git
(branch master)

 arch/powerpc/cpu/mpc8xxx/fdt.c |   50 +++++++++++++++++++++++++++------------
 1 files changed, 34 insertions(+), 16 deletions(-)

Patch

diff --git a/arch/powerpc/cpu/mpc8xxx/fdt.c b/arch/powerpc/cpu/mpc8xxx/fdt.c
index 09810be..26815b8 100644
--- a/arch/powerpc/cpu/mpc8xxx/fdt.c
+++ b/arch/powerpc/cpu/mpc8xxx/fdt.c
@@ -138,6 +138,8 @@  void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 	const char *phys[] = { "ulpi", "utmi" };
 	const char *mode = NULL;
 	const char *phy_type = NULL;
+	char *dr_mode_type = NULL;
+	char *dr_phy_type = NULL;
 	char usb1_defined = 0;
 	int usb_mode_off = -1;
 	int usb_phy_off = -1;
@@ -155,6 +157,7 @@  void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 					break;
 				}
 			}
+
 			for (j = 0; j < ARRAY_SIZE(phys); j++) {
 				if (hwconfig_subarg_cmp(str, "phy_type",
 						phys[j])) {
@@ -162,31 +165,46 @@  void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 					break;
 				}
 			}
-			if (mode_idx >= 0) {
-				usb_mode_off = fdt_fixup_usb_mode_phy_type(blob,
-					modes[mode_idx], NULL, usb_mode_off);
-				if (usb_mode_off < 0)
-					return;
-			}
-			if (phy_idx >= 0) {
-				usb_phy_off = fdt_fixup_usb_mode_phy_type(blob,
-					NULL, phys[phy_idx], usb_phy_off);
-				if (usb_phy_off < 0)
-					return;
-			}
+
+			dr_mode_type = modes[mode_idx];
+			dr_phy_type = phys[phy_idx];
+
+			/* use usb_dr_mode and usb_phy_type if
+			   usb1_defined = 0; these variables are to
+			   be deprecated */
 			if (!strcmp(str, "usb1"))
 				usb1_defined = 1;
-			if (mode_idx < 0 && phy_idx < 0)
+
+			if (mode_idx < 0 && phy_idx < 0) {
 				printf("WARNING: invalid phy or mode\n");
+				return;
+			}
 		}
+
+		usb_mode_off = fdt_fixup_usb_mode_phy_type(blob,
+			dr_mode_type, NULL, usb_mode_off);
+
+		if (usb_mode_off < 0)
+			return;
+
+		usb_phy_off = fdt_fixup_usb_mode_phy_type(blob,
+			NULL, dr_phy_type, usb_phy_off);
+
+		if (usb_phy_off < 0)
+			return;
 	}
+
 	if (!usb1_defined) {
 		int usb_off = -1;
 		mode = getenv("usb_dr_mode");
 		phy_type = getenv("usb_phy_type");
-		if (!mode && !phy_type)
-			return;
-		fdt_fixup_usb_mode_phy_type(blob, mode, phy_type, usb_off);
+		if (mode || phy_type) {
+			printf("WARNING: usb_dr_mode and usb_phy_type "
+				"are to be deprecated soon. Use "
+				"hwconfig to set these values instead!!\n");
+			fdt_fixup_usb_mode_phy_type(blob, mode,
+				phy_type, usb_off);
+		}
 	}
 }
 #endif /* defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) */