[1/2] tty: amba-pl011: add support for clock frequency setting via dt

Message ID 1467965467-28180-1-git-send-email-jorge.ramirez-ortiz@linaro.org
State New
Headers show

Commit Message

Jorge Ramirez-Ortiz July 8, 2016, 8:11 a.m.
Allow to specify the clock frequency for any given port via the
assigned-clock-rates device tree property.

Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

Tested-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

---
 drivers/tty/serial/amba-pl011.c | 5 +++++
 1 file changed, 5 insertions(+)

-- 
2.7.4

Comments

Jorge Ramirez-Ortiz July 8, 2016, 9:39 p.m. | #1
On 07/08/2016 07:14 PM, Michael Turquette wrote:
> Quoting Jorge Ramirez-Ortiz (2016-07-08 01:11:06)

>> Allow to specify the clock frequency for any given port via the

>> assigned-clock-rates device tree property.

>>

>> Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

>> Tested-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

>> ---

>>   drivers/tty/serial/amba-pl011.c | 5 +++++

>>   1 file changed, 5 insertions(+)

>>

>> diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c

>> index 1b7331e..51867ab 100644

>> --- a/drivers/tty/serial/amba-pl011.c

>> +++ b/drivers/tty/serial/amba-pl011.c

>> @@ -55,6 +55,7 @@

>>   #include <linux/types.h>

>>   #include <linux/of.h>

>>   #include <linux/of_device.h>

>> +#include <linux/clk/clk-conf.h>

>>   #include <linux/pinctrl/consumer.h>

>>   #include <linux/sizes.h>

>>   #include <linux/io.h>

>> @@ -2472,6 +2473,10 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)

>>          if (IS_ERR(uap->clk))

>>                  return PTR_ERR(uap->clk);

>>   

>> +       ret = of_clk_set_defaults(dev->dev.of_node, false);

> Change looks good to me, but with one question: should this change be

> put into more generic code instead of in this specific driver? For

> instance, we call of_clk_set_defaults from the following files:

>

> drivers/base/platform.c

> drivers/i2c/i2c-core.c

> drivers/spi/spi.c

>

> And Stephen posted a patch to do this for devices on the AMBA bus:

>

> https://patchwork.kernel.org/patch/6501691/

>

> Does Stephen's patch mean that you do not need patch #1?


I did a quick test (replaced my changes with the patch above) and the 
console broke and the BT stack couldn't communicate to the device over 
the uart...I guess something else needs doing on top of Stephen's change.
Jorge Ramirez-Ortiz July 9, 2016, 6:42 a.m. | #2
On 07/09/2016 02:43 AM, Stephen Boyd wrote:
> On 07/08/2016 05:23 PM, Michael Turquette wrote:

>> Quoting Jorge Ramirez (2016-07-08 14:39:50)

>>> On 07/08/2016 07:14 PM, Michael Turquette wrote:

>>>> Quoting Jorge Ramirez-Ortiz (2016-07-08 01:11:06)

>>>>> Allow to specify the clock frequency for any given port via the

>>>>> assigned-clock-rates device tree property.

>>>>>

>>>>> Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

>>>>> Tested-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

>>>>> ---

>>>>>    drivers/tty/serial/amba-pl011.c | 5 +++++

>>>>>    1 file changed, 5 insertions(+)

>>>>>

>>>>> diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c

>>>>> index 1b7331e..51867ab 100644

>>>>> --- a/drivers/tty/serial/amba-pl011.c

>>>>> +++ b/drivers/tty/serial/amba-pl011.c

>>>>> @@ -55,6 +55,7 @@

>>>>>    #include <linux/types.h>

>>>>>    #include <linux/of.h>

>>>>>    #include <linux/of_device.h>

>>>>> +#include <linux/clk/clk-conf.h>

>>>>>    #include <linux/pinctrl/consumer.h>

>>>>>    #include <linux/sizes.h>

>>>>>    #include <linux/io.h>

>>>>> @@ -2472,6 +2473,10 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)

>>>>>           if (IS_ERR(uap->clk))

>>>>>                   return PTR_ERR(uap->clk);

>>>>>    

>>>>> +       ret = of_clk_set_defaults(dev->dev.of_node, false);

>>>> Change looks good to me, but with one question: should this change be

>>>> put into more generic code instead of in this specific driver? For

>>>> instance, we call of_clk_set_defaults from the following files:

>>>>

>>>> drivers/base/platform.c

>>>> drivers/i2c/i2c-core.c

>>>> drivers/spi/spi.c

>>>>

>>>> And Stephen posted a patch to do this for devices on the AMBA bus:

>>>>

>>>> https://patchwork.kernel.org/patch/6501691/

>>>>

>>>> Does Stephen's patch mean that you do not need patch #1?

>>> I did a quick test (replaced my changes with the patch above) and the

>>> console broke and the BT stack couldn't communicate to the device over

>>> the uart...I guess something else needs doing on top of Stephen's change.

>>>

>> Let's give Stephen a chance to respond. If he doesn't soon then I'm OK

>> to merge your two patches.

>>

>

> Yeah we need to restart that patch. It's been in my "pending" list for a

> year now it seems.

>

> Curious why it broke things, perhaps device probe is failing when it

> didn't fail before?

>


um, I retested again this morning and it is all good - I was also a bit 
surprised when things failed yesterday  (it seems one of the wires on my 
board was loose, sorry).

So AFAIC your patch addresses the issue in a much generic (better) way 
and there are no regressions on a HiKey board running a 4.4 kernel.

Patch

diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 1b7331e..51867ab 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -55,6 +55,7 @@ 
 #include <linux/types.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
+#include <linux/clk/clk-conf.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/sizes.h>
 #include <linux/io.h>
@@ -2472,6 +2473,10 @@  static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
 	if (IS_ERR(uap->clk))
 		return PTR_ERR(uap->clk);
 
+	ret = of_clk_set_defaults(dev->dev.of_node, false);
+	if (ret < 0)
+		return ret;
+
 	uap->reg_offset = vendor->reg_offset;
 	uap->vendor = vendor;
 	uap->fifosize = vendor->get_fifosize(dev);