Received: by 2002:a05:7412:31a9:b0:e2:908c:2ebd with SMTP id et41csp2497129rdb; Tue, 12 Sep 2023 04:00:06 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFppQKNin5yZ6NoKZLZk2UtX91cqZ3f4qg+D/NEeDnyWD/wQSdTgMB6pbI26yGfingefedn X-Received: by 2002:a17:90a:fb8c:b0:268:81c6:a01f with SMTP id cp12-20020a17090afb8c00b0026881c6a01fmr9856312pjb.26.1694516406333; Tue, 12 Sep 2023 04:00:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694516406; cv=none; d=google.com; s=arc-20160816; b=eL5A1T/HmNUU9cfxNM8yOPwRdgObnkxeoY7LTVKEtF4za0AVyy6io+89LYLsWj9mcD QtDxo4GUV7aLeSvhRnxss/2IE7rO/y0cERdOag9CWJvr83Rp0JAJkDCfq49TzXoiCnz0 NIQFXYBfokRGzntwPPIPCdqmkxIOZrkk6RYs30Ib7M3qx2/yddCk8mDAZeSp1Y+IGCEv FwmYOdZk51RMCcM1pFRb3l/zwib+dasGuPLNpPsPurqNpBJlf1Krvw5KWxh/qDV8zrjj PsoEtgVchX6SDAL2zcrM6guHFzXPyhN7+N+otCid2ffzy4PmRiDtVjl2OPdaS6F1WK3C OvDw== 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=BxXw2lPBlPXmQ8F4w0fefRPMnE8WnMJ9NcWQp72L7OE=; fh=hLbSiCPMRPlDJyfG7OKhxX7hqn01XgBFPDvNszHhiRY=; b=P8fOZVpBIui35nnjbZGqEW+PRSdFajdFgZ5OZCISJUlOXNKRPqIbmB3QW4GwBt4kKw GIVPMIKLLypg9MIfdTQIycleOFLoazaX4lHfYJC0I4oKossDWXZP6GWYeu2No4PwQosQ Sz0Os+Y/QCDJQ1nka1v2wqPt95dU+OIRTIbxZXIETMnL+cIdCt5dGC+fkhnDCdZDcxq2 Cr8/pRP4uWUhvyJMVTu7nLIinfiQ0SPbrQoYlfLgJsZN6qa0Kj2K/nIsYdksaqmHPyw9 MdbfpLQ22CzGDO2vBfsTR6aV2FEXWXXQqko50pDoDhmrfS0QeWwFMJ6HPyThodwlFFDY 2hHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernkonzept.com header.s=mx1 header.b=WMMOE1Jd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernkonzept.com Return-Path: Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id v12-20020a17090abb8c00b0027198088485si9396612pjr.45.2023.09.12.04.00.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 04:00:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@kernkonzept.com header.s=mx1 header.b=WMMOE1Jd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 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 howler.vger.email (Postfix) with ESMTP id B8CA8850FAD5; Tue, 12 Sep 2023 03:00:17 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233591AbjILKAQ (ORCPT + 99 others); Tue, 12 Sep 2023 06:00:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233343AbjILKAN (ORCPT ); Tue, 12 Sep 2023 06:00:13 -0400 Received: from mx.kernkonzept.com (serv1.kernkonzept.com [IPv6:2a01:4f8:1c1c:b490::2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E67A0E64; Tue, 12 Sep 2023 03:00:05 -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=BxXw2lPBlPXmQ8F4w0fefRPMnE8WnMJ9NcWQp72L7OE=; b=WMMOE1JdxyWmMDacjV73+JJ8Ec iBcnvhReNiQMfRVKMTDiS6FOo4trT2yvmbWboWzIDZHe7kevkONS8v3KLV2UTiDAF4Qw8B9ZGjeMa 0f1YN50EXx2kE+QYmTu5Jt+MVpTcuzPAjsYtIAuJU4u5SBa1HeHkwBEUQUB4iIPsc4IgbIEk64YeG v6T10qZ9anMbbTKwgx6Pp0rgI8tPPRTCKC0ECJpr0PT5C/6vVfvG76aAC7LM39BOB1+rgnLGTtCd9 dAFeOawFHAXelKSqwD5VNkL73SjSiSp+amqdMfC39XckjhUmUYidZ2zyj8c1yeuyE/uw/ZZUOmhIK HIMDzNkw==; 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 1qfzsr-0030Ws-0o; Tue, 12 Sep 2023 11:40:37 +0200 From: Stephan Gerhold Date: Tue, 12 Sep 2023 11:40:18 +0200 Subject: [PATCH 4/4] cpufreq: qcom-nvmem: Add MSM8909 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20230912-msm8909-cpufreq-v1-4-767ce66b544b@kernkonzept.com> References: <20230912-msm8909-cpufreq-v1-0-767ce66b544b@kernkonzept.com> In-Reply-To: <20230912-msm8909-cpufreq-v1-0-767ce66b544b@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 X-Mailer: b4 0.12.3 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 (howler.vger.email [0.0.0.0]); Tue, 12 Sep 2023 03:00:17 -0700 (PDT) When the MSM8909 SoC is used together with the PM8909 PMIC the primary power supply for the CPU (VDD_APC) is shared with other components to the SoC, namely the VDD_CX power domain typically supplied by the PM8909 S1 regulator. This means that all votes for necessary performance states go via the RPM firmware which collects the requirements from all the processors in the SoC. The RPM firmware then chooses the actual voltage based on the performance states ("corners"), depending on calibration values in the NVMEM and other factors. The MSM8909 SoC is also sometimes used with the PM8916 or PM660 PMIC. In that case there is a dedicated regulator connected to VDD_APC and Linux is responsible to do adaptive voltage scaling using CPR (similar to the existing code for QCS404). This difference can be described in the device tree, by either assigning the CPU a power domain from RPMPD or from the CPR driver. To describe this in a more generic way, use "apc" as power domain name instead of "cpr". From the Linux point of view there is no CPR involved when MSM8909 is used together with PM8909. Also add a simple function that reads the speedbin from a NVMEM cell and sets it as-is for opp-supported-hw. The actual bit position can be described in the device tree without additional driver changes. Signed-off-by: Stephan Gerhold --- drivers/cpufreq/qcom-cpufreq-nvmem.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c index 17d6ab14c909..2ea5e5ee9f1c 100644 --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c @@ -49,6 +49,24 @@ struct qcom_cpufreq_drv { static struct platform_device *cpufreq_dt_pdev, *cpufreq_pdev; +static int qcom_cpufreq_simple_get_version(struct device *cpu_dev, + struct nvmem_cell *speedbin_nvmem, + char **pvs_name, + struct qcom_cpufreq_drv *drv) +{ + u8 *speedbin; + + *pvs_name = NULL; + speedbin = nvmem_cell_read(speedbin_nvmem, NULL); + if (IS_ERR(speedbin)) + return PTR_ERR(speedbin); + + dev_dbg(cpu_dev, "speedbin: %d\n", *speedbin); + drv->versions = 1 << *speedbin; + kfree(speedbin); + return 0; +} + static void get_krait_bin_format_a(struct device *cpu_dev, int *speed, int *pvs, int *pvs_ver, u8 *buf) @@ -212,6 +230,13 @@ static const struct qcom_cpufreq_match_data match_data_krait = { .get_version = qcom_cpufreq_krait_name_version, }; +static const char *msm8909_genpd_names[] = { "apc", NULL }; + +static const struct qcom_cpufreq_match_data match_data_msm8909 = { + .get_version = qcom_cpufreq_simple_get_version, + .genpd_names = msm8909_genpd_names, +}; + static const char *qcs404_genpd_names[] = { "cpr", NULL }; static const struct qcom_cpufreq_match_data match_data_qcs404 = { @@ -375,6 +400,7 @@ static struct platform_driver qcom_cpufreq_driver = { }; static const struct of_device_id qcom_cpufreq_match_list[] __initconst = { + { .compatible = "qcom,msm8909", .data = &match_data_msm8909 }, { .compatible = "qcom,apq8096", .data = &match_data_kryo }, { .compatible = "qcom,msm8996", .data = &match_data_kryo }, { .compatible = "qcom,qcs404", .data = &match_data_qcs404 }, -- 2.39.2