diff for duplicates of <1510587328.2699.8.camel@synopsys.com>
diff --git a/a/1.txt b/N1/1.txt
index 949f1f5..b3e1e4e 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,200 +1,126 @@
-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
\ No newline at end of file
+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
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index 8728207..efac546 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -28,206 +28,132 @@
"b\0"
]
[
- "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"
+ "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"
]
-7beebb4ece846e83846691af9bcce68c862aa51aa404a96b385c91f04d9c49cb
+19d1afb0b88c8a52845288fab6c23ef67b5d464f5d523eab99ad39e5bdc1381c
diff --git a/a/1.txt b/N2/1.txt
index 949f1f5..4304691 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -5,81 +5,81 @@ 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:
+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@lists.infradead.org/msg02689.html
+> https://www.mail-archive.com/linux-snps-arc at lists.infradead.org/msg02689.html
>
-> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
+> 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(-)
+> ?.../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.
->
+> ?- 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>;
+> ?Example:
+> ? input_clk: input-clk {
+> ? clock-frequency = <33333333>;
> @@ -25,4 +29,5 @@ Example:
-> reg = <0x00 0x10>;
-> #clock-cells = <0>;
-> clocks = <&input_clk>;
+> ? 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.
->
+> ?- 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>;
+> ?Example:
+> ? input-clk: input-clk {
+> ? clock-frequency = <33333333>;
> @@ -25,4 +29,5 @@ Example:
-> reg = <0x80 0x10>, <0x100 0x10>;
-> #clock-cells = <0>;
-> clocks = <&input-clk>;
+> ? 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/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>
+> ?#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,
-> };
->
+> ? .set_rate = axs10x_pll_set_rate,
+> ?};
+> ?
> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)
> +{
> + u32 requested_rate;
@@ -99,17 +99,17 @@ On Fri, 2017-09-29 at 16:13 +0300, Eugeniy Paltsev wrote:
> + 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;
+> ?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 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);
+> + ret =??of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> + ??????&pll_clk->hw);
> + if (ret)
> + return ret;
> +
@@ -117,35 +117,35 @@ On Fri, 2017-09-29 at 16:13 +0300, Eugeniy Paltsev wrote:
> + set_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);
> +
> + return 0;
-> }
->
-> static int axs10x_pll_clk_remove(struct platform_device *pdev)
+> ?}
+> ?
+> ?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;
-> }
->
+> ? 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:
+> ? 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-provider.h>
> +#include <linux/clk.h>
-> #include <linux/delay.h>
-> #include <linux/device.h>
-> #include <linux/err.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,
-> };
->
+> ? .set_rate = hsdk_pll_set_rate,
+> ?};
+> ?
> +static void set_pll_rate_from_of(struct clk *clk, struct device_node *node)
> +{
> + u32 requested_rate;
@@ -165,17 +165,17 @@ On Fri, 2017-09-29 at 16:13 +0300, Eugeniy Paltsev wrote:
> + pr_debug("Set %s clock to %u\n", node->name, requested_rate);
> +}
> +
-> static int hsdk_pll_clk_probe(struct platform_device *pdev)
-> {
-> int ret;
+> ?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 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);
+> + ret =??of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+> + ??????&pll_clk->hw);
> + if (ret)
> + return ret;
> +
@@ -183,18 +183,18 @@ On Fri, 2017-09-29 at 16:13 +0300, Eugeniy Paltsev wrote:
> + set_pll_rate_from_of(pll_clk->hw.clk, dev->of_node);
> +
> + return 0;
-> }
->
-> static int hsdk_pll_clk_remove(struct platform_device *pdev)
+> ?}
+> ?
+> ?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;
-> }
->
+> ? 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:
+> ? return;
+> ?
+> ?err_unmap_spec_regs:
--
- Eugeniy Paltsev
\ No newline at end of file
+?Eugeniy Paltsev
\ No newline at end of file
diff --git a/a/content_digest b/N2/content_digest
index 8728207..1dab433 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -2,24 +2,16 @@
"ref\00020170929131357.26796-1-Eugeniy.Paltsev\@synopsys.com\0"
]
[
- "From\0Eugeniy Paltsev <Eugeniy.Paltsev\@synopsys.com>\0"
+ "From\0Eugeniy.Paltsev\@synopsys.com (Eugeniy Paltsev)\0"
]
[
- "Subject\0Re: [PATCH] CLK: ARC: Set initial pll output frequency specified in device tree\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"
]
[
"\0000:1\0"
@@ -35,81 +27,81 @@
"\n",
"Thanks.\n",
"\n",
- "On Fri, 2017-09-29 at 16:13 +0300, Eugeniy Paltsev wrote:\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\@lists.infradead.org/msg02689.html\n",
+ "> https://www.mail-archive.com/linux-snps-arc at lists.infradead.org/msg02689.html\n",
"> \n",
- "> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev\@synopsys.com>\n",
+ "> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev at 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",
+ "> ?.../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",
- "> \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",
+ "> ?- 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",
- "> \302\240Example:\n",
- "> \302\240\tinput_clk: input-clk {\n",
- "> \302\240\t\tclock-frequency = <33333333>;\n",
+ "> ?Example:\n",
+ "> ?\tinput_clk: input-clk {\n",
+ "> ?\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\treg = <0x00 0x10>;\n",
+ "> ?\t\t#clock-cells = <0>;\n",
+ "> ?\t\tclocks = <&input_clk>;\n",
"> +\t\tclock-frequency = <1000000000>;\n",
- "> \302\240\t};\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",
- "> \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",
+ "> ?- 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",
- "> \302\240Example:\n",
- "> \302\240\tinput-clk: input-clk {\n",
- "> \302\240\t\tclock-frequency = <33333333>;\n",
+ "> ?Example:\n",
+ "> ?\tinput-clk: input-clk {\n",
+ "> ?\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\treg = <0x80 0x10>, <0x100 0x10>;\n",
+ "> ?\t\t#clock-cells = <0>;\n",
+ "> ?\t\tclocks = <&input-clk>;\n",
"> +\t\tclock-frequency = <100000000>;\n",
- "> \302\240\t};\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",
- "> \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/platform_device.h>\n",
+ "> ?#include <linux/module.h>\n",
+ "> ?#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",
+ "> ?#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",
- "> \302\240\t.set_rate = axs10x_pll_set_rate,\n",
- "> \302\240};\n",
- "> \302\240\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",
@@ -129,17 +121,17 @@
"> +\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",
+ "> ?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",
- "> \302\240\t\treturn ret;\n",
- "> \302\240\t}\n",
- "> \302\240\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 =\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",
+ "> +\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",
@@ -147,35 +139,35 @@
"> +\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",
+ "> ?}\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",
- "> \302\240\t\tgoto err_unregister_clk;\n",
- "> \302\240\t}\n",
- "> \302\240\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",
- "> \302\240\treturn;\n",
- "> \302\240\n",
- "> \302\240err_unregister_clk:\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",
- "> \302\240 */\n",
- "> \302\240\n",
- "> \302\240#include <linux/clk-provider.h>\n",
+ "> ? */\n",
+ "> ?\n",
+ "> ?#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",
+ "> ?#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",
- "> \302\240\t.set_rate = hsdk_pll_set_rate,\n",
- "> \302\240};\n",
- "> \302\240\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",
@@ -195,17 +187,17 @@
"> +\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",
+ "> ?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",
- "> \302\240\t\treturn ret;\n",
- "> \302\240\t}\n",
- "> \302\240\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 =\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",
+ "> +\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",
@@ -213,21 +205,21 @@
"> +\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",
+ "> ?}\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",
- "> \302\240\t\tgoto err_unmap_spec_regs;\n",
- "> \302\240\t}\n",
- "> \302\240\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",
- "> \302\240\treturn;\n",
- "> \302\240\n",
- "> \302\240err_unmap_spec_regs:\n",
+ "> ?\treturn;\n",
+ "> ?\n",
+ "> ?err_unmap_spec_regs:\n",
"-- \n",
- "\302\240Eugeniy Paltsev"
+ "?Eugeniy Paltsev"
]
-7beebb4ece846e83846691af9bcce68c862aa51aa404a96b385c91f04d9c49cb
+b44ab7cbb8e8e8cefbf0bef4f6b643ccf1db67cebf7b2f9fbd66c04e521a1bf4
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.