Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp190823ybl; Wed, 4 Dec 2019 00:46:18 -0800 (PST) X-Google-Smtp-Source: APXvYqzbiXfAMIAOJCN2vCKeUYcDActjbcK5HLIZbNgULHLs5oA6sC9gvpZxun9roYvC9tcKhw4T X-Received: by 2002:aca:cc55:: with SMTP id c82mr1555642oig.165.1575449177847; Wed, 04 Dec 2019 00:46:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575449177; cv=none; d=google.com; s=arc-20160816; b=hdk8EYu4/6QKqsmJGZX1UefQVnJJ91873o6/MrV2MCf75UggoaZBfFqPlAt6IkkbAA OFWdtqIuBk+RFuh8X7f69pOcngu4IvT7xhWlAAeZVnqW/2h9U8JM9ylPEC4FRhkN8cLD sgJoe/ZWSiBWpWFvbvVlbplkOMA4Cqmu3I57zu4kfGqUZK5FGvBiuQx40W4pZCRrfYDB bfZks5AgWP5VntBoIxWb2v5f5CxmCcvbXeAPZZ1DI+Pk4DKiDuiPC+6qUF/xu6JkWK02 6FoyGAXd7tK3H7PUgbM0d6N3qqBH69zkNneijsij7C3C1zt3uMd7qrO2l6jhQaYkjRDM h32Q== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=Br0dk1bpsyd+4qzgRWaxPCZRu6nFMIoIlIvyu3JM4TQ=; b=XYC4oD1CwcqoiEh0hASPo0Zrd6DXcYkrd/ZKVCHx8VQfFwtN9azSFSAGW6uYG/GV2s HerI/go4bnYk9WYMNzEhNJ1MzLjFkCF3kcHBciVqT2gWf0oKjCIPvutzCvRDIyqjOTa/ Apl+KPe3b7dMucuahIEq8QOBGC4EKkhDokN5dqB2B45hoAHZ0r76ZTEOuWfrmul/3JfS kYqsDLcCIFMUtzGgw1oKFKPIniVcu7LL4/nYyR+d6+knJgHRoU2JsjSoo8jAE7LtizoP fSTTMSMTK2dWWQNzckImi1x+2dGrjfaO93iUWv7jg2KlcUlrokcaO/yNL/j10UbvrQDd T+CQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@kapsi.fi header.s=20161220 header.b=GiqY50pj; 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 65si2762928oig.274.2019.12.04.00.46.03; Wed, 04 Dec 2019 00:46:17 -0800 (PST) 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; dkim=fail header.i=@kapsi.fi header.s=20161220 header.b=GiqY50pj; 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 S1727119AbfLDIp3 (ORCPT + 99 others); Wed, 4 Dec 2019 03:45:29 -0500 Received: from mail.kapsi.fi ([91.232.154.25]:33607 "EHLO mail.kapsi.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725840AbfLDIp2 (ORCPT ); Wed, 4 Dec 2019 03:45:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=kapsi.fi; s=20161220; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Br0dk1bpsyd+4qzgRWaxPCZRu6nFMIoIlIvyu3JM4TQ=; b=GiqY50pjtFIxFoiDaFb3QMvRk/ wyBqfad1DlP0jVA/tyk5o9bj6nr5Xz+phyKnxrZN8JOSDfM45yH0G3AmYRV5RSN92LrRQS2qhh6xh NfZPe6jt/Qt4hBYw7duKijAgiD71N6PgoDy5m4v6FjaewWoTwkHQgcR5eLt3XUujZBDYciPNi4ljK jemAMAPNEUw0AoX73KRgadG/XzvXepJIoGLh1cEdCkC1u2mrtjBCKNf97GXlPgHt3Keea7Wfy2c9m aipp83JOOoZcK8bmxlsrvLbchu8oOiTjTbc4Ns09aqcaAig0zrqZsdemfLeyQtYwuqep3NHdSxN+V ZQDN2+LA==; Received: from [193.209.96.43] (helo=[10.21.26.179]) by mail.kapsi.fi with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1icQHk-0000se-Bn; Wed, 04 Dec 2019 10:45:24 +0200 Subject: Re: [TEGRA194_CPUFREQ Patch 1/3] firmware: tegra: adding function to get BPMP data To: Thierry Reding , Sumit Gupta Cc: rjw@rjwysocki.net, viresh.kumar@linaro.org, catalin.marinas@arm.com, will@kernel.org, jonathanh@nvidia.com, talho@nvidia.com, linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, bbasu@nvidia.com, mperttunen@nvidia.com References: <1575394348-17649-1-git-send-email-sumitg@nvidia.com> <20191203174229.GA1721849@ulmo> From: Mikko Perttunen Message-ID: <9404232d-84ce-a117-89dd-f2d8de80993e@kapsi.fi> Date: Wed, 4 Dec 2019 10:45:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.1 MIME-Version: 1.0 In-Reply-To: <20191203174229.GA1721849@ulmo> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-SA-Exim-Connect-IP: 193.209.96.43 X-SA-Exim-Mail-From: cyndis@kapsi.fi X-SA-Exim-Scanned: No (on mail.kapsi.fi); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The difference here is that whereas on Tegra186 the frequency is managed through a specific memory-mapped device, on Tegra194 the frequency is managed through a CPU MSR leaving no "specific" node for this property apart from the cpu nodes itself. Now, my original patchset (which this series is based on) did add nvidia,bpmp properties on the CPU DT nodes itself and query BPMP based on that. A change is still required for that since tegra_bpmp_get() currently takes a 'struct device *' which we don't have for a CPU DT node. Mikko On 3.12.2019 19.42, Thierry Reding wrote: > On Tue, Dec 03, 2019 at 11:02:26PM +0530, Sumit Gupta wrote: >> Adding new function of_tegra_bpmp_get() to get BPMP data. >> This function can be used by other drivers like cpufreq to >> get BPMP data without adding any property in respective >> drivers DT node. > > What's wrong with adding the property in the DT node? We already do that > for Tegra186's CPU frequency driver, so it makes sense to continue that > for Tegra194. > > Thierry > >> Signed-off-by: Sumit Gupta >> --- >> drivers/firmware/tegra/bpmp.c | 38 ++++++++++++++++++++++++++++++++++++++ >> include/soc/tegra/bpmp.h | 5 +++++ >> 2 files changed, 43 insertions(+) >> >> diff --git a/drivers/firmware/tegra/bpmp.c b/drivers/firmware/tegra/bpmp.c >> index 6741fcd..9c3d7f1 100644 >> --- a/drivers/firmware/tegra/bpmp.c >> +++ b/drivers/firmware/tegra/bpmp.c >> @@ -38,6 +38,44 @@ channel_to_ops(struct tegra_bpmp_channel *channel) >> return bpmp->soc->ops; >> } >> >> +struct tegra_bpmp *of_tegra_bpmp_get(void) >> +{ >> + struct platform_device *pdev; >> + struct device_node *bpmp_dev; >> + struct tegra_bpmp *bpmp; >> + >> + /* Check for bpmp device status in DT */ >> + bpmp_dev = of_find_compatible_node(NULL, NULL, "nvidia,tegra186-bpmp"); >> + if (!bpmp_dev) { >> + bpmp = ERR_PTR(-ENODEV); >> + goto err_out; >> + } >> + if (!of_device_is_available(bpmp_dev)) { >> + bpmp = ERR_PTR(-ENODEV); >> + goto err_put; >> + } >> + >> + pdev = of_find_device_by_node(bpmp_dev); >> + if (!pdev) { >> + bpmp = ERR_PTR(-ENODEV); >> + goto err_put; >> + } >> + >> + bpmp = platform_get_drvdata(pdev); >> + if (!bpmp) { >> + bpmp = ERR_PTR(-EPROBE_DEFER); >> + put_device(&pdev->dev); >> + goto err_put; >> + } >> + >> + return bpmp; >> +err_put: >> + of_node_put(bpmp_dev); >> +err_out: >> + return bpmp; >> +} >> +EXPORT_SYMBOL_GPL(of_tegra_bpmp_get); >> + >> struct tegra_bpmp *tegra_bpmp_get(struct device *dev) >> { >> struct platform_device *pdev; >> diff --git a/include/soc/tegra/bpmp.h b/include/soc/tegra/bpmp.h >> index f2604e9..21402d9 100644 >> --- a/include/soc/tegra/bpmp.h >> +++ b/include/soc/tegra/bpmp.h >> @@ -107,6 +107,7 @@ struct tegra_bpmp_message { >> }; >> >> #if IS_ENABLED(CONFIG_TEGRA_BPMP) >> +struct tegra_bpmp *of_tegra_bpmp_get(void); >> struct tegra_bpmp *tegra_bpmp_get(struct device *dev); >> void tegra_bpmp_put(struct tegra_bpmp *bpmp); >> int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp, >> @@ -122,6 +123,10 @@ void tegra_bpmp_free_mrq(struct tegra_bpmp *bpmp, unsigned int mrq, >> void *data); >> bool tegra_bpmp_mrq_is_supported(struct tegra_bpmp *bpmp, unsigned int mrq); >> #else >> +static inline struct tegra_bpmp *of_tegra_bpmp_get(void) >> +{ >> + return ERR_PTR(-ENOTSUPP); >> +} >> static inline struct tegra_bpmp *tegra_bpmp_get(struct device *dev) >> { >> return ERR_PTR(-ENOTSUPP); >> -- >> 2.7.4 >>