@ -402,6 +402,119 @@ static void pinctrl_rk3288_sdmmc_config(struct rk3288_grf *grf, int mmc_id)
}
}
static void pinctrl_rk3288_gmac_config ( struct rk3288_grf * grf , int gmac_id )
{
switch ( gmac_id ) {
case PERIPH_ID_GMAC :
rk_clrsetreg ( & grf - > gpio3dl_iomux ,
GPIO3D3_MASK < < GPIO3D3_SHIFT |
GPIO3D2_MASK < < GPIO3D2_SHIFT |
GPIO3D2_MASK < < GPIO3D1_SHIFT |
GPIO3D0_MASK < < GPIO3D0_SHIFT ,
GPIO3D3_MAC_RXD3 < < GPIO3D3_SHIFT |
GPIO3D2_MAC_RXD2 < < GPIO3D2_SHIFT |
GPIO3D1_MAC_TXD3 < < GPIO3D1_SHIFT |
GPIO3D0_MAC_TXD2 < < GPIO3D0_SHIFT ) ;
rk_clrsetreg ( & grf - > gpio3dh_iomux ,
GPIO3D7_MASK < < GPIO3D7_SHIFT |
GPIO3D6_MASK < < GPIO3D6_SHIFT |
GPIO3D5_MASK < < GPIO3D5_SHIFT |
GPIO3D4_MASK < < GPIO3D4_SHIFT ,
GPIO3D7_MAC_RXD1 < < GPIO3D7_SHIFT |
GPIO3D6_MAC_RXD0 < < GPIO3D6_SHIFT |
GPIO3D5_MAC_TXD1 < < GPIO3D5_SHIFT |
GPIO3D4_MAC_TXD0 < < GPIO3D4_SHIFT ) ;
/* switch the Tx pins to 12ma drive-strength */
rk_clrsetreg ( & grf - > gpio1_e [ 2 ] [ 3 ] ,
GPIO_BIAS_MASK |
( GPIO_BIAS_MASK < < GPIO_BIAS_SHIFT ( 1 ) ) |
( GPIO_BIAS_MASK < < GPIO_BIAS_SHIFT ( 4 ) ) |
( GPIO_BIAS_MASK < < GPIO_BIAS_SHIFT ( 5 ) ) ,
( GPIO_BIAS_12MA < < GPIO_BIAS_SHIFT ( 0 ) ) |
( GPIO_BIAS_12MA < < GPIO_BIAS_SHIFT ( 1 ) ) |
( GPIO_BIAS_12MA < < GPIO_BIAS_SHIFT ( 4 ) ) |
( GPIO_BIAS_12MA < < GPIO_BIAS_SHIFT ( 5 ) ) ) ;
/* Set normal pull for all GPIO3D pins */
rk_clrsetreg ( & grf - > gpio1_p [ 2 ] [ 3 ] ,
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 0 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 1 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 2 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 3 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 4 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 5 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 5 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 7 ) ) ,
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 0 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 1 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 2 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 3 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 4 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 5 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 6 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 7 ) ) ) ;
rk_clrsetreg ( & grf - > gpio4al_iomux ,
GPIO4A3_MASK < < GPIO4A3_SHIFT |
GPIO4A1_MASK < < GPIO4A1_SHIFT |
GPIO4A0_MASK < < GPIO4A0_SHIFT ,
GPIO4A3_MAC_CLK < < GPIO4A3_SHIFT |
GPIO4A1_MAC_TXDV < < GPIO4A1_SHIFT |
GPIO4A0_MAC_MDC < < GPIO4A0_SHIFT ) ;
rk_clrsetreg ( & grf - > gpio4ah_iomux ,
GPIO4A6_MASK < < GPIO4A6_SHIFT |
GPIO4A5_MASK < < GPIO4A5_SHIFT |
GPIO4A4_MASK < < GPIO4A4_SHIFT ,
GPIO4A6_MAC_RXCLK < < GPIO4A6_SHIFT |
GPIO4A5_MAC_MDIO < < GPIO4A5_SHIFT |
GPIO4A4_MAC_TXEN < < GPIO4A4_SHIFT ) ;
/* switch GPIO4A4 to 12ma drive-strength */
rk_clrsetreg ( & grf - > gpio1_e [ 3 ] [ 0 ] ,
GPIO_BIAS_MASK < < GPIO_BIAS_SHIFT ( 4 ) ,
GPIO_BIAS_12MA < < GPIO_BIAS_SHIFT ( 4 ) ) ;
/* Set normal pull for all GPIO4A pins */
rk_clrsetreg ( & grf - > gpio1_p [ 3 ] [ 0 ] ,
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 0 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 1 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 2 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 3 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 4 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 5 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 5 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 7 ) ) ,
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 0 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 1 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 2 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 3 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 4 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 5 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 6 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 7 ) ) ) ;
/* switch GPIO4B1 to 12ma drive-strength */
rk_clrsetreg ( & grf - > gpio1_e [ 3 ] [ 1 ] ,
GPIO_BIAS_MASK < < GPIO_BIAS_SHIFT ( 1 ) ,
GPIO_BIAS_12MA < < GPIO_BIAS_SHIFT ( 1 ) ) ;
/* Set pull normal for GPIO4B1, pull up for GPIO4B0 */
rk_clrsetreg ( & grf - > gpio1_p [ 3 ] [ 1 ] ,
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 0 ) ) |
( GPIO_PULL_MASK < < GPIO_PULL_SHIFT ( 1 ) ) ,
( GPIO_PULL_UP < < GPIO_PULL_SHIFT ( 0 ) ) |
( GPIO_PULL_NORMAL < < GPIO_PULL_SHIFT ( 1 ) ) ) ;
break ;
default :
printf ( " gmac id = %d iomux error! \n " , gmac_id ) ;
break ;
}
}
# ifndef CONFIG_SPL_BUILD
static void pinctrl_rk3288_hdmi_config ( struct rk3288_grf * grf , int hdmi_id )
{
@ -465,6 +578,9 @@ static int rk3288_pinctrl_request(struct udevice *dev, int func, int flags)
case PERIPH_ID_SDMMC1 :
pinctrl_rk3288_sdmmc_config ( priv - > grf , func ) ;
break ;
case PERIPH_ID_GMAC :
pinctrl_rk3288_gmac_config ( priv - > grf , func ) ;
break ;
default :
return - EINVAL ;
}
@ -484,6 +600,8 @@ static int rk3288_pinctrl_get_periph_id(struct udevice *dev,
return - EINVAL ;
switch ( cell [ 1 ] ) {
case 27 :
return PERIPH_ID_GMAC ;
case 44 :
return PERIPH_ID_SPI0 ;
case 45 :