diff --git a/drivers/nxp/clk/s32cc/s32cc_clk_drv.c b/drivers/nxp/clk/s32cc/s32cc_clk_drv.c index fa56a141b..cfbf2fb24 100644 --- a/drivers/nxp/clk/s32cc/s32cc_clk_drv.c +++ b/drivers/nxp/clk/s32cc/s32cc_clk_drv.c @@ -1136,7 +1136,7 @@ static int enable_module(struct s32cc_clk_obj *module, unsigned int depth) { struct s32cc_clk_obj *parent = get_module_parent(module); - static const enable_clk_t enable_clbs[12] = { + static const enable_clk_t enable_clbs[13] = { [s32cc_clk_t] = no_enable, [s32cc_osc_t] = enable_osc, [s32cc_pll_t] = enable_pll, @@ -1867,7 +1867,7 @@ typedef struct s32cc_clk_obj *(*get_parent_clb_t)(const struct s32cc_clk_obj *cl static struct s32cc_clk_obj *get_module_parent(const struct s32cc_clk_obj *module) { - static const get_parent_clb_t parents_clbs[12] = { + static const get_parent_clb_t parents_clbs[13] = { [s32cc_clk_t] = get_clk_parent, [s32cc_osc_t] = get_no_parent, [s32cc_pll_t] = get_pll_parent, diff --git a/include/drivers/nxp/clk/s32cc/s32cc-clk-modules.h b/include/drivers/nxp/clk/s32cc/s32cc-clk-modules.h index 50e7a0c0c..285aeb336 100644 --- a/include/drivers/nxp/clk/s32cc/s32cc-clk-modules.h +++ b/include/drivers/nxp/clk/s32cc/s32cc-clk-modules.h @@ -19,6 +19,7 @@ enum s32cc_clkm_type { s32cc_pll_out_div_t, s32cc_dfs_t, s32cc_dfs_div_t, + s32cc_cgm_div_t, s32cc_clkmux_t, s32cc_shared_clkmux_t, s32cc_fixed_div_t, @@ -288,6 +289,22 @@ struct s32cc_part_block_link { .block = (BLOCK), \ } +struct s32cc_cgm_div { + struct s32cc_clk_obj desc; + struct s32cc_clk_obj *parent; + unsigned long freq; + uint32_t index; +}; + +#define S32CC_CGM_DIV_INIT(PARENT, INDEX) \ +{ \ + .desc = { \ + .type = s32cc_cgm_div_t, \ + }, \ + .parent = &(PARENT).desc, \ + .index = (INDEX), \ +} + static inline struct s32cc_osc *s32cc_obj2osc(const struct s32cc_clk_obj *mod) { uintptr_t osc_addr; @@ -400,4 +417,12 @@ s32cc_obj2partblocklink(const struct s32cc_clk_obj *mod) return (struct s32cc_part_block_link *)blk_link; } +static inline struct s32cc_cgm_div *s32cc_obj2cgmdiv(const struct s32cc_clk_obj *mod) +{ + uintptr_t cgm_div_addr; + + cgm_div_addr = ((uintptr_t)mod) - offsetof(struct s32cc_cgm_div, desc); + return (struct s32cc_cgm_div *)cgm_div_addr; +} + #endif /* S32CC_CLK_MODULES_H */