[PATCH linux dev-5.3 4/6] clk: ast2600: Add RMII RCLK gates for all four MACs
Joel Stanley
joel at jms.id.au
Mon Sep 23 14:58:38 AEST 2019
On Sun, 22 Sep 2019 at 12:36, Andrew Jeffery <andrew at aj.id.au> wrote:
>
> RCLK is a fixed 50MHz clock derived from HPLL that is described by a
> single gate for each MAC.
This is true for the AST2500 as well (SCU48). For completeness, can we
have a patch that enables that?
> Signed-off-by: Andrew Jeffery <andrew at aj.id.au>
> ---
> drivers/clk/clk-ast2600.c | 37 ++++++++++++++++++++++++++++++++++++-
> 1 file changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clk/clk-ast2600.c b/drivers/clk/clk-ast2600.c
> index 1c1bb39bb04e..45531495391c 100644
> --- a/drivers/clk/clk-ast2600.c
> +++ b/drivers/clk/clk-ast2600.c
> @@ -15,7 +15,7 @@
>
> #include "clk-aspeed.h"
>
> -#define ASPEED_G6_NUM_CLKS 67
> +#define ASPEED_G6_NUM_CLKS 71
>
> #define ASPEED_G6_SILICON_REV 0x004
>
> @@ -40,6 +40,9 @@
>
> #define ASPEED_G6_STRAP1 0x500
>
> +#define ASPEED_MAC12_CLK_DLY 0x340
> +#define ASPEED_MAC34_CLK_DLY 0x350
> +
> /* Globally visible clocks */
> static DEFINE_SPINLOCK(aspeed_g6_clk_lock);
>
> @@ -494,6 +497,22 @@ static int aspeed_g6_clk_probe(struct platform_device *pdev)
> return PTR_ERR(hw);
> aspeed_g6_clk_data->hws[ASPEED_CLK_MAC12] = hw;
>
> + /* RMII1 50MHz (RCLK) output enable */
> + hw = clk_hw_register_gate(dev, "rmii1_rclk", "hpll", 0,
> + scu_g6_base + ASPEED_MAC12_CLK_DLY, 29, 0,
> + &aspeed_g6_clk_lock);
We know that this is a 50MHz clock that comes from HPLL. We could
describe that in the driver by creating a RCLK and then these four
gates hang off of that parent.
This would only be for completeness and correctness, it doesn't bring
any added functionality to the system.
> + if (IS_ERR(hw))
> + return PTR_ERR(hw);
> + aspeed_g6_clk_data->hws[ASPEED_CLK_GATE_MAC1RCLK] = hw;
> +
> + /* RMII2 50MHz (RCLK) output enable */
> + hw = clk_hw_register_gate(dev, "rmii2_rclk", "hpll", 0,
> + scu_g6_base + ASPEED_MAC12_CLK_DLY, 30, 0,
> + &aspeed_g6_clk_lock);
> + if (IS_ERR(hw))
> + return PTR_ERR(hw);
> + aspeed_g6_clk_data->hws[ASPEED_CLK_GATE_MAC2RCLK] = hw;
> +
> /* MAC3/4 AHB bus clock divider */
> hw = clk_hw_register_divider_table(dev, "mac34", "hpll", 0,
> scu_g6_base + 0x310, 24, 3, 0,
> @@ -503,6 +522,22 @@ static int aspeed_g6_clk_probe(struct platform_device *pdev)
> return PTR_ERR(hw);
> aspeed_g6_clk_data->hws[ASPEED_CLK_MAC34] = hw;
>
> + /* RMII3 50MHz (RCLK) output enable */
> + hw = clk_hw_register_gate(dev, "rmii3_rclk", "hpll", 0,
> + scu_g6_base + ASPEED_MAC34_CLK_DLY, 29, 0,
> + &aspeed_g6_clk_lock);
> + if (IS_ERR(hw))
> + return PTR_ERR(hw);
> + aspeed_g6_clk_data->hws[ASPEED_CLK_GATE_MAC3RCLK] = hw;
> +
> + /* RMII4 50MHz (RCLK) output enable */
> + hw = clk_hw_register_gate(dev, "rmii4_rclk", "hpll", 0,
> + scu_g6_base + ASPEED_MAC34_CLK_DLY, 30, 0,
> + &aspeed_g6_clk_lock);
> + if (IS_ERR(hw))
> + return PTR_ERR(hw);
> + aspeed_g6_clk_data->hws[ASPEED_CLK_GATE_MAC4RCLK] = hw;
> +
> /* LPC Host (LHCLK) clock divider */
> hw = clk_hw_register_divider_table(dev, "lhclk", "hpll", 0,
> scu_g6_base + ASPEED_G6_CLK_SELECTION1, 20, 3, 0,
> --
> 2.20.1
>
More information about the openbmc
mailing list