From patchwork Fri Jan 29 06:15:03 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: harninder rai X-Patchwork-Id: 71718 X-Patchwork-Delegate: galak@kernel.crashing.org Return-Path: X-Original-To: wd@gemini.denx.de Delivered-To: wd@gemini.denx.de Received: from diddl.denx.de (diddl.denx.de [10.0.0.6]) by gemini.denx.de (Postfix) with ESMTP id ECBABE1C7BE for ; Fri, 29 Jan 2010 07:17:54 +0100 (CET) Received: from diddl.denx.de (localhost.localdomain [127.0.0.1]) by diddl.denx.de (Postfix) with ESMTP id AFE98C913186 for ; Fri, 29 Jan 2010 07:17:54 +0100 (CET) Received: from pop.mnet-online.de by diddl.denx.de with POP3 (fetchmail-6.3.9) for (single-drop); Fri, 29 Jan 2010 07:17:54 +0100 (CET) Received: from murder (svr19.m-online.net [192.168.3.147]) by backend2 (Cyrus v2.2.12) with LMTPA; Fri, 29 Jan 2010 07:15:45 +0100 X-Sieve: CMU Sieve 2.2 Received: from mail.m-online.net (localhost [127.0.0.1]) by frontend3.pop.m-online.net (Cyrus v2.2.13) with LMTPA; Fri, 29 Jan 2010 07:15:43 +0100 Received: from scanner-2.m-online.net (unknown [192.168.8.166]) by mail.m-online.net (Postfix) with ESMTP id 27DCB200089; Fri, 29 Jan 2010 07:15:43 +0100 (CET) Received: from mxin-1.m-online.net ([192.168.6.164]) by scanner-2.m-online.net (scanner-2.m-online.net [192.168.8.166]) (amavisd-new, port 10026) with ESMTP id 26093-04; Fri, 29 Jan 2010 07:15:41 +0100 (CET) Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by mxin-1.m-online.net (Postfix) with ESMTP id 7650346C0A5; Fri, 29 Jan 2010 07:15:40 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D15DD2807E; Fri, 29 Jan 2010 07:15:31 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1eP4riiTKHb7; Fri, 29 Jan 2010 07:15:31 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 1932E2807F; Fri, 29 Jan 2010 07:15:26 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2AD932807C for ; Fri, 29 Jan 2010 07:15:23 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 88RhuhXvWE5E for ; Fri, 29 Jan 2010 07:15:21 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from az33egw02.freescale.net (az33egw02.freescale.net [192.88.158.103]) by theia.denx.de (Postfix) with ESMTPS id 0AFD92807B for ; Fri, 29 Jan 2010 07:15:19 +0100 (CET) Received: from az33smr01.freescale.net (az33smr01.freescale.net [10.64.34.199]) by az33egw02.freescale.net (8.14.3/az33egw02) with ESMTP id o0T6F5iZ029914 for ; Thu, 28 Jan 2010 23:15:16 -0700 (MST) Received: from lc1106.zin33.ap.freescale.net (lc1106.zin33.ap.freescale.net [10.232.3.106]) by az33smr01.freescale.net (8.13.1/8.13.0) with ESMTP id o0T6Kk9u013362; Fri, 29 Jan 2010 00:20:47 -0600 (CST) Received: by lc1106.zin33.ap.freescale.net (Postfix, from userid 4537) id 7064EC06A; Fri, 29 Jan 2010 11:45:03 +0530 (IST) From: Harninder Rai To: u-boot@lists.denx.de Date: Fri, 29 Jan 2010 11:45:03 +0530 Message-Id: <1264745703-12040-1-git-send-email-harninder.rai@freescale.com> X-Mailer: git-send-email 1.5.6.5 Cc: Vivek Mahajan Subject: [U-Boot] [PATCH v3] 85xx/p1_p2_rdb: p1020: add muxed usb2handling X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.9 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de X-Virus-Scanned: by amavisd-new at m-online.net This patch adds the 2nd USB (muxed with eLBC) node depending upon enabling the 'usb2' environment variable via hwconfig i.e. "setenv hwconfig usb2", so that linux has the 2nd USB controller enabled, which will lead to the disabling of the eLBC (NAND, NOR etc). Also the 2nd USB controller has been left disabled in the u-boot, otherwise any changes in the environment won't be saved. Enabled agent mode support in USB2 depending upon "setenv hwconfig usb2:dr_mode=peripheral" Signed-off-by: Vivek Mahajan Signed-off-by: Harninder Rai --- - Incorporated Kumar's comments - Applies to git://git.denx.de/u-boot-mpc85xx.git board/freescale/p1_p2_rdb/p1_p2_rdb.c | 126 ++++++++++++++++++++++++++++++++- include/asm-ppc/immap_85xx.h | 4 +- 2 files changed, 128 insertions(+), 2 deletions(-) diff --git a/board/freescale/p1_p2_rdb/p1_p2_rdb.c b/board/freescale/p1_p2_rdb/p1_p2_rdb.c index 3af660e..0b370ad 100644 --- a/board/freescale/p1_p2_rdb/p1_p2_rdb.c +++ b/board/freescale/p1_p2_rdb/p1_p2_rdb.c @@ -1,5 +1,5 @@ /* - * Copyright 2009 Freescale Semiconductor, Inc. + * Copyright 2009-10 Freescale Semiconductor, Inc. * * See file CREDITS for list of people who contributed to this * project. @@ -21,6 +21,7 @@ */ #include +#include #include #include #include @@ -41,6 +42,7 @@ DECLARE_GLOBAL_DATA_PTR; #define SGMII_PHY_RST_SET 0x00020000 #define PCIE_RST_SET 0x00010000 #define RGMII_PHY_RST_SET 0x02000000 +#define USB2_PORT_OUT_EN 0x01000000 #define USB_RST_CLR 0x04000000 @@ -198,10 +200,116 @@ int board_eth_init(bd_t *bis) #endif #if defined(CONFIG_OF_BOARD_SETUP) +void fdt_fixup_add_2nd_usb(void *blob, int agent) +{ + const char *soc_compat = "fsl,p1020-immr"; + const char *lbc_compat = "fsl,p1020-elbc"; + const u32 *addrcell, *sizecell, *ph; + int off, lbcoff, len, err; + u32 *regbuf = NULL; + u32 *irqbuf = NULL; + + off = fdt_node_offset_by_compatible(blob, -1, soc_compat); + if (off < 0) { + printf("WARNING: could not find compatible node %s: %s.\n", + soc_compat, fdt_strerror(off)); + return; + } + + lbcoff = fdt_node_offset_by_compatible(blob, -1, lbc_compat); + if (lbcoff < 0) { + printf("WARNING: could not find compatible node %s: %s.\n", + lbc_compat, fdt_strerror(lbcoff)); + return; + } + + addrcell = fdt_getprop(blob, off, "#address-cells", NULL); + sizecell = fdt_getprop(blob, off, "#size-cells", NULL); + + off = fdt_add_subnode(blob, off, "usb@23000"); + if (off < 0) { + printf("WARNING: could not add 2nd usb node %s.\n", + fdt_strerror(off)); + return; + } + + err = fdt_setprop_cell(blob, off, "#address-cells", 1); + if (err < 0) + printf("WARNING: could not set #address-cell property: %s\n", + fdt_strerror(err)); + + err = fdt_setprop_cell(blob, off, "#size-cells", 0); + if (err < 0) + printf("WARNING: could not set #size-cells property: %s\n", + fdt_strerror(err)); + + err = fdt_setprop_string(blob, off, "compatible", "fsl-usb2-dr"); + if (err < 0) + printf("WARNING: could not set compatible property: %s\n", + fdt_strerror(err)); + + err = fdt_setprop_string(blob, off, "phy_type", "ulpi"); + if (err < 0) + printf("WARNING: could not set phy_type property: %s\n", + fdt_strerror(err)); + + if (agent) { + err = fdt_setprop_string(blob, off, "dr_mode", "peripheral"); + if (err < 0) + printf("WARNING: could not set dr_mode property: %s\n", + fdt_strerror(err)); + } + + if (addrcell && *addrcell == 2) { + regbuf[0] = 0; + regbuf[1] = CONFIG_SYS_MPC85xx_USB2_OFFSET; + len = 2; + } else { + regbuf[0] = CONFIG_SYS_MPC85xx_USB2_OFFSET; + len = 1; + } + + if (sizecell && *sizecell == 2) { + regbuf[len] = 0; + regbuf[len + 1] = 0x1000; + len += 2; + } else { + regbuf[len] = 0x1000; + len++; + } + + err = fdt_setprop(blob, off, "reg", regbuf, len * sizeof(u32)); + if (err < 0) + printf("WARNING: could not set <%s> %s\n", + "reg", fdt_strerror(err)); + + irqbuf[0] = 0x2e; + irqbuf[1] = 0x2; + + err = fdt_setprop(blob, off, "interrupts", irqbuf, 2 * sizeof(u32)); + if (err < 0) + printf("WARNING: could not set %s %s\n", + "interrupts", fdt_strerror(err)); + + ph = fdt_getprop(blob, lbcoff, "interrupt-parent", 0); + if (!ph) { + printf("WARNING: could not read interrupt-parent property\n"); + return; + } + + err = fdt_setprop(blob, off, "interrupt-parent", ph, sizeof(u32)); + if (err < 0) + printf("WARNING: could not set %s %s\n", + "interrupt-parent", fdt_strerror(err)); +} + void ft_board_setup(void *blob, bd_t *bd) { + volatile ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; + volatile ccsr_gpio_t *gpio = (void *)CONFIG_SYS_MPC85xx_GPIO_ADDR; phys_addr_t base; phys_size_t size; + int agent; ft_cpu_setup(blob, bd); @@ -209,6 +317,22 @@ void ft_board_setup(void *blob, bd_t *bd) size = getenv_bootm_size(); fdt_fixup_memory(blob, (u64)base, (u64)size); + + if (!hwconfig("usb2")) + return; + + agent = hwconfig_subarg_cmp("usb2", "dr_mode", "peripheral"); + + /* + * Add the 2nd usb node and enable it. eLBC will + * now be disabled since it is MUXed with USB2 + */ + + fdt_fixup_add_2nd_usb(blob, agent); + + setbits_be32(&gpio->gpdir, USB2_PORT_OUT_EN); + setbits_be32(&gpio->gpdat, USB2_PORT_OUT_EN); + setbits_be32(&gur->pmuxcr, MPC85xx_PMUXCR_ELBC_OFF_USB2_ON); } #endif diff --git a/include/asm-ppc/immap_85xx.h b/include/asm-ppc/immap_85xx.h index 957ad76..8a79698 100644 --- a/include/asm-ppc/immap_85xx.h +++ b/include/asm-ppc/immap_85xx.h @@ -1,7 +1,7 @@ /* * MPC85xx Internal Memory Map * - * Copyright 2007-2009 Freescale Semiconductor, Inc. + * Copyright 2007-2010 Freescale Semiconductor, Inc. * * Copyright(c) 2002,2003 Motorola Inc. * Xianghua Xiao (x.xiao@motorola.com) @@ -1880,6 +1880,7 @@ typedef struct ccsr_gur { #define MPC85xx_PMUXCR_SD_DATA 0x80000000 #define MPC85xx_PMUXCR_SDHC_CD 0x40000000 #define MPC85xx_PMUXCR_SDHC_WP 0x20000000 +#define MPC85xx_PMUXCR_ELBC_OFF_USB2_ON 0x01000000 u8 res6[12]; u32 devdisr; /* Device disable control */ #define MPC85xx_DEVDISR_PCI1 0x80000000 @@ -2032,6 +2033,7 @@ enum { #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