From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vince Hsu Subject: Re: [PATCH nouveau 06/11] platform: complete the power up/down sequence Date: Thu, 25 Dec 2014 10:42:58 +0800 Message-ID: <549B79B2.6010301@nvidia.com> References: <1419331204-26679-1-git-send-email-vinceh@nvidia.com> <1419331204-26679-7-git-send-email-vinceh@nvidia.com> <1419427385.2179.13.camel@lynxeye.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1419427385.2179.13.camel-8ppwABl0HbeELgA04lAiVw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Lucas Stach Cc: swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, seven-FA6nBp6kBxZzu6KWmfFNGwC/G2K4zDHf@public.gmane.org List-Id: linux-tegra@vger.kernel.org Ck9uIDEyLzI0LzIwMTQgMDk6MjMgUE0sIEx1Y2FzIFN0YWNoIHdyb3RlOgo+IEFtIERpZW5zdGFn LCBkZW4gMjMuMTIuMjAxNCwgMTg6MzkgKzA4MDAgc2NocmllYiBWaW5jZSBIc3U6Cj4+IFRoaXMg cGF0Y2ggYWRkcyBzb21lIG1pc3NpbmcgcGllY2VzIG9mIHRoZSByYWlsIGdhaW5nL3VuZ2F0aW5n IHNlcXVlbmNlIHRoYXQKPj4gY2FuIGltcHJvdmUgdGhlIHN0YWJpbGl0eSBpbiB0aGVvcnkuCj4+ Cj4+IFNpZ25lZC1vZmYtYnk6IFZpbmNlIEhzdSA8dmluY2VoQG52aWRpYS5jb20+Cj4+IC0tLQo+ PiAgIGRybS9ub3V2ZWF1X3BsYXRmb3JtLmMgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPj4gICBkcm0vbm91dmVhdV9wbGF0Zm9ybS5oIHwgIDMgKysrCj4+ ICAgMiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1naXQgYS9k cm0vbm91dmVhdV9wbGF0Zm9ybS5jIGIvZHJtL25vdXZlYXVfcGxhdGZvcm0uYwo+PiBpbmRleCA2 ODc4OGIxN2E0NWMuLjUyN2ZlMjM1OGZjOSAxMDA2NDQKPj4gLS0tIGEvZHJtL25vdXZlYXVfcGxh dGZvcm0uYwo+PiArKysgYi9kcm0vbm91dmVhdV9wbGF0Zm9ybS5jCj4+IEBAIC0yNSw5ICsyNSwx MSBAQAo+PiAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gICAjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICAgI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPj4gICAjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KPj4g ICAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4+ICAgI2luY2x1ZGUgPHNv Yy90ZWdyYS9mdXNlLmg+Cj4+ICsjaW5jbHVkZSA8c29jL3RlZ3JhL21jLmg+Cj4+ICAgI2luY2x1 ZGUgPHNvYy90ZWdyYS9wbWMuaD4KPj4gICAKPj4gICAjaW5jbHVkZSAibm91dmVhdV9kcm0uaCIK Pj4gQEAgLTYxLDYgKzYzLDkgQEAgc3RhdGljIGludCBub3V2ZWF1X3BsYXRmb3JtX3Bvd2VyX3Vw KHN0cnVjdCBub3V2ZWF1X3BsYXRmb3JtX2dwdSAqZ3B1KQo+PiAgIAlyZXNldF9jb250cm9sX2Rl YXNzZXJ0KGdwdS0+cnN0KTsKPj4gICAJdWRlbGF5KDEwKTsKPj4gICAKPj4gKwl0ZWdyYV9tY19m bHVzaChncHUtPm1jLCBncHUtPnN3Z3JvdXAsIGZhbHNlKTsKPj4gKwl1ZGVsYXkoMTApOwo+PiAr Cj4+ICAgCXJldHVybiAwOwo+PiAgIAo+PiAgIGVycl9jbGFtcDoKPj4gQEAgLTc3LDYgKzgyLDE0 IEBAIHN0YXRpYyBpbnQgbm91dmVhdV9wbGF0Zm9ybV9wb3dlcl9kb3duKHN0cnVjdCBub3V2ZWF1 X3BsYXRmb3JtX2dwdSAqZ3B1KQo+PiAgIHsKPj4gICAJaW50IGVycjsKPj4gICAKPj4gKwl0ZWdy YV9tY19mbHVzaChncHUtPm1jLCBncHUtPnN3Z3JvdXAsIHRydWUpOwo+PiArCXVkZWxheSgxMCk7 Cj4+ICsKPj4gKwllcnIgPSB0ZWdyYV9wb3dlcmdhdGVfZ3B1X3NldF9jbGFtcGluZyh0cnVlKTsK Pj4gKwlpZiAoZXJyKQo+PiArCQlyZXR1cm4gZXJyOwo+PiArCXVkZWxheSgxMCk7Cj4+ICsKPj4g ICAJcmVzZXRfY29udHJvbF9hc3NlcnQoZ3B1LT5yc3QpOwo+PiAgIAl1ZGVsYXkoMTApOwo+PiAg IAo+PiBAQCAtOTEsNiArMTA0LDMxIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9wbGF0Zm9ybV9wb3dl cl9kb3duKHN0cnVjdCBub3V2ZWF1X3BsYXRmb3JtX2dwdSAqZ3B1KQo+PiAgIAlyZXR1cm4gMDsK Pj4gICB9Cj4+ICAgCj4+ICtzdGF0aWMgaW50IG5vdXZlYXVfcGxhdGZvcm1fZ2V0X21jKHN0cnVj dCBkZXZpY2UgKmRldiwKPj4gKwkJc3RydWN0IHRlZ3JhX21jICoqbWMsIHVuc2lnbmVkIGludCAq c3dncm91cCkKPiBVaG0sIG5vLiBJZiB0aGlzIGlzIG5lZWRlZCB0aGlzIGhhcyB0byBiZSBhIFRl Z3JhIE1DIGZ1bmN0aW9uIGFuZCBub3QKPiBidXJyaWVkIGludG8gbm91dmVhdSBjb2RlLiBZb3Ug YXJlIHVzaW5nIGtub3dsZWRnZSBhYm91dCB0aGUgaW50ZXJuYWwKPiB3b3JraW5ncyBvZiB0aGUg TUMgZHJpdmVyIGhlcmUuCj4KPiBBbHNvIHRoaXMgc2hvdWxkIHByb2JhYmx5IG9ubHkgdGFrZSB0 aGUgRHQgbm9kZSBwb2ludGVyIGFzIGFyZ3VtZW50IGFuZAo+IHJldHVybiBhIHNvbWV0aGluZyBs aWtlIGEgdGVncmFfbWNfY2xpZW50IHN0cnVjdCB0aGF0IGNvbnRhaW5zIGJvdGggdGhlCj4gTUMg ZGV2aWNlIHBvaW50ZXIgYW5kIHRoZSBzd2dyb3VwIHNvIHlvdSBjYW4gcGFzcyB0aGF0IHRvCj4g dGVncmFfbWNfZmx1c2goKS4KR29vZCBpZGVhLiBJIHdpbGwgaGF2ZSBzb21ldGhpbmcgYXMgYmVs b3cgaW4gVjIgaWYgdGhlcmUgaXMgbm8gb3RoZXIgCmNvbW1lbnRzIGZvciB0aGlzLgoKdGVncmFf bWNfY2xpZW50ICp0ZWdyYV9tY19maW5kX2NsaWVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUp CnsKICAgICAuLi4KICAgICByZXQgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhub2RlLCAi bnZpZGlhLG1lbW9yeS1jbGllbnQiLCAuLi4pCiAgICAgLi4uCn0KClRoZXJlIHdlcmUgc29tZSBk aXNjdXNzaW9uIGFib3V0IHRoaXMgZmV3IHdlZWtzIGFnby4gSSdtIG5vdCBzdXJlIAp3aGV0aGVy IHdlIGhhdmUgc29tZSBjb25jbHVzaW9uL2ltcGxlbWVudGF0aW9uIHRob3VnaC4gVGhpZXJyeT8K Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFpbC9saW51eC1hcm0ta2VybmVsLzIw MTQtRGVjZW1iZXIvMzA4NzAzLmh0bWwKCj4KPj4gK3sKPj4gKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9h cmdzIGFyZ3M7Cj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKPj4gKwlpbnQgcmV0 Owo+PiArCj4+ICsJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2FyZ3MoZGV2LT5v Zl9ub2RlLCAibWMiLAo+PiArCQkJCTEsIDAsICZhcmdzKTsKPj4gKwlpZiAocmV0KQo+PiArCQly ZXR1cm4gcmV0Owo+PiArCj4+ICsJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoYXJncy5u cCk7Cj4+ICsJaWYgKCFwZGV2KQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPiBUaGlzIGlzIHdyb25n LCB5b3UgbmVlZCB0byBoYW5kbGUgLUVQUk9CRV9ERUZFUiBoZXJlLgpJbmRlZWQuIFdpbGwgZml4 Lgo+Cj4+ICsKPj4gKwkqbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4gKwlpZiAo ISptYykKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwkqc3dncm91cCA9IGFyZ3MuYXJn c1swXTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICAgc3RhdGljIGludCBub3V2 ZWF1X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAgewo+ PiAgIAlzdHJ1Y3Qgbm91dmVhdV9wbGF0Zm9ybV9ncHUgKmdwdTsKPj4gQEAgLTExOCw2ICsxNTYs MTAgQEAgc3RhdGljIGludCBub3V2ZWF1X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4+ICAgCWlmIChJU19FUlIoZ3B1LT5jbGtfcHdyKSkKPj4gICAJCXJldHVy biBQVFJfRVJSKGdwdS0+Y2xrX3B3cik7Cj4+ICAgCj4+ICsJZXJyID0gbm91dmVhdV9wbGF0Zm9y bV9nZXRfbWMoJnBkZXYtPmRldiwgJmdwdS0+bWMsICZncHUtPnN3Z3JvdXApOwo+PiArCWlmIChl cnIpCj4+ICsJCXJldHVybiBlcnI7Cj4+ICsKPj4gICAJZXJyID0gbm91dmVhdV9wbGF0Zm9ybV9w b3dlcl91cChncHUpOwo+PiAgIAlpZiAoZXJyKQo+PiAgIAkJcmV0dXJuIGVycjsKPj4gZGlmZiAt LWdpdCBhL2RybS9ub3V2ZWF1X3BsYXRmb3JtLmggYi9kcm0vbm91dmVhdV9wbGF0Zm9ybS5oCj4+ IGluZGV4IDU4YzI4YjU2NTNkNS4uOTY5ZGJkZGQ3ODZkIDEwMDY0NAo+PiAtLS0gYS9kcm0vbm91 dmVhdV9wbGF0Zm9ybS5oCj4+ICsrKyBiL2RybS9ub3V2ZWF1X3BsYXRmb3JtLmgKPj4gQEAgLTM1 LDYgKzM1LDkgQEAgc3RydWN0IG5vdXZlYXVfcGxhdGZvcm1fZ3B1IHsKPj4gICAJc3RydWN0IGNs ayAqY2xrX3B3cjsKPj4gICAKPj4gICAJc3RydWN0IHJlZ3VsYXRvciAqdmRkOwo+PiArCj4+ICsJ c3RydWN0IHRlZ3JhX21jICptYzsKPj4gKwl1bnNpZ25lZCBpbnQgc3dncm91cDsKPj4gICB9Owo+ PiAgIAo+PiAgIHN0cnVjdCBub3V2ZWF1X3BsYXRmb3JtX2RldmljZSB7Cj4KCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0 Ck5vdXZlYXVAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751917AbaLYCmz (ORCPT ); Wed, 24 Dec 2014 21:42:55 -0500 Received: from hqemgate15.nvidia.com ([216.228.121.64]:18031 "EHLO hqemgate15.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751637AbaLYCmx (ORCPT ); Wed, 24 Dec 2014 21:42:53 -0500 X-PGP-Universal: processed; by hqnvupgp07.nvidia.com on Wed, 24 Dec 2014 18:37:29 -0800 Message-ID: <549B79B2.6010301@nvidia.com> Date: Thu, 25 Dec 2014 10:42:58 +0800 From: Vince Hsu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: Lucas Stach CC: , , , , , , , , , Subject: Re: [PATCH nouveau 06/11] platform: complete the power up/down sequence References: <1419331204-26679-1-git-send-email-vinceh@nvidia.com> <1419331204-26679-7-git-send-email-vinceh@nvidia.com> <1419427385.2179.13.camel@lynxeye.de> In-Reply-To: <1419427385.2179.13.camel@lynxeye.de> X-Originating-IP: [10.19.108.126] X-ClientProxiedBy: HKMAIL102.nvidia.com (10.18.16.11) To drhkmail101.nvidia.com (10.25.59.15) Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/24/2014 09:23 PM, Lucas Stach wrote: > Am Dienstag, den 23.12.2014, 18:39 +0800 schrieb Vince Hsu: >> This patch adds some missing pieces of the rail gaing/ungating sequence that >> can improve the stability in theory. >> >> Signed-off-by: Vince Hsu >> --- >> drm/nouveau_platform.c | 42 ++++++++++++++++++++++++++++++++++++++++++ >> drm/nouveau_platform.h | 3 +++ >> 2 files changed, 45 insertions(+) >> >> diff --git a/drm/nouveau_platform.c b/drm/nouveau_platform.c >> index 68788b17a45c..527fe2358fc9 100644 >> --- a/drm/nouveau_platform.c >> +++ b/drm/nouveau_platform.c >> @@ -25,9 +25,11 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> #include >> +#include >> #include >> >> #include "nouveau_drm.h" >> @@ -61,6 +63,9 @@ static int nouveau_platform_power_up(struct nouveau_platform_gpu *gpu) >> reset_control_deassert(gpu->rst); >> udelay(10); >> >> + tegra_mc_flush(gpu->mc, gpu->swgroup, false); >> + udelay(10); >> + >> return 0; >> >> err_clamp: >> @@ -77,6 +82,14 @@ static int nouveau_platform_power_down(struct nouveau_platform_gpu *gpu) >> { >> int err; >> >> + tegra_mc_flush(gpu->mc, gpu->swgroup, true); >> + udelay(10); >> + >> + err = tegra_powergate_gpu_set_clamping(true); >> + if (err) >> + return err; >> + udelay(10); >> + >> reset_control_assert(gpu->rst); >> udelay(10); >> >> @@ -91,6 +104,31 @@ static int nouveau_platform_power_down(struct nouveau_platform_gpu *gpu) >> return 0; >> } >> >> +static int nouveau_platform_get_mc(struct device *dev, >> + struct tegra_mc **mc, unsigned int *swgroup) > Uhm, no. If this is needed this has to be a Tegra MC function and not > burried into nouveau code. You are using knowledge about the internal > workings of the MC driver here. > > Also this should probably only take the Dt node pointer as argument and > return a something like a tegra_mc_client struct that contains both the > MC device pointer and the swgroup so you can pass that to > tegra_mc_flush(). Good idea. I will have something as below in V2 if there is no other comments for this. tegra_mc_client *tegra_mc_find_client(struct device_node *node) { ... ret = of_parse_phandle_with_args(node, "nvidia,memory-client", ...) ... } There were some discussion about this few weeks ago. I'm not sure whether we have some conclusion/implementation though. Thierry? http://lists.infradead.org/pipermail/linux-arm-kernel/2014-December/308703.html > >> +{ >> + struct of_phandle_args args; >> + struct platform_device *pdev; >> + int ret; >> + >> + ret = of_parse_phandle_with_fixed_args(dev->of_node, "mc", >> + 1, 0, &args); >> + if (ret) >> + return ret; >> + >> + pdev = of_find_device_by_node(args.np); >> + if (!pdev) >> + return -EINVAL; > This is wrong, you need to handle -EPROBE_DEFER here. Indeed. Will fix. > >> + >> + *mc = platform_get_drvdata(pdev); >> + if (!*mc) >> + return -EINVAL; >> + >> + *swgroup = args.args[0]; >> + >> + return 0; >> +} >> + >> static int nouveau_platform_probe(struct platform_device *pdev) >> { >> struct nouveau_platform_gpu *gpu; >> @@ -118,6 +156,10 @@ static int nouveau_platform_probe(struct platform_device *pdev) >> if (IS_ERR(gpu->clk_pwr)) >> return PTR_ERR(gpu->clk_pwr); >> >> + err = nouveau_platform_get_mc(&pdev->dev, &gpu->mc, &gpu->swgroup); >> + if (err) >> + return err; >> + >> err = nouveau_platform_power_up(gpu); >> if (err) >> return err; >> diff --git a/drm/nouveau_platform.h b/drm/nouveau_platform.h >> index 58c28b5653d5..969dbddd786d 100644 >> --- a/drm/nouveau_platform.h >> +++ b/drm/nouveau_platform.h >> @@ -35,6 +35,9 @@ struct nouveau_platform_gpu { >> struct clk *clk_pwr; >> >> struct regulator *vdd; >> + >> + struct tegra_mc *mc; >> + unsigned int swgroup; >> }; >> >> struct nouveau_platform_device { >