diff mbox series

[U-Boot,4/5] spi: cadence_qspi: add reset handling

Message ID 20190125203051.10943-5-simon.k.r.goldschmidt@gmail.com
State Superseded
Delegated to: Marek Vasut
Headers show
Series arm: socfpga: implement proper peripheral reset handling | expand

Commit Message

Simon Goldschmidt Jan. 25, 2019, 8:30 p.m. UTC
This adds reset handling to the devicetree-enabled denalid nand driver.

For backwards compatibility, only a warning is printed when failing to
get reset handles.

Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
---

 drivers/spi/cadence_qspi.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Marek Vasut Jan. 26, 2019, 8:59 a.m. UTC | #1
On 1/25/19 9:30 PM, Simon Goldschmidt wrote:
> This adds reset handling to the devicetree-enabled denalid nand driver.
> 
> For backwards compatibility, only a warning is printed when failing to
> get reset handles.
> 
> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> ---
> 
>  drivers/spi/cadence_qspi.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
> index 11fce9c4fe..f68c827e6d 100644
> --- a/drivers/spi/cadence_qspi.c
> +++ b/drivers/spi/cadence_qspi.c
> @@ -8,6 +8,7 @@
>  #include <dm.h>
>  #include <fdtdec.h>
>  #include <malloc.h>
> +#include <reset.h>
>  #include <spi.h>
>  #include <linux/errno.h>
>  #include "cadence_qspi.h"
> @@ -154,10 +155,18 @@ static int cadence_spi_probe(struct udevice *bus)
>  {
>  	struct cadence_spi_platdata *plat = bus->platdata;
>  	struct cadence_spi_priv *priv = dev_get_priv(bus);
> +	struct reset_ctl_bulk reset_bulk;
> +	int ret;
>  
>  	priv->regbase = plat->regbase;
>  	priv->ahbbase = plat->ahbbase;
>  
> +	ret = reset_get_bulk(bus, &reset_bulk);
> +	if (ret)
> +		dev_warn(bus, "Cant' get reset: %d\n", ret);

Can't

Also, shouldn't there be some reset_release or reset_free somewhere ?
What about .remove(), shouldn't that release the reset ?

> +	else
> +		reset_deassert_bulk(&reset_bulk);
> +
>  	if (!priv->qspi_is_init) {
>  		cadence_qspi_apb_controller_init(plat);
>  		priv->qspi_is_init = 1;
>
Simon Goldschmidt Jan. 27, 2019, 8:49 a.m. UTC | #2
Am 26.01.2019 um 09:59 schrieb Marek Vasut:
> On 1/25/19 9:30 PM, Simon Goldschmidt wrote:
>> This adds reset handling to the devicetree-enabled denalid nand driver.
>>
>> For backwards compatibility, only a warning is printed when failing to
>> get reset handles.
>>
>> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
>> ---
>>
>>   drivers/spi/cadence_qspi.c | 9 +++++++++
>>   1 file changed, 9 insertions(+)
>>
>> diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
>> index 11fce9c4fe..f68c827e6d 100644
>> --- a/drivers/spi/cadence_qspi.c
>> +++ b/drivers/spi/cadence_qspi.c
>> @@ -8,6 +8,7 @@
>>   #include <dm.h>
>>   #include <fdtdec.h>
>>   #include <malloc.h>
>> +#include <reset.h>
>>   #include <spi.h>
>>   #include <linux/errno.h>
>>   #include "cadence_qspi.h"
>> @@ -154,10 +155,18 @@ static int cadence_spi_probe(struct udevice *bus)
>>   {
>>   	struct cadence_spi_platdata *plat = bus->platdata;
>>   	struct cadence_spi_priv *priv = dev_get_priv(bus);
>> +	struct reset_ctl_bulk reset_bulk;
>> +	int ret;
>>   
>>   	priv->regbase = plat->regbase;
>>   	priv->ahbbase = plat->ahbbase;
>>   
>> +	ret = reset_get_bulk(bus, &reset_bulk);
>> +	if (ret)
>> +		dev_warn(bus, "Cant' get reset: %d\n", ret);
> 
> Can't

Right. Copy & paste from 3/5...

> 
> Also, shouldn't there be some reset_release or reset_free somewhere ?
> What about .remove(), shouldn't that release the reset ?

Ehrm, well... this is my first driver using the reset framework. I 
haven't though of remove. I'll do a V2 for that soon.

Regards,
Simon

> 
>> +	else
>> +		reset_deassert_bulk(&reset_bulk);
>> +
>>   	if (!priv->qspi_is_init) {
>>   		cadence_qspi_apb_controller_init(plat);
>>   		priv->qspi_is_init = 1;
>>
> 
>
Marek Vasut Jan. 28, 2019, 10:56 a.m. UTC | #3
On 1/27/19 9:49 AM, Simon Goldschmidt wrote:
> Am 26.01.2019 um 09:59 schrieb Marek Vasut:
>> On 1/25/19 9:30 PM, Simon Goldschmidt wrote:
>>> This adds reset handling to the devicetree-enabled denalid nand driver.
>>>
>>> For backwards compatibility, only a warning is printed when failing to
>>> get reset handles.
>>>
>>> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
>>> ---
>>>
>>>   drivers/spi/cadence_qspi.c | 9 +++++++++
>>>   1 file changed, 9 insertions(+)
>>>
>>> diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
>>> index 11fce9c4fe..f68c827e6d 100644
>>> --- a/drivers/spi/cadence_qspi.c
>>> +++ b/drivers/spi/cadence_qspi.c
>>> @@ -8,6 +8,7 @@
>>>   #include <dm.h>
>>>   #include <fdtdec.h>
>>>   #include <malloc.h>
>>> +#include <reset.h>
>>>   #include <spi.h>
>>>   #include <linux/errno.h>
>>>   #include "cadence_qspi.h"
>>> @@ -154,10 +155,18 @@ static int cadence_spi_probe(struct udevice *bus)
>>>   {
>>>       struct cadence_spi_platdata *plat = bus->platdata;
>>>       struct cadence_spi_priv *priv = dev_get_priv(bus);
>>> +    struct reset_ctl_bulk reset_bulk;
>>> +    int ret;
>>>         priv->regbase = plat->regbase;
>>>       priv->ahbbase = plat->ahbbase;
>>>   +    ret = reset_get_bulk(bus, &reset_bulk);
>>> +    if (ret)
>>> +        dev_warn(bus, "Cant' get reset: %d\n", ret);
>>
>> Can't
> 
> Right. Copy & paste from 3/5...
> 
>>
>> Also, shouldn't there be some reset_release or reset_free somewhere ?
>> What about .remove(), shouldn't that release the reset ?
> 
> Ehrm, well... this is my first driver using the reset framework. I
> haven't though of remove. I'll do a V2 for that soon.

Thanks
diff mbox series

Patch

diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
index 11fce9c4fe..f68c827e6d 100644
--- a/drivers/spi/cadence_qspi.c
+++ b/drivers/spi/cadence_qspi.c
@@ -8,6 +8,7 @@ 
 #include <dm.h>
 #include <fdtdec.h>
 #include <malloc.h>
+#include <reset.h>
 #include <spi.h>
 #include <linux/errno.h>
 #include "cadence_qspi.h"
@@ -154,10 +155,18 @@  static int cadence_spi_probe(struct udevice *bus)
 {
 	struct cadence_spi_platdata *plat = bus->platdata;
 	struct cadence_spi_priv *priv = dev_get_priv(bus);
+	struct reset_ctl_bulk reset_bulk;
+	int ret;
 
 	priv->regbase = plat->regbase;
 	priv->ahbbase = plat->ahbbase;
 
+	ret = reset_get_bulk(bus, &reset_bulk);
+	if (ret)
+		dev_warn(bus, "Cant' get reset: %d\n", ret);
+	else
+		reset_deassert_bulk(&reset_bulk);
+
 	if (!priv->qspi_is_init) {
 		cadence_qspi_apb_controller_init(plat);
 		priv->qspi_is_init = 1;