All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@codeaurora.org>
To: James Liao <jamesjj.liao@mediatek.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>,
	Mike Turquette <mturquette@baylibre.com>,
	Rob Herring <robh@kernel.org>, John Crispin <blogic@openwrt.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Sascha Hauer <kernel@pengutronix.de>,
	Daniel Kurtz <djkurtz@chromium.org>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org,
	linux-clk@vger.kernel.org, srv_heupstream@mediatek.com,
	Shunli Wang <shunli.wang@mediatek.com>
Subject: Re: [PATCH v7 4/9] clk: mediatek: Add MT2701 clock support
Date: Fri, 6 May 2016 16:11:51 -0700	[thread overview]
Message-ID: <20160506231151.GI3492@codeaurora.org> (raw)
In-Reply-To: <1460621514-65191-5-git-send-email-jamesjj.liao@mediatek.com>

On 04/14, James Liao wrote:
> diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
> new file mode 100644
> index 0000000..b4db141
> --- /dev/null
> +++ b/drivers/clk/mediatek/clk-mt2701.c
> +static void __init mtk_infrasys_init(struct device_node *node)
> +{
> +	struct clk_onecell_data *clk_data;
> +	int r;
> +
> +	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR);
> +
> +	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
> +						clk_data);
> +	mtk_clk_register_factors(infra_fixed_divs, ARRAY_SIZE(infra_fixed_divs),
> +						clk_data);
> +
> +	r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
> +	if (r)
> +		pr_err("%s(): could not register clock provider: %d\n",
> +			__func__, r);
> +}
> +CLK_OF_DECLARE(mtk_infrasys, "mediatek,mt2701-infracfg", mtk_infrasys_init);

I'm still lost on the usage of CLK_OF_DECLARE here. What part of
these clk controllers needs to be registered to make the timer
work?

> +	GATE_DISP1(CLK_MM_DPI_DIGL, "mm_dpi_digl", "dpi0_sel", 2),
> +	GATE_DISP1(CLK_MM_DPI_ENGINE, "mm_dpi_eng", "mm_sel", 3),
> +	GATE_DISP1(CLK_MM_DPI1_DIGL, "mm_dpi1_digl", "dpi1_sel", 4),
> +	GATE_DISP1(CLK_MM_DPI1_ENGINE, "mm_dpi1_eng", "mm_sel", 5),
> +	GATE_DISP1(CLK_MM_TVE_OUTPUT, "mm_tve_output", "tve_sel", 6),
> +	GATE_DISP1(CLK_MM_TVE_INPUT, "mm_tve_input", "dpi0_sel", 7),
> +	GATE_DISP1(CLK_MM_HDMI_PIXEL, "mm_hdmi_pixel", "dpi1_sel", 8),
> +	GATE_DISP1(CLK_MM_HDMI_PLL, "mm_hdmi_pll", "hdmi_sel", 9),
> +	GATE_DISP1(CLK_MM_HDMI_AUDIO, "mm_hdmi_audio", "apll_sel", 10),
> +	GATE_DISP1(CLK_MM_HDMI_SPDIF, "mm_hdmi_spdif", "apll_sel", 11),
> +	GATE_DISP1(CLK_MM_TVE_FMM, "mm_tve_fmm", "mm_sel", 14),
> +};

I also don't understand why we don't have different files and
drivers for all these different clock controllers? They all have
a similar probe structure, sure, but otherwise these are
different devices with different clks for them. The whole #ifdef
thing in the later patch would go away too.

> +	GATE_BDP1(CLK_BDP_BRG_RT_B, "brg_rt_bclk", "mm_sel", 12),
> +	GATE_BDP1(CLK_BDP_BRG_RT_DRAM, "brg_rt_dram", "mm_sel", 13),
> +	GATE_BDP1(CLK_BDP_LARBRT_DRAM, "larbrt_dram", "mm_sel", 14),
> +	GATE_BDP1(CLK_BDP_TMDS_SYN, "tmds_syn", "hdmi_0_pll340m", 15),
> +	GATE_BDP1(CLK_BDP_HDMI_MON, "hdmi_mon", "hdmi_0_pll340m", 16),
> +};
> +
> +static void __init mtk_bdpsys_init(struct device_node *node)

Shouldn't be __init because it's driver probe path.

> +{
> +	struct clk_onecell_data *clk_data;
> +	int r;
> +
> +	clk_data = mtk_alloc_clk_data(CLK_BDP_NR);
> +
> +	mtk_clk_register_gates(node, bdp_clks, ARRAY_SIZE(bdp_clks),
> +						clk_data);
> +
> +	r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
> +	if (r)
> +		pr_err("%s(): could not register clock provider: %d\n",
> +			__func__, r);
> +}
[...]
> +
> +static int __init clk_probe(struct platform_device *pdev)
> +{
> +	void (*clk_init)(struct device_node *);
> +	const struct of_device_id *of_id;
> +
> +	of_id = of_match_node(of_clk_match_tbl, pdev->dev.of_node);
> +	if (!of_id || !of_id->data)
> +		return -EINVAL;
> +
> +	clk_init = of_id->data;
> +	clk_init(pdev->dev.of_node);
> +
> +	return 0;
> +}
> +
> +static struct platform_driver clk_drv = {

Please add some mtk here, 'clk_drv' is too generic.

> +	.driver = {
> +		.name = "mtk-clk",
> +		.owner = THIS_MODULE,

This is unnecessary.

> +		.of_match_table = of_match_ptr(of_clk_match_tbl),

Just drop of_match_ptr() because it's not helping. Also
of_clk_match_tbl is too generic.

> +	},
> +};
> +
> +builtin_platform_driver_probe(clk_drv, clk_probe);
> +}
> diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
> index 32d2e45..8796acc 100644
> --- a/drivers/clk/mediatek/clk-mtk.h
> +++ b/drivers/clk/mediatek/clk-mtk.h
> @@ -145,8 +146,35 @@ struct mtk_gate {
[...]
> +struct mtk_clk_divider {
> +	int id;
> +	const char *name;
> +	const char *parent_name;
> +	unsigned long flags;
> +
> +	uint32_t div_reg;

u32 is shorter

> +	unsigned char div_shift;
> +	unsigned char div_width;
> +	unsigned char clk_divider_flags;
> +	const struct clk_div_table *clk_div_table;
> +};
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

WARNING: multiple messages have this Message-ID (diff)
From: sboyd@codeaurora.org (Stephen Boyd)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 4/9] clk: mediatek: Add MT2701 clock support
Date: Fri, 6 May 2016 16:11:51 -0700	[thread overview]
Message-ID: <20160506231151.GI3492@codeaurora.org> (raw)
In-Reply-To: <1460621514-65191-5-git-send-email-jamesjj.liao@mediatek.com>

On 04/14, James Liao wrote:
> diff --git a/drivers/clk/mediatek/clk-mt2701.c b/drivers/clk/mediatek/clk-mt2701.c
> new file mode 100644
> index 0000000..b4db141
> --- /dev/null
> +++ b/drivers/clk/mediatek/clk-mt2701.c
> +static void __init mtk_infrasys_init(struct device_node *node)
> +{
> +	struct clk_onecell_data *clk_data;
> +	int r;
> +
> +	clk_data = mtk_alloc_clk_data(CLK_INFRA_NR);
> +
> +	mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks),
> +						clk_data);
> +	mtk_clk_register_factors(infra_fixed_divs, ARRAY_SIZE(infra_fixed_divs),
> +						clk_data);
> +
> +	r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
> +	if (r)
> +		pr_err("%s(): could not register clock provider: %d\n",
> +			__func__, r);
> +}
> +CLK_OF_DECLARE(mtk_infrasys, "mediatek,mt2701-infracfg", mtk_infrasys_init);

I'm still lost on the usage of CLK_OF_DECLARE here. What part of
these clk controllers needs to be registered to make the timer
work?

> +	GATE_DISP1(CLK_MM_DPI_DIGL, "mm_dpi_digl", "dpi0_sel", 2),
> +	GATE_DISP1(CLK_MM_DPI_ENGINE, "mm_dpi_eng", "mm_sel", 3),
> +	GATE_DISP1(CLK_MM_DPI1_DIGL, "mm_dpi1_digl", "dpi1_sel", 4),
> +	GATE_DISP1(CLK_MM_DPI1_ENGINE, "mm_dpi1_eng", "mm_sel", 5),
> +	GATE_DISP1(CLK_MM_TVE_OUTPUT, "mm_tve_output", "tve_sel", 6),
> +	GATE_DISP1(CLK_MM_TVE_INPUT, "mm_tve_input", "dpi0_sel", 7),
> +	GATE_DISP1(CLK_MM_HDMI_PIXEL, "mm_hdmi_pixel", "dpi1_sel", 8),
> +	GATE_DISP1(CLK_MM_HDMI_PLL, "mm_hdmi_pll", "hdmi_sel", 9),
> +	GATE_DISP1(CLK_MM_HDMI_AUDIO, "mm_hdmi_audio", "apll_sel", 10),
> +	GATE_DISP1(CLK_MM_HDMI_SPDIF, "mm_hdmi_spdif", "apll_sel", 11),
> +	GATE_DISP1(CLK_MM_TVE_FMM, "mm_tve_fmm", "mm_sel", 14),
> +};

I also don't understand why we don't have different files and
drivers for all these different clock controllers? They all have
a similar probe structure, sure, but otherwise these are
different devices with different clks for them. The whole #ifdef
thing in the later patch would go away too.

> +	GATE_BDP1(CLK_BDP_BRG_RT_B, "brg_rt_bclk", "mm_sel", 12),
> +	GATE_BDP1(CLK_BDP_BRG_RT_DRAM, "brg_rt_dram", "mm_sel", 13),
> +	GATE_BDP1(CLK_BDP_LARBRT_DRAM, "larbrt_dram", "mm_sel", 14),
> +	GATE_BDP1(CLK_BDP_TMDS_SYN, "tmds_syn", "hdmi_0_pll340m", 15),
> +	GATE_BDP1(CLK_BDP_HDMI_MON, "hdmi_mon", "hdmi_0_pll340m", 16),
> +};
> +
> +static void __init mtk_bdpsys_init(struct device_node *node)

Shouldn't be __init because it's driver probe path.

> +{
> +	struct clk_onecell_data *clk_data;
> +	int r;
> +
> +	clk_data = mtk_alloc_clk_data(CLK_BDP_NR);
> +
> +	mtk_clk_register_gates(node, bdp_clks, ARRAY_SIZE(bdp_clks),
> +						clk_data);
> +
> +	r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
> +	if (r)
> +		pr_err("%s(): could not register clock provider: %d\n",
> +			__func__, r);
> +}
[...]
> +
> +static int __init clk_probe(struct platform_device *pdev)
> +{
> +	void (*clk_init)(struct device_node *);
> +	const struct of_device_id *of_id;
> +
> +	of_id = of_match_node(of_clk_match_tbl, pdev->dev.of_node);
> +	if (!of_id || !of_id->data)
> +		return -EINVAL;
> +
> +	clk_init = of_id->data;
> +	clk_init(pdev->dev.of_node);
> +
> +	return 0;
> +}
> +
> +static struct platform_driver clk_drv = {

Please add some mtk here, 'clk_drv' is too generic.

> +	.driver = {
> +		.name = "mtk-clk",
> +		.owner = THIS_MODULE,

This is unnecessary.

> +		.of_match_table = of_match_ptr(of_clk_match_tbl),

Just drop of_match_ptr() because it's not helping. Also
of_clk_match_tbl is too generic.

> +	},
> +};
> +
> +builtin_platform_driver_probe(clk_drv, clk_probe);
> +}
> diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
> index 32d2e45..8796acc 100644
> --- a/drivers/clk/mediatek/clk-mtk.h
> +++ b/drivers/clk/mediatek/clk-mtk.h
> @@ -145,8 +146,35 @@ struct mtk_gate {
[...]
> +struct mtk_clk_divider {
> +	int id;
> +	const char *name;
> +	const char *parent_name;
> +	unsigned long flags;
> +
> +	uint32_t div_reg;

u32 is shorter

> +	unsigned char div_shift;
> +	unsigned char div_width;
> +	unsigned char clk_divider_flags;
> +	const struct clk_div_table *clk_div_table;
> +};
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

  parent reply	other threads:[~2016-05-06 23:11 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-14  8:11 [PATCH v7 0/9] Add clock support for Mediatek MT2701 James Liao
2016-04-14  8:11 ` James Liao
2016-04-14  8:11 ` James Liao
2016-04-14  8:11 ` [PATCH v7 1/9] clk: mediatek: Refine the makefile to support multiple clock drivers James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-04-22  9:02   ` Matthias Brugger
2016-04-22  9:02     ` Matthias Brugger
2016-04-14  8:11 ` [PATCH v7 2/9] dt-bindings: ARM: Mediatek: Document bindings for MT2701 James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11 ` [PATCH v7 3/9] clk: mediatek: Add dt-bindings for MT2701 clocks James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-04-22  9:06   ` Matthias Brugger
2016-04-22  9:06     ` Matthias Brugger
2016-04-14  8:11 ` [PATCH v7 4/9] clk: mediatek: Add MT2701 clock support James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-04-22 18:43   ` Matthias Brugger
2016-04-22 18:43     ` Matthias Brugger
2016-05-06 23:11   ` Stephen Boyd [this message]
2016-05-06 23:11     ` Stephen Boyd
2016-05-09  6:38     ` James Liao
2016-05-09  6:38       ` James Liao
2016-05-09  6:38       ` James Liao
2016-05-09 22:29       ` Stephen Boyd
2016-05-09 22:29         ` Stephen Boyd
2016-05-10  2:30         ` James Liao
2016-05-10  2:30           ` James Liao
2016-05-10  2:30           ` James Liao
2016-04-14  8:11 ` [PATCH v7 5/9] reset: mediatek: Add MT2701 reset controller dt-binding file James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11 ` [PATCH v7 6/9] reset: mediatek: Add MT2701 reset driver James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11 ` [PATCH v7 7/9] clk: mediatek: Enable critical clocks for MT2701 James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-05-06 23:12   ` Stephen Boyd
2016-05-06 23:12     ` Stephen Boyd
2016-05-09  5:40     ` James Liao
2016-05-09  5:40       ` James Liao
2016-05-09  5:40       ` James Liao
2016-05-09 22:13       ` Stephen Boyd
2016-05-09 22:13         ` Stephen Boyd
2016-05-10  2:20         ` James Liao
2016-05-10  2:20           ` James Liao
2016-05-10  2:20           ` James Liao
2016-05-11  2:51         ` James Liao
2016-05-11  2:51           ` James Liao
2016-05-11  2:51           ` James Liao
2016-04-14  8:11 ` [PATCH v7 8/9] clk: mediatek: Add config options for MT2701 subsystem clocks James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao
2016-05-06 23:02   ` Stephen Boyd
2016-05-06 23:02     ` Stephen Boyd
2016-05-09  5:37     ` James Liao
2016-05-09  5:37       ` James Liao
2016-05-09  5:37       ` James Liao
2016-05-09 22:13       ` Stephen Boyd
2016-05-09 22:13         ` Stephen Boyd
2016-05-09 22:13         ` Stephen Boyd
2016-04-14  8:11 ` [PATCH v7 9/9] arm: dts: mt2701: Add clock controller device nodes James Liao
2016-04-14  8:11   ` James Liao
2016-04-14  8:11   ` James Liao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160506231151.GI3492@codeaurora.org \
    --to=sboyd@codeaurora.org \
    --cc=arnd@arndb.de \
    --cc=blogic@openwrt.org \
    --cc=devicetree@vger.kernel.org \
    --cc=djkurtz@chromium.org \
    --cc=jamesjj.liao@mediatek.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=mturquette@baylibre.com \
    --cc=p.zabel@pengutronix.de \
    --cc=robh@kernel.org \
    --cc=shunli.wang@mediatek.com \
    --cc=srv_heupstream@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.