From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gregory CLEMENT Subject: Re: [PATCH v4 10/12] thermal: armada: Wait sensors validity before exiting the init callback Date: Mon, 18 Dec 2017 17:12:08 +0100 Message-ID: <87h8sohv6v.fsf@free-electrons.com> References: <20171218143643.7714-1-miquel.raynal@free-electrons.com> <20171218143643.7714-11-miquel.raynal@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171218143643.7714-11-miquel.raynal@free-electrons.com> (Miquel Raynal's message of "Mon, 18 Dec 2017 15:36:41 +0100") List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Miquel Raynal Cc: Mark Rutland , Andrew Lunn , Baruch Siach , Jason Cooper , Nadav Haklai , linux-pm@vger.kernel.org, Catalin Marinas , Antoine Tenart , Will Deacon , David Sniatkiwicz , Eduardo Valentin , devicetree@vger.kernel.org, Rob Herring , Zhang Rui , Thomas Petazzoni , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: linux-pm@vger.kernel.org SGkgTWlxdWVsLAogCiBPbiBsdW4uLCBkw6ljLiAxOCAyMDE3LCBNaXF1ZWwgUmF5bmFsIDxtaXF1 ZWwucmF5bmFsQGZyZWUtZWxlY3Ryb25zLmNvbT4gd3JvdGU6Cgo+IFRoZSB0aGVybWFsIGNvcmUg d2lsbCBjaGVjayBmb3Igc2Vuc29ycyB2YWxpZGl0eSByaWdodCBhZnRlciB0aGUKPiBpbml0aWFs aXphdGlvbiBjYWxsYmFjayBoYXMgcmV0dXJuZWQuIEFzIHRoZSBpbml0aWFsaXphdGlvbiByb3V0 aW5lIG1ha2UKPiBhIHJlc2V0LCB0aGUgc2Vuc29ycyBhcmUgbm90IHJlYWR5IGltbWVkaWF0ZWx5 IGFuZCB0aGUgY29yZSBzcGF3bnMgYW4KPiBlcnJvciBpbiB0aGUgZG1lc2cuIEF2b2lkIHRoaXMg YW5ub3lpbmcgc2l0dWF0aW9uIGJ5IHBvbGxpbmcgb24gdGhlCj4gdmFsaWRpdHkgYml0IGJlZm9y ZSBleGl0aW5nIGZyb20gdGhlc2Ugcm91dGluZXMuIFRoaXMgYWxzbyBhdm9pZCB0aGUgdXNlCj4g b2YgYmxpbmQgc2xlZXBzLgo+Cj4gU3VnZ2VzdGVkLWJ5OiBEYXZpZCBTbmlhdGtpd2ljeiA8ZGF2 aWRzbkBtYXJ2ZWxsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwu cmF5bmFsQGZyZWUtZWxlY3Ryb25zLmNvbT4KClJldmlld2VkLWJ5OiBHcmVnb3J5IENMRU1FTlQg PGdyZWdvcnkuY2xlbWVudEBmcmVlLWVsZWN0cm9ucy5jb20+Cgo+IC0tLQo+ICBkcml2ZXJzL3Ro ZXJtYWwvYXJtYWRhX3RoZXJtYWwuYyB8IDIzICsrKysrKysrKysrKysrKysrKysrLS0tCj4gIDEg ZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9hcm1hZGFfdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFs L2FybWFkYV90aGVybWFsLmMKPiBpbmRleCAyZWFkZDY2MjU5MWQuLjRhNTE2NGRkZmZlNyAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL3RoZXJtYWwvYXJtYWRhX3RoZXJtYWwuYwo+ICsrKyBiL2RyaXZl cnMvdGhlcm1hbC9hcm1hZGFfdGhlcm1hbC5jCj4gQEAgLTIzLDYgKzIzLDcgQEAKPiAgI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC90aGVybWFsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3Bv bGwuaD4KPiAgCj4gIC8qIFRoZXJtYWwgTWFuYWdlciBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0 ZXIgKi8KPiAgI2RlZmluZSBQTVVfVERDMF9TV19SU1RfTUFTSwkJKDB4MSA8PCAxKQo+IEBAIC01 OSw2ICs2MCw5IEBACj4gICNkZWZpbmUgQ09OVFJPTDFfRVhUX1RTRU5fU1dfUkVTRVQJQklUKDcp Cj4gICNkZWZpbmUgQ09OVFJPTDFfRVhUX1RTRU5fSFdfUkVTRVRuCUJJVCg4KQo+ICAKPiArI2Rl ZmluZSBTVEFUVVNfUE9MTF9QRVJJT0RfVVMJCTEwMDAKPiArI2RlZmluZSBTVEFUVVNfUE9MTF9U SU1FT1VUX1VTCQkxMDAwMDAKPiArCj4gIHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9kYXRhOwo+ICAK PiAgLyogTWFydmVsbCBFQlUgVGhlcm1hbCBTZW5zb3IgRGV2IFN0cnVjdHVyZSAqLwo+IEBAIC0x NTUsNiArMTU5LDE2IEBAIHN0YXRpYyB2b2lkIGFybWFkYTM3NV9pbml0X3NlbnNvcihzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICAJbXNsZWVwKDUwKTsKPiAgfQo+ICAKPiArc3RhdGlj IHZvaWQgYXJtYWRhX3dhaXRfc2Vuc29yX3ZhbGlkaXR5KHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9w cml2ICpwcml2KQo+ICt7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCXJlYWRsX3JlbGF4ZWRfcG9sbF90 aW1lb3V0KHByaXYtPnN0YXR1cywgcmVnLAo+ICsJCQkJICAgcmVnICYgcHJpdi0+ZGF0YS0+aXNf dmFsaWRfYml0LAo+ICsJCQkJICAgU1RBVFVTX1BPTExfUEVSSU9EX1VTLAo+ICsJCQkJICAgU1RB VFVTX1BPTExfVElNRU9VVF9VUyk7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkIGFybWFkYTM4MF9p bml0X3NlbnNvcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICAJCQkJICBzdHJ1Y3Qg YXJtYWRhX3RoZXJtYWxfcHJpdiAqcHJpdikKPiAgewo+IEBAIC0xNjQsNyArMTc4LDYgQEAgc3Rh dGljIHZvaWQgYXJtYWRhMzgwX2luaXRfc2Vuc29yKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYsCj4gIAlyZWcgfD0gQ09OVFJPTDFfRVhUX1RTRU5fSFdfUkVTRVRuOwo+ICAJcmVnICY9IH5D T05UUk9MMV9FWFRfVFNFTl9TV19SRVNFVDsKPiAgCXdyaXRlbChyZWcsIHByaXYtPmNvbnRyb2wx KTsKPiAtCW1zbGVlcCgxMCk7Cj4gIAo+ICAJLyogU2V0IFRzZW4gVGMgVHJpbSB0byBjb3JyZWN0 IGRlZmF1bHQgdmFsdWUgKGVycmF0YSAjMTMyNjk4KSAqLwo+ICAJaWYgKHByaXYtPmNvbnRyb2ww KSB7Cj4gQEAgLTE3Miw4ICsxODUsMTAgQEAgc3RhdGljIHZvaWQgYXJtYWRhMzgwX2luaXRfc2Vu c29yKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gIAkJcmVnICY9IH5DT05UUk9MMF9U U0VOX1RDX1RSSU1fTUFTSzsKPiAgCQlyZWcgfD0gQ09OVFJPTDBfVFNFTl9UQ19UUklNX1ZBTDsK PiAgCQl3cml0ZWwocmVnLCBwcml2LT5jb250cm9sMCk7Cj4gLQkJbXNsZWVwKDEwKTsKPiAgCX0K PiArCj4gKwkvKiBXYWl0IHRoZSBzZW5zb3JzIHRvIGJlIHZhbGlkIG9yIHRoZSBjb3JlIHdpbGwg d2FybiB0aGUgdXNlciAqLwo+ICsJYXJtYWRhX3dhaXRfc2Vuc29yX3ZhbGlkaXR5KHByaXYpOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBhcm1hZGFfYXA4MDZfaW5pdF9zZW5zb3Ioc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiwKPiBAQCAtMTg1LDcgKzIwMCw5IEBAIHN0YXRpYyB2b2lkIGFy bWFkYV9hcDgwNl9pbml0X3NlbnNvcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICAJ cmVnICY9IH5DT05UUk9MMF9UU0VOX1JFU0VUOwo+ICAJcmVnIHw9IENPTlRST0wwX1RTRU5fU1RB UlQgfCBDT05UUk9MMF9UU0VOX0VOQUJMRTsKPiAgCXdyaXRlbChyZWcsIHByaXYtPmNvbnRyb2ww KTsKPiAtCW1zbGVlcCgxMCk7Cj4gKwo+ICsJLyogV2FpdCB0aGUgc2Vuc29ycyB0byBiZSB2YWxp ZCBvciB0aGUgY29yZSB3aWxsIHdhcm4gdGhlIHVzZXIKCkp1c3Qgb3V0IG9mIGN1cmlvc2l0eSBi dXQgaG93IHRoZSBjb3JlIHdpbGwgd2FybiB0aGUgdXNlcj8KCkdyZWdvcnkKCj4gKi8KPiArCWFy bWFkYV93YWl0X3NlbnNvcl92YWxpZGl0eShwcml2KTsKPiAgfQo+ICAKPiAgc3RhdGljIGJvb2wg YXJtYWRhX2lzX3ZhbGlkKHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9wcml2ICpwcml2KQo+IC0tIAo+ IDIuMTEuMAo+CgotLSAKR3JlZ29yeSBDbGVtZW50LCBGcmVlIEVsZWN0cm9ucwpLZXJuZWwsIGRy aXZlcnMsIHJlYWwtdGltZSBhbmQgZW1iZWRkZWQgTGludXgKZGV2ZWxvcG1lbnQsIGNvbnN1bHRp bmcsIHRyYWluaW5nIGFuZCBzdXBwb3J0LgpodHRwOi8vZnJlZS1lbGVjdHJvbnMuY29tCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: gregory.clement@free-electrons.com (Gregory CLEMENT) Date: Mon, 18 Dec 2017 17:12:08 +0100 Subject: [PATCH v4 10/12] thermal: armada: Wait sensors validity before exiting the init callback In-Reply-To: <20171218143643.7714-11-miquel.raynal@free-electrons.com> (Miquel Raynal's message of "Mon, 18 Dec 2017 15:36:41 +0100") References: <20171218143643.7714-1-miquel.raynal@free-electrons.com> <20171218143643.7714-11-miquel.raynal@free-electrons.com> Message-ID: <87h8sohv6v.fsf@free-electrons.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Miquel, On lun., d?c. 18 2017, Miquel Raynal wrote: > The thermal core will check for sensors validity right after the > initialization callback has returned. As the initialization routine make > a reset, the sensors are not ready immediately and the core spawns an > error in the dmesg. Avoid this annoying situation by polling on the > validity bit before exiting from these routines. This also avoid the use > of blind sleeps. > > Suggested-by: David Sniatkiwicz > Signed-off-by: Miquel Raynal Reviewed-by: Gregory CLEMENT > --- > drivers/thermal/armada_thermal.c | 23 ++++++++++++++++++++--- > 1 file changed, 20 insertions(+), 3 deletions(-) > > diff --git a/drivers/thermal/armada_thermal.c b/drivers/thermal/armada_thermal.c > index 2eadd662591d..4a5164ddffe7 100644 > --- a/drivers/thermal/armada_thermal.c > +++ b/drivers/thermal/armada_thermal.c > @@ -23,6 +23,7 @@ > #include > #include > #include > +#include > > /* Thermal Manager Control and Status Register */ > #define PMU_TDC0_SW_RST_MASK (0x1 << 1) > @@ -59,6 +60,9 @@ > #define CONTROL1_EXT_TSEN_SW_RESET BIT(7) > #define CONTROL1_EXT_TSEN_HW_RESETn BIT(8) > > +#define STATUS_POLL_PERIOD_US 1000 > +#define STATUS_POLL_TIMEOUT_US 100000 > + > struct armada_thermal_data; > > /* Marvell EBU Thermal Sensor Dev Structure */ > @@ -155,6 +159,16 @@ static void armada375_init_sensor(struct platform_device *pdev, > msleep(50); > } > > +static void armada_wait_sensor_validity(struct armada_thermal_priv *priv) > +{ > + u32 reg; > + > + readl_relaxed_poll_timeout(priv->status, reg, > + reg & priv->data->is_valid_bit, > + STATUS_POLL_PERIOD_US, > + STATUS_POLL_TIMEOUT_US); > +} > + > static void armada380_init_sensor(struct platform_device *pdev, > struct armada_thermal_priv *priv) > { > @@ -164,7 +178,6 @@ static void armada380_init_sensor(struct platform_device *pdev, > reg |= CONTROL1_EXT_TSEN_HW_RESETn; > reg &= ~CONTROL1_EXT_TSEN_SW_RESET; > writel(reg, priv->control1); > - msleep(10); > > /* Set Tsen Tc Trim to correct default value (errata #132698) */ > if (priv->control0) { > @@ -172,8 +185,10 @@ static void armada380_init_sensor(struct platform_device *pdev, > reg &= ~CONTROL0_TSEN_TC_TRIM_MASK; > reg |= CONTROL0_TSEN_TC_TRIM_VAL; > writel(reg, priv->control0); > - msleep(10); > } > + > + /* Wait the sensors to be valid or the core will warn the user */ > + armada_wait_sensor_validity(priv); > } > > static void armada_ap806_init_sensor(struct platform_device *pdev, > @@ -185,7 +200,9 @@ static void armada_ap806_init_sensor(struct platform_device *pdev, > reg &= ~CONTROL0_TSEN_RESET; > reg |= CONTROL0_TSEN_START | CONTROL0_TSEN_ENABLE; > writel(reg, priv->control0); > - msleep(10); > + > + /* Wait the sensors to be valid or the core will warn the user Just out of curiosity but how the core will warn the user? Gregory > */ > + armada_wait_sensor_validity(priv); > } > > static bool armada_is_valid(struct armada_thermal_priv *priv) > -- > 2.11.0 > -- Gregory Clement, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com