]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00172274-01 - [MX6]: rework IEEE-1588 ts_clk in MX6Q ARIK CPU board.
authorFugang Duan <B38611@freescale.com>
Wed, 8 Feb 2012 03:26:58 +0000 (11:26 +0800)
committerOliver Wendt <ow@karo-electronics.de>
Mon, 30 Sep 2013 12:10:49 +0000 (14:10 +0200)
- Fix GPIO_16 IOMUX config.
- Config GPIO_16 pad to ENET_ANATOP_ETHERNET_REF_OUT.
- IEEE-1588 ts_clk, S/PDIF in and i2c3 are mutually exclusive,
  because all of them use GPIO_16, so it only for one function
  work at a moment.
- Test result:
    Enet work fine at 100/1000Mbps in TO1.1.
IEEE 1588 timestamp is convergent.

Signed-off-by: Fugang Duan <B38611@freescale.com>
arch/arm/mach-mx6/board-mx6dl_arm2.h
arch/arm/mach-mx6/board-mx6q_arm2.c
arch/arm/mach-mx6/board-mx6q_arm2.h
arch/arm/mach-mx6/clock.c
arch/arm/plat-mxc/include/mach/iomux-mx6dl.h
arch/arm/plat-mxc/include/mach/iomux-mx6q.h

index 1ba2e57746a3e45e3e04ea79526c8dca55848b8d..9261a28fb6d14008f15950db7c1cb5c23958e24c 100644 (file)
@@ -49,6 +49,9 @@ static iomux_v3_cfg_t mx6dl_arm2_pads[] = {
        MX6DL_PAD_RGMII_RD2__ENET_RGMII_RD2,
        MX6DL_PAD_RGMII_RD3__ENET_RGMII_RD3,
        MX6DL_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL,
+#ifdef CONFIG_FEC_1588
+       MX6DL_PAD_GPIO_16__ENET_ANATOP_ETHERNET_REF_OUT,
+#endif
 #endif
        /* MCLK for csi0 */
        MX6DL_PAD_GPIO_0__CCM_CLKO,
index dc7698b805593dde44da3c644f72a36d68154589..48656491c5f2b679ca624de478c8d4726037a1bf 100644 (file)
@@ -1409,11 +1409,12 @@ static void __init mx6_arm2_init(void)
        }
 
        /*
-        * S/PDIF in and i2c3 are mutually exclusive because both
-        * use GPIO_16.
+        * IEEE-1588 ts_clk, S/PDIF in and i2c3 are mutually exclusive
+        * because all of them use GPIO_16.
         * S/PDIF out and can1 stby are mutually exclusive because both
         * use GPIO_17.
         */
+#ifndef CONFIG_FEC_1588
        if (spdif_en) {
                BUG_ON(!spdif_pads);
                mxc_iomux_v3_setup_multiple_pads(spdif_pads, spdif_pads_cnt);
@@ -1421,6 +1422,14 @@ static void __init mx6_arm2_init(void)
                BUG_ON(!i2c3_pads);
                mxc_iomux_v3_setup_multiple_pads(i2c3_pads, i2c3_pads_cnt);
        }
+#else
+       /* Set GPIO_16 input for IEEE-1588 ts_clk and RMII reference clock
+        * For MX6 GPR1 bit21 meaning:
+        * Bit21:       0 - GPIO_16 pad output
+        *              1 - GPIO_16 pad input
+        */
+       mxc_iomux_set_gpr_register(1, 21, 1, 1);
+#endif
 
        if (!spdif_en && flexcan_en) {
                BUG_ON(!flexcan_pads);
index 9e3ef819062d199ad8a91c98f17ebf85fddf505f..8c3277d869e1d841b2c731978285298448ca4f14 100644 (file)
@@ -49,6 +49,9 @@ static iomux_v3_cfg_t mx6q_arm2_pads[] = {
        MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2,
        MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3,
        MX6Q_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL,
+#ifdef CONFIG_FEC_1588
+       MX6Q_PAD_GPIO_16__ENET_ANATOP_ETHERNET_REF_OUT,
+#endif
 #endif
        /* MCLK for csi0 */
        MX6Q_PAD_GPIO_0__CCM_CLKO,
index 5adb3355f66cb787b54dab24b1d8517149bcf64c..c508b41d4730a1ece5e9e277f573bfdc3df7013c 100644 (file)
@@ -3489,7 +3489,7 @@ static int _clk_enet_enable(struct clk *clk)
        /* Enable ENET ref clock */
        reg = __raw_readl(PLL8_ENET_BASE_ADDR);
        reg &= ~ANADIG_PLL_BYPASS;
-       reg &= ~ANADIG_PLL_ENABLE;
+       reg |= ANADIG_PLL_ENABLE;
        __raw_writel(reg, PLL8_ENET_BASE_ADDR);
 
        _clk_enable(clk);
@@ -3505,7 +3505,7 @@ static void _clk_enet_disable(struct clk *clk)
        /* Enable ENET ref clock */
        reg = __raw_readl(PLL8_ENET_BASE_ADDR);
        reg |= ANADIG_PLL_BYPASS;
-       reg |= ANADIG_PLL_ENABLE;
+       reg &= ~ANADIG_PLL_ENABLE;
        __raw_writel(reg, PLL8_ENET_BASE_ADDR);
 }
 
index cb37c21fedc93790d0ba502d6409b2f681d1ea38..b32cc00859bae57ed9331ce2c8923ed75a07ff1d 100644 (file)
 #define MX6DL_PAD_GPIO_16__ENET_1588_EVENT2_IN                                 \
                IOMUX_PAD(0x05E4, 0x0214, 1, 0x0000, 0, NO_PAD_CTRL)
 #define MX6DL_PAD_GPIO_16__ENET_ANATOP_ETHERNET_REF_OUT                        \
-               IOMUX_PAD(0x05E4, 0x0214, 2, 0x080C, 0, NO_PAD_CTRL)
+               IOMUX_PAD(0x05E4, 0x0214, 0x12, 0x080C, 0, NO_PAD_CTRL)
 #define MX6DL_PAD_GPIO_16__USDHC1_LCTL                                         \
                IOMUX_PAD(0x05E4, 0x0214, 3, 0x0000, 0, MX6DL_USDHC_PAD_CTRL)
 #define MX6DL_PAD_GPIO_16__SPDIF_IN1                                           \
index ca94008e8e7634cb6c7933bd353767c7e09fd7af..3345cca68ecb4ba4cc94aa99399b569fb68c824c 100644 (file)
@@ -2429,7 +2429,7 @@ typedef enum iomux_config {
 #define _MX6Q_PAD_GPIO_16__ENET_1588_EVENT2_IN         \
                IOMUX_PAD(0x0618, 0x0248, 1, 0x0000, 0, 0)
 #define _MX6Q_PAD_GPIO_16__ENET_ANATOP_ETHERNET_REF_OUT                \
-               IOMUX_PAD(0x0618, 0x0248, 2, 0x083C, 1, 0)
+               IOMUX_PAD(0x0618, 0x0248, 0x12, 0x083C, 1, 0)
 #define _MX6Q_PAD_GPIO_16__USDHC1_LCTL                 \
                IOMUX_PAD(0x0618, 0x0248, 3, 0x0000, 0, 0)
 #define _MX6Q_PAD_GPIO_16__SPDIF_IN1                   \