From patchwork Mon Aug 3 10:06:20 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 503100 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 128431402D1 for ; Mon, 3 Aug 2015 20:07:22 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 6F1E64BF72; Mon, 3 Aug 2015 12:07:04 +0200 (CEST) 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 xxlq_pp7oeel; Mon, 3 Aug 2015 12:07:04 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 68FF34BF92; Mon, 3 Aug 2015 12:06:59 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 423AD4BF7E for ; Mon, 3 Aug 2015 12:06:55 +0200 (CEST) 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 KIXVBnIcVBsb for ; Mon, 3 Aug 2015 12:06:55 +0200 (CEST) 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 na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bon0148.outbound.protection.outlook.com [157.56.111.148]) by theia.denx.de (Postfix) with ESMTPS id 2F9784BF64 for ; Mon, 3 Aug 2015 12:06:43 +0200 (CEST) Received: from BN3PR0301CA0042.namprd03.prod.outlook.com (10.160.180.180) by BY1PR0301MB1304.namprd03.prod.outlook.com (10.161.206.153) with Microsoft SMTP Server (TLS) id 15.1.225.19; Mon, 3 Aug 2015 10:06:41 +0000 Received: from BL2FFO11FD031.protection.gbl (2a01:111:f400:7c09::195) by BN3PR0301CA0042.outlook.office365.com (2a01:111:e400:4000::52) with Microsoft SMTP Server (TLS) id 15.1.225.19 via Frontend Transport; Mon, 3 Aug 2015 10:06:41 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD031.mail.protection.outlook.com (10.173.160.71) with Microsoft SMTP Server (TLS) id 15.1.243.9 via Frontend Transport; Mon, 3 Aug 2015 10:06:40 +0000 Received: from linux-jyl1.ap.freescale.net (b51431-11.ap.freescale.net [10.193.102.226]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t73A6Nti013939; Mon, 3 Aug 2015 03:06:38 -0700 From: Peng Fan To: Date: Mon, 3 Aug 2015 18:06:20 +0800 Message-ID: <1438596380-4632-4-git-send-email-Peng.Fan@freescale.com> X-Mailer: git-send-email 1.8.4 In-Reply-To: <1438596380-4632-1-git-send-email-Peng.Fan@freescale.com> References: <1438596380-4632-1-git-send-email-Peng.Fan@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD031; 1:FYCIa5nBQ8eYYGee8N7esPTO1In3fbqW7Qlz+Gq14aV1j1qqLjmdc/dwaCGdR+YrFeGdDVuWfWyWWEnq7Q4vENgANWP6stKYsOsdWy0TwtZ1+VSMkVppT+9HD8wSvyqknRm+Kk4LEnzOaHx2KgNGDRb/SFYgdXYPr7ZHLwXDq2P5qzFrMPRL6SRSQSnKL24NG8wYdgkq6/Zp514j+1hb55/GqtZuwIGcp57V9nq2JvUQoevlQArljjV+6ivZn1kjOq3AQrST5kLsbiHFEXMAikX9twl+mLY4o9uBn+AciVoCZK9qm3hu4vazfxhp1IHcdyNp2TqDOxmzWEKU16jZUQ== X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(339900001)(189002)(199003)(48376002)(6806004)(87936001)(85426001)(50466002)(47776003)(19580405001)(19580395003)(46102003)(77096005)(92566002)(2950100001)(86362001)(50226001)(50986999)(105606002)(104016003)(2351001)(106466001)(229853001)(107886002)(77156002)(5001960100002)(62966003)(110136002)(189998001)(36756003)(76176999)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BY1PR0301MB1304; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:sfv; MX:1; A:1; LANG:; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1304; 2:Pa+gMP9UXWNpNC941ERErhKDUbFppRK9B4GTF7naHmImP9tOLdsqtuZR9kELnxl52boMyLb7th0zcNVg2MzcHgujRVZlqkfVkHjDphQyN/2HJNnywSWqLiGZ71HUnTMvwUvTPO5zkdNLmzhSbaWSf4VRVJzDjjkU72aOZNxNSLk=; 3:PsioHLHS6R7Bc71oR425izITMNYPO0WmlZP8yfTPxkIAMDWdvjILfZM34aJ/TjFvWKRkPDypi4dQiEgDpQ42cJCoU7IUsDqcJplRo4YhvrMoPbij3VseFfZGTSltWBE7ksTLibI2m3qWC4aF65JPz6yPuTRCOnhLrITcGoDX1+KfjLxxgQO/rzoktsj79Flx7hX7iRqNQztN1g6okxw2kfqwrO8v9FALUuTRug1Lt2s=; 25:XLNUgAUuseQG7bNFrE21RjNDVJ1Nu9PXCVhW1ejPQg6bcpeYI0q+DicGz4PyjrTLTQMmYGjWA/qPYfzmGZ7qaiys7MaQdypsdBmv4xjoTm9E6FXsj4rLrCgJoc71Lf3uIgsdo+sikrk8F0EzPTKaRlvjdzh8aWmF4AcBoTGJKma08arO0Av1SjPVhHdFRLHLDV0uPDAlpzMmPo6XzT5fsp1pLzOFy0veAJAC8WnyYi+5nduDduDwhhyOjwbxER9ZKaCtyzY6QwxjgX7yIROrag== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1304; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1304; 20:vhHKgbo3JE+YNPY4VJAcSVWBAJkRBL7LqEcyhWwvR6z+ZMu7ahCB1NmH2PCQd2xNcQCz/wzLRoIepDzyjrxZxnYlcl3Ig0Q8SMUfdtThVHVoFUirTd0go3f8qHoGCHbk9Iluf6vTIk/3mtp2EWph/KPFhOSm7h6z92nsnh+ITPzKladh9adKW8CcLTUbfKZbS+afyoOySfuK5dcKL8vyN2IhAvggDRiJHmeF4A+xNm6bc3I4oO+akgyJPzQhQp/L+HYXmTSPVATDhyt9026zndJipx8Fn3tO9DR9AidnfQ545VSO3p1Kj1oz/Y7Zc4uv7gHzjvwg5N7lBnqo2GNOIbcrj276JoKgiJmZIVGpKWY=; 4:gNanLTEVVbMf5099O0tzaFVFD2e77IHpKBEyqEqrXKOamxZAANWYX7oVzjMNDrJRf/Kh8DfRoZroHp+lrTFjp0tCGG9PKs6FcyTHWiu9AdSGE9y7Yw+12qRJh8CLe5/HVeQsYpWIapQrsFbVenQE9SC6AD1tOlTzvp7N5zRhlWkl/116vuJ/JokgqV8mY++rlNdt2UfBh+XDYvmneHra9hM5TalPGcWitgvg3VWTMLYwm7M3x4UFw0kd5KD9/ndhsiXG1FhiUsejm9vUjwMplRX6lmZu1kHtUSvgyY+n9/A= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(3002001); SRVR:BY1PR0301MB1304; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0301MB1304; X-Forefront-PRVS: 0657D528EC X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1304; 23:YAxp5XNRNOPYd6OV7uN1pqJTurb2Sl4EVu6M8VfGQiDuoyEF+qDAyvEiT5POSK3EVw6O+0gBMcyGCdu2/EIbewnSLD+Pl1fLadGz1g9HiAAumEJ+xYZBYIdl0DPR0B+K/BiZ+ytv50dvVpDQhUlnv4sCvLHrHcvYqIZgM1Bwm0lkw/GPklwI1OCSUJhY9LMlOBEfzPwL0x73CZLbTKbtxIs0HUD/IW46/qi+0VPV7CavTtAN7az5MQya1Z0A52iNenb+bYNuvX902/7AF25b/bqMJMvGFXB0jrfMJaB7/b3A1dgjqqR+5XehbQu45ueOjQ3vWSzXGQ4jfUBk4a9v0/ogZsKhWEF6ZdZuLZHqEyuMEKK5kgsfo3quzfeOs5REQ7dEOhPWQ0mMYq/1WjiY+o+j9urShzJI0KMZRnkpOLDxfrkIYWUOHxEx2AhVMfdPFssSTHJLJqk8XuzsZhNUoDc0cnyf3qmX71w4DRZ467J1Iaic1Imc9fyvWzbJjNCz8sXklTzqzF6ITFbN+XBKnk9Z7Oj3VNJZXoHzSW2eb7mGVHklWp2UGrJXa9cMLkFsQBlWPjlNFdw8cUECmwSLje9JFRMkAI4hnubXo1UelIj75RoMryyDHan+0isKbkIzmdpZQnYOYzWMXPEm31KBW4IZWvO29fx10NvD/TRoP2Hc/LlVhHEPmGaD4s+vAQcJ5b8tWP3YOtTiw9SZQEIuH2dfyE3YPLZwai2tpD17/GlfRBKU7L7KtSpMmJibsRNuC3RYelxEfLckaDRAfbEZsRhUhX76Z0u/HdxDHvnvrgFgfx9N+P+4gz6xKNCeciLsl6yYaYpZcOBxwn7ctOPoji9Kbjnp1KqAuUg0QAqmX7rGzTV02LqfQYGxbz8lRYyXQXAt3dyq6BcflFVgulDWUQ== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1304; 5:uNpPacEM6B6xYRmEsV18VbmsqS7k6q9hbX7ysNYVFNGoHzFQa74LQwF9FhegtP9gaix2Dc4oUUgpbgeV/8dYb1Wdtlhwfqdo0AjEe7xqMztswygs/cnWoKr/FdxMqQNN4xxzz5L6vwk29gDozxzv0g==; 24:ANi9oBGODZJDDrZHwL+UM/QzK1YabPCzF7cxgAIEVmPuOl68FgD2hNYo+rFoBwjn6LTp5Vl6jpSmFJX3YBMwnpy424bLb31/TH1/vm7eIQU=; 20:tuGx0zixXWH8iOU4ROUsBkoVgxY/iIJlHC9U+kpAIm95AFJfuO1hKKShajZg9Em7ZzIRcMGfBMRDglSvOfKyEg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2015 10:06:40.7547 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0301MB1304 Cc: fabio.estevam@freescale.com, u-boot@lists.denx.de Subject: [U-Boot] [PATCH 4/4] imx: mx6ul_14x14_evk add ENET support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Add enet support for mx6ul_14x14_evk board: 1. add pinmux settings 2. implement board_eth_init 3. implement board_phy_config Signed-off-by: Peng Fan Cc: Stefano Babic Cc: Fabio Estevam --- board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c | 116 ++++++++++++++++++++++ configs/mx6ul_14x14_evk_defconfig | 4 + include/configs/mx6ul_14x14_evk.h | 21 ++++ 3 files changed, 141 insertions(+) diff --git a/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c b/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c index 8f712cb..771e4f9 100644 --- a/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c +++ b/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c @@ -19,8 +19,10 @@ #include #include #include +#include #include #include +#include #include #include @@ -43,6 +45,18 @@ DECLARE_GLOBAL_DATA_PTR; PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ PAD_CTL_ODE) +#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \ + PAD_CTL_SPEED_HIGH | \ + PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST) + +#define MDIO_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \ + PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST | PAD_CTL_ODE) + +#define ENET_CLK_PAD_CTRL (PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) + +#define ENET_RX_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ + PAD_CTL_SPEED_HIGH | PAD_CTL_SRE_FAST) + #define IOX_SDI IMX_GPIO_NR(5, 10) #define IOX_STCP IMX_GPIO_NR(5, 7) #define IOX_SHCP IMX_GPIO_NR(5, 11) @@ -457,6 +471,104 @@ int board_ehci_hcd_init(int port) } #endif +#ifdef CONFIG_FEC_MXC +/* + * pin conflicts for fec1 and fec2, GPIO1_IO06 and GPIO1_IO07 can only + * be used for ENET1 or ENET2, cannot be used for both. + */ +static iomux_v3_cfg_t const fec1_pads[] = { + MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL), + MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET1_TX_DATA0__ENET1_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET1_TX_DATA1__ENET1_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET1_TX_EN__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL), + MX6_PAD_ENET1_RX_DATA0__ENET1_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET1_RX_DATA1__ENET1_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), +}; + +static iomux_v3_cfg_t const fec2_pads[] = { + MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL), + MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), + + MX6_PAD_ENET2_TX_DATA0__ENET2_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET2_TX_DATA1__ENET2_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL), + MX6_PAD_ENET2_TX_EN__ENET2_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), + + MX6_PAD_ENET2_RX_DATA0__ENET2_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET2_RX_DATA1__ENET2_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), + MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), +}; + +static void setup_iomux_fec(int fec_id) +{ + if (fec_id == 0) + imx_iomux_v3_setup_multiple_pads(fec1_pads, + ARRAY_SIZE(fec1_pads)); + else + imx_iomux_v3_setup_multiple_pads(fec2_pads, + ARRAY_SIZE(fec2_pads)); +} + +int board_eth_init(bd_t *bis) +{ + int ret; + + setup_iomux_fec(CONFIG_FEC_ENET_DEV); + + ret = fecmxc_initialize_multi(bis, CONFIG_FEC_ENET_DEV, + CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE); + if (ret) + printf("FEC%d MXC: %s:failed\n", CONFIG_FEC_ENET_DEV, __func__); + + return 0; +} + +static int setup_fec(int fec_id) +{ + struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR; + int ret; + + if (0 == fec_id) { + /* + * Use 50M anatop loopback REF_CLK1 for ENET1, + * clear gpr1[13], set gpr1[17]. + */ + clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_MASK, + IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK); + } else { + /* + * Use 50M anatop loopback REF_CLK2 for ENET2, + * clear gpr1[14], set gpr1[18]. + */ + clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC2_MASK, + IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK); + } + + ret = enable_fec_anatop_clock(fec_id, ENET_50MHZ); + if (ret) + return ret; + + enable_enet_clk(1); + + return 0; +} + +int board_phy_config(struct phy_device *phydev) +{ + phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x8190); + + if (phydev->drv->config) + phydev->drv->config(phydev); + + return 0; +} +#endif + int board_early_init_f(void) { setup_iomux_uart(); @@ -477,6 +589,10 @@ int board_init(void) setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1); #endif +#ifdef CONFIG_FEC_MXC + setup_fec(CONFIG_FEC_ENET_DEV); +#endif + #ifdef CONFIG_USB_EHCI_MX6 setup_usb(); #endif diff --git a/configs/mx6ul_14x14_evk_defconfig b/configs/mx6ul_14x14_evk_defconfig index b6eefaf..87ba686 100644 --- a/configs/mx6ul_14x14_evk_defconfig +++ b/configs/mx6ul_14x14_evk_defconfig @@ -2,3 +2,7 @@ CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/imx-common/spl_sd.cfg,MX6UL" CONFIG_ARM=y CONFIG_TARGET_MX6UL_14X14_EVK=y CONFIG_SPL=y +CONFIG_CMD_NET=y +CONFIG_CMD_PING=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y diff --git a/include/configs/mx6ul_14x14_evk.h b/include/configs/mx6ul_14x14_evk.h index 436b022..a3815b3 100644 --- a/include/configs/mx6ul_14x14_evk.h +++ b/include/configs/mx6ul_14x14_evk.h @@ -222,6 +222,27 @@ #define CONFIG_USB_MAX_CONTROLLER_COUNT 2 #endif +#ifdef CONFIG_CMD_NET +#define CONFIG_FEC_MXC +#define CONFIG_MII +#define CONFIG_FEC_ENET_DEV 1 + +#if (CONFIG_FEC_ENET_DEV == 0) +#define IMX_FEC_BASE ENET_BASE_ADDR +#define CONFIG_FEC_MXC_PHYADDR 0x2 +#define CONFIG_FEC_XCV_TYPE RMII +#elif (CONFIG_FEC_ENET_DEV == 1) +#define IMX_FEC_BASE ENET2_BASE_ADDR +#define CONFIG_FEC_MXC_PHYADDR 0x1 +#define CONFIG_FEC_XCV_TYPE RMII +#endif +#define CONFIG_ETHPRIME "FEC" + +#define CONFIG_PHYLIB +#define CONFIG_PHY_MICREL +#define CONFIG_FEC_DMA_MINALIGN 64 +#endif + #define CONFIG_IMX6_THERMAL #endif