diff mbox

[RFC,v4,12/26] watchdog: renesas_wdt: Add R-Car Gen2 support

Message ID 1517423070-24236-13-git-send-email-fabrizio.castro@bp.renesas.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Fabrizio Castro Jan. 31, 2018, 6:24 p.m. UTC
Due to commits:
* "ARM: shmobile: Add watchdog support",
* "ARM: shmobile: rcar-gen2: Add watchdog support", and
* "soc: renesas: rcar-rst: Enable watchdog as reset trigger for Gen2",
we now have everything we needed for the watchdog to work on Gen2 and
RZ/G1.

This commit adds "renesas,rcar-gen2-wdt" as compatible string for R-Car
Gen2 and RZ/G1, and since on those platforms the rwdt clock needs to be
always ON, when suspending to RAM we need to explicitly disable the
counting by clearing TME from RWTCSRA.

Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
---
v3->4:
* in this new version the changes to the driver have been splitted into
  two commits, this patch takes care of the basic Gen2 support, patch 13/26
  takes care of the restart handler.

 drivers/watchdog/renesas_wdt.c | 42 +++++++++++++++++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 5 deletions(-)

Comments

Guenter Roeck Feb. 2, 2018, 2:56 a.m. UTC | #1
On 01/31/2018 10:24 AM, Fabrizio Castro wrote:
> Due to commits:
> * "ARM: shmobile: Add watchdog support",
> * "ARM: shmobile: rcar-gen2: Add watchdog support", and
> * "soc: renesas: rcar-rst: Enable watchdog as reset trigger for Gen2",
> we now have everything we needed for the watchdog to work on Gen2 and
> RZ/G1.
> 
> This commit adds "renesas,rcar-gen2-wdt" as compatible string for R-Car
> Gen2 and RZ/G1, and since on those platforms the rwdt clock needs to be
> always ON, when suspending to RAM we need to explicitly disable the
> counting by clearing TME from RWTCSRA.
> 
> Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
> Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
> ---
> v3->4:
> * in this new version the changes to the driver have been splitted into
>    two commits, this patch takes care of the basic Gen2 support, patch 13/26
>    takes care of the restart handler.
> 
>   drivers/watchdog/renesas_wdt.c | 42 +++++++++++++++++++++++++++++++++++++-----
>   1 file changed, 37 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/watchdog/renesas_wdt.c b/drivers/watchdog/renesas_wdt.c
> index 831ef83..0a1a402 100644
> --- a/drivers/watchdog/renesas_wdt.c
> +++ b/drivers/watchdog/renesas_wdt.c
> @@ -203,13 +203,42 @@ static int rwdt_remove(struct platform_device *pdev)
>   	return 0;
>   }
>   
> -/*
> - * This driver does also fit for R-Car Gen2 (r8a779[0-4]) WDT. However, for SMP
> - * to work there, one also needs a RESET (RST) driver which does not exist yet
> - * due to HW issues. This needs to be solved before adding compatibles here.
> - */
> +#ifdef CONFIG_PM
> +static int rwdt_suspend(struct device *dev)
> +{
> +	struct platform_device *pdev;
> +	struct rwdt_priv *priv;
> +
> +	pdev = to_platform_device(dev);
> +	priv = platform_get_drvdata(pdev);
> +	if (watchdog_active(&priv->wdev)) {
> +		rwdt_write(priv, priv->cks, RWTCSRA);
> +	}

Unnecessary { }

> +	return 0;
> +}
> +
> +static int rwdt_resume(struct device *dev)
> +{
> +	struct platform_device *pdev;
> +	struct rwdt_priv *priv;
> +
> +	pdev = to_platform_device(dev);
> +	priv = platform_get_drvdata(pdev);
> +	if (watchdog_active(&priv->wdev)) {
> +		rwdt_write(priv, priv->cks | RWTCSRA_TME, RWTCSRA);
> +	}

Same here. FWIW, checkpatch does complain about that.

Guenter
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Fabrizio Castro Feb. 5, 2018, 11:16 a.m. UTC | #2
SGVsbG8gR3VlbnRlciwNCg0KdGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLg0KDQo+IC0tLS0t
T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGRldmljZXRyZWUtb3duZXJAdmdlci5rZXJu
ZWwub3JnIFttYWlsdG86ZGV2aWNldHJlZS1vd25lckB2Z2VyLmtlcm5lbC5vcmddIE9uIEJlaGFs
ZiBPZiBHdWVudGVyIFJvZWNrDQo+IFNlbnQ6IDAyIEZlYnJ1YXJ5IDIwMTggMDI6NTYNCj4gVG86
IEZhYnJpemlvIENhc3RybyA8ZmFicml6aW8uY2FzdHJvQGJwLnJlbmVzYXMuY29tPjsgUGhpbGlw
cCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT47IFJvYiBIZXJyaW5nIDxyb2JoK2R0QGtl
cm5lbC5vcmc+Ow0KPiBNYXJrIFJ1dGxhbmQgPG1hcmsucnV0bGFuZEBhcm0uY29tPjsgV2ltIFZh
biBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT47IFJ1c3NlbGwgS2luZyA8bGludXhAYXJtbGludXgu
b3JnLnVrPjsgQ2F0YWxpbg0KPiBNYXJpbmFzIDxjYXRhbGluLm1hcmluYXNAYXJtLmNvbT47IFdp
bGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPjsgTWljaGFlbCBUdXJxdWV0dGUgPG10dXJx
dWV0dGVAYmF5bGlicmUuY29tPjsNCj4gU3RlcGhlbiBCb3lkIDxzYm95ZEBjb2RlYXVyb3JhLm9y
Zz47IFNpbW9uIEhvcm1hbiA8aG9ybXNAdmVyZ2UubmV0LmF1PjsgTWFnbnVzIERhbW0gPG1hZ251
cy5kYW1tQGdtYWlsLmNvbT47DQo+IEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnQrcmVuZXNhc0Bn
bGlkZXIuYmU+OyBXb2xmcmFtIFNhbmcgPHdzYStyZW5lc2FzQHNhbmctZW5naW5lZXJpbmcuY29t
Pg0KPiBDYzogZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXdhdGNoZG9nQHZnZXIu
a2VybmVsLm9yZzsgbGludXgtcmVuZXNhcy1zb2NAdmdlci5rZXJuZWwub3JnOyBsaW51eC1hcm0t
DQo+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1jbGtAdmdlci5rZXJuZWwub3Jn
OyBDaHJpcyBQYXRlcnNvbiA8Q2hyaXMuUGF0ZXJzb24yQHJlbmVzYXMuY29tPjsgQmlqdSBEYXMN
Cj4gPGJpanUuZGFzQGJwLnJlbmVzYXMuY29tPjsgUmFtZXNoIFNoYW5tdWdhc3VuZGFyYW0gPHJh
bWVzaC5zaGFubXVnYXN1bmRhcmFtQGJwLnJlbmVzYXMuY29tPg0KPiBTdWJqZWN0OiBSZTogW1JG
QyB2NCAxMi8yNl0gd2F0Y2hkb2c6IHJlbmVzYXNfd2R0OiBBZGQgUi1DYXIgR2VuMiBzdXBwb3J0
DQo+DQo+IE9uIDAxLzMxLzIwMTggMTA6MjQgQU0sIEZhYnJpemlvIENhc3RybyB3cm90ZToNCj4g
PiBEdWUgdG8gY29tbWl0czoNCj4gPiAqICJBUk06IHNobW9iaWxlOiBBZGQgd2F0Y2hkb2cgc3Vw
cG9ydCIsDQo+ID4gKiAiQVJNOiBzaG1vYmlsZTogcmNhci1nZW4yOiBBZGQgd2F0Y2hkb2cgc3Vw
cG9ydCIsIGFuZA0KPiA+ICogInNvYzogcmVuZXNhczogcmNhci1yc3Q6IEVuYWJsZSB3YXRjaGRv
ZyBhcyByZXNldCB0cmlnZ2VyIGZvciBHZW4yIiwNCj4gPiB3ZSBub3cgaGF2ZSBldmVyeXRoaW5n
IHdlIG5lZWRlZCBmb3IgdGhlIHdhdGNoZG9nIHRvIHdvcmsgb24gR2VuMiBhbmQNCj4gPiBSWi9H
MS4NCj4gPg0KPiA+IFRoaXMgY29tbWl0IGFkZHMgInJlbmVzYXMscmNhci1nZW4yLXdkdCIgYXMg
Y29tcGF0aWJsZSBzdHJpbmcgZm9yIFItQ2FyDQo+ID4gR2VuMiBhbmQgUlovRzEsIGFuZCBzaW5j
ZSBvbiB0aG9zZSBwbGF0Zm9ybXMgdGhlIHJ3ZHQgY2xvY2sgbmVlZHMgdG8gYmUNCj4gPiBhbHdh
eXMgT04sIHdoZW4gc3VzcGVuZGluZyB0byBSQU0gd2UgbmVlZCB0byBleHBsaWNpdGx5IGRpc2Fi
bGUgdGhlDQo+ID4gY291bnRpbmcgYnkgY2xlYXJpbmcgVE1FIGZyb20gUldUQ1NSQS4NCj4gPg0K
PiA+IFNpZ25lZC1vZmYtYnk6IEZhYnJpemlvIENhc3RybyA8ZmFicml6aW8uY2FzdHJvQGJwLnJl
bmVzYXMuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFJhbWVzaCBTaGFubXVnYXN1bmRhcmFtIDxy
YW1lc2guc2hhbm11Z2FzdW5kYXJhbUBicC5yZW5lc2FzLmNvbT4NCj4gPiAtLS0NCj4gPiB2My0+
NDoNCj4gPiAqIGluIHRoaXMgbmV3IHZlcnNpb24gdGhlIGNoYW5nZXMgdG8gdGhlIGRyaXZlciBo
YXZlIGJlZW4gc3BsaXR0ZWQgaW50bw0KPiA+ICAgIHR3byBjb21taXRzLCB0aGlzIHBhdGNoIHRh
a2VzIGNhcmUgb2YgdGhlIGJhc2ljIEdlbjIgc3VwcG9ydCwgcGF0Y2ggMTMvMjYNCj4gPiAgICB0
YWtlcyBjYXJlIG9mIHRoZSByZXN0YXJ0IGhhbmRsZXIuDQo+ID4NCj4gPiAgIGRyaXZlcnMvd2F0
Y2hkb2cvcmVuZXNhc193ZHQuYyB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKystLS0tLQ0KPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDUgZGVs
ZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yZW5lc2Fz
X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9yZW5lc2FzX3dkdC5jDQo+ID4gaW5kZXggODMxZWY4
My4uMGExYTQwMiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JlbmVzYXNfd2R0
LmMNCj4gPiArKysgYi9kcml2ZXJzL3dhdGNoZG9nL3JlbmVzYXNfd2R0LmMNCj4gPiBAQCAtMjAz
LDEzICsyMDMsNDIgQEAgc3RhdGljIGludCByd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2
aWNlICpwZGV2KQ0KPiA+ICAgcmV0dXJuIDA7DQo+ID4gICB9DQo+ID4NCj4gPiAtLyoNCj4gPiAt
ICogVGhpcyBkcml2ZXIgZG9lcyBhbHNvIGZpdCBmb3IgUi1DYXIgR2VuMiAocjhhNzc5WzAtNF0p
IFdEVC4gSG93ZXZlciwgZm9yIFNNUA0KPiA+IC0gKiB0byB3b3JrIHRoZXJlLCBvbmUgYWxzbyBu
ZWVkcyBhIFJFU0VUIChSU1QpIGRyaXZlciB3aGljaCBkb2VzIG5vdCBleGlzdCB5ZXQNCj4gPiAt
ICogZHVlIHRvIEhXIGlzc3Vlcy4gVGhpcyBuZWVkcyB0byBiZSBzb2x2ZWQgYmVmb3JlIGFkZGlu
ZyBjb21wYXRpYmxlcyBoZXJlLg0KPiA+IC0gKi8NCj4gPiArI2lmZGVmIENPTkZJR19QTQ0KPiA+
ICtzdGF0aWMgaW50IHJ3ZHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4g
PiArc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsNCj4gPiArc3RydWN0IHJ3ZHRfcHJpdiAq
cHJpdjsNCj4gPiArDQo+ID4gK3BkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsNCj4gPiAr
cHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICtpZiAod2F0Y2hkb2dfYWN0
aXZlKCZwcml2LT53ZGV2KSkgew0KPiA+ICtyd2R0X3dyaXRlKHByaXYsIHByaXYtPmNrcywgUldU
Q1NSQSk7DQo+ID4gK30NCj4NCj4gVW5uZWNlc3NhcnkgeyB9DQo+DQo+ID4gK3JldHVybiAwOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ3ZHRfcmVzdW1lKHN0cnVjdCBkZXZpY2Ug
KmRldikNCj4gPiArew0KPiA+ICtzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Ow0KPiA+ICtz
dHJ1Y3QgcndkdF9wcml2ICpwcml2Ow0KPiA+ICsNCj4gPiArcGRldiA9IHRvX3BsYXRmb3JtX2Rl
dmljZShkZXYpOw0KPiA+ICtwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4g
K2lmICh3YXRjaGRvZ19hY3RpdmUoJnByaXYtPndkZXYpKSB7DQo+ID4gK3J3ZHRfd3JpdGUocHJp
diwgcHJpdi0+Y2tzIHwgUldUQ1NSQV9UTUUsIFJXVENTUkEpOw0KPiA+ICt9DQo+DQo+IFNhbWUg
aGVyZS4gRldJVywgY2hlY2twYXRjaCBkb2VzIGNvbXBsYWluIGFib3V0IHRoYXQuDQoNCkkgd2ls
bCBjbGVhbiB0aGlzIHVwIGZvciB0aGUgbmV4dCAoYW5kIGhvcGVmdWxseSBsYXN0KSBpdGVyYXRp
b24uDQoNClRoYW5rcywNCkZhYnJpemlvDQoNCj4NCj4gR3VlbnRlcg0KPiAtLQ0KPiBUbyB1bnN1
YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgZGV2aWNl
dHJlZSIgaW4NCj4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5l
bC5vcmcNCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9t
YWpvcmRvbW8taW5mby5odG1sDQoNCg0KDQpSZW5lc2FzIEVsZWN0cm9uaWNzIEV1cm9wZSBMdGQs
IER1a2VzIE1lYWRvdywgTWlsbGJvYXJkIFJvYWQsIEJvdXJuZSBFbmQsIEJ1Y2tpbmdoYW1zaGly
ZSwgU0w4IDVGSCwgVUsuIFJlZ2lzdGVyZWQgaW4gRW5nbGFuZCAmIFdhbGVzIHVuZGVyIFJlZ2lz
dGVyZWQgTm8uIDA0NTg2NzA5Lg0K
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Wolfram Sang Feb. 7, 2018, 10:53 p.m. UTC | #3
> +#ifdef CONFIG_PM
> +static int rwdt_suspend(struct device *dev)
> +{
> +	struct platform_device *pdev;
> +	struct rwdt_priv *priv;
> +
> +	pdev = to_platform_device(dev);
> +	priv = platform_get_drvdata(pdev);

struct rwdt_priv *priv = dev_get_drvdata(dev);

?


> +	if (watchdog_active(&priv->wdev)) {
> +		rwdt_write(priv, priv->cks, RWTCSRA);
> +	}
> +	return 0;
> +}
> +
> +static int rwdt_resume(struct device *dev)
> +{
> +	struct platform_device *pdev;
> +	struct rwdt_priv *priv;
> +
> +	pdev = to_platform_device(dev);
> +	priv = platform_get_drvdata(pdev);

ditto

> +	if (watchdog_active(&priv->wdev)) {
> +		rwdt_write(priv, priv->cks | RWTCSRA_TME, RWTCSRA);
> +	}
> +	return 0;
> +}
> +
> +static const struct dev_pm_ops rwdt_pm = {
> +	.suspend = rwdt_suspend,
> +	.resume = rwdt_resume,
> +};

Use SIMPLE_DEV_PM_OPS macro (see stmp3xxx_rtc_wdt.c for an example) for
more compact code and...

> +#ifdef CONFIG_PM
> +		.pm = &rwdt_pm,
> +#endif

... removing this ifdeffery?
Fabrizio Castro Feb. 12, 2018, 10:31 a.m. UTC | #4
Hello Wolfram,

thank you for your feedback!

> Subject: Re: [RFC v4 12/26] watchdog: renesas_wdt: Add R-Car Gen2 support
>
>
> > +#ifdef CONFIG_PM
> > +static int rwdt_suspend(struct device *dev)
> > +{
> > +struct platform_device *pdev;
> > +struct rwdt_priv *priv;
> > +
> > +pdev = to_platform_device(dev);
> > +priv = platform_get_drvdata(pdev);
>
> struct rwdt_priv *priv = dev_get_drvdata(dev);
>
> ?

will change

>
>
> > +if (watchdog_active(&priv->wdev)) {
> > +rwdt_write(priv, priv->cks, RWTCSRA);
> > +}
> > +return 0;
> > +}
> > +
> > +static int rwdt_resume(struct device *dev)
> > +{
> > +struct platform_device *pdev;
> > +struct rwdt_priv *priv;
> > +
> > +pdev = to_platform_device(dev);
> > +priv = platform_get_drvdata(pdev);
>
> ditto

will change

>
> > +if (watchdog_active(&priv->wdev)) {
> > +rwdt_write(priv, priv->cks | RWTCSRA_TME, RWTCSRA);
> > +}
> > +return 0;
> > +}
> > +
> > +static const struct dev_pm_ops rwdt_pm = {
> > +.suspend = rwdt_suspend,
> > +.resume = rwdt_resume,
> > +};
>
> Use SIMPLE_DEV_PM_OPS macro (see stmp3xxx_rtc_wdt.c for an example) for
> more compact code and...
>
> > +#ifdef CONFIG_PM
> > +.pm = &rwdt_pm,
> > +#endif
>
> ... removing this ifdeffery?

will take out the ifdeffery


Thanks,
Fabrizio



Renesas Electronics Europe Ltd, Dukes Meadow, Millboard Road, Bourne End, Buckinghamshire, SL8 5FH, UK. Registered in England & Wales under Registered No. 04586709.
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/watchdog/renesas_wdt.c b/drivers/watchdog/renesas_wdt.c
index 831ef83..0a1a402 100644
--- a/drivers/watchdog/renesas_wdt.c
+++ b/drivers/watchdog/renesas_wdt.c
@@ -203,13 +203,42 @@  static int rwdt_remove(struct platform_device *pdev)
 	return 0;
 }
 
-/*
- * This driver does also fit for R-Car Gen2 (r8a779[0-4]) WDT. However, for SMP
- * to work there, one also needs a RESET (RST) driver which does not exist yet
- * due to HW issues. This needs to be solved before adding compatibles here.
- */
+#ifdef CONFIG_PM
+static int rwdt_suspend(struct device *dev)
+{
+	struct platform_device *pdev;
+	struct rwdt_priv *priv;
+
+	pdev = to_platform_device(dev);
+	priv = platform_get_drvdata(pdev);
+	if (watchdog_active(&priv->wdev)) {
+		rwdt_write(priv, priv->cks, RWTCSRA);
+	}
+	return 0;
+}
+
+static int rwdt_resume(struct device *dev)
+{
+	struct platform_device *pdev;
+	struct rwdt_priv *priv;
+
+	pdev = to_platform_device(dev);
+	priv = platform_get_drvdata(pdev);
+	if (watchdog_active(&priv->wdev)) {
+		rwdt_write(priv, priv->cks | RWTCSRA_TME, RWTCSRA);
+	}
+	return 0;
+}
+
+static const struct dev_pm_ops rwdt_pm = {
+	.suspend = rwdt_suspend,
+	.resume = rwdt_resume,
+};
+#endif
+
 static const struct of_device_id rwdt_ids[] = {
 	{ .compatible = "renesas,rcar-gen3-wdt", },
+	{ .compatible = "renesas,rcar-gen2-wdt", },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, rwdt_ids);
@@ -218,6 +247,9 @@  static struct platform_driver rwdt_driver = {
 	.driver = {
 		.name = "renesas_wdt",
 		.of_match_table = rwdt_ids,
+#ifdef CONFIG_PM
+		.pm = &rwdt_pm,
+#endif
 	},
 	.probe = rwdt_probe,
 	.remove = rwdt_remove,