From patchwork Fri Nov 18 12:28:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sricharan Ramabadhran X-Patchwork-Id: 9436375 X-Patchwork-Delegate: agross@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C10866047D for ; Fri, 18 Nov 2016 12:29:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CAE5229885 for ; Fri, 18 Nov 2016 12:29:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BF99729898; Fri, 18 Nov 2016 12:29:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 476B929885 for ; Fri, 18 Nov 2016 12:29:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753878AbcKRM3E (ORCPT ); Fri, 18 Nov 2016 07:29:04 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:34030 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752452AbcKRM3A (ORCPT ); Fri, 18 Nov 2016 07:29:00 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id E7C71626A9; Fri, 18 Nov 2016 12:28:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1479472139; bh=qI6Kwpj/iiCuvYpkVQ47u2Vd80oueSSQ5OqG3diAxVI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ckyIx+1SWWxP+MfIMpE/WRYwyU4Z/emq9dnAuLJIyGGI3QQarvrcC61niRKCJ91BX rPx5sqVsxx9KKpzrKndTFE0lq2QplSCGjYjiFZ6uKLyXO0D1bAQXgNHaCF3/hNb2IE zVBKuaxkqx3ADLyPt8KEHXEBmCb+h9D2WMUqt2Ew= Received: from blr-ubuntu-32.ap.qualcomm.com (unknown [202.46.23.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: sricharan@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 8A0D16268C; Fri, 18 Nov 2016 12:28:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1479472139; bh=qI6Kwpj/iiCuvYpkVQ47u2Vd80oueSSQ5OqG3diAxVI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ckyIx+1SWWxP+MfIMpE/WRYwyU4Z/emq9dnAuLJIyGGI3QQarvrcC61niRKCJ91BX rPx5sqVsxx9KKpzrKndTFE0lq2QplSCGjYjiFZ6uKLyXO0D1bAQXgNHaCF3/hNb2IE zVBKuaxkqx3ADLyPt8KEHXEBmCb+h9D2WMUqt2Ew= DMARC-Filter: OpenDMARC Filter v1.3.1 smtp.codeaurora.org 8A0D16268C Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=pass smtp.mailfrom=sricharan@codeaurora.org From: Sricharan R To: sboyd@codeaurora.org, mturquette@baylibre.com, linux-clk@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, rnayak@codeaurora.org, stanimir.varbanov@linaro.org Cc: sricharan@codeaurora.org Subject: [PATCH V2 1/2] clk: qcom: gdsc: Add support for gdscs with HW control Date: Fri, 18 Nov 2016 17:58:26 +0530 Message-Id: <1479472107-18472-2-git-send-email-sricharan@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1479472107-18472-1-git-send-email-sricharan@codeaurora.org> References: <1479472107-18472-1-git-send-email-sricharan@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Rajendra Nayak Some GDSCs might support a HW control mode, where in the power domain (gdsc) is brought in and out of low power state (while unsued) without any SW assistance, saving power. Such GDSCs can be configured in a HW control mode when powered on until they are explicitly requested to be powered off by software. Signed-off-by: Rajendra Nayak Signed-off-by: Sricharan R --- [V2] Fixed to take care of the return value of gdsc_hwctrl drivers/clk/qcom/gdsc.c | 19 +++++++++++++++++++ drivers/clk/qcom/gdsc.h | 1 + 2 files changed, 20 insertions(+) diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c index f12d7b2..57c7c1b 100644 --- a/drivers/clk/qcom/gdsc.c +++ b/drivers/clk/qcom/gdsc.c @@ -55,6 +55,13 @@ static int gdsc_is_enabled(struct gdsc *sc, unsigned int reg) return !!(val & PWR_ON_MASK); } +static int gdsc_hwctrl(struct gdsc *sc, bool en) +{ + u32 val = en ? HW_CONTROL_MASK : 0; + + return regmap_update_bits(sc->regmap, sc->gdscr, HW_CONTROL_MASK, val); +} + static int gdsc_toggle_logic(struct gdsc *sc, bool en) { int ret; @@ -164,16 +171,28 @@ static int gdsc_enable(struct generic_pm_domain *domain) */ udelay(1); + /* Turn on HW trigger mode if supported */ + if (sc->flags & HW_CTRL) + return gdsc_hwctrl(sc, true); + return 0; } static int gdsc_disable(struct generic_pm_domain *domain) { struct gdsc *sc = domain_to_gdsc(domain); + int ret; if (sc->pwrsts == PWRSTS_ON) return gdsc_assert_reset(sc); + /* Turn off HW trigger mode if supported */ + if (sc->flags & HW_CTRL) { + ret = gdsc_hwctrl(sc, false); + if (ret < 0) + return ret; + } + if (sc->pwrsts & PWRSTS_OFF) gdsc_clear_mem_on(sc); diff --git a/drivers/clk/qcom/gdsc.h b/drivers/clk/qcom/gdsc.h index 3bf497c..b1f30f8 100644 --- a/drivers/clk/qcom/gdsc.h +++ b/drivers/clk/qcom/gdsc.h @@ -50,6 +50,7 @@ struct gdsc { #define PWRSTS_RET_ON (PWRSTS_RET | PWRSTS_ON) const u8 flags; #define VOTABLE BIT(0) +#define HW_CTRL BIT(1) struct reset_controller_dev *rcdev; unsigned int *resets; unsigned int reset_count;