.plls = apmixed_plls,
.gates_offs = CLK_APMIXED_MAIN_CORE_EN,
.gates = apmixed_cgs,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_gates = ARRAY_SIZE(apmixed_cgs),
};
static const struct mtk_clk_tree mt7622_infra_clk_tree = {
.gates_offs = CLK_INFRA_DBGCLK_PD,
.muxes = infra_muxes,
.gates = infra_cgs,
+ .num_muxes = ARRAY_SIZE(infra_muxes),
+ .num_gates = ARRAY_SIZE(infra_cgs),
};
static const struct mtk_clk_tree mt7622_peri_clk_tree = {
.gates_offs = CLK_PERI_THERM_PD,
.muxes = peri_muxes,
.gates = peri_cgs,
+ .num_muxes = ARRAY_SIZE(peri_muxes),
+ .num_gates = ARRAY_SIZE(peri_cgs),
};
static const struct mtk_clk_tree mt7622_clk_tree = {
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static int mt7622_mcucfg_probe(struct udevice *dev)
.xtal2_rate = 26 * MHZ,
.id_offs_map = pll_id_offs_map,
.plls = apmixed_plls,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
};
static const struct mtk_clk_tree mt7623_topckgen_clk_tree = {
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static int mt7623_mcucfg_probe(struct udevice *dev)
.gates_offs = peri_id_offs_map[CLK_PERI_NFI],
.muxes = peri_muxes,
.gates = peri_cgs,
+ .num_muxes = ARRAY_SIZE(peri_muxes),
+ .num_gates = ARRAY_SIZE(peri_cgs),
.xtal_rate = 26 * MHZ,
};
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static const struct mtk_clk_tree mt7629_peri_clk_tree = {
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static int mt7629_mcucfg_probe(struct udevice *dev)
.fdivs_offs = CLK_APMIXED_NR_CLK,
.xtal_rate = 40 * MHZ,
.fclks = fixed_pll_clks,
+ .num_fclks = ARRAY_SIZE(fixed_pll_clks),
};
static const struct mtk_clk_tree mt7981_topckgen_clk_tree = {
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
.flags = CLK_BYPASS_XTAL | CLK_PARENT_TOPCKGEN,
};
.fdivs = infra_fixed_divs,
.muxes = infra_muxes,
.gates = infracfg_gates,
+ .num_fdivs = ARRAY_SIZE(infra_fixed_divs),
+ .num_muxes = ARRAY_SIZE(infra_muxes),
+ .num_gates = ARRAY_SIZE(infracfg_gates),
.flags = CLK_PARENT_INFRASYS,
};
.fdivs_offs = CLK_APMIXED_NR_CLK,
.xtal_rate = 40 * MHZ,
.fclks = fixed_pll_clks,
+ .num_fclks = ARRAY_SIZE(fixed_pll_clks),
.flags = CLK_PARENT_APMIXED,
};
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
.flags = CLK_BYPASS_XTAL | CLK_PARENT_TOPCKGEN,
};
.fdivs = infra_fixed_divs,
.muxes = infra_muxes,
.gates = infracfg_gates,
+ .num_fdivs = ARRAY_SIZE(infra_fixed_divs),
+ .num_muxes = ARRAY_SIZE(infra_muxes),
+ .num_gates = ARRAY_SIZE(infracfg_gates),
.flags = CLK_PARENT_INFRASYS,
};
static const struct mtk_clk_tree mt7987_fixed_pll_clk_tree = {
.fdivs_offs = ARRAY_SIZE(apmixedsys_mtk_plls),
.fclks = apmixedsys_mtk_plls,
+ .num_fclks = ARRAY_SIZE(apmixedsys_mtk_plls),
.flags = CLK_PARENT_APMIXED,
.xtal_rate = 40 * MHZ,
};
.muxes_offs = CLK_TOP_NETSYS_SEL,
.fdivs = topckgen_mtk_fixed_factors,
.muxes = topckgen_mtk_muxes,
+ .num_fdivs = ARRAY_SIZE(topckgen_mtk_fixed_factors),
+ .num_muxes = ARRAY_SIZE(topckgen_mtk_muxes),
.flags = CLK_BYPASS_XTAL | CLK_PARENT_TOPCKGEN,
.xtal_rate = MT7987_XTAL_RATE,
};
.gates_offs = CLK_INFRA_66M_GPT_BCK,
.muxes = infracfg_mtk_mux,
.gates = infracfg_mtk_gates,
+ .num_muxes = ARRAY_SIZE(infracfg_mtk_mux),
+ .num_gates = ARRAY_SIZE(infracfg_mtk_gates),
.flags = CLK_BYPASS_XTAL,
.xtal_rate = MT7987_XTAL_RATE,
};
static const struct mtk_clk_tree mt7988_fixed_pll_clk_tree = {
.fdivs_offs = ARRAY_SIZE(apmixedsys_mtk_plls),
.fclks = apmixedsys_mtk_plls,
+ .num_fclks = ARRAY_SIZE(apmixedsys_mtk_plls),
.flags = CLK_PARENT_APMIXED,
.xtal_rate = 40 * MHZ,
};
.fclks = topckgen_mtk_fixed_clks,
.fdivs = topckgen_mtk_fixed_factors,
.muxes = topckgen_mtk_muxes,
+ .num_fclks = ARRAY_SIZE(topckgen_mtk_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(topckgen_mtk_fixed_factors),
+ .num_muxes = ARRAY_SIZE(topckgen_mtk_muxes),
.flags = CLK_BYPASS_XTAL | CLK_PARENT_TOPCKGEN,
.xtal_rate = 40 * MHZ,
};
.gates_offs = CLK_INFRA_PCIE_PERI_26M_CK_P0,
.muxes = infracfg_mtk_mux,
.gates = infracfg_mtk_gates,
+ .num_muxes = ARRAY_SIZE(infracfg_mtk_mux),
+ .num_gates = ARRAY_SIZE(infracfg_mtk_gates),
.flags = CLK_BYPASS_XTAL,
.xtal_rate = 40 * MHZ,
};
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static const struct mtk_gate_regs infra0_cg_regs = {
.xtal_rate = 26 * MHZ,
.xtal2_rate = 26 * MHZ,
.plls = apmixed_plls,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
};
static const struct mtk_fixed_clk top_fixed_clks[] = {
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static const struct mtk_gate_regs infra_ao0_cg_regs = {
.fclks = top_fixed_clks,
.fdivs = top_divs,
.muxes = top_muxes,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
/* topckgen cg */
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static int mt8512_apmixedsys_probe(struct udevice *dev)
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static int mt8516_apmixedsys_probe(struct udevice *dev)
.fclks = top_fixed_clks,
.fdivs = top_fixed_divs,
.muxes = top_muxes,
+ .num_plls = ARRAY_SIZE(apmixed_plls),
+ .num_fclks = ARRAY_SIZE(top_fixed_clks),
+ .num_fdivs = ARRAY_SIZE(top_fixed_divs),
+ .num_muxes = ARRAY_SIZE(top_muxes),
};
static int mt8518_apmixedsys_probe(struct udevice *dev)
const struct mtk_fixed_factor *fdivs;
const struct mtk_composite *muxes;
const struct mtk_gate *gates;
+ const int num_plls;
+ const int num_fclks;
+ const int num_fdivs;
+ const int num_muxes;
+ const int num_gates;
u32 flags;
};