[PATCH 26/31] clk: mediatek: add clock driver support for MediaTek MT7986 SoC

Weijie Gao weijie.gao at mediatek.com
Mon Aug 8 05:13:23 CEST 2022


On Thu, 2022-08-04 at 07:57 -0600, Simon Glass wrote:
> Hi Weijie,
> 
> On Wed, 3 Aug 2022 at 21:40, Weijie Gao <weijie.gao at mediatek.com>
> wrote:
> > 
> > This patch adds clock driver support for MediaTek MT7986 SoC
> > 
> > Signed-off-by: Weijie Gao <weijie.gao at mediatek.com>
> > ---
> >  drivers/clk/mediatek/Makefile          |   1 +
> >  drivers/clk/mediatek/clk-mt7986.c      | 671
> > +++++++++++++++++++++++++
> >  include/dt-bindings/clock/mt7986-clk.h | 249 +++++++++
> >  3 files changed, 921 insertions(+)
> >  create mode 100644 drivers/clk/mediatek/clk-mt7986.c
> >  create mode 100644 include/dt-bindings/clock/mt7986-clk.h
> > 
> 
> Reviewed-by: Simon Glass <sjg at chromium.org>
> 
> [..]
> 
> > new file mode 100644
> > index 0000000000..11c489cd50
> > --- /dev/null
> > +++ b/drivers/clk/mediatek/clk-mt7986.c
> > @@ -0,0 +1,671 @@
> 
> 
> [..]
> 
> > +static int mt7986_topckgen_probe(struct udevice *dev)
> > +{
> > +       struct mtk_clk_priv *priv = dev_get_priv(dev);
> > +
> > +       priv->base = dev_read_addr_ptr(dev);
> > +       writel(MT7986_CLK_PDN_EN_WRITE, priv->base +
> > MT7986_CLK_PDN);
> 
> blank line here

OK.

> 
> > +       return mtk_common_clk_init(dev, &mt7986_topckgen_clk_tree);
> > +}
> > +
> > +U_BOOT_DRIVER(mtk_clk_apmixedsys) = {
> > +       .name = "mt7986-clock-fixed-pll",
> > +       .id = UCLASS_CLK,
> > +       .of_match = mt7986_fixed_pll_compat,
> > +       .probe = mt7986_fixed_pll_probe,
> > +       .priv_auto = sizeof(struct mtk_clk_priv),
> > +       .ops = &mtk_clk_topckgen_ops,
> > +       .flags = DM_FLAG_PRE_RELOC,
> > +};
> > +
> > +U_BOOT_DRIVER(mtk_clk_topckgen) = {
> > +       .name = "mt7986-clock-topckgen",
> > +       .id = UCLASS_CLK,
> > +       .of_match = mt7986_topckgen_compat,
> > +       .probe = mt7986_topckgen_probe,
> > +       .priv_auto = sizeof(struct mtk_clk_priv),
> > +       .ops = &mtk_clk_topckgen_ops,
> > +       .flags = DM_FLAG_PRE_RELOC,
> > +};
> > +
> > +static const struct udevice_id mt7986_infracfg_compat[] = {
> > +       { .compatible = "mediatek,mt7986-infracfg" },
> > +       {}
> > +};
> > +
> > +static const struct udevice_id mt7986_infracfg_ao_compat[] = {
> > +       { .compatible = "mediatek,mt7986-infracfg_ao" },
> > +       {}
> > +};
> > +
> > +static int mt7986_infracfg_probe(struct udevice *dev)
> > +{
> > +       return mtk_common_clk_init(dev, &mt7986_infracfg_clk_tree);
> > +}
> > +
> > +static int mt7986_infracfg_ao_probe(struct udevice *dev)
> > +{
> > +       return mtk_common_clk_gate_init(dev,
> > &mt7986_infracfg_clk_tree,
> > +                                       infracfg_ao_gates);
> > +}
> > +
> > +U_BOOT_DRIVER(mtk_clk_infracfg) = {
> > +       .name = "mt7986-clock-infracfg",
> > +       .id = UCLASS_CLK,
> > +       .of_match = mt7986_infracfg_compat,
> > +       .probe = mt7986_infracfg_probe,
> > +       .priv_auto = sizeof(struct mtk_clk_priv),
> > +       .ops = &mtk_clk_infrasys_ops,
> > +       .flags = DM_FLAG_PRE_RELOC,
> > +};
> > +
> > +U_BOOT_DRIVER(mtk_clk_infracfg_ao) = {
> > +       .name = "mt7986-clock-infracfg-ao",
> > +       .id = UCLASS_CLK,
> > +       .of_match = mt7986_infracfg_ao_compat,
> > +       .probe = mt7986_infracfg_ao_probe,
> > +       .priv_auto = sizeof(struct mtk_cg_priv),
> > +       .ops = &mtk_clk_gate_ops,
> > +       .flags = DM_FLAG_PRE_RELOC,
> > +};
> > +
> > +/* ethsys */
> > +static const struct mtk_gate_regs eth_cg_regs = {
> > +       .sta_ofs = 0x30,
> > +};
> > +
> > +#define GATE_ETH(_id, _name, _parent, _shift)
> >     \
> > +       {                                                          
> >             \
> > +               .id = _id, .parent = _parent, .regs =
> > &eth_cg_regs,            \
> > +               .shift =
> > _shift,                                               \
> > +               .flags = CLK_GATE_NO_SETCLR_INV |
> > CLK_PARENT_TOPCKGEN,         \
> > +       }
> > +
> > +static const struct mtk_gate eth_cgs[] = {
> > +       GATE_ETH(CK_ETH_FE_EN, "eth_fe_en", CK_TOP_NETSYS_2X, 7),
> > +       GATE_ETH(CK_ETH_GP2_EN, "eth_gp2_en", CK_TOP_SGM_325M, 8),
> > +       GATE_ETH(CK_ETH_GP1_EN, "eth_gp1_en", CK_TOP_SGM_325M, 8),
> > +       GATE_ETH(CK_ETH_WOCPU1_EN, "eth_wocpu1_en",
> > CK_TOP_NETSYS_WED_MCU, 14),
> > +       GATE_ETH(CK_ETH_WOCPU0_EN, "eth_wocpu0_en",
> > CK_TOP_NETSYS_WED_MCU, 15),
> > +};
> > +
> > +static int mt7986_ethsys_probe(struct udevice *dev)
> > +{
> > +       return mtk_common_clk_gate_init(dev,
> > &mt7986_topckgen_clk_tree,
> > +                                       eth_cgs);
> > +}
> > +
> > +static int mt7986_ethsys_bind(struct udevice *dev)
> > +{
> > +       int ret = 0;
> > +
> > +#if CONFIG_IS_ENABLED(RESET_MEDIATEK)
> 
> if (CONFIG_IS_ENABLED()...

OK.

> 
> > +       ret = mediatek_reset_bind(dev, ETHSYS_HIFSYS_RST_CTRL_OFS,
> > 1);
> > +       if (ret)
> > +               debug("Warning: failed to bind reset
> > controller\n");
> > +#endif
> > +
> > +       return ret;
> > +}
> > +
> > +static const struct udevice_id mt7986_ethsys_compat[] = {
> > +       { .compatible = "mediatek,mt7986-ethsys" },
> > +       { }
> > +};
> > +
> > +U_BOOT_DRIVER(mtk_clk_ethsys) = {
> > +       .name = "mt7986-clock-ethsys",
> > +       .id = UCLASS_CLK,
> > +       .of_match = mt7986_ethsys_compat,
> > +       .probe = mt7986_ethsys_probe,
> > +       .bind = mt7986_ethsys_bind,
> > +       .priv_auto = sizeof(struct mtk_cg_priv),
> > +       .ops = &mtk_clk_gate_ops,
> > +};
> 
> Regards,
> Simon


More information about the U-Boot mailing list