Patchwork [U-Boot] powerpc/qoriq: Update USB mode device tree fixup

login
register
mail settings
Submitter ramneek mehresh
Date March 22, 2011, 10:20 a.m.
Message ID <1300789256-14487-1-git-send-email-ramneek.mehresh@freescale.com>
Download mbox | patch
Permalink /patch/87898/
State Not Applicable
Delegated to: Kumar Gala
Headers show

Comments

ramneek mehresh - March 22, 2011, 10:20 a.m.
Modify support for USB mode fixup:
	- Add support for fetching USB mode and phy type
	  via hwconfig
	- Add common support for USB mode and phy type
	  device tree fix-up for all USB controllers
	  mentioned in hwconfig string
	- Add USB2 controller offset

Signed-off-by: Ramneek Mehresh <ramneek.mehresh@freescale.com>
---
Applies on git://git.am.freescale.net/mirrors/u-boot
(branch next)
 arch/powerpc/cpu/mpc8xxx/fdt.c        |   84 ++++++++++++++++++++++++++-------
 arch/powerpc/include/asm/immap_85xx.h |    3 +-
 include/fdt_support.h                 |    6 ++-
 3 files changed, 74 insertions(+), 19 deletions(-)
Kumar Gala - April 6, 2011, 4:35 a.m.
On Mar 22, 2011, at 5:20 AM, Ramneek Mehresh wrote:

> Modify support for USB mode fixup:
> 	- Add support for fetching USB mode and phy type
> 	  via hwconfig
> 	- Add common support for USB mode and phy type
> 	  device tree fix-up for all USB controllers
> 	  mentioned in hwconfig string
> 	- Add USB2 controller offset
> 
> Signed-off-by: Ramneek Mehresh <ramneek.mehresh@freescale.com>
> ---
> Applies on git://git.am.freescale.net/mirrors/u-boot
> (branch next)
> arch/powerpc/cpu/mpc8xxx/fdt.c        |   84 ++++++++++++++++++++++++++-------
> arch/powerpc/include/asm/immap_85xx.h |    3 +-
> include/fdt_support.h                 |    6 ++-
> 3 files changed, 74 insertions(+), 19 deletions(-)

Jerry,

Any comments or an ack on the fdt bits here?

- k
Wolfgang Denk - April 6, 2011, 5:16 a.m.
Dear Ramneek Mehresh,

In message <1300789256-14487-1-git-send-email-ramneek.mehresh@freescale.com> you wrote:
> Modify support for USB mode fixup:
> 	- Add support for fetching USB mode and phy type
> 	  via hwconfig
> 	- Add common support for USB mode and phy type
> 	  device tree fix-up for all USB controllers
> 	  mentioned in hwconfig string
> 	- Add USB2 controller offset

Sounds as if these were 3 independent changes, so these should go into
three separate patches.

Best regards,

Wolfgang Denk
Mehresh Ramneek-B31383 - April 6, 2011, 7:43 a.m.
Hi Wolfgang,


Thanks for your inputs...

The first two points are the features provided by the same code change. They should be in the same patch.


Adding of USB2 controller offset is for supporting second USB controller in QoriQ series of processors.

I can send a separate patch for that.

So I'll break this patch into two ... one with "adding support for USB mode and phy type device-tree fix-up, where mode and phy type are fetched via hwconfig string"

And other for "adding second USB controller offset for QorIQ series of processors"

Please tell if this would be fine ...

Thanks and Regards,
Ramneek


 

-----Original Message-----
From: Wolfgang Denk [mailto:wd@denx.de] 
Sent: Wednesday, April 06, 2011 10:47 AM
To: Mehresh Ramneek-B31383
Cc: u-boot@lists.denx.de
Subject: Re: [U-Boot] [PATCH] powerpc/qoriq: Update USB mode device tree fixup

Dear Ramneek Mehresh,

In message <1300789256-14487-1-git-send-email-ramneek.mehresh@freescale.com> you wrote:
> Modify support for USB mode fixup:
> 	- Add support for fetching USB mode and phy type
> 	  via hwconfig
> 	- Add common support for USB mode and phy type
> 	  device tree fix-up for all USB controllers
> 	  mentioned in hwconfig string
> 	- Add USB2 controller offset

Sounds as if these were 3 independent changes, so these should go into three separate patches.

Best regards,

Wolfgang Denk

Patch

diff --git a/arch/powerpc/cpu/mpc8xxx/fdt.c b/arch/powerpc/cpu/mpc8xxx/fdt.c
index 54e60bb..3744205 100644
--- a/arch/powerpc/cpu/mpc8xxx/fdt.c
+++ b/arch/powerpc/cpu/mpc8xxx/fdt.c
@@ -1,5 +1,5 @@ 
 /*
- * Copyright 2009-2010 Freescale Semiconductor, Inc.
+ * Copyright 2009-2011 Freescale Semiconductor, Inc.
  *
  * This file is derived from arch/powerpc/cpu/mpc85xx/cpu.c and
  * arch/powerpc/cpu/mpc86xx/cpu.c. Basically this file contains
@@ -28,6 +28,8 @@ 
 #include <fdt_support.h>
 #include <asm/mp.h>
 #include <asm/fsl_enet.h>
+#include <hwconfig.h>
+#include <usb.h>
 
 #if defined(CONFIG_MP) && (defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx))
 static int ft_del_cpuhandle(void *blob, int cpuhandle)
@@ -83,25 +85,21 @@  void ft_fixup_num_cores(void *blob) {
 #endif /* defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) */
 
 #ifdef CONFIG_HAS_FSL_DR_USB
-void fdt_fixup_dr_usb(void *blob, bd_t *bd)
+static void fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
+					const char *phy_type)
 {
-	char *mode;
-	char *type;
 	const char *compat = "fsl-usb2-dr";
 	const char *prop_mode = "dr_mode";
 	const char *prop_type = "phy_type";
-	int node_offset;
-	int err;
+	static int start_offset = -1;
+	int err, node_offset;
 
-	mode = getenv("usb_dr_mode");
-	type = getenv("usb_phy_type");
-	if (!mode && !type)
-		return;
-
-	node_offset = fdt_node_offset_by_compatible(blob, 0, compat);
+	node_offset = fdt_node_offset_by_compatible(blob,
+			start_offset, compat);
 	if (node_offset < 0) {
-		printf("WARNING: could not find compatible node %s: %s.\n",
-			compat, fdt_strerror(node_offset));
+		printf("WARNING: could not find compatible"
+			"node %s: %s.\n", compat,
+			fdt_strerror(node_offset));
 		return;
 	}
 
@@ -113,13 +111,65 @@  void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 			       prop_mode, compat, fdt_strerror(err));
 	}
 
-	if (type) {
-		err = fdt_setprop(blob, node_offset, prop_type, type,
-				  strlen(type) + 1);
+	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, compat, fdt_strerror(err));
 	}
+
+	start_offset = node_offset;
+}
+
+void fdt_fixup_dr_usb(void *blob, bd_t *bd)
+{
+	const char *modes[] = { "host", "peripheral", "otg" };
+	const char *phys[] = { "ulpi", "umti" };
+	const char *phy_type = NULL;
+	char usb1_defined = 0;
+	const char *mode = NULL;
+	int node_offset;
+	char str[5];
+	int err, i, j;
+
+	for (i = 1; i <= USB_MAX_DEVICE; i++) {
+		int mode_idx = -1, phy_idx = -1;
+		sprintf(str, "%s%d", "usb", i);
+		if (hwconfig(str)) {
+			for (j = 0; j < sizeof(modes); j++) {
+				if (hwconfig_subarg_cmp(str, "dr_mode",
+						modes[j])) {
+					mode_idx = j;
+					break;
+				}
+			}
+			for (j = 0; j < sizeof(phys); j++) {
+				if (hwconfig_subarg_cmp(str, "phy_type",
+						phys[j])) {
+					phy_idx = j;
+					break;
+				}
+			}
+			if ((mode_idx >= 0) || (phy_idx >= 0)) {
+				fdt_fixup_usb_mode_phy_type(blob,
+					modes[mode_idx], phys[phy_idx]);
+				if (!strcmp(str, "usb1"))
+					usb1_defined = 1;
+			} else {
+				printf("WARNING: invalid phy or mode\n");
+			}
+		} else {
+			break;
+		}
+	}
+	if (!usb1_defined) {
+		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);
+	}
 }
 #endif /* CONFIG_HAS_FSL_DR_USB */
 
diff --git a/arch/powerpc/include/asm/immap_85xx.h b/arch/powerpc/include/asm/immap_85xx.h
index 30c64eb..1d67471 100644
--- a/arch/powerpc/include/asm/immap_85xx.h
+++ b/arch/powerpc/include/asm/immap_85xx.h
@@ -1,7 +1,7 @@ 
 /*
  * MPC85xx Internal Memory Map
  *
- * Copyright 2007-2010 Freescale Semiconductor, Inc.
+ * Copyright 2007-2011 Freescale Semiconductor, Inc.
  *
  * Copyright(c) 2002,2003 Motorola Inc.
  * Xianghua Xiao (x.xiao@motorola.com)
@@ -2245,6 +2245,7 @@  typedef struct ccsr_pme {
 #define CONFIG_SYS_MPC85xx_L2_OFFSET		0x20000
 #define CONFIG_SYS_MPC85xx_DMA_OFFSET		0x21000
 #define CONFIG_SYS_MPC85xx_USB_OFFSET		0x22000
+#define CONFIG_SYS_MPC85xx_USB2_OFFSET		0x23000
 #ifdef CONFIG_TSECV2
 #define CONFIG_SYS_TSEC1_OFFSET			0xB0000
 #else
diff --git a/include/fdt_support.h b/include/fdt_support.h
index ce6817b..9bde6c5 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -1,5 +1,5 @@ 
 /*
- * (C) Copyright 2007
+ * (C) Copyright 2011
  * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com
  *
  * See file CREDITS for list of people who contributed to this
@@ -56,8 +56,12 @@  void fdt_fixup_qe_firmware(void *fdt);
 
 #ifdef CONFIG_HAS_FSL_DR_USB
 void fdt_fixup_dr_usb(void *blob, bd_t *bd);
+void fdt_fixup_usb_mode_phy_type(void *blob, int node_offset,
+	const char *mode, const char *phy_type);
 #else
 static inline void fdt_fixup_dr_usb(void *blob, bd_t *bd) {}
+static inline void fdt_fixup_usb_mode_phy_type(void *blob, int node_offset,
+	const char *mode, const char *phy_type) {}
 #endif /* CONFIG_HAS_FSL_DR_USB */
 
 #if defined(CONFIG_SYS_FSL_SEC_COMPAT)