All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1510587328.2699.8.camel@synopsys.com>

diff --git a/a/1.txt b/N1/1.txt
index 6f4e768..248f370 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,126 +1,200 @@
-SGkgU3RlcGhlbiwgTWljaGFlbCwNCg0KUGxlYXNlIHRyZWF0IHRoaXMgbWVzc2FnZSBhcyBhIHBv
-bGl0ZSByZW1pbmRlciB0byByZXZpZXcgbXkgcGF0Y2guDQpJdCB3b3VsZCBiZSByZWFsbHkgbmlj
-ZSB0byBzZWUgdGhpcyBwYXRjaCBpbiA0LjE1Lg0KDQpUaGFua3MuDQoNCk9uIEZyaSwgMjAxNy0w
-OS0yOSBhdCAxNjoxMyArMDMwMCwgRXVnZW5peSBQYWx0c2V2IHdyb3RlOg0KPiBBZGQgb3B0aW9u
-IHRvIHNldCBpbml0aWFsIG91dHB1dCBmcmVxdWVuY3kgb2YgcGxscyB2aWENCj4gImNsb2NrLWZy
-ZXF1ZW5jeSIgcHJvcGVydHkgaW4gcGxsJ3MgZGV2aWNlIHRyZWUgbm9kZS4NCj4gVGhpcyBmcmVx
-dWVuY3kgd2lsbCBiZSBzZXQgd2hpbGUgcGxsIGRyaXZlciBwcm9iZWQuDQo+IA0KPiBUaGUgdXNh
-Z2UgZXhhbXBsZSBpcyBzZXR0aW5nIENQVSBjbG9jayBmcmVxdWVuY3kgb24gYm9vdA0KPiBTZWUg
-ZGlzY3Vzc2lvbjoNCj4gaHR0cHM6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9saW51eC1zbnBzLWFy
-Y0BsaXN0cy5pbmZyYWRlYWQub3JnL21zZzAyNjg5Lmh0bWwNCj4gDQo+IFNpZ25lZC1vZmYtYnk6
-IEV1Z2VuaXkgUGFsdHNldiA8RXVnZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4NCj4gLS0tDQo+
-IMKgLi4uL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0wqDCoMKgwqDCoMKg
-wqDCoMKgfMKgwqA1ICsrKysNCj4gwqAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBz
-LHBsbC1jbG9jay50eHTCoMKgwqB8wqDCoDUgKysrKw0KPiDCoGRyaXZlcnMvY2xrL2F4czEweC9w
-bGxfY2xvY2suY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMzQg
-KysrKysrKysrKysrKysrKysrKystLQ0KPiDCoGRyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDM0ICsrKysr
-KysrKysrKysrKysrKysrLS0NCj4gwqA0IGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyks
-IDQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0
-cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlv
-bi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0DQo+IGlu
-ZGV4IGM1NmM3NTUuLjU3MDMwNTkgMTAwNjQ0DQo+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl
-dHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLGhzZGstcGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1
-bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxoc2RrLXBsbC1jbG9jay50
-eHQNCj4gQEAgLTEzLDYgKzEzLDEwIEBAIFJlcXVpcmVkIHByb3BlcnRpZXM6DQo+IMKgLSBjbG9j
-a3M6IHNoYWxsIGJlIHRoZSBpbnB1dCBwYXJlbnQgY2xvY2sgcGhhbmRsZSBmb3IgdGhlIFBMTC4N
-Cj4gwqAtICNjbG9jay1jZWxsczogZnJvbSBjb21tb24gY2xvY2sgYmluZGluZzsgU2hvdWxkIGFs
-d2F5cyBiZSBzZXQgdG8gMC4NCj4gwqANCj4gK09wdGlvbmFsIHByb3BlcnRpZXM6DQo+ICstIGNs
-b2NrLWZyZXF1ZW5jeTogb3V0cHV0IGZyZXF1ZW5jeSBnZW5lcmF0ZWQgYnkgcGxsIGluIEh6IHdo
-aWNoIHdpbGwgYmUgc2V0DQo+ICt3aGlsZSBwcm9iaW5nLiBTaG91bGQgYmUgYSBzaW5nbGUgY2Vs
-bC4NCj4gKw0KPiDCoEV4YW1wbGU6DQo+IMKgCWlucHV0X2NsazogaW5wdXQtY2xrIHsNCj4gwqAJ
-CWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47DQo+IEBAIC0yNSw0ICsyOSw1IEBAIEV4YW1w
-bGU6DQo+IMKgCQlyZWcgPSA8MHgwMCAweDEwPjsNCj4gwqAJCSNjbG9jay1jZWxscyA9IDwwPjsN
-Cj4gwqAJCWNsb2NrcyA9IDwmaW5wdXRfY2xrPjsNCj4gKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEw
-MDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0
-cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2
-aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLHBsbC1jbG9jay50eHQNCj4gaW5kZXggMTFmZTQ4
-Ny4uNTkwOGY5OSAxMDA2NDQNCj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp
-bmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldmlj
-ZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxwbGwtY2xvY2sudHh0DQo+IEBAIC0xMyw2ICsxMywx
-MCBAQCByZWdpc3RlcnMgYW5kIHNlY29uZCBmb3IgY29ycmVzcG9uZGluZyBMT0NLIENHVSByZWdp
-c3Rlci4NCj4gwqAtIGNsb2Nrczogc2hhbGwgYmUgdGhlIGlucHV0IHBhcmVudCBjbG9jayBwaGFu
-ZGxlIGZvciB0aGUgUExMLg0KPiDCoC0gI2Nsb2NrLWNlbGxzOiBmcm9tIGNvbW1vbiBjbG9jayBi
-aW5kaW5nOyBTaG91bGQgYWx3YXlzIGJlIHNldCB0byAwLg0KPiDCoA0KPiArT3B0aW9uYWwgcHJv
-cGVydGllczoNCj4gKy0gY2xvY2stZnJlcXVlbmN5OiBvdXRwdXQgZnJlcXVlbmN5IGdlbmVyYXRl
-ZCBieSBwbGwgaW4gSHogd2hpY2ggd2lsbCBiZSBzZXQNCj4gK3doaWxlIHByb2JpbmcuIFNob3Vs
-ZCBiZSBhIHNpbmdsZSBjZWxsLg0KPiArDQo+IMKgRXhhbXBsZToNCj4gwqAJaW5wdXQtY2xrOiBp
-bnB1dC1jbGsgew0KPiDCoAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsNCj4gQEAgLTI1
-LDQgKzI5LDUgQEAgRXhhbXBsZToNCj4gwqAJCXJlZyA9IDwweDgwIDB4MTA+LCA8MHgxMDAgMHgx
-MD47DQo+IMKgCQkjY2xvY2stY2VsbHMgPSA8MD47DQo+IMKgCQljbG9ja3MgPSA8JmlucHV0LWNs
-az47DQo+ICsJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZm
-IC0tZ2l0IGEvZHJpdmVycy9jbGsvYXhzMTB4L3BsbF9jbG9jay5jIGIvZHJpdmVycy9jbGsvYXhz
-MTB4L3BsbF9jbG9jay5jDQo+IGluZGV4IDI1ZDhjMjQuLjNmNDM0NWQgMTAwNjQ0DQo+IC0tLSBh
-L2RyaXZlcnMvY2xrL2F4czEweC9wbGxfY2xvY2suYw0KPiArKysgYi9kcml2ZXJzL2Nsay9heHMx
-MHgvcGxsX2Nsb2NrLmMNCj4gQEAgLTExLDYgKzExLDcgQEANCj4gwqAjaW5jbHVkZSA8bGludXgv
-cGxhdGZvcm1fZGV2aWNlLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiDCoCNp
-bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4N
-Cj4gwqAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gwqAjaW5jbHVkZSA8bGludXgvZXJyLmg+
-DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiBAQCAtMjE1LDYgKzIxNiwyNSBAQCBz
-dGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgYXhzMTB4X3BsbF9vcHMgPSB7DQo+IMKgCS5zZXRf
-cmF0ZSA9IGF4czEweF9wbGxfc2V0X3JhdGUsDQo+IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lk
-IHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGRldmljZV9ub2Rl
-ICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdl
-IHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+
-ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVx
-dWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5h
-YmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5ub3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9k
-ZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRl
-KGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlwcl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sg
-cmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0
-byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVkX3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3Rh
-dGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2
-KQ0KPiDCoHsNCj4gwqAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4gQEAgLTI1
-OCw4ICsyNzgsMTUgQEAgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxh
-dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiDCoAkJcmV0dXJuIHJldDsNCj4gwqAJfQ0KPiDCoA0KPiAt
-CXJldHVybiBvZl9jbGtfYWRkX2h3X3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX2h3X3Np
-bXBsZV9nZXQsDQo+IC0JCQkmcGxsX2Nsay0+aHcpOw0KPiArCXJldCA9wqDCoG9mX2Nsa19hZGRf
-aHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2ltcGxlX2dldCwNCj4gKwkJCQnC
-oMKgwqDCoMKgwqAmcGxsX2Nsay0+aHcpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7
-DQo+ICsNCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kg
-aW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4gKwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xr
-LT5ody5jbGssIGRldi0+b2Zfbm9kZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gwqB9DQo+IMKg
-DQo+IMKgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl
-dmljZSAqcGRldikNCj4gQEAgLTMxMSw2ICszMzgsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2Zf
-YXhzMTB4X3BsbF9jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiDCoAkJZ290
-byBlcnJfdW5yZWdpc3Rlcl9jbGs7DQo+IMKgCX0NCj4gwqANCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5
-IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kgaW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4g
-KwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xrLT5ody5jbGssIG5vZGUpOw0KPiArDQo+IMKg
-CXJldHVybjsNCj4gwqANCj4gwqBlcnJfdW5yZWdpc3Rlcl9jbGs6DQo+IGRpZmYgLS1naXQgYS9k
-cml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYyBiL2RyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jDQo+
-IGluZGV4IGJiZjIzNzE3Li43NGZkMDA2IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2Nsay9jbGst
-aHNkay1wbGwuYw0KPiArKysgYi9kcml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYw0KPiBAQCAtOSw2
-ICs5LDcgQEANCj4gwqAgKi8NCj4gwqANCj4gwqAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy
-Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RlbGF5
-Lmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiDCoCNpbmNsdWRlIDxsaW51eC9l
-cnIuaD4NCj4gQEAgLTI5NSw2ICsyOTYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3Bz
-IGhzZGtfcGxsX29wcyA9IHsNCj4gwqAJLnNldF9yYXRlID0gaHNka19wbGxfc2V0X3JhdGUsDQo+
-IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lkIHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBj
-bGsgKmNsaywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0
-ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZy
-ZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5v
-ZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+
-ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5u
-b3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9kZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9
-DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRlKGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlw
-cl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sgcmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+
-ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVk
-X3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3RhdGljIGludCBoc2RrX3BsbF9jbGtfcHJvYmUoc3Ry
-dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gwqB7DQo+IMKgCWludCByZXQ7DQo+IEBAIC0z
-NDAsOCArMzYwLDE1IEBAIHN0YXRpYyBpbnQgaHNka19wbGxfY2xrX3Byb2JlKHN0cnVjdCBwbGF0
-Zm9ybV9kZXZpY2UgKnBkZXYpDQo+IMKgCQlyZXR1cm4gcmV0Ow0KPiDCoAl9DQo+IMKgDQo+IC0J
-cmV0dXJuIG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2lt
-cGxlX2dldCwNCj4gLQkJCSZwbGxfY2xrLT5odyk7DQo+ICsJcmV0ID3CoMKgb2ZfY2xrX2FkZF9o
-d19wcm92aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19od19zaW1wbGVfZ2V0LA0KPiArCQkJCcKg
-wqDCoMKgwqDCoCZwbGxfY2xrLT5odyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsN
-Cj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBp
-biBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNldF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGst
-Pmh3LmNsaywgZGV2LT5vZl9ub2RlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiDCoH0NCj4gwqAN
-Cj4gwqBzdGF0aWMgaW50IGhzZGtfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj
-ZSAqcGRldikNCj4gQEAgLTQwMCw2ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2ZfaHNk
-a19wbGxfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCj4gwqAJCWdvdG8gZXJy
-X3VubWFwX3NwZWNfcmVnczsNCj4gwqAJfQ0KPiDCoA0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5p
-dGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBpbiBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNl
-dF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGstPmh3LmNsaywgbm9kZSk7DQo+ICsNCj4gwqAJcmV0
-dXJuOw0KPiDCoA0KPiDCoGVycl91bm1hcF9zcGVjX3JlZ3M6DQotLSANCsKgRXVnZW5peSBQYWx0
-c2V2
+Hi Stephen, Michael,
+
+Please treat this message as a polite reminder to review my patch.
+It would be really nice to see this patch in 4.15.
+
+Thanks.
+
+On Fri, 2017-09-29@16:13 +0300, Eugeniy Paltsev wrote:
+> Add option to set initial output frequency of plls via
+> "clock-frequency" property in pll's device tree node.
+> This frequency will be set while pll driver probed.
+> 
+> The usage example is setting CPU clock frequency on boot
+> See discussion:
+> https://www.mail-archive.com/linux-snps-arc at lists.infradead.org/msg02689.html
+> 
+> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev at synopsys.com>
+> ---
+> ?.../bindings/clock/snps,hsdk-pll-clock.txt?????????|??5 ++++
+> ?.../devicetree/bindings/clock/snps,pll-clock.txt???|??5 ++++
+> ?drivers/clk/axs10x/pll_clock.c?????????????????????| 34 ++++++++++++++++++++--
+> ?drivers/clk/clk-hsdk-pll.c?????????????????????????| 34 ++++++++++++++++++++--
+> ?4 files changed, 74 insertions(+), 4 deletions(-)
+> 
+> diff --git a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
+> index c56c755..5703059 100644
+> --- a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
+> +++ b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
+> @@ -13,6 +13,10 @@ Required properties:
+> ?- clocks: shall be the input parent clock phandle for the PLL.
+> ?- #clock-cells: from common clock binding; Should always be set to 0.
+> ?
+> +Optional properties:
+> +- clock-frequency: output frequency generated by pll in Hz which will be set
+> +while probing. Should be a single cell.
+> +
+> ?Example:
+> ?	input_clk: input-clk {
+> ?		clock-frequency = <33333333>;
+> @@ -25,4 +29,5 @@ Example:
+> ?		reg = <0x00 0x10>;
+> ?		#clock-cells = <0>;
+> ?		clocks = <&input_clk>;
+> +		clock-frequency = <1000000000>;
+> ?	};
+> diff --git a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
+> index 11fe487..5908f99 100644
+> --- a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
+> +++ b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
+> @@ -13,6 +13,10 @@ registers and second for corresponding LOCK CGU register.
+> ?- clocks: shall be the input parent clock phandle for the PLL.
+> ?- #clock-cells: from common clock binding; Should always be set to 0.
+> ?
+> +Optional properties:
+> +- clock-frequency: output frequency generated by pll in Hz which will be set
+> +while probing. Should be a single cell.
+> +
+> ?Example:
+> ?	input-clk: input-clk {
+> ?		clock-frequency = <33333333>;
+> @@ -25,4 +29,5 @@ Example:
+> ?		reg = <0x80 0x10>, <0x100 0x10>;
+> ?		#clock-cells = <0>;
+> ?		clocks = <&input-clk>;
+> +		clock-frequency = <100000000>;
+> ?	};
+> diff --git a/drivers/clk/axs10x/pll_clock.c b/drivers/clk/axs10x/pll_clock.c
+> index 25d8c24..3f4345d 100644
+> --- a/drivers/clk/axs10x/pll_clock.c
+> +++ b/drivers/clk/axs10x/pll_clock.c
+> @@ -11,6 +11,7 @@
+> ?#include <linux/platform_device.h>
+> ?#include <linux/module.h>
+> ?#include <linux/clk-provider.h>
+> +#include <linux/clk.h>
+> ?#include <linux/delay.h>
+> ?#include <linux/err.h>
+> ?#include <linux/device.h>
+> @@ -215,6 +216,25 @@ static const struct clk_ops axs10x_pll_ops = {
+> ?	.set_rate = axs10x_pll_set_rate,
+> ?};
+> ?
+> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)
+> +{
+> +	u32 requested_rate;
+> +
+> +	/* If we specify initial pll output frequency try to set it */
+> +	if (of_property_read_u32(node, "clock-frequency", &requested_rate))
+> +		return;
+> +
+> +	if (clk_prepare_enable(clk)) {
+> +		pr_err("Cannot enable %s clock.\n", node->name);
+> +		return;
+> +	}
+> +
+> +	if (clk_set_rate(clk, requested_rate))
+> +		pr_err("Cannot set %s clock rate.\n", node->name);
+> +
+> +	pr_debug("Set %s clock to %u\n", node->name, requested_rate);
+> +}
+> +
+> ?static int axs10x_pll_clk_probe(struct platform_device *pdev)
+> ?{
+> ?	struct device *dev = &pdev->dev;
+> @@ -258,8 +278,15 @@ static int axs10x_pll_clk_probe(struct platform_device *pdev)
+> ?		return ret;
+> ?	}
+> ?
+> -	return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> -			&pll_clk->hw);
+> +	ret =??of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> +				??????&pll_clk->hw);
+> +	if (ret)
+> +		return ret;
+> +
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);
+> +
+> +	return 0;
+> ?}
+> ?
+> ?static int axs10x_pll_clk_remove(struct platform_device *pdev)
+> @@ -311,6 +338,9 @@ static void __init of_axs10x_pll_clk_setup(struct device_node *node)
+> ?		goto err_unregister_clk;
+> ?	}
+> ?
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, node);
+> +
+> ?	return;
+> ?
+> ?err_unregister_clk:
+> diff --git a/drivers/clk/clk-hsdk-pll.c b/drivers/clk/clk-hsdk-pll.c
+> index bbf23717..74fd006 100644
+> --- a/drivers/clk/clk-hsdk-pll.c
+> +++ b/drivers/clk/clk-hsdk-pll.c
+> @@ -9,6 +9,7 @@
+> ? */
+> ?
+> ?#include <linux/clk-provider.h>
+> +#include <linux/clk.h>
+> ?#include <linux/delay.h>
+> ?#include <linux/device.h>
+> ?#include <linux/err.h>
+> @@ -295,6 +296,25 @@ static const struct clk_ops hsdk_pll_ops = {
+> ?	.set_rate = hsdk_pll_set_rate,
+> ?};
+> ?
+> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)
+> +{
+> +	u32 requested_rate;
+> +
+> +	/* If we specify initial pll output frequency try to set it */
+> +	if (of_property_read_u32(node, "clock-frequency", &requested_rate))
+> +		return;
+> +
+> +	if (clk_prepare_enable(clk)) {
+> +		pr_err("Cannot enable %s clock.\n", node->name);
+> +		return;
+> +	}
+> +
+> +	if (clk_set_rate(clk, requested_rate))
+> +		pr_err("Cannot set %s clock rate.\n", node->name);
+> +
+> +	pr_debug("Set %s clock to %u\n", node->name, requested_rate);
+> +}
+> +
+> ?static int hsdk_pll_clk_probe(struct platform_device *pdev)
+> ?{
+> ?	int ret;
+> @@ -340,8 +360,15 @@ static int hsdk_pll_clk_probe(struct platform_device *pdev)
+> ?		return ret;
+> ?	}
+> ?
+> -	return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> -			&pll_clk->hw);
+> +	ret =??of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> +				??????&pll_clk->hw);
+> +	if (ret)
+> +		return ret;
+> +
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);
+> +
+> +	return 0;
+> ?}
+> ?
+> ?static int hsdk_pll_clk_remove(struct platform_device *pdev)
+> @@ -400,6 +427,9 @@ static void __init of_hsdk_pll_clk_setup(struct device_node *node)
+> ?		goto err_unmap_spec_regs;
+> ?	}
+> ?
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, node);
+> +
+> ?	return;
+> ?
+> ?err_unmap_spec_regs:
+-- 
+?Eugeniy Paltsev
diff --git a/a/content_digest b/N1/content_digest
index e9562c1..e3240c4 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,141 +1,209 @@
  "ref\020170929131357.26796-1-Eugeniy.Paltsev@synopsys.com\0"
- "From\0Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>\0"
- "Subject\0Re: [PATCH] CLK: ARC: Set initial pll output frequency specified in device tree\0"
+ "From\0Eugeniy.Paltsev@synopsys.com (Eugeniy Paltsev)\0"
+ "Subject\0[PATCH] CLK: ARC: Set initial pll output frequency specified in device tree\0"
  "Date\0Mon, 13 Nov 2017 15:35:29 +0000\0"
- "To\0linux-clk@vger.kernel.org <linux-clk@vger.kernel.org>\0"
- "Cc\0linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>"
-  mark.rutland@arm.com <mark.rutland@arm.com>
-  mturquette@baylibre.com <mturquette@baylibre.com>
-  sboyd@codeaurora.org <sboyd@codeaurora.org>
-  robh+dt@kernel.org <robh+dt@kernel.org>
- " linux-snps-arc@lists.infradead.org <linux-snps-arc@lists.infradead.org>\0"
+ "To\0linux-snps-arc@lists.infradead.org\0"
  "\00:1\0"
  "b\0"
- "SGkgU3RlcGhlbiwgTWljaGFlbCwNCg0KUGxlYXNlIHRyZWF0IHRoaXMgbWVzc2FnZSBhcyBhIHBv\n"
- "bGl0ZSByZW1pbmRlciB0byByZXZpZXcgbXkgcGF0Y2guDQpJdCB3b3VsZCBiZSByZWFsbHkgbmlj\n"
- "ZSB0byBzZWUgdGhpcyBwYXRjaCBpbiA0LjE1Lg0KDQpUaGFua3MuDQoNCk9uIEZyaSwgMjAxNy0w\n"
- "OS0yOSBhdCAxNjoxMyArMDMwMCwgRXVnZW5peSBQYWx0c2V2IHdyb3RlOg0KPiBBZGQgb3B0aW9u\n"
- "IHRvIHNldCBpbml0aWFsIG91dHB1dCBmcmVxdWVuY3kgb2YgcGxscyB2aWENCj4gImNsb2NrLWZy\n"
- "ZXF1ZW5jeSIgcHJvcGVydHkgaW4gcGxsJ3MgZGV2aWNlIHRyZWUgbm9kZS4NCj4gVGhpcyBmcmVx\n"
- "dWVuY3kgd2lsbCBiZSBzZXQgd2hpbGUgcGxsIGRyaXZlciBwcm9iZWQuDQo+IA0KPiBUaGUgdXNh\n"
- "Z2UgZXhhbXBsZSBpcyBzZXR0aW5nIENQVSBjbG9jayBmcmVxdWVuY3kgb24gYm9vdA0KPiBTZWUg\n"
- "ZGlzY3Vzc2lvbjoNCj4gaHR0cHM6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9saW51eC1zbnBzLWFy\n"
- "Y0BsaXN0cy5pbmZyYWRlYWQub3JnL21zZzAyNjg5Lmh0bWwNCj4gDQo+IFNpZ25lZC1vZmYtYnk6\n"
- "IEV1Z2VuaXkgUGFsdHNldiA8RXVnZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4NCj4gLS0tDQo+\n"
- "IMKgLi4uL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0wqDCoMKgwqDCoMKg\n"
- "wqDCoMKgfMKgwqA1ICsrKysNCj4gwqAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBz\n"
- "LHBsbC1jbG9jay50eHTCoMKgwqB8wqDCoDUgKysrKw0KPiDCoGRyaXZlcnMvY2xrL2F4czEweC9w\n"
- "bGxfY2xvY2suY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMzQg\n"
- "KysrKysrKysrKysrKysrKysrKystLQ0KPiDCoGRyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jwqDC\n"
- "oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDM0ICsrKysr\n"
- "KysrKysrKysrKysrKysrLS0NCj4gwqA0IGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyks\n"
- "IDQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0\n"
- "cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlv\n"
- "bi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0DQo+IGlu\n"
- "ZGV4IGM1NmM3NTUuLjU3MDMwNTkgMTAwNjQ0DQo+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl\n"
- "dHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLGhzZGstcGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1\n"
- "bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxoc2RrLXBsbC1jbG9jay50\n"
- "eHQNCj4gQEAgLTEzLDYgKzEzLDEwIEBAIFJlcXVpcmVkIHByb3BlcnRpZXM6DQo+IMKgLSBjbG9j\n"
- "a3M6IHNoYWxsIGJlIHRoZSBpbnB1dCBwYXJlbnQgY2xvY2sgcGhhbmRsZSBmb3IgdGhlIFBMTC4N\n"
- "Cj4gwqAtICNjbG9jay1jZWxsczogZnJvbSBjb21tb24gY2xvY2sgYmluZGluZzsgU2hvdWxkIGFs\n"
- "d2F5cyBiZSBzZXQgdG8gMC4NCj4gwqANCj4gK09wdGlvbmFsIHByb3BlcnRpZXM6DQo+ICstIGNs\n"
- "b2NrLWZyZXF1ZW5jeTogb3V0cHV0IGZyZXF1ZW5jeSBnZW5lcmF0ZWQgYnkgcGxsIGluIEh6IHdo\n"
- "aWNoIHdpbGwgYmUgc2V0DQo+ICt3aGlsZSBwcm9iaW5nLiBTaG91bGQgYmUgYSBzaW5nbGUgY2Vs\n"
- "bC4NCj4gKw0KPiDCoEV4YW1wbGU6DQo+IMKgCWlucHV0X2NsazogaW5wdXQtY2xrIHsNCj4gwqAJ\n"
- "CWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47DQo+IEBAIC0yNSw0ICsyOSw1IEBAIEV4YW1w\n"
- "bGU6DQo+IMKgCQlyZWcgPSA8MHgwMCAweDEwPjsNCj4gwqAJCSNjbG9jay1jZWxscyA9IDwwPjsN\n"
- "Cj4gwqAJCWNsb2NrcyA9IDwmaW5wdXRfY2xrPjsNCj4gKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEw\n"
- "MDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0\n"
- "cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2\n"
- "aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLHBsbC1jbG9jay50eHQNCj4gaW5kZXggMTFmZTQ4\n"
- "Ny4uNTkwOGY5OSAxMDA2NDQNCj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp\n"
- "bmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldmlj\n"
- "ZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxwbGwtY2xvY2sudHh0DQo+IEBAIC0xMyw2ICsxMywx\n"
- "MCBAQCByZWdpc3RlcnMgYW5kIHNlY29uZCBmb3IgY29ycmVzcG9uZGluZyBMT0NLIENHVSByZWdp\n"
- "c3Rlci4NCj4gwqAtIGNsb2Nrczogc2hhbGwgYmUgdGhlIGlucHV0IHBhcmVudCBjbG9jayBwaGFu\n"
- "ZGxlIGZvciB0aGUgUExMLg0KPiDCoC0gI2Nsb2NrLWNlbGxzOiBmcm9tIGNvbW1vbiBjbG9jayBi\n"
- "aW5kaW5nOyBTaG91bGQgYWx3YXlzIGJlIHNldCB0byAwLg0KPiDCoA0KPiArT3B0aW9uYWwgcHJv\n"
- "cGVydGllczoNCj4gKy0gY2xvY2stZnJlcXVlbmN5OiBvdXRwdXQgZnJlcXVlbmN5IGdlbmVyYXRl\n"
- "ZCBieSBwbGwgaW4gSHogd2hpY2ggd2lsbCBiZSBzZXQNCj4gK3doaWxlIHByb2JpbmcuIFNob3Vs\n"
- "ZCBiZSBhIHNpbmdsZSBjZWxsLg0KPiArDQo+IMKgRXhhbXBsZToNCj4gwqAJaW5wdXQtY2xrOiBp\n"
- "bnB1dC1jbGsgew0KPiDCoAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsNCj4gQEAgLTI1\n"
- "LDQgKzI5LDUgQEAgRXhhbXBsZToNCj4gwqAJCXJlZyA9IDwweDgwIDB4MTA+LCA8MHgxMDAgMHgx\n"
- "MD47DQo+IMKgCQkjY2xvY2stY2VsbHMgPSA8MD47DQo+IMKgCQljbG9ja3MgPSA8JmlucHV0LWNs\n"
- "az47DQo+ICsJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZm\n"
- "IC0tZ2l0IGEvZHJpdmVycy9jbGsvYXhzMTB4L3BsbF9jbG9jay5jIGIvZHJpdmVycy9jbGsvYXhz\n"
- "MTB4L3BsbF9jbG9jay5jDQo+IGluZGV4IDI1ZDhjMjQuLjNmNDM0NWQgMTAwNjQ0DQo+IC0tLSBh\n"
- "L2RyaXZlcnMvY2xrL2F4czEweC9wbGxfY2xvY2suYw0KPiArKysgYi9kcml2ZXJzL2Nsay9heHMx\n"
- "MHgvcGxsX2Nsb2NrLmMNCj4gQEAgLTExLDYgKzExLDcgQEANCj4gwqAjaW5jbHVkZSA8bGludXgv\n"
- "cGxhdGZvcm1fZGV2aWNlLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiDCoCNp\n"
- "bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4N\n"
- "Cj4gwqAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gwqAjaW5jbHVkZSA8bGludXgvZXJyLmg+\n"
- "DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiBAQCAtMjE1LDYgKzIxNiwyNSBAQCBz\n"
- "dGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgYXhzMTB4X3BsbF9vcHMgPSB7DQo+IMKgCS5zZXRf\n"
- "cmF0ZSA9IGF4czEweF9wbGxfc2V0X3JhdGUsDQo+IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lk\n"
- "IHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGRldmljZV9ub2Rl\n"
- "ICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdl\n"
- "IHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+\n"
- "ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVx\n"
- "dWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5h\n"
- "YmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5ub3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9k\n"
- "ZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRl\n"
- "KGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlwcl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sg\n"
- "cmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0\n"
- "byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVkX3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3Rh\n"
- "dGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2\n"
- "KQ0KPiDCoHsNCj4gwqAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4gQEAgLTI1\n"
- "OCw4ICsyNzgsMTUgQEAgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxh\n"
- "dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiDCoAkJcmV0dXJuIHJldDsNCj4gwqAJfQ0KPiDCoA0KPiAt\n"
- "CXJldHVybiBvZl9jbGtfYWRkX2h3X3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX2h3X3Np\n"
- "bXBsZV9nZXQsDQo+IC0JCQkmcGxsX2Nsay0+aHcpOw0KPiArCXJldCA9wqDCoG9mX2Nsa19hZGRf\n"
- "aHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2ltcGxlX2dldCwNCj4gKwkJCQnC\n"
- "oMKgwqDCoMKgwqAmcGxsX2Nsay0+aHcpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7\n"
- "DQo+ICsNCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kg\n"
- "aW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4gKwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xr\n"
- "LT5ody5jbGssIGRldi0+b2Zfbm9kZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gwqB9DQo+IMKg\n"
- "DQo+IMKgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl\n"
- "dmljZSAqcGRldikNCj4gQEAgLTMxMSw2ICszMzgsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2Zf\n"
- "YXhzMTB4X3BsbF9jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiDCoAkJZ290\n"
- "byBlcnJfdW5yZWdpc3Rlcl9jbGs7DQo+IMKgCX0NCj4gwqANCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5\n"
- "IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kgaW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4g\n"
- "KwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xrLT5ody5jbGssIG5vZGUpOw0KPiArDQo+IMKg\n"
- "CXJldHVybjsNCj4gwqANCj4gwqBlcnJfdW5yZWdpc3Rlcl9jbGs6DQo+IGRpZmYgLS1naXQgYS9k\n"
- "cml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYyBiL2RyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jDQo+\n"
- "IGluZGV4IGJiZjIzNzE3Li43NGZkMDA2IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2Nsay9jbGst\n"
- "aHNkay1wbGwuYw0KPiArKysgYi9kcml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYw0KPiBAQCAtOSw2\n"
- "ICs5LDcgQEANCj4gwqAgKi8NCj4gwqANCj4gwqAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy\n"
- "Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RlbGF5\n"
- "Lmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiDCoCNpbmNsdWRlIDxsaW51eC9l\n"
- "cnIuaD4NCj4gQEAgLTI5NSw2ICsyOTYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3Bz\n"
- "IGhzZGtfcGxsX29wcyA9IHsNCj4gwqAJLnNldF9yYXRlID0gaHNka19wbGxfc2V0X3JhdGUsDQo+\n"
- "IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lkIHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBj\n"
- "bGsgKmNsaywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0\n"
- "ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZy\n"
- "ZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5v\n"
- "ZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+\n"
- "ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5u\n"
- "b3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9kZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9\n"
- "DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRlKGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlw\n"
- "cl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sgcmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+\n"
- "ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVk\n"
- "X3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3RhdGljIGludCBoc2RrX3BsbF9jbGtfcHJvYmUoc3Ry\n"
- "dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gwqB7DQo+IMKgCWludCByZXQ7DQo+IEBAIC0z\n"
- "NDAsOCArMzYwLDE1IEBAIHN0YXRpYyBpbnQgaHNka19wbGxfY2xrX3Byb2JlKHN0cnVjdCBwbGF0\n"
- "Zm9ybV9kZXZpY2UgKnBkZXYpDQo+IMKgCQlyZXR1cm4gcmV0Ow0KPiDCoAl9DQo+IMKgDQo+IC0J\n"
- "cmV0dXJuIG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2lt\n"
- "cGxlX2dldCwNCj4gLQkJCSZwbGxfY2xrLT5odyk7DQo+ICsJcmV0ID3CoMKgb2ZfY2xrX2FkZF9o\n"
- "d19wcm92aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19od19zaW1wbGVfZ2V0LA0KPiArCQkJCcKg\n"
- "wqDCoMKgwqDCoCZwbGxfY2xrLT5odyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsN\n"
- "Cj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBp\n"
- "biBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNldF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGst\n"
- "Pmh3LmNsaywgZGV2LT5vZl9ub2RlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiDCoH0NCj4gwqAN\n"
- "Cj4gwqBzdGF0aWMgaW50IGhzZGtfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj\n"
- "ZSAqcGRldikNCj4gQEAgLTQwMCw2ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2ZfaHNk\n"
- "a19wbGxfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCj4gwqAJCWdvdG8gZXJy\n"
- "X3VubWFwX3NwZWNfcmVnczsNCj4gwqAJfQ0KPiDCoA0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5p\n"
- "dGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBpbiBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNl\n"
- "dF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGstPmh3LmNsaywgbm9kZSk7DQo+ICsNCj4gwqAJcmV0\n"
- "dXJuOw0KPiDCoA0KPiDCoGVycl91bm1hcF9zcGVjX3JlZ3M6DQotLSANCsKgRXVnZW5peSBQYWx0\n"
- c2V2
+ "Hi Stephen, Michael,\n"
+ "\n"
+ "Please treat this message as a polite reminder to review my patch.\n"
+ "It would be really nice to see this patch in 4.15.\n"
+ "\n"
+ "Thanks.\n"
+ "\n"
+ "On Fri, 2017-09-29@16:13 +0300, Eugeniy Paltsev wrote:\n"
+ "> Add option to set initial output frequency of plls via\n"
+ "> \"clock-frequency\" property in pll's device tree node.\n"
+ "> This frequency will be set while pll driver probed.\n"
+ "> \n"
+ "> The usage example is setting CPU clock frequency on boot\n"
+ "> See discussion:\n"
+ "> https://www.mail-archive.com/linux-snps-arc at lists.infradead.org/msg02689.html\n"
+ "> \n"
+ "> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev at synopsys.com>\n"
+ "> ---\n"
+ "> ?.../bindings/clock/snps,hsdk-pll-clock.txt?????????|??5 ++++\n"
+ "> ?.../devicetree/bindings/clock/snps,pll-clock.txt???|??5 ++++\n"
+ "> ?drivers/clk/axs10x/pll_clock.c?????????????????????| 34 ++++++++++++++++++++--\n"
+ "> ?drivers/clk/clk-hsdk-pll.c?????????????????????????| 34 ++++++++++++++++++++--\n"
+ "> ?4 files changed, 74 insertions(+), 4 deletions(-)\n"
+ "> \n"
+ "> diff --git a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt\n"
+ "> index c56c755..5703059 100644\n"
+ "> --- a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt\n"
+ "> +++ b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt\n"
+ "> @@ -13,6 +13,10 @@ Required properties:\n"
+ "> ?- clocks: shall be the input parent clock phandle for the PLL.\n"
+ "> ?- #clock-cells: from common clock binding; Should always be set to 0.\n"
+ "> ?\n"
+ "> +Optional properties:\n"
+ "> +- clock-frequency: output frequency generated by pll in Hz which will be set\n"
+ "> +while probing. Should be a single cell.\n"
+ "> +\n"
+ "> ?Example:\n"
+ "> ?\tinput_clk: input-clk {\n"
+ "> ?\t\tclock-frequency = <33333333>;\n"
+ "> @@ -25,4 +29,5 @@ Example:\n"
+ "> ?\t\treg = <0x00 0x10>;\n"
+ "> ?\t\t#clock-cells = <0>;\n"
+ "> ?\t\tclocks = <&input_clk>;\n"
+ "> +\t\tclock-frequency = <1000000000>;\n"
+ "> ?\t};\n"
+ "> diff --git a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt\n"
+ "> index 11fe487..5908f99 100644\n"
+ "> --- a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt\n"
+ "> +++ b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt\n"
+ "> @@ -13,6 +13,10 @@ registers and second for corresponding LOCK CGU register.\n"
+ "> ?- clocks: shall be the input parent clock phandle for the PLL.\n"
+ "> ?- #clock-cells: from common clock binding; Should always be set to 0.\n"
+ "> ?\n"
+ "> +Optional properties:\n"
+ "> +- clock-frequency: output frequency generated by pll in Hz which will be set\n"
+ "> +while probing. Should be a single cell.\n"
+ "> +\n"
+ "> ?Example:\n"
+ "> ?\tinput-clk: input-clk {\n"
+ "> ?\t\tclock-frequency = <33333333>;\n"
+ "> @@ -25,4 +29,5 @@ Example:\n"
+ "> ?\t\treg = <0x80 0x10>, <0x100 0x10>;\n"
+ "> ?\t\t#clock-cells = <0>;\n"
+ "> ?\t\tclocks = <&input-clk>;\n"
+ "> +\t\tclock-frequency = <100000000>;\n"
+ "> ?\t};\n"
+ "> diff --git a/drivers/clk/axs10x/pll_clock.c b/drivers/clk/axs10x/pll_clock.c\n"
+ "> index 25d8c24..3f4345d 100644\n"
+ "> --- a/drivers/clk/axs10x/pll_clock.c\n"
+ "> +++ b/drivers/clk/axs10x/pll_clock.c\n"
+ "> @@ -11,6 +11,7 @@\n"
+ "> ?#include <linux/platform_device.h>\n"
+ "> ?#include <linux/module.h>\n"
+ "> ?#include <linux/clk-provider.h>\n"
+ "> +#include <linux/clk.h>\n"
+ "> ?#include <linux/delay.h>\n"
+ "> ?#include <linux/err.h>\n"
+ "> ?#include <linux/device.h>\n"
+ "> @@ -215,6 +216,25 @@ static const struct clk_ops axs10x_pll_ops = {\n"
+ "> ?\t.set_rate = axs10x_pll_set_rate,\n"
+ "> ?};\n"
+ "> ?\n"
+ "> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)\n"
+ "> +{\n"
+ "> +\tu32 requested_rate;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency try to set it */\n"
+ "> +\tif (of_property_read_u32(node, \"clock-frequency\", &requested_rate))\n"
+ "> +\t\treturn;\n"
+ "> +\n"
+ "> +\tif (clk_prepare_enable(clk)) {\n"
+ "> +\t\tpr_err(\"Cannot enable %s clock.\\n\", node->name);\n"
+ "> +\t\treturn;\n"
+ "> +\t}\n"
+ "> +\n"
+ "> +\tif (clk_set_rate(clk, requested_rate))\n"
+ "> +\t\tpr_err(\"Cannot set %s clock rate.\\n\", node->name);\n"
+ "> +\n"
+ "> +\tpr_debug(\"Set %s clock to %u\\n\", node->name, requested_rate);\n"
+ "> +}\n"
+ "> +\n"
+ "> ?static int axs10x_pll_clk_probe(struct platform_device *pdev)\n"
+ "> ?{\n"
+ "> ?\tstruct device *dev = &pdev->dev;\n"
+ "> @@ -258,8 +278,15 @@ static int axs10x_pll_clk_probe(struct platform_device *pdev)\n"
+ "> ?\t\treturn ret;\n"
+ "> ?\t}\n"
+ "> ?\n"
+ "> -\treturn of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> -\t\t\t&pll_clk->hw);\n"
+ "> +\tret =??of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> +\t\t\t\t??????&pll_clk->hw);\n"
+ "> +\tif (ret)\n"
+ "> +\t\treturn ret;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);\n"
+ "> +\n"
+ "> +\treturn 0;\n"
+ "> ?}\n"
+ "> ?\n"
+ "> ?static int axs10x_pll_clk_remove(struct platform_device *pdev)\n"
+ "> @@ -311,6 +338,9 @@ static void __init of_axs10x_pll_clk_setup(struct device_node *node)\n"
+ "> ?\t\tgoto err_unregister_clk;\n"
+ "> ?\t}\n"
+ "> ?\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, node);\n"
+ "> +\n"
+ "> ?\treturn;\n"
+ "> ?\n"
+ "> ?err_unregister_clk:\n"
+ "> diff --git a/drivers/clk/clk-hsdk-pll.c b/drivers/clk/clk-hsdk-pll.c\n"
+ "> index bbf23717..74fd006 100644\n"
+ "> --- a/drivers/clk/clk-hsdk-pll.c\n"
+ "> +++ b/drivers/clk/clk-hsdk-pll.c\n"
+ "> @@ -9,6 +9,7 @@\n"
+ "> ? */\n"
+ "> ?\n"
+ "> ?#include <linux/clk-provider.h>\n"
+ "> +#include <linux/clk.h>\n"
+ "> ?#include <linux/delay.h>\n"
+ "> ?#include <linux/device.h>\n"
+ "> ?#include <linux/err.h>\n"
+ "> @@ -295,6 +296,25 @@ static const struct clk_ops hsdk_pll_ops = {\n"
+ "> ?\t.set_rate = hsdk_pll_set_rate,\n"
+ "> ?};\n"
+ "> ?\n"
+ "> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)\n"
+ "> +{\n"
+ "> +\tu32 requested_rate;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency try to set it */\n"
+ "> +\tif (of_property_read_u32(node, \"clock-frequency\", &requested_rate))\n"
+ "> +\t\treturn;\n"
+ "> +\n"
+ "> +\tif (clk_prepare_enable(clk)) {\n"
+ "> +\t\tpr_err(\"Cannot enable %s clock.\\n\", node->name);\n"
+ "> +\t\treturn;\n"
+ "> +\t}\n"
+ "> +\n"
+ "> +\tif (clk_set_rate(clk, requested_rate))\n"
+ "> +\t\tpr_err(\"Cannot set %s clock rate.\\n\", node->name);\n"
+ "> +\n"
+ "> +\tpr_debug(\"Set %s clock to %u\\n\", node->name, requested_rate);\n"
+ "> +}\n"
+ "> +\n"
+ "> ?static int hsdk_pll_clk_probe(struct platform_device *pdev)\n"
+ "> ?{\n"
+ "> ?\tint ret;\n"
+ "> @@ -340,8 +360,15 @@ static int hsdk_pll_clk_probe(struct platform_device *pdev)\n"
+ "> ?\t\treturn ret;\n"
+ "> ?\t}\n"
+ "> ?\n"
+ "> -\treturn of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> -\t\t\t&pll_clk->hw);\n"
+ "> +\tret =??of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> +\t\t\t\t??????&pll_clk->hw);\n"
+ "> +\tif (ret)\n"
+ "> +\t\treturn ret;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);\n"
+ "> +\n"
+ "> +\treturn 0;\n"
+ "> ?}\n"
+ "> ?\n"
+ "> ?static int hsdk_pll_clk_remove(struct platform_device *pdev)\n"
+ "> @@ -400,6 +427,9 @@ static void __init of_hsdk_pll_clk_setup(struct device_node *node)\n"
+ "> ?\t\tgoto err_unmap_spec_regs;\n"
+ "> ?\t}\n"
+ "> ?\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, node);\n"
+ "> +\n"
+ "> ?\treturn;\n"
+ "> ?\n"
+ "> ?err_unmap_spec_regs:\n"
+ "-- \n"
+ ?Eugeniy Paltsev
 
-19d1afb0b88c8a52845288fab6c23ef67b5d464f5d523eab99ad39e5bdc1381c
+b44ab7cbb8e8e8cefbf0bef4f6b643ccf1db67cebf7b2f9fbd66c04e521a1bf4

diff --git a/a/1.txt b/N2/1.txt
index 6f4e768..c2ec861 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,126 +1,200 @@
-SGkgU3RlcGhlbiwgTWljaGFlbCwNCg0KUGxlYXNlIHRyZWF0IHRoaXMgbWVzc2FnZSBhcyBhIHBv
-bGl0ZSByZW1pbmRlciB0byByZXZpZXcgbXkgcGF0Y2guDQpJdCB3b3VsZCBiZSByZWFsbHkgbmlj
-ZSB0byBzZWUgdGhpcyBwYXRjaCBpbiA0LjE1Lg0KDQpUaGFua3MuDQoNCk9uIEZyaSwgMjAxNy0w
-OS0yOSBhdCAxNjoxMyArMDMwMCwgRXVnZW5peSBQYWx0c2V2IHdyb3RlOg0KPiBBZGQgb3B0aW9u
-IHRvIHNldCBpbml0aWFsIG91dHB1dCBmcmVxdWVuY3kgb2YgcGxscyB2aWENCj4gImNsb2NrLWZy
-ZXF1ZW5jeSIgcHJvcGVydHkgaW4gcGxsJ3MgZGV2aWNlIHRyZWUgbm9kZS4NCj4gVGhpcyBmcmVx
-dWVuY3kgd2lsbCBiZSBzZXQgd2hpbGUgcGxsIGRyaXZlciBwcm9iZWQuDQo+IA0KPiBUaGUgdXNh
-Z2UgZXhhbXBsZSBpcyBzZXR0aW5nIENQVSBjbG9jayBmcmVxdWVuY3kgb24gYm9vdA0KPiBTZWUg
-ZGlzY3Vzc2lvbjoNCj4gaHR0cHM6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9saW51eC1zbnBzLWFy
-Y0BsaXN0cy5pbmZyYWRlYWQub3JnL21zZzAyNjg5Lmh0bWwNCj4gDQo+IFNpZ25lZC1vZmYtYnk6
-IEV1Z2VuaXkgUGFsdHNldiA8RXVnZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4NCj4gLS0tDQo+
-IMKgLi4uL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0wqDCoMKgwqDCoMKg
-wqDCoMKgfMKgwqA1ICsrKysNCj4gwqAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBz
-LHBsbC1jbG9jay50eHTCoMKgwqB8wqDCoDUgKysrKw0KPiDCoGRyaXZlcnMvY2xrL2F4czEweC9w
-bGxfY2xvY2suY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMzQg
-KysrKysrKysrKysrKysrKysrKystLQ0KPiDCoGRyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDM0ICsrKysr
-KysrKysrKysrKysrKysrLS0NCj4gwqA0IGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyks
-IDQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0
-cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlv
-bi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0DQo+IGlu
-ZGV4IGM1NmM3NTUuLjU3MDMwNTkgMTAwNjQ0DQo+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl
-dHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLGhzZGstcGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1
-bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxoc2RrLXBsbC1jbG9jay50
-eHQNCj4gQEAgLTEzLDYgKzEzLDEwIEBAIFJlcXVpcmVkIHByb3BlcnRpZXM6DQo+IMKgLSBjbG9j
-a3M6IHNoYWxsIGJlIHRoZSBpbnB1dCBwYXJlbnQgY2xvY2sgcGhhbmRsZSBmb3IgdGhlIFBMTC4N
-Cj4gwqAtICNjbG9jay1jZWxsczogZnJvbSBjb21tb24gY2xvY2sgYmluZGluZzsgU2hvdWxkIGFs
-d2F5cyBiZSBzZXQgdG8gMC4NCj4gwqANCj4gK09wdGlvbmFsIHByb3BlcnRpZXM6DQo+ICstIGNs
-b2NrLWZyZXF1ZW5jeTogb3V0cHV0IGZyZXF1ZW5jeSBnZW5lcmF0ZWQgYnkgcGxsIGluIEh6IHdo
-aWNoIHdpbGwgYmUgc2V0DQo+ICt3aGlsZSBwcm9iaW5nLiBTaG91bGQgYmUgYSBzaW5nbGUgY2Vs
-bC4NCj4gKw0KPiDCoEV4YW1wbGU6DQo+IMKgCWlucHV0X2NsazogaW5wdXQtY2xrIHsNCj4gwqAJ
-CWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47DQo+IEBAIC0yNSw0ICsyOSw1IEBAIEV4YW1w
-bGU6DQo+IMKgCQlyZWcgPSA8MHgwMCAweDEwPjsNCj4gwqAJCSNjbG9jay1jZWxscyA9IDwwPjsN
-Cj4gwqAJCWNsb2NrcyA9IDwmaW5wdXRfY2xrPjsNCj4gKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEw
-MDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0
-cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2
-aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLHBsbC1jbG9jay50eHQNCj4gaW5kZXggMTFmZTQ4
-Ny4uNTkwOGY5OSAxMDA2NDQNCj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp
-bmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldmlj
-ZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxwbGwtY2xvY2sudHh0DQo+IEBAIC0xMyw2ICsxMywx
-MCBAQCByZWdpc3RlcnMgYW5kIHNlY29uZCBmb3IgY29ycmVzcG9uZGluZyBMT0NLIENHVSByZWdp
-c3Rlci4NCj4gwqAtIGNsb2Nrczogc2hhbGwgYmUgdGhlIGlucHV0IHBhcmVudCBjbG9jayBwaGFu
-ZGxlIGZvciB0aGUgUExMLg0KPiDCoC0gI2Nsb2NrLWNlbGxzOiBmcm9tIGNvbW1vbiBjbG9jayBi
-aW5kaW5nOyBTaG91bGQgYWx3YXlzIGJlIHNldCB0byAwLg0KPiDCoA0KPiArT3B0aW9uYWwgcHJv
-cGVydGllczoNCj4gKy0gY2xvY2stZnJlcXVlbmN5OiBvdXRwdXQgZnJlcXVlbmN5IGdlbmVyYXRl
-ZCBieSBwbGwgaW4gSHogd2hpY2ggd2lsbCBiZSBzZXQNCj4gK3doaWxlIHByb2JpbmcuIFNob3Vs
-ZCBiZSBhIHNpbmdsZSBjZWxsLg0KPiArDQo+IMKgRXhhbXBsZToNCj4gwqAJaW5wdXQtY2xrOiBp
-bnB1dC1jbGsgew0KPiDCoAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsNCj4gQEAgLTI1
-LDQgKzI5LDUgQEAgRXhhbXBsZToNCj4gwqAJCXJlZyA9IDwweDgwIDB4MTA+LCA8MHgxMDAgMHgx
-MD47DQo+IMKgCQkjY2xvY2stY2VsbHMgPSA8MD47DQo+IMKgCQljbG9ja3MgPSA8JmlucHV0LWNs
-az47DQo+ICsJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZm
-IC0tZ2l0IGEvZHJpdmVycy9jbGsvYXhzMTB4L3BsbF9jbG9jay5jIGIvZHJpdmVycy9jbGsvYXhz
-MTB4L3BsbF9jbG9jay5jDQo+IGluZGV4IDI1ZDhjMjQuLjNmNDM0NWQgMTAwNjQ0DQo+IC0tLSBh
-L2RyaXZlcnMvY2xrL2F4czEweC9wbGxfY2xvY2suYw0KPiArKysgYi9kcml2ZXJzL2Nsay9heHMx
-MHgvcGxsX2Nsb2NrLmMNCj4gQEAgLTExLDYgKzExLDcgQEANCj4gwqAjaW5jbHVkZSA8bGludXgv
-cGxhdGZvcm1fZGV2aWNlLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiDCoCNp
-bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4N
-Cj4gwqAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gwqAjaW5jbHVkZSA8bGludXgvZXJyLmg+
-DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiBAQCAtMjE1LDYgKzIxNiwyNSBAQCBz
-dGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgYXhzMTB4X3BsbF9vcHMgPSB7DQo+IMKgCS5zZXRf
-cmF0ZSA9IGF4czEweF9wbGxfc2V0X3JhdGUsDQo+IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lk
-IHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGRldmljZV9ub2Rl
-ICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdl
-IHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+
-ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVx
-dWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5h
-YmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5ub3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9k
-ZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRl
-KGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlwcl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sg
-cmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0
-byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVkX3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3Rh
-dGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2
-KQ0KPiDCoHsNCj4gwqAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4gQEAgLTI1
-OCw4ICsyNzgsMTUgQEAgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxh
-dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiDCoAkJcmV0dXJuIHJldDsNCj4gwqAJfQ0KPiDCoA0KPiAt
-CXJldHVybiBvZl9jbGtfYWRkX2h3X3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX2h3X3Np
-bXBsZV9nZXQsDQo+IC0JCQkmcGxsX2Nsay0+aHcpOw0KPiArCXJldCA9wqDCoG9mX2Nsa19hZGRf
-aHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2ltcGxlX2dldCwNCj4gKwkJCQnC
-oMKgwqDCoMKgwqAmcGxsX2Nsay0+aHcpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7
-DQo+ICsNCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kg
-aW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4gKwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xr
-LT5ody5jbGssIGRldi0+b2Zfbm9kZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gwqB9DQo+IMKg
-DQo+IMKgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl
-dmljZSAqcGRldikNCj4gQEAgLTMxMSw2ICszMzgsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2Zf
-YXhzMTB4X3BsbF9jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiDCoAkJZ290
-byBlcnJfdW5yZWdpc3Rlcl9jbGs7DQo+IMKgCX0NCj4gwqANCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5
-IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kgaW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4g
-KwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xrLT5ody5jbGssIG5vZGUpOw0KPiArDQo+IMKg
-CXJldHVybjsNCj4gwqANCj4gwqBlcnJfdW5yZWdpc3Rlcl9jbGs6DQo+IGRpZmYgLS1naXQgYS9k
-cml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYyBiL2RyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jDQo+
-IGluZGV4IGJiZjIzNzE3Li43NGZkMDA2IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2Nsay9jbGst
-aHNkay1wbGwuYw0KPiArKysgYi9kcml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYw0KPiBAQCAtOSw2
-ICs5LDcgQEANCj4gwqAgKi8NCj4gwqANCj4gwqAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy
-Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RlbGF5
-Lmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiDCoCNpbmNsdWRlIDxsaW51eC9l
-cnIuaD4NCj4gQEAgLTI5NSw2ICsyOTYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3Bz
-IGhzZGtfcGxsX29wcyA9IHsNCj4gwqAJLnNldF9yYXRlID0gaHNka19wbGxfc2V0X3JhdGUsDQo+
-IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lkIHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBj
-bGsgKmNsaywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0
-ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZy
-ZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5v
-ZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+
-ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5u
-b3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9kZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9
-DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRlKGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlw
-cl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sgcmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+
-ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVk
-X3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3RhdGljIGludCBoc2RrX3BsbF9jbGtfcHJvYmUoc3Ry
-dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gwqB7DQo+IMKgCWludCByZXQ7DQo+IEBAIC0z
-NDAsOCArMzYwLDE1IEBAIHN0YXRpYyBpbnQgaHNka19wbGxfY2xrX3Byb2JlKHN0cnVjdCBwbGF0
-Zm9ybV9kZXZpY2UgKnBkZXYpDQo+IMKgCQlyZXR1cm4gcmV0Ow0KPiDCoAl9DQo+IMKgDQo+IC0J
-cmV0dXJuIG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2lt
-cGxlX2dldCwNCj4gLQkJCSZwbGxfY2xrLT5odyk7DQo+ICsJcmV0ID3CoMKgb2ZfY2xrX2FkZF9o
-d19wcm92aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19od19zaW1wbGVfZ2V0LA0KPiArCQkJCcKg
-wqDCoMKgwqDCoCZwbGxfY2xrLT5odyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsN
-Cj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBp
-biBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNldF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGst
-Pmh3LmNsaywgZGV2LT5vZl9ub2RlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiDCoH0NCj4gwqAN
-Cj4gwqBzdGF0aWMgaW50IGhzZGtfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj
-ZSAqcGRldikNCj4gQEAgLTQwMCw2ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2ZfaHNk
-a19wbGxfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCj4gwqAJCWdvdG8gZXJy
-X3VubWFwX3NwZWNfcmVnczsNCj4gwqAJfQ0KPiDCoA0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5p
-dGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBpbiBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNl
-dF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGstPmh3LmNsaywgbm9kZSk7DQo+ICsNCj4gwqAJcmV0
-dXJuOw0KPiDCoA0KPiDCoGVycl91bm1hcF9zcGVjX3JlZ3M6DQotLSANCsKgRXVnZW5peSBQYWx0
-c2V2
+Hi Stephen, Michael,
+
+Please treat this message as a polite reminder to review my patch.
+It would be really nice to see this patch in 4.15.
+
+Thanks.
+
+On Fri, 2017-09-29 at 16:13 +0300, Eugeniy Paltsev wrote:
+> Add option to set initial output frequency of plls via
+> "clock-frequency" property in pll's device tree node.
+> This frequency will be set while pll driver probed.
+> 
+> The usage example is setting CPU clock frequency on boot
+> See discussion:
+> https://www.mail-archive.com/linux-snps-arc@lists.infradead.org/msg02689.html
+> 
+> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
+> ---
+>  .../bindings/clock/snps,hsdk-pll-clock.txt         |  5 ++++
+>  .../devicetree/bindings/clock/snps,pll-clock.txt   |  5 ++++
+>  drivers/clk/axs10x/pll_clock.c                     | 34 ++++++++++++++++++++--
+>  drivers/clk/clk-hsdk-pll.c                         | 34 ++++++++++++++++++++--
+>  4 files changed, 74 insertions(+), 4 deletions(-)
+> 
+> diff --git a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
+> index c56c755..5703059 100644
+> --- a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
+> +++ b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
+> @@ -13,6 +13,10 @@ Required properties:
+>  - clocks: shall be the input parent clock phandle for the PLL.
+>  - #clock-cells: from common clock binding; Should always be set to 0.
+>  
+> +Optional properties:
+> +- clock-frequency: output frequency generated by pll in Hz which will be set
+> +while probing. Should be a single cell.
+> +
+>  Example:
+>  	input_clk: input-clk {
+>  		clock-frequency = <33333333>;
+> @@ -25,4 +29,5 @@ Example:
+>  		reg = <0x00 0x10>;
+>  		#clock-cells = <0>;
+>  		clocks = <&input_clk>;
+> +		clock-frequency = <1000000000>;
+>  	};
+> diff --git a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
+> index 11fe487..5908f99 100644
+> --- a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
+> +++ b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
+> @@ -13,6 +13,10 @@ registers and second for corresponding LOCK CGU register.
+>  - clocks: shall be the input parent clock phandle for the PLL.
+>  - #clock-cells: from common clock binding; Should always be set to 0.
+>  
+> +Optional properties:
+> +- clock-frequency: output frequency generated by pll in Hz which will be set
+> +while probing. Should be a single cell.
+> +
+>  Example:
+>  	input-clk: input-clk {
+>  		clock-frequency = <33333333>;
+> @@ -25,4 +29,5 @@ Example:
+>  		reg = <0x80 0x10>, <0x100 0x10>;
+>  		#clock-cells = <0>;
+>  		clocks = <&input-clk>;
+> +		clock-frequency = <100000000>;
+>  	};
+> diff --git a/drivers/clk/axs10x/pll_clock.c b/drivers/clk/axs10x/pll_clock.c
+> index 25d8c24..3f4345d 100644
+> --- a/drivers/clk/axs10x/pll_clock.c
+> +++ b/drivers/clk/axs10x/pll_clock.c
+> @@ -11,6 +11,7 @@
+>  #include <linux/platform_device.h>
+>  #include <linux/module.h>
+>  #include <linux/clk-provider.h>
+> +#include <linux/clk.h>
+>  #include <linux/delay.h>
+>  #include <linux/err.h>
+>  #include <linux/device.h>
+> @@ -215,6 +216,25 @@ static const struct clk_ops axs10x_pll_ops = {
+>  	.set_rate = axs10x_pll_set_rate,
+>  };
+>  
+> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)
+> +{
+> +	u32 requested_rate;
+> +
+> +	/* If we specify initial pll output frequency try to set it */
+> +	if (of_property_read_u32(node, "clock-frequency", &requested_rate))
+> +		return;
+> +
+> +	if (clk_prepare_enable(clk)) {
+> +		pr_err("Cannot enable %s clock.\n", node->name);
+> +		return;
+> +	}
+> +
+> +	if (clk_set_rate(clk, requested_rate))
+> +		pr_err("Cannot set %s clock rate.\n", node->name);
+> +
+> +	pr_debug("Set %s clock to %u\n", node->name, requested_rate);
+> +}
+> +
+>  static int axs10x_pll_clk_probe(struct platform_device *pdev)
+>  {
+>  	struct device *dev = &pdev->dev;
+> @@ -258,8 +278,15 @@ static int axs10x_pll_clk_probe(struct platform_device *pdev)
+>  		return ret;
+>  	}
+>  
+> -	return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> -			&pll_clk->hw);
+> +	ret =  of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> +				      &pll_clk->hw);
+> +	if (ret)
+> +		return ret;
+> +
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);
+> +
+> +	return 0;
+>  }
+>  
+>  static int axs10x_pll_clk_remove(struct platform_device *pdev)
+> @@ -311,6 +338,9 @@ static void __init of_axs10x_pll_clk_setup(struct device_node *node)
+>  		goto err_unregister_clk;
+>  	}
+>  
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, node);
+> +
+>  	return;
+>  
+>  err_unregister_clk:
+> diff --git a/drivers/clk/clk-hsdk-pll.c b/drivers/clk/clk-hsdk-pll.c
+> index bbf23717..74fd006 100644
+> --- a/drivers/clk/clk-hsdk-pll.c
+> +++ b/drivers/clk/clk-hsdk-pll.c
+> @@ -9,6 +9,7 @@
+>   */
+>  
+>  #include <linux/clk-provider.h>
+> +#include <linux/clk.h>
+>  #include <linux/delay.h>
+>  #include <linux/device.h>
+>  #include <linux/err.h>
+> @@ -295,6 +296,25 @@ static const struct clk_ops hsdk_pll_ops = {
+>  	.set_rate = hsdk_pll_set_rate,
+>  };
+>  
+> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)
+> +{
+> +	u32 requested_rate;
+> +
+> +	/* If we specify initial pll output frequency try to set it */
+> +	if (of_property_read_u32(node, "clock-frequency", &requested_rate))
+> +		return;
+> +
+> +	if (clk_prepare_enable(clk)) {
+> +		pr_err("Cannot enable %s clock.\n", node->name);
+> +		return;
+> +	}
+> +
+> +	if (clk_set_rate(clk, requested_rate))
+> +		pr_err("Cannot set %s clock rate.\n", node->name);
+> +
+> +	pr_debug("Set %s clock to %u\n", node->name, requested_rate);
+> +}
+> +
+>  static int hsdk_pll_clk_probe(struct platform_device *pdev)
+>  {
+>  	int ret;
+> @@ -340,8 +360,15 @@ static int hsdk_pll_clk_probe(struct platform_device *pdev)
+>  		return ret;
+>  	}
+>  
+> -	return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> -			&pll_clk->hw);
+> +	ret =  of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> +				      &pll_clk->hw);
+> +	if (ret)
+> +		return ret;
+> +
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);
+> +
+> +	return 0;
+>  }
+>  
+>  static int hsdk_pll_clk_remove(struct platform_device *pdev)
+> @@ -400,6 +427,9 @@ static void __init of_hsdk_pll_clk_setup(struct device_node *node)
+>  		goto err_unmap_spec_regs;
+>  	}
+>  
+> +	/* If we specify initial pll output frequency in dts try to set it */
+> +	set_pll_rate_from_of(pll_clk->hw.clk, node);
+> +
+>  	return;
+>  
+>  err_unmap_spec_regs:
+-- 
+ Eugeniy Paltsev
diff --git a/a/content_digest b/N2/content_digest
index e9562c1..6dd716f 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -11,131 +11,205 @@
  " linux-snps-arc@lists.infradead.org <linux-snps-arc@lists.infradead.org>\0"
  "\00:1\0"
  "b\0"
- "SGkgU3RlcGhlbiwgTWljaGFlbCwNCg0KUGxlYXNlIHRyZWF0IHRoaXMgbWVzc2FnZSBhcyBhIHBv\n"
- "bGl0ZSByZW1pbmRlciB0byByZXZpZXcgbXkgcGF0Y2guDQpJdCB3b3VsZCBiZSByZWFsbHkgbmlj\n"
- "ZSB0byBzZWUgdGhpcyBwYXRjaCBpbiA0LjE1Lg0KDQpUaGFua3MuDQoNCk9uIEZyaSwgMjAxNy0w\n"
- "OS0yOSBhdCAxNjoxMyArMDMwMCwgRXVnZW5peSBQYWx0c2V2IHdyb3RlOg0KPiBBZGQgb3B0aW9u\n"
- "IHRvIHNldCBpbml0aWFsIG91dHB1dCBmcmVxdWVuY3kgb2YgcGxscyB2aWENCj4gImNsb2NrLWZy\n"
- "ZXF1ZW5jeSIgcHJvcGVydHkgaW4gcGxsJ3MgZGV2aWNlIHRyZWUgbm9kZS4NCj4gVGhpcyBmcmVx\n"
- "dWVuY3kgd2lsbCBiZSBzZXQgd2hpbGUgcGxsIGRyaXZlciBwcm9iZWQuDQo+IA0KPiBUaGUgdXNh\n"
- "Z2UgZXhhbXBsZSBpcyBzZXR0aW5nIENQVSBjbG9jayBmcmVxdWVuY3kgb24gYm9vdA0KPiBTZWUg\n"
- "ZGlzY3Vzc2lvbjoNCj4gaHR0cHM6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9saW51eC1zbnBzLWFy\n"
- "Y0BsaXN0cy5pbmZyYWRlYWQub3JnL21zZzAyNjg5Lmh0bWwNCj4gDQo+IFNpZ25lZC1vZmYtYnk6\n"
- "IEV1Z2VuaXkgUGFsdHNldiA8RXVnZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4NCj4gLS0tDQo+\n"
- "IMKgLi4uL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0wqDCoMKgwqDCoMKg\n"
- "wqDCoMKgfMKgwqA1ICsrKysNCj4gwqAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBz\n"
- "LHBsbC1jbG9jay50eHTCoMKgwqB8wqDCoDUgKysrKw0KPiDCoGRyaXZlcnMvY2xrL2F4czEweC9w\n"
- "bGxfY2xvY2suY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMzQg\n"
- "KysrKysrKysrKysrKysrKysrKystLQ0KPiDCoGRyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jwqDC\n"
- "oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDM0ICsrKysr\n"
- "KysrKysrKysrKysrKysrLS0NCj4gwqA0IGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyks\n"
- "IDQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0\n"
- "cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlv\n"
- "bi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMsaHNkay1wbGwtY2xvY2sudHh0DQo+IGlu\n"
- "ZGV4IGM1NmM3NTUuLjU3MDMwNTkgMTAwNjQ0DQo+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl\n"
- "dHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLGhzZGstcGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1\n"
- "bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxoc2RrLXBsbC1jbG9jay50\n"
- "eHQNCj4gQEAgLTEzLDYgKzEzLDEwIEBAIFJlcXVpcmVkIHByb3BlcnRpZXM6DQo+IMKgLSBjbG9j\n"
- "a3M6IHNoYWxsIGJlIHRoZSBpbnB1dCBwYXJlbnQgY2xvY2sgcGhhbmRsZSBmb3IgdGhlIFBMTC4N\n"
- "Cj4gwqAtICNjbG9jay1jZWxsczogZnJvbSBjb21tb24gY2xvY2sgYmluZGluZzsgU2hvdWxkIGFs\n"
- "d2F5cyBiZSBzZXQgdG8gMC4NCj4gwqANCj4gK09wdGlvbmFsIHByb3BlcnRpZXM6DQo+ICstIGNs\n"
- "b2NrLWZyZXF1ZW5jeTogb3V0cHV0IGZyZXF1ZW5jeSBnZW5lcmF0ZWQgYnkgcGxsIGluIEh6IHdo\n"
- "aWNoIHdpbGwgYmUgc2V0DQo+ICt3aGlsZSBwcm9iaW5nLiBTaG91bGQgYmUgYSBzaW5nbGUgY2Vs\n"
- "bC4NCj4gKw0KPiDCoEV4YW1wbGU6DQo+IMKgCWlucHV0X2NsazogaW5wdXQtY2xrIHsNCj4gwqAJ\n"
- "CWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47DQo+IEBAIC0yNSw0ICsyOSw1IEBAIEV4YW1w\n"
- "bGU6DQo+IMKgCQlyZWcgPSA8MHgwMCAweDEwPjsNCj4gwqAJCSNjbG9jay1jZWxscyA9IDwwPjsN\n"
- "Cj4gwqAJCWNsb2NrcyA9IDwmaW5wdXRfY2xrPjsNCj4gKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEw\n"
- "MDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0\n"
- "cmVlL2JpbmRpbmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2\n"
- "aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zbnBzLHBsbC1jbG9jay50eHQNCj4gaW5kZXggMTFmZTQ4\n"
- "Ny4uNTkwOGY5OSAxMDA2NDQNCj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp\n"
- "bmdzL2Nsb2NrL3NucHMscGxsLWNsb2NrLnR4dA0KPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldmlj\n"
- "ZXRyZWUvYmluZGluZ3MvY2xvY2svc25wcyxwbGwtY2xvY2sudHh0DQo+IEBAIC0xMyw2ICsxMywx\n"
- "MCBAQCByZWdpc3RlcnMgYW5kIHNlY29uZCBmb3IgY29ycmVzcG9uZGluZyBMT0NLIENHVSByZWdp\n"
- "c3Rlci4NCj4gwqAtIGNsb2Nrczogc2hhbGwgYmUgdGhlIGlucHV0IHBhcmVudCBjbG9jayBwaGFu\n"
- "ZGxlIGZvciB0aGUgUExMLg0KPiDCoC0gI2Nsb2NrLWNlbGxzOiBmcm9tIGNvbW1vbiBjbG9jayBi\n"
- "aW5kaW5nOyBTaG91bGQgYWx3YXlzIGJlIHNldCB0byAwLg0KPiDCoA0KPiArT3B0aW9uYWwgcHJv\n"
- "cGVydGllczoNCj4gKy0gY2xvY2stZnJlcXVlbmN5OiBvdXRwdXQgZnJlcXVlbmN5IGdlbmVyYXRl\n"
- "ZCBieSBwbGwgaW4gSHogd2hpY2ggd2lsbCBiZSBzZXQNCj4gK3doaWxlIHByb2JpbmcuIFNob3Vs\n"
- "ZCBiZSBhIHNpbmdsZSBjZWxsLg0KPiArDQo+IMKgRXhhbXBsZToNCj4gwqAJaW5wdXQtY2xrOiBp\n"
- "bnB1dC1jbGsgew0KPiDCoAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsNCj4gQEAgLTI1\n"
- "LDQgKzI5LDUgQEAgRXhhbXBsZToNCj4gwqAJCXJlZyA9IDwweDgwIDB4MTA+LCA8MHgxMDAgMHgx\n"
- "MD47DQo+IMKgCQkjY2xvY2stY2VsbHMgPSA8MD47DQo+IMKgCQljbG9ja3MgPSA8JmlucHV0LWNs\n"
- "az47DQo+ICsJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+Ow0KPiDCoAl9Ow0KPiBkaWZm\n"
- "IC0tZ2l0IGEvZHJpdmVycy9jbGsvYXhzMTB4L3BsbF9jbG9jay5jIGIvZHJpdmVycy9jbGsvYXhz\n"
- "MTB4L3BsbF9jbG9jay5jDQo+IGluZGV4IDI1ZDhjMjQuLjNmNDM0NWQgMTAwNjQ0DQo+IC0tLSBh\n"
- "L2RyaXZlcnMvY2xrL2F4czEweC9wbGxfY2xvY2suYw0KPiArKysgYi9kcml2ZXJzL2Nsay9heHMx\n"
- "MHgvcGxsX2Nsb2NrLmMNCj4gQEAgLTExLDYgKzExLDcgQEANCj4gwqAjaW5jbHVkZSA8bGludXgv\n"
- "cGxhdGZvcm1fZGV2aWNlLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiDCoCNp\n"
- "bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4N\n"
- "Cj4gwqAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gwqAjaW5jbHVkZSA8bGludXgvZXJyLmg+\n"
- "DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiBAQCAtMjE1LDYgKzIxNiwyNSBAQCBz\n"
- "dGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgYXhzMTB4X3BsbF9vcHMgPSB7DQo+IMKgCS5zZXRf\n"
- "cmF0ZSA9IGF4czEweF9wbGxfc2V0X3JhdGUsDQo+IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lk\n"
- "IHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGRldmljZV9ub2Rl\n"
- "ICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdl\n"
- "IHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+\n"
- "ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVx\n"
- "dWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5h\n"
- "YmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5ub3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9k\n"
- "ZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRl\n"
- "KGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlwcl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sg\n"
- "cmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0\n"
- "byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVkX3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3Rh\n"
- "dGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2\n"
- "KQ0KPiDCoHsNCj4gwqAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4gQEAgLTI1\n"
- "OCw4ICsyNzgsMTUgQEAgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19wcm9iZShzdHJ1Y3QgcGxh\n"
- "dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiDCoAkJcmV0dXJuIHJldDsNCj4gwqAJfQ0KPiDCoA0KPiAt\n"
- "CXJldHVybiBvZl9jbGtfYWRkX2h3X3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX2h3X3Np\n"
- "bXBsZV9nZXQsDQo+IC0JCQkmcGxsX2Nsay0+aHcpOw0KPiArCXJldCA9wqDCoG9mX2Nsa19hZGRf\n"
- "aHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2ltcGxlX2dldCwNCj4gKwkJCQnC\n"
- "oMKgwqDCoMKgwqAmcGxsX2Nsay0+aHcpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7\n"
- "DQo+ICsNCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kg\n"
- "aW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4gKwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xr\n"
- "LT5ody5jbGssIGRldi0+b2Zfbm9kZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gwqB9DQo+IMKg\n"
- "DQo+IMKgc3RhdGljIGludCBheHMxMHhfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl\n"
- "dmljZSAqcGRldikNCj4gQEAgLTMxMSw2ICszMzgsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2Zf\n"
- "YXhzMTB4X3BsbF9jbGtfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiDCoAkJZ290\n"
- "byBlcnJfdW5yZWdpc3Rlcl9jbGs7DQo+IMKgCX0NCj4gwqANCj4gKwkvKiBJZiB3ZSBzcGVjaWZ5\n"
- "IGluaXRpYWwgcGxsIG91dHB1dCBmcmVxdWVuY3kgaW4gZHRzIHRyeSB0byBzZXQgaXQgKi8NCj4g\n"
- "KwlzZXRfcGxsX3JhdGVfZnJvbV9vZihwbGxfY2xrLT5ody5jbGssIG5vZGUpOw0KPiArDQo+IMKg\n"
- "CXJldHVybjsNCj4gwqANCj4gwqBlcnJfdW5yZWdpc3Rlcl9jbGs6DQo+IGRpZmYgLS1naXQgYS9k\n"
- "cml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYyBiL2RyaXZlcnMvY2xrL2Nsay1oc2RrLXBsbC5jDQo+\n"
- "IGluZGV4IGJiZjIzNzE3Li43NGZkMDA2IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2Nsay9jbGst\n"
- "aHNkay1wbGwuYw0KPiArKysgYi9kcml2ZXJzL2Nsay9jbGstaHNkay1wbGwuYw0KPiBAQCAtOSw2\n"
- "ICs5LDcgQEANCj4gwqAgKi8NCj4gwqANCj4gwqAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy\n"
- "Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RlbGF5\n"
- "Lmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiDCoCNpbmNsdWRlIDxsaW51eC9l\n"
- "cnIuaD4NCj4gQEAgLTI5NSw2ICsyOTYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3Bz\n"
- "IGhzZGtfcGxsX29wcyA9IHsNCj4gwqAJLnNldF9yYXRlID0gaHNka19wbGxfc2V0X3JhdGUsDQo+\n"
- "IMKgfTsNCj4gwqANCj4gK3N0YXRpYyB2b2lkIHNldF9wbGxfcmF0ZV9mcm9tX29mKHN0cnVjdCBj\n"
- "bGsgKmNsaywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiArew0KPiArCXUzMiByZXF1ZXN0\n"
- "ZWRfcmF0ZTsNCj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZy\n"
- "ZXF1ZW5jeSB0cnkgdG8gc2V0IGl0ICovDQo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5v\n"
- "ZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlyZXR1cm47DQo+\n"
- "ICsNCj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGNsaykpIHsNCj4gKwkJcHJfZXJyKCJDYW5u\n"
- "b3QgZW5hYmxlICVzIGNsb2NrLlxuIiwgbm9kZS0+bmFtZSk7DQo+ICsJCXJldHVybjsNCj4gKwl9\n"
- "DQo+ICsNCj4gKwlpZiAoY2xrX3NldF9yYXRlKGNsaywgcmVxdWVzdGVkX3JhdGUpKQ0KPiArCQlw\n"
- "cl9lcnIoIkNhbm5vdCBzZXQgJXMgY2xvY2sgcmF0ZS5cbiIsIG5vZGUtPm5hbWUpOw0KPiArDQo+\n"
- "ICsJcHJfZGVidWcoIlNldCAlcyBjbG9jayB0byAldVxuIiwgbm9kZS0+bmFtZSwgcmVxdWVzdGVk\n"
- "X3JhdGUpOw0KPiArfQ0KPiArDQo+IMKgc3RhdGljIGludCBoc2RrX3BsbF9jbGtfcHJvYmUoc3Ry\n"
- "dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gwqB7DQo+IMKgCWludCByZXQ7DQo+IEBAIC0z\n"
- "NDAsOCArMzYwLDE1IEBAIHN0YXRpYyBpbnQgaHNka19wbGxfY2xrX3Byb2JlKHN0cnVjdCBwbGF0\n"
- "Zm9ybV9kZXZpY2UgKnBkZXYpDQo+IMKgCQlyZXR1cm4gcmV0Ow0KPiDCoAl9DQo+IMKgDQo+IC0J\n"
- "cmV0dXJuIG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdfc2lt\n"
- "cGxlX2dldCwNCj4gLQkJCSZwbGxfY2xrLT5odyk7DQo+ICsJcmV0ID3CoMKgb2ZfY2xrX2FkZF9o\n"
- "d19wcm92aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19od19zaW1wbGVfZ2V0LA0KPiArCQkJCcKg\n"
- "wqDCoMKgwqDCoCZwbGxfY2xrLT5odyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsN\n"
- "Cj4gKw0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5pdGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBp\n"
- "biBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNldF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGst\n"
- "Pmh3LmNsaywgZGV2LT5vZl9ub2RlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiDCoH0NCj4gwqAN\n"
- "Cj4gwqBzdGF0aWMgaW50IGhzZGtfcGxsX2Nsa19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj\n"
- "ZSAqcGRldikNCj4gQEAgLTQwMCw2ICs0MjcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb2ZfaHNk\n"
- "a19wbGxfY2xrX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCj4gwqAJCWdvdG8gZXJy\n"
- "X3VubWFwX3NwZWNfcmVnczsNCj4gwqAJfQ0KPiDCoA0KPiArCS8qIElmIHdlIHNwZWNpZnkgaW5p\n"
- "dGlhbCBwbGwgb3V0cHV0IGZyZXF1ZW5jeSBpbiBkdHMgdHJ5IHRvIHNldCBpdCAqLw0KPiArCXNl\n"
- "dF9wbGxfcmF0ZV9mcm9tX29mKHBsbF9jbGstPmh3LmNsaywgbm9kZSk7DQo+ICsNCj4gwqAJcmV0\n"
- "dXJuOw0KPiDCoA0KPiDCoGVycl91bm1hcF9zcGVjX3JlZ3M6DQotLSANCsKgRXVnZW5peSBQYWx0\n"
- c2V2
+ "Hi Stephen, Michael,\n"
+ "\n"
+ "Please treat this message as a polite reminder to review my patch.\n"
+ "It would be really nice to see this patch in 4.15.\n"
+ "\n"
+ "Thanks.\n"
+ "\n"
+ "On Fri, 2017-09-29 at 16:13 +0300, Eugeniy Paltsev wrote:\n"
+ "> Add option to set initial output frequency of plls via\n"
+ "> \"clock-frequency\" property in pll's device tree node.\n"
+ "> This frequency will be set while pll driver probed.\n"
+ "> \n"
+ "> The usage example is setting CPU clock frequency on boot\n"
+ "> See discussion:\n"
+ "> https://www.mail-archive.com/linux-snps-arc@lists.infradead.org/msg02689.html\n"
+ "> \n"
+ "> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>\n"
+ "> ---\n"
+ "> \302\240.../bindings/clock/snps,hsdk-pll-clock.txt\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2405 ++++\n"
+ "> \302\240.../devicetree/bindings/clock/snps,pll-clock.txt\302\240\302\240\302\240|\302\240\302\2405 ++++\n"
+ "> \302\240drivers/clk/axs10x/pll_clock.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 34 ++++++++++++++++++++--\n"
+ "> \302\240drivers/clk/clk-hsdk-pll.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 34 ++++++++++++++++++++--\n"
+ "> \302\2404 files changed, 74 insertions(+), 4 deletions(-)\n"
+ "> \n"
+ "> diff --git a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt\n"
+ "> index c56c755..5703059 100644\n"
+ "> --- a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt\n"
+ "> +++ b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt\n"
+ "> @@ -13,6 +13,10 @@ Required properties:\n"
+ "> \302\240- clocks: shall be the input parent clock phandle for the PLL.\n"
+ "> \302\240- #clock-cells: from common clock binding; Should always be set to 0.\n"
+ "> \302\240\n"
+ "> +Optional properties:\n"
+ "> +- clock-frequency: output frequency generated by pll in Hz which will be set\n"
+ "> +while probing. Should be a single cell.\n"
+ "> +\n"
+ "> \302\240Example:\n"
+ "> \302\240\tinput_clk: input-clk {\n"
+ "> \302\240\t\tclock-frequency = <33333333>;\n"
+ "> @@ -25,4 +29,5 @@ Example:\n"
+ "> \302\240\t\treg = <0x00 0x10>;\n"
+ "> \302\240\t\t#clock-cells = <0>;\n"
+ "> \302\240\t\tclocks = <&input_clk>;\n"
+ "> +\t\tclock-frequency = <1000000000>;\n"
+ "> \302\240\t};\n"
+ "> diff --git a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt\n"
+ "> index 11fe487..5908f99 100644\n"
+ "> --- a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt\n"
+ "> +++ b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt\n"
+ "> @@ -13,6 +13,10 @@ registers and second for corresponding LOCK CGU register.\n"
+ "> \302\240- clocks: shall be the input parent clock phandle for the PLL.\n"
+ "> \302\240- #clock-cells: from common clock binding; Should always be set to 0.\n"
+ "> \302\240\n"
+ "> +Optional properties:\n"
+ "> +- clock-frequency: output frequency generated by pll in Hz which will be set\n"
+ "> +while probing. Should be a single cell.\n"
+ "> +\n"
+ "> \302\240Example:\n"
+ "> \302\240\tinput-clk: input-clk {\n"
+ "> \302\240\t\tclock-frequency = <33333333>;\n"
+ "> @@ -25,4 +29,5 @@ Example:\n"
+ "> \302\240\t\treg = <0x80 0x10>, <0x100 0x10>;\n"
+ "> \302\240\t\t#clock-cells = <0>;\n"
+ "> \302\240\t\tclocks = <&input-clk>;\n"
+ "> +\t\tclock-frequency = <100000000>;\n"
+ "> \302\240\t};\n"
+ "> diff --git a/drivers/clk/axs10x/pll_clock.c b/drivers/clk/axs10x/pll_clock.c\n"
+ "> index 25d8c24..3f4345d 100644\n"
+ "> --- a/drivers/clk/axs10x/pll_clock.c\n"
+ "> +++ b/drivers/clk/axs10x/pll_clock.c\n"
+ "> @@ -11,6 +11,7 @@\n"
+ "> \302\240#include <linux/platform_device.h>\n"
+ "> \302\240#include <linux/module.h>\n"
+ "> \302\240#include <linux/clk-provider.h>\n"
+ "> +#include <linux/clk.h>\n"
+ "> \302\240#include <linux/delay.h>\n"
+ "> \302\240#include <linux/err.h>\n"
+ "> \302\240#include <linux/device.h>\n"
+ "> @@ -215,6 +216,25 @@ static const struct clk_ops axs10x_pll_ops = {\n"
+ "> \302\240\t.set_rate = axs10x_pll_set_rate,\n"
+ "> \302\240};\n"
+ "> \302\240\n"
+ "> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)\n"
+ "> +{\n"
+ "> +\tu32 requested_rate;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency try to set it */\n"
+ "> +\tif (of_property_read_u32(node, \"clock-frequency\", &requested_rate))\n"
+ "> +\t\treturn;\n"
+ "> +\n"
+ "> +\tif (clk_prepare_enable(clk)) {\n"
+ "> +\t\tpr_err(\"Cannot enable %s clock.\\n\", node->name);\n"
+ "> +\t\treturn;\n"
+ "> +\t}\n"
+ "> +\n"
+ "> +\tif (clk_set_rate(clk, requested_rate))\n"
+ "> +\t\tpr_err(\"Cannot set %s clock rate.\\n\", node->name);\n"
+ "> +\n"
+ "> +\tpr_debug(\"Set %s clock to %u\\n\", node->name, requested_rate);\n"
+ "> +}\n"
+ "> +\n"
+ "> \302\240static int axs10x_pll_clk_probe(struct platform_device *pdev)\n"
+ "> \302\240{\n"
+ "> \302\240\tstruct device *dev = &pdev->dev;\n"
+ "> @@ -258,8 +278,15 @@ static int axs10x_pll_clk_probe(struct platform_device *pdev)\n"
+ "> \302\240\t\treturn ret;\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> -\treturn of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> -\t\t\t&pll_clk->hw);\n"
+ "> +\tret =\302\240\302\240of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> +\t\t\t\t\302\240\302\240\302\240\302\240\302\240\302\240&pll_clk->hw);\n"
+ "> +\tif (ret)\n"
+ "> +\t\treturn ret;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);\n"
+ "> +\n"
+ "> +\treturn 0;\n"
+ "> \302\240}\n"
+ "> \302\240\n"
+ "> \302\240static int axs10x_pll_clk_remove(struct platform_device *pdev)\n"
+ "> @@ -311,6 +338,9 @@ static void __init of_axs10x_pll_clk_setup(struct device_node *node)\n"
+ "> \302\240\t\tgoto err_unregister_clk;\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, node);\n"
+ "> +\n"
+ "> \302\240\treturn;\n"
+ "> \302\240\n"
+ "> \302\240err_unregister_clk:\n"
+ "> diff --git a/drivers/clk/clk-hsdk-pll.c b/drivers/clk/clk-hsdk-pll.c\n"
+ "> index bbf23717..74fd006 100644\n"
+ "> --- a/drivers/clk/clk-hsdk-pll.c\n"
+ "> +++ b/drivers/clk/clk-hsdk-pll.c\n"
+ "> @@ -9,6 +9,7 @@\n"
+ "> \302\240 */\n"
+ "> \302\240\n"
+ "> \302\240#include <linux/clk-provider.h>\n"
+ "> +#include <linux/clk.h>\n"
+ "> \302\240#include <linux/delay.h>\n"
+ "> \302\240#include <linux/device.h>\n"
+ "> \302\240#include <linux/err.h>\n"
+ "> @@ -295,6 +296,25 @@ static const struct clk_ops hsdk_pll_ops = {\n"
+ "> \302\240\t.set_rate = hsdk_pll_set_rate,\n"
+ "> \302\240};\n"
+ "> \302\240\n"
+ "> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)\n"
+ "> +{\n"
+ "> +\tu32 requested_rate;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency try to set it */\n"
+ "> +\tif (of_property_read_u32(node, \"clock-frequency\", &requested_rate))\n"
+ "> +\t\treturn;\n"
+ "> +\n"
+ "> +\tif (clk_prepare_enable(clk)) {\n"
+ "> +\t\tpr_err(\"Cannot enable %s clock.\\n\", node->name);\n"
+ "> +\t\treturn;\n"
+ "> +\t}\n"
+ "> +\n"
+ "> +\tif (clk_set_rate(clk, requested_rate))\n"
+ "> +\t\tpr_err(\"Cannot set %s clock rate.\\n\", node->name);\n"
+ "> +\n"
+ "> +\tpr_debug(\"Set %s clock to %u\\n\", node->name, requested_rate);\n"
+ "> +}\n"
+ "> +\n"
+ "> \302\240static int hsdk_pll_clk_probe(struct platform_device *pdev)\n"
+ "> \302\240{\n"
+ "> \302\240\tint ret;\n"
+ "> @@ -340,8 +360,15 @@ static int hsdk_pll_clk_probe(struct platform_device *pdev)\n"
+ "> \302\240\t\treturn ret;\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> -\treturn of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> -\t\t\t&pll_clk->hw);\n"
+ "> +\tret =\302\240\302\240of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,\n"
+ "> +\t\t\t\t\302\240\302\240\302\240\302\240\302\240\302\240&pll_clk->hw);\n"
+ "> +\tif (ret)\n"
+ "> +\t\treturn ret;\n"
+ "> +\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);\n"
+ "> +\n"
+ "> +\treturn 0;\n"
+ "> \302\240}\n"
+ "> \302\240\n"
+ "> \302\240static int hsdk_pll_clk_remove(struct platform_device *pdev)\n"
+ "> @@ -400,6 +427,9 @@ static void __init of_hsdk_pll_clk_setup(struct device_node *node)\n"
+ "> \302\240\t\tgoto err_unmap_spec_regs;\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> +\t/* If we specify initial pll output frequency in dts try to set it */\n"
+ "> +\tset_pll_rate_from_of(pll_clk->hw.clk, node);\n"
+ "> +\n"
+ "> \302\240\treturn;\n"
+ "> \302\240\n"
+ "> \302\240err_unmap_spec_regs:\n"
+ "-- \n"
+ "\302\240Eugeniy Paltsev"
 
-19d1afb0b88c8a52845288fab6c23ef67b5d464f5d523eab99ad39e5bdc1381c
+7beebb4ece846e83846691af9bcce68c862aa51aa404a96b385c91f04d9c49cb

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.