Received: by 2002:ab2:620c:0:b0:1ef:ffd0:ce49 with SMTP id o12csp1257686lqt; Tue, 19 Mar 2024 19:12:13 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVHFImIXLlx7ylTcv3xmBwHCM3oll2I71mX9JiTZ+dw1HhGC5+GXpZ6MkuKROm+uHMuzZOqXg6DXeqU25ZvOW796/N/FZIdLGNRiwTvhw== X-Google-Smtp-Source: AGHT+IE+hm91XG1MUOYbN5jxtA97IR9GluIk5ApYMJi0XAZI+M+mqmxwODOpBcDie/XE0hySUBu9 X-Received: by 2002:a05:6a20:6a08:b0:1a3:49a7:f56f with SMTP id p8-20020a056a206a0800b001a349a7f56fmr14878923pzk.2.1710900732787; Tue, 19 Mar 2024 19:12:12 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710900732; cv=pass; d=google.com; s=arc-20160816; b=MUGCdPC82mNIz7df8jmwhMBLrlIp+K94Pb06apaJFxdG5Id+n6AgWlgbVYvC6fzthn 9AvJ0UOnIFdITuY3fpQRhe4QEk/wxbkkLw/wRdi3Fr7Y4+vRYbTzzoHj21xiTp5LVJHg tgJ6rU0PdH1S4nVs7HC9pybAa20smooqsn+oHJMYMloejXhRBmV/Yo1Qns18QrZ5lTG2 50KeMS9gw5mzjuTDW/DKwmkxeGXoR3IeGYgSnIhAiJz1ekW+jIIqY36ogQPB0o+nANlA KDkKXRcFiGmtiPVdul4J4hM6iOKaPK3UBZPsY8rdOmVcSEtgRb+Je3ld+GnO58i20t83 64Zg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:dkim-signature; bh=E68i2axyuKVX+pAKCm1Dr5BpFi26SQMx7ONiMhlC3wI=; fh=MHxpJinN5hsr3fw1fY5avFtENK7LFZIm1SqWmai6yME=; b=opF5f+7Ip1J/Rk1uRxl/LSdzMtL1g6P4OKpKbSOvZJzkJ5dUt5GJbsOwiNmkP9Yy51 y+/EjhtVXe6kL4hbd/+HykzA69L7rh6Q9eTjsWrtLZjCAIj8IMdL4erXhh09LFBCeScL PMG+aXytPW0J+Zihcznu6l+hgHuC/gSFTmDwcvm6qZoaak2FfvvsnxPi+bOkUuKtXBVk 78Zqnekkx3Q65+EmK/uigQ0Rj33UaZ/F8U3hUcWnadTTtc6SLmOpmonVit4Q6zLZbBME d4KNDgSl013SaAf/6v0Rhf0qEEK+88UTX437is1hBXKVueRIxPsREMiFldMnJmA2D1wl fOyg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=jfS7L1tV; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-108350-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-108350-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id il5-20020a17090b164500b0029bc57871e2si465188pjb.28.2024.03.19.19.12.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Mar 2024 19:12:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-108350-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=jfS7L1tV; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-108350-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-108350-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 97856B22F6C for ; Wed, 20 Mar 2024 02:11:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7AC8979F9; Wed, 20 Mar 2024 02:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jfS7L1tV" Received: from mail-io1-f50.google.com (mail-io1-f50.google.com [209.85.166.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B787D7464; Wed, 20 Mar 2024 02:11:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710900702; cv=none; b=tEkMJQGBzVGPu8QZE8qikIKl1CNn+pEpD1D6V8sdfTy3L1ZEDIjKMIly4lH4TMmllHlragWRCmwvyCX7VWTiLzu6RpcPcWmTDiT/JMAm6wcntnt7KxRftmuzkBi9tULvreQlI30JkC4hR7lDITe1eoUopf0d+VOteOqjX5WHz7c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710900702; c=relaxed/simple; bh=lzxLsMVdwcPAMXkHC3RNt0usmP7tGhKFAczR2Lqss+c=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=RH1yranWQR49ZkaHa31GM0LBK48iarAkJGN/WCJbaGMan2+MxJrXVFdKDR9qHJl0HOJ+07UzNu8FkzNHHqm+sYpo0CMTsKCsoeFBIwN1qOKi3QU3rhfGdIFPF3zJG6ZcF431eaHs/scgmTFZ82BA6AIkV8zblGbvCDqgiO1vzTg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jfS7L1tV; arc=none smtp.client-ip=209.85.166.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-io1-f50.google.com with SMTP id ca18e2360f4ac-7cd06b9682aso76281839f.3; Tue, 19 Mar 2024 19:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710900700; x=1711505500; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=E68i2axyuKVX+pAKCm1Dr5BpFi26SQMx7ONiMhlC3wI=; b=jfS7L1tVrpbMKmvekv/LFGAiov7wTYrr2WOEf1EK+60uviGY/plVruko8naitXUHFX Yoq8YO5B8wSt/CNwUsb1qS0qusf/0RqLBXiE5UzqrYaPVQ8IuPL5rHCqLDYuFfTKOuVq brjlfeEdRNemCUr+ysIOoP4PJRAXqOrgtC79dvhi/lE7iKiEww4ApvMITj/MiI4ndk6r 9ELj+Azb73++UXkWFXCuY0wrF9nA90Olrv49m9P8pnojHWwPwplOXEV+Rf3bKfBeZgq4 bqR2Gv1DEtRJrA/YkDhFhCGnl6U1nxPNDjxpf2gHs7TY+0K3neCeHvEIrZACe0DX1fw5 Kw5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710900700; x=1711505500; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=E68i2axyuKVX+pAKCm1Dr5BpFi26SQMx7ONiMhlC3wI=; b=TsI3SIO+oIn5YgC98UY8VxUVqAwp3SWqs/FgkzFbrE6CmNLrEGh5+Jf7FZq46F+buM kelLl1jZQL+ZoBCl+vjXq8Ola5pwoLPwv5i4iyf0u9W8EPF4iGeQNtDE4vHdBWNSr6Y2 Xvxyio2vtqgZdkQGN8OOR0dGq+gwZlFG0iJHmcLl17bJnI27zq/CxxqKeO82d9e6bO2N awRG4YVKPv/VwhuLR8WxRL+aj2Prt7KT8HIDuz5DuNVl4CMXAt6Kls0mYxNSPLFKBgnW X7PbNuR1jbmy4ZovdaGPEbP7Kk5/lq2KZPDAdnNCJ4QY1l6kcPTk1b87UiJNZKd4x4Vg hITQ== X-Forwarded-Encrypted: i=1; AJvYcCVEElFPENevxdRRSGnE6Pcx9Gl6v/cd4LoE9Whqn8l9foyCvKUYwzB/c4VjseSHOfLTKcecRho7lyxvvQo1v3oEP6mGasEnOIBBGvt3YRex7CiVdteOgrJ4LBhsksp9gihjU9SVnNBn X-Gm-Message-State: AOJu0YxP79TG3PPF6f8Qjc48t7d0QEUqgiS7AWM6IzOj6QnlxKpue+w7 STw4bNt8OgeZg2E7jebFGFaFDnlodgRkMrfgCrz3v6YnShknD5vHUkwCN9V3L01yPt+BgAKWLVt GDc0yN2KxqAl4x7+dblrbGahS249xf9ymTmeKCg== X-Received: by 2002:a92:cbc2:0:b0:366:2f7d:d292 with SMTP id s2-20020a92cbc2000000b003662f7dd292mr16561775ilq.6.1710900699697; Tue, 19 Mar 2024 19:11:39 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <1710743811-1698-1-git-send-email-shengjiu.wang@nxp.com> <20240319073540.2zvwq7fvft3h6mbr@pengutronix.de> In-Reply-To: <20240319073540.2zvwq7fvft3h6mbr@pengutronix.de> From: Shengjiu Wang Date: Wed, 20 Mar 2024 10:11:28 +0800 Message-ID: Subject: Re: [PATCH] clk: imx: imx8mp: Add pm_runtime support for power saving To: Marco Felsch Cc: Peng Fan , "S.J. Wang" , "abelvesa@kernel.org" , "mturquette@baylibre.com" , "sboyd@kernel.org" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , "linux-clk@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 19, 2024 at 3:35=E2=80=AFPM Marco Felsch wrote: > > On 24-03-18, Peng Fan wrote: > > > Subject: [PATCH] clk: imx: imx8mp: Add pm_runtime support for power > > > saving > > > > > > Add pm_runtime support for power saving. In pm runtime suspend state = the > > > registers will be reseted, so add registers save in pm runtime suspen= d and > > > restore them in pm runtime resume. > > We had similar patches in our downstream repo but didn't upstream yet > since there was an clk-handing issue. IIRC the issue was regarding the > global clock-prepare lock and a circular dependency on it. Is this > resolved now? Seems I didn't meet the issue you mentioned. But I found another issue with my implementation that the pm_runtime_enable need to move before the clk registered, Otherwise the core->rpm_enabled is not ture at clk registering. I will update in next version. Best regards Shengjiu Wang > > Regards, > Marco > > > > Signed-off-by: Shengjiu Wang > > > > Reviewed-by: Peng Fan > > > --- > > > drivers/clk/imx/clk-imx8mp-audiomix.c | 99 +++++++++++++++++++++++++= +- > > > 1 file changed, 96 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/clk/imx/clk-imx8mp-audiomix.c b/drivers/clk/imx/= clk- > > > imx8mp-audiomix.c > > > index 55ed211a5e0b..d2bf53e2aacf 100644 > > > --- a/drivers/clk/imx/clk-imx8mp-audiomix.c > > > +++ b/drivers/clk/imx/clk-imx8mp-audiomix.c > > > @@ -7,10 +7,12 @@ > > > > > > #include > > > #include > > > +#include > > > #include > > > #include > > > #include > > > #include > > > +#include > > > > > > #include > > > > > > @@ -18,6 +20,7 @@ > > > > > > #define CLKEN0 0x000 > > > #define CLKEN1 0x004 > > > +#define EARC 0x200 > > > #define SAI1_MCLK_SEL 0x300 > > > #define SAI2_MCLK_SEL 0x304 > > > #define SAI3_MCLK_SEL 0x308 > > > @@ -26,6 +29,12 @@ > > > #define SAI7_MCLK_SEL 0x314 > > > #define PDM_SEL 0x318 > > > #define SAI_PLL_GNRL_CTL 0x400 > > > +#define SAI_PLL_FDIVL_CTL0 0x404 > > > +#define SAI_PLL_FDIVL_CTL1 0x408 > > > +#define SAI_PLL_SSCG_CTL 0x40C > > > +#define SAI_PLL_MNIT_CTL 0x410 > > > +#define IPG_LP_CTRL 0x504 > > > +#define REGS_NUM 16 > > > > > > #define SAIn_MCLK1_PARENT(n) = \ > > > static const struct clk_parent_data = \ > > > @@ -182,13 +191,65 @@ static struct clk_imx8mp_audiomix_sel sels[] = =3D { > > > CLK_SAIn(7) > > > }; > > > > > > +struct clk_imx8mp_audiomix_regs { > > > + u32 regs_num; > > > + u32 regs_off[]; > > > +}; > > > + > > > +static const struct clk_imx8mp_audiomix_regs audiomix_regs =3D { > > > + .regs_num =3D REGS_NUM, > > > + .regs_off =3D { > > > + CLKEN0, > > > + CLKEN1, > > > + EARC, > > > + SAI1_MCLK_SEL, > > > + SAI2_MCLK_SEL, > > > + SAI3_MCLK_SEL, > > > + SAI5_MCLK_SEL, > > > + SAI6_MCLK_SEL, > > > + SAI7_MCLK_SEL, > > > + PDM_SEL, > > > + SAI_PLL_GNRL_CTL, > > > + SAI_PLL_FDIVL_CTL0, > > > + SAI_PLL_FDIVL_CTL1, > > > + SAI_PLL_SSCG_CTL, > > > + SAI_PLL_MNIT_CTL, > > > + IPG_LP_CTRL > > > + }, > > > +}; > > > + > > > +struct clk_imx8mp_audiomix_drvdata { > > > + void __iomem *base; > > > + u32 regs_save[REGS_NUM]; > > > +}; > > > + > > > +static void clk_imx8mp_audiomix_save_restore(struct device *dev, boo= l > > > +save) { > > > + struct clk_imx8mp_audiomix_drvdata *drvdata =3D > > > dev_get_drvdata(dev); > > > + void __iomem *base =3D drvdata->base; > > > + int i; > > > + > > > + if (save) { > > > + for (i =3D 0; i < audiomix_regs.regs_num; i++) > > > + drvdata->regs_save[i] =3D readl(base + > > > audiomix_regs.regs_off[i]); > > > + } else { > > > + for (i =3D 0; i < audiomix_regs.regs_num; i++) > > > + writel(drvdata->regs_save[i], base + > > > audiomix_regs.regs_off[i]); > > > + } > > > +} > > > + > > > static int clk_imx8mp_audiomix_probe(struct platform_device *pdev) = { > > > + struct clk_imx8mp_audiomix_drvdata *drvdata; > > > struct clk_hw_onecell_data *priv; > > > struct device *dev =3D &pdev->dev; > > > void __iomem *base; > > > struct clk_hw *hw; > > > - int i; > > > + int i, ret; > > > + > > > + drvdata =3D devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); > > > + if (!drvdata) > > > + return -ENOMEM; > > > > > > priv =3D devm_kzalloc(dev, > > > struct_size(priv, hws, > > > IMX8MP_CLK_AUDIOMIX_END), @@ -202,6 +263,9 @@ static int > > > clk_imx8mp_audiomix_probe(struct platform_device *pdev) > > > if (IS_ERR(base)) > > > return PTR_ERR(base); > > > > > > + drvdata->base =3D base; > > > + dev_set_drvdata(dev, drvdata); > > > + > > > for (i =3D 0; i < ARRAY_SIZE(sels); i++) { > > > if (sels[i].num_parents =3D=3D 1) { > > > hw =3D devm_clk_hw_register_gate_parent_data(dev, > > > @@ -257,10 +321,38 @@ static int clk_imx8mp_audiomix_probe(struct > > > platform_device *pdev) > > > if (IS_ERR(hw)) > > > return PTR_ERR(hw); > > > > > > - return devm_of_clk_add_hw_provider(&pdev->dev, > > > of_clk_hw_onecell_get, > > > - priv); > > > + ret =3D devm_of_clk_add_hw_provider(&pdev->dev, > > > of_clk_hw_onecell_get, > > > + priv); > > > + if (ret) > > > + return ret; > > > + > > > + pm_runtime_enable(&pdev->dev); > > > + clk_imx8mp_audiomix_save_restore(&pdev->dev, true); > > > + > > > + return 0; > > > } > > > > > > +static int clk_imx8mp_audiomix_runtime_suspend(struct device *dev) { > > > + clk_imx8mp_audiomix_save_restore(dev, true); > > > + > > > + return 0; > > > +} > > > + > > > +static int clk_imx8mp_audiomix_runtime_resume(struct device *dev) { > > > + clk_imx8mp_audiomix_save_restore(dev, false); > > > + > > > + return 0; > > > +} > > > + > > > +static const struct dev_pm_ops clk_imx8mp_audiomix_pm_ops =3D { > > > + SET_RUNTIME_PM_OPS(clk_imx8mp_audiomix_runtime_suspend, > > > + clk_imx8mp_audiomix_runtime_resume, NULL) > > > + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, > > > + pm_runtime_force_resume) > > > +}; > > > + > > > static const struct of_device_id clk_imx8mp_audiomix_of_match[] =3D = { > > > { .compatible =3D "fsl,imx8mp-audio-blk-ctrl" }, > > > { /* sentinel */ } > > > @@ -272,6 +364,7 @@ static struct platform_driver > > > clk_imx8mp_audiomix_driver =3D { > > > .driver =3D { > > > .name =3D "imx8mp-audio-blk-ctrl", > > > .of_match_table =3D clk_imx8mp_audiomix_of_match, > > > + .pm =3D &clk_imx8mp_audiomix_pm_ops, > > > }, > > > }; > > > > > > -- > > > 2.34.1 > > > > > >