linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] X Elite fixups
@ 2024-01-02 18:29 Konrad Dybcio
  2024-01-02 18:29 ` [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes Konrad Dybcio
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Konrad Dybcio @ 2024-01-02 18:29 UTC (permalink / raw)
  To: Bjorn Andersson, Georgi Djakov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Rajendra Nayak, Sibi Sankar, Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel,
	devicetree, Konrad Dybcio

Just a couple of "usual" fixups that slipped through introduction
reviews..

p1-2 for icc
p3-4 for qcom

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
Konrad Dybcio (4):
      interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes
      dt-bindings: interconnect: Remove bogus interconnect nodes
      arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain
      arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes

 arch/arm64/boot/dts/qcom/x1e80100.dtsi             |   9 +
 drivers/interconnect/qcom/x1e80100.c               | 315 ---------------------
 .../dt-bindings/interconnect/qcom,x1e80100-rpmh.h  |  24 --
 3 files changed, 9 insertions(+), 339 deletions(-)
---
base-commit: ab0b3e6ef50d305278b1971891cf1d82ab050b35
change-id: 20240102-topic-x1e_fixes-a62d8f5a1b75

Best regards,
-- 
Konrad Dybcio <konrad.dybcio@linaro.org>


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

* [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes
  2024-01-02 18:29 [PATCH 0/4] X Elite fixups Konrad Dybcio
@ 2024-01-02 18:29 ` Konrad Dybcio
  2024-01-04  9:59   ` Rajendra Nayak
  2024-01-02 18:29 ` [PATCH 2/4] dt-bindings: interconnect: Remove bogus interconnect nodes Konrad Dybcio
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Konrad Dybcio @ 2024-01-02 18:29 UTC (permalink / raw)
  To: Bjorn Andersson, Georgi Djakov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Rajendra Nayak, Sibi Sankar, Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel,
	devicetree, Konrad Dybcio

The downstream kernel has infrastructure for passing votes from different
interconnect nodes onto different RPMh RSCs. This neither implemented, not
is going to be implemented upstream (in favor of a different solution
using ICC tags through the same node).

Unfortunately, as it happens, meaningless (in the upstream context) parts
of the vendor driver were copied, ending up causing havoc - since all
"per-RSC" (in quotes because they all point to the main APPS one) BCMs
defined within the driver overwrite the value in RPMh on every
aggregation.

To both avoid keeping bogus code around and possibly introducing
impossible-to-track-down bugs (busses shutting down for no reason), get
rid of the duplicated BCMs and their associated ICC nodes.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/interconnect/qcom/x1e80100.c | 315 -----------------------------------
 1 file changed, 315 deletions(-)

diff --git a/drivers/interconnect/qcom/x1e80100.c b/drivers/interconnect/qcom/x1e80100.c
index d19501d913b3..5b2de9c3a1d6 100644
--- a/drivers/interconnect/qcom/x1e80100.c
+++ b/drivers/interconnect/qcom/x1e80100.c
@@ -670,150 +670,6 @@ static struct qcom_icc_node xm_usb4_2 = {
 	.links = { X1E80100_SLAVE_AGGRE_USB_SOUTH },
 };
 
-static struct qcom_icc_node qnm_mnoc_hf_disp = {
-	.name = "qnm_mnoc_hf_disp",
-	.id = X1E80100_MASTER_MNOC_HF_MEM_NOC_DISP,
-	.channels = 2,
-	.buswidth = 32,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_LLCC_DISP },
-};
-
-static struct qcom_icc_node qnm_pcie_disp = {
-	.name = "qnm_pcie_disp",
-	.id = X1E80100_MASTER_ANOC_PCIE_GEM_NOC_DISP,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_LLCC_DISP },
-};
-
-static struct qcom_icc_node llcc_mc_disp = {
-	.name = "llcc_mc_disp",
-	.id = X1E80100_MASTER_LLCC_DISP,
-	.channels = 8,
-	.buswidth = 4,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_EBI1_DISP },
-};
-
-static struct qcom_icc_node qnm_mdp_disp = {
-	.name = "qnm_mdp_disp",
-	.id = X1E80100_MASTER_MDP_DISP,
-	.channels = 2,
-	.buswidth = 32,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_MNOC_HF_MEM_NOC_DISP },
-};
-
-static struct qcom_icc_node qnm_pcie_pcie = {
-	.name = "qnm_pcie_pcie",
-	.id = X1E80100_MASTER_ANOC_PCIE_GEM_NOC_PCIE,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_LLCC_PCIE },
-};
-
-static struct qcom_icc_node llcc_mc_pcie = {
-	.name = "llcc_mc_pcie",
-	.id = X1E80100_MASTER_LLCC_PCIE,
-	.channels = 8,
-	.buswidth = 4,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_EBI1_PCIE },
-};
-
-static struct qcom_icc_node qnm_pcie_north_gem_noc_pcie = {
-	.name = "qnm_pcie_north_gem_noc_pcie",
-	.id = X1E80100_MASTER_PCIE_NORTH_PCIE,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_ANOC_PCIE_GEM_NOC_PCIE },
-};
-
-static struct qcom_icc_node qnm_pcie_south_gem_noc_pcie = {
-	.name = "qnm_pcie_south_gem_noc_pcie",
-	.id = X1E80100_MASTER_PCIE_SOUTH_PCIE,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_ANOC_PCIE_GEM_NOC_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_3_pcie = {
-	.name = "xm_pcie_3_pcie",
-	.id = X1E80100_MASTER_PCIE_3_PCIE,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_NORTH_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_4_pcie = {
-	.name = "xm_pcie_4_pcie",
-	.id = X1E80100_MASTER_PCIE_4_PCIE,
-	.channels = 1,
-	.buswidth = 8,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_NORTH_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_5_pcie = {
-	.name = "xm_pcie_5_pcie",
-	.id = X1E80100_MASTER_PCIE_5_PCIE,
-	.channels = 1,
-	.buswidth = 8,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_NORTH_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_0_pcie = {
-	.name = "xm_pcie_0_pcie",
-	.id = X1E80100_MASTER_PCIE_0_PCIE,
-	.channels = 1,
-	.buswidth = 16,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_1_pcie = {
-	.name = "xm_pcie_1_pcie",
-	.id = X1E80100_MASTER_PCIE_1_PCIE,
-	.channels = 1,
-	.buswidth = 16,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_2_pcie = {
-	.name = "xm_pcie_2_pcie",
-	.id = X1E80100_MASTER_PCIE_2_PCIE,
-	.channels = 1,
-	.buswidth = 16,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_6a_pcie = {
-	.name = "xm_pcie_6a_pcie",
-	.id = X1E80100_MASTER_PCIE_6A_PCIE,
-	.channels = 1,
-	.buswidth = 32,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
-};
-
-static struct qcom_icc_node xm_pcie_6b_pcie = {
-	.name = "xm_pcie_6b_pcie",
-	.id = X1E80100_MASTER_PCIE_6B_PCIE,
-	.channels = 1,
-	.buswidth = 16,
-	.num_links = 1,
-	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
-};
-
 static struct qcom_icc_node qns_a1noc_snoc = {
 	.name = "qns_a1noc_snoc",
 	.id = X1E80100_SLAVE_A1NOC_SNOC,
@@ -1514,76 +1370,6 @@ static struct qcom_icc_node qns_aggre_usb_south_snoc = {
 	.links = { X1E80100_MASTER_AGGRE_USB_SOUTH },
 };
 
-static struct qcom_icc_node qns_llcc_disp = {
-	.name = "qns_llcc_disp",
-	.id = X1E80100_SLAVE_LLCC_DISP,
-	.channels = 8,
-	.buswidth = 16,
-	.num_links = 1,
-	.links = { X1E80100_MASTER_LLCC_DISP },
-};
-
-static struct qcom_icc_node ebi_disp = {
-	.name = "ebi_disp",
-	.id = X1E80100_SLAVE_EBI1_DISP,
-	.channels = 8,
-	.buswidth = 4,
-	.num_links = 0,
-};
-
-static struct qcom_icc_node qns_mem_noc_hf_disp = {
-	.name = "qns_mem_noc_hf_disp",
-	.id = X1E80100_SLAVE_MNOC_HF_MEM_NOC_DISP,
-	.channels = 2,
-	.buswidth = 32,
-	.num_links = 1,
-	.links = { X1E80100_MASTER_MNOC_HF_MEM_NOC_DISP },
-};
-
-static struct qcom_icc_node qns_llcc_pcie = {
-	.name = "qns_llcc_pcie",
-	.id = X1E80100_SLAVE_LLCC_PCIE,
-	.channels = 8,
-	.buswidth = 16,
-	.num_links = 1,
-	.links = { X1E80100_MASTER_LLCC_PCIE },
-};
-
-static struct qcom_icc_node ebi_pcie = {
-	.name = "ebi_pcie",
-	.id = X1E80100_SLAVE_EBI1_PCIE,
-	.channels = 8,
-	.buswidth = 4,
-	.num_links = 0,
-};
-
-static struct qcom_icc_node qns_pcie_mem_noc_pcie = {
-	.name = "qns_pcie_mem_noc_pcie",
-	.id = X1E80100_SLAVE_ANOC_PCIE_GEM_NOC_PCIE,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_MASTER_ANOC_PCIE_GEM_NOC_PCIE },
-};
-
-static struct qcom_icc_node qns_pcie_north_gem_noc_pcie = {
-	.name = "qns_pcie_north_gem_noc_pcie",
-	.id = X1E80100_SLAVE_PCIE_NORTH_PCIE,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_MASTER_PCIE_NORTH_PCIE },
-};
-
-static struct qcom_icc_node qns_pcie_south_gem_noc_pcie = {
-	.name = "qns_pcie_south_gem_noc_pcie",
-	.id = X1E80100_SLAVE_PCIE_SOUTH_PCIE,
-	.channels = 1,
-	.buswidth = 64,
-	.num_links = 1,
-	.links = { X1E80100_MASTER_PCIE_SOUTH_PCIE },
-};
-
 static struct qcom_icc_bcm bcm_acv = {
 	.name = "ACV",
 	.num_nodes = 1,
@@ -1755,72 +1541,6 @@ static struct qcom_icc_bcm bcm_sn4 = {
 	.nodes = { &qnm_usb_anoc },
 };
 
-static struct qcom_icc_bcm bcm_acv_disp = {
-	.name = "ACV",
-	.num_nodes = 1,
-	.nodes = { &ebi_disp },
-};
-
-static struct qcom_icc_bcm bcm_mc0_disp = {
-	.name = "MC0",
-	.num_nodes = 1,
-	.nodes = { &ebi_disp },
-};
-
-static struct qcom_icc_bcm bcm_mm0_disp = {
-	.name = "MM0",
-	.num_nodes = 1,
-	.nodes = { &qns_mem_noc_hf_disp },
-};
-
-static struct qcom_icc_bcm bcm_mm1_disp = {
-	.name = "MM1",
-	.num_nodes = 1,
-	.nodes = { &qnm_mdp_disp },
-};
-
-static struct qcom_icc_bcm bcm_sh0_disp = {
-	.name = "SH0",
-	.num_nodes = 1,
-	.nodes = { &qns_llcc_disp },
-};
-
-static struct qcom_icc_bcm bcm_sh1_disp = {
-	.name = "SH1",
-	.num_nodes = 2,
-	.nodes = { &qnm_mnoc_hf_disp, &qnm_pcie_disp },
-};
-
-static struct qcom_icc_bcm bcm_acv_pcie = {
-	.name = "ACV",
-	.num_nodes = 1,
-	.nodes = { &ebi_pcie },
-};
-
-static struct qcom_icc_bcm bcm_mc0_pcie = {
-	.name = "MC0",
-	.num_nodes = 1,
-	.nodes = { &ebi_pcie },
-};
-
-static struct qcom_icc_bcm bcm_pc0_pcie = {
-	.name = "PC0",
-	.num_nodes = 1,
-	.nodes = { &qns_pcie_mem_noc_pcie },
-};
-
-static struct qcom_icc_bcm bcm_sh0_pcie = {
-	.name = "SH0",
-	.num_nodes = 1,
-	.nodes = { &qns_llcc_pcie },
-};
-
-static struct qcom_icc_bcm bcm_sh1_pcie = {
-	.name = "SH1",
-	.num_nodes = 1,
-	.nodes = { &qnm_pcie_pcie },
-};
-
 static struct qcom_icc_bcm *aggre1_noc_bcms[] = {
 };
 
@@ -1982,10 +1702,6 @@ static const struct qcom_icc_desc x1e80100_cnoc_main = {
 static struct qcom_icc_bcm * const gem_noc_bcms[] = {
 	&bcm_sh0,
 	&bcm_sh1,
-	&bcm_sh0_disp,
-	&bcm_sh1_disp,
-	&bcm_sh0_pcie,
-	&bcm_sh1_pcie,
 };
 
 static struct qcom_icc_node * const gem_noc_nodes[] = {
@@ -2004,11 +1720,6 @@ static struct qcom_icc_node * const gem_noc_nodes[] = {
 	[SLAVE_GEM_NOC_CNOC] = &qns_gem_noc_cnoc,
 	[SLAVE_LLCC] = &qns_llcc,
 	[SLAVE_MEM_NOC_PCIE_SNOC] = &qns_pcie,
-	[MASTER_MNOC_HF_MEM_NOC_DISP] = &qnm_mnoc_hf_disp,
-	[MASTER_ANOC_PCIE_GEM_NOC_DISP] = &qnm_pcie_disp,
-	[SLAVE_LLCC_DISP] = &qns_llcc_disp,
-	[MASTER_ANOC_PCIE_GEM_NOC_PCIE] = &qnm_pcie_pcie,
-	[SLAVE_LLCC_PCIE] = &qns_llcc_pcie,
 };
 
 static const struct qcom_icc_desc x1e80100_gem_noc = {
@@ -2067,19 +1778,11 @@ static const struct qcom_icc_desc x1e80100_lpass_lpicx_noc = {
 static struct qcom_icc_bcm * const mc_virt_bcms[] = {
 	&bcm_acv,
 	&bcm_mc0,
-	&bcm_acv_disp,
-	&bcm_mc0_disp,
-	&bcm_acv_pcie,
-	&bcm_mc0_pcie,
 };
 
 static struct qcom_icc_node * const mc_virt_nodes[] = {
 	[MASTER_LLCC] = &llcc_mc,
 	[SLAVE_EBI1] = &ebi,
-	[MASTER_LLCC_DISP] = &llcc_mc_disp,
-	[SLAVE_EBI1_DISP] = &ebi_disp,
-	[MASTER_LLCC_PCIE] = &llcc_mc_pcie,
-	[SLAVE_EBI1_PCIE] = &ebi_pcie,
 };
 
 static const struct qcom_icc_desc x1e80100_mc_virt = {
@@ -2092,8 +1795,6 @@ static const struct qcom_icc_desc x1e80100_mc_virt = {
 static struct qcom_icc_bcm * const mmss_noc_bcms[] = {
 	&bcm_mm0,
 	&bcm_mm1,
-	&bcm_mm0_disp,
-	&bcm_mm1_disp,
 };
 
 static struct qcom_icc_node * const mmss_noc_nodes[] = {
@@ -2110,8 +1811,6 @@ static struct qcom_icc_node * const mmss_noc_nodes[] = {
 	[SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf,
 	[SLAVE_MNOC_SF_MEM_NOC] = &qns_mem_noc_sf,
 	[SLAVE_SERVICE_MNOC] = &srvc_mnoc,
-	[MASTER_MDP_DISP] = &qnm_mdp_disp,
-	[SLAVE_MNOC_HF_MEM_NOC_DISP] = &qns_mem_noc_hf_disp,
 };
 
 static const struct qcom_icc_desc x1e80100_mmss_noc = {
@@ -2139,16 +1838,12 @@ static const struct qcom_icc_desc x1e80100_nsp_noc = {
 
 static struct qcom_icc_bcm * const pcie_center_anoc_bcms[] = {
 	&bcm_pc0,
-	&bcm_pc0_pcie,
 };
 
 static struct qcom_icc_node * const pcie_center_anoc_nodes[] = {
 	[MASTER_PCIE_NORTH] = &qnm_pcie_north_gem_noc,
 	[MASTER_PCIE_SOUTH] = &qnm_pcie_south_gem_noc,
 	[SLAVE_ANOC_PCIE_GEM_NOC] = &qns_pcie_mem_noc,
-	[MASTER_PCIE_NORTH_PCIE] = &qnm_pcie_north_gem_noc_pcie,
-	[MASTER_PCIE_SOUTH_PCIE] = &qnm_pcie_south_gem_noc_pcie,
-	[SLAVE_ANOC_PCIE_GEM_NOC_PCIE] = &qns_pcie_mem_noc_pcie,
 };
 
 static const struct qcom_icc_desc x1e80100_pcie_center_anoc = {
@@ -2166,10 +1861,6 @@ static struct qcom_icc_node * const pcie_north_anoc_nodes[] = {
 	[MASTER_PCIE_4] = &xm_pcie_4,
 	[MASTER_PCIE_5] = &xm_pcie_5,
 	[SLAVE_PCIE_NORTH] = &qns_pcie_north_gem_noc,
-	[MASTER_PCIE_3_PCIE] = &xm_pcie_3_pcie,
-	[MASTER_PCIE_4_PCIE] = &xm_pcie_4_pcie,
-	[MASTER_PCIE_5_PCIE] = &xm_pcie_5_pcie,
-	[SLAVE_PCIE_NORTH_PCIE] = &qns_pcie_north_gem_noc_pcie,
 };
 
 static const struct qcom_icc_desc x1e80100_pcie_north_anoc = {
@@ -2189,12 +1880,6 @@ static struct qcom_icc_node * const pcie_south_anoc_nodes[] = {
 	[MASTER_PCIE_6A] = &xm_pcie_6a,
 	[MASTER_PCIE_6B] = &xm_pcie_6b,
 	[SLAVE_PCIE_SOUTH] = &qns_pcie_south_gem_noc,
-	[MASTER_PCIE_0_PCIE] = &xm_pcie_0_pcie,
-	[MASTER_PCIE_1_PCIE] = &xm_pcie_1_pcie,
-	[MASTER_PCIE_2_PCIE] = &xm_pcie_2_pcie,
-	[MASTER_PCIE_6A_PCIE] = &xm_pcie_6a_pcie,
-	[MASTER_PCIE_6B_PCIE] = &xm_pcie_6b_pcie,
-	[SLAVE_PCIE_SOUTH_PCIE] = &qns_pcie_south_gem_noc_pcie,
 };
 
 static const struct qcom_icc_desc x1e80100_pcie_south_anoc = {

-- 
2.43.0


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

* [PATCH 2/4] dt-bindings: interconnect: Remove bogus interconnect nodes
  2024-01-02 18:29 [PATCH 0/4] X Elite fixups Konrad Dybcio
  2024-01-02 18:29 ` [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes Konrad Dybcio
@ 2024-01-02 18:29 ` Konrad Dybcio
  2024-01-02 21:00   ` Krzysztof Kozlowski
  2024-01-02 18:29 ` [PATCH 3/4] arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain Konrad Dybcio
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Konrad Dybcio @ 2024-01-02 18:29 UTC (permalink / raw)
  To: Bjorn Andersson, Georgi Djakov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Rajendra Nayak, Sibi Sankar, Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel,
	devicetree, Konrad Dybcio

The downstream kernel has infrastructure for passing votes from different
interconnect nodes onto different RPMh RSCs. This neither implemented, not
is going to be implemented upstream (in favor of a different solution
using ICC tags through the same node).

Unfortunately, as it happens, meaningless (in the upstream context) parts
of the vendor driver were copied, ending up causing havoc - since all
"per-RSC" (in quotes because they all point to the main APPS one) BCMs
defined within the driver overwrite the value in RPMh on every
aggregation.

To both avoid keeping bogus code around and possibly introducing
impossible-to-track-down bugs (busses shutting down for no reason), get
rid of the duplicated ICC node definitions.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 .../dt-bindings/interconnect/qcom,x1e80100-rpmh.h  | 24 ----------------------
 1 file changed, 24 deletions(-)

diff --git a/include/dt-bindings/interconnect/qcom,x1e80100-rpmh.h b/include/dt-bindings/interconnect/qcom,x1e80100-rpmh.h
index a38c3472698a..7d9710881149 100644
--- a/include/dt-bindings/interconnect/qcom,x1e80100-rpmh.h
+++ b/include/dt-bindings/interconnect/qcom,x1e80100-rpmh.h
@@ -112,11 +112,6 @@
 #define SLAVE_GEM_NOC_CNOC			12
 #define SLAVE_LLCC				13
 #define SLAVE_MEM_NOC_PCIE_SNOC			14
-#define MASTER_MNOC_HF_MEM_NOC_DISP		15
-#define MASTER_ANOC_PCIE_GEM_NOC_DISP		16
-#define SLAVE_LLCC_DISP				17
-#define MASTER_ANOC_PCIE_GEM_NOC_PCIE		18
-#define SLAVE_LLCC_PCIE				19
 
 #define MASTER_LPIAON_NOC			0
 #define SLAVE_LPASS_GEM_NOC			1
@@ -129,10 +124,6 @@
 
 #define MASTER_LLCC				0
 #define SLAVE_EBI1				1
-#define MASTER_LLCC_DISP			2
-#define SLAVE_EBI1_DISP				3
-#define MASTER_LLCC_PCIE			4
-#define SLAVE_EBI1_PCIE				5
 
 #define MASTER_AV1_ENC				0
 #define MASTER_CAMNOC_HF			1
@@ -147,8 +138,6 @@
 #define SLAVE_MNOC_HF_MEM_NOC			10
 #define SLAVE_MNOC_SF_MEM_NOC			11
 #define SLAVE_SERVICE_MNOC			12
-#define MASTER_MDP_DISP				13
-#define SLAVE_MNOC_HF_MEM_NOC_DISP		14
 
 #define MASTER_CDSP_PROC			0
 #define SLAVE_CDSP_MEM_NOC			1
@@ -156,18 +145,11 @@
 #define MASTER_PCIE_NORTH			0
 #define MASTER_PCIE_SOUTH			1
 #define SLAVE_ANOC_PCIE_GEM_NOC			2
-#define MASTER_PCIE_NORTH_PCIE			3
-#define MASTER_PCIE_SOUTH_PCIE			4
-#define SLAVE_ANOC_PCIE_GEM_NOC_PCIE		5
 
 #define MASTER_PCIE_3				0
 #define MASTER_PCIE_4				1
 #define MASTER_PCIE_5				2
 #define SLAVE_PCIE_NORTH			3
-#define MASTER_PCIE_3_PCIE			4
-#define MASTER_PCIE_4_PCIE			5
-#define MASTER_PCIE_5_PCIE			6
-#define SLAVE_PCIE_NORTH_PCIE			7
 
 #define MASTER_PCIE_0				0
 #define MASTER_PCIE_1				1
@@ -175,12 +157,6 @@
 #define MASTER_PCIE_6A				3
 #define MASTER_PCIE_6B				4
 #define SLAVE_PCIE_SOUTH			5
-#define MASTER_PCIE_0_PCIE			6
-#define MASTER_PCIE_1_PCIE			7
-#define MASTER_PCIE_2_PCIE			8
-#define MASTER_PCIE_6A_PCIE			9
-#define MASTER_PCIE_6B_PCIE			10
-#define SLAVE_PCIE_SOUTH_PCIE			11
 
 #define MASTER_A1NOC_SNOC			0
 #define MASTER_A2NOC_SNOC			1

-- 
2.43.0


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

* [PATCH 3/4] arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain
  2024-01-02 18:29 [PATCH 0/4] X Elite fixups Konrad Dybcio
  2024-01-02 18:29 ` [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes Konrad Dybcio
  2024-01-02 18:29 ` [PATCH 2/4] dt-bindings: interconnect: Remove bogus interconnect nodes Konrad Dybcio
@ 2024-01-02 18:29 ` Konrad Dybcio
  2024-01-02 23:33   ` Abel Vesa
  2024-01-02 18:29 ` [PATCH 4/4] arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes Konrad Dybcio
  2024-01-28  2:17 ` [PATCH 0/4] X Elite fixups Bjorn Andersson
  4 siblings, 1 reply; 11+ messages in thread
From: Konrad Dybcio @ 2024-01-02 18:29 UTC (permalink / raw)
  To: Bjorn Andersson, Georgi Djakov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Rajendra Nayak, Sibi Sankar, Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel,
	devicetree, Konrad Dybcio

Previous Qualcomm SoCs over the past couple years have used the Arm DSU
architecture, which basically unified the meaning of the "cluster" and
"system". This is however clearly not the case on X1E, as can be seen
by three separate cluster power domains.

Add the lacking system-level power domain. For now it's going to be
always-on, as no system-wide idle states are defined at the moment.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 arch/arm64/boot/dts/qcom/x1e80100.dtsi | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/x1e80100.dtsi b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
index 6f75fc342ceb..fc164b9b3ef1 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
@@ -395,16 +395,24 @@ CPU_PD11: power-domain-cpu11 {
 		CLUSTER_PD0: power-domain-cpu-cluster0 {
 			#power-domain-cells = <0>;
 			domain-idle-states = <&CLUSTER_CL4>, <&CLUSTER_CL5>;
+			power-domains = <&SYSTEM_PD>;
 		};
 
 		CLUSTER_PD1: power-domain-cpu-cluster1 {
 			#power-domain-cells = <0>;
 			domain-idle-states = <&CLUSTER_CL4>, <&CLUSTER_CL5>;
+			power-domains = <&SYSTEM_PD>;
 		};
 
 		CLUSTER_PD2: power-domain-cpu-cluster2 {
 			#power-domain-cells = <0>;
 			domain-idle-states = <&CLUSTER_CL4>, <&CLUSTER_CL5>;
+			power-domains = <&SYSTEM_PD>;
+		};
+
+		SYSTEM_PD: power-domain-system {
+			#power-domain-cells = <0>;
+			/* TODO: system-wide idle states */
 		};
 	};
 

-- 
2.43.0


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

* [PATCH 4/4] arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes
  2024-01-02 18:29 [PATCH 0/4] X Elite fixups Konrad Dybcio
                   ` (2 preceding siblings ...)
  2024-01-02 18:29 ` [PATCH 3/4] arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain Konrad Dybcio
@ 2024-01-02 18:29 ` Konrad Dybcio
  2024-01-02 23:34   ` Abel Vesa
  2024-01-28  2:17 ` [PATCH 0/4] X Elite fixups Bjorn Andersson
  4 siblings, 1 reply; 11+ messages in thread
From: Konrad Dybcio @ 2024-01-02 18:29 UTC (permalink / raw)
  To: Bjorn Andersson, Georgi Djakov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Rajendra Nayak, Sibi Sankar, Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel,
	devicetree, Konrad Dybcio

The RPMh driver will cache sleep and wake votes until the cluster
power-domain is about to enter idle, to avoid unnecessary writes. So
associate the apps_rsc with the cluster pd, so that it can be notified
about this event.

Without this, only AMC votes are being committed.

Fixes: af16b00578a7 ("arm64: dts: qcom: Add base X1E80100 dtsi and the QCP dts")
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 arch/arm64/boot/dts/qcom/x1e80100.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/qcom/x1e80100.dtsi b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
index fc164b9b3ef1..2a14e8e39b3b 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
@@ -3334,6 +3334,7 @@ apps_rsc: rsc@17500000 {
 					  <WAKE_TCS      2>, <CONTROL_TCS   0>;
 
 			label = "apps_rsc";
+			power-domains = <&SYSTEM_PD>;
 
 			apps_bcm_voter: bcm-voter {
 				compatible = "qcom,bcm-voter";

-- 
2.43.0


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

* Re: [PATCH 2/4] dt-bindings: interconnect: Remove bogus interconnect nodes
  2024-01-02 18:29 ` [PATCH 2/4] dt-bindings: interconnect: Remove bogus interconnect nodes Konrad Dybcio
@ 2024-01-02 21:00   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 11+ messages in thread
From: Krzysztof Kozlowski @ 2024-01-02 21:00 UTC (permalink / raw)
  To: Konrad Dybcio, Bjorn Andersson, Georgi Djakov, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Rajendra Nayak, Sibi Sankar,
	Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel, devicetree

On 02/01/2024 19:29, Konrad Dybcio wrote:
> The downstream kernel has infrastructure for passing votes from different
> interconnect nodes onto different RPMh RSCs. This neither implemented, not
> is going to be implemented upstream (in favor of a different solution
> using ICC tags through the same node).
> 
> Unfortunately, as it happens, meaningless (in the upstream context) parts
> of the vendor driver were copied, ending up causing havoc - since all
> "per-RSC" (in quotes because they all point to the main APPS one) BCMs
> defined within the driver overwrite the value in RPMh on every
> aggregation.
> 
> To both avoid keeping bogus code around and possibly introducing
> impossible-to-track-down bugs (busses shutting down for no reason), get
> rid of the duplicated ICC node definitions.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof


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

* Re: [PATCH 3/4] arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain
  2024-01-02 18:29 ` [PATCH 3/4] arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain Konrad Dybcio
@ 2024-01-02 23:33   ` Abel Vesa
  0 siblings, 0 replies; 11+ messages in thread
From: Abel Vesa @ 2024-01-02 23:33 UTC (permalink / raw)
  To: Konrad Dybcio
  Cc: Bjorn Andersson, Georgi Djakov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Rajendra Nayak, Sibi Sankar, Marijn Suijten,
	linux-arm-msm, linux-pm, linux-kernel, devicetree

On 24-01-02 19:29:49, Konrad Dybcio wrote:
> Previous Qualcomm SoCs over the past couple years have used the Arm DSU
> architecture, which basically unified the meaning of the "cluster" and
> "system". This is however clearly not the case on X1E, as can be seen
> by three separate cluster power domains.
> 
> Add the lacking system-level power domain. For now it's going to be
> always-on, as no system-wide idle states are defined at the moment.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Abel Vesa <abel.vesa@linaro.org>

> ---
>  arch/arm64/boot/dts/qcom/x1e80100.dtsi | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100.dtsi b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
> index 6f75fc342ceb..fc164b9b3ef1 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
> @@ -395,16 +395,24 @@ CPU_PD11: power-domain-cpu11 {
>  		CLUSTER_PD0: power-domain-cpu-cluster0 {
>  			#power-domain-cells = <0>;
>  			domain-idle-states = <&CLUSTER_CL4>, <&CLUSTER_CL5>;
> +			power-domains = <&SYSTEM_PD>;
>  		};
>  
>  		CLUSTER_PD1: power-domain-cpu-cluster1 {
>  			#power-domain-cells = <0>;
>  			domain-idle-states = <&CLUSTER_CL4>, <&CLUSTER_CL5>;
> +			power-domains = <&SYSTEM_PD>;
>  		};
>  
>  		CLUSTER_PD2: power-domain-cpu-cluster2 {
>  			#power-domain-cells = <0>;
>  			domain-idle-states = <&CLUSTER_CL4>, <&CLUSTER_CL5>;
> +			power-domains = <&SYSTEM_PD>;
> +		};
> +
> +		SYSTEM_PD: power-domain-system {
> +			#power-domain-cells = <0>;
> +			/* TODO: system-wide idle states */
>  		};
>  	};
>  
> 
> -- 
> 2.43.0
> 

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

* Re: [PATCH 4/4] arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes
  2024-01-02 18:29 ` [PATCH 4/4] arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes Konrad Dybcio
@ 2024-01-02 23:34   ` Abel Vesa
  0 siblings, 0 replies; 11+ messages in thread
From: Abel Vesa @ 2024-01-02 23:34 UTC (permalink / raw)
  To: Konrad Dybcio
  Cc: Bjorn Andersson, Georgi Djakov, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Rajendra Nayak, Sibi Sankar, Marijn Suijten,
	linux-arm-msm, linux-pm, linux-kernel, devicetree

On 24-01-02 19:29:50, Konrad Dybcio wrote:
> The RPMh driver will cache sleep and wake votes until the cluster
> power-domain is about to enter idle, to avoid unnecessary writes. So
> associate the apps_rsc with the cluster pd, so that it can be notified
> about this event.
> 
> Without this, only AMC votes are being committed.
> 
> Fixes: af16b00578a7 ("arm64: dts: qcom: Add base X1E80100 dtsi and the QCP dts")
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Abel Vesa <abel.vesa@linaro.org>

> ---
>  arch/arm64/boot/dts/qcom/x1e80100.dtsi | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100.dtsi b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
> index fc164b9b3ef1..2a14e8e39b3b 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e80100.dtsi
> @@ -3334,6 +3334,7 @@ apps_rsc: rsc@17500000 {
>  					  <WAKE_TCS      2>, <CONTROL_TCS   0>;
>  
>  			label = "apps_rsc";
> +			power-domains = <&SYSTEM_PD>;
>  
>  			apps_bcm_voter: bcm-voter {
>  				compatible = "qcom,bcm-voter";
> 
> -- 
> 2.43.0
> 

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

* Re: [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes
  2024-01-02 18:29 ` [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes Konrad Dybcio
@ 2024-01-04  9:59   ` Rajendra Nayak
  2024-01-04 10:06     ` Konrad Dybcio
  0 siblings, 1 reply; 11+ messages in thread
From: Rajendra Nayak @ 2024-01-04  9:59 UTC (permalink / raw)
  To: Konrad Dybcio, Bjorn Andersson, Georgi Djakov, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Sibi Sankar, Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel, devicetree



On 1/2/2024 11:59 PM, Konrad Dybcio wrote:
> The downstream kernel has infrastructure for passing votes from different
> interconnect nodes onto different RPMh RSCs. This neither implemented, not
> is going to be implemented upstream (in favor of a different solution
> using ICC tags through the same node).
> 
> Unfortunately, as it happens, meaningless (in the upstream context) parts
> of the vendor driver were copied, ending up causing havoc - since all
> "per-RSC" (in quotes because they all point to the main APPS one) BCMs
> defined within the driver overwrite the value in RPMh on every
> aggregation.
> 
> To both avoid keeping bogus code around and possibly introducing
> impossible-to-track-down bugs (busses shutting down for no reason), get
> rid of the duplicated BCMs and their associated ICC nodes.

Thanks Konrad for catching this, I do see these nodes in other Qualcomm 
SoCs upstream (atleast sm8350/sm8450 and sm8550), perhaps they need to 
be cleaned up as well?

Reviewed-by: Rajendra Nayak <quic_rjendra@quicinc.com>

> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> ---
>   drivers/interconnect/qcom/x1e80100.c | 315 -----------------------------------
>   1 file changed, 315 deletions(-)
> 
> diff --git a/drivers/interconnect/qcom/x1e80100.c b/drivers/interconnect/qcom/x1e80100.c
> index d19501d913b3..5b2de9c3a1d6 100644
> --- a/drivers/interconnect/qcom/x1e80100.c
> +++ b/drivers/interconnect/qcom/x1e80100.c
> @@ -670,150 +670,6 @@ static struct qcom_icc_node xm_usb4_2 = {
>   	.links = { X1E80100_SLAVE_AGGRE_USB_SOUTH },
>   };
>   
> -static struct qcom_icc_node qnm_mnoc_hf_disp = {
> -	.name = "qnm_mnoc_hf_disp",
> -	.id = X1E80100_MASTER_MNOC_HF_MEM_NOC_DISP,
> -	.channels = 2,
> -	.buswidth = 32,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_LLCC_DISP },
> -};
> -
> -static struct qcom_icc_node qnm_pcie_disp = {
> -	.name = "qnm_pcie_disp",
> -	.id = X1E80100_MASTER_ANOC_PCIE_GEM_NOC_DISP,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_LLCC_DISP },
> -};
> -
> -static struct qcom_icc_node llcc_mc_disp = {
> -	.name = "llcc_mc_disp",
> -	.id = X1E80100_MASTER_LLCC_DISP,
> -	.channels = 8,
> -	.buswidth = 4,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_EBI1_DISP },
> -};
> -
> -static struct qcom_icc_node qnm_mdp_disp = {
> -	.name = "qnm_mdp_disp",
> -	.id = X1E80100_MASTER_MDP_DISP,
> -	.channels = 2,
> -	.buswidth = 32,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_MNOC_HF_MEM_NOC_DISP },
> -};
> -
> -static struct qcom_icc_node qnm_pcie_pcie = {
> -	.name = "qnm_pcie_pcie",
> -	.id = X1E80100_MASTER_ANOC_PCIE_GEM_NOC_PCIE,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_LLCC_PCIE },
> -};
> -
> -static struct qcom_icc_node llcc_mc_pcie = {
> -	.name = "llcc_mc_pcie",
> -	.id = X1E80100_MASTER_LLCC_PCIE,
> -	.channels = 8,
> -	.buswidth = 4,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_EBI1_PCIE },
> -};
> -
> -static struct qcom_icc_node qnm_pcie_north_gem_noc_pcie = {
> -	.name = "qnm_pcie_north_gem_noc_pcie",
> -	.id = X1E80100_MASTER_PCIE_NORTH_PCIE,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_ANOC_PCIE_GEM_NOC_PCIE },
> -};
> -
> -static struct qcom_icc_node qnm_pcie_south_gem_noc_pcie = {
> -	.name = "qnm_pcie_south_gem_noc_pcie",
> -	.id = X1E80100_MASTER_PCIE_SOUTH_PCIE,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_ANOC_PCIE_GEM_NOC_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_3_pcie = {
> -	.name = "xm_pcie_3_pcie",
> -	.id = X1E80100_MASTER_PCIE_3_PCIE,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_NORTH_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_4_pcie = {
> -	.name = "xm_pcie_4_pcie",
> -	.id = X1E80100_MASTER_PCIE_4_PCIE,
> -	.channels = 1,
> -	.buswidth = 8,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_NORTH_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_5_pcie = {
> -	.name = "xm_pcie_5_pcie",
> -	.id = X1E80100_MASTER_PCIE_5_PCIE,
> -	.channels = 1,
> -	.buswidth = 8,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_NORTH_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_0_pcie = {
> -	.name = "xm_pcie_0_pcie",
> -	.id = X1E80100_MASTER_PCIE_0_PCIE,
> -	.channels = 1,
> -	.buswidth = 16,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_1_pcie = {
> -	.name = "xm_pcie_1_pcie",
> -	.id = X1E80100_MASTER_PCIE_1_PCIE,
> -	.channels = 1,
> -	.buswidth = 16,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_2_pcie = {
> -	.name = "xm_pcie_2_pcie",
> -	.id = X1E80100_MASTER_PCIE_2_PCIE,
> -	.channels = 1,
> -	.buswidth = 16,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_6a_pcie = {
> -	.name = "xm_pcie_6a_pcie",
> -	.id = X1E80100_MASTER_PCIE_6A_PCIE,
> -	.channels = 1,
> -	.buswidth = 32,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
> -};
> -
> -static struct qcom_icc_node xm_pcie_6b_pcie = {
> -	.name = "xm_pcie_6b_pcie",
> -	.id = X1E80100_MASTER_PCIE_6B_PCIE,
> -	.channels = 1,
> -	.buswidth = 16,
> -	.num_links = 1,
> -	.links = { X1E80100_SLAVE_PCIE_SOUTH_PCIE },
> -};
> -
>   static struct qcom_icc_node qns_a1noc_snoc = {
>   	.name = "qns_a1noc_snoc",
>   	.id = X1E80100_SLAVE_A1NOC_SNOC,
> @@ -1514,76 +1370,6 @@ static struct qcom_icc_node qns_aggre_usb_south_snoc = {
>   	.links = { X1E80100_MASTER_AGGRE_USB_SOUTH },
>   };
>   
> -static struct qcom_icc_node qns_llcc_disp = {
> -	.name = "qns_llcc_disp",
> -	.id = X1E80100_SLAVE_LLCC_DISP,
> -	.channels = 8,
> -	.buswidth = 16,
> -	.num_links = 1,
> -	.links = { X1E80100_MASTER_LLCC_DISP },
> -};
> -
> -static struct qcom_icc_node ebi_disp = {
> -	.name = "ebi_disp",
> -	.id = X1E80100_SLAVE_EBI1_DISP,
> -	.channels = 8,
> -	.buswidth = 4,
> -	.num_links = 0,
> -};
> -
> -static struct qcom_icc_node qns_mem_noc_hf_disp = {
> -	.name = "qns_mem_noc_hf_disp",
> -	.id = X1E80100_SLAVE_MNOC_HF_MEM_NOC_DISP,
> -	.channels = 2,
> -	.buswidth = 32,
> -	.num_links = 1,
> -	.links = { X1E80100_MASTER_MNOC_HF_MEM_NOC_DISP },
> -};
> -
> -static struct qcom_icc_node qns_llcc_pcie = {
> -	.name = "qns_llcc_pcie",
> -	.id = X1E80100_SLAVE_LLCC_PCIE,
> -	.channels = 8,
> -	.buswidth = 16,
> -	.num_links = 1,
> -	.links = { X1E80100_MASTER_LLCC_PCIE },
> -};
> -
> -static struct qcom_icc_node ebi_pcie = {
> -	.name = "ebi_pcie",
> -	.id = X1E80100_SLAVE_EBI1_PCIE,
> -	.channels = 8,
> -	.buswidth = 4,
> -	.num_links = 0,
> -};
> -
> -static struct qcom_icc_node qns_pcie_mem_noc_pcie = {
> -	.name = "qns_pcie_mem_noc_pcie",
> -	.id = X1E80100_SLAVE_ANOC_PCIE_GEM_NOC_PCIE,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_MASTER_ANOC_PCIE_GEM_NOC_PCIE },
> -};
> -
> -static struct qcom_icc_node qns_pcie_north_gem_noc_pcie = {
> -	.name = "qns_pcie_north_gem_noc_pcie",
> -	.id = X1E80100_SLAVE_PCIE_NORTH_PCIE,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_MASTER_PCIE_NORTH_PCIE },
> -};
> -
> -static struct qcom_icc_node qns_pcie_south_gem_noc_pcie = {
> -	.name = "qns_pcie_south_gem_noc_pcie",
> -	.id = X1E80100_SLAVE_PCIE_SOUTH_PCIE,
> -	.channels = 1,
> -	.buswidth = 64,
> -	.num_links = 1,
> -	.links = { X1E80100_MASTER_PCIE_SOUTH_PCIE },
> -};
> -
>   static struct qcom_icc_bcm bcm_acv = {
>   	.name = "ACV",
>   	.num_nodes = 1,
> @@ -1755,72 +1541,6 @@ static struct qcom_icc_bcm bcm_sn4 = {
>   	.nodes = { &qnm_usb_anoc },
>   };
>   
> -static struct qcom_icc_bcm bcm_acv_disp = {
> -	.name = "ACV",
> -	.num_nodes = 1,
> -	.nodes = { &ebi_disp },
> -};
> -
> -static struct qcom_icc_bcm bcm_mc0_disp = {
> -	.name = "MC0",
> -	.num_nodes = 1,
> -	.nodes = { &ebi_disp },
> -};
> -
> -static struct qcom_icc_bcm bcm_mm0_disp = {
> -	.name = "MM0",
> -	.num_nodes = 1,
> -	.nodes = { &qns_mem_noc_hf_disp },
> -};
> -
> -static struct qcom_icc_bcm bcm_mm1_disp = {
> -	.name = "MM1",
> -	.num_nodes = 1,
> -	.nodes = { &qnm_mdp_disp },
> -};
> -
> -static struct qcom_icc_bcm bcm_sh0_disp = {
> -	.name = "SH0",
> -	.num_nodes = 1,
> -	.nodes = { &qns_llcc_disp },
> -};
> -
> -static struct qcom_icc_bcm bcm_sh1_disp = {
> -	.name = "SH1",
> -	.num_nodes = 2,
> -	.nodes = { &qnm_mnoc_hf_disp, &qnm_pcie_disp },
> -};
> -
> -static struct qcom_icc_bcm bcm_acv_pcie = {
> -	.name = "ACV",
> -	.num_nodes = 1,
> -	.nodes = { &ebi_pcie },
> -};
> -
> -static struct qcom_icc_bcm bcm_mc0_pcie = {
> -	.name = "MC0",
> -	.num_nodes = 1,
> -	.nodes = { &ebi_pcie },
> -};
> -
> -static struct qcom_icc_bcm bcm_pc0_pcie = {
> -	.name = "PC0",
> -	.num_nodes = 1,
> -	.nodes = { &qns_pcie_mem_noc_pcie },
> -};
> -
> -static struct qcom_icc_bcm bcm_sh0_pcie = {
> -	.name = "SH0",
> -	.num_nodes = 1,
> -	.nodes = { &qns_llcc_pcie },
> -};
> -
> -static struct qcom_icc_bcm bcm_sh1_pcie = {
> -	.name = "SH1",
> -	.num_nodes = 1,
> -	.nodes = { &qnm_pcie_pcie },
> -};
> -
>   static struct qcom_icc_bcm *aggre1_noc_bcms[] = {
>   };
>   
> @@ -1982,10 +1702,6 @@ static const struct qcom_icc_desc x1e80100_cnoc_main = {
>   static struct qcom_icc_bcm * const gem_noc_bcms[] = {
>   	&bcm_sh0,
>   	&bcm_sh1,
> -	&bcm_sh0_disp,
> -	&bcm_sh1_disp,
> -	&bcm_sh0_pcie,
> -	&bcm_sh1_pcie,
>   };
>   
>   static struct qcom_icc_node * const gem_noc_nodes[] = {
> @@ -2004,11 +1720,6 @@ static struct qcom_icc_node * const gem_noc_nodes[] = {
>   	[SLAVE_GEM_NOC_CNOC] = &qns_gem_noc_cnoc,
>   	[SLAVE_LLCC] = &qns_llcc,
>   	[SLAVE_MEM_NOC_PCIE_SNOC] = &qns_pcie,
> -	[MASTER_MNOC_HF_MEM_NOC_DISP] = &qnm_mnoc_hf_disp,
> -	[MASTER_ANOC_PCIE_GEM_NOC_DISP] = &qnm_pcie_disp,
> -	[SLAVE_LLCC_DISP] = &qns_llcc_disp,
> -	[MASTER_ANOC_PCIE_GEM_NOC_PCIE] = &qnm_pcie_pcie,
> -	[SLAVE_LLCC_PCIE] = &qns_llcc_pcie,
>   };
>   
>   static const struct qcom_icc_desc x1e80100_gem_noc = {
> @@ -2067,19 +1778,11 @@ static const struct qcom_icc_desc x1e80100_lpass_lpicx_noc = {
>   static struct qcom_icc_bcm * const mc_virt_bcms[] = {
>   	&bcm_acv,
>   	&bcm_mc0,
> -	&bcm_acv_disp,
> -	&bcm_mc0_disp,
> -	&bcm_acv_pcie,
> -	&bcm_mc0_pcie,
>   };
>   
>   static struct qcom_icc_node * const mc_virt_nodes[] = {
>   	[MASTER_LLCC] = &llcc_mc,
>   	[SLAVE_EBI1] = &ebi,
> -	[MASTER_LLCC_DISP] = &llcc_mc_disp,
> -	[SLAVE_EBI1_DISP] = &ebi_disp,
> -	[MASTER_LLCC_PCIE] = &llcc_mc_pcie,
> -	[SLAVE_EBI1_PCIE] = &ebi_pcie,
>   };
>   
>   static const struct qcom_icc_desc x1e80100_mc_virt = {
> @@ -2092,8 +1795,6 @@ static const struct qcom_icc_desc x1e80100_mc_virt = {
>   static struct qcom_icc_bcm * const mmss_noc_bcms[] = {
>   	&bcm_mm0,
>   	&bcm_mm1,
> -	&bcm_mm0_disp,
> -	&bcm_mm1_disp,
>   };
>   
>   static struct qcom_icc_node * const mmss_noc_nodes[] = {
> @@ -2110,8 +1811,6 @@ static struct qcom_icc_node * const mmss_noc_nodes[] = {
>   	[SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf,
>   	[SLAVE_MNOC_SF_MEM_NOC] = &qns_mem_noc_sf,
>   	[SLAVE_SERVICE_MNOC] = &srvc_mnoc,
> -	[MASTER_MDP_DISP] = &qnm_mdp_disp,
> -	[SLAVE_MNOC_HF_MEM_NOC_DISP] = &qns_mem_noc_hf_disp,
>   };
>   
>   static const struct qcom_icc_desc x1e80100_mmss_noc = {
> @@ -2139,16 +1838,12 @@ static const struct qcom_icc_desc x1e80100_nsp_noc = {
>   
>   static struct qcom_icc_bcm * const pcie_center_anoc_bcms[] = {
>   	&bcm_pc0,
> -	&bcm_pc0_pcie,
>   };
>   
>   static struct qcom_icc_node * const pcie_center_anoc_nodes[] = {
>   	[MASTER_PCIE_NORTH] = &qnm_pcie_north_gem_noc,
>   	[MASTER_PCIE_SOUTH] = &qnm_pcie_south_gem_noc,
>   	[SLAVE_ANOC_PCIE_GEM_NOC] = &qns_pcie_mem_noc,
> -	[MASTER_PCIE_NORTH_PCIE] = &qnm_pcie_north_gem_noc_pcie,
> -	[MASTER_PCIE_SOUTH_PCIE] = &qnm_pcie_south_gem_noc_pcie,
> -	[SLAVE_ANOC_PCIE_GEM_NOC_PCIE] = &qns_pcie_mem_noc_pcie,
>   };
>   
>   static const struct qcom_icc_desc x1e80100_pcie_center_anoc = {
> @@ -2166,10 +1861,6 @@ static struct qcom_icc_node * const pcie_north_anoc_nodes[] = {
>   	[MASTER_PCIE_4] = &xm_pcie_4,
>   	[MASTER_PCIE_5] = &xm_pcie_5,
>   	[SLAVE_PCIE_NORTH] = &qns_pcie_north_gem_noc,
> -	[MASTER_PCIE_3_PCIE] = &xm_pcie_3_pcie,
> -	[MASTER_PCIE_4_PCIE] = &xm_pcie_4_pcie,
> -	[MASTER_PCIE_5_PCIE] = &xm_pcie_5_pcie,
> -	[SLAVE_PCIE_NORTH_PCIE] = &qns_pcie_north_gem_noc_pcie,
>   };
>   
>   static const struct qcom_icc_desc x1e80100_pcie_north_anoc = {
> @@ -2189,12 +1880,6 @@ static struct qcom_icc_node * const pcie_south_anoc_nodes[] = {
>   	[MASTER_PCIE_6A] = &xm_pcie_6a,
>   	[MASTER_PCIE_6B] = &xm_pcie_6b,
>   	[SLAVE_PCIE_SOUTH] = &qns_pcie_south_gem_noc,
> -	[MASTER_PCIE_0_PCIE] = &xm_pcie_0_pcie,
> -	[MASTER_PCIE_1_PCIE] = &xm_pcie_1_pcie,
> -	[MASTER_PCIE_2_PCIE] = &xm_pcie_2_pcie,
> -	[MASTER_PCIE_6A_PCIE] = &xm_pcie_6a_pcie,
> -	[MASTER_PCIE_6B_PCIE] = &xm_pcie_6b_pcie,
> -	[SLAVE_PCIE_SOUTH_PCIE] = &qns_pcie_south_gem_noc_pcie,
>   };
>   
>   static const struct qcom_icc_desc x1e80100_pcie_south_anoc = {
> 

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

* Re: [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes
  2024-01-04  9:59   ` Rajendra Nayak
@ 2024-01-04 10:06     ` Konrad Dybcio
  0 siblings, 0 replies; 11+ messages in thread
From: Konrad Dybcio @ 2024-01-04 10:06 UTC (permalink / raw)
  To: Rajendra Nayak, Bjorn Andersson, Georgi Djakov, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Sibi Sankar, Abel Vesa
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel, devicetree

On 4.01.2024 10:59, Rajendra Nayak wrote:
> 
> 
> On 1/2/2024 11:59 PM, Konrad Dybcio wrote:
>> The downstream kernel has infrastructure for passing votes from different
>> interconnect nodes onto different RPMh RSCs. This neither implemented, not
>> is going to be implemented upstream (in favor of a different solution
>> using ICC tags through the same node).
>>
>> Unfortunately, as it happens, meaningless (in the upstream context) parts
>> of the vendor driver were copied, ending up causing havoc - since all
>> "per-RSC" (in quotes because they all point to the main APPS one) BCMs
>> defined within the driver overwrite the value in RPMh on every
>> aggregation.
>>
>> To both avoid keeping bogus code around and possibly introducing
>> impossible-to-track-down bugs (busses shutting down for no reason), get
>> rid of the duplicated BCMs and their associated ICC nodes.
> 
> Thanks Konrad for catching this, I do see these nodes in other Qualcomm SoCs upstream (atleast sm8350/sm8450 and sm8550), perhaps they need to be cleaned up as well?
Yes, I cleaned up 8550 last week, I'll look into the rest.

Konrad

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

* Re: [PATCH 0/4] X Elite fixups
  2024-01-02 18:29 [PATCH 0/4] X Elite fixups Konrad Dybcio
                   ` (3 preceding siblings ...)
  2024-01-02 18:29 ` [PATCH 4/4] arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes Konrad Dybcio
@ 2024-01-28  2:17 ` Bjorn Andersson
  4 siblings, 0 replies; 11+ messages in thread
From: Bjorn Andersson @ 2024-01-28  2:17 UTC (permalink / raw)
  To: Georgi Djakov, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Rajendra Nayak, Sibi Sankar, Abel Vesa, Konrad Dybcio
  Cc: Marijn Suijten, linux-arm-msm, linux-pm, linux-kernel, devicetree


On Tue, 02 Jan 2024 19:29:46 +0100, Konrad Dybcio wrote:
> Just a couple of "usual" fixups that slipped through introduction
> reviews..
> 
> p1-2 for icc
> p3-4 for qcom
> 
> 
> [...]

Applied, thanks!

[1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes
      (no commit info)
[2/4] dt-bindings: interconnect: Remove bogus interconnect nodes
      (no commit info)
[3/4] arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain
      commit: f33767e3cfa5d40d751340dce05d316b3a151041
[4/4] arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes
      commit: 7d62dbd1b3b22ef73ed5a13f416ee21ee61c450b

Best regards,
-- 
Bjorn Andersson <andersson@kernel.org>

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

end of thread, other threads:[~2024-01-28  2:17 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-02 18:29 [PATCH 0/4] X Elite fixups Konrad Dybcio
2024-01-02 18:29 ` [PATCH 1/4] interconnect: qcom: x1e80100: Remove bogus per-RSC BCMs and nodes Konrad Dybcio
2024-01-04  9:59   ` Rajendra Nayak
2024-01-04 10:06     ` Konrad Dybcio
2024-01-02 18:29 ` [PATCH 2/4] dt-bindings: interconnect: Remove bogus interconnect nodes Konrad Dybcio
2024-01-02 21:00   ` Krzysztof Kozlowski
2024-01-02 18:29 ` [PATCH 3/4] arm64: dts: qcom: x1e80100: Add missing system-wide PSCI power domain Konrad Dybcio
2024-01-02 23:33   ` Abel Vesa
2024-01-02 18:29 ` [PATCH 4/4] arm64: dts: qcom: x1e80100: Flush RSC sleep & wake votes Konrad Dybcio
2024-01-02 23:34   ` Abel Vesa
2024-01-28  2:17 ` [PATCH 0/4] X Elite fixups Bjorn Andersson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).