public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/4] PCI: qcom: Add support for OPP
@ 2023-08-22 15:12 Krishna chaitanya chundru
  2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
                   ` (3 more replies)
  0 siblings, 4 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
  To: manivannan.sadhasivam
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Krishna chaitanya chundru

This patch adds support for OPP to vote for the performance state of RPMH
power domain based upon GEN speed it PCIe got enumerated.

Before link up PCIe driver will vote for the maximum performance state.

Add API dev_pm_opp_find_level_floor to find To find the highest opp for a device
based on the level.

changes from v3:
	- Removing the opp vote on suspend when the link is not up and link is not
	  up and add debug prints as suggested by pavan.
	- Added dev_pm_opp_find_level_floor API to find the highest opp to vote.
changes from v2:
	- Instead of using the freq based opp search use level based as suggested
	  by Dmitry Baryshkov.
Changes from v1:
        - Addressed comments from Krzysztof Kozlowski.
        - Added the rpmhpd_opp_xxx phandle as suggested by pavan.
        - Added dev_pm_opp_set_opp API call which was missed on previous patch.

Krishna chaitanya chundru (4):
  dt-bindings: pci: qcom: Add opp table
  arm64: dts: qcom: sm8450: Add opp table support to PCIe
  OPP: Add api to retrieve opps which is at most the provided level
  PCI: qcom: Add OPP support for speed based performance state of RPMH

 .../devicetree/bindings/pci/qcom,pcie.yaml         |  4 ++
 arch/arm64/boot/dts/qcom/sm8450.dtsi               | 47 +++++++++++++++++++
 drivers/opp/core.c                                 | 26 +++++++++++
 drivers/pci/controller/dwc/pcie-qcom.c             | 52 ++++++++++++++++++++++
 include/linux/pm_opp.h                             |  4 ++
 5 files changed, 133 insertions(+)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
  2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
  2023-08-22 16:06   ` Konrad Dybcio
  2023-08-23  6:25   ` Manivannan Sadhasivam
  2023-08-22 15:12 ` [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe Krishna chaitanya chundru
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
  To: manivannan.sadhasivam
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Krishna chaitanya chundru, Andy Gross,
	Bjorn Andersson, Konrad Dybcio, Bjorn Helgaas, Lorenzo Pieralisi,
	Krzysztof Wilczyński, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Manivannan Sadhasivam,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS

PCIe needs to choose the appropriate performance state of RPMH power
domain based upon the PCIe gen speed.

Adding the Operating Performance Points table allows to adjust power domain
performance state, depending on the PCIe gen speed.

Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
 Documentation/devicetree/bindings/pci/qcom,pcie.yaml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
index 81971be4..779339c 100644
--- a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
+++ b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
@@ -121,6 +121,10 @@ properties:
     description: GPIO controlled connection to WAKE# signal
     maxItems: 1
 
+  operating-points-v2: true
+  opp-table:
+    type: object
+
 required:
   - compatible
   - reg
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe
  2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
  2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
  2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
  3 siblings, 0 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
  To: manivannan.sadhasivam
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Krishna chaitanya chundru, Andy Gross,
	Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS

PCIe needs to choose the appropriate performance state of RPMH power
domain based up on the PCIe gen speed.

So let's add the OPP table support to specify RPMH performance states.

Use opp-level for the PCIe gen speed for easier use.

Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
---
 arch/arm64/boot/dts/qcom/sm8450.dtsi | 47 ++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi
index 595533a..3af0cf9 100644
--- a/arch/arm64/boot/dts/qcom/sm8450.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi
@@ -1803,7 +1803,28 @@
 			pinctrl-names = "default";
 			pinctrl-0 = <&pcie0_default_state>;
 
+			operating-points-v2 = <&pcie0_opp_table>;
+
 			status = "disabled";
+
+			pcie0_opp_table: opp-table {
+				compatible = "operating-points-v2";
+
+				opp-1 {
+					opp-level = <1>;
+					required-opps = <&rpmhpd_opp_low_svs>;
+				};
+
+				opp-2 {
+					opp-level = <2>;
+					required-opps = <&rpmhpd_opp_low_svs>;
+				};
+
+				opp-3 {
+					opp-level = <3>;
+					required-opps = <&rpmhpd_opp_nom>;
+				};
+			};
 		};
 
 		pcie0_phy: phy@1c06000 {
@@ -1915,7 +1936,33 @@
 			pinctrl-names = "default";
 			pinctrl-0 = <&pcie1_default_state>;
 
+			operating-points-v2 = <&pcie1_opp_table>;
+
 			status = "disabled";
+
+			pcie1_opp_table: opp-table {
+				compatible = "operating-points-v2";
+
+				opp-1 {
+					opp-level = <1>;
+					required-opps = <&rpmhpd_opp_low_svs>;
+				};
+
+				opp-2 {
+					opp-level = <2>;
+					required-opps = <&rpmhpd_opp_low_svs>;
+				};
+
+				opp-3 {
+					opp-level = <3>;
+					required-opps = <&rpmhpd_opp_low_svs>;
+				};
+
+				opp-4 {
+					opp-level = <4>;
+					required-opps = <&rpmhpd_opp_nom>;
+				};
+			};
 		};
 
 		pcie1_phy: phy@1c0f000 {
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
  2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
  2023-08-22 15:12 ` [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
  2023-08-22 21:33   ` kernel test robot
                     ` (5 more replies)
  2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
  3 siblings, 6 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
  To: manivannan.sadhasivam
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Krishna chaitanya chundru, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Rafael J. Wysocki,
	open list:OPERATING PERFORMANCE POINTS (OPP)

Add dev_pm_opp_find_level_floor() for searching a lesser match or
operating on OPP in the order of decreasing level.

Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
---
 drivers/opp/core.c     | 26 ++++++++++++++++++++++++++
 include/linux/pm_opp.h |  4 ++++
 2 files changed, 30 insertions(+)

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 954c948..e668cf2 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -727,6 +727,32 @@ struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_ceil);
 
+
+/**
+ * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
+ * @dev:	device for which we do this operation
+ * @freq:	Start level
+ *
+ * Search for the matching floor *available* OPP from a starting level
+ * for a device.
+ *
+ * Return: matching *opp and refreshes *level accordingly, else returns
+ * ERR_PTR in case of error and should be handled using IS_ERR. Error return
+ * values can be:
+ * EINVAL:	for bad pointer
+ * ERANGE:	no match found for search
+ * ENODEV:	if device not found in list of registered devices
+ *
+ * The callers are required to call dev_pm_opp_put() for the returned OPP after
+ * use.
+ */
+struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
+					      unsigned long *level)
+{
+	return _find_key_floor(dev, level, 0, true, _read_level, NULL);
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
+
 /**
  * dev_pm_opp_find_bw_ceil() - Search for a rounded ceil bandwidth
  * @dev:	device for which we do this operation
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index dc1fb58..a3bc386 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -128,6 +128,8 @@ struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
 					       unsigned int level);
 struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
 					      unsigned int *level);
+struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
+					      unsigned long *level);
 
 struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
 					     unsigned long *freq);
@@ -285,6 +287,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_ceil(struct device *dev,
 
 static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
 					unsigned int *bw, int index)
+static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
+					unsigned long *level)
 {
 	return ERR_PTR(-EOPNOTSUPP);
 }
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH
  2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
                   ` (2 preceding siblings ...)
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
  2023-08-23  7:06   ` Manivannan Sadhasivam
  3 siblings, 1 reply; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
  To: manivannan.sadhasivam
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Krishna chaitanya chundru,
	Manivannan Sadhasivam, Andy Gross, Bjorn Andersson, Konrad Dybcio,
	Lorenzo Pieralisi, Krzysztof Wilczyński, Rob Herring,
	Bjorn Helgaas

Before link training vote for the maximum performance state of RPMH
and once link is up, vote for the performance state based upon the link
speed.

Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
---
 drivers/pci/controller/dwc/pcie-qcom.c | 52 ++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index 7a87a47..161fdad 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -22,6 +22,7 @@
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
 #include <linux/pci.h>
+#include <linux/pm_opp.h>
 #include <linux/pm_runtime.h>
 #include <linux/platform_device.h>
 #include <linux/phy/pcie.h>
@@ -1357,6 +1358,33 @@ static int qcom_pcie_icc_init(struct qcom_pcie *pcie)
 	return 0;
 }
 
+static void qcom_pcie_opp_update(struct qcom_pcie *pcie)
+{
+	struct dw_pcie *pci = pcie->pci;
+	struct dev_pm_opp *opp;
+	u32 offset, status;
+	int speed, ret = 0;
+
+	offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
+	status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
+
+	/* Only update constraints if link is up. */
+	if (!(status & PCI_EXP_LNKSTA_DLLLA))
+		return;
+
+	speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status);
+
+	opp = dev_pm_opp_find_level_exact(pci->dev, speed);
+	if (!IS_ERR(opp)) {
+		ret = dev_pm_opp_set_opp(pci->dev, opp);
+		if (ret)
+			dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
+						dev_pm_opp_get_level(opp), ret);
+		dev_pm_opp_put(opp);
+	}
+
+}
+
 static void qcom_pcie_icc_update(struct qcom_pcie *pcie)
 {
 	struct dw_pcie *pci = pcie->pci;
@@ -1439,8 +1467,10 @@ static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
 static int qcom_pcie_probe(struct platform_device *pdev)
 {
 	const struct qcom_pcie_cfg *pcie_cfg;
+	unsigned long max_level = INT_MAX;
 	struct device *dev = &pdev->dev;
 	struct qcom_pcie *pcie;
+	struct dev_pm_opp *opp;
 	struct dw_pcie_rp *pp;
 	struct resource *res;
 	struct dw_pcie *pci;
@@ -1511,6 +1541,23 @@ static int qcom_pcie_probe(struct platform_device *pdev)
 	if (ret)
 		goto err_pm_runtime_put;
 
+	/* OPP table is optional */
+	ret = devm_pm_opp_of_add_table(dev);
+	if (ret && ret != -ENODEV) {
+		dev_err(dev, "Invalid OPP table in Device tree\n");
+		goto err_pm_runtime_put;
+	}
+
+	/* vote for max level in the opp table */
+	opp = dev_pm_opp_find_level_floor(dev, &max_level);
+	if (!IS_ERR(opp)) {
+		ret = dev_pm_opp_set_opp(dev, opp);
+		if (ret)
+			dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
+						dev_pm_opp_get_level(opp), ret);
+		dev_pm_opp_put(opp);
+	}
+
 	ret = pcie->cfg->ops->get_resources(pcie);
 	if (ret)
 		goto err_pm_runtime_put;
@@ -1531,6 +1578,8 @@ static int qcom_pcie_probe(struct platform_device *pdev)
 
 	qcom_pcie_icc_update(pcie);
 
+	qcom_pcie_opp_update(pcie);
+
 	if (pcie->mhi)
 		qcom_pcie_init_debugfs(pcie);
 
@@ -1577,6 +1626,7 @@ static int qcom_pcie_suspend_noirq(struct device *dev)
 	 */
 	if (!dw_pcie_link_up(pcie->pci)) {
 		qcom_pcie_host_deinit(&pcie->pci->pp);
+		dev_pm_opp_set_opp(dev, NULL);
 		pcie->suspended = true;
 	}
 
@@ -1593,6 +1643,8 @@ static int qcom_pcie_resume_noirq(struct device *dev)
 		if (ret)
 			return ret;
 
+		qcom_pcie_opp_update(pcie);
+
 		pcie->suspended = false;
 	}
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
  2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
@ 2023-08-22 16:06   ` Konrad Dybcio
  2023-09-07  6:01     ` Krishna Chaitanya Chundru
  2023-08-23  6:25   ` Manivannan Sadhasivam
  1 sibling, 1 reply; 17+ messages in thread
From: Konrad Dybcio @ 2023-08-22 16:06 UTC (permalink / raw)
  To: Krishna chaitanya chundru, manivannan.sadhasivam
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Andy Gross, Bjorn Andersson, Bjorn Helgaas,
	Lorenzo Pieralisi, Krzysztof Wilczyński, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Manivannan Sadhasivam,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS

On 22.08.2023 17:12, Krishna chaitanya chundru wrote:
> PCIe needs to choose the appropriate performance state of RPMH power
> domain based upon the PCIe gen speed.
> 
> Adding the Operating Performance Points table allows to adjust power domain
> performance state, depending on the PCIe gen speed.
> 
> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> ---
I only got patches 1, 2 and 4 of this series.

Please consider using the b4 tool [1], which takes care of
all of the sending shenanigans for you.

Konrad

[1] https://b4.docs.kernel.org/en/latest/index.html

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
@ 2023-08-22 21:33   ` kernel test robot
  2023-08-22 23:10   ` kernel test robot
                     ` (4 subsequent siblings)
  5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-22 21:33 UTC (permalink / raw)
  To: Krishna chaitanya chundru, manivannan.sadhasivam
  Cc: oe-kbuild-all, helgaas, linux-pci, linux-arm-msm, linux-kernel,
	quic_vbadigan, quic_nitegupt, quic_skananth, quic_ramkri,
	quic_parass, krzysztof.kozlowski, Krishna chaitanya chundru,
	Viresh Kumar, Stephen Boyd, Rafael J. Wysocki,
	(open list:OPERATING PERFORMANCE POINTS (OPP))

Hi Krishna,

kernel test robot noticed the following build warnings:

[auto build test WARNING on pci/for-linus]
[also build test WARNING on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link:    https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: parisc-randconfig-r081-20230823 (https://download.01.org/0day-ci/archive/20230823/202308230526.RjJmRzFy-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230526.RjJmRzFy-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230526.RjJmRzFy-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/opp/core.c:756: warning: Function parameter or member 'level' not described in 'dev_pm_opp_find_level_floor'
>> drivers/opp/core.c:756: warning: Excess function parameter 'freq' description in 'dev_pm_opp_find_level_floor'
   drivers/opp/core.c:2025: warning: Function parameter or member 'opp_table' not described in '_opp_set_supported_hw'
   drivers/opp/core.c:2025: warning: Excess function parameter 'dev' description in '_opp_set_supported_hw'
   drivers/opp/core.c:2068: warning: Function parameter or member 'opp_table' not described in '_opp_set_prop_name'
   drivers/opp/core.c:2068: warning: Excess function parameter 'dev' description in '_opp_set_prop_name'
   drivers/opp/core.c:2109: warning: Function parameter or member 'opp_table' not described in '_opp_set_regulators'
   drivers/opp/core.c:2109: warning: Excess function parameter 'count' description in '_opp_set_regulators'
   drivers/opp/core.c:2213: warning: Function parameter or member 'opp_table' not described in '_opp_set_clknames'
   drivers/opp/core.c:2213: warning: Function parameter or member 'config_clks' not described in '_opp_set_clknames'
   drivers/opp/core.c:2311: warning: Function parameter or member 'opp_table' not described in '_opp_set_config_regulators_helper'
   drivers/opp/core.c:2375: warning: Function parameter or member 'opp_table' not described in '_opp_attach_genpd'
   drivers/opp/core.c:2602: warning: Function parameter or member 'token' not described in 'dev_pm_opp_clear_config'
   drivers/opp/core.c:2602: warning: Excess function parameter 'opp_table' description in 'dev_pm_opp_clear_config'


vim +756 drivers/opp/core.c

   734	
   735	
   736	/**
   737	 * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
   738	 * @dev:	device for which we do this operation
   739	 * @freq:	Start level
   740	 *
   741	 * Search for the matching floor *available* OPP from a starting level
   742	 * for a device.
   743	 *
   744	 * Return: matching *opp and refreshes *level accordingly, else returns
   745	 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
   746	 * values can be:
   747	 * EINVAL:	for bad pointer
   748	 * ERANGE:	no match found for search
   749	 * ENODEV:	if device not found in list of registered devices
   750	 *
   751	 * The callers are required to call dev_pm_opp_put() for the returned OPP after
   752	 * use.
   753	 */
   754	struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
   755						      unsigned long *level)
 > 756	{
   757		return _find_key_floor(dev, level, 0, true, _read_level, NULL);
   758	}
   759	EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
   760	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
  2023-08-22 21:33   ` kernel test robot
@ 2023-08-22 23:10   ` kernel test robot
  2023-08-22 23:42   ` kernel test robot
                     ` (3 subsequent siblings)
  5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-22 23:10 UTC (permalink / raw)
  To: Krishna chaitanya chundru, manivannan.sadhasivam
  Cc: llvm, oe-kbuild-all, helgaas, linux-pci, linux-arm-msm,
	linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
	quic_ramkri, quic_parass, krzysztof.kozlowski,
	Krishna chaitanya chundru, Viresh Kumar, Stephen Boyd,
	Rafael J. Wysocki, (open list:OPERATING PERFORMANCE POINTS (OPP))

Hi Krishna,

kernel test robot noticed the following build warnings:

[auto build test WARNING on pci/for-linus]
[also build test WARNING on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link:    https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: x86_64-randconfig-073-20230823 (https://download.01.org/0day-ci/archive/20230823/202308230637.gz3wmjrT-lkp@intel.com/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230637.gz3wmjrT-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230637.gz3wmjrT-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/opp/core.c:756: warning: Function parameter or member 'level' not described in 'dev_pm_opp_find_level_floor'
>> drivers/opp/core.c:756: warning: Excess function parameter 'freq' description in 'dev_pm_opp_find_level_floor'
   drivers/opp/core.c:2025: warning: Function parameter or member 'opp_table' not described in '_opp_set_supported_hw'
   drivers/opp/core.c:2025: warning: Excess function parameter 'dev' description in '_opp_set_supported_hw'
   drivers/opp/core.c:2068: warning: Function parameter or member 'opp_table' not described in '_opp_set_prop_name'
   drivers/opp/core.c:2068: warning: Excess function parameter 'dev' description in '_opp_set_prop_name'
   drivers/opp/core.c:2109: warning: Function parameter or member 'opp_table' not described in '_opp_set_regulators'
   drivers/opp/core.c:2109: warning: Excess function parameter 'count' description in '_opp_set_regulators'
   drivers/opp/core.c:2213: warning: Function parameter or member 'opp_table' not described in '_opp_set_clknames'
   drivers/opp/core.c:2213: warning: Function parameter or member 'config_clks' not described in '_opp_set_clknames'
   drivers/opp/core.c:2311: warning: Function parameter or member 'opp_table' not described in '_opp_set_config_regulators_helper'
   drivers/opp/core.c:2375: warning: Function parameter or member 'opp_table' not described in '_opp_attach_genpd'
   drivers/opp/core.c:2602: warning: Function parameter or member 'token' not described in 'dev_pm_opp_clear_config'
   drivers/opp/core.c:2602: warning: Excess function parameter 'opp_table' description in 'dev_pm_opp_clear_config'


vim +756 drivers/opp/core.c

   734	
   735	
   736	/**
   737	 * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
   738	 * @dev:	device for which we do this operation
   739	 * @freq:	Start level
   740	 *
   741	 * Search for the matching floor *available* OPP from a starting level
   742	 * for a device.
   743	 *
   744	 * Return: matching *opp and refreshes *level accordingly, else returns
   745	 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
   746	 * values can be:
   747	 * EINVAL:	for bad pointer
   748	 * ERANGE:	no match found for search
   749	 * ENODEV:	if device not found in list of registered devices
   750	 *
   751	 * The callers are required to call dev_pm_opp_put() for the returned OPP after
   752	 * use.
   753	 */
   754	struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
   755						      unsigned long *level)
 > 756	{
   757		return _find_key_floor(dev, level, 0, true, _read_level, NULL);
   758	}
   759	EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
   760	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
  2023-08-22 21:33   ` kernel test robot
  2023-08-22 23:10   ` kernel test robot
@ 2023-08-22 23:42   ` kernel test robot
  2023-08-23  0:48   ` kernel test robot
                     ` (2 subsequent siblings)
  5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-22 23:42 UTC (permalink / raw)
  To: Krishna chaitanya chundru, manivannan.sadhasivam
  Cc: llvm, oe-kbuild-all, helgaas, linux-pci, linux-arm-msm,
	linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
	quic_ramkri, quic_parass, krzysztof.kozlowski,
	Krishna chaitanya chundru, Viresh Kumar, Stephen Boyd,
	Rafael J. Wysocki, (open list:OPERATING PERFORMANCE POINTS (OPP))

Hi Krishna,

kernel test robot noticed the following build errors:

[auto build test ERROR on pci/for-linus]
[also build test ERROR on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link:    https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: um-allnoconfig (https://download.01.org/0day-ci/archive/20230823/202308230750.JgHxIvTb-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230750.JgHxIvTb-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230750.JgHxIvTb-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from kernel/cpu.c:13:
   In file included from include/linux/sched/isolation.h:6:
   In file included from include/linux/tick.h:8:
   In file included from include/linux/clockchips.h:14:
   In file included from include/linux/clocksource.h:22:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     547 |         val = __raw_readb(PCI_IOBASE + addr);
         |                           ~~~~~~~~~~ ^
   include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     560 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
      37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
         |                                                   ^
   In file included from kernel/cpu.c:13:
   In file included from include/linux/sched/isolation.h:6:
   In file included from include/linux/tick.h:8:
   In file included from include/linux/clockchips.h:14:
   In file included from include/linux/clocksource.h:22:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     573 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
      35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
         |                                                   ^
   In file included from kernel/cpu.c:13:
   In file included from include/linux/sched/isolation.h:6:
   In file included from include/linux/tick.h:8:
   In file included from include/linux/clockchips.h:14:
   In file included from include/linux/clocksource.h:22:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     584 |         __raw_writeb(value, PCI_IOBASE + addr);
         |                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     594 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     604 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     692 |         readsb(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     700 |         readsw(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     708 |         readsl(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     717 |         writesb(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     726 |         writesw(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     735 |         writesl(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   In file included from kernel/cpu.c:41:
   In file included from include/trace/events/power.h:8:
   In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
     289 |                                         unsigned int *bw, int index)
         |                                                                     ^
         |                                                                     ;
   12 warnings and 1 error generated.
--
   In file included from drivers/base/core.c:12:
   In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
     289 |                                         unsigned int *bw, int index)
         |                                                                     ^
         |                                                                     ;
   In file included from drivers/base/core.c:25:
   In file included from include/linux/blkdev.h:9:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:5:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:97:11: warning: array index 3 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
      97 |                 return (set->sig[3] | set->sig[2] |
         |                         ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from drivers/base/core.c:25:
   In file included from include/linux/blkdev.h:9:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:5:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:97:25: warning: array index 2 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
      97 |                 return (set->sig[3] | set->sig[2] |
         |                                       ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from drivers/base/core.c:25:
   In file included from include/linux/blkdev.h:9:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:5:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:98:4: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
      98 |                         set->sig[1] | set->sig[0]) == 0;
         |                         ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from drivers/base/core.c:25:
   In file included from include/linux/blkdev.h:9:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:5:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:100:11: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
     100 |                 return (set->sig[1] | set->sig[0]) == 0;
         |                         ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from drivers/base/core.c:25:
   In file included from include/linux/blkdev.h:9:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:5:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:113:11: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
     113 |                 return  (set1->sig[3] == set2->sig[3]) &&
         |                          ^         ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from drivers/base/core.c:25:
   In file included from include/linux/blkdev.h:9:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:5:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:113:27: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
     113 |                 return  (set1->sig[3] == set2->sig[3]) &&
         |                                          ^         ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from drivers/base/core.c:25:
   In file included from include/linux/blkdev.h:9:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:5:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
--
   In file included from kernel/power/qos.c:40:
   In file included from include/trace/events/power.h:8:
   In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
     289 |                                         unsigned int *bw, int index)
         |                                                                     ^
         |                                                                     ;
   In file included from kernel/power/qos.c:40:
   In file included from include/trace/events/power.h:12:
   In file included from include/linux/trace_events.h:9:
   In file included from include/linux/hardirq.h:11:
   In file included from arch/um/include/asm/hardirq.h:5:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     547 |         val = __raw_readb(PCI_IOBASE + addr);
         |                           ~~~~~~~~~~ ^
   include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     560 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
      37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
         |                                                   ^
   In file included from kernel/power/qos.c:40:
   In file included from include/trace/events/power.h:12:
   In file included from include/linux/trace_events.h:9:
   In file included from include/linux/hardirq.h:11:
   In file included from arch/um/include/asm/hardirq.h:5:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     573 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
      35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
         |                                                   ^
   In file included from kernel/power/qos.c:40:
   In file included from include/trace/events/power.h:12:
   In file included from include/linux/trace_events.h:9:
   In file included from include/linux/hardirq.h:11:
   In file included from arch/um/include/asm/hardirq.h:5:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     584 |         __raw_writeb(value, PCI_IOBASE + addr);
         |                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     594 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     604 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     692 |         readsb(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     700 |         readsw(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     708 |         readsl(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     717 |         writesb(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     726 |         writesw(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     735 |         writesl(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   12 warnings and 1 error generated.
--
   In file included from fs/proc/cpuinfo.c:2:
   In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
     289 |                                         unsigned int *bw, int index)
         |                                                                     ^
         |                                                                     ;
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:97:11: warning: array index 3 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
      97 |                 return (set->sig[3] | set->sig[2] |
         |                         ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:97:25: warning: array index 2 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
      97 |                 return (set->sig[3] | set->sig[2] |
         |                                       ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:98:4: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
      98 |                         set->sig[1] | set->sig[0]) == 0;
         |                         ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:100:11: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
     100 |                 return (set->sig[1] | set->sig[0]) == 0;
         |                         ^        ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:113:11: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
     113 |                 return  (set1->sig[3] == set2->sig[3]) &&
         |                          ^         ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:113:27: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
     113 |                 return  (set1->sig[3] == set2->sig[3]) &&
         |                                          ^         ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:114:5: warning: array index 2 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
     114 |                         (set1->sig[2] == set2->sig[2]) &&
         |                          ^         ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:114:21: warning: array index 2 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
     114 |                         (set1->sig[2] == set2->sig[2]) &&
         |                                          ^         ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
      24 |         unsigned long sig[_NSIG_WORDS];
         |         ^
   In file included from fs/proc/cpuinfo.c:3:
   In file included from include/linux/fs.h:33:
   In file included from include/linux/percpu-rwsem.h:7:
   In file included from include/linux/rcuwait.h:6:
   In file included from include/linux/sched/signal.h:6:
   include/linux/signal.h:115:5: warning: array index 1 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
     115 |                         (set1->sig[1] == set2->sig[1]) &&
         |                          ^         ~
   arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
..


vim +289 include/linux/pm_opp.h

00ce3873f730fb Krzysztof Kozlowski       2022-05-04  287  
00ce3873f730fb Krzysztof Kozlowski       2022-05-04  288  static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
00ce3873f730fb Krzysztof Kozlowski       2022-05-04 @289  					unsigned int *bw, int index)
f220ddccf1afc8 Krishna chaitanya chundru 2023-08-22  290  static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
f220ddccf1afc8 Krishna chaitanya chundru 2023-08-22  291  					unsigned long *level)
00ce3873f730fb Krzysztof Kozlowski       2022-05-04  292  {
00ce3873f730fb Krzysztof Kozlowski       2022-05-04  293  	return ERR_PTR(-EOPNOTSUPP);
00ce3873f730fb Krzysztof Kozlowski       2022-05-04  294  }
00ce3873f730fb Krzysztof Kozlowski       2022-05-04  295  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
                     ` (2 preceding siblings ...)
  2023-08-22 23:42   ` kernel test robot
@ 2023-08-23  0:48   ` kernel test robot
  2023-08-23  1:05   ` Pavan Kondeti
  2023-08-23  1:13   ` kernel test robot
  5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-23  0:48 UTC (permalink / raw)
  To: Krishna chaitanya chundru, manivannan.sadhasivam
  Cc: oe-kbuild-all, helgaas, linux-pci, linux-arm-msm, linux-kernel,
	quic_vbadigan, quic_nitegupt, quic_skananth, quic_ramkri,
	quic_parass, krzysztof.kozlowski, Krishna chaitanya chundru,
	Viresh Kumar, Stephen Boyd, Rafael J. Wysocki,
	(open list:OPERATING PERFORMANCE POINTS (OPP))

Hi Krishna,

kernel test robot noticed the following build warnings:

[auto build test WARNING on pci/for-linus]
[also build test WARNING on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link:    https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: um-defconfig (https://download.01.org/0day-ci/archive/20230823/202308230848.SzyPhc6B-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230848.SzyPhc6B-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230848.SzyPhc6B-lkp@intel.com/

All warnings (new ones prefixed by >>):

         | ^
   include/linux/unaligned/packed_struct.h:17:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      17 | {
         | ^
   include/linux/unaligned/packed_struct.h:23:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      23 | {
         | ^
   include/linux/unaligned/packed_struct.h:29:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      29 | {
         | ^
   include/linux/unaligned/packed_struct.h:35:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      35 | {
         | ^
   include/linux/unaligned/packed_struct.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      41 | {
         | ^
   include/asm-generic/unaligned.h:26:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      26 | {
         | ^
   include/asm-generic/unaligned.h:31:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      31 | {
         | ^
   include/asm-generic/unaligned.h:36:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      36 | {
         | ^
   include/asm-generic/unaligned.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      41 | {
         | ^
   include/asm-generic/unaligned.h:46:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      46 | {
         | ^
   include/asm-generic/unaligned.h:51:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      51 | {
         | ^
   include/asm-generic/unaligned.h:56:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      56 | {
         | ^
   include/asm-generic/unaligned.h:61:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      61 | {
         | ^
   include/asm-generic/unaligned.h:66:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      66 | {
         | ^
   include/asm-generic/unaligned.h:71:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      71 | {
         | ^
   include/asm-generic/unaligned.h:76:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      76 | {
         | ^
   include/asm-generic/unaligned.h:81:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      81 | {
         | ^
   include/asm-generic/unaligned.h:86:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 | {
         | ^
   include/asm-generic/unaligned.h:91:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      91 | {
         | ^
   include/asm-generic/unaligned.h:96:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      96 | {
         | ^
   include/asm-generic/unaligned.h:101:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     101 | {
         | ^
   include/asm-generic/unaligned.h:106:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     106 | {
         | ^
   include/asm-generic/unaligned.h:113:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     113 | {
         | ^
   include/asm-generic/unaligned.h:118:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     118 | {
         | ^
   include/asm-generic/unaligned.h:125:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     125 | {
         | ^
   include/asm-generic/unaligned.h:130:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     130 | {
         | ^
   include/asm-generic/unaligned.h:140:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     140 | {
         | ^
   include/asm-generic/unaligned.h:145:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     145 | {
         | ^
   include/asm-generic/unaligned.h:151:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     151 | {
         | ^
   arch/um/include/asm/uaccess.h:25:22: error: storage class specified for parameter 'raw_copy_from_user'
      25 | extern unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n);
         |                      ^~~~~~~~~~~~~~~~~~
   arch/um/include/asm/uaccess.h:26:22: error: storage class specified for parameter 'raw_copy_to_user'
      26 | extern unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n);
         |                      ^~~~~~~~~~~~~~~~
   arch/um/include/asm/uaccess.h:27:22: error: storage class specified for parameter '__clear_user'
      27 | extern unsigned long __clear_user(void __user *mem, unsigned long len);
         |                      ^~~~~~~~~~~~
   arch/um/include/asm/uaccess.h:28:19: error: storage class specified for parameter '__access_ok'
      28 | static inline int __access_ok(const void __user *ptr, unsigned long size);
         |                   ^~~~~~~~~~~
>> arch/um/include/asm/uaccess.h:28:19: warning: parameter '__access_ok' declared 'inline'
>> arch/um/include/asm/uaccess.h:28:1: warning: 'gnu_inline' attribute ignored [-Wattributes]
      28 | static inline int __access_ok(const void __user *ptr, unsigned long size);
         | ^~~~~~
   arch/um/include/asm/uaccess.h:28:19: error: 'no_instrument_function' attribute applies only to functions
      28 | static inline int __access_ok(const void __user *ptr, unsigned long size);
         |                   ^~~~~~~~~~~
   In file included from arch/um/include/asm/uaccess.h:37:
   include/asm-generic/uaccess.h:136:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     136 | {
         | ^
   include/asm-generic/uaccess.h:144:12: error: storage class specified for parameter '__put_user_bad'
     144 | extern int __put_user_bad(void) __attribute__((noreturn));
         |            ^~~~~~~~~~~~~~
   include/asm-generic/uaccess.h:197:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     197 | {
         | ^
   include/asm-generic/uaccess.h:205:12: error: storage class specified for parameter '__get_user_bad'
     205 | extern int __get_user_bad(void) __attribute__((noreturn));
         |            ^~~~~~~~~~~~~~
   include/asm-generic/uaccess.h:221:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     221 | {
         | ^
   In file included from ./arch/um/include/generated/asm/extable.h:1,
                    from include/asm-generic/uaccess.h:229:
   include/asm-generic/extable.h:18:1: warning: empty declaration
      18 | struct exception_table_entry
         | ^~~~~~
   include/asm-generic/extable.h:24:1: warning: empty declaration
      24 | struct pt_regs;
         | ^~~~~~
   include/asm-generic/extable.h:25:12: error: storage class specified for parameter 'fixup_exception'
      25 | extern int fixup_exception(struct pt_regs *regs);
         |            ^~~~~~~~~~~~~~~
   In file included from include/linux/compiler_types.h:80,
                    from <command-line>:
   include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
     356 | #define __must_check                    __attribute__((__warn_unused_result__))
         |                                         ^~~~~~~~~~~~~
   include/asm-generic/uaccess.h:231:1: note: in expansion of macro '__must_check'
     231 | __must_check long strncpy_from_user(char *dst, const char __user *src,
         | ^~~~~~~~~~~~
   include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
     356 | #define __must_check                    __attribute__((__warn_unused_result__))
         |                                         ^~~~~~~~~~~~~
   include/asm-generic/uaccess.h:233:1: note: in expansion of macro '__must_check'
     233 | __must_check long strnlen_user(const char __user *src, long n);
         | ^~~~~~~~~~~~
   arch/um/include/asm/uaccess.h:40:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      40 | {
         | ^
   include/linux/uaccess.h:82:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      82 | {
         | ^
   include/linux/uaccess.h:94:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      94 | {
         | ^
   include/linux/uaccess.h:122:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     122 | {
         | ^
   include/linux/uaccess.h:132:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     132 | {
         | ^
   include/linux/uaccess.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     144 | {
         | ^
   include/linux/uaccess.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     164 | {
         | ^
   include/linux/uaccess.h:181:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     181 | {
         | ^
   include/linux/uaccess.h:189:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     189 | {
         | ^
   include/linux/uaccess.h:202:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     202 | {
         | ^
   include/linux/uaccess.h:209:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     209 | {
         | ^
   include/linux/uaccess.h:214:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     214 | {
         | ^
   include/linux/uaccess.h:226:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     226 | {
         | ^
   include/linux/uaccess.h:236:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     236 | {
         | ^
   include/linux/uaccess.h:249:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     249 | {
         | ^
   include/linux/uaccess.h:281:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     281 | {
         | ^
   include/linux/uaccess.h:292:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     292 | {
         | ^
   include/linux/uaccess.h:298:25: error: storage class specified for parameter 'check_zeroed_user'
     298 | extern __must_check int check_zeroed_user(const void __user *from, size_t size);
         |                         ^~~~~~~~~~~~~~~~~
--
         | ^
   include/linux/page_ref.h:88:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      88 | {
         | ^
   include/linux/page_ref.h:93:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      93 | {
         | ^
   include/linux/page_ref.h:98:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      98 | {
         | ^
   include/linux/page_ref.h:105:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     105 | {
         | ^
   include/linux/page_ref.h:114:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     114 | {
         | ^
   include/linux/page_ref.h:119:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     119 | {
         | ^
   include/linux/page_ref.h:126:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     126 | {
         | ^
   include/linux/page_ref.h:131:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     131 | {
         | ^
   include/linux/page_ref.h:138:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     138 | {
         | ^
   include/linux/page_ref.h:143:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     143 | {
         | ^
   include/linux/page_ref.h:152:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     152 | {
         | ^
   include/linux/page_ref.h:157:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     157 | {
         | ^
   include/linux/page_ref.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     164 | {
         | ^
   include/linux/page_ref.h:169:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     169 | {
         | ^
   include/linux/page_ref.h:176:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     176 | {
         | ^
   include/linux/page_ref.h:181:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     181 | {
         | ^
   include/linux/page_ref.h:190:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     190 | {
         | ^
   include/linux/page_ref.h:195:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     195 | {
         | ^
   include/linux/page_ref.h:204:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     204 | {
         | ^
   include/linux/page_ref.h:209:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     209 | {
         | ^
   include/linux/page_ref.h:218:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     218 | {
         | ^
   include/linux/page_ref.h:223:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     223 | {
         | ^
   include/linux/page_ref.h:232:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     232 | {
         | ^
   include/linux/page_ref.h:237:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     237 | {
         | ^
   include/linux/page_ref.h:246:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     246 | {
         | ^
   include/linux/page_ref.h:262:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     262 | {
         | ^
   include/linux/page_ref.h:267:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     267 | {
         | ^
   include/linux/page_ref.h:312:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     312 | {
         | ^
   include/linux/page_ref.h:317:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     317 | {
         | ^
   include/linux/page_ref.h:326:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     326 | {
         | ^
   include/linux/page_ref.h:331:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     331 | {
         | ^
   include/linux/page_ref.h:341:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     341 | {
         | ^
   In file included from arch/um/include/asm/pgtable.h:11,
                    from include/linux/pgtable.h:6,
                    from include/linux/mm.h:29:
>> arch/um/include/asm/fixmap.h:35:1: warning: empty declaration
      35 | enum fixed_addresses {
         | ^~~~
   arch/um/include/asm/fixmap.h:39:13: error: storage class specified for parameter '__set_fixmap'
      39 | extern void __set_fixmap (enum fixed_addresses idx,
         |             ^~~~~~~~~~~~
   In file included from arch/um/include/asm/fixmap.h:54:
   include/asm-generic/fixmap.h:31:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      31 | {
         | ^
   include/asm-generic/fixmap.h:37:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      37 | {
         | ^
   In file included from include/asm-generic/pgtable-nopud.h:7,
                    from arch/um/include/asm/pgtable-3level.h:10,
                    from arch/um/include/asm/pgtable.h:28:
   include/asm-generic/pgtable-nop4d.h:9:31: error: storage class specified for parameter 'p4d_t'
       9 | typedef struct { pgd_t pgd; } p4d_t;
         |                               ^~~~~
   include/asm-generic/pgtable-nop4d.h:21:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      21 | static inline int pgd_none(pgd_t pgd)           { return 0; }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:22:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      22 | static inline int pgd_bad(pgd_t pgd)            { return 0; }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:23:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      23 | static inline int pgd_present(pgd_t pgd)        { return 1; }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:24:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      24 | static inline void pgd_clear(pgd_t *pgd)        { }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:35:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
      35 | static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
         |                     ^
   include/asm-generic/pgtable-nopud.h:16:18: error: expected specifier-qualifier-list before 'p4d_t'
      16 | typedef struct { p4d_t p4d; } pud_t;
         |                  ^~~~~
   include/asm-generic/pgtable-nopud.h:16:31: error: storage class specified for parameter 'pud_t'
      16 | typedef struct { p4d_t p4d; } pud_t;
         |                               ^~~~~
   include/asm-generic/pgtable-nopud.h:28:28: error: expected declaration specifiers or '...' before 'p4d_t'
      28 | static inline int p4d_none(p4d_t p4d)           { return 0; }
         |                            ^~~~~
   include/asm-generic/pgtable-nopud.h:29:27: error: expected declaration specifiers or '...' before 'p4d_t'
      29 | static inline int p4d_bad(p4d_t p4d)            { return 0; }
         |                           ^~~~~
   include/asm-generic/pgtable-nopud.h:30:31: error: expected declaration specifiers or '...' before 'p4d_t'
      30 | static inline int p4d_present(p4d_t p4d)        { return 1; }
         |                               ^~~~~
   include/asm-generic/pgtable-nopud.h:31:30: error: expected declaration specifiers or '...' before 'p4d_t'
      31 | static inline void p4d_clear(p4d_t *p4d)        { }
         |                              ^~~~~
   include/asm-generic/pgtable-nopud.h:42:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
      42 | static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
         |                     ^
   arch/um/include/asm/pgtable-3level.h:64:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      64 | {
         | ^
   arch/um/include/asm/pgtable-3level.h:68:46: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      68 | static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; }
         |                                              ^
   arch/um/include/asm/pgtable-3level.h:72:31: error: expected declaration specifiers or '...' before 'pud_t'
      72 | static inline void pud_clear (pud_t *pud)
         |                               ^~~~~
   arch/um/include/asm/pgtable-3level.h:81:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      81 | {
         | ^
   arch/um/include/asm/pgtable-3level.h:86:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 | {
         | ^
   arch/um/include/asm/pgtable-3level.h:95:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      95 | {
         | ^
   arch/um/include/asm/pgtable.h:33:14: error: storage class specified for parameter 'swapper_pg_dir'
      33 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
         |              ^~~~~~~~~~~~~~
   arch/um/include/asm/pgtable.h:36:23: error: storage class specified for parameter 'empty_zero_page'
      36 | extern unsigned long *empty_zero_page;
         |                       ^~~~~~~~~~~~~~~
   arch/um/include/asm/pgtable.h:46:22: error: storage class specified for parameter 'end_iomem'
      46 | extern unsigned long end_iomem;
         |                      ^~~~~~~~~
   arch/um/include/asm/pgtable.h:112:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     112 | {
         | ^
   arch/um/include/asm/pgtable.h:121:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     121 | {
         | ^
   arch/um/include/asm/pgtable.h:126:38: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     126 | static inline int pte_exec(pte_t pte){
         |                                      ^
   arch/um/include/asm/pgtable.h:132:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     132 | {
         | ^
   arch/um/include/asm/pgtable.h:138:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     138 | {
         | ^
   arch/um/include/asm/pgtable.h:143:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     143 | {
         | ^
   arch/um/include/asm/pgtable.h:148:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     148 | {
         | ^
   arch/um/include/asm/pgtable.h:153:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     153 | {
         | ^
   arch/um/include/asm/pgtable.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     164 | {
         | ^
   arch/um/include/asm/pgtable.h:170:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     170 | {
         | ^
   arch/um/include/asm/pgtable.h:176:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     176 | {
         | ^
   arch/um/include/asm/pgtable.h:182:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     182 | {
         | ^
   arch/um/include/asm/pgtable.h:191:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     191 | {
         | ^
   arch/um/include/asm/pgtable.h:199:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     199 | {
         | ^
   arch/um/include/asm/pgtable.h:205:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     205 | {
         | ^
   arch/um/include/asm/pgtable.h:211:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     211 | {
         | ^
   arch/um/include/asm/pgtable.h:219:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     219 | {
         | ^
   arch/um/include/asm/pgtable.h:227:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     227 | {
         | ^
   arch/um/include/asm/pgtable.h:233:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     233 | {
         | ^
   arch/um/include/asm/pgtable.h:247:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     247 | {
         | ^
   arch/um/include/asm/pgtable.h:253:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     253 | {
         | ^
   arch/um/include/asm/pgtable.h:276:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     276 | {
         | ^
>> arch/um/include/asm/pgtable.h:289:1: warning: empty declaration
     289 | struct mm_struct;
         | ^~~~~~
   arch/um/include/asm/pgtable.h:290:15: error: storage class specified for parameter 'virt_to_pte'
     290 | extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr);
         |               ^~~~~~~~~~~
   arch/um/include/asm/pgtable.h:317:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     317 | {
         | ^
   arch/um/include/asm/pgtable.h:322:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     322 | {
         | ^
   arch/um/include/asm/pgtable.h:328:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     328 | {
         | ^
   In file included from include/linux/pgtable.h:14:
   include/asm-generic/pgtable_uffd.h:6:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
       6 | {
         | ^
   include/asm-generic/pgtable_uffd.h:11:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      11 | {
         | ^
   include/asm-generic/pgtable_uffd.h:16:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      16 | {
         | ^
   include/asm-generic/pgtable_uffd.h:21:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      21 | {
         | ^
   include/asm-generic/pgtable_uffd.h:26:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      26 | {
         | ^
   include/asm-generic/pgtable_uffd.h:31:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      31 | {
         | ^
   include/asm-generic/pgtable_uffd.h:36:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      36 | {
         | ^
   include/asm-generic/pgtable_uffd.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      41 | {
         | ^
   include/asm-generic/pgtable_uffd.h:46:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      46 | {
         | ^
   include/asm-generic/pgtable_uffd.h:51:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      51 | {
         | ^
   include/asm-generic/pgtable_uffd.h:56:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      56 | {
         | ^
   include/asm-generic/pgtable_uffd.h:61:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      61 | {
         | ^
   In file included from include/linux/pgtable.h:15:
   include/linux/page_table_check.h:119:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     119 | {
         | ^
   include/linux/page_table_check.h:123:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     123 | {
         | ^
   include/linux/page_table_check.h:128:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     128 | {
         | ^
   include/linux/page_table_check.h:133:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     133 | {
         | ^
   include/linux/page_table_check.h:137:67: error: expected declaration specifiers or '...' before 'pud_t'
     137 |                                               unsigned long addr, pud_t pud)
         |                                                                   ^~~~~
   include/linux/page_table_check.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     144 | {
         | ^
   include/linux/page_table_check.h:150:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     150 | {
         | ^
   include/linux/page_table_check.h:154:65: error: expected declaration specifiers or '...' before 'pud_t'
     154 |                                             unsigned long addr, pud_t *pudp,
         |                                                                 ^~~~~
   include/linux/page_table_check.h:155:45: error: expected declaration specifiers or '...' before 'pud_t'
     155 |                                             pud_t pud)
         |                                             ^~~~~
   include/linux/page_table_check.h:162:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     162 | {
         | ^
   include/linux/pgtable.h:63:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      63 | {
         | ^
   include/linux/pgtable.h:70:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      70 | {
         | ^
   include/linux/pgtable.h:78:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      78 | {
         | ^
   include/linux/pgtable.h:91:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      91 | {
         | ^
   include/linux/pgtable.h:106:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     106 | {
         | ^
   include/linux/pgtable.h:110:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     110 | {
         | ^
..


vim +28 arch/um/include/asm/uaccess.h

^1da177e4c3f41 include/asm-um/uaccess.h      Linus Torvalds     2005-04-16  12  
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  13  #define __under_task_size(addr, size) \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  14  	(((unsigned long) (addr) < TASK_SIZE) && \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  15  	 (((unsigned long) (addr) + (size)) < TASK_SIZE))
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  16  
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12  17  #define __access_ok_vsyscall(addr, size) \
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12  18  	  (((unsigned long) (addr) >= FIXADDR_USER_START) && \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  19  	  ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  20  	  ((unsigned long) (addr) + (size) >= (unsigned long)(addr)))
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  21  
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  22  #define __addr_range_nowrap(addr, size) \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  23  	((unsigned long) (addr) <= ((unsigned long) (addr) + (size)))
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro            2011-08-18  24  
a668ce3a001fe0 arch/um/include/asm/uaccess.h Al Viro            2017-03-28  25  extern unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n);
a668ce3a001fe0 arch/um/include/asm/uaccess.h Al Viro            2017-03-28 @26  extern unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n);
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12 @27  extern unsigned long __clear_user(void __user *mem, unsigned long len);
12700c17fc2861 arch/um/include/asm/uaccess.h Arnd Bergmann      2022-02-15 @28  static inline int __access_ok(const void __user *ptr, unsigned long size);
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12  29  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
                     ` (3 preceding siblings ...)
  2023-08-23  0:48   ` kernel test robot
@ 2023-08-23  1:05   ` Pavan Kondeti
  2023-09-07  6:04     ` Krishna Chaitanya Chundru
  2023-08-23  1:13   ` kernel test robot
  5 siblings, 1 reply; 17+ messages in thread
From: Pavan Kondeti @ 2023-08-23  1:05 UTC (permalink / raw)
  To: Krishna chaitanya chundru
  Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
	linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
	quic_ramkri, quic_parass, krzysztof.kozlowski, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Rafael J. Wysocki,
	open list:OPERATING PERFORMANCE POINTS (OPP)

On Tue, Aug 22, 2023 at 08:42:20PM +0530, Krishna chaitanya chundru wrote:
> Add dev_pm_opp_find_level_floor() for searching a lesser match or
> operating on OPP in the order of decreasing level.
> 

"OPP: Add api to retrieve opps which is at most the provided level". Pls
change this to "opp: Add dev_pm_opp_find_level_floor()". The API name
conveys the message.

In the description, you can give a use case. i.e voting for the max
level during initialization of a driver.


> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
> ---
>  drivers/opp/core.c     | 26 ++++++++++++++++++++++++++
>  include/linux/pm_opp.h |  4 ++++
>  2 files changed, 30 insertions(+)
> 
> diff --git a/drivers/opp/core.c b/drivers/opp/core.c
> index 954c948..e668cf2 100644
> --- a/drivers/opp/core.c
> +++ b/drivers/opp/core.c
> @@ -727,6 +727,32 @@ struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
>  }
>  EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_ceil);
>  
> +
> +/**
> + * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
> + * @dev:	device for which we do this operation
> + * @freq:	Start level
> + *

%s/freq/level

Run make W=1 so that kerneldoc is tested.

> + * Search for the matching floor *available* OPP from a starting level
> + * for a device.
> + *
> + * Return: matching *opp and refreshes *level accordingly, else returns
> + * ERR_PTR in case of error and should be handled using IS_ERR. Error return
> + * values can be:

What do you mean by refresh here?

> + * EINVAL:	for bad pointer
> + * ERANGE:	no match found for search
> + * ENODEV:	if device not found in list of registered devices
> + *
> + * The callers are required to call dev_pm_opp_put() for the returned OPP after
> + * use.
> + */
> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
> +					      unsigned long *level)
> +{
> +	return _find_key_floor(dev, level, 0, true, _read_level, NULL);
> +}
> +EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
> +
>  /**
>   * dev_pm_opp_find_bw_ceil() - Search for a rounded ceil bandwidth
>   * @dev:	device for which we do this operation
> diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
> index dc1fb58..a3bc386 100644
> --- a/include/linux/pm_opp.h
> +++ b/include/linux/pm_opp.h
> @@ -128,6 +128,8 @@ struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
>  					       unsigned int level);
>  struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
>  					      unsigned int *level);
> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
> +					      unsigned long *level);
>  
>  struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
>  					     unsigned long *freq);
> @@ -285,6 +287,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_ceil(struct device *dev,
>  
>  static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
>  					unsigned int *bw, int index)
> +static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
> +					unsigned long *level)
>  {
>  	return ERR_PTR(-EOPNOTSUPP);
>  }
> 
Please run ./scripts/checkpatch.pl --strict <your patch> and fix the
indentation warnings from this patch.

Thanks,
Pavan

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
                     ` (4 preceding siblings ...)
  2023-08-23  1:05   ` Pavan Kondeti
@ 2023-08-23  1:13   ` kernel test robot
  5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-23  1:13 UTC (permalink / raw)
  To: Krishna chaitanya chundru, manivannan.sadhasivam
  Cc: oe-kbuild-all, helgaas, linux-pci, linux-arm-msm, linux-kernel,
	quic_vbadigan, quic_nitegupt, quic_skananth, quic_ramkri,
	quic_parass, krzysztof.kozlowski, Krishna chaitanya chundru,
	Viresh Kumar, Stephen Boyd, Rafael J. Wysocki,
	(open list:OPERATING PERFORMANCE POINTS (OPP))

Hi Krishna,

kernel test robot noticed the following build errors:

[auto build test ERROR on pci/for-linus]
[also build test ERROR on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link:    https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: arc-allnoconfig (https://download.01.org/0day-ci/archive/20230823/202308230954.jyXY61U7-lkp@intel.com/config)
compiler: arc-elf-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230954.jyXY61U7-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230954.jyXY61U7-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

     263 | {
         | ^
   include/linux/signal.h:268:13: error: storage class specified for parameter 'flush_sigqueue'
     268 | extern void flush_sigqueue(struct sigpending *queue);
         |             ^~~~~~~~~~~~~~
   include/linux/signal.h:272:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     272 | {
         | ^
   include/linux/signal.h:276:1: warning: empty declaration
     276 | struct timespec;
         | ^~~~~~
   include/linux/signal.h:277:1: warning: empty declaration
     277 | struct pt_regs;
         | ^~~~~~
   include/linux/signal.h:278:1: warning: empty declaration
     278 | enum pid_type;
         | ^~~~
   include/linux/signal.h:280:12: error: storage class specified for parameter 'next_signal'
     280 | extern int next_signal(struct sigpending *pending, sigset_t *mask);
         |            ^~~~~~~~~~~
   include/linux/signal.h:281:12: error: storage class specified for parameter 'do_send_sig_info'
     281 | extern int do_send_sig_info(int sig, struct kernel_siginfo *info,
         |            ^~~~~~~~~~~~~~~~
   include/linux/signal.h:283:12: error: storage class specified for parameter 'group_send_sig_info'
     283 | extern int group_send_sig_info(int sig, struct kernel_siginfo *info,
         |            ^~~~~~~~~~~~~~~~~~~
   include/linux/signal.h:285:12: error: storage class specified for parameter 'send_signal_locked'
     285 | extern int send_signal_locked(int sig, struct kernel_siginfo *info,
         |            ^~~~~~~~~~~~~~~~~~
   include/linux/signal.h:287:12: error: storage class specified for parameter 'sigprocmask'
     287 | extern int sigprocmask(int, sigset_t *, sigset_t *);
         |            ^~~~~~~~~~~
   include/linux/signal.h:288:13: error: storage class specified for parameter 'set_current_blocked'
     288 | extern void set_current_blocked(sigset_t *);
         |             ^~~~~~~~~~~~~~~~~~~
   include/linux/signal.h:289:13: error: storage class specified for parameter '__set_current_blocked'
     289 | extern void __set_current_blocked(const sigset_t *);
         |             ^~~~~~~~~~~~~~~~~~~~~
   include/linux/signal.h:290:12: error: storage class specified for parameter 'show_unhandled_signals'
     290 | extern int show_unhandled_signals;
         |            ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/signal.h:292:13: error: storage class specified for parameter 'get_signal'
     292 | extern bool get_signal(struct ksignal *ksig);
         |             ^~~~~~~~~~
   include/linux/signal.h:293:13: error: storage class specified for parameter 'signal_setup_done'
     293 | extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping);
         |             ^~~~~~~~~~~~~~~~~
   include/linux/signal.h:294:13: error: storage class specified for parameter 'exit_signals'
     294 | extern void exit_signals(struct task_struct *tsk);
         |             ^~~~~~~~~~~~
   include/linux/signal.h:295:13: error: storage class specified for parameter 'kernel_sigaction'
     295 | extern void kernel_sigaction(int, __sighandler_t);
         |             ^~~~~~~~~~~~~~~~
   include/linux/signal.h:301:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     301 | {
         | ^
   include/linux/signal.h:311:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     311 | {
         | ^
   include/linux/signal.h:321:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     321 | {
         | ^
   include/linux/signal.h:325:27: error: storage class specified for parameter 'sighand_cachep'
     325 | extern struct kmem_cache *sighand_cachep;
         |                           ^~~~~~~~~~~~~~
   include/linux/signal.h:327:13: error: storage class specified for parameter 'unhandled_signal'
     327 | extern bool unhandled_signal(struct task_struct *tsk, int sig);
         |             ^~~~~~~~~~~~~~~~
   include/linux/signal.h:470:56: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     470 | static inline bool sigaltstack_size_valid(size_t size) { return true; }
         |                                                        ^
   include/linux/signal.h:474:1: warning: empty declaration
     474 | struct seq_file;
         | ^~~~~~
   include/linux/signal.h:475:13: error: storage class specified for parameter 'render_sigset_t'
     475 | extern void render_sigset_t(struct seq_file *, const char *, sigset_t *);
         |             ^~~~~~~~~~~~~~~
   include/linux/signal.h:487:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     487 | {
         | ^
   In file included from include/linux/sched/signal.h:8:
   include/linux/sched/jobctl.h:7:1: warning: empty declaration
       7 | struct task_struct;
         | ^~~~~~
   include/linux/sched/jobctl.h:43:13: error: storage class specified for parameter 'task_set_jobctl_pending'
      43 | extern bool task_set_jobctl_pending(struct task_struct *task, unsigned long mask);
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/sched/jobctl.h:44:13: error: storage class specified for parameter 'task_clear_jobctl_trapping'
      44 | extern void task_clear_jobctl_trapping(struct task_struct *task);
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/sched/jobctl.h:45:13: error: storage class specified for parameter 'task_clear_jobctl_pending'
      45 | extern void task_clear_jobctl_pending(struct task_struct *task, unsigned long mask);
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/uaccess.h:5,
                    from include/linux/sched/task.h:11,
                    from include/linux/sched/signal.h:9:
   include/linux/fault-inject-usercopy.h:18:47: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      18 | static inline bool should_fail_usercopy(void) { return false; }
         |                                               ^
   In file included from include/linux/uaccess.h:11:
>> arch/arc/include/asm/uaccess.h:140:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     140 | {
         | ^
   arch/arc/include/asm/uaccess.h:367:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     367 | {
         | ^
   arch/arc/include/asm/uaccess.h:588:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     588 | {
         | ^
   In file included from include/asm-generic/uaccess.h:11,
                    from arch/arc/include/asm/uaccess.h:641:
   include/asm-generic/access_ok.h:32:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      32 | {
         | ^
   include/asm-generic/uaccess.h:144:12: error: storage class specified for parameter '__put_user_bad'
     144 | extern int __put_user_bad(void) __attribute__((noreturn));
         |            ^~~~~~~~~~~~~~
   include/asm-generic/uaccess.h:205:12: error: storage class specified for parameter '__get_user_bad'
     205 | extern int __get_user_bad(void) __attribute__((noreturn));
         |            ^~~~~~~~~~~~~~
   include/asm-generic/uaccess.h:221:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     221 | {
         | ^
   In file included from ./arch/arc/include/generated/asm/extable.h:1,
                    from include/asm-generic/uaccess.h:229:
   include/asm-generic/extable.h:18:1: warning: empty declaration
      18 | struct exception_table_entry
         | ^~~~~~
   include/asm-generic/extable.h:24:1: warning: empty declaration
      24 | struct pt_regs;
         | ^~~~~~
   include/asm-generic/extable.h:25:12: error: storage class specified for parameter 'fixup_exception'
      25 | extern int fixup_exception(struct pt_regs *regs);
         |            ^~~~~~~~~~~~~~~
   In file included from include/linux/compiler_types.h:80,
                    from <command-line>:
   include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
     356 | #define __must_check                    __attribute__((__warn_unused_result__))
         |                                         ^~~~~~~~~~~~~
   include/asm-generic/uaccess.h:231:1: note: in expansion of macro '__must_check'
     231 | __must_check long strncpy_from_user(char *dst, const char __user *src,
         | ^~~~~~~~~~~~
   include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
     356 | #define __must_check                    __attribute__((__warn_unused_result__))
         |                                         ^~~~~~~~~~~~~
   include/asm-generic/uaccess.h:233:1: note: in expansion of macro '__must_check'
     233 | __must_check long strnlen_user(const char __user *src, long n);
         | ^~~~~~~~~~~~
   include/linux/uaccess.h:82:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      82 | {
         | ^
   include/linux/uaccess.h:94:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      94 | {
         | ^
   include/linux/uaccess.h:122:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     122 | {
         | ^
   include/linux/uaccess.h:132:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     132 | {
         | ^
   include/linux/uaccess.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     144 | {
         | ^
   include/linux/uaccess.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     164 | {
         | ^
   include/linux/uaccess.h:181:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     181 | {
         | ^
   include/linux/uaccess.h:189:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     189 | {
         | ^
   include/linux/uaccess.h:202:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     202 | {
         | ^
   include/linux/uaccess.h:209:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     209 | {
         | ^
   include/linux/uaccess.h:214:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     214 | {
         | ^
   include/linux/uaccess.h:226:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     226 | {
         | ^
   include/linux/uaccess.h:236:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     236 | {
         | ^
   include/linux/uaccess.h:249:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     249 | {
         | ^
   include/linux/uaccess.h:281:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     281 | {
         | ^
   include/linux/uaccess.h:292:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     292 | {
         | ^
   include/linux/uaccess.h:298:25: error: storage class specified for parameter 'check_zeroed_user'
     298 | extern __must_check int check_zeroed_user(const void __user *from, size_t size);
         |                         ^~~~~~~~~~~~~~~~~
   include/linux/uaccess.h:350:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     350 | {
--
   include/linux/page_ref.h:262:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     262 | {
         | ^
   include/linux/page_ref.h:267:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     267 | {
         | ^
   include/linux/page_ref.h:312:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     312 | {
         | ^
   include/linux/page_ref.h:317:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     317 | {
         | ^
   include/linux/page_ref.h:326:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     326 | {
         | ^
   include/linux/page_ref.h:331:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     331 | {
         | ^
   include/linux/page_ref.h:341:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     341 | {
         | ^
   In file included from include/asm-generic/pgtable-nopud.h:7,
                    from include/asm-generic/pgtable-nopmd.h:7,
                    from arch/arc/include/asm/pgtable-levels.h:95,
                    from arch/arc/include/asm/pgtable.h:11,
                    from include/linux/pgtable.h:6,
                    from include/linux/mm.h:29:
   include/asm-generic/pgtable-nop4d.h:9:31: error: storage class specified for parameter 'p4d_t'
       9 | typedef struct { pgd_t pgd; } p4d_t;
         |                               ^~~~~
   include/asm-generic/pgtable-nop4d.h:21:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      21 | static inline int pgd_none(pgd_t pgd)           { return 0; }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:22:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      22 | static inline int pgd_bad(pgd_t pgd)            { return 0; }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:23:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      23 | static inline int pgd_present(pgd_t pgd)        { return 1; }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:24:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      24 | static inline void pgd_clear(pgd_t *pgd)        { }
         |                                                 ^
   include/asm-generic/pgtable-nop4d.h:35:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
      35 | static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
         |                     ^
   include/asm-generic/pgtable-nopud.h:16:18: error: expected specifier-qualifier-list before 'p4d_t'
      16 | typedef struct { p4d_t p4d; } pud_t;
         |                  ^~~~~
   include/asm-generic/pgtable-nopud.h:16:31: error: storage class specified for parameter 'pud_t'
      16 | typedef struct { p4d_t p4d; } pud_t;
         |                               ^~~~~
   include/asm-generic/pgtable-nopud.h:28:28: error: expected declaration specifiers or '...' before 'p4d_t'
      28 | static inline int p4d_none(p4d_t p4d)           { return 0; }
         |                            ^~~~~
   include/asm-generic/pgtable-nopud.h:29:27: error: expected declaration specifiers or '...' before 'p4d_t'
      29 | static inline int p4d_bad(p4d_t p4d)            { return 0; }
         |                           ^~~~~
   include/asm-generic/pgtable-nopud.h:30:31: error: expected declaration specifiers or '...' before 'p4d_t'
      30 | static inline int p4d_present(p4d_t p4d)        { return 1; }
         |                               ^~~~~
   include/asm-generic/pgtable-nopud.h:31:30: error: expected declaration specifiers or '...' before 'p4d_t'
      31 | static inline void p4d_clear(p4d_t *p4d)        { }
         |                              ^~~~~
   include/asm-generic/pgtable-nopud.h:42:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
      42 | static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
         |                     ^
   include/asm-generic/pgtable-nopmd.h:9:1: warning: empty declaration
       9 | struct mm_struct;
         | ^~~~~~
   include/asm-generic/pgtable-nopmd.h:18:18: error: expected specifier-qualifier-list before 'pud_t'
      18 | typedef struct { pud_t pud; } pmd_t;
         |                  ^~~~~
   include/asm-generic/pgtable-nopmd.h:18:31: error: storage class specified for parameter 'pmd_t'
      18 | typedef struct { pud_t pud; } pmd_t;
         |                               ^~~~~
   include/asm-generic/pgtable-nopmd.h:30:28: error: expected declaration specifiers or '...' before 'pud_t'
      30 | static inline int pud_none(pud_t pud)           { return 0; }
         |                            ^~~~~
   include/asm-generic/pgtable-nopmd.h:31:27: error: expected declaration specifiers or '...' before 'pud_t'
      31 | static inline int pud_bad(pud_t pud)            { return 0; }
         |                           ^~~~~
   include/asm-generic/pgtable-nopmd.h:32:31: error: expected declaration specifiers or '...' before 'pud_t'
      32 | static inline int pud_present(pud_t pud)        { return 1; }
         |                               ^~~~~
   include/asm-generic/pgtable-nopmd.h:33:28: error: expected declaration specifiers or '...' before 'pud_t'
      33 | static inline int pud_user(pud_t pud)           { return 0; }
         |                            ^~~~~
   include/asm-generic/pgtable-nopmd.h:34:28: error: expected declaration specifiers or '...' before 'pud_t'
      34 | static inline int pud_leaf(pud_t pud)           { return 0; }
         |                            ^~~~~
   include/asm-generic/pgtable-nopmd.h:35:30: error: expected declaration specifiers or '...' before 'pud_t'
      35 | static inline void pud_clear(pud_t *pud)        { }
         |                              ^~~~~
   include/asm-generic/pgtable-nopmd.h:46:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
      46 | static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
         |                     ^
   include/asm-generic/pgtable-nopmd.h:63:51: error: expected declaration specifiers or '...' before 'pmd_t'
      63 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
         |                                                   ^~~~~
   In file included from arch/arc/include/asm/pgtable.h:12:
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:88:1: note: in expansion of macro 'PTE_BIT_FUNC'
      88 | PTE_BIT_FUNC(mknotpresent,     &= ~(_PAGE_PRESENT));
         | ^~~~~~~~~~~~
>> arch/arc/include/asm/pgtable-bits-arcv2.h:88:52: error: expected declaration specifiers before ';' token
      88 | PTE_BIT_FUNC(mknotpresent,     &= ~(_PAGE_PRESENT));
         |                                                    ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:89:1: note: in expansion of macro 'PTE_BIT_FUNC'
      89 | PTE_BIT_FUNC(wrprotect, &= ~(_PAGE_WRITE));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:89:43: error: expected declaration specifiers before ';' token
      89 | PTE_BIT_FUNC(wrprotect, &= ~(_PAGE_WRITE));
         |                                           ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:90:1: note: in expansion of macro 'PTE_BIT_FUNC'
      90 | PTE_BIT_FUNC(mkwrite,   |= (_PAGE_WRITE));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:90:42: error: expected declaration specifiers before ';' token
      90 | PTE_BIT_FUNC(mkwrite,   |= (_PAGE_WRITE));
         |                                          ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:91:1: note: in expansion of macro 'PTE_BIT_FUNC'
      91 | PTE_BIT_FUNC(mkclean,   &= ~(_PAGE_DIRTY));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:91:43: error: expected declaration specifiers before ';' token
      91 | PTE_BIT_FUNC(mkclean,   &= ~(_PAGE_DIRTY));
         |                                           ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:92:1: note: in expansion of macro 'PTE_BIT_FUNC'
      92 | PTE_BIT_FUNC(mkdirty,   |= (_PAGE_DIRTY));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:92:42: error: expected declaration specifiers before ';' token
      92 | PTE_BIT_FUNC(mkdirty,   |= (_PAGE_DIRTY));
         |                                          ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:93:1: note: in expansion of macro 'PTE_BIT_FUNC'
      93 | PTE_BIT_FUNC(mkold,     &= ~(_PAGE_ACCESSED));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:93:46: error: expected declaration specifiers before ';' token
      93 | PTE_BIT_FUNC(mkold,     &= ~(_PAGE_ACCESSED));
         |                                              ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:94:1: note: in expansion of macro 'PTE_BIT_FUNC'
      94 | PTE_BIT_FUNC(mkyoung,   |= (_PAGE_ACCESSED));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:94:45: error: expected declaration specifiers before ';' token
      94 | PTE_BIT_FUNC(mkyoung,   |= (_PAGE_ACCESSED));
         |                                             ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:95:1: note: in expansion of macro 'PTE_BIT_FUNC'
      95 | PTE_BIT_FUNC(mkspecial, |= (_PAGE_SPECIAL));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:95:44: error: expected declaration specifiers before ';' token
      95 | PTE_BIT_FUNC(mkspecial, |= (_PAGE_SPECIAL));
         |                                            ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:96:1: note: in expansion of macro 'PTE_BIT_FUNC'
      96 | PTE_BIT_FUNC(mkhuge,    |= (_PAGE_HW_SZ));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:96:42: error: expected declaration specifiers before ';' token
      96 | PTE_BIT_FUNC(mkhuge,    |= (_PAGE_HW_SZ));
         |                                          ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:99:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      99 | {
         | ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:105:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     105 | {
         | ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:136:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     136 | {
         | ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:140:1: note: in expansion of macro 'PTE_BIT_FUNC'
     140 | PTE_BIT_FUNC(swp_mkexclusive, |= (_PAGE_SWP_EXCLUSIVE));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:140:56: error: expected declaration specifiers before ';' token
     140 | PTE_BIT_FUNC(swp_mkexclusive, |= (_PAGE_SWP_EXCLUSIVE));
         |                                                        ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      86 |         static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
         |                                                 ^
   arch/arc/include/asm/pgtable-bits-arcv2.h:141:1: note: in expansion of macro 'PTE_BIT_FUNC'
     141 | PTE_BIT_FUNC(swp_clear_exclusive, &= ~(_PAGE_SWP_EXCLUSIVE));
         | ^~~~~~~~~~~~
   arch/arc/include/asm/pgtable-bits-arcv2.h:141:61: error: expected declaration specifiers before ';' token
     141 | PTE_BIT_FUNC(swp_clear_exclusive, &= ~(_PAGE_SWP_EXCLUSIVE));
         |                                                             ^
>> arch/arc/include/asm/pgtable.h:24:13: error: storage class specified for parameter 'empty_zero_page'
      24 | extern char empty_zero_page[PAGE_SIZE];
         |             ^~~~~~~~~~~~~~~
>> arch/arc/include/asm/pgtable.h:27:14: error: storage class specified for parameter 'swapper_pg_dir'
      27 | extern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);
         |              ^~~~~~~~~~~~~~
>> arch/arc/include/asm/pgtable.h:27:14: error: alignment may not be specified for 'swapper_pg_dir'
   In file included from include/linux/pgtable.h:14:
   include/asm-generic/pgtable_uffd.h:6:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
       6 | {
         | ^
   include/asm-generic/pgtable_uffd.h:10:40: error: expected declaration specifiers or '...' before 'pmd_t'
      10 | static __always_inline int pmd_uffd_wp(pmd_t pmd)
         |                                        ^~~~~
   include/asm-generic/pgtable_uffd.h:16:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      16 | {
         | ^
   include/asm-generic/pgtable_uffd.h:20:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_mkuffd_wp'
      20 | static __always_inline pmd_t pmd_mkuffd_wp(pmd_t pmd)
         |                              ^~~~~~~~~~~~~
   include/asm-generic/pgtable_uffd.h:26:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      26 | {
         | ^
   include/asm-generic/pgtable_uffd.h:30:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_clear_uffd_wp'
      30 | static __always_inline pmd_t pmd_clear_uffd_wp(pmd_t pmd)
         |                              ^~~~~~~~~~~~~~~~~
   include/asm-generic/pgtable_uffd.h:36:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      36 | {
         | ^
   include/asm-generic/pgtable_uffd.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      41 | {
         | ^
   include/asm-generic/pgtable_uffd.h:46:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      46 | {
         | ^
   include/asm-generic/pgtable_uffd.h:50:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_swp_mkuffd_wp'
      50 | static inline pmd_t pmd_swp_mkuffd_wp(pmd_t pmd)
         |                     ^~~~~~~~~~~~~~~~~
   include/asm-generic/pgtable_uffd.h:55:35: error: expected declaration specifiers or '...' before 'pmd_t'
      55 | static inline int pmd_swp_uffd_wp(pmd_t pmd)
         |                                   ^~~~~
   include/asm-generic/pgtable_uffd.h:60:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_swp_clear_uffd_wp'
      60 | static inline pmd_t pmd_swp_clear_uffd_wp(pmd_t pmd)
         |                     ^~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/pgtable.h:15:
   include/linux/page_table_check.h:119:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     119 | {
         | ^
   include/linux/page_table_check.h:123:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     123 | {
         | ^
   include/linux/page_table_check.h:128:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     128 | {
         | ^
   include/linux/page_table_check.h:132:67: error: expected declaration specifiers or '...' before 'pmd_t'
     132 |                                               unsigned long addr, pmd_t pmd)
         |                                                                   ^~~~~
   include/linux/page_table_check.h:137:67: error: expected declaration specifiers or '...' before 'pud_t'
     137 |                                               unsigned long addr, pud_t pud)
         |                                                                   ^~~~~
   include/linux/page_table_check.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     144 | {
         | ^
   include/linux/page_table_check.h:148:65: error: expected declaration specifiers or '...' before 'pmd_t'
     148 |                                             unsigned long addr, pmd_t *pmdp,
         |                                                                 ^~~~~
   include/linux/page_table_check.h:149:45: error: expected declaration specifiers or '...' before 'pmd_t'
     149 |                                             pmd_t pmd)
         |                                             ^~~~~
   include/linux/page_table_check.h:154:65: error: expected declaration specifiers or '...' before 'pud_t'
     154 |                                             unsigned long addr, pud_t *pudp,
         |                                                                 ^~~~~
   include/linux/page_table_check.h:155:45: error: expected declaration specifiers or '...' before 'pud_t'
     155 |                                             pud_t pud)
         |                                             ^~~~~
   include/linux/page_table_check.h:161:53: error: expected declaration specifiers or '...' before 'pmd_t'
     161 |                                                     pmd_t pmd)
         |                                                     ^~~~~
   include/linux/pgtable.h:63:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      63 | {
         | ^
   include/linux/pgtable.h:70:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      70 | {
         | ^
   include/linux/pgtable.h:78:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
      78 | {
         | ^
   include/linux/pgtable.h:90:40: error: expected declaration specifiers or '...' before 'pmd_t'
      90 | static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
         |                                        ^~~~~
   include/linux/pgtable.h:105:32: error: expected declaration specifiers or '...' before 'pmd_t'
     105 | static inline pte_t *__pte_map(pmd_t *pmd, unsigned long address)
         |                                ^~~~~
   include/linux/pgtable.h:110:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     110 | {
         | ^
   include/linux/pgtable.h:133:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
     133 | {
         | ^
   include/linux/pgtable.h:135:2: error: expected declaration specifiers before ';' token
     135 | };
         |  ^
   include/linux/pgtable.h:159:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
     159 | static inline pmd_t *pmd_off(struct mm_struct *mm, unsigned long va)
         |                     ^
   include/linux/pgtable.h:164:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
     164 | static inline pmd_t *pmd_off_k(unsigned long va)
..


vim +140 arch/arc/include/asm/uaccess.h

0a5eae458e923a Vineet Gupta 2013-01-18  100  
0a5eae458e923a Vineet Gupta 2013-01-18  101  #define __arc_put_user_one(src, dst, op, ret)	\
0a5eae458e923a Vineet Gupta 2013-01-18  102  	__asm__ __volatile__(                   \
0a5eae458e923a Vineet Gupta 2013-01-18  103  	"1:	"op"    %1,[%2]\n"		\
0a5eae458e923a Vineet Gupta 2013-01-18  104  	"2:	;nop\n"				\
0a5eae458e923a Vineet Gupta 2013-01-18  105  	"	.section .fixup, \"ax\"\n"	\
0a5eae458e923a Vineet Gupta 2013-01-18  106  	"	.align 4\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  107  	"3:	mov %0, %3\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  108  	"	j   2b\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  109  	"	.previous\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  110  	"	.section __ex_table, \"a\"\n"	\
0a5eae458e923a Vineet Gupta 2013-01-18  111  	"	.align 4\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  112  	"	.word 1b,3b\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  113  	"	.previous\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  114  						\
0a5eae458e923a Vineet Gupta 2013-01-18  115  	: "+r" (ret)				\
0a5eae458e923a Vineet Gupta 2013-01-18  116  	: "r" (src), "r" (dst), "ir" (-EFAULT))
0a5eae458e923a Vineet Gupta 2013-01-18  117  
0a5eae458e923a Vineet Gupta 2013-01-18  118  #define __arc_put_user_one_64(src, dst, ret)	\
0a5eae458e923a Vineet Gupta 2013-01-18  119  	__asm__ __volatile__(                   \
0a5eae458e923a Vineet Gupta 2013-01-18  120  	"1:	st   %1,[%2]\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  121  	"4:	st  %R1,[%2, 4]\n"		\
0a5eae458e923a Vineet Gupta 2013-01-18  122  	"2:	;nop\n"				\
0a5eae458e923a Vineet Gupta 2013-01-18  123  	"	.section .fixup, \"ax\"\n"	\
0a5eae458e923a Vineet Gupta 2013-01-18  124  	"	.align 4\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  125  	"3:	mov %0, %3\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  126  	"	j   2b\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  127  	"	.previous\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  128  	"	.section __ex_table, \"a\"\n"	\
0a5eae458e923a Vineet Gupta 2013-01-18  129  	"	.align 4\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  130  	"	.word 1b,3b\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  131  	"	.word 4b,3b\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  132  	"	.previous\n"			\
0a5eae458e923a Vineet Gupta 2013-01-18  133  						\
0a5eae458e923a Vineet Gupta 2013-01-18  134  	: "+r" (ret)				\
0a5eae458e923a Vineet Gupta 2013-01-18  135  	: "r" (src), "r" (dst), "ir" (-EFAULT))
0a5eae458e923a Vineet Gupta 2013-01-18  136  
0a5eae458e923a Vineet Gupta 2013-01-18  137  
43697cb0973da1 Vineet Gupta 2013-01-18  138  static inline unsigned long
e13909a4acc4b6 Vineet Gupta 2017-03-29  139  raw_copy_from_user(void *to, const void __user *from, unsigned long n)
43697cb0973da1 Vineet Gupta 2013-01-18 @140  {
43697cb0973da1 Vineet Gupta 2013-01-18  141  	long res = 0;
43697cb0973da1 Vineet Gupta 2013-01-18  142  	char val;
43697cb0973da1 Vineet Gupta 2013-01-18  143  	unsigned long tmp1, tmp2, tmp3, tmp4;
43697cb0973da1 Vineet Gupta 2013-01-18  144  	unsigned long orig_n = n;
43697cb0973da1 Vineet Gupta 2013-01-18  145  
43697cb0973da1 Vineet Gupta 2013-01-18  146  	if (n == 0)
43697cb0973da1 Vineet Gupta 2013-01-18  147  		return 0;
43697cb0973da1 Vineet Gupta 2013-01-18  148  
43697cb0973da1 Vineet Gupta 2013-01-18  149  	/* unaligned */
43697cb0973da1 Vineet Gupta 2013-01-18  150  	if (((unsigned long)to & 0x3) || ((unsigned long)from & 0x3)) {
43697cb0973da1 Vineet Gupta 2013-01-18  151  
43697cb0973da1 Vineet Gupta 2013-01-18  152  		unsigned char tmp;
43697cb0973da1 Vineet Gupta 2013-01-18  153  
43697cb0973da1 Vineet Gupta 2013-01-18  154  		__asm__ __volatile__ (
43697cb0973da1 Vineet Gupta 2013-01-18  155  		"	mov.f   lp_count, %0		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  156  		"	lpnz 2f				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  157  		"1:	ldb.ab  %1, [%3, 1]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  158  		"	stb.ab  %1, [%2, 1]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  159  		"	sub     %0,%0,1			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  160  		"2:	;nop				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  161  		"	.section .fixup, \"ax\"		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  162  		"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  163  		"3:	j   2b				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  164  		"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  165  		"	.section __ex_table, \"a\"	\n"
43697cb0973da1 Vineet Gupta 2013-01-18  166  		"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  167  		"	.word   1b, 3b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  168  		"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  169  
43697cb0973da1 Vineet Gupta 2013-01-18  170  		: "+r" (n),
43697cb0973da1 Vineet Gupta 2013-01-18  171  		/*
43697cb0973da1 Vineet Gupta 2013-01-18  172  		 * Note as an '&' earlyclobber operand to make sure the
43697cb0973da1 Vineet Gupta 2013-01-18  173  		 * temporary register inside the loop is not the same as
43697cb0973da1 Vineet Gupta 2013-01-18  174  		 *  FROM or TO.
43697cb0973da1 Vineet Gupta 2013-01-18  175  		*/
43697cb0973da1 Vineet Gupta 2013-01-18  176  		  "=&r" (tmp), "+r" (to), "+r" (from)
43697cb0973da1 Vineet Gupta 2013-01-18  177  		:
d5e3c55e01d8b1 Vineet Gupta 2019-02-05  178  		: "lp_count", "memory");
43697cb0973da1 Vineet Gupta 2013-01-18  179  
43697cb0973da1 Vineet Gupta 2013-01-18  180  		return n;
43697cb0973da1 Vineet Gupta 2013-01-18  181  	}
43697cb0973da1 Vineet Gupta 2013-01-18  182  
43697cb0973da1 Vineet Gupta 2013-01-18  183  	/*
43697cb0973da1 Vineet Gupta 2013-01-18  184  	 * Hand-crafted constant propagation to reduce code sz of the
43697cb0973da1 Vineet Gupta 2013-01-18  185  	 * laddered copy 16x,8,4,2,1
43697cb0973da1 Vineet Gupta 2013-01-18  186  	 */
43697cb0973da1 Vineet Gupta 2013-01-18  187  	if (__builtin_constant_p(orig_n)) {
43697cb0973da1 Vineet Gupta 2013-01-18  188  		res = orig_n;
43697cb0973da1 Vineet Gupta 2013-01-18  189  
43697cb0973da1 Vineet Gupta 2013-01-18  190  		if (orig_n / 16) {
43697cb0973da1 Vineet Gupta 2013-01-18  191  			orig_n = orig_n % 16;
43697cb0973da1 Vineet Gupta 2013-01-18  192  
43697cb0973da1 Vineet Gupta 2013-01-18  193  			__asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18  194  			"	lsr   lp_count, %7,4		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  195  			"	lp    3f			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  196  			"1:	ld.ab   %3, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  197  			"11:	ld.ab   %4, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  198  			"12:	ld.ab   %5, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  199  			"13:	ld.ab   %6, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  200  			"	st.ab   %3, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  201  			"	st.ab   %4, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  202  			"	st.ab   %5, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  203  			"	st.ab   %6, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  204  			"	sub     %0,%0,16		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  205  			"3:	;nop				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  206  			"	.section .fixup, \"ax\"		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  207  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  208  			"4:	j   3b				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  209  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  210  			"	.section __ex_table, \"a\"	\n"
43697cb0973da1 Vineet Gupta 2013-01-18  211  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  212  			"	.word   1b, 4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  213  			"	.word   11b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  214  			"	.word   12b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  215  			"	.word   13b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  216  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  217  			: "+r" (res), "+r"(to), "+r"(from),
43697cb0973da1 Vineet Gupta 2013-01-18  218  			  "=r"(tmp1), "=r"(tmp2), "=r"(tmp3), "=r"(tmp4)
43697cb0973da1 Vineet Gupta 2013-01-18  219  			: "ir"(n)
43697cb0973da1 Vineet Gupta 2013-01-18  220  			: "lp_count", "memory");
43697cb0973da1 Vineet Gupta 2013-01-18  221  		}
43697cb0973da1 Vineet Gupta 2013-01-18  222  		if (orig_n / 8) {
43697cb0973da1 Vineet Gupta 2013-01-18  223  			orig_n = orig_n % 8;
43697cb0973da1 Vineet Gupta 2013-01-18  224  
43697cb0973da1 Vineet Gupta 2013-01-18  225  			__asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18  226  			"14:	ld.ab   %3, [%2,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  227  			"15:	ld.ab   %4, [%2,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  228  			"	st.ab   %3, [%1,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  229  			"	st.ab   %4, [%1,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  230  			"	sub     %0,%0,8			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  231  			"31:	;nop				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  232  			"	.section .fixup, \"ax\"		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  233  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  234  			"4:	j   31b				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  235  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  236  			"	.section __ex_table, \"a\"	\n"
43697cb0973da1 Vineet Gupta 2013-01-18  237  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  238  			"	.word   14b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  239  			"	.word   15b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  240  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  241  			: "+r" (res), "+r"(to), "+r"(from),
43697cb0973da1 Vineet Gupta 2013-01-18  242  			  "=r"(tmp1), "=r"(tmp2)
43697cb0973da1 Vineet Gupta 2013-01-18  243  			:
43697cb0973da1 Vineet Gupta 2013-01-18  244  			: "memory");
43697cb0973da1 Vineet Gupta 2013-01-18  245  		}
43697cb0973da1 Vineet Gupta 2013-01-18  246  		if (orig_n / 4) {
43697cb0973da1 Vineet Gupta 2013-01-18  247  			orig_n = orig_n % 4;
43697cb0973da1 Vineet Gupta 2013-01-18  248  
43697cb0973da1 Vineet Gupta 2013-01-18  249  			__asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18  250  			"16:	ld.ab   %3, [%2,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  251  			"	st.ab   %3, [%1,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  252  			"	sub     %0,%0,4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  253  			"32:	;nop				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  254  			"	.section .fixup, \"ax\"		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  255  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  256  			"4:	j   32b				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  257  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  258  			"	.section __ex_table, \"a\"	\n"
43697cb0973da1 Vineet Gupta 2013-01-18  259  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  260  			"	.word   16b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  261  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  262  			: "+r" (res), "+r"(to), "+r"(from), "=r"(tmp1)
43697cb0973da1 Vineet Gupta 2013-01-18  263  			:
43697cb0973da1 Vineet Gupta 2013-01-18  264  			: "memory");
43697cb0973da1 Vineet Gupta 2013-01-18  265  		}
43697cb0973da1 Vineet Gupta 2013-01-18  266  		if (orig_n / 2) {
43697cb0973da1 Vineet Gupta 2013-01-18  267  			orig_n = orig_n % 2;
43697cb0973da1 Vineet Gupta 2013-01-18  268  
43697cb0973da1 Vineet Gupta 2013-01-18  269  			__asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18  270  			"17:	ldw.ab   %3, [%2,2]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  271  			"	stw.ab   %3, [%1,2]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  272  			"	sub      %0,%0,2		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  273  			"33:	;nop				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  274  			"	.section .fixup, \"ax\"		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  275  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  276  			"4:	j   33b				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  277  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  278  			"	.section __ex_table, \"a\"	\n"
43697cb0973da1 Vineet Gupta 2013-01-18  279  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  280  			"	.word   17b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  281  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  282  			: "+r" (res), "+r"(to), "+r"(from), "=r"(tmp1)
43697cb0973da1 Vineet Gupta 2013-01-18  283  			:
43697cb0973da1 Vineet Gupta 2013-01-18  284  			: "memory");
43697cb0973da1 Vineet Gupta 2013-01-18  285  		}
43697cb0973da1 Vineet Gupta 2013-01-18  286  		if (orig_n & 1) {
43697cb0973da1 Vineet Gupta 2013-01-18  287  			__asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18  288  			"18:	ldb.ab   %3, [%2,2]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  289  			"	stb.ab   %3, [%1,2]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  290  			"	sub      %0,%0,1		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  291  			"34:	; nop				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  292  			"	.section .fixup, \"ax\"		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  293  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  294  			"4:	j   34b				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  295  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  296  			"	.section __ex_table, \"a\"	\n"
43697cb0973da1 Vineet Gupta 2013-01-18  297  			"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  298  			"	.word   18b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  299  			"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  300  			: "+r" (res), "+r"(to), "+r"(from), "=r"(tmp1)
43697cb0973da1 Vineet Gupta 2013-01-18  301  			:
43697cb0973da1 Vineet Gupta 2013-01-18  302  			: "memory");
43697cb0973da1 Vineet Gupta 2013-01-18  303  		}
43697cb0973da1 Vineet Gupta 2013-01-18  304  	} else {  /* n is NOT constant, so laddered copy of 16x,8,4,2,1  */
43697cb0973da1 Vineet Gupta 2013-01-18  305  
43697cb0973da1 Vineet Gupta 2013-01-18  306  		__asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18  307  		"	mov %0,%3			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  308  		"	lsr.f   lp_count, %3,4		\n"  /* 16x bytes */
43697cb0973da1 Vineet Gupta 2013-01-18  309  		"	lpnz    3f			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  310  		"1:	ld.ab   %5, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  311  		"11:	ld.ab   %6, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  312  		"12:	ld.ab   %7, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  313  		"13:	ld.ab   %8, [%2, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  314  		"	st.ab   %5, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  315  		"	st.ab   %6, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  316  		"	st.ab   %7, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  317  		"	st.ab   %8, [%1, 4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  318  		"	sub     %0,%0,16		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  319  		"3:	and.f   %3,%3,0xf		\n"  /* stragglers */
43697cb0973da1 Vineet Gupta 2013-01-18  320  		"	bz      34f			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  321  		"	bbit0   %3,3,31f		\n"  /* 8 bytes left */
43697cb0973da1 Vineet Gupta 2013-01-18  322  		"14:	ld.ab   %5, [%2,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  323  		"15:	ld.ab   %6, [%2,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  324  		"	st.ab   %5, [%1,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  325  		"	st.ab   %6, [%1,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  326  		"	sub.f   %0,%0,8			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  327  		"31:	bbit0   %3,2,32f		\n"  /* 4 bytes left */
43697cb0973da1 Vineet Gupta 2013-01-18  328  		"16:	ld.ab   %5, [%2,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  329  		"	st.ab   %5, [%1,4]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  330  		"	sub.f   %0,%0,4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  331  		"32:	bbit0   %3,1,33f		\n"  /* 2 bytes left */
43697cb0973da1 Vineet Gupta 2013-01-18  332  		"17:	ldw.ab  %5, [%2,2]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  333  		"	stw.ab  %5, [%1,2]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  334  		"	sub.f   %0,%0,2			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  335  		"33:	bbit0   %3,0,34f		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  336  		"18:	ldb.ab  %5, [%2,1]		\n"  /* 1 byte left */
43697cb0973da1 Vineet Gupta 2013-01-18  337  		"	stb.ab  %5, [%1,1]		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  338  		"	sub.f   %0,%0,1			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  339  		"34:	;nop				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  340  		"	.section .fixup, \"ax\"		\n"
43697cb0973da1 Vineet Gupta 2013-01-18  341  		"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  342  		"4:	j   34b				\n"
43697cb0973da1 Vineet Gupta 2013-01-18  343  		"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  344  		"	.section __ex_table, \"a\"	\n"
43697cb0973da1 Vineet Gupta 2013-01-18  345  		"	.align 4			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  346  		"	.word   1b, 4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  347  		"	.word   11b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  348  		"	.word   12b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  349  		"	.word   13b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  350  		"	.word   14b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  351  		"	.word   15b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  352  		"	.word   16b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  353  		"	.word   17b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  354  		"	.word   18b,4b			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  355  		"	.previous			\n"
43697cb0973da1 Vineet Gupta 2013-01-18  356  		: "=r" (res), "+r"(to), "+r"(from), "+r"(n), "=r"(val),
43697cb0973da1 Vineet Gupta 2013-01-18  357  		  "=r"(tmp1), "=r"(tmp2), "=r"(tmp3), "=r"(tmp4)
43697cb0973da1 Vineet Gupta 2013-01-18  358  		:
43697cb0973da1 Vineet Gupta 2013-01-18  359  		: "lp_count", "memory");
43697cb0973da1 Vineet Gupta 2013-01-18  360  	}
43697cb0973da1 Vineet Gupta 2013-01-18  361  
43697cb0973da1 Vineet Gupta 2013-01-18  362  	return res;
43697cb0973da1 Vineet Gupta 2013-01-18  363  }
43697cb0973da1 Vineet Gupta 2013-01-18  364  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
  2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
  2023-08-22 16:06   ` Konrad Dybcio
@ 2023-08-23  6:25   ` Manivannan Sadhasivam
  1 sibling, 0 replies; 17+ messages in thread
From: Manivannan Sadhasivam @ 2023-08-23  6:25 UTC (permalink / raw)
  To: Krishna chaitanya chundru
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Andy Gross, Bjorn Andersson, Konrad Dybcio,
	Bjorn Helgaas, Lorenzo Pieralisi, Krzysztof Wilczyński,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Manivannan Sadhasivam,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS

On Tue, Aug 22, 2023 at 08:42:18PM +0530, Krishna chaitanya chundru wrote:
> PCIe needs to choose the appropriate performance state of RPMH power
> domain based upon the PCIe gen speed.
> 
> Adding the Operating Performance Points table allows to adjust power domain
> performance state, depending on the PCIe gen speed.
> 
> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>

Acked-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

- Mani

> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> ---
>  Documentation/devicetree/bindings/pci/qcom,pcie.yaml | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
> index 81971be4..779339c 100644
> --- a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
> +++ b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
> @@ -121,6 +121,10 @@ properties:
>      description: GPIO controlled connection to WAKE# signal
>      maxItems: 1
>  
> +  operating-points-v2: true
> +  opp-table:
> +    type: object
> +
>  required:
>    - compatible
>    - reg
> -- 
> 2.7.4
> 

-- 
மணிவண்ணன் சதாசிவம்

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH
  2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
@ 2023-08-23  7:06   ` Manivannan Sadhasivam
  2023-09-07  6:05     ` Krishna Chaitanya Chundru
  0 siblings, 1 reply; 17+ messages in thread
From: Manivannan Sadhasivam @ 2023-08-23  7:06 UTC (permalink / raw)
  To: Krishna chaitanya chundru
  Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
	linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
	quic_ramkri, quic_parass, krzysztof.kozlowski, Andy Gross,
	Bjorn Andersson, Konrad Dybcio, Lorenzo Pieralisi,
	Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas

Subject should be, "PCI: qcom: Add OPP support to scale performance state of
power domain"

On Tue, Aug 22, 2023 at 08:42:21PM +0530, Krishna chaitanya chundru wrote:
> Before link training vote for the maximum performance state of RPMH
> and once link is up, vote for the performance state based upon the link
> speed.
> 

Commit message should have the justification on why OPP support should be
addded, not just how you add it. The reasoning should be, "While scaling the
interconnect clocks based on PCIe link speed, it is also mandatory to scale the
power domain performance state so that the SoC can run under optimum power
conditions."

> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
> ---
>  drivers/pci/controller/dwc/pcie-qcom.c | 52 ++++++++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
> 
> diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
> index 7a87a47..161fdad 100644
> --- a/drivers/pci/controller/dwc/pcie-qcom.c
> +++ b/drivers/pci/controller/dwc/pcie-qcom.c
> @@ -22,6 +22,7 @@
>  #include <linux/of_device.h>
>  #include <linux/of_gpio.h>
>  #include <linux/pci.h>
> +#include <linux/pm_opp.h>
>  #include <linux/pm_runtime.h>
>  #include <linux/platform_device.h>
>  #include <linux/phy/pcie.h>
> @@ -1357,6 +1358,33 @@ static int qcom_pcie_icc_init(struct qcom_pcie *pcie)
>  	return 0;
>  }
>  
> +static void qcom_pcie_opp_update(struct qcom_pcie *pcie)
> +{
> +	struct dw_pcie *pci = pcie->pci;
> +	struct dev_pm_opp *opp;
> +	u32 offset, status;
> +	int speed, ret = 0;
> +
> +	offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
> +	status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
> +
> +	/* Only update constraints if link is up. */
> +	if (!(status & PCI_EXP_LNKSTA_DLLLA))
> +		return;
> +
> +	speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status);
> +

Since icc_update() also queries link status register, this could be moved inside
icc_update() to avoid code duplication and probably the function con be renamed
to "qcom_pcie_icc_opp_update()".

> +	opp = dev_pm_opp_find_level_exact(pci->dev, speed);
> +	if (!IS_ERR(opp)) {

As we decided for pcie-qcom-ep, let's return error from _update() function if
icc paths/opp support were specified in DT.

Use a separate patch for returning error from existing qcom_pcie_icc_update()
function and add opp support on top.

> +		ret = dev_pm_opp_set_opp(pci->dev, opp);
> +		if (ret)
> +			dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
> +						dev_pm_opp_get_level(opp), ret);
> +		dev_pm_opp_put(opp);
> +	}
> +
> +}
> +
>  static void qcom_pcie_icc_update(struct qcom_pcie *pcie)
>  {
>  	struct dw_pcie *pci = pcie->pci;
> @@ -1439,8 +1467,10 @@ static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
>  static int qcom_pcie_probe(struct platform_device *pdev)
>  {
>  	const struct qcom_pcie_cfg *pcie_cfg;
> +	unsigned long max_level = INT_MAX;
>  	struct device *dev = &pdev->dev;
>  	struct qcom_pcie *pcie;
> +	struct dev_pm_opp *opp;
>  	struct dw_pcie_rp *pp;
>  	struct resource *res;
>  	struct dw_pcie *pci;
> @@ -1511,6 +1541,23 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>  	if (ret)
>  		goto err_pm_runtime_put;
>  
> +	/* OPP table is optional */
> +	ret = devm_pm_opp_of_add_table(dev);
> +	if (ret && ret != -ENODEV) {
> +		dev_err(dev, "Invalid OPP table in Device tree\n");

"Failed to add OPP table"

Also, use dev_err_probe() here and below.

> +		goto err_pm_runtime_put;
> +	}
> +
> +	/* vote for max level in the opp table */
> +	opp = dev_pm_opp_find_level_floor(dev, &max_level);

Use a bool flag to check whether opp support is present or not and use that to
decide calling these APIs.

> +	if (!IS_ERR(opp)) {
> +		ret = dev_pm_opp_set_opp(dev, opp);
> +		if (ret)
> +			dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
> +						dev_pm_opp_get_level(opp), ret);
> +		dev_pm_opp_put(opp);
> +	}
> +
>  	ret = pcie->cfg->ops->get_resources(pcie);
>  	if (ret)
>  		goto err_pm_runtime_put;
> @@ -1531,6 +1578,8 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>  
>  	qcom_pcie_icc_update(pcie);
>  
> +	qcom_pcie_opp_update(pcie);
> +
>  	if (pcie->mhi)
>  		qcom_pcie_init_debugfs(pcie);
>  
> @@ -1577,6 +1626,7 @@ static int qcom_pcie_suspend_noirq(struct device *dev)
>  	 */
>  	if (!dw_pcie_link_up(pcie->pci)) {
>  		qcom_pcie_host_deinit(&pcie->pci->pp);
> +		dev_pm_opp_set_opp(dev, NULL);

This will print error when OPP table was not specified in DT. So use the flag as
I suggested above.

- Mani

>  		pcie->suspended = true;
>  	}
>  
> @@ -1593,6 +1643,8 @@ static int qcom_pcie_resume_noirq(struct device *dev)
>  		if (ret)
>  			return ret;
>  
> +		qcom_pcie_opp_update(pcie);
> +
>  		pcie->suspended = false;
>  	}
>  
> -- 
> 2.7.4
> 

-- 
மணிவண்ணன் சதாசிவம்

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
  2023-08-22 16:06   ` Konrad Dybcio
@ 2023-09-07  6:01     ` Krishna Chaitanya Chundru
  0 siblings, 0 replies; 17+ messages in thread
From: Krishna Chaitanya Chundru @ 2023-09-07  6:01 UTC (permalink / raw)
  To: Konrad Dybcio, manivannan.sadhasivam
  Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
	quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
	krzysztof.kozlowski, Andy Gross, Bjorn Andersson, Bjorn Helgaas,
	Lorenzo Pieralisi, Krzysztof Wilczyński, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Manivannan Sadhasivam,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS


On 8/22/2023 9:36 PM, Konrad Dybcio wrote:
> On 22.08.2023 17:12, Krishna chaitanya chundru wrote:
>> PCIe needs to choose the appropriate performance state of RPMH power
>> domain based upon the PCIe gen speed.
>>
>> Adding the Operating Performance Points table allows to adjust power domain
>> performance state, depending on the PCIe gen speed.
>>
>> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
>> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
>> ---
> I only got patches 1, 2 and 4 of this series.
>
> Please consider using the b4 tool [1], which takes care of
> all of the sending shenanigans for you.
>
> Konrad
>
> [1] https://b4.docs.kernel.org/en/latest/index.html
Sorry, for late reply I have taken care of this in next patch series.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
  2023-08-23  1:05   ` Pavan Kondeti
@ 2023-09-07  6:04     ` Krishna Chaitanya Chundru
  0 siblings, 0 replies; 17+ messages in thread
From: Krishna Chaitanya Chundru @ 2023-09-07  6:04 UTC (permalink / raw)
  To: Pavan Kondeti
  Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
	linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
	quic_ramkri, quic_parass, krzysztof.kozlowski, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Rafael J. Wysocki,
	open list:OPERATING PERFORMANCE POINTS (OPP)


On 8/23/2023 6:35 AM, Pavan Kondeti wrote:
> On Tue, Aug 22, 2023 at 08:42:20PM +0530, Krishna chaitanya chundru wrote:
>> Add dev_pm_opp_find_level_floor() for searching a lesser match or
>> operating on OPP in the order of decreasing level.
>>
> "OPP: Add api to retrieve opps which is at most the provided level". Pls
> change this to "opp: Add dev_pm_opp_find_level_floor()". The API name
> conveys the message.
>
> In the description, you can give a use case. i.e voting for the max
> level during initialization of a driver.
>
Done
>> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
>> ---
>>   drivers/opp/core.c     | 26 ++++++++++++++++++++++++++
>>   include/linux/pm_opp.h |  4 ++++
>>   2 files changed, 30 insertions(+)
>>
>> diff --git a/drivers/opp/core.c b/drivers/opp/core.c
>> index 954c948..e668cf2 100644
>> --- a/drivers/opp/core.c
>> +++ b/drivers/opp/core.c
>> @@ -727,6 +727,32 @@ struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
>>   }
>>   EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_ceil);
>>   
>> +
>> +/**
>> + * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
>> + * @dev:	device for which we do this operation
>> + * @freq:	Start level
>> + *
> %s/freq/level
>
> Run make W=1 so that kerneldoc is tested.
Done
>> + * Search for the matching floor *available* OPP from a starting level
>> + * for a device.
>> + *
>> + * Return: matching *opp and refreshes *level accordingly, else returns
>> + * ERR_PTR in case of error and should be handled using IS_ERR. Error return
>> + * values can be:
> What do you mean by refresh here?

Level  argument will be updated by this API with the opp level being 
returned here,

I was trying to use same terminology used in other API's

>> + * EINVAL:	for bad pointer
>> + * ERANGE:	no match found for search
>> + * ENODEV:	if device not found in list of registered devices
>> + *
>> + * The callers are required to call dev_pm_opp_put() for the returned OPP after
>> + * use.
>> + */
>> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
>> +					      unsigned long *level)
>> +{
>> +	return _find_key_floor(dev, level, 0, true, _read_level, NULL);
>> +}
>> +EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
>> +
>>   /**
>>    * dev_pm_opp_find_bw_ceil() - Search for a rounded ceil bandwidth
>>    * @dev:	device for which we do this operation
>> diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
>> index dc1fb58..a3bc386 100644
>> --- a/include/linux/pm_opp.h
>> +++ b/include/linux/pm_opp.h
>> @@ -128,6 +128,8 @@ struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
>>   					       unsigned int level);
>>   struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
>>   					      unsigned int *level);
>> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
>> +					      unsigned long *level);
>>   
>>   struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
>>   					     unsigned long *freq);
>> @@ -285,6 +287,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_ceil(struct device *dev,
>>   
>>   static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
>>   					unsigned int *bw, int index)
>> +static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
>> +					unsigned long *level)
>>   {
>>   	return ERR_PTR(-EOPNOTSUPP);
>>   }
>>
> Please run ./scripts/checkpatch.pl --strict <your patch> and fix the
> indentation warnings from this patch.
>
> Thanks,
> Pavan

Done

- KC


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH
  2023-08-23  7:06   ` Manivannan Sadhasivam
@ 2023-09-07  6:05     ` Krishna Chaitanya Chundru
  0 siblings, 0 replies; 17+ messages in thread
From: Krishna Chaitanya Chundru @ 2023-09-07  6:05 UTC (permalink / raw)
  To: Manivannan Sadhasivam
  Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
	linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
	quic_ramkri, quic_parass, krzysztof.kozlowski, Andy Gross,
	Bjorn Andersson, Konrad Dybcio, Lorenzo Pieralisi,
	Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas


On 8/23/2023 12:36 PM, Manivannan Sadhasivam wrote:
> Subject should be, "PCI: qcom: Add OPP support to scale performance state of
> power domain"
>
> On Tue, Aug 22, 2023 at 08:42:21PM +0530, Krishna chaitanya chundru wrote:
>> Before link training vote for the maximum performance state of RPMH
>> and once link is up, vote for the performance state based upon the link
>> speed.
>>
> Commit message should have the justification on why OPP support should be
> addded, not just how you add it. The reasoning should be, "While scaling the
> interconnect clocks based on PCIe link speed, it is also mandatory to scale the
> power domain performance state so that the SoC can run under optimum power
> conditions."
done
>> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
>> ---
>>   drivers/pci/controller/dwc/pcie-qcom.c | 52 ++++++++++++++++++++++++++++++++++
>>   1 file changed, 52 insertions(+)
>>
>> diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
>> index 7a87a47..161fdad 100644
>> --- a/drivers/pci/controller/dwc/pcie-qcom.c
>> +++ b/drivers/pci/controller/dwc/pcie-qcom.c
>> @@ -22,6 +22,7 @@
>>   #include <linux/of_device.h>
>>   #include <linux/of_gpio.h>
>>   #include <linux/pci.h>
>> +#include <linux/pm_opp.h>
>>   #include <linux/pm_runtime.h>
>>   #include <linux/platform_device.h>
>>   #include <linux/phy/pcie.h>
>> @@ -1357,6 +1358,33 @@ static int qcom_pcie_icc_init(struct qcom_pcie *pcie)
>>   	return 0;
>>   }
>>   
>> +static void qcom_pcie_opp_update(struct qcom_pcie *pcie)
>> +{
>> +	struct dw_pcie *pci = pcie->pci;
>> +	struct dev_pm_opp *opp;
>> +	u32 offset, status;
>> +	int speed, ret = 0;
>> +
>> +	offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
>> +	status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
>> +
>> +	/* Only update constraints if link is up. */
>> +	if (!(status & PCI_EXP_LNKSTA_DLLLA))
>> +		return;
>> +
>> +	speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status);
>> +
> Since icc_update() also queries link status register, this could be moved inside
> icc_update() to avoid code duplication and probably the function con be renamed
> to "qcom_pcie_icc_opp_update()".
done
>> +	opp = dev_pm_opp_find_level_exact(pci->dev, speed);
>> +	if (!IS_ERR(opp)) {
> As we decided for pcie-qcom-ep, let's return error from _update() function if
> icc paths/opp support were specified in DT.
>
> Use a separate patch for returning error from existing qcom_pcie_icc_update()
> function and add opp support on top.
done
>> +		ret = dev_pm_opp_set_opp(pci->dev, opp);
>> +		if (ret)
>> +			dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
>> +						dev_pm_opp_get_level(opp), ret);
>> +		dev_pm_opp_put(opp);
>> +	}
>> +
>> +}
>> +
>>   static void qcom_pcie_icc_update(struct qcom_pcie *pcie)
>>   {
>>   	struct dw_pcie *pci = pcie->pci;
>> @@ -1439,8 +1467,10 @@ static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
>>   static int qcom_pcie_probe(struct platform_device *pdev)
>>   {
>>   	const struct qcom_pcie_cfg *pcie_cfg;
>> +	unsigned long max_level = INT_MAX;
>>   	struct device *dev = &pdev->dev;
>>   	struct qcom_pcie *pcie;
>> +	struct dev_pm_opp *opp;
>>   	struct dw_pcie_rp *pp;
>>   	struct resource *res;
>>   	struct dw_pcie *pci;
>> @@ -1511,6 +1541,23 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>>   	if (ret)
>>   		goto err_pm_runtime_put;
>>   
>> +	/* OPP table is optional */
>> +	ret = devm_pm_opp_of_add_table(dev);
>> +	if (ret && ret != -ENODEV) {
>> +		dev_err(dev, "Invalid OPP table in Device tree\n");
> "Failed to add OPP table"
>
> Also, use dev_err_probe() here and below.
>
>> +		goto err_pm_runtime_put;
>> +	}
>> +
>> +	/* vote for max level in the opp table */
>> +	opp = dev_pm_opp_find_level_floor(dev, &max_level);
> Use a bool flag to check whether opp support is present or not and use that to
> decide calling these APIs.
done
>> +	if (!IS_ERR(opp)) {
>> +		ret = dev_pm_opp_set_opp(dev, opp);
>> +		if (ret)
>> +			dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
>> +						dev_pm_opp_get_level(opp), ret);
>> +		dev_pm_opp_put(opp);
>> +	}
>> +
>>   	ret = pcie->cfg->ops->get_resources(pcie);
>>   	if (ret)
>>   		goto err_pm_runtime_put;
>> @@ -1531,6 +1578,8 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>>   
>>   	qcom_pcie_icc_update(pcie);
>>   
>> +	qcom_pcie_opp_update(pcie);
>> +
>>   	if (pcie->mhi)
>>   		qcom_pcie_init_debugfs(pcie);
>>   
>> @@ -1577,6 +1626,7 @@ static int qcom_pcie_suspend_noirq(struct device *dev)
>>   	 */
>>   	if (!dw_pcie_link_up(pcie->pci)) {
>>   		qcom_pcie_host_deinit(&pcie->pci->pp);
>> +		dev_pm_opp_set_opp(dev, NULL);
> This will print error when OPP table was not specified in DT. So use the flag as
> I suggested above.
>
> - Mani

done

- KC

>>   		pcie->suspended = true;
>>   	}
>>   
>> @@ -1593,6 +1643,8 @@ static int qcom_pcie_resume_noirq(struct device *dev)
>>   		if (ret)
>>   			return ret;
>>   
>> +		qcom_pcie_opp_update(pcie);
>> +
>>   		pcie->suspended = false;
>>   	}
>>   
>> -- 
>> 2.7.4
>>

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2023-09-07 17:57 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
2023-08-22 16:06   ` Konrad Dybcio
2023-09-07  6:01     ` Krishna Chaitanya Chundru
2023-08-23  6:25   ` Manivannan Sadhasivam
2023-08-22 15:12 ` [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
2023-08-22 21:33   ` kernel test robot
2023-08-22 23:10   ` kernel test robot
2023-08-22 23:42   ` kernel test robot
2023-08-23  0:48   ` kernel test robot
2023-08-23  1:05   ` Pavan Kondeti
2023-09-07  6:04     ` Krishna Chaitanya Chundru
2023-08-23  1:13   ` kernel test robot
2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
2023-08-23  7:06   ` Manivannan Sadhasivam
2023-09-07  6:05     ` Krishna Chaitanya Chundru

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox