From: Stephen Boyd <sboyd@codeaurora.org>
To: Eric Anholt <eric@anholt.net>
Cc: linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-rpi-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Stephen Warren <swarren@wwwdotorg.org>,
Lee Jones <lee@kernel.org>,
Mike Turquette <mturquette@baylibre.com>
Subject: Re: [PATCH v6] clk: bcm2835: Add support for programming the audio domain clocks.
Date: Thu, 8 Oct 2015 17:37:22 -0700 [thread overview]
Message-ID: <20151009003721.GM26883@codeaurora.org> (raw)
In-Reply-To: <1444347736-23681-1-git-send-email-eric@anholt.net>
Please drop the full-stop from your subject lines.
On 10/08, Eric Anholt wrote:
> This adds support for enabling, disabling, and setting the rate of the
> audio domain clocks. It will be necessary for setting the pixel clock
> for HDMI in the VC4 driver and let us write a cpufreq driver. It will
> also improve compatibility with user changes to the firmware's
> config.txt, since our previous fixed clocks are unaware of it.
>
> The firmware also has support for configuring the clocks through the
> mailbox channel, but the pixel clock setup by the firmware doesn't
> work, and it's Raspberry Pi specific anyway. The only conflicts we
> should have with the firmware would be if we made firmware calls that
> result in clock management (like opening firmware V3D or ISP access,
> which we don't support in upstream), or on hardware over-thermal or
> under-voltage (when the firmware would rewrite PLLB to take the ARM
> out of overclock). If that happens, our cached .recalc_rate() results
> would be incorrect, but that's no worse than our current state where
> we used fixed clocks.
>
> The existing fixed clocks in the code are left in place to provide
> backwards compatibility with old device tree files.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Tested-by: Martin Sperl <kernel@martin.sperl.org>
> ---
There's a variable length array in here, causing sparse to
complain:
drivers/clk/bcm/clk-bcm2835.c:1408:41:
warning: Variable length array is used.
This one looks easy enough to fix with another allocation.
But then there's some weird casting warning coming from sparse
that I honestly don't understand:
drivers/clk/bcm/clk-bcm2835.c:370:36:
warning: cast truncates bits from constant value (3fffffffff8000
becomes ffff8000)
drivers/clk/bcm/clk-bcm2835.c:372:19:
warning: cast truncates bits from constant value (3ffffffff80
becomes ffffff80)
drivers/clk/bcm/clk-bcm2835.c:378:37:
warning: cast truncates bits from constant value (fffffffff80000
becomes fff80000)
drivers/clk/bcm/clk-bcm2835.c:380:42:
warning: cast truncates bits from constant value (1fffffffff
becomes ffffffff)
I guess I'll just ignore that for now. A couple nitpicks are
left, but nothing major.
> +static void bcm2835_pll_choose_ndiv_and_fdiv(unsigned long rate,
> + unsigned long parent_rate,
> + u32 *ndiv, u32 *fdiv)
> +{
> + u64 div;
> +
> + div = ((u64)rate << A2W_PLL_FRAC_BITS);
Drop the parenthesis here.
> + /* Wait for the PLL to lock. */
> + start = ktime_get();
> + while (!(cprman_read(cprman, CM_LOCK) & data->lock_mask)) {
> + ktime_t delta = ktime_sub(ktime_get(), start);
> +
> + if (ktime_to_ms(delta) > LOCK_TIMEOUT_MS) {
Didn't notice this one before. Why not add the LOCK_TIMEOUT_MS to
start, and then call ktime_get() in the loop and use
ktime_after() to figure out if we're beyond the timeout?
> + dev_err(cprman->dev, "%s: couldn't lock PLL\n",
> + clk_hw_get_name(hw));
> + return -ETIMEDOUT;
> + }
> +
> + cpu_relax();
> + }
> +
> + return 0;
> +}
[...]
> +
> +
> + memset(&init, 0, sizeof(init));
> + init.parent_names = &parent;
> + init.num_parents = 1;
> + init.name = data->name;
> + init.flags = CLK_IGNORE_UNUSED;
> +
> + if (data->is_vpu_clock) {
> + init.ops = &bcm2835_vpu_clock_clk_ops;
> + } else {
> + init.ops = &bcm2835_clock_clk_ops;
> + init.flags |= CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE;
> + }
> +
> + clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL);
> + if (!clock)
> + return NULL;
> +
> + clock->cprman = cprman;
> + clock->data = data;
> + clock->hw.init = &init;
> +
> + return clk_register(cprman->dev, &clock->hw);
devm_clk_register?
--
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 v6] clk: bcm2835: Add support for programming the audio domain clocks.
Date: Thu, 8 Oct 2015 17:37:22 -0700 [thread overview]
Message-ID: <20151009003721.GM26883@codeaurora.org> (raw)
In-Reply-To: <1444347736-23681-1-git-send-email-eric@anholt.net>
Please drop the full-stop from your subject lines.
On 10/08, Eric Anholt wrote:
> This adds support for enabling, disabling, and setting the rate of the
> audio domain clocks. It will be necessary for setting the pixel clock
> for HDMI in the VC4 driver and let us write a cpufreq driver. It will
> also improve compatibility with user changes to the firmware's
> config.txt, since our previous fixed clocks are unaware of it.
>
> The firmware also has support for configuring the clocks through the
> mailbox channel, but the pixel clock setup by the firmware doesn't
> work, and it's Raspberry Pi specific anyway. The only conflicts we
> should have with the firmware would be if we made firmware calls that
> result in clock management (like opening firmware V3D or ISP access,
> which we don't support in upstream), or on hardware over-thermal or
> under-voltage (when the firmware would rewrite PLLB to take the ARM
> out of overclock). If that happens, our cached .recalc_rate() results
> would be incorrect, but that's no worse than our current state where
> we used fixed clocks.
>
> The existing fixed clocks in the code are left in place to provide
> backwards compatibility with old device tree files.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Tested-by: Martin Sperl <kernel@martin.sperl.org>
> ---
There's a variable length array in here, causing sparse to
complain:
drivers/clk/bcm/clk-bcm2835.c:1408:41:
warning: Variable length array is used.
This one looks easy enough to fix with another allocation.
But then there's some weird casting warning coming from sparse
that I honestly don't understand:
drivers/clk/bcm/clk-bcm2835.c:370:36:
warning: cast truncates bits from constant value (3fffffffff8000
becomes ffff8000)
drivers/clk/bcm/clk-bcm2835.c:372:19:
warning: cast truncates bits from constant value (3ffffffff80
becomes ffffff80)
drivers/clk/bcm/clk-bcm2835.c:378:37:
warning: cast truncates bits from constant value (fffffffff80000
becomes fff80000)
drivers/clk/bcm/clk-bcm2835.c:380:42:
warning: cast truncates bits from constant value (1fffffffff
becomes ffffffff)
I guess I'll just ignore that for now. A couple nitpicks are
left, but nothing major.
> +static void bcm2835_pll_choose_ndiv_and_fdiv(unsigned long rate,
> + unsigned long parent_rate,
> + u32 *ndiv, u32 *fdiv)
> +{
> + u64 div;
> +
> + div = ((u64)rate << A2W_PLL_FRAC_BITS);
Drop the parenthesis here.
> + /* Wait for the PLL to lock. */
> + start = ktime_get();
> + while (!(cprman_read(cprman, CM_LOCK) & data->lock_mask)) {
> + ktime_t delta = ktime_sub(ktime_get(), start);
> +
> + if (ktime_to_ms(delta) > LOCK_TIMEOUT_MS) {
Didn't notice this one before. Why not add the LOCK_TIMEOUT_MS to
start, and then call ktime_get() in the loop and use
ktime_after() to figure out if we're beyond the timeout?
> + dev_err(cprman->dev, "%s: couldn't lock PLL\n",
> + clk_hw_get_name(hw));
> + return -ETIMEDOUT;
> + }
> +
> + cpu_relax();
> + }
> +
> + return 0;
> +}
[...]
> +
> +
> + memset(&init, 0, sizeof(init));
> + init.parent_names = &parent;
> + init.num_parents = 1;
> + init.name = data->name;
> + init.flags = CLK_IGNORE_UNUSED;
> +
> + if (data->is_vpu_clock) {
> + init.ops = &bcm2835_vpu_clock_clk_ops;
> + } else {
> + init.ops = &bcm2835_clock_clk_ops;
> + init.flags |= CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE;
> + }
> +
> + clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL);
> + if (!clock)
> + return NULL;
> +
> + clock->cprman = cprman;
> + clock->data = data;
> + clock->hw.init = &init;
> +
> + return clk_register(cprman->dev, &clock->hw);
devm_clk_register?
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2015-10-09 0:37 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-08 23:42 [PATCH v6] clk: bcm2835: Add support for programming the audio domain clocks Eric Anholt
2015-10-08 23:42 ` Eric Anholt
2015-10-09 0:37 ` Stephen Boyd [this message]
2015-10-09 0:37 ` Stephen Boyd
2015-10-09 1:31 ` Eric Anholt
2015-10-09 1:31 ` Eric Anholt
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=20151009003721.GM26883@codeaurora.org \
--to=sboyd@codeaurora.org \
--cc=eric@anholt.net \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rpi-kernel@lists.infradead.org \
--cc=mturquette@baylibre.com \
--cc=swarren@wwwdotorg.org \
/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.