[U-Boot] [U-Boot, v2, 09/18] clk: rockchip: Add rk3328 gamc clock support
Philipp Tomsich
philipp.tomsich at theobroma-systems.com
Sun Nov 26 14:46:49 UTC 2017
On Thu, 9 Nov 2017, David Wu wrote:
> The rk3328 soc has two gmac controllers, one is gmac2io,
> the other is gmac2phy. We use the gmac2io rgmii interface
> for 1000M phy here.
>
> Signed-off-by: David Wu <david.wu at rock-chips.com>
> Acked-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
Reviewed-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
See below for requested changes.
> ---
>
> Changes in v2:
> - New patch
>
> drivers/clk/rockchip/clk_rk3328.c | 20 ++++++++++++++++++++
> include/dt-bindings/clock/rk3328-cru.h | 6 +++---
> 2 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/clk/rockchip/clk_rk3328.c b/drivers/clk/rockchip/clk_rk3328.c
> index 540d910..0940474 100644
> --- a/drivers/clk/rockchip/clk_rk3328.c
> +++ b/drivers/clk/rockchip/clk_rk3328.c
> @@ -13,6 +13,7 @@
> #include <asm/arch/clock.h>
> #include <asm/arch/cru_rk3328.h>
> #include <asm/arch/hardware.h>
> +#include <asm/arch/grf_rk3328.h>
> #include <asm/io.h>
> #include <dm/lists.h>
> #include <dt-bindings/clock/rk3328-cru.h>
> @@ -393,6 +394,22 @@ static ulong rk3328_i2c_set_clk(struct rk3328_cru *cru, ulong clk_id, uint hz)
> return DIV_TO_RATE(GPLL_HZ, src_clk_div);
> }
>
> +static int rockchip_mac_set_clk(struct rk3328_cru *cru,
> + int periph, uint freq)
> +{
> + struct rk3328_grf_regs *grf;
> +
> + grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
> + /* Assuming mac_clk is fed by an external clock */
> + rk_clrsetreg(&grf->soc_con[4], BIT(14),
> + BIT(14));
Please don't open-code this, but use symbolic constants.
>From looking into the TRM, this is grf_con_gmac2io_mac_clk_output_en: i.e.
it switches the mac_clk to be an input (output = 0, input = 1).
Should this not be controlled by the DTS via
clock_in_out = "input";
as on the other boards?
> +
> + rk_clrsetreg(&grf->mac_con[1], BIT(10),
> + BIT(10));
Similar comments to the above.
> +
> + return 0;
> +}
> +
> static ulong rk3328_mmc_get_clk(struct rk3328_cru *cru, uint clk_id)
> {
> u32 div, con, con_id;
> @@ -558,6 +575,9 @@ static ulong rk3328_clk_set_rate(struct clk *clk, ulong rate)
> case SCLK_I2C3:
> ret = rk3328_i2c_set_clk(priv->cru, clk->id, rate);
> break;
> + case SCLK_MAC2IO:
> + ret = rockchip_mac_set_clk(priv->cru, clk->id, rate);
> + break;
> case SCLK_PWM:
> ret = rk3328_pwm_set_clk(priv->cru, rate);
> break;
> diff --git a/include/dt-bindings/clock/rk3328-cru.h b/include/dt-bindings/clock/rk3328-cru.h
> index 6d8bf13..cdc0b33 100644
> --- a/include/dt-bindings/clock/rk3328-cru.h
> +++ b/include/dt-bindings/clock/rk3328-cru.h
> @@ -86,6 +86,9 @@
> #define SCLK_USB3OTG_SUSPEND 97
> #define SCLK_REF_USB3OTG_SRC 98
> #define SCLK_MAC2IO_SRC 99
> +#define SCLK_MAC2IO 100
> +#define SCLK_MAC2PHY 101
> +#define SCLK_MAC2IO_EXT 102
>
> /* dclk gates */
> #define DCLK_LCDC 180
> @@ -199,9 +202,6 @@
>
> #define CLK_NR_CLKS (HCLK_HDCP + 1)
>
> -#define SCLK_MAC2IO 0
> -#define SCLK_MAC2PHY 1
> -
> #define CLKGRF_NR_CLKS (SCLK_MAC2PHY + 1)
>
> /* soft-reset indices */
>
More information about the U-Boot
mailing list