Received: by 2002:a05:7412:da14:b0:e2:908c:2ebd with SMTP id fe20csp575791rdb; Fri, 6 Oct 2023 11:47:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHSC4LU3gZx0aibASBiVtBs+Dse9RguvGcmpCrcP1DGddwoFLBIIh5sE+wOp5vE2yG+coMF X-Received: by 2002:a05:6a21:7892:b0:12c:2dc7:74bc with SMTP id bf18-20020a056a21789200b0012c2dc774bcmr10508500pzc.46.1696618048026; Fri, 06 Oct 2023 11:47:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696618048; cv=none; d=google.com; s=arc-20160816; b=eTnKblCnv3z2r/kQAqQA0nXbClHOpob1sJXrscdVINpJdIWzkMpnUTb6R1sEpwPtkw 6M/v7Gh3/trrj734YUQpq8s/IECjcVm08dbSu0AyrXwtrUBEVqfzqir+1I3DG4b8P7oh VBaIWd6m58bm1tXfqUkpfmC9nC0uFbExoTVj3cC5tNjXdCj0OdafncBU/V0vSbWhewfB Cx4xV7OviQNRlwBf05F9ygaddcUzBBEX7aSuq8p9TRMGDDXoPQO+kdNSNiN6JcrgLO92 ympkG+9J2OLg1wXazZ2GOv2LjxpROLgbPfNWYn0TRjH0AjLXlJtN68WiWRbEukzaT7/9 PpBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=zQ8ANnIJ7Jc2ultFz1XFzcpcGnVVjfnOJG9OyRd7SnU=; fh=kza8t5ZS209zVoEG4uwLJLlWKsmyNnta4nic2PYIVdM=; b=c5rsnCASA6zHQkH1qfx/M2NL6s2UPRq6DrAopVq+Zc6r4Ra+lKv3DPaczxRZL6ck/F 186n1dAgbPuPYi81A7/85fXeJJWHbrg2X52gHhVtg6qqpKq8Ag8l6q1i5xEaMiiSiHCw 8suoZy934TFfxyEwppPiGgizCpH2ktoSWrxzmSQQzeOaGfagkbrCdxAwn86gBKE6DBub nQynz1M5jil5z01BGYKK3JN4LaHWu4wX/ZZwNG/luHTc86q8vILYT6MFNQULhDRHcrmf zC5a8oTJp3qpWjac24komoOX2AbhAidehcfp4qHmEYwsu/h5Cl993lIwqqu8CZVNqXit QSfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mi1TNv4j; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id u8-20020a1709026e0800b001c60de17b5esi4159331plk.118.2023.10.06.11.47.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Oct 2023 11:47:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mi1TNv4j; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id C87E180A1847; Fri, 6 Oct 2023 11:46:17 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233130AbjJFSqL (ORCPT + 99 others); Fri, 6 Oct 2023 14:46:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232789AbjJFSqJ (ORCPT ); Fri, 6 Oct 2023 14:46:09 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 66F7ABE; Fri, 6 Oct 2023 11:46:08 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BF1AC433C7; Fri, 6 Oct 2023 18:46:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1696617968; bh=1mB/Avf3nx1RjkbQ/+Rwpkz9H+Ygulu55oGnBl9fNp4=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=mi1TNv4jY/b+f1ZiqtNMVCIfdOoCwo83sYPSCi3loiUAQE8Vjm6jZg8/1P73NgX+F em0cjSo0TyG8Y7/Uq2U2JtLQBYcNAJLtv7RzOOMYT6cLQDNSWkIxpcFwXpUJyOPpv6 kYDKh7cDjc48C3uy4v32h72S3+4fPskwyWDGG37iipAbFHF0yDA8ME4VO+T5L89Lxd 3mQPfTu5TiZ2LyITkf0Vj0W44J4AFjlVajpQpWGtyuW9qE9Ubo3pN9tIsx/bhsNTt1 7XaA3ZRzI2gXq78eGJpWp3znDr9CoWA5k26Fc0JHUJkF1wcxW/E2vgpxxaGQjrwEbZ 2PXcMa3Mt8X5A== Message-ID: <6eea0725-ac0b-0b45-4f6d-13799bc4bfb3@kernel.org> Date: Sat, 7 Oct 2023 03:46:02 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH v7 14/26] PM / devfreq: rockchip-dfi: Prepare for multiple users Content-Language: en-US To: Sascha Hauer , linux-rockchip@lists.infradead.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Heiko Stuebner , Kyungmin Park , MyungJoo Ham , Will Deacon , Mark Rutland , kernel@pengutronix.de, Michael Riesch , Robin Murphy , Vincent Legoll , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, Sebastian Reichel , Jonathan Cameron References: <20230704093242.583575-1-s.hauer@pengutronix.de> <20230704093242.583575-15-s.hauer@pengutronix.de> From: Chanwoo Choi In-Reply-To: <20230704093242.583575-15-s.hauer@pengutronix.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 06 Oct 2023 11:46:18 -0700 (PDT) On 23. 7. 4. 18:32, Sascha Hauer wrote: > When adding perf support later the DFI must be enabled when > either of devfreq-event or perf is active. Prepare for that > by adding a usage counter for the DFI. Also move enabling > and disabling of the clock away from the devfreq-event specific > functions to which the perf specific part won't have access. > > Reviewed-by: Jonathan Cameron > Reviewed-by: Sebastian Reichel > Signed-off-by: Sascha Hauer > --- > drivers/devfreq/event/rockchip-dfi.c | 57 +++++++++++++++++++--------- > 1 file changed, 40 insertions(+), 17 deletions(-) > > diff --git a/drivers/devfreq/event/rockchip-dfi.c b/drivers/devfreq/event/rockchip-dfi.c > index d39db5de7f19c..8a7af7c32ae0d 100644 > --- a/drivers/devfreq/event/rockchip-dfi.c > +++ b/drivers/devfreq/event/rockchip-dfi.c > @@ -68,13 +68,28 @@ struct rockchip_dfi { > void __iomem *regs; > struct regmap *regmap_pmu; > struct clk *clk; > + int usecount; > + struct mutex mutex; > u32 ddr_type; > unsigned int channel_mask; > }; > > -static void rockchip_dfi_start_hardware_counter(struct rockchip_dfi *dfi) > +static int rockchip_dfi_enable(struct rockchip_dfi *dfi) > { > void __iomem *dfi_regs = dfi->regs; > + int ret = 0; > + > + mutex_lock(&dfi->mutex); > + > + dfi->usecount++; > + if (dfi->usecount > 1) > + goto out; > + > + ret = clk_prepare_enable(dfi->clk); > + if (ret) { > + dev_err(&dfi->edev->dev, "failed to enable dfi clk: %d\n", ret); > + goto out; > + } > > /* clear DDRMON_CTRL setting */ > writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_TIMER_CNT_EN | DDRMON_CTRL_SOFTWARE_EN | > @@ -99,14 +114,30 @@ static void rockchip_dfi_start_hardware_counter(struct rockchip_dfi *dfi) > /* enable count, use software mode */ > writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_SOFTWARE_EN, DDRMON_CTRL_SOFTWARE_EN), > dfi_regs + DDRMON_CTRL); > +out: > + mutex_unlock(&dfi->mutex); > + > + return ret; > } > > -static void rockchip_dfi_stop_hardware_counter(struct rockchip_dfi *dfi) > +static void rockchip_dfi_disable(struct rockchip_dfi *dfi) > { > void __iomem *dfi_regs = dfi->regs; > > + mutex_lock(&dfi->mutex); > + > + dfi->usecount--; > + > + WARN_ON_ONCE(dfi->usecount < 0); > + > + if (dfi->usecount > 0) > + goto out; > + > writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_SOFTWARE_EN), > dfi_regs + DDRMON_CTRL); > + clk_disable_unprepare(dfi->clk); > +out: > + mutex_unlock(&dfi->mutex); > } > > static void rockchip_dfi_read_counters(struct rockchip_dfi *dfi, struct dmc_count *count) > @@ -124,29 +155,20 @@ static void rockchip_dfi_read_counters(struct rockchip_dfi *dfi, struct dmc_coun > } > } > > -static int rockchip_dfi_disable(struct devfreq_event_dev *edev) > +static int rockchip_dfi_event_disable(struct devfreq_event_dev *edev) > { > struct rockchip_dfi *dfi = devfreq_event_get_drvdata(edev); > > - rockchip_dfi_stop_hardware_counter(dfi); > - clk_disable_unprepare(dfi->clk); > + rockchip_dfi_disable(dfi); > > return 0; > } > > -static int rockchip_dfi_enable(struct devfreq_event_dev *edev) > +static int rockchip_dfi_event_enable(struct devfreq_event_dev *edev) > { > struct rockchip_dfi *dfi = devfreq_event_get_drvdata(edev); > - int ret; > - > - ret = clk_prepare_enable(dfi->clk); > - if (ret) { > - dev_err(&edev->dev, "failed to enable dfi clk: %d\n", ret); > - return ret; > - } > > - rockchip_dfi_start_hardware_counter(dfi); > - return 0; > + return rockchip_dfi_enable(dfi); > } > > static int rockchip_dfi_set_event(struct devfreq_event_dev *edev) > @@ -190,8 +212,8 @@ static int rockchip_dfi_get_event(struct devfreq_event_dev *edev, > } > > static const struct devfreq_event_ops rockchip_dfi_ops = { > - .disable = rockchip_dfi_disable, > - .enable = rockchip_dfi_enable, > + .disable = rockchip_dfi_event_disable, > + .enable = rockchip_dfi_event_enable, > .get_event = rockchip_dfi_get_event, > .set_event = rockchip_dfi_set_event, > }; > @@ -272,6 +294,7 @@ static int rockchip_dfi_probe(struct platform_device *pdev) > return PTR_ERR(dfi->regmap_pmu); > > dfi->dev = dev; > + mutex_init(&dfi->mutex); > > desc = &dfi->desc; > desc->ops = &rockchip_dfi_ops; Acked-by: Chanwoo Choi -- Best Regards, Samsung Electronics Chanwoo Choi