mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: David Lechner <david@lechnology.com>
To: Sekhar Nori <nsekhar@ti.com>,
	linux-clk@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Cc: Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Kevin Hilman <khilman@kernel.org>, Adam Ford <aford173@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 11/44] clk: davinci: Add platform information for TI DA830 PSC
Date: Tue, 16 Jan 2018 11:16:37 -0600	[thread overview]
Message-ID: <4dd36ca7-e41d-58d8-ec8c-787978307943@lechnology.com> (raw)
In-Reply-To: <91fe16dc-907e-6dbb-c8db-c27561132093@ti.com>

On 01/16/2018 07:38 AM, Sekhar Nori wrote:
> On Monday 08 January 2018 07:47 AM, David Lechner wrote:
>> This adds platform-specific declarations for the PSC clocks on TI DA830/
>> OMAP-L137/AM17XX SoCs.
>>
>> Signed-off-by: David Lechner <david@lechnology.com>
>> ---
>>   drivers/clk/davinci/Makefile    |  1 +
>>   drivers/clk/davinci/psc-da830.c | 96 +++++++++++++++++++++++++++++++++++++++++
>>   include/linux/clk/davinci.h     |  2 +
>>   3 files changed, 99 insertions(+)
>>   create mode 100644 drivers/clk/davinci/psc-da830.c
>>
>> diff --git a/drivers/clk/davinci/Makefile b/drivers/clk/davinci/Makefile
>> index cd1bf2c..fb14c8c 100644
>> --- a/drivers/clk/davinci/Makefile
>> +++ b/drivers/clk/davinci/Makefile
>> @@ -10,4 +10,5 @@ obj-$(CONFIG_ARCH_DAVINCI_DM644x)	+= pll-dm644x.o
>>   obj-$(CONFIG_ARCH_DAVINCI_DM646x)	+= pll-dm646x.o
>>   
>>   obj-y += psc.o
>> +obj-$(CONFIG_ARCH_DAVINCI_DA830)	+= psc-da830.o
>>   endif
>> diff --git a/drivers/clk/davinci/psc-da830.c b/drivers/clk/davinci/psc-da830.c
>> new file mode 100644
>> index 0000000..193b08f
>> --- /dev/null
>> +++ b/drivers/clk/davinci/psc-da830.c
>> @@ -0,0 +1,96 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +/*
>> + * PSC clock descriptions for TI DA830/OMAP-L137/AM17XX
>> + *
>> + * Copyright (C) 2017 David Lechner <david@lechnology.com>
>> + */
>> +
>> +#include <linux/clk-provider.h>
>> +#include <linux/clkdev.h>
>> +#include <linux/init.h>
>> +#include <linux/types.h>
>> +
>> +#include "psc.h"
>> +
>> +static const struct davinci_psc_clk_info da830_psc0_info[] __initconst = {
>> +	LPSC(0, 0, tpcc, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
>> +	LPSC(1, 0, tptc0, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
>> +	LPSC(2, 0, tptc1, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
>> +	LPSC(3, 0, aemif, pll0_sysclk3, LPSC_ALWAYS_ENABLED),
>> +	LPSC(4, 0, spi0, pll0_sysclk2, 0),
>> +	LPSC(5, 0, mmcsd, pll0_sysclk2, 0),
>> +	LPSC(6, 0, aintc, pll0_sysclk4, LPSC_ALWAYS_ENABLED),
>> +	LPSC(7, 0, arm_rom, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
>> +	LPSC(8, 0, secu_mgr, pll0_sysclk4, LPSC_ALWAYS_ENABLED),
>> +	LPSC(9, 0, uart0, pll0_sysclk2, 0),
>> +	LPSC(10, 0, scr0_ss, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
>> +	LPSC(11, 0, scr1_ss, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
>> +	LPSC(12, 0, scr2_ss, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
>> +	LPSC(13, 0, dmax, pll0_sysclk2, LPSC_ALWAYS_ENABLED),
> 
> pruss is better (I know the name is coming from existing code).
> 
>> +	LPSC(14, 0, arm, pll0_sysclk6, LPSC_ALWAYS_ENABLED),
> 
> This is LPSC 15 which controls DSP too. But its missing from existing
> code. Not sure why. Probably a note for future. For now okay with
> ignoring it.
> 
>> +	{ }
>> +};
> 
> Tables like these are much easier to parse if columns are spaced using a
> tab.
> 

Tabs make the lines over 80 columns. How about spaces instead?


>> +
>> +static const struct davinci_psc_clk_info da830_psc1_info[] __initconst = {
>> +	LPSC(1, 0, usb0, pll0_sysclk2, 0),
>> +	LPSC(2, 0, usb1, pll0_sysclk4, 0),
>> +	LPSC(3, 0, gpio, pll0_sysclk4, 0),
> 
> There is LPSC 4 controlling UHPI. Again, lets ignore for now.
> 
>> +	LPSC(5, 0, emac, pll0_sysclk4, 0),
>> +	LPSC(6, 0, emif3, pll0_sysclk5, LPSC_ALWAYS_ENABLED),
>> +	LPSC(7, 0, mcasp0, pll0_sysclk2, 0),
>> +	LPSC(8, 0, mcasp1, pll0_sysclk2, 0),
>> +	LPSC(9, 0, mcasp2, pll0_sysclk2, 0),
>> +	LPSC(10, 0, spi1, pll0_sysclk2, 0),
>> +	LPSC(11, 0, i2c1, pll0_sysclk4, 0),
>> +	LPSC(12, 0, uart1, pll0_sysclk2, 0),
>> +	LPSC(13, 0, uart2, pll0_sysclk2, 0),
>> +	LPSC(16, 0, lcdc, pll0_sysclk2, 0),
>> +	LPSC(17, 0, pwm, pll0_sysclk2, 0),
>> +	LPSC(20, 0, ecap, pll0_sysclk2, 0),
>> +	LPSC(21, 0, eqep, pll0_sysclk2, 0),
>> +	{ }
>> +};
>> +
>> +void __init da830_psc_clk_init(void __iomem *psc0, void __iomem *psc1)
>> +{
>> +	struct clk_onecell_data *clk_data;
>> +
>> +	clk_data = davinci_psc_register_clocks(psc0, da830_psc0_info, 16);
>> +	if (!clk_data)
>> +		return;
>> +
>> +	clk_register_clkdev(clk_data->clks[4], NULL, "spi_davinci.0");
>> +	clk_register_clkdev(clk_data->clks[5], NULL, "da830-mmc.0");
>> +	clk_register_clkdev(clk_data->clks[9], NULL, "serial8250.0");
>> +	clk_register_clkdev(clk_data->clks[14], "arm", NULL);
>> +
>> +	clk_free_onecell_data(clk_data);
>> +
>> +	clk_data = davinci_psc_register_clocks(psc1, da830_psc1_info, 32);
>> +	if (!clk_data)
>> +		return;
>> +
>> +	clk_register_clkdev(clk_data->clks[1], NULL, "musb-da8xx");
>> +	clk_register_clkdev(clk_data->clks[1], NULL, "cppi41-dmaengine");
>> +	clk_register_clkdev(clk_data->clks[2], NULL, "ohci-da8xx");
>> +	clk_register_clkdev(clk_data->clks[3], "gpio", NULL);
> 
> This is pretty bad (and no fault of yours) - having a con_id but no
> device name. Can you please make a pre-series which passes NULL con_id
> in gpio-davinci.c?

I'll give it a try. This is complicated by the fact that the con_id has
made it's way into the device tree bindings. However, I think we can
safely deprecate clock-names = "gpio" in the device tree bindings since
we can make the driver ignore that property to preserve backwards
compatibility.

> 
>> +	clk_register_clkdev(clk_data->clks[5], NULL, "davinci_emac.1");
>> +	clk_register_clkdev(clk_data->clks[5], "fck", "davinci_mdio.0");
>> +	clk_register_clkdev(clk_data->clks[7], NULL, "davinci-mcasp.0");
>> +	clk_register_clkdev(clk_data->clks[8], NULL, "davinci-mcasp.1");
>> +	clk_register_clkdev(clk_data->clks[9], NULL, "davinci-mcasp.2");
>> +	clk_register_clkdev(clk_data->clks[10], NULL, "spi_davinci.1");
>> +	clk_register_clkdev(clk_data->clks[11], NULL, "i2c_davinci.2");
>> +	clk_register_clkdev(clk_data->clks[12], NULL, "serial8250.1");
>> +	clk_register_clkdev(clk_data->clks[13], NULL, "serial8250.2");
>> +	clk_register_clkdev(clk_data->clks[16], "fck", "da8xx_lcdc.0");
>> +	clk_register_clkdev(clk_data->clks[17], "fck", "ehrpwm.0");
>> +	clk_register_clkdev(clk_data->clks[17], "fck", "ehrpwm.1");
>> +	clk_register_clkdev(clk_data->clks[20], "fck", "ecap.0");
>> +	clk_register_clkdev(clk_data->clks[20], "fck", "ecap.1");
>> +	clk_register_clkdev(clk_data->clks[20], "fck", "ecap.2");
>> +	clk_register_clkdev(clk_data->clks[21], NULL, "eqep.0");
>> +	clk_register_clkdev(clk_data->clks[21], NULL, "eqep.1");
> 
> This is going to be very difficult to audit for mistakes. How do you
> feel about adding the con_id and dev_id to davinci_psc_clk_info[] so
> they can be initialized as part of a single static table? And then here
> you go over the table looking for non-NULL con_id/dev_id to call
> clk_register_clkdev()?
> 
> I am guessing you did not take that route because the DT path does not
> need those. But still, I think that will be much less error prone.

I wasn't really happy with this either, but I haven't come up with
anything better. The reason I think this is good enough is that the
array index is the LPSC number, so it is not actually that hard to
audit. You can use the clock declarations above (or the datasheet/
TRM) to know exactly which clock you are dealing with by matching
the array index. I considered using macros instead of the numbers,
but then lines are over 80 columns and it gets hard to read with
wrapped lines.

Any other solution will be much more verbose and require helper
functions for looping through the clocks. I'm thinking that I would
define a list of con_id, dev_id pairs for each clock, so that would
be 15 extra static arrays here.

I'll think about it a little more, but for now, I would like to push
for just calling this "good enough" and leave it as-is.

  reply	other threads:[~2018-01-16 17:16 UTC|newest]

Thread overview: 121+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-08  2:16 [PATCH v5 00/44] ARM: davinci: convert to common clock framework​ David Lechner
2018-01-08  2:17 ` [PATCH v5 01/44] dt-bindings: clock: Add new bindings for TI Davinci PLL clocks David Lechner
2018-01-08 14:00   ` Sekhar Nori
2018-01-08 16:29     ` David Lechner
2018-01-09 12:35       ` Sekhar Nori
2018-01-10  3:01         ` David Lechner
2018-01-10 18:52           ` Sekhar Nori
2018-01-10 22:24             ` Adam Ford
2018-01-11  2:50               ` David Lechner
2018-01-11 12:45                 ` Adam Ford
2018-01-11 15:47                   ` Sekhar Nori
2018-01-11 16:14                     ` Adam Ford
2018-01-11 17:22                   ` David Lechner
2018-01-11 18:09                     ` Adam Ford
2018-01-11 18:29                       ` David Lechner
2018-01-11 18:50                         ` Adam Ford
2018-01-11 20:04                           ` David Lechner
2018-01-11 20:58                             ` Adam Ford
2018-01-11 21:04                               ` David Lechner
2018-01-11 21:34                                 ` Adam Ford
2018-01-11 21:46                                   ` David Lechner
2018-01-12  6:03                                     ` Sekhar Nori
2018-01-16 11:22                                   ` Sekhar Nori
2018-01-16 12:21                                     ` Adam Ford
2018-01-16 16:41                                       ` David Lechner
2018-01-11 23:20                       ` David Lechner
2018-01-11  2:54             ` David Lechner
2018-01-08  2:17 ` [PATCH v5 02/44] clk: davinci: New driver for davinci " David Lechner
2018-01-12  9:21   ` Sekhar Nori
2018-01-12 15:25     ` David Lechner
2018-01-12 15:30       ` Adam Ford
2018-01-12 15:48         ` David Lechner
2018-01-12 16:18       ` Sekhar Nori
2018-01-13  1:11         ` David Lechner
2018-01-16  6:48           ` Sekhar Nori
2018-01-13  2:13     ` David Lechner
2018-01-16  6:32       ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 03/44] clk: davinci: Add platform information for TI DA830 PLL David Lechner
2018-01-12  9:41   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 04/44] clk: davinci: Add platform information for TI DA850 PLL David Lechner
2018-01-16  8:37   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 05/44] clk: davinci: Add platform information for TI DM355 PLL David Lechner
2018-01-16  8:38   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 06/44] clk: davinci: Add platform information for TI DM365 PLL David Lechner
2018-01-16  8:48   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 07/44] clk: davinci: Add platform information for TI DM644x PLL David Lechner
2018-01-16  8:56   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 08/44] clk: davinci: Add platform information for TI DM646x PLL David Lechner
2018-01-16  9:01   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 09/44] dt-bindings: clock: New bindings for TI Davinci PSC David Lechner
2018-01-11 21:22   ` Rob Herring
2018-01-08  2:17 ` [PATCH v5 10/44] clk: davinci: New driver for davinci PSC clocks David Lechner
2018-01-16 11:03   ` Sekhar Nori
2018-01-16 16:51     ` David Lechner
2018-01-17 12:25       ` Sekhar Nori
2018-01-17 17:28         ` David Lechner
2018-01-08  2:17 ` [PATCH v5 11/44] clk: davinci: Add platform information for TI DA830 PSC David Lechner
2018-01-16 13:38   ` Sekhar Nori
2018-01-16 17:16     ` David Lechner [this message]
2018-01-17 12:18       ` Sekhar Nori
2018-01-17 17:32         ` David Lechner
2018-01-18  7:53           ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 12/44] clk: davinci: Add platform information for TI DA850 PSC David Lechner
2018-01-16 14:00   ` Sekhar Nori
2018-01-16 17:21     ` David Lechner
2018-01-17 11:57       ` Sekhar Nori
2018-01-17 17:33         ` David Lechner
2018-01-17 19:08         ` David Lechner
2018-01-18  6:37           ` Sekhar Nori
2018-02-09 16:22   ` Bartosz Golaszewski
2018-02-09 16:48     ` Michael Turquette
2018-02-12  3:03       ` David Lechner
2018-04-05 13:09       ` Sekhar Nori
2018-04-05 13:44         ` Bartosz Golaszewski
2018-04-05 14:36           ` Sekhar Nori
2018-04-05 15:37             ` David Lechner
2018-04-05 15:51             ` Bartosz Golaszewski
2018-04-06  9:37               ` Sekhar Nori
2018-04-06 16:46                 ` Stephen Boyd
2018-04-23 14:59                   ` David Lechner
2018-04-24  8:28                     ` Sekhar Nori
2018-04-24 16:11                       ` David Lechner
2018-04-25  6:07                         ` Sekhar Nori
2018-04-25 10:09                           ` Bartosz Golaszewski
2018-04-25 10:26                             ` Bartosz Golaszewski
2018-01-08  2:17 ` [PATCH v5 13/44] clk: davinci: Add platform information for TI DM355 PSC David Lechner
2018-01-16 14:15   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 14/44] clk: davinci: Add platform information for TI DM365 PSC David Lechner
2018-01-16 14:16   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 15/44] clk: davinci: Add platform information for TI DM644x PSC David Lechner
2018-01-17 13:57   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 16/44] clk: davinci: Add platform information for TI DM646x PSC David Lechner
2018-01-17 14:59   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 17/44] dt-bindings: clock: Add bindings for DA8XX CFGCHIP gate clocks David Lechner
2018-01-11 21:45   ` Rob Herring
2018-01-11 21:51     ` David Lechner
2018-01-08  2:17 ` [PATCH v5 18/44] dt-bindings: clock: Add binding for TI DA8XX CFGCHIP mux clocks David Lechner
2018-01-08  2:17 ` [PATCH v5 19/44] clk: davinci: New driver for TI DA8XX CFGCHIP clocks David Lechner
2018-01-17 15:31   ` Sekhar Nori
2018-01-17 17:35     ` David Lechner
2018-01-08  2:17 ` [PATCH v5 20/44] dt-bindings: clock: Add bindings for TI DA8XX USB PHY clocks David Lechner
2018-01-18 12:10   ` Sekhar Nori
2018-01-18 19:00     ` David Lechner
2018-01-19  6:17       ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 21/44] clk: davinci: New driver " David Lechner
2018-01-18 13:05   ` Sekhar Nori
2018-01-18 18:49     ` David Lechner
2018-01-19  5:04       ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 22/44] ARM: davinci: move davinci_clk_init() to init_time David Lechner
2018-01-08  2:17 ` [PATCH v5 23/44] ARM: da830: add new clock init using common clock framework David Lechner
2018-01-08  2:17 ` [PATCH v5 24/44] ARM: da850: " David Lechner
2018-01-18 15:24   ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 25/44] ARM: dm355: " David Lechner
2018-01-08  2:17 ` [PATCH v5 26/44] ARM: dm365: " David Lechner
2018-01-08  2:17 ` [PATCH v5 27/44] ARM: dm644x: " David Lechner
2018-01-08  2:17 ` [PATCH v5 28/44] ARM: dm646x: " David Lechner
2018-01-08  2:17 ` [PATCH v5 29/44] ARM: da8xx: add new USB PHY " David Lechner
2018-01-18 15:14   ` Sekhar Nori
2018-01-18 18:43     ` David Lechner
2018-01-19  5:08       ` Sekhar Nori
2018-01-08  2:17 ` [PATCH v5 35/44] ARM: da850: Remove legacy clock init David Lechner

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=4dd36ca7-e41d-58d8-ec8c-787978307943@lechnology.com \
    --to=david@lechnology.com \
    --cc=aford173@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=khilman@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mturquette@baylibre.com \
    --cc=nsekhar@ti.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@codeaurora.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome