Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4950140imm; Tue, 19 Jun 2018 02:31:52 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJZpUvOEXorub3ZzM04KnVQ5o0d8eDJXq1EKH9vJB1mN2jIRBIvXZHLCAdSW/MYrbIbXCio X-Received: by 2002:a65:55c6:: with SMTP id k6-v6mr14095935pgs.6.1529400712545; Tue, 19 Jun 2018 02:31:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529400712; cv=none; d=google.com; s=arc-20160816; b=ZSFmMRvhCn/9MDKkraLVD1CUm9HY6ztjMAinCP7GUi94XxrKWJqTNTMRuwA3I8YVo/ i2RSuVwlgb/1TdfHrQK73c/efS/OruCjL0X/fT1S0Bv4wnU+lkdrjIQrXyNwQH3ECx6K DLhWFe229XyhBzMN3bVDfVOARIN/e5VOK/QPq+4+AdxDC1vPegsc5SwzznGIx7JcXCCc rudQlfsK0JVdm0P5/eY8OC5ybIzXacQWGhor1Y0CEBpUe2atEaoQSyHJv/RPelN7D2u9 AtYiZ5OBDWNXDf/aIlzmkJvUqcZxaceNk5as0UMsu997N3D/lxHem/ZakuDzB0a17Hou GibA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=DZp8i1ERX48yktDo0QZ9NY2NKGqgrT3a0gQz5yEKMs8=; b=cvpoO7LR5xI3QuWZzpLPCkfPI2aTTbKSbNWCe/S6gVNi7ifNfvfebFsYPu9gLZ8tCj IYi93GDhAcTtoFY0u5xgv8FgBMxex/+Zk8ffO7OZkhqAgx/hMoNs3jpGpHnJIbsqqNE2 7cYAgbCgfRA0elRWrzYnOmex83cYtxb5NVxLDREqvgUbBs0BatAY+zEtRxHZ67I6TQp8 VSUMd7+c1dxUSqmjHwhyv8uQ6ZVHDzfkKzgwrvZ915XCLmTE2fjigMAzoLuhHY81TLrb rvbEcpKR8zrajpt3rtiSGNXR4RmBMAITwN8giiqaQmB/pwToDWRlPKjQLMMuyHDUZD2r TyNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cq30fiW5; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d34-v6si797697pld.252.2018.06.19.02.31.38; Tue, 19 Jun 2018 02:31:52 -0700 (PDT) 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=pass header.i=@linaro.org header.s=google header.b=cq30fiW5; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S937448AbeFSJa7 (ORCPT + 99 others); Tue, 19 Jun 2018 05:30:59 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:42320 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S937215AbeFSJa4 (ORCPT ); Tue, 19 Jun 2018 05:30:56 -0400 Received: by mail-pg0-f67.google.com with SMTP id c10-v6so8899128pgu.9 for ; Tue, 19 Jun 2018 02:30:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=DZp8i1ERX48yktDo0QZ9NY2NKGqgrT3a0gQz5yEKMs8=; b=cq30fiW596t2cgCJBzwocgGnxsnNOU7O7wT3DoUiSPxPCWhF3DKi+NkMt5yxMRoRqH z1svclkp11OzlljMzL9uIxNZMlBIEc2XTYOJ3V+sBODTOgOTmsObB7lVsWcCIXaDo0sz OaUgC8REX/TlfF49ATe28UpSGkE/xeN/NMLkc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=DZp8i1ERX48yktDo0QZ9NY2NKGqgrT3a0gQz5yEKMs8=; b=luYFx0IF23ktu6Cj82XEaXsdzx6l+bnkHzfKYe0rdo89KNtRtZAnQYmG1FlgnPScSs LKRGTtkvobeBEWL+kJq9fZbwJb/+cjyOVOg2GzQsRslzoD4PtSnTksXv43R0gEcP3D4g 9NcrqxTWsgDw2RQVHC7Iq4DI++QYOnlu4qgTP8KE3gwRrvVhgJJQb08H9pq3x3y1zkZi t2H70BU0tNFuUJAZ/2q3SfyK5Tnh2Tnz+E2DxGse9mcU96NhfrMeUIqm25382F7EvmCK XdxjkrAz2P/AsHq9aYcLalJ47SNPJKavyxk9Gc9ImC3ORKg4XqdsEyRHFPa6rCXYduWI 64XQ== X-Gm-Message-State: APt69E132DQPXZswTjqyAKWi05ingCSoMDm9Wodw9+ItnWpSMdxl0atT g8BGuLoCJhTPWlvOOeAtKsRoXvHcu1s= X-Received: by 2002:a65:6517:: with SMTP id x23-v6mr14348702pgv.268.1529400656423; Tue, 19 Jun 2018 02:30:56 -0700 (PDT) Received: from localhost ([122.171.103.96]) by smtp.gmail.com with ESMTPSA id l11-v6sm22692943pff.50.2018.06.19.02.30.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 Jun 2018 02:30:55 -0700 (PDT) Date: Tue, 19 Jun 2018 15:00:53 +0530 From: Viresh Kumar To: Taniya Das Cc: "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Stephen Boyd , Rajendra Nayak , devicetree@vger.kernel.org, robh@kernel.org, skannan@codeaurora.org Subject: Re: [PATCH v4 2/2] cpufreq: qcom-fw: Add support for QCOM cpufreq FW driver Message-ID: <20180619093053.6q624k54bffrcqu6@vireshk-i7> References: <1528801355-18719-1-git-send-email-tdas@codeaurora.org> <1528801355-18719-3-git-send-email-tdas@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1528801355-18719-3-git-send-email-tdas@codeaurora.org> User-Agent: NeoMutt/20180323-120-3dd1ac Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12-06-18, 16:32, Taniya Das wrote: > +static int qcom_get_related_cpus(struct device_node *np, struct cpumask *m) > +{ > + struct device_node *cpu_np, *freq_np; > + int cpu; > + > + for_each_possible_cpu(cpu) { > + cpu_np = of_cpu_device_node_get(cpu); > + if (!cpu_np) > + continue; > + freq_np = of_parse_phandle(cpu_np, "qcom,freq-domain", 0); > + if (!freq_np) > + continue; > + if (freq_np == np) > + cpumask_set_cpu(cpu, m); > + } > + > + return 0; > +} > + > +static int qcom_cpu_resources_init(struct platform_device *pdev, > + struct device_node *np, unsigned int cpu) > +{ > + struct cpufreq_qcom *c; > + struct resource res; > + struct device *dev = &pdev->dev; > + void __iomem *en_base; > + int index, ret; > + > + c = devm_kzalloc(dev, sizeof(*c), GFP_KERNEL); > + if (!c) > + return -ENOMEM; > + > + index = of_property_match_string(np, "reg-names", "enable"); > + if (index < 0) > + return index; > + > + if (of_address_to_resource(np, index, &res)) > + return -ENOMEM; > + > + en_base = devm_ioremap(dev, res.start, resource_size(&res)); > + if (!en_base) { > + dev_err(dev, "Unable to map %s enable-base\n", np->name); > + return -ENOMEM; > + } > + > + /* FW should be in enabled state to proceed */ > + if (!(readl_relaxed(en_base) & 0x1)) { > + dev_err(dev, "%s firmware not enabled\n", np->name); > + return -ENODEV; > + } > + devm_iounmap(&pdev->dev, en_base); > + > + index = of_property_match_string(np, "reg-names", "perf"); > + if (index < 0) > + return index; > + > + if (of_address_to_resource(np, index, &res)) > + return -ENOMEM; > + > + c->perf_base = devm_ioremap(dev, res.start, resource_size(&res)); > + if (!c->perf_base) { > + dev_err(dev, "Unable to map %s perf-base\n", np->name); > + return -ENOMEM; > + } > + > + index = of_property_match_string(np, "reg-names", "lut"); > + if (index < 0) > + return index; > + > + if (of_address_to_resource(np, index, &res)) > + return -ENOMEM; > + > + c->lut_base = devm_ioremap(dev, res.start, resource_size(&res)); > + if (!c->lut_base) { > + dev_err(dev, "Unable to map %s lut-base\n", np->name); > + return -ENOMEM; > + } > + > + ret = qcom_get_related_cpus(np, &c->related_cpus); > + if (ret) { > + dev_err(dev, "%s failed to get related CPUs\n", np->name); > + return ret; > + } > + > + c->max_cores = cpumask_weight(&c->related_cpus); > + if (!c->max_cores) > + return -ENOENT; > + > + ret = qcom_read_lut(pdev, c); > + if (ret) { > + dev_err(dev, "%s failed to read LUT\n", np->name); > + return ret; > + } > + > + qcom_freq_domain_map[cpu] = c; This still looks wrong. You have removed the for-each-cpu loop here, so what will happen now is that you will allocate a different "struct cpufreq_qcom" for every CPU, even if they are related. Is that what you should be doing ? I think there should still be a single copy of that structure which must be used by all related CPUs. > + > + return 0; > +} > + > +static int qcom_resources_init(struct platform_device *pdev) > +{ > + struct device_node *np, *cpu_np; > + unsigned int cpu; > + int ret; > + > + for_each_possible_cpu(cpu) { > + cpu_np = of_cpu_device_node_get(cpu); > + if (!cpu_np) { > + dev_err(&pdev->dev, "Failed to get cpu %d device\n", > + cpu); > + continue; > + } > + > + np = of_parse_phandle(cpu_np, "qcom,freq-domain", 0); > + if (!np) { > + dev_err(&pdev->dev, "Failed to get freq-domain device\n"); > + return -EINVAL; > + } > + > + of_node_put(cpu_np); > + > + ret = qcom_cpu_resources_init(pdev, np, cpu); > + if (ret) > + return ret; > + } > + > + return 0; > +} -- viresh