Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp2023877ybg; Thu, 30 Jul 2020 08:31:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwf9s2egEqnRD12A1tgrgIxr1T+jn0K6ebsxlS8qyApGAl9jiWqQqh0HJOvJAr2iHBVgHhk X-Received: by 2002:aa7:cb0e:: with SMTP id s14mr3243440edt.349.1596123060548; Thu, 30 Jul 2020 08:31:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596123060; cv=none; d=google.com; s=arc-20160816; b=L7l3BnlCMnWJfbfaabrlz8VbOID49FdE8mg9x+TxaYUS+BrYPoTrHudPMtj7g7CkdF /Sklefb5Om4rlsWkSyq+PdisdpWmTSOdEW3h3pIsc9uA0FrdokgkCMMZozUPgdsl8EVz T/0nHUdStKtCqZxp0cO5WAeuYZqCSD0oqEHzbVtpj0jZpkMp8afCqBsIQem5oHOUN2GC tBjXxtwjxLVgr4DuWW6tg5ZMeQszMs5GDttXv0peb3SJlz+sqB9fSTfd+uKNz707o0Nh b9klM/9DOLhBuRa1KMlz98Adw5VJcY3TOTq+KJc906qr2Djty9YvFTyAK4uEN9d65vMd G4fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=z0UjndLO+5BgGQz4gSeVsDuGbrfJ6S4QR1EOQqAhcnw=; b=MY7H/GmNpgYZSFLGc8FkeLPNDp4x/XMOwtloBhSTC9+5qm7RDveg9Dk4QFlIzdrv7W oO4tyqq4slN87XgqnVvHARqROTUVBkdWCAEzKvbIjHK1BiC/1eY/Aztp9ixFX0v3F4+T RNbhOmZcup3WyAAhq3O08DsPlIDLS1Jx61DZ4kEtyLU+G6gTJZw9w4Z+Z1cpkqD02agZ wDvXr+HUWs2KvpdVmBC+VzTVtD0G3odP62Bu3HKS2yISkI1v/3RhQHbZHvXJUGYCmuaI fXHEt4ZpbSgqTLmdFqn/dnFbWfWN2squf113KhX4CDl9IQhht314h6qrBUdJnZqC32b8 B8kg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v15si3481764edy.90.2020.07.30.08.30.37; Thu, 30 Jul 2020 08:31:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729913AbgG3PaD (ORCPT + 99 others); Thu, 30 Jul 2020 11:30:03 -0400 Received: from asavdk3.altibox.net ([109.247.116.14]:36618 "EHLO asavdk3.altibox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726581AbgG3PaC (ORCPT ); Thu, 30 Jul 2020 11:30:02 -0400 Received: from ravnborg.org (unknown [188.228.123.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by asavdk3.altibox.net (Postfix) with ESMTPS id D404A20039; Thu, 30 Jul 2020 17:29:59 +0200 (CEST) Date: Thu, 30 Jul 2020 17:29:58 +0200 From: Sam Ravnborg To: Paul Cercueil Cc: David Airlie , Daniel Vetter , od@zcrc.me, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/3] drm/ingenic: ipu: Only enable clock when needed Message-ID: <20200730152958.GB1474381@ravnborg.org> References: <20200730144830.10479-1-paul@crapouillou.net> <20200730144830.10479-4-paul@crapouillou.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200730144830.10479-4-paul@crapouillou.net> X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=f+hm+t6M c=1 sm=1 tr=0 a=S6zTFyMACwkrwXSdXUNehg==:117 a=S6zTFyMACwkrwXSdXUNehg==:17 a=kj9zAlcOel0A:10 a=ER_8r6IbAAAA:8 a=7gkXJVJtAAAA:8 a=Yn18W8vto3fq7zB7h7oA:9 a=jL7zRBsIsWRRgqwc:21 a=VT3nyDlhJkvOL4Sv:21 a=CjuIK1q_8ugA:10 a=9LHmKk7ezEChjTCyhBa9:22 a=E9Po1WZjFZOl8hwRPBS3:22 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jul 30, 2020 at 04:48:30PM +0200, Paul Cercueil wrote: > Instead of keeping the IPU clock enabled constantly, enable and disable > it on demand, when the IPU plane is used. That way, we won't use any > extra power when the IPU is not used. > > v2: Explain the reason of this patch > > Signed-off-by: Paul Cercueil Reviewed-by: Sam Ravnborg And thanks for the quick update! Sam > --- > drivers/gpu/drm/ingenic/ingenic-ipu.c | 23 ++++++++++++++++++++--- > 1 file changed, 20 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c b/drivers/gpu/drm/ingenic/ingenic-ipu.c > index 7dd2a6ae4994..fc8c6e970ee3 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c > +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c > @@ -49,6 +49,7 @@ struct ingenic_ipu { > struct regmap *map; > struct clk *clk; > const struct soc_info *soc_info; > + bool clk_enabled; > > unsigned int num_w, num_h, denom_w, denom_h; > > @@ -288,12 +289,23 @@ static void ingenic_ipu_plane_atomic_update(struct drm_plane *plane, > const struct drm_format_info *finfo; > u32 ctrl, stride = 0, coef_index = 0, format = 0; > bool needs_modeset, upscaling_w, upscaling_h; > + int err; > > if (!state || !state->fb) > return; > > finfo = drm_format_info(state->fb->format->format); > > + if (!ipu->clk_enabled) { > + err = clk_enable(ipu->clk); > + if (err) { > + dev_err(ipu->dev, "Unable to enable clock: %d\n", err); > + return; > + } > + > + ipu->clk_enabled = true; > + } > + > /* Reset all the registers if needed */ > needs_modeset = drm_atomic_crtc_needs_modeset(state->crtc->state); > if (needs_modeset) { > @@ -578,6 +590,11 @@ static void ingenic_ipu_plane_atomic_disable(struct drm_plane *plane, > regmap_clear_bits(ipu->map, JZ_REG_IPU_CTRL, JZ_IPU_CTRL_CHIP_EN); > > ingenic_drm_plane_disable(ipu->master, plane); > + > + if (ipu->clk_enabled) { > + clk_disable(ipu->clk); > + ipu->clk_enabled = false; > + } > } > > static const struct drm_plane_helper_funcs ingenic_ipu_plane_helper_funcs = { > @@ -761,9 +778,9 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) > drm_object_attach_property(&plane->base, ipu->sharpness_prop, > ipu->sharpness); > > - err = clk_prepare_enable(ipu->clk); > + err = clk_prepare(ipu->clk); > if (err) { > - dev_err(dev, "Unable to enable clock\n"); > + dev_err(dev, "Unable to prepare clock\n"); > return err; > } > > @@ -775,7 +792,7 @@ static void ingenic_ipu_unbind(struct device *dev, > { > struct ingenic_ipu *ipu = dev_get_drvdata(dev); > > - clk_disable_unprepare(ipu->clk); > + clk_unprepare(ipu->clk); > } > > static const struct component_ops ingenic_ipu_ops = { > -- > 2.27.0