From mboxrd@z Thu Jan 1 00:00:00 1970 From: robherring2@gmail.com (Rob Herring) Date: Wed, 11 Sep 2013 11:40:48 -0500 Subject: [PATCH RFC] of: add a basic memory driver In-Reply-To: <1378863781-4235-1-git-send-email-emilio@elopez.com.ar> References: <1378863781-4235-1-git-send-email-emilio@elopez.com.ar> Message-ID: <52309D10.9020708@gmail.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 09/10/2013 08:43 PM, Emilio L?pez wrote: > This driver's only job is to claim and ensure that the necessary clock > for memory operation on a DT-enabled machine remains enabled. > > Signed-off-by: Emilio L?pez > --- > > Hi, > > I am currently facing an issue with the clock setup: a critical but > unclaimed clock gets disabled as a side effect of disabling one of its > children. The clock setup looks something like this: > > PLL > | > ------------ > | | > DDR Others > | > periph This would be more accurate: PLL | ---------------- | | DDR Ctrlr Others | DDR So having a DDR controller node with a clock is the right way to do this. There are other possible needs for describing the DDR controller such as low power modes and ECC. Rob > > The PLL clock is marked with the CLK_IGNORE_UNUSED flag, so on a normal > boot it remains on, even after the unused clocks cleanup code runs. The > problem occurs when someone enables "periph" and then, later on, disables > it: the framework starts disabling clocks upwards on the tree, > eventually switching the PLL off (and that kills the machine, as the memory > clock is shut down). > > There's two possible solutions I can think of: > 1) add some extra checks on the framework to not turn off clocks marked > with such a flag on the non-explicit case (ie, when I'm disabling > some other clock) > 2) create an actual user of the DDR clock, that way it won't get > disabled simply because it's being used. > > I considered 1) and implemented it, but the result was not pretty. This > patch is my take on 2). Please let me know what you think; all feedback > is welcome :) > > Cheers, > > Emilio > > drivers/of/Kconfig | 6 ++++++ > drivers/of/Makefile | 1 + > drivers/of/of_memory.c | 30 ++++++++++++++++++++++++++++++ > 3 files changed, 37 insertions(+) > create mode 100644 drivers/of/of_memory.c > > diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig > index 9d2009a..f6c5e20 100644 > --- a/drivers/of/Kconfig > +++ b/drivers/of/Kconfig > @@ -80,4 +80,10 @@ config OF_RESERVED_MEM > help > Initialization code for DMA reserved memory > > +config OF_MEMORY > + depends on COMMON_CLK > + def_bool y > + help > + Simple memory initialization > + > endmenu # OF > diff --git a/drivers/of/Makefile b/drivers/of/Makefile > index ed9660a..15f0167 100644 > --- a/drivers/of/Makefile > +++ b/drivers/of/Makefile > @@ -10,3 +10,4 @@ obj-$(CONFIG_OF_PCI) += of_pci.o > obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o > obj-$(CONFIG_OF_MTD) += of_mtd.o > obj-$(CONFIG_OF_RESERVED_MEM) += of_reserved_mem.o > +obj-$(CONFIG_OF_MEMORY) += of_memory.o > diff --git a/drivers/of/of_memory.c b/drivers/of/of_memory.c > new file mode 100644 > index 0000000..a833f7a > --- /dev/null > +++ b/drivers/of/of_memory.c > @@ -0,0 +1,30 @@ > +/* > + * Simple memory driver > + */ > + > +#include > +#include > + > +static int __init of_memory_enable(void) > +{ > + struct device_node *np; > + struct clk *clk; > + > + np = of_find_node_by_path("/memory"); > + if (!np) { > + pr_err("no /memory on DT!\n"); > + return 0; > + } > + > + clk = of_clk_get(np, 0); > + if (!IS_ERR(clk)) { > + clk_prepare_enable(clk); > + clk_put(clk); > + } > + > + of_node_put(np); > + > + return 0; > +} > + > +device_initcall(of_memory_enable); > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: Re: [PATCH RFC] of: add a basic memory driver Date: Wed, 11 Sep 2013 11:40:48 -0500 Message-ID: <52309D10.9020708@gmail.com> References: <1378863781-4235-1-git-send-email-emilio@elopez.com.ar> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1378863781-4235-1-git-send-email-emilio@elopez.com.ar> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: =?UTF-8?B?RW1pbGlvIEzDs3Bleg==?= Cc: devicetree@vger.kernel.org, Mike Turquette , rob.herring@calxeda.com, david.lanzendoerfer@o2s.ch, grant.likely@linaro.org, Maxime Ripard , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gMDkvMTAvMjAxMyAwODo0MyBQTSwgRW1pbGlvIEzDs3BleiB3cm90ZToKPiBUaGlzIGRyaXZl cidzIG9ubHkgam9iIGlzIHRvIGNsYWltIGFuZCBlbnN1cmUgdGhhdCB0aGUgbmVjZXNzYXJ5IGNs b2NrCj4gZm9yIG1lbW9yeSBvcGVyYXRpb24gb24gYSBEVC1lbmFibGVkIG1hY2hpbmUgcmVtYWlu cyBlbmFibGVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEVtaWxpbyBMw7NwZXogPGVtaWxpb0BlbG9w ZXouY29tLmFyPgo+IC0tLQo+IAo+IEhpLAo+IAo+IEkgYW0gY3VycmVudGx5IGZhY2luZyBhbiBp c3N1ZSB3aXRoIHRoZSBjbG9jayBzZXR1cDogYSBjcml0aWNhbCBidXQKPiB1bmNsYWltZWQgY2xv Y2sgZ2V0cyBkaXNhYmxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGRpc2FibGluZyBvbmUgb2YgaXRz Cj4gY2hpbGRyZW4uIFRoZSBjbG9jayBzZXR1cCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgo+ IAo+ICAgICAgIFBMTAo+ICAgICAgICB8Cj4gIC0tLS0tLS0tLS0tLQo+ICB8ICAgICAgICAgIHwK PiBERFIgICAgICAgT3RoZXJzCj4gICAgICAgICAgICAgfAo+ICAgICAgICAgICBwZXJpcGgKClRo aXMgd291bGQgYmUgbW9yZSBhY2N1cmF0ZToKCiAgICAgICBQTEwKICAgICAgICB8CiAtLS0tLS0t LS0tLS0tLS0tCiB8ICAgICAgICAgICAgICB8CkREUiBDdHJsciAgICAgT3RoZXJzCiB8CkREUgoK U28gaGF2aW5nIGEgRERSIGNvbnRyb2xsZXIgbm9kZSB3aXRoIGEgY2xvY2sgaXMgdGhlIHJpZ2h0 IHdheSB0byBkbwp0aGlzLiBUaGVyZSBhcmUgb3RoZXIgcG9zc2libGUgbmVlZHMgZm9yIGRlc2Ny aWJpbmcgdGhlIEREUiBjb250cm9sbGVyCnN1Y2ggYXMgbG93IHBvd2VyIG1vZGVzIGFuZCBFQ0Mu CgpSb2IKCj4gCj4gVGhlIFBMTCBjbG9jayBpcyBtYXJrZWQgd2l0aCB0aGUgQ0xLX0lHTk9SRV9V TlVTRUQgZmxhZywgc28gb24gYSBub3JtYWwKPiBib290IGl0IHJlbWFpbnMgb24sIGV2ZW4gYWZ0 ZXIgdGhlIHVudXNlZCBjbG9ja3MgY2xlYW51cCBjb2RlIHJ1bnMuIFRoZQo+IHByb2JsZW0gb2Nj dXJzIHdoZW4gc29tZW9uZSBlbmFibGVzICJwZXJpcGgiIGFuZCB0aGVuLCBsYXRlciBvbiwgZGlz YWJsZXMKPiBpdDogdGhlIGZyYW1ld29yayBzdGFydHMgZGlzYWJsaW5nIGNsb2NrcyB1cHdhcmRz IG9uIHRoZSB0cmVlLCAKPiBldmVudHVhbGx5IHN3aXRjaGluZyB0aGUgUExMIG9mZiAoYW5kIHRo YXQga2lsbHMgdGhlIG1hY2hpbmUsIGFzIHRoZSBtZW1vcnkKPiBjbG9jayBpcyBzaHV0IGRvd24p Lgo+IAo+IFRoZXJlJ3MgdHdvIHBvc3NpYmxlIHNvbHV0aW9ucyBJIGNhbiB0aGluayBvZjoKPiAg MSkgYWRkIHNvbWUgZXh0cmEgY2hlY2tzIG9uIHRoZSBmcmFtZXdvcmsgdG8gbm90IHR1cm4gb2Zm IGNsb2NrcyBtYXJrZWQKPiAgICAgd2l0aCBzdWNoIGEgZmxhZyBvbiB0aGUgbm9uLWV4cGxpY2l0 IGNhc2UgKGllLCB3aGVuIEknbSBkaXNhYmxpbmcKPiAgICAgc29tZSBvdGhlciBjbG9jaykKPiAg MikgY3JlYXRlIGFuIGFjdHVhbCB1c2VyIG9mIHRoZSBERFIgY2xvY2ssIHRoYXQgd2F5IGl0IHdv bid0IGdldAo+ICAgICBkaXNhYmxlZCBzaW1wbHkgYmVjYXVzZSBpdCdzIGJlaW5nIHVzZWQuCj4g Cj4gSSBjb25zaWRlcmVkIDEpIGFuZCBpbXBsZW1lbnRlZCBpdCwgYnV0IHRoZSByZXN1bHQgd2Fz IG5vdCBwcmV0dHkuIFRoaXMgCj4gcGF0Y2ggaXMgbXkgdGFrZSBvbiAyKS4gUGxlYXNlIGxldCBt ZSBrbm93IHdoYXQgeW91IHRoaW5rOyBhbGwgZmVlZGJhY2sKPiBpcyB3ZWxjb21lIDopCj4gCj4g Q2hlZXJzLAo+IAo+IEVtaWxpbwo+IAo+ICBkcml2ZXJzL29mL0tjb25maWcgICAgIHwgIDYgKysr KysrCj4gIGRyaXZlcnMvb2YvTWFrZWZpbGUgICAgfCAgMSArCj4gIGRyaXZlcnMvb2Yvb2ZfbWVt b3J5LmMgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFu Z2VkLCAzNyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL29mL29m X21lbW9yeS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvS2NvbmZpZyBiL2RyaXZlcnMv b2YvS2NvbmZpZwo+IGluZGV4IDlkMjAwOWEuLmY2YzVlMjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9vZi9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9vZi9LY29uZmlnCj4gQEAgLTgwLDQgKzgwLDEw IEBAIGNvbmZpZyBPRl9SRVNFUlZFRF9NRU0KPiAgCWhlbHAKPiAgCSAgSW5pdGlhbGl6YXRpb24g Y29kZSBmb3IgRE1BIHJlc2VydmVkIG1lbW9yeQo+ICAKPiArY29uZmlnIE9GX01FTU9SWQo+ICsJ ZGVwZW5kcyBvbiBDT01NT05fQ0xLCj4gKwlkZWZfYm9vbCB5Cj4gKwloZWxwCj4gKwkgIFNpbXBs ZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24KPiArCj4gIGVuZG1lbnUgIyBPRgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL29mL01ha2VmaWxlIGIvZHJpdmVycy9vZi9NYWtlZmlsZQo+IGluZGV4IGVkOTY2 MGEuLjE1ZjAxNjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9vZi9NYWtlZmlsZQo+ICsrKyBiL2Ry aXZlcnMvb2YvTWFrZWZpbGUKPiBAQCAtMTAsMyArMTAsNCBAQCBvYmotJChDT05GSUdfT0ZfUENJ KQkrPSBvZl9wY2kubwo+ICBvYmotJChDT05GSUdfT0ZfUENJX0lSUSkgICs9IG9mX3BjaV9pcnEu bwo+ICBvYmotJChDT05GSUdfT0ZfTVREKQkrPSBvZl9tdGQubwo+ICBvYmotJChDT05GSUdfT0Zf UkVTRVJWRURfTUVNKSArPSBvZl9yZXNlcnZlZF9tZW0ubwo+ICtvYmotJChDT05GSUdfT0ZfTUVN T1JZKSArPSBvZl9tZW1vcnkubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX21lbW9yeS5j IGIvZHJpdmVycy9vZi9vZl9tZW1vcnkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uYTgzM2Y3YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL29mL29mX21l bW9yeS5jCj4gQEAgLTAsMCArMSwzMCBAQAo+ICsvKgo+ICsgKiBTaW1wbGUgbWVtb3J5IGRyaXZl cgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgv Y2xrLmg+Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBvZl9tZW1vcnlfZW5hYmxlKHZvaWQpCj4g K3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Cj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4gKwo+ ICsJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL21lbW9yeSIpOwo+ICsJaWYgKCFucCkgewo+ ICsJCXByX2Vycigibm8gL21lbW9yeSBvbiBEVCFcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsKPiArCWNsayA9IG9mX2Nsa19nZXQobnAsIDApOwo+ICsJaWYgKCFJU19FUlIoY2xrKSkgewo+ ICsJCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOwo+ICsJCWNsa19wdXQoY2xrKTsKPiArCX0KPiAr Cj4gKwlvZl9ub2RlX3B1dChucCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2Rldmlj ZV9pbml0Y2FsbChvZl9tZW1vcnlfZW5hYmxlKTsKPiAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==