On 9/17/26 7:51 AM, Julien Stephan wrote:
> Subsystem clock blocks only provide gates, and every one of them
> declares the very same struct mtk_clk_tree boilerplate. clk-mt8189.c
> already hides it behind a local GATE_CLK_TREE() macro.
> 
> Move that macro to clk-mtk.h as MTK_GATE_CLK_TREE() so that the other
> MediaTek clock drivers can use it too. The tree name and the array of
> external clock rates are now passed explicitly, as their names differ
> from one driver to another.

I thought I had cleaned all of these up so this is no longer true. However
I still would keep the argument explicit just for the sake of better grep
results now that the macro definition will be in a different file.

> 
> No functional change.
> 
> Signed-off-by: Julien Stephan <[email protected]>
> ---
>  drivers/clk/mediatek/clk-mt8189.c | 23 +++++++----------------
>  drivers/clk/mediatek/clk-mtk.h    | 22 ++++++++++++++++++++++
>  2 files changed, 29 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/clk/mediatek/clk-mt8189.c 
> b/drivers/clk/mediatek/clk-mt8189.c
> index 3724dffcc3a..8df09f4a129 100644
> --- a/drivers/clk/mediatek/clk-mt8189.c
> +++ b/drivers/clk/mediatek/clk-mt8189.c
> @@ -1994,22 +1994,13 @@ static const struct udevice_id mt8189_vlpckgen[] = {
>       { }
>  };
>  
> -#define GATE_CLK_TREE(_name) \
> -static const struct mtk_clk_tree _name##_tree = { \
> -     .ext_clk_rates = ext_clock_rates, \
> -     .num_ext_clks = ARRAY_SIZE(ext_clock_rates), \
> -     .gates = _name, \
> -     .num_gates = ARRAY_SIZE(_name), \
> -     .gates_offs = _name[0].id, \
> -}
> -
> -GATE_CLK_TREE(perao_clks);
> -GATE_CLK_TREE(imp_clks);
> -GATE_CLK_TREE(mm_clks);
> -GATE_CLK_TREE(mminfra_config_clks);
> -GATE_CLK_TREE(ufs_config_ao_clks);
> -GATE_CLK_TREE(ufs_config_pdn_clks);
> -GATE_CLK_TREE(vlpcfg_ao_clks);
> +MTK_GATE_CLK_TREE(perao_clks_tree, perao_clks, ext_clock_rates);
> +MTK_GATE_CLK_TREE(imp_clks_tree, imp_clks, ext_clock_rates);
> +MTK_GATE_CLK_TREE(mm_clks_tree, mm_clks, ext_clock_rates);
> +MTK_GATE_CLK_TREE(mminfra_config_clks_tree, mminfra_config_clks, 
> ext_clock_rates);
> +MTK_GATE_CLK_TREE(ufs_config_ao_clks_tree, ufs_config_ao_clks, 
> ext_clock_rates);
> +MTK_GATE_CLK_TREE(ufs_config_pdn_clks_tree, ufs_config_pdn_clks, 
> ext_clock_rates);
> +MTK_GATE_CLK_TREE(vlpcfg_ao_clks_tree, vlpcfg_ao_clks, ext_clock_rates);
>  
>  static const struct udevice_id of_match_mt8189_clk_gate[] = {
>       { .compatible = "mediatek,mt8189-peri-ao", .data = 
> (ulong)&perao_clks_tree },
> diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
> index 9244542a2a5..e3a7ff75734 100644
> --- a/drivers/clk/mediatek/clk-mtk.h
> +++ b/drivers/clk/mediatek/clk-mtk.h
> @@ -8,6 +8,7 @@
>  #define __DRV_CLK_MTK_H
>  
>  #include <linux/bitops.h>
> +#include <linux/kernel.h>
>  
>  #define MHZ                          (1000 * 1000)
>  
> @@ -274,6 +275,27 @@ struct mtk_clk_tree {
>       enum mtk_clk_tree_type type;
>  };
>  
> +/**
> + * MTK_GATE_CLK_TREE() - declare a clock tree made of gates only
> + * @_tree: name of the struct mtk_clk_tree to declare
> + * @_gates: struct mtk_gate array backing the tree
> + * @_ext_rates: array holding the rates of the external clocks
> + *
> + * Most subsystem clock blocks only provide gates, whose IDs are
> + * contiguous and start at the ID of the first entry of @_gates.
> + *
> + * @_tree is declared static, so this must be used from the file
> + * defining @_gates.
> + */
> +#define MTK_GATE_CLK_TREE(_tree, _gates, _ext_rates)         \

I would be tempted to put _ext_rates first so that they line up nicely when
the macro is used. It will make the lines look less noisy.

> +     static const struct mtk_clk_tree _tree = {              \
> +             .ext_clk_rates = _ext_rates,                    \
> +             .num_ext_clks = ARRAY_SIZE(_ext_rates),         \
> +             .gates = _gates,                                \
> +             .num_gates = ARRAY_SIZE(_gates),                \
> +             .gates_offs = _gates[0].id,                     \
> +     }
> +
>  struct mtk_clk_priv {
>       void __iomem *base;
>       const struct mtk_clk_tree *tree;
> 

Reply via email to