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

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(-)
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)

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

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

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
participants (4)
-
Kumar Gala
-
Mehresh Ramneek-B31383
-
Ramneek Mehresh
-
Wolfgang Denk