From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lee Jones Subject: Re: [PATCH v6 2/4] drivers/watchdog/menf21bmc_wdt: introduce MEN 14F021P00 BMC Watchdog driver Date: Thu, 4 Sep 2014 10:14:18 +0100 Message-ID: <20140904091418.GD29612@lee--X1> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: lm-sensors-bounces@lm-sensors.org Errors-To: lm-sensors-bounces@lm-sensors.org To: Andreas Werner Cc: linux-watchdog@vger.kernel.org, cooloney@gmail.com, linux-kernel@vger.kernel.org, lm-sensors@lm-sensors.org, wim@iguana.be, rpurdie@rpsys.net, linux-leds@vger.kernel.org, sameo@linux.intel.com List-Id: linux-leds@vger.kernel.org V2ltLAoKV2UncmUgc3RpbGwgd2FpdGluZyBvbiB5b3VyIEFjaz8KCj4gQWRkZWQgZHJpdmVyIHRv IHN1cHBvcnQgdGhlIDE0RjAyMVAwMCBCTUMgV2F0Y2hkb2cuCj4gVGhlIEJNQyBpcyBhIEJvYXJk IE1hbmFnZW1lbnQgQ29udHJvbGxlciBpbmNsdWRpbmcgd2F0Y2hkb2cgZnVuY3Rpb25hbGl0eS4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRl Pgo+IC0tLQo+ICBkcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgICAgICAgICB8ICAxMCArKwo+ICBk cml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvd2F0Y2hk b2cvbWVuZjIxYm1jX3dkdC5jIHwgMjAzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3dhdGNoZG9nL21lbmYyMWJtY193ZHQuYwo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcK PiBpbmRleCA3NmRkNTQxLi45NmQ3MmMyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cv S2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwo+IEBAIC05NSw2ICs5NSwx NiBAQCBjb25maWcgR1BJT19XQVRDSERPRwo+ICAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBn ZXQgc3VwcG9ydCBmb3Igd2F0Y2hkb2cgZGV2aWNlCj4gIAkgIGNvbnRyb2xsZWQgdGhyb3VnaCBH UElPLWxpbmUuCj4gIAo+ICtjb25maWcgTUVORjIxQk1DX1dBVENIRE9HCj4gKwl0cmlzdGF0ZSAi TUVOIDE0RjAyMVAwMCBCTUMgV2F0Y2hkb2ciCj4gKwlkZXBlbmRzIG9uIE1GRF9NRU5GMjFCTUMK PiArCXNlbGVjdCBXQVRDSERPR19DT1JFCj4gKwloZWxwCj4gKwkgIFNheSBZIGhlcmUgdG8gaW5j bHVkZSBzdXBwb3J0IGZvciB0aGUgTUVOIDE0RjAyMVAwMCBCTUMgV2F0Y2hkb2cuCj4gKwo+ICsJ ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28gdGhlIG1v ZHVsZQo+ICsJICB3aWxsIGJlIGNhbGxlZCBtZW5mMjFibWNfd2R0Lgo+ICsKPiAgY29uZmlnIFdN ODMxWF9XQVRDSERPRwo+ICAJdHJpc3RhdGUgIldNODMxeCB3YXRjaGRvZyIKPiAgCWRlcGVuZHMg b24gTUZEX1dNODMxWAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlIGIv ZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQo+IGluZGV4IDQ2OGMzMjAuLmRlMTcwMTQgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvd2F0Y2hk b2cvTWFrZWZpbGUKPiBAQCAtMTc4LDMgKzE3OCw0IEBAIG9iai0kKENPTkZJR19XTTgzMVhfV0FU Q0hET0cpICs9IHdtODMxeF93ZHQubwo+ICBvYmotJChDT05GSUdfV004MzUwX1dBVENIRE9HKSAr PSB3bTgzNTBfd2R0Lm8KPiAgb2JqLSQoQ09ORklHX01BWDYzWFhfV0FUQ0hET0cpICs9IG1heDYz eHhfd2R0Lm8KPiAgb2JqLSQoQ09ORklHX1NPRlRfV0FUQ0hET0cpICs9IHNvZnRkb2cubwo+ICtv YmotJChDT05GSUdfTUVORjIxQk1DX1dBVENIRE9HKSArPSBtZW5mMjFibWNfd2R0Lm8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tZW5mMjFibWNfd2R0LmMgYi9kcml2ZXJzL3dhdGNo ZG9nL21lbmYyMWJtY193ZHQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MC4uMjA0Mjg3NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3dhdGNoZG9nL21lbmYy MWJtY193ZHQuYwo+IEBAIC0wLDAgKzEsMjAzIEBACj4gKy8qCj4gKyAqICBNRU4gMTRGMDIxUDAw IEJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlciAoQk1DKSBXYXRjaGRvZyBEcml2ZXIuCj4gKyAq Cj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgTUVOIE1pa3JvIEVsZWt0cm9uaWsgTnVlcm5iZXJn IEdtYkgKPiArICoKPiArICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAo+ICsgKiAgdW5kZXIgIHRoZSB0ZXJt cyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl Cj4gKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKPiArICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3dhdGNoZG9nLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICsKPiArI2RlZmluZSBERVZOQU1FICJtZW5mMjFibWNf d2R0Igo+ICsKPiArI2RlZmluZSBCTUNfQ01EX1dEX09OCQkweDExCj4gKyNkZWZpbmUgQk1DX0NN RF9XRF9PRkYJCTB4MTIKPiArI2RlZmluZSBCTUNfQ01EX1dEX1RSSUcJCTB4MTMKPiArI2RlZmlu ZSBCTUNfQ01EX1dEX1RJTUUJCTB4MTQKPiArI2RlZmluZSBCTUNfQ01EX1dEX1NUQVRFCTB4MTcK PiArI2RlZmluZSBCTUNfV0RfT0ZGX1ZBTAkJMHg2OQo+ICsjZGVmaW5lIEJNQ19DTURfUlNUX1JT TgkJMHg5Mgo+ICsKPiArI2RlZmluZSBCTUNfV0RfVElNRU9VVF9NSU4JMQkvKiBpbiBzZWMgKi8K PiArI2RlZmluZSBCTUNfV0RfVElNRU9VVF9NQVgJNjU1MwkvKiBpbiBzZWMgKi8KPiArCj4gK3N0 YXRpYyBib29sIG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Cj4gK21vZHVsZV9wYXJhbShu b3dheW91dCwgYm9vbCwgMCk7Cj4gK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRv ZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9Igo+ICsJCQkJX19NT0RV TEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwo+ICsKPiArc3RydWN0IG1lbmYyMWJt Y193ZHQgewo+ICsJc3RydWN0IHdhdGNoZG9nX2RldmljZSB3ZHQ7Cj4gKwlzdHJ1Y3QgaTJjX2Ns aWVudCAqaTJjX2NsaWVudDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbWVuZjIxYm1jX3dkdF9z ZXRfYm9vdHN0YXR1cyhzdHJ1Y3QgbWVuZjIxYm1jX3dkdCAqZGF0YSkKPiArewo+ICsJaW50IHJz dF9yc247Cj4gKwo+ICsJcnN0X3JzbiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShkYXRhLT5p MmNfY2xpZW50LCBCTUNfQ01EX1JTVF9SU04pOwo+ICsJaWYgKHJzdF9yc24gPCAwKQo+ICsJCXJl dHVybiByc3RfcnNuOwo+ICsKPiArCWlmIChyc3RfcnNuID09IDB4MDIpCj4gKwkJZGF0YS0+d2R0 LmJvb3RzdGF0dXMgfD0gV0RJT0ZfQ0FSRFJFU0VUOwo+ICsJZWxzZSBpZiAocnN0X3JzbiA9PSAw eDA1KQo+ICsJCWRhdGEtPndkdC5ib290c3RhdHVzIHw9IFdESU9GX0VYVEVSTjE7Cj4gKwllbHNl IGlmIChyc3RfcnNuID09IDB4MDYpCj4gKwkJZGF0YS0+d2R0LmJvb3RzdGF0dXMgfD0gV0RJT0Zf RVhURVJOMjsKPiArCWVsc2UgaWYgKHJzdF9yc24gPT0gMHgwQSkKPiArCQlkYXRhLT53ZHQuYm9v dHN0YXR1cyB8PSBXRElPRl9QT1dFUlVOREVSOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IG1lbmYyMWJtY193ZHRfc3RhcnQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAq d2R0KQo+ICt7Cj4gKwlzdHJ1Y3QgbWVuZjIxYm1jX3dkdCAqZHJ2X2RhdGEgPSB3YXRjaGRvZ19n ZXRfZHJ2ZGF0YSh3ZHQpOwo+ICsKPiArCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZShkcnZf ZGF0YS0+aTJjX2NsaWVudCwgQk1DX0NNRF9XRF9PTik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWVuZjIxYm1jX3dkdF9zdG9wKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkdCkKPiArewo+ICsJ c3RydWN0IG1lbmYyMWJtY193ZHQgKmRydl9kYXRhID0gd2F0Y2hkb2dfZ2V0X2RydmRhdGEod2R0 KTsKPiArCj4gKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcnZfZGF0YS0+aTJj X2NsaWVudCwKPiArCQkJCQkgQk1DX0NNRF9XRF9PRkYsIEJNQ19XRF9PRkZfVkFMKTsKPiArfQo+ ICsKPiArc3RhdGljIGludAo+ICttZW5mMjFibWNfd2R0X3NldHRpbWVvdXQoc3RydWN0IHdhdGNo ZG9nX2RldmljZSAqd2R0LCB1bnNpZ25lZCBpbnQgdGltZW91dCkKPiArewo+ICsJaW50IHJldDsK PiArCXN0cnVjdCBtZW5mMjFibWNfd2R0ICpkcnZfZGF0YSA9IHdhdGNoZG9nX2dldF9kcnZkYXRh KHdkdCk7Cj4gKwo+ICsJLyoKPiArCSAqICBCTUMgV2F0Y2hkb2cgZG9lcyBoYXZlIGEgcmVzb2x1 dGlvbiBvZiAxMDBtcy4KPiArCSAqICBXYXRjaGRvZyBBUEkgZGVmaW5lcyB0aGUgdGltZW91dCBp biBzZWNvbmRzLCBzbyB3ZSBoYXZlIHRvCj4gKwkgKiAgbXVsdGlwbHkgdGhlIHZhbHVlLgo+ICsJ ICovCj4gKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGRydl9kYXRhLT5pMmNfY2xp ZW50LAo+ICsJCQkJCUJNQ19DTURfV0RfVElNRSwgdGltZW91dCAqIDEwKTsKPiArCWlmIChyZXQg PCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJd2R0LT50aW1lb3V0ID0gdGltZW91dDsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtZW5mMjFibWNfd2R0X3Bpbmco c3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2R0KQo+ICt7Cj4gKwlzdHJ1Y3QgbWVuZjIxYm1jX3dk dCAqZHJ2X2RhdGEgPSB3YXRjaGRvZ19nZXRfZHJ2ZGF0YSh3ZHQpOwo+ICsKPiArCXJldHVybiBp MmNfc21idXNfd3JpdGVfYnl0ZShkcnZfZGF0YS0+aTJjX2NsaWVudCwgQk1DX0NNRF9XRF9UUklH KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIG1lbmYyMWJt Y193ZHRfaW5mbyA9IHsKPiArCS5vcHRpb25zID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tF RVBBTElWRVBJTkcsCj4gKwkuaWRlbnRpdHkgPSBERVZOQU1FLAo+ICt9Owo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19vcHMgbWVuZjIxYm1jX3dkdF9vcHMgPSB7Cj4gKwkub3du ZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkuc3RhcnQJCT0gbWVuZjIxYm1jX3dkdF9zdGFydCwKPiAr CS5zdG9wCQk9IG1lbmYyMWJtY193ZHRfc3RvcCwKPiArCS5waW5nCQk9IG1lbmYyMWJtY193ZHRf cGluZywKPiArCS5zZXRfdGltZW91dAk9IG1lbmYyMWJtY193ZHRfc2V0dGltZW91dCwKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgbWVuZjIxYm1jX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+ICt7Cj4gKwlpbnQgcmV0LCBibWNfdGltZW91dDsKPiArCXN0cnVjdCBtZW5m MjFibWNfd2R0ICpkcnZfZGF0YTsKPiArCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50ID0g dG9faTJjX2NsaWVudChwZGV2LT5kZXYucGFyZW50KTsKPiArCj4gKwlkcnZfZGF0YSA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LAo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBtZW5mMjFibWNfd2R0KSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRydl9kYXRhKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsK PiArCWRydl9kYXRhLT53ZHQub3BzID0gJm1lbmYyMWJtY193ZHRfb3BzOwo+ICsJZHJ2X2RhdGEt PndkdC5pbmZvID0gJm1lbmYyMWJtY193ZHRfaW5mbzsKPiArCWRydl9kYXRhLT53ZHQubWluX3Rp bWVvdXQgPSBCTUNfV0RfVElNRU9VVF9NSU47Cj4gKwlkcnZfZGF0YS0+d2R0Lm1heF90aW1lb3V0 ID0gQk1DX1dEX1RJTUVPVVRfTUFYOwo+ICsJZHJ2X2RhdGEtPmkyY19jbGllbnQgPSBpMmNfY2xp ZW50Owo+ICsKPiArCS8qCj4gKwkgKiBHZXQgdGhlIGN1cnJlbnQgd2R0IHRpbWVvdXQgdmFsdWUg ZnJvbSB0aGUgQk1DIGJlY2F1c2UKPiArCSAqIHRoZSBCTUMgd2lsbCBzYXZlIHRoZSB2YWx1ZSBz ZXQgYmVmb3JlIGlmIHRoZSBzeXN0ZW0gcmVzdGFydHMuCj4gKwkgKi8KPiArCWJtY190aW1lb3V0 ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGRydl9kYXRhLT5pMmNfY2xpZW50LAo+ICsJCQkJ CSAgICAgICBCTUNfQ01EX1dEX1RJTUUpOwo+ICsJaWYgKGJtY190aW1lb3V0IDwgMCkgewo+ICsJ CWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY3VycmVudCBXRFQgdGltZW91dFxu Iik7Cj4gKwkJcmV0dXJuIGJtY190aW1lb3V0Owo+ICsJfQo+ICsKPiArCXdhdGNoZG9nX2luaXRf dGltZW91dCgmZHJ2X2RhdGEtPndkdCwgYm1jX3RpbWVvdXQgLyAxMCwgJnBkZXYtPmRldik7Cj4g Kwl3YXRjaGRvZ19zZXRfbm93YXlvdXQoJmRydl9kYXRhLT53ZHQsIG5vd2F5b3V0KTsKPiArCXdh dGNoZG9nX3NldF9kcnZkYXRhKCZkcnZfZGF0YS0+d2R0LCBkcnZfZGF0YSk7Cj4gKwlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBkcnZfZGF0YSk7Cj4gKwo+ICsJcmV0ID0gbWVuZjIxYm1jX3dk dF9zZXRfYm9vdHN0YXR1cyhkcnZfZGF0YSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9l cnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzZXQgV2F0Y2hkb2cgYm9vdHN0YXR1c1xuIik7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSB3YXRjaGRvZ19yZWdpc3Rlcl9kZXZp Y2UoJmRydl9kYXRhLT53ZHQpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRl diwgImZhaWxlZCB0byByZWdpc3RlciBXYXRjaGRvZyBkZXZpY2VcbiIpOwo+ICsJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKwo+ICsJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1FTiAxNEYwMjFQMDAgQk1D IFdhdGNoZG9nIGRldmljZSBlbmFibGVkXG4iKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBtZW5mMjFibWNfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbWVuZjIxYm1jX3dkdCAqZHJ2X2RhdGEgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwlkZXZfd2FybigmcGRldi0+ZGV2LAo+ICsJCSAi VW5yZWdpc3RlciBNRU4gMTRGMDIxUDAwIEJNQyBXYXRjaGRvZyBkZXZpY2UsIGJvYXJkIG1heSBy ZXNldFxuIik7Cj4gKwo+ICsJd2F0Y2hkb2dfdW5yZWdpc3Rlcl9kZXZpY2UoJmRydl9kYXRhLT53 ZHQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtZW5mMjFibWNf d2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVj dCBtZW5mMjFibWNfd2R0ICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ ICsKPiArCWkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoZHJ2X2RhdGEtPmkyY19jbGllbnQsCj4g KwkJCQkgIEJNQ19DTURfV0RfT0ZGLCBCTUNfV0RfT0ZGX1ZBTCk7Cj4gK30KPiArCj4gK3N0YXRp YyBzdHJ1Y3QgIHBsYXRmb3JtX2RyaXZlciBtZW5mMjFibWNfd2R0ID0gewo+ICsJLmRyaXZlcgkJ PSB7Cj4gKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCj4gKwkJLm5hbWUJPSBERVZOQU1FLAo+ICsJ fSwKPiArCS5wcm9iZQkJPSBtZW5mMjFibWNfd2R0X3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBtZW5m MjFibWNfd2R0X3JlbW92ZSwKPiArCS5zaHV0ZG93bgk9IG1lbmYyMWJtY193ZHRfc2h1dGRvd24s Cj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1lbmYyMWJtY193ZHQpOwo+ICsK PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNRU4gMTRGMDIxUDAwIEJNQyBXYXRjaGRvZyBkcml2ZXIi KTsKPiArTU9EVUxFX0FVVEhPUigiQW5kcmVhcyBXZXJuZXIgPGFuZHJlYXMud2VybmVyQG1lbi5k ZT4iKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ICtNT0RVTEVfQUxJQVMoInBsYXRm b3JtOm1lbmYyMWJtY193ZHQiKTsKCi0tIApMZWUgSm9uZXMKTGluYXJvIFNUTWljcm9lbGVjdHJv bmljcyBMYW5kaW5nIFRlYW0gTGVhZApMaW5hcm8ub3JnIOKUgiBPcGVuIHNvdXJjZSBzb2Z0d2Fy ZSBmb3IgQVJNIFNvQ3MKRm9sbG93IExpbmFybzogRmFjZWJvb2sgfCBUd2l0dGVyIHwgQmxvZwoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbG0tc2Vuc29y cyBtYWlsaW5nIGxpc3QKbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwpodHRwOi8vbGlzdHMubG0t c2Vuc29ycy5vcmcvbWFpbG1hbi9saXN0aW5mby9sbS1zZW5zb3Jz From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-ie0-f170.google.com ([209.85.223.170]:48102 "EHLO mail-ie0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752288AbaIDJOZ (ORCPT ); Thu, 4 Sep 2014 05:14:25 -0400 Received: by mail-ie0-f170.google.com with SMTP id rl12so11344202iec.15 for ; Thu, 04 Sep 2014 02:14:24 -0700 (PDT) Date: Thu, 4 Sep 2014 10:14:18 +0100 From: Lee Jones To: Andreas Werner Cc: linux-kernel@vger.kernel.org, sameo@linux.intel.com, linux@roeck-us.net, lm-sensors@lm-sensors.org, wim@iguana.be, linux-watchdog@vger.kernel.org, cooloney@gmail.com, rpurdie@rpsys.net, linux-leds@vger.kernel.org Subject: Re: [PATCH v6 2/4] drivers/watchdog/menf21bmc_wdt: introduce MEN 14F021P00 BMC Watchdog driver Message-ID: <20140904091418.GD29612@lee--X1> References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: linux-watchdog-owner@vger.kernel.org List-Id: linux-watchdog@vger.kernel.org Wim, We're still waiting on your Ack? > Added driver to support the 14F021P00 BMC Watchdog. > The BMC is a Board Management Controller including watchdog functionality. > > Signed-off-by: Andreas Werner > --- > drivers/watchdog/Kconfig | 10 ++ > drivers/watchdog/Makefile | 1 + > drivers/watchdog/menf21bmc_wdt.c | 203 +++++++++++++++++++++++++++++++++++++++ > 3 files changed, 214 insertions(+) > create mode 100644 drivers/watchdog/menf21bmc_wdt.c > > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > index 76dd541..96d72c2 100644 > --- a/drivers/watchdog/Kconfig > +++ b/drivers/watchdog/Kconfig > @@ -95,6 +95,16 @@ config GPIO_WATCHDOG > If you say yes here you get support for watchdog device > controlled through GPIO-line. > > +config MENF21BMC_WATCHDOG > + tristate "MEN 14F021P00 BMC Watchdog" > + depends on MFD_MENF21BMC > + select WATCHDOG_CORE > + help > + Say Y here to include support for the MEN 14F021P00 BMC Watchdog. > + > + This driver can also be built as a module. If so the module > + will be called menf21bmc_wdt. > + > config WM831X_WATCHDOG > tristate "WM831x watchdog" > depends on MFD_WM831X > diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile > index 468c320..de17014 100644 > --- a/drivers/watchdog/Makefile > +++ b/drivers/watchdog/Makefile > @@ -178,3 +178,4 @@ obj-$(CONFIG_WM831X_WATCHDOG) += wm831x_wdt.o > obj-$(CONFIG_WM8350_WATCHDOG) += wm8350_wdt.o > obj-$(CONFIG_MAX63XX_WATCHDOG) += max63xx_wdt.o > obj-$(CONFIG_SOFT_WATCHDOG) += softdog.o > +obj-$(CONFIG_MENF21BMC_WATCHDOG) += menf21bmc_wdt.o > diff --git a/drivers/watchdog/menf21bmc_wdt.c b/drivers/watchdog/menf21bmc_wdt.c > new file mode 100644 > index 0000000..2042874 > --- /dev/null > +++ b/drivers/watchdog/menf21bmc_wdt.c > @@ -0,0 +1,203 @@ > +/* > + * MEN 14F021P00 Board Management Controller (BMC) Watchdog Driver. > + * > + * Copyright (C) 2014 MEN Mikro Elektronik Nuernberg GmbH > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License as published by the > + * Free Software Foundation; either version 2 of the License, or (at your > + * option) any later version. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define DEVNAME "menf21bmc_wdt" > + > +#define BMC_CMD_WD_ON 0x11 > +#define BMC_CMD_WD_OFF 0x12 > +#define BMC_CMD_WD_TRIG 0x13 > +#define BMC_CMD_WD_TIME 0x14 > +#define BMC_CMD_WD_STATE 0x17 > +#define BMC_WD_OFF_VAL 0x69 > +#define BMC_CMD_RST_RSN 0x92 > + > +#define BMC_WD_TIMEOUT_MIN 1 /* in sec */ > +#define BMC_WD_TIMEOUT_MAX 6553 /* in sec */ > + > +static bool nowayout = WATCHDOG_NOWAYOUT; > +module_param(nowayout, bool, 0); > +MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" > + __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); > + > +struct menf21bmc_wdt { > + struct watchdog_device wdt; > + struct i2c_client *i2c_client; > +}; > + > +static int menf21bmc_wdt_set_bootstatus(struct menf21bmc_wdt *data) > +{ > + int rst_rsn; > + > + rst_rsn = i2c_smbus_read_byte_data(data->i2c_client, BMC_CMD_RST_RSN); > + if (rst_rsn < 0) > + return rst_rsn; > + > + if (rst_rsn == 0x02) > + data->wdt.bootstatus |= WDIOF_CARDRESET; > + else if (rst_rsn == 0x05) > + data->wdt.bootstatus |= WDIOF_EXTERN1; > + else if (rst_rsn == 0x06) > + data->wdt.bootstatus |= WDIOF_EXTERN2; > + else if (rst_rsn == 0x0A) > + data->wdt.bootstatus |= WDIOF_POWERUNDER; > + > + return 0; > +} > + > +static int menf21bmc_wdt_start(struct watchdog_device *wdt) > +{ > + struct menf21bmc_wdt *drv_data = watchdog_get_drvdata(wdt); > + > + return i2c_smbus_write_byte(drv_data->i2c_client, BMC_CMD_WD_ON); > +} > + > +static int menf21bmc_wdt_stop(struct watchdog_device *wdt) > +{ > + struct menf21bmc_wdt *drv_data = watchdog_get_drvdata(wdt); > + > + return i2c_smbus_write_byte_data(drv_data->i2c_client, > + BMC_CMD_WD_OFF, BMC_WD_OFF_VAL); > +} > + > +static int > +menf21bmc_wdt_settimeout(struct watchdog_device *wdt, unsigned int timeout) > +{ > + int ret; > + struct menf21bmc_wdt *drv_data = watchdog_get_drvdata(wdt); > + > + /* > + * BMC Watchdog does have a resolution of 100ms. > + * Watchdog API defines the timeout in seconds, so we have to > + * multiply the value. > + */ > + ret = i2c_smbus_write_word_data(drv_data->i2c_client, > + BMC_CMD_WD_TIME, timeout * 10); > + if (ret < 0) > + return ret; > + > + wdt->timeout = timeout; > + > + return 0; > +} > + > +static int menf21bmc_wdt_ping(struct watchdog_device *wdt) > +{ > + struct menf21bmc_wdt *drv_data = watchdog_get_drvdata(wdt); > + > + return i2c_smbus_write_byte(drv_data->i2c_client, BMC_CMD_WD_TRIG); > +} > + > +static const struct watchdog_info menf21bmc_wdt_info = { > + .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, > + .identity = DEVNAME, > +}; > + > +static const struct watchdog_ops menf21bmc_wdt_ops = { > + .owner = THIS_MODULE, > + .start = menf21bmc_wdt_start, > + .stop = menf21bmc_wdt_stop, > + .ping = menf21bmc_wdt_ping, > + .set_timeout = menf21bmc_wdt_settimeout, > +}; > + > +static int menf21bmc_wdt_probe(struct platform_device *pdev) > +{ > + int ret, bmc_timeout; > + struct menf21bmc_wdt *drv_data; > + struct i2c_client *i2c_client = to_i2c_client(pdev->dev.parent); > + > + drv_data = devm_kzalloc(&pdev->dev, > + sizeof(struct menf21bmc_wdt), GFP_KERNEL); > + if (!drv_data) > + return -ENOMEM; > + > + drv_data->wdt.ops = &menf21bmc_wdt_ops; > + drv_data->wdt.info = &menf21bmc_wdt_info; > + drv_data->wdt.min_timeout = BMC_WD_TIMEOUT_MIN; > + drv_data->wdt.max_timeout = BMC_WD_TIMEOUT_MAX; > + drv_data->i2c_client = i2c_client; > + > + /* > + * Get the current wdt timeout value from the BMC because > + * the BMC will save the value set before if the system restarts. > + */ > + bmc_timeout = i2c_smbus_read_word_data(drv_data->i2c_client, > + BMC_CMD_WD_TIME); > + if (bmc_timeout < 0) { > + dev_err(&pdev->dev, "failed to get current WDT timeout\n"); > + return bmc_timeout; > + } > + > + watchdog_init_timeout(&drv_data->wdt, bmc_timeout / 10, &pdev->dev); > + watchdog_set_nowayout(&drv_data->wdt, nowayout); > + watchdog_set_drvdata(&drv_data->wdt, drv_data); > + platform_set_drvdata(pdev, drv_data); > + > + ret = menf21bmc_wdt_set_bootstatus(drv_data); > + if (ret < 0) { > + dev_err(&pdev->dev, "failed to set Watchdog bootstatus\n"); > + return ret; > + } > + > + ret = watchdog_register_device(&drv_data->wdt); > + if (ret) { > + dev_err(&pdev->dev, "failed to register Watchdog device\n"); > + return ret; > + } > + > + dev_info(&pdev->dev, "MEN 14F021P00 BMC Watchdog device enabled\n"); > + > + return 0; > +} > + > +static int menf21bmc_wdt_remove(struct platform_device *pdev) > +{ > + struct menf21bmc_wdt *drv_data = platform_get_drvdata(pdev); > + > + dev_warn(&pdev->dev, > + "Unregister MEN 14F021P00 BMC Watchdog device, board may reset\n"); > + > + watchdog_unregister_device(&drv_data->wdt); > + > + return 0; > +} > + > +static void menf21bmc_wdt_shutdown(struct platform_device *pdev) > +{ > + struct menf21bmc_wdt *drv_data = platform_get_drvdata(pdev); > + > + i2c_smbus_write_word_data(drv_data->i2c_client, > + BMC_CMD_WD_OFF, BMC_WD_OFF_VAL); > +} > + > +static struct platform_driver menf21bmc_wdt = { > + .driver = { > + .owner = THIS_MODULE, > + .name = DEVNAME, > + }, > + .probe = menf21bmc_wdt_probe, > + .remove = menf21bmc_wdt_remove, > + .shutdown = menf21bmc_wdt_shutdown, > +}; > + > +module_platform_driver(menf21bmc_wdt); > + > +MODULE_DESCRIPTION("MEN 14F021P00 BMC Watchdog driver"); > +MODULE_AUTHOR("Andreas Werner "); > +MODULE_LICENSE("GPL v2"); > +MODULE_ALIAS("platform:menf21bmc_wdt"); -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog