Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1229876
| From | Stephen Warren <swarren@wwwdotorg.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH v2 3/4] clk: bcm2835: Add support for programming the audio domain clocks. |
| Date | 2015-09-22 04:10 +0200 |
| Message-ID | <qblbP-8bk-1@gated-at.bofh.it> (permalink) |
| References | <q7i2R-5S9-9@gated-at.bofh.it> <q7i2R-5S9-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On 09/10/2015 02:58 PM, 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.
> diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
> +/**
> + * DOC: BCM2835 CPRMAN (clock manager for the "audio" domain)
> + *
> + * The clock tree on the 2835 has several levels. There's a root
> + * oscillator running at 19.2Mhz. After the oscillator there are 4
Nit: s/4/5.
> +struct bcm2835_pll_data {
...
> + /* Highest rate for the VCO before we have to use the
> + * pre-divide-by-2.
> + */
Nit: /* should be on a line on its own I think. Similar elsewhere.
> +static const struct bcm2835_pll_ana_bits bcm2835_ana_default = {
> + 0,
> + 0,
> + ~((7 << 19) | (15 << 15)),
> + (2 << 19) | (8 << 15),
> + ~(7 << 7),
> + (6 << 1),
> +
> + 14
Nit: Elide the blank line? In some other structs too.
Are there #defines or names you can use for those initializers?
> +static int bcm2835_clk_probe(struct platform_device *pdev)
> + cprman = kzalloc(sizeof(*cprman), GFP_KERNEL);
> + if (!cprman)
> + return -ENOMEM;
This function allocates/initializes a lot of resources without using
devm_ versions of APIs.
> +
> + spin_lock_init(&cprman->regs_lock);
> + cprman->dev = &pdev->dev;
> + cprman->regs = of_iomap(dev->of_node, 0);
> + if (!cprman->regs)
> + return -ENODEV;
.. consequently if probe() fails later on (such as here) then resources
allocated earlier are not released. probe() should either switch to APIs
such as devm_kzalloc() or add some cleanup handling.
> + cprman->osc_name = of_clk_get_parent_name(dev->of_node, 0);
> + if (!cprman->osc_name)
> + return -ENODEV;
> +
> + platform_set_drvdata(pdev, cprman);
I'd expect that to happen right after allocating cprman, since it feels
related to having allocated the cprman object.
> + onecell = kmalloc(sizeof(*onecell), GFP_KERNEL);
> + if (!onecell)
> + return -ENOMEM;
> + onecell->clk_num = BCM2835_CLOCK_COUNT;
> + onecell->clks = kzalloc(sizeof(*onecell->clks) *
> + BCM2835_CLOCK_COUNT, GFP_KERNEL);
Does this need to be dynamically allocated? I think you can just make
these fields in struct bcm2835_cprman; even the array of clks could be:
struct clks clks[BCM2835_CLOCK_COUNT];
> + clks[BCM2835_PLLA] = bcm2835_register_pll(cprman, &bcm2835_plla_data);
> + clks[BCM2835_PLLB] = bcm2835_register_pll(cprman, &bcm2835_pllb_data);
These can fail; shouldn't there be error-checking? Or, does
of_clk_add_provider() check for this?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v2 1/4] clk: bcm2835: Move under bcm/ with other Broadcom SoC clk drivers. Eric Anholt <eric@anholt.net> - 2015-09-11 00:00 +0200
[PATCH v2 2/4] clk: bcm2835: Add binding docs for the new platform clock driver. Eric Anholt <eric@anholt.net> - 2015-09-11 00:00 +0200
Re: [PATCH v2 2/4] clk: bcm2835: Add binding docs for the new platform clock driver. Stephen Warren <swarren@wwwdotorg.org> - 2015-09-22 04:10 +0200
[PATCH v2 4/4] ARM: bcm2835: Switch to using the new clock driver support. Eric Anholt <eric@anholt.net> - 2015-09-11 00:00 +0200
Re: [PATCH v2 4/4] ARM: bcm2835: Switch to using the new clock driver support. Stephen Warren <swarren@wwwdotorg.org> - 2015-09-22 04:10 +0200
Re: [PATCH v2 3/4] clk: bcm2835: Add support for programming the audio domain clocks. Martin Sperl <martin@sperl.org> - 2015-09-11 12:10 +0200
Re: [PATCH v2 3/4] clk: bcm2835: Add support for programming the audio domain clocks. Stephen Warren <swarren@wwwdotorg.org> - 2015-09-22 04:10 +0200
Re: [PATCH v2 3/4] clk: bcm2835: Add support for programming the audio domain clocks. Eric Anholt <eric@anholt.net> - 2015-09-28 23:20 +0200
csiph-web