Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp3654345img; Mon, 25 Mar 2019 15:01:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqxm205y2o6r6PCmj4Vw9UgKKwHuCa0kpNGg7TpqQmE1RRtidiTE45CuerltrbxP1n4bPd3l X-Received: by 2002:a63:6ec5:: with SMTP id j188mr25512738pgc.191.1553551278978; Mon, 25 Mar 2019 15:01:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553551278; cv=none; d=google.com; s=arc-20160816; b=MxmL9jPTld1+/AxxH4i8/cjbeU5dnrM5ve/2830hb/TgBAt6XU0bGUR7uIgOYNw9zc OI2lXjeZoiqtSLREEWUY7B4sD0JgCGDBg8FCTs7/bVHABEHt0xfg3mOV8jSaMmlrc0zC 7PJGPFOJeAo4ttzkoj29oHU3t5uhQJCUitH0d/1gfO1ccSg/v+2hBYasqEuCozYCnKhh Xz/PXljvQNnPqXV2NJ01lIqewSJZK1jNPK9HaQZBxHSdRmiAwtZJLePlkuNdYMKevsTN i85miW9MFsARWXN3qtgI3OJZAIJvbIz6QC4Yi43KEVYSVVfD0dqLHL0/V0/P5imE5wKe GjPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Ggfin3UywUcHW+muQtbafPUT/3SV1HcHYg5cYGnm/aY=; b=DWjIbfUSXYSEv3TmnOxqDsyUg1e8SWGuvZS5A4a0m5GXwBPBtToZyKZZ7KqhzVuw8v /JG1jIE86uZbJkb8Nhem/LyLmAPE1EOP6gcQnFmNDPjp1RMc87fJB83I9vSUYPABiQIi rNJ4Ocg+yBYSpR/JyoWXJA/f9QU2C+63EsCy+yU5s3bWTB0WrMDoU7zr6UK3M0LD+Xf/ j6BBB5mbIMv7lFBOtZZZcIuEQAuYqWbM8d0hCLMQ0K5yT8y/P9T6H2MqI0IVUyHquMHE L05Xlhk2CtfuUw/dO2rWN4iul1WNl/5ADWWzEFs15kT9/VHlqSMRex8rjIQXEL+Q+tSm q/Rg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 89si14915850pfs.243.2019.03.25.15.01.04; Mon, 25 Mar 2019 15:01:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730626AbfCYV7O (ORCPT + 99 others); Mon, 25 Mar 2019 17:59:14 -0400 Received: from muru.com ([72.249.23.125]:42626 "EHLO muru.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730597AbfCYV7L (ORCPT ); Mon, 25 Mar 2019 17:59:11 -0400 Received: from hillo.muru.com (localhost [127.0.0.1]) by muru.com (Postfix) with ESMTP id A8C9980CC; Mon, 25 Mar 2019 21:59:23 +0000 (UTC) From: Tony Lindgren To: linux-omap@vger.kernel.org Cc: Dave Gerlach , Faiz Abbas , Greg Kroah-Hartman , Keerthy , Nishanth Menon , Peter Ujfalusi , Roger Quadros , Suman Anna , Tero Kristo , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 06/14] bus: ti-sysc: Enable all clocks directly during init to read revision Date: Mon, 25 Mar 2019 14:58:41 -0700 Message-Id: <20190325215849.13182-7-tony@atomide.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190325215849.13182-1-tony@atomide.com> References: <20190325215849.13182-1-tony@atomide.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The first thing we want to do is just read the module revision register to be able to configure the module specific quirks and configure the module registers. As the interconnect target module may not yet be properly configured and may need a reset first, we don't want to use pm_runtime_get() at this point. To read the revision register, let's just enable the all the clocks for the interconnect target module during init even if the optional clocks are not needed. That way we can read the revision register to configure the quirks needed for PM runtime. Signed-off-by: Tony Lindgren --- drivers/bus/ti-sysc.c | 50 ++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c --- a/drivers/bus/ti-sysc.c +++ b/drivers/bus/ti-sysc.c @@ -1042,39 +1042,45 @@ static int sysc_reset(struct sysc *ddata) 100, MAX_MODULE_SOFTRESET_WAIT); } -/* At this point the module is configured enough to read the revision */ +/* + * At this point the module is configured enough to read the revision but + * module may not be completely configured yet to use PM runtime. Enable + * all clocks directly during init to configure the quirks needed for PM + * runtime based on the revision register. + */ static int sysc_init_module(struct sysc *ddata) { - int error; + int error = 0; + bool manage_clocks = true; if (ddata->cfg.quirks & - (SYSC_QUIRK_NO_IDLE | SYSC_QUIRK_NO_IDLE_ON_INIT)) { - ddata->revision = sysc_read_revision(ddata); - goto rev_quirks; - } + (SYSC_QUIRK_NO_IDLE | SYSC_QUIRK_NO_IDLE_ON_INIT)) + manage_clocks = false; - error = pm_runtime_get_sync(ddata->dev); - if (error < 0) { - pm_runtime_put_noidle(ddata->dev); + if (manage_clocks) { + error = sysc_enable_opt_clocks(ddata); + if (error) + return error; - return 0; + error = sysc_enable_main_clocks(ddata); + if (error) + goto err_opt_clocks; } + ddata->revision = sysc_read_revision(ddata); + sysc_init_revision_quirks(ddata); + error = sysc_reset(ddata); - if (error) { + if (error) dev_err(ddata->dev, "Reset failed with %d\n", error); - pm_runtime_put_sync(ddata->dev); - return error; - } - - ddata->revision = sysc_read_revision(ddata); - pm_runtime_put_sync(ddata->dev); - -rev_quirks: - sysc_init_revision_quirks(ddata); + if (manage_clocks) + sysc_disable_main_clocks(ddata); +err_opt_clocks: + if (manage_clocks) + sysc_disable_opt_clocks(ddata); - return 0; + return error; } static int sysc_init_sysc_mask(struct sysc *ddata) @@ -1812,11 +1818,11 @@ static int sysc_probe(struct platform_device *pdev) if (error) return error; - pm_runtime_enable(ddata->dev); error = sysc_init_module(ddata); if (error) goto unprepare; + pm_runtime_enable(ddata->dev); error = pm_runtime_get_sync(ddata->dev); if (error < 0) { pm_runtime_put_noidle(ddata->dev); -- 2.21.0