From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V2 3/3] imx: mx6ul_14x14_evk add ENET support
Date: Sun, 23 Aug 2015 17:45:45 +0200 [thread overview]
Message-ID: <55D9EAA9.2020801@denx.de> (raw)
In-Reply-To: <20150812083417.GA22901@shlinux2>
On 12/08/2015 10:34, Peng Fan wrote:
> Wrong patch version. Please ignore.
>
It is, discarded.
Best regards,
Stefano Babic
> Sorry.
> Peng.
>
> On Wed, Aug 12, 2015 at 05:40:47PM +0800, Peng Fan wrote:
>> 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 <Peng.Fan@freescale.com>
>> Cc: Stefano Babic <sbabic@denx.de>
>> Cc: Fabio Estevam <fabio.estevam@freescale.com>
>> ---
>>
>> Changes v2:
>> Addressed Fabio's comments, using "fec_id == 0", but not "0 == fec_id".
>>
>> board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c | 116 ++++++++++++++++++++++
>> configs/mx6ul_14x14_evk_defconfig | 3 +
>> include/configs/mx6ul_14x14_evk.h | 21 ++++
>> 3 files changed, 140 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..af07487 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 <common.h>
>> #include <fsl_esdhc.h>
>> #include <i2c.h>
>> +#include <miiphy.h>
>> #include <linux/sizes.h>
>> #include <mmc.h>
>> +#include <netdev.h>
>> #include <usb.h>
>> #include <usb/ehci-fsl.h>
>>
>> @@ -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 (fec_id == 0) {
>> + /*
>> + * 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..85952e4 100644
>> --- a/configs/mx6ul_14x14_evk_defconfig
>> +++ b/configs/mx6ul_14x14_evk_defconfig
>> @@ -2,3 +2,6 @@ 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
>> diff --git a/include/configs/mx6ul_14x14_evk.h b/include/configs/mx6ul_14x14_evk.h
>> index 757aa6a..f643e4d 100644
>> --- a/include/configs/mx6ul_14x14_evk.h
>> +++ b/include/configs/mx6ul_14x14_evk.h
>> @@ -221,6 +221,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
>> --
>> 1.8.4
>>
>>
>
--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
next prev parent reply other threads:[~2015-08-23 15:45 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-12 9:40 [U-Boot] [PATCH V2 1/3] imx: clock support enet2 anatop clock support Peng Fan
2015-08-12 9:40 ` [U-Boot] [PATCH V2 2/3] net: fec: do not access reserved register for i.MX6UL Peng Fan
2015-08-12 19:15 ` Joe Hershberger
2015-08-23 15:43 ` Stefano Babic
2015-08-31 17:14 ` Stefano Babic
2015-09-01 0:32 ` Peng Fan
2015-09-01 7:15 ` Stefano Babic
2015-08-12 9:40 ` [U-Boot] [PATCH V2 3/3] imx: mx6ul_14x14_evk add ENET support Peng Fan
2015-08-12 8:34 ` Peng Fan
2015-08-23 15:45 ` Stefano Babic [this message]
2015-08-24 0:07 ` Peng Fan
2015-08-24 7:31 ` Stefano Babic
2015-08-24 6:35 ` Peng Fan
2015-08-23 15:43 ` [U-Boot] [PATCH V2 1/3] imx: clock support enet2 anatop clock support Stefano Babic
-- strict thread matches above, loose matches on Subject: below --
2015-08-12 9:46 Peng Fan
2015-08-12 9:46 ` [U-Boot] [PATCH V2 3/3] imx: mx6ul_14x14_evk add ENET support Peng Fan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55D9EAA9.2020801@denx.de \
--to=sbabic@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox