2021-12-02 09:32:54

by Andrej Picej

[permalink] [raw]
Subject: [PATCH v4 1/4] mfd: da9062: make register CONFIG_I writable

From: Stefan Christ <[email protected]>

Make the config register CONFIG_I writable to change the watchdog mode.

Signed-off-by: Stefan Christ <[email protected]>
Signed-off-by: Andrej Picej <[email protected]>
---
Chnages in v4:
- no changes

Changes in v3:
- no chagnes

Changes in v2:
- no changes
---
drivers/mfd/da9062-core.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
index 01f8e10dfa55..7041ba53efb4 100644
--- a/drivers/mfd/da9062-core.c
+++ b/drivers/mfd/da9062-core.c
@@ -556,6 +556,7 @@ static const struct regmap_range da9062_aa_writeable_ranges[] = {
regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
regmap_reg_range(DA9062AA_BBAT_CONT, DA9062AA_BBAT_CONT),
+ regmap_reg_range(DA9062AA_CONFIG_I, DA9062AA_CONFIG_I),
regmap_reg_range(DA9062AA_GP_ID_0, DA9062AA_GP_ID_19),
};

--
2.25.1



2021-12-02 09:32:57

by Andrej Picej

[permalink] [raw]
Subject: [PATCH v4 2/4] watchdog: da9062: reset board on watchdog timeout

Implement a method to change watchdog timeout configuration based on DT
binding ("dlg,wdt-sd"). There is a possibility to change the bahaviour
of watchdog reset. Setting WATCHDOG_SD bit enables SHUTDOWN mode, and
clearing it enables POWERDOWN mode on watchdog timeout.

If no DT binding is specified the WATCHDOG_SD bit stays in default
configuration, not breaking behaviour of devices which might depend on
default fuse configuration.

Note: This patch requires that the config register CONFIG_I is
configured as writable in the da9062 multi function device.

Signed-off-by: Andrej Picej <[email protected]>
---
Chnages in v4:
- move the code to probe function

Changes in v3:
- no changes

Changes in v2:
- don't force the "reset" for all da9062-watchdog users, instead add DT
binding where the behavior can be selected
---
drivers/watchdog/da9062_wdt.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

diff --git a/drivers/watchdog/da9062_wdt.c b/drivers/watchdog/da9062_wdt.c
index f02cbd530538..bd85f84b0fd4 100644
--- a/drivers/watchdog/da9062_wdt.c
+++ b/drivers/watchdog/da9062_wdt.c
@@ -195,8 +195,11 @@ static int da9062_wdt_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
unsigned int timeout;
+ unsigned int mask;
struct da9062 *chip;
struct da9062_watchdog *wdt;
+ int ret;
+ u32 val;

chip = dev_get_drvdata(dev->parent);
if (!chip)
@@ -236,6 +239,30 @@ static int da9062_wdt_probe(struct platform_device *pdev)
set_bit(WDOG_HW_RUNNING, &wdt->wdtdev.status);
}

+ /*
+ * Configure what happens on watchdog timeout. Can be specified with
+ * "dlg,wdt-sd" dt-binding (0 -> POWERDOWN, 1 -> SHUTDOWN).
+ * If "dlg,wdt-sd" dt-binding is NOT set use the default.
+ */
+ ret = device_property_read_u32(dev, "dlg,wdt-sd", &val);
+ if (!ret) {
+ if (val)
+ /* Use da9062's SHUTDOWN mode */
+ mask = DA9062AA_WATCHDOG_SD_MASK;
+ else
+ /* Use da9062's POWERDOWN mode. */
+ mask = 0x0;
+
+ ret = regmap_update_bits(wdt->hw->regmap,
+ DA9062AA_CONFIG_I,
+ DA9062AA_WATCHDOG_SD_MASK,
+ mask);
+
+ if (ret)
+ dev_err(dev, "failed to set wdt reset mode: %d\n",
+ ret);
+ }
+
return devm_watchdog_register_device(dev, &wdt->wdtdev);
}

--
2.25.1


2021-12-02 09:32:59

by Andrej Picej

[permalink] [raw]
Subject: [PATCH v4 3/4] dt-bindings: watchdog: da9062: add watchdog timeout mode

Document the watchdog timeout mode property. If this property is used
the user can select what happens on watchdog timeout. Set this property
to 1 to enable SHUTDOWN (the device resets), set it to 0 and the device
will go to POWERDOWN on watchdog timeout.

If this property is not set, don't touch the WATCHDOG_SD bit and leave
the configuration to OTP. This way backward compatibility is not broken.

Signed-off-by: Andrej Picej <[email protected]>
---
Changes in v4:
- no changes

Changes in v3:
- add note about using the default OTP setting if this DT binding is
not specified

Changes in v2:
- new patch, document new DT binding
---
Documentation/devicetree/bindings/watchdog/da9062-wdt.txt | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/da9062-wdt.txt b/Documentation/devicetree/bindings/watchdog/da9062-wdt.txt
index 950e4fba8dbc..354314d854ef 100644
--- a/Documentation/devicetree/bindings/watchdog/da9062-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/da9062-wdt.txt
@@ -10,6 +10,12 @@ Optional properties:
- dlg,use-sw-pm: Add this property to disable the watchdog during suspend.
Only use this option if you can't use the watchdog automatic suspend
function during a suspend (see register CONTROL_B).
+- dlg,wdt-sd: Set what happens on watchdog timeout. If this bit is set the
+ watchdog timeout triggers SHUTDOWN, if cleared the watchdog triggers
+ POWERDOWN. Can be 0 or 1. Only use this option if you want to change the
+ default chip's OTP setting for WATCHDOG_SD bit. If this property is NOT
+ set the WATCHDOG_SD bit and on timeout watchdog behavior will match the
+ chip's OTP settings.

Example: DA9062

--
2.25.1


2021-12-02 12:15:02

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH v4 1/4] mfd: da9062: make register CONFIG_I writable

On 02 December 2021 09:32, Andrej Picej wrote:

> From: Stefan Christ <[email protected]>
>
> Make the config register CONFIG_I writable to change the watchdog mode.
>
> Signed-off-by: Stefan Christ <[email protected]>
> Signed-off-by: Andrej Picej <[email protected]>

Reviewed-by: Adam Thomson <[email protected]>

2021-12-02 12:18:23

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH v4 2/4] watchdog: da9062: reset board on watchdog timeout

On 02 December 2021 09:32, Andrej Picej wrote:

> Implement a method to change watchdog timeout configuration based on DT
> binding ("dlg,wdt-sd"). There is a possibility to change the bahaviour

behaviour?

> of watchdog reset. Setting WATCHDOG_SD bit enables SHUTDOWN mode, and
> clearing it enables POWERDOWN mode on watchdog timeout.
>
> If no DT binding is specified the WATCHDOG_SD bit stays in default
> configuration, not breaking behaviour of devices which might depend on
> default fuse configuration.
>
> Note: This patch requires that the config register CONFIG_I is
> configured as writable in the da9062 multi function device.
>
> Signed-off-by: Andrej Picej <[email protected]>
> ---

Spelling aside:

Reviewed-by: Adam Thomson <[email protected]>

2021-12-02 12:19:38

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH v4 3/4] dt-bindings: watchdog: da9062: add watchdog timeout mode

On 02 December 2021 09:32, Andrej Picej wrote:

> Document the watchdog timeout mode property. If this property is used
> the user can select what happens on watchdog timeout. Set this property
> to 1 to enable SHUTDOWN (the device resets), set it to 0 and the device
> will go to POWERDOWN on watchdog timeout.
>
> If this property is not set, don't touch the WATCHDOG_SD bit and leave
> the configuration to OTP. This way backward compatibility is not broken.
>
> Signed-off-by: Andrej Picej <[email protected]>

Reviewed-by: Adam Thomson <[email protected]>

2021-12-02 12:25:42

by Andrej Picej

[permalink] [raw]
Subject: Re: [PATCH v4 2/4] watchdog: da9062: reset board on watchdog timeout



On 2. 12. 21 13:18, Adam Thomson wrote:
> On 02 December 2021 09:32, Andrej Picej wrote:
>
>> Implement a method to change watchdog timeout configuration based on DT
>> binding ("dlg,wdt-sd"). There is a possibility to change the bahaviour
>
> behaviour?

Of course.

>
>> of watchdog reset. Setting WATCHDOG_SD bit enables SHUTDOWN mode, and
>> clearing it enables POWERDOWN mode on watchdog timeout.
>>
>> If no DT binding is specified the WATCHDOG_SD bit stays in default
>> configuration, not breaking behaviour of devices which might depend on
>> default fuse configuration.
>>
>> Note: This patch requires that the config register CONFIG_I is
>> configured as writable in the da9062 multi function device.
>>
>> Signed-off-by: Andrej Picej <[email protected]>
>> ---
>
> Spelling aside:
>
> Reviewed-by: Adam Thomson <[email protected]>
>

2021-12-02 14:40:50

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH v4 1/4] mfd: da9062: make register CONFIG_I writable

On Thu, Dec 02, 2021 at 10:32:27AM +0100, Andrej Picej wrote:
> From: Stefan Christ <[email protected]>
>
> Make the config register CONFIG_I writable to change the watchdog mode.
>
> Signed-off-by: Stefan Christ <[email protected]>
> Signed-off-by: Andrej Picej <[email protected]>

Acked-by: Guenter Roeck <[email protected]>

> ---
> Chnages in v4:
> - no changes
>
> Changes in v3:
> - no chagnes
>
> Changes in v2:
> - no changes
> ---
> drivers/mfd/da9062-core.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
> index 01f8e10dfa55..7041ba53efb4 100644
> --- a/drivers/mfd/da9062-core.c
> +++ b/drivers/mfd/da9062-core.c
> @@ -556,6 +556,7 @@ static const struct regmap_range da9062_aa_writeable_ranges[] = {
> regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
> regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
> regmap_reg_range(DA9062AA_BBAT_CONT, DA9062AA_BBAT_CONT),
> + regmap_reg_range(DA9062AA_CONFIG_I, DA9062AA_CONFIG_I),
> regmap_reg_range(DA9062AA_GP_ID_0, DA9062AA_GP_ID_19),
> };
>
> --
> 2.25.1
>

2021-12-02 14:41:19

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH v4 2/4] watchdog: da9062: reset board on watchdog timeout

On Thu, Dec 02, 2021 at 10:32:28AM +0100, Andrej Picej wrote:
> Implement a method to change watchdog timeout configuration based on DT
> binding ("dlg,wdt-sd"). There is a possibility to change the bahaviour
> of watchdog reset. Setting WATCHDOG_SD bit enables SHUTDOWN mode, and
> clearing it enables POWERDOWN mode on watchdog timeout.
>
> If no DT binding is specified the WATCHDOG_SD bit stays in default
> configuration, not breaking behaviour of devices which might depend on
> default fuse configuration.
>
> Note: This patch requires that the config register CONFIG_I is
> configured as writable in the da9062 multi function device.
>
> Signed-off-by: Andrej Picej <[email protected]>

Reviewed-by: Guenter Roeck <[email protected]>

> ---
> Chnages in v4:
> - move the code to probe function
>
> Changes in v3:
> - no changes
>
> Changes in v2:
> - don't force the "reset" for all da9062-watchdog users, instead add DT
> binding where the behavior can be selected
> ---
> drivers/watchdog/da9062_wdt.c | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/drivers/watchdog/da9062_wdt.c b/drivers/watchdog/da9062_wdt.c
> index f02cbd530538..bd85f84b0fd4 100644
> --- a/drivers/watchdog/da9062_wdt.c
> +++ b/drivers/watchdog/da9062_wdt.c
> @@ -195,8 +195,11 @@ static int da9062_wdt_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> unsigned int timeout;
> + unsigned int mask;
> struct da9062 *chip;
> struct da9062_watchdog *wdt;
> + int ret;
> + u32 val;
>
> chip = dev_get_drvdata(dev->parent);
> if (!chip)
> @@ -236,6 +239,30 @@ static int da9062_wdt_probe(struct platform_device *pdev)
> set_bit(WDOG_HW_RUNNING, &wdt->wdtdev.status);
> }
>
> + /*
> + * Configure what happens on watchdog timeout. Can be specified with
> + * "dlg,wdt-sd" dt-binding (0 -> POWERDOWN, 1 -> SHUTDOWN).
> + * If "dlg,wdt-sd" dt-binding is NOT set use the default.
> + */
> + ret = device_property_read_u32(dev, "dlg,wdt-sd", &val);
> + if (!ret) {
> + if (val)
> + /* Use da9062's SHUTDOWN mode */
> + mask = DA9062AA_WATCHDOG_SD_MASK;
> + else
> + /* Use da9062's POWERDOWN mode. */
> + mask = 0x0;
> +
> + ret = regmap_update_bits(wdt->hw->regmap,
> + DA9062AA_CONFIG_I,
> + DA9062AA_WATCHDOG_SD_MASK,
> + mask);
> +
> + if (ret)
> + dev_err(dev, "failed to set wdt reset mode: %d\n",
> + ret);
> + }
> +
> return devm_watchdog_register_device(dev, &wdt->wdtdev);
> }
>
> --
> 2.25.1
>

2021-12-03 08:59:10

by Andrej Picej

[permalink] [raw]
Subject: Re: [PATCH v4 1/4] mfd: da9062: make register CONFIG_I writable



On 2. 12. 21 16:18, Christoph Niedermaier wrote:
> From: Andrej Picej
> Sent: Thursday, December 2, 2021 10:32 AM
>> From: Stefan Christ <[email protected]>
>>
>> Make the config register CONFIG_I writable to change the watchdog mode.
>>
>> Signed-off-by: Stefan Christ <[email protected]>
>> Signed-off-by: Andrej Picej <[email protected]>
>> ---
>> Chnages in v4:
>> - no changes
>>
>> Changes in v3:
>> - no chagnes
>>
>> Changes in v2:
>> - no changes
>> ---
>> drivers/mfd/da9062-core.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
>> index 01f8e10dfa55..7041ba53efb4 100644
>> --- a/drivers/mfd/da9062-core.c
>> +++ b/drivers/mfd/da9062-core.c
>> @@ -556,6 +556,7 @@ static const struct regmap_range
>> da9062_aa_writeable_ranges[] = {
>> regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
>> regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
>> regmap_reg_range(DA9062AA_BBAT_CONT, DA9062AA_BBAT_CONT),
>> + regmap_reg_range(DA9062AA_CONFIG_I, DA9062AA_CONFIG_I),
>> regmap_reg_range(DA9062AA_GP_ID_0, DA9062AA_GP_ID_19),
>> };

> Could you also include the CONFIG_I for the DA9061?
> So I can test it on my system.
>

Yes, I don't see the problem here.
@Maintainers, should I send a new version with this (then I would also
fix the minor spelling mistake in commit message of 2/4), or do you
prefer a separate patch?

Thanks,
Andrej.

2021-12-03 15:04:41

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH v4 1/4] mfd: da9062: make register CONFIG_I writable

On 12/3/21 12:59 AM, Andrej Picej wrote:
>
>
> On 2. 12. 21 16:18, Christoph Niedermaier wrote:
>> From: Andrej Picej
>> Sent: Thursday, December 2, 2021 10:32 AM
>>> From: Stefan Christ <[email protected]>
>>>
>>> Make the config register CONFIG_I writable to change the watchdog mode.
>>>
>>> Signed-off-by: Stefan Christ <[email protected]>
>>> Signed-off-by: Andrej Picej <[email protected]>
>>> ---
>>> Chnages in v4:
>>>   - no changes
>>>
>>> Changes in v3:
>>>   - no chagnes
>>>
>>> Changes in v2:
>>>   - no changes
>>> ---
>>>   drivers/mfd/da9062-core.c | 1 +
>>>   1 file changed, 1 insertion(+)
>>>
>>> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
>>> index 01f8e10dfa55..7041ba53efb4 100644
>>> --- a/drivers/mfd/da9062-core.c
>>> +++ b/drivers/mfd/da9062-core.c
>>> @@ -556,6 +556,7 @@ static const struct regmap_range
>>> da9062_aa_writeable_ranges[] = {
>>>          regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
>>>          regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
>>>          regmap_reg_range(DA9062AA_BBAT_CONT, DA9062AA_BBAT_CONT),
>>> +       regmap_reg_range(DA9062AA_CONFIG_I, DA9062AA_CONFIG_I),
>>>          regmap_reg_range(DA9062AA_GP_ID_0, DA9062AA_GP_ID_19),
>>>   };
>
>> Could you also include the CONFIG_I for the DA9061?
>> So I can test it on my system.
>>
>
> Yes, I don't see the problem here.
> @Maintainers, should I send a new version with this (then I would also fix the minor spelling mistake in commit message of 2/4), or do you prefer a separate patch?
>

Either way is fine, with a slight preference on sending a new version.

Guenter