From patchwork Wed Oct 18 08:06:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephan Gerhold X-Patchwork-Id: 154742 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp4634893vqb; Wed, 18 Oct 2023 01:07:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGmTtxjIPqfEs7xr4AkbRQkuQz7MhV7nOVjHpaAUye66THY2CEfkV2Acv95BDGRYb69U6gC X-Received: by 2002:a05:6870:7a09:b0:1e9:b49b:8d7e with SMTP id hf9-20020a0568707a0900b001e9b49b8d7emr5273040oab.0.1697616435743; Wed, 18 Oct 2023 01:07:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697616435; cv=none; d=google.com; s=arc-20160816; b=fwQMIMvmeZjMZ39pEjsUKA5xfjSMgCAHFmwdzlxoSx7RiDd7tYr+J/WEC7hM5eYyKS C+iTB6Td2X/30w4Pih0vd58P/kAi4obwn8ZOouzfUajZU1VTuQlh3RiLYQDJyfIEmRKk VTrv1C68c63hwm4Z6P56IO6qYyL8wZ0JjqV/OjDx9xt5sMMyKsK9PLFaD2u+2+Wd1cBp iN+W95op2oci2lJTeHYFhKcj48wmtwuV6Yag5gNMOCEKJuVJo2YfxIrkGtZ1cLFbNin4 un/+MTU1vpHZ3EgVvZfbeKMZ9Wo/kAYGAOuIF5Dep64Rh6D0eWSpdavJ74w5MEDsaBEW X+kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=STNJwzUZgB4UhvM8z7lT2Hoj0RIjLauqJYgZpngPYdA=; fh=wE4303/0II6itf5W07rt+Jd3rPLzgh3PFbYtjrU8GFg=; b=0GsPqsnmIKo41Ki8Ya+5ABwv075NJVDC2/au2ODrZ2dvbhP5eb7hsOIMLpruY3U+LC WsBMrvpVmh6vdy3t5jfeH97mB12b+lmUtNkDfOnLINotKDRY4WRZaqA0ByzYrUfFI1vD 5DrusW5WJmPTxvrgQq3/XDh3eFt9fOQN3cFmisgNUBxh9k7dReud6CE9HNy7TAsce6mY rY0lzHWLCYMmw3RvaUklhp5emaPQxrvBc94spVqbgPjZx2spGkOyyUyZ4ZCBbivLivYk Egw93WmylISeD/d6iVLLBVJz0uFCp6nRD660EteBrYPMcOzmbgDSfY8cwkshrFMLVPEO +o8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernkonzept.com header.s=mx1 header.b=HJk3ZItH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernkonzept.com Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id q21-20020a638c55000000b005acf4298a78si1665698pgn.149.2023.10.18.01.07.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 01:07:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@kernkonzept.com header.s=mx1 header.b=HJk3ZItH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernkonzept.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 821168108308; Wed, 18 Oct 2023 01:07:13 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235119AbjJRIG0 (ORCPT + 24 others); Wed, 18 Oct 2023 04:06:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235097AbjJRIGT (ORCPT ); Wed, 18 Oct 2023 04:06:19 -0400 Received: from mx.kernkonzept.com (serv1.kernkonzept.com [IPv6:2a01:4f8:1c1c:b490::2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C713FA; Wed, 18 Oct 2023 01:06:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=kernkonzept.com; s=mx1; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From: Reply-To:Content-ID:Content-Description; bh=STNJwzUZgB4UhvM8z7lT2Hoj0RIjLauqJYgZpngPYdA=; b=HJk3ZItH9qZHuRO8QMZG93jFiM 8lR7W5DaQXGwQsRQJHRkD1p+L8v6MGBtdF4xan1CV7xZWCKMc1zy8iiyG7JJsa8hMZ+2F2wDObi+C Ba1ZIFzY0f830IvSFBDX/ucAZMGzrZv2OF4mYunad/qrBImBaLtlmfT+g0p3jof7FKvM7UVbrEZI1 LKFkO4vTqrgtiFyjRxhu3J3HTMnOyo16+CsMH6Tdr/mgPWGhsAIff8QNscBBMQq1R7SCtkwHYs8pJ 17uezkBR3OYkSUpbQN0Rujflb1g3CryeLy/zLymn+eia63h0yyV+rBVYKDnPnVKZZS7VBy2DBUdrX 5xKvCHCA==; Received: from [10.22.3.24] (helo=serv1.dd1.int.kernkonzept.com) by mx.kernkonzept.com with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) id 1qt1ZE-009lIU-0U; Wed, 18 Oct 2023 10:06:12 +0200 From: Stephan Gerhold Date: Wed, 18 Oct 2023 10:06:02 +0200 Subject: [PATCH v2 1/3] cpufreq: qcom-nvmem: Simplify driver data allocation MIME-Version: 1.0 Message-Id: <20231018-msm8909-cpufreq-v2-1-0962df95f654@kernkonzept.com> References: <20231018-msm8909-cpufreq-v2-0-0962df95f654@kernkonzept.com> In-Reply-To: <20231018-msm8909-cpufreq-v2-0-0962df95f654@kernkonzept.com> To: Viresh Kumar Cc: Andy Gross , Bjorn Andersson , Konrad Dybcio , Ilia Lin , "Rafael J. Wysocki" , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-pm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Ulf Hansson , Stephan Gerhold , Stephan Gerhold X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email 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 (fry.vger.email [0.0.0.0]); Wed, 18 Oct 2023 01:07:13 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780079851633789324 X-GMAIL-MSGID: 1780079851633789324 Simplify the allocation and cleanup of driver data by using devm together with a flexible array. Prepare for adding additional per-CPU data by defining a struct qcom_cpufreq_drv_cpu instead of storing the opp_tokens directly. Signed-off-by: Stephan Gerhold Reviewed-by: Konrad Dybcio --- drivers/cpufreq/qcom-cpufreq-nvmem.c | 49 +++++++++++++----------------------- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c index 3fa12648ceb6..82a244f3fa52 100644 --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c @@ -45,10 +45,14 @@ struct qcom_cpufreq_match_data { const char **genpd_names; }; +struct qcom_cpufreq_drv_cpu { + int opp_token; +}; + struct qcom_cpufreq_drv { - int *opp_tokens; u32 versions; const struct qcom_cpufreq_match_data *data; + struct qcom_cpufreq_drv_cpu cpus[]; }; static struct platform_device *cpufreq_dt_pdev, *cpufreq_pdev; @@ -290,42 +294,32 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) return -ENOENT; } - drv = kzalloc(sizeof(*drv), GFP_KERNEL); + drv = devm_kzalloc(&pdev->dev, struct_size(drv, cpus, num_possible_cpus()), + GFP_KERNEL); if (!drv) return -ENOMEM; match = pdev->dev.platform_data; drv->data = match->data; - if (!drv->data) { - ret = -ENODEV; - goto free_drv; - } + if (!drv->data) + return -ENODEV; if (drv->data->get_version) { speedbin_nvmem = of_nvmem_cell_get(np, NULL); - if (IS_ERR(speedbin_nvmem)) { - ret = dev_err_probe(cpu_dev, PTR_ERR(speedbin_nvmem), - "Could not get nvmem cell\n"); - goto free_drv; - } + if (IS_ERR(speedbin_nvmem)) + return dev_err_probe(cpu_dev, PTR_ERR(speedbin_nvmem), + "Could not get nvmem cell\n"); ret = drv->data->get_version(cpu_dev, speedbin_nvmem, &pvs_name, drv); if (ret) { nvmem_cell_put(speedbin_nvmem); - goto free_drv; + return ret; } nvmem_cell_put(speedbin_nvmem); } of_node_put(np); - drv->opp_tokens = kcalloc(num_possible_cpus(), sizeof(*drv->opp_tokens), - GFP_KERNEL); - if (!drv->opp_tokens) { - ret = -ENOMEM; - goto free_drv; - } - for_each_possible_cpu(cpu) { struct dev_pm_opp_config config = { .supported_hw = NULL, @@ -351,9 +345,9 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) } if (config.supported_hw || config.genpd_names) { - drv->opp_tokens[cpu] = dev_pm_opp_set_config(cpu_dev, &config); - if (drv->opp_tokens[cpu] < 0) { - ret = drv->opp_tokens[cpu]; + drv->cpus[cpu].opp_token = dev_pm_opp_set_config(cpu_dev, &config); + if (drv->cpus[cpu].opp_token < 0) { + ret = drv->cpus[cpu].opp_token; dev_err(cpu_dev, "Failed to set OPP config\n"); goto free_opp; } @@ -372,11 +366,7 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) free_opp: for_each_possible_cpu(cpu) - dev_pm_opp_clear_config(drv->opp_tokens[cpu]); - kfree(drv->opp_tokens); -free_drv: - kfree(drv); - + dev_pm_opp_clear_config(drv->cpus[cpu].opp_token); return ret; } @@ -388,10 +378,7 @@ static void qcom_cpufreq_remove(struct platform_device *pdev) platform_device_unregister(cpufreq_dt_pdev); for_each_possible_cpu(cpu) - dev_pm_opp_clear_config(drv->opp_tokens[cpu]); - - kfree(drv->opp_tokens); - kfree(drv); + dev_pm_opp_clear_config(drv->cpus[cpu].opp_token); } static struct platform_driver qcom_cpufreq_driver = {