From nobody Tue Oct 7 09:02:39 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D807122FE0A for ; Fri, 11 Jul 2025 23:43:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752277414; cv=none; b=cELaZhp8n1pvHHyq6DesGtPz2ZATdF/OAISm/tx6ZCY7XxqrGn0KsrlQY0zrRtVphbtnXOGk/dmW11+v7xgtVf6hrMEHp6M37MyY+aja83yk5zNpCT6qoMemFNRP+hOGJ9Zq9OGWdu293xZAD5XsuDCDaRmoQ8P+ceC4DWJ5i+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752277414; c=relaxed/simple; bh=jI/ltAtt8DUhNMLbixaN0P7c6vjb6oAB7O5ct02n08E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T4KDeHmO7EqAf+88P5WT/FkNKvT4llRH5AB+fKLxi7hAKAloVMrqzoI1NjPucJTQgEjIsxF/DeOukcIbZRylIKnlXVjCNrb1VK/bt+eYprpEVO7KQo+KfRFXJCo10fQHkeGe+YeU3yLipACTcPyO/RZkWlTCPXktToxTdiiGuCo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=kCxAPQv5; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="kCxAPQv5" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BNSoQE000660 for ; Fri, 11 Jul 2025 23:43:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= t1Fx38Ip81xjrcL06PRMFpRCO201s9NQVUZdCpPO9w4=; b=kCxAPQv5HL4lkilo D/DGfcmcnrFF4+S5EibTRmSiYfOX1uj8eA7sEBHHZgOO5xmCWpnIsC2LDhdGZCEW 6RDjGJMMdmr3w8z5qsNLzOAABAyY11hgp531V/rBVaGo+IPdNMk8mQuWmiUPxYY6 S+wlrY4LfFsqzjD9VzNyeFqA0KL9PP5tcEIf27KEGkD6QHOAkOgQd9ylAEBXpR4W IysO2PnxP6lxM+kLUl4JhCtnj7uy5E5Sfd0Nm5LYc6ZT6h4xrLsO3SvcWnwD5y/y 4s8zULwTgJ0oZ8NO2Bov4n7JlfNSYv80D//cGi1DEH3kp39Z+0E2OKfWFI7o/vxH Q0JZdw== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47tkf342kb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 11 Jul 2025 23:43:31 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-748f30d56d1so1199600b3a.3 for ; Fri, 11 Jul 2025 16:43:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752277411; x=1752882211; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t1Fx38Ip81xjrcL06PRMFpRCO201s9NQVUZdCpPO9w4=; b=o+2oLpcFnfSSCR8V6PmdNB4La3M5e8P2QPbk9gRLJB7Atf0HG5P8yXOK0gXGR2aqRZ z47W2rjtV1O1WorQwMZc1DXAuRFqecPLZ/cbqGzQgOxh/v6+CtV+cRC7BHK08ks7g2Te OirIjy13Vzav2ElkxIjoHtsXhuMmONVUikUqb/Zk7pT8ASb8owtpplaWUpcBzQt7W314 hYEpZTaS36Smxue8874XIyR8wZRYMuahzwUzkQNHqegTjqpslFI9LLd5AFWphLZWvQ9Z gcdA1AUmaM7aWwVo4onMjjb5nzjiLAG/wqtJeG3V/UFi2eR4kzvpegbMqGprzgfnLAML cOAg== X-Forwarded-Encrypted: i=1; AJvYcCWS37YTe5V11QdgVcv4ZkP/FenprVz2VEV+uMIF3Ip2ooJbyEp/aX3q8U/wsw+4cbdPMd8y5BPxdKvZLxA=@vger.kernel.org X-Gm-Message-State: AOJu0YyrIRV8b3PR/IWq7EKrhsocF4SSLaeYkEu99D5g1u6QOuJeYKLW wWW/ynZl+OdfGDt0OO9FqCST2Vscjz+1ZDky5ijejFdBcP9bRJn9udLkTlT8LMK3AOy09IK0XJZ EKbmIpmrqjYLnQ9tiL2VLT49n2Gvl2MOk0V0X+riKTEBofiRJ9fnV+DsjFIQYluDqNHA= X-Gm-Gg: ASbGncuogQEeWNYHCu9fHI2VFwOrhcbxKsJ+L8QLG2qPkuewnhThfa4cimn0zuytF6N Iuyu8owb1O+4raTaseSlaI9k2oFdesUow+AyiSVExy+NlOJCHFMvPnVrksariSSdgyzScX9ZxBK +4AooDkpOSysG4fhpfbOZBncb4lPTE/3cld69bNDr/9Ng7to+s8qt19RKTARqWq3a4MkgBf/eRC vTJxZ9XRXbQoL+hvjPmb+KHv7JtDooym67ZyPr/sWsPYE8Ve7yEJbzl5vht1Xbs5t6ixtBMpKxW E2y4dft4p4Ihv09+SGCmMZifJ9vCB9V5AlZF9NSG2GrfuyCJDFxseQeJWiBWPdoKEFxIDfSLd9M = X-Received: by 2002:a05:6a00:3e03:b0:742:aecc:c46b with SMTP id d2e1a72fcca58-74f1e7dde53mr5214423b3a.15.1752277410842; Fri, 11 Jul 2025 16:43:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE2qCZBFOJBeBtMP+lpq6Jtecrw48J1CwOGopT3cXCkBp9v/8Ds6v/iXB5nyY1Uj/TDw5+X/A== X-Received: by 2002:a05:6a00:3e03:b0:742:aecc:c46b with SMTP id d2e1a72fcca58-74f1e7dde53mr5214384b3a.15.1752277410262; Fri, 11 Jul 2025 16:43:30 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74eb9f1a851sm5869781b3a.82.2025.07.11.16.43.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Jul 2025 16:43:29 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Sat, 12 Jul 2025 05:12:40 +0530 Subject: [PATCH v6 4/5] PCI: dwc: Add ECAM support with iATU configuration Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250712-ecam_v4-v6-4-d820f912e354@qti.qualcomm.com> References: <20250712-ecam_v4-v6-0-d820f912e354@qti.qualcomm.com> In-Reply-To: <20250712-ecam_v4-v6-0-d820f912e354@qti.qualcomm.com> To: cros-qcom-dts-watchers@chromium.org, Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lorenzo Pieralisi , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Bjorn Helgaas , Jingoo Han Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, quic_vbadigan@quicinc.com, quic_mrana@quicinc.com, quic_vpernami@quicinc.com, mmareddy@quicinc.com, Krishna Chaitanya Chundru X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1752277383; l=9428; i=krichai@qti.qualcomm.com; s=20230907; h=from:subject:message-id; bh=jI/ltAtt8DUhNMLbixaN0P7c6vjb6oAB7O5ct02n08E=; b=DBtfCLuLh0i5keSreSP09WMK8e2a0K7VAAem6+KOYcJHYHpPChcAsHIh/t8cmdVTg8NSaPpoA r681D8KM8JdCEyOerJU74kjHWrKjgiGVN0UjYV3hkx2FyE5wmNopI18 X-Developer-Key: i=krichai@qti.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzExMDE4MCBTYWx0ZWRfX0I5ZCsQcBLSU u6ZDu3s/9NcOth164kQ1bx0291WyqmoUuhOhNFSeHEs/4uy64jW4mrUkRLmm3z+nRaHiNOYs6ym 3+4sr/Mb4g1HQOhpruNb5jzBoQYnF0Kh5GLh7vDt0ZqsWia3z+uXPCcAZ43EF35gwuxeHhF5i1z xsCwYedz176+F78/ROkP6/R4NrqqxzNZSMMkXH4umZuEeQ7Yub6OkeNfNca6a7fzAqn90ETLvzL 5gE9mx9LF39f43futVVl60Lv1e8lVU34IP/7PtSdCU7SjXPBVImWMAyWigDaXsX4P+EU4ITxbiF X85oPmJuYBR0k/L054Olrfei72Tg9W4HIQYSd65HrZbMFh/zbtKcU+kb55Wk53LDHU1VqkoUCkt TbGBtXTrDK5+0q+/KDKw8BRwacHMLPSx2iE5MCpsna+6mcyofkdShUFeC1GHs+ePjQlruXQU X-Proofpoint-GUID: Puye_9oVRpWiCuVVBPDv8BAe6dOdETAL X-Authority-Analysis: v=2.4 cv=Xuf6OUF9 c=1 sm=1 tr=0 ts=6871a1a4 cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Wb1JkmetP80A:10 a=EUspDBNiAAAA:8 a=KLD09g9XOrCUKH48cnIA:9 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-ORIG-GUID: Puye_9oVRpWiCuVVBPDv8BAe6dOdETAL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_07,2025-07-09_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507110180 The current implementation requires iATU for every configuration space access which increases latency & cpu utilization. Designware databook 5.20a, section 3.10.10.3 says about CFG Shift Feature, which shifts/maps the BDF (bits [31:16] of the third header DWORD, which would be matched against the Base and Limit addresses) of the incoming CfgRd0/CfgWr0 down to bits[27:12]of the translated address. Configuring iATU in config shift feature enables ECAM feature to access the config space, which avoids iATU configuration for every config access. Add "ctrl2" into struct dw_pcie_ob_atu_cfg to enable config shift feature. As DBI comes under config space, this avoids remapping of DBI space separately. Instead, it uses the mapped config space address returned from ECAM initialization. Change the order of dw_pcie_get_resources() execution to achieve this. Enable the ECAM feature if the config space size is equal to size required to represent number of buses in the bus range property. Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/controller/dwc/Kconfig | 1 + drivers/pci/controller/dwc/pcie-designware-host.c | 131 ++++++++++++++++++= +--- drivers/pci/controller/dwc/pcie-designware.c | 2 +- drivers/pci/controller/dwc/pcie-designware.h | 5 + 4 files changed, 124 insertions(+), 15 deletions(-) diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dw= c/Kconfig index d9f0386396edf66ad0e514a0f545ed24d89fcb6c..9fe9a7756139450819c6db14eb7= f67b0a07b6aa8 100644 --- a/drivers/pci/controller/dwc/Kconfig +++ b/drivers/pci/controller/dwc/Kconfig @@ -19,6 +19,7 @@ config PCIE_DW_DEBUGFS config PCIE_DW_HOST bool select PCIE_DW + select PCI_HOST_COMMON =20 config PCIE_DW_EP bool diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pc= i/controller/dwc/pcie-designware-host.c index 906277f9ffaf79f2c5c3c76f1941556bebdba38f..169e890a5992783bed9480fa841= e83d4d93898f1 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -418,6 +418,81 @@ static void dw_pcie_host_request_msg_tlp_res(struct dw= _pcie_rp *pp) } } =20 +static int dw_pcie_config_ecam_iatu(struct dw_pcie_rp *pp) +{ + struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); + struct dw_pcie_ob_atu_cfg atu =3D {0}; + resource_size_t bus_range_max; + struct resource_entry *bus; + int ret; + + bus =3D resource_list_first_type(&pp->bridge->windows, IORESOURCE_BUS); + + /* + * Root bus under the host bridge doesn't require any iATU configuration + * as DBI region will be used to access root bus config space. + * Immediate bus under Root Bus, needs type 0 iATU configuration and + * remaining buses need type 1 iATU configuration. + */ + atu.index =3D 0; + atu.type =3D PCIE_ATU_TYPE_CFG0; + atu.parent_bus_addr =3D pp->cfg0_base + SZ_1M; + /* 1MiB is to cover 1 (bus) * 32 (devices) * 8 (functions) */ + atu.size =3D SZ_1M; + atu.ctrl2 =3D PCIE_ATU_CFG_SHIFT_MODE_ENABLE; + ret =3D dw_pcie_prog_outbound_atu(pci, &atu); + if (ret) + return ret; + + bus_range_max =3D resource_size(bus->res); + + if (bus_range_max < 2) + return 0; + + /* Configure remaining buses in type 1 iATU configuration */ + atu.index =3D 1; + atu.type =3D PCIE_ATU_TYPE_CFG1; + atu.parent_bus_addr =3D pp->cfg0_base + SZ_2M; + atu.size =3D (SZ_1M * bus_range_max) - SZ_2M; + atu.ctrl2 =3D PCIE_ATU_CFG_SHIFT_MODE_ENABLE; + + return dw_pcie_prog_outbound_atu(pci, &atu); +} + +static int dw_pcie_create_ecam_window(struct dw_pcie_rp *pp, struct resour= ce *res) +{ + struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); + struct device *dev =3D pci->dev; + struct resource_entry *bus; + + bus =3D resource_list_first_type(&pp->bridge->windows, IORESOURCE_BUS); + if (!bus) + return -ENODEV; + + pp->cfg =3D pci_ecam_create(dev, res, bus->res, &pci_generic_ecam_ops); + if (IS_ERR(pp->cfg)) + return PTR_ERR(pp->cfg); + + pci->dbi_base =3D pp->cfg->win; + pci->dbi_phys_addr =3D res->start; + + return 0; +} + +static bool dw_pcie_ecam_supported(struct dw_pcie_rp *pp, struct resource = *config_res) +{ + struct resource *bus_range; + u64 nr_buses; + + bus_range =3D resource_list_first_type(&pp->bridge->windows, IORESOURCE_B= US)->res; + if (!bus_range) + return false; + + nr_buses =3D resource_size(config_res) >> PCIE_ECAM_BUS_SHIFT; + + return !!(nr_buses >=3D resource_size(bus_range)); +} + static int dw_pcie_host_get_resources(struct dw_pcie_rp *pp) { struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); @@ -427,10 +502,6 @@ static int dw_pcie_host_get_resources(struct dw_pcie_r= p *pp) struct resource *res; int ret; =20 - ret =3D dw_pcie_get_resources(pci); - if (ret) - return ret; - res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "config"); if (!res) { dev_err(dev, "Missing \"config\" reg space\n"); @@ -440,9 +511,32 @@ static int dw_pcie_host_get_resources(struct dw_pcie_r= p *pp) pp->cfg0_size =3D resource_size(res); pp->cfg0_base =3D res->start; =20 - pp->va_cfg0_base =3D devm_pci_remap_cfg_resource(dev, res); - if (IS_ERR(pp->va_cfg0_base)) - return PTR_ERR(pp->va_cfg0_base); + pp->ecam_mode =3D dw_pcie_ecam_supported(pp, res); + if (pp->ecam_mode) { + ret =3D dw_pcie_create_ecam_window(pp, res); + if (ret) + return ret; + + pp->bridge->ops =3D (struct pci_ops *)&pci_generic_ecam_ops.pci_ops; + pp->bridge->sysdata =3D pp->cfg; + pp->cfg->priv =3D pp; + } else { + pp->va_cfg0_base =3D devm_pci_remap_cfg_resource(dev, res); + if (IS_ERR(pp->va_cfg0_base)) + return PTR_ERR(pp->va_cfg0_base); + + /* Set default bus ops */ + pp->bridge->ops =3D &dw_pcie_ops; + pp->bridge->child_ops =3D &dw_child_pcie_ops; + pp->bridge->sysdata =3D pp; + } + + ret =3D dw_pcie_get_resources(pci); + if (ret) { + if (pp->cfg) + pci_ecam_free(pp->cfg); + return ret; + } =20 /* Get the I/O range from DT */ win =3D resource_list_first_type(&pp->bridge->windows, IORESOURCE_IO); @@ -481,14 +575,10 @@ int dw_pcie_host_init(struct dw_pcie_rp *pp) if (ret) return ret; =20 - /* Set default bus ops */ - bridge->ops =3D &dw_pcie_ops; - bridge->child_ops =3D &dw_child_pcie_ops; - if (pp->ops->init) { ret =3D pp->ops->init(pp); if (ret) - return ret; + goto err_free_ecam; } =20 if (pci_msi_enabled()) { @@ -530,6 +620,14 @@ int dw_pcie_host_init(struct dw_pcie_rp *pp) if (ret) goto err_free_msi; =20 + if (pp->ecam_mode) { + ret =3D dw_pcie_config_ecam_iatu(pp); + if (ret) { + dev_err(dev, "Failed to configure iATU in ECAM mode\n"); + goto err_free_msi; + } + } + /* * Allocate the resource for MSG TLP before programming the iATU * outbound window in dw_pcie_setup_rc(). Since the allocation depends @@ -565,8 +663,6 @@ int dw_pcie_host_init(struct dw_pcie_rp *pp) /* Ignore errors, the link may come up later */ dw_pcie_wait_for_link(pci); =20 - bridge->sysdata =3D pp; - ret =3D pci_host_probe(bridge); if (ret) goto err_stop_link; @@ -592,6 +688,10 @@ int dw_pcie_host_init(struct dw_pcie_rp *pp) if (pp->ops->deinit) pp->ops->deinit(pp); =20 +err_free_ecam: + if (pp->cfg) + pci_ecam_free(pp->cfg); + return ret; } EXPORT_SYMBOL_GPL(dw_pcie_host_init); @@ -614,6 +714,9 @@ void dw_pcie_host_deinit(struct dw_pcie_rp *pp) =20 if (pp->ops->deinit) pp->ops->deinit(pp); + + if (pp->cfg) + pci_ecam_free(pp->cfg); } EXPORT_SYMBOL_GPL(dw_pcie_host_deinit); =20 diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index f7bbfd91b03b5e18031983ff4ebd829f450b8154..87527e09e392072c09b240d05f3= cba4865ec8e9f 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -576,7 +576,7 @@ int dw_pcie_prog_outbound_atu(struct dw_pcie *pci, val =3D dw_pcie_enable_ecrc(val); dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_REGION_CTRL1, val); =20 - val =3D PCIE_ATU_ENABLE; + val =3D PCIE_ATU_ENABLE | atu->ctrl2; if (atu->type =3D=3D PCIE_ATU_TYPE_MSG) { /* The data-less messages only for now */ val |=3D PCIE_ATU_INHIBIT_PAYLOAD | atu->code; diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index 31b2a7e9dafa4ab481434068bde0775837babb4f..a8e25fb53a46a71063fafdf5665= b88d106709413 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -20,6 +20,7 @@ #include #include #include +#include #include =20 #include @@ -173,6 +174,7 @@ #define PCIE_ATU_REGION_CTRL2 0x004 #define PCIE_ATU_ENABLE BIT(31) #define PCIE_ATU_BAR_MODE_ENABLE BIT(30) +#define PCIE_ATU_CFG_SHIFT_MODE_ENABLE BIT(28) #define PCIE_ATU_INHIBIT_PAYLOAD BIT(22) #define PCIE_ATU_FUNC_NUM_MATCH_EN BIT(19) #define PCIE_ATU_LOWER_BASE 0x008 @@ -391,6 +393,7 @@ struct dw_pcie_ob_atu_cfg { u8 func_no; u8 code; u8 routing; + u32 ctrl2; u64 parent_bus_addr; u64 pci_addr; u64 size; @@ -430,6 +433,8 @@ struct dw_pcie_rp { struct resource *msg_res; bool use_linkup_irq; struct pci_eq_presets presets; + bool ecam_mode; + struct pci_config_window *cfg; }; =20 struct dw_pcie_ep_ops { --=20 2.34.1