From nobody Sun Dec 14 06:16:25 2025 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11023135.outbound.protection.outlook.com [40.107.44.135]) (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 A2B347483; Sat, 8 Nov 2025 14:03:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.135 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610595; cv=fail; b=Oc2MnPaa7Idtr3KM9z2ARcKQkmQecQLLHyqkvt4CMRPZqv91aKRYyLCCe8MjpxvV020TyqYSj9ovKtsHfbmXaP+fVM1wWkqYEVAruxXfL0vQJxZX72kt3UgD4KOvjQ2j6d1lciQDSP+t+KvuUyE87zlAepx6JxdKUUT3fYJu9y8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610595; c=relaxed/simple; bh=36sa7N7W4pp5hgCTAKMPUG7EKSUpOY6ybDPscHm8Loo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kIyqZNG2aVXk5QcReweq+sxPAcrm2M9oP0cQ8Cypt+H/Dmbnlf2XqDpJptltezA0oMprvaEEgkETJaQ/9dFMjUvB82VEytPMI4H0LQab/O5D17IZNB+wu3D+eCiLv7vSXFwnqV7p2e01LnP0Q7PQ7hTXslnTx8XNGIh7yGZVh0I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.44.135 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Dc6eWFjLIZ9lO7sXUYC9FZUocu7dd1birEYXHLcJicB2856sI0PRBF1+GnT5jB/I3RpbMEVqel4xrpMsiVXL0mAVTL0wxJAE/KitRiLu2//gTEMZj9sdoBtwus5NZQfyVczcDeqghIbxp8I+EJH803ESMSS+kJ0ZJMCpMGb+yDHTgG7zR5T3JsXFPp1W/V1K0K8YQ5Vd7xXEGhR1M/xO7BD7rNYyZZ9d+bdXgKRreSkReWYUo1u969aj/3SjljuA+Vo0dhpPWxYJWU+Mwvh9u4tgIBH/CZElH92qNI/TG/TosUYPkhNqft811HPKfgTVWGbVBolpHcha5DBxOFTEYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JBZ8Vp0CpKNoSuRD66X2jaGgh70reHb7BkxjJnYsx8A=; b=esXA0uFtKfiC8yUOA1qfVpzqijd5KRS/HbSwtBqAUysatzpGcuy7JJoyfI4TiPRIIZDhzSACuEbSfZ5tII1VSZvUZ3nn0JYGwWVjo5kTk6LfPFG1nYKu3V9JJsBqopyok/Dz4lLwJx/MBSFDj/C+WjHBDF6n199N5LGT+smJh0ipdXdqn0XSu+yt49uoWOMDKjSCuBiD/CRqE+7B7YnRlnuWzu/gdf2TBUmDFic7ohVHLiHjpKvF8sFsuvV8yBftFLb0vmVri1UW+kVZWqmO3JKOzP240U5aPsZo2EeZNkIEu3ZXrD2bN+1mEr103Tyg6jlWioDIsMNMypvMJfxmwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PSBPR02CA0016.apcprd02.prod.outlook.com (2603:1096:301::26) by SEZPR06MB6496.apcprd06.prod.outlook.com (2603:1096:101:186::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Sat, 8 Nov 2025 14:03:07 +0000 Received: from OSA0EPF000000C9.apcprd02.prod.outlook.com (2603:1096:301:0:cafe::cc) by PSBPR02CA0016.outlook.office365.com (2603:1096:301::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:03:01 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by OSA0EPF000000C9.mail.protection.outlook.com (10.167.240.55) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:06 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id CD5A941C017A; Sat, 8 Nov 2025 22:03:05 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v11 01/10] PCI: cadence: Add module support for platform controller driver Date: Sat, 8 Nov 2025 22:02:56 +0800 Message-ID: <20251108140305.1120117-2-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSA0EPF000000C9:EE_|SEZPR06MB6496:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a3abf19-5498-4333-105c-08de1ecf8ad4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|36860700013|82310400026|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qNPX97InEuS9pfIauQ6/B7jJ48umaEvCpTzFhjcAmqipJxVzbjtRgqhDca06?= =?us-ascii?Q?mN3iF5qAAcOeV6XLLp3a6lsANvC/2/JI4MC5IpakXAuH13I46JD/GW8fB0tm?= =?us-ascii?Q?99reLeExE8h33O6LnBrMYT1zBR5CJR2f3vYhUCHX+EnFB3Pt+keGxv/M6CeZ?= =?us-ascii?Q?LiYk5alGbQ3wznNbSKrBuHmFQdwiQ7UqUHhi3sBJUDk6MixnT/DD9T1TUo3N?= =?us-ascii?Q?HkiENxqAfLxuty2q4CesR/u4Cwzb/bguKpQ3O/JnwjfkofrKlW0NEGCaM6d2?= =?us-ascii?Q?4O29Epa2QnN0wCx0ivS2VK3Ckw2c5sHMfNC+LZ4kpuscjTmvqTGJcNxK9x/q?= =?us-ascii?Q?nqaUoL/s9DK9rx2W+erErWlGLXk6JK8c97f+i/ESA8F/13bXTd7y7k13+AOj?= =?us-ascii?Q?0PhpxqK/KqC2Rh29X33djkviqOjsYFWYT+WLGWlzT84L0Vra3ihbE7Rq9gLL?= =?us-ascii?Q?zfCusY3wmnQF1u7FsroYed1nlenHZt/+ZZRHhXy1YS/o28yl0tiyeg6tC7Ob?= =?us-ascii?Q?YBa4L8PUPSz36lmXxnkOr/LFJaGi3S11+OTvhUKzOI1C8SRsSN7R5wTZM29P?= =?us-ascii?Q?QrAOuEdfYGGoh0eWM1DFX2dbnIcAKMG4S+NgxAsWOqkG5B2eB65qXJpmNZC/?= =?us-ascii?Q?1saJw5JzY34ptoTbs9Zk3JCBMK50RhREnJviWKTE+jCnF9FTNk0Gn7OdmO9b?= =?us-ascii?Q?nfia11wZyDxEtEc7oSjznu7uPwCl7OrUVOxTWfy88nxDA5R4lIh0P8Gq7iiH?= =?us-ascii?Q?5Hpry0ZjecBd1lJb/XCssHU9W+I7INr8pYucEpD9CDE/+pjPD9nwpysQUBWo?= =?us-ascii?Q?+lB7xo1W/3sO7F7x1g38gKXw2VQ+KapmIVKxKMrRb1Our+OWaUbtMKNLUMuZ?= =?us-ascii?Q?hfFKWutacSkALZUwBV8h/U1IW09vlqsAY8e3bOI4rFycWSljNnECqeOTl+S3?= =?us-ascii?Q?0jYFOs6HhHf6BMle+5G3uDHFL/GcWi0eXAz6rn8nNg+VJ2t1fXrFe4rpWePM?= =?us-ascii?Q?ieSxgzfC9IW3i4iUGz06TA+QUmriCx4Us6q1/oRKNY3E6YcO0+GtM4O8PmhY?= =?us-ascii?Q?zDyMV5GJ23TQ7Dtbn2tRBn7SIP6nbMrMpdCytg3m3uEsuFXtqgxuRSs4aZup?= =?us-ascii?Q?JxFSlq9Ye+mnEvyjvwdDnZXc3EOHw427NMczNIv+glqcURD9DQY8cegtTnFH?= =?us-ascii?Q?piuHmx6T6QxaCF5BdBaWl1tUKpoanqfy0ZVbX8SSTX42WQeRFFok5Z/xsZ5U?= =?us-ascii?Q?UYNZsyHjS6+LxWR2FXgQDJl5suU7DzA3cnc490qcQDPkIopX9Inu4EjGRLgV?= =?us-ascii?Q?A+u5pnsnitRrbfGxLd4vvLaoMsWHvojCKaq+J3UN9BbFIOGRF/utm0Re7MSh?= =?us-ascii?Q?S8YL0ZtlrPR3yaO45NLqOaiC21eoIGwFLWe0qNvRT+42yo2T33knfkLaTQvn?= =?us-ascii?Q?E2iJCaLr8W5SV5ww7+qnNZNeQAZonzZPpNq1FHkP5NnrG24LjUNyqVX9ThVn?= =?us-ascii?Q?M706Z4bq0CtR34KSq9Gj+4Tqc037bwDOsqwLwRKn1fHJ6aw056Oxl+zMT4g/?= =?us-ascii?Q?aW4UeF585f2CtqsJOBI=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(36860700013)(82310400026)(376014)(7053199007);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:06.7166 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5a3abf19-5498-4333-105c-08de1ecf8ad4 X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: OSA0EPF000000C9.apcprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6496 Content-Type: text/plain; charset="utf-8" From: Manikandan K Pillai Add support for building PCI cadence platforms as a module. Signed-off-by: Manikandan K Pillai --- drivers/pci/controller/cadence/Kconfig | 6 +++--- drivers/pci/controller/cadence/pcie-cadence-plat.c | 5 ++++- drivers/pci/controller/cadence/pcie-cadence.c | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/controlle= r/cadence/Kconfig index 02a639e55fd8..0b96499ae354 100644 --- a/drivers/pci/controller/cadence/Kconfig +++ b/drivers/pci/controller/cadence/Kconfig @@ -19,10 +19,10 @@ config PCIE_CADENCE_EP select PCIE_CADENCE =20 config PCIE_CADENCE_PLAT - bool + tristate =20 config PCIE_CADENCE_PLAT_HOST - bool "Cadence platform PCIe controller (host mode)" + tristate "Cadence platform PCIe controller (host mode)" depends on OF select PCIE_CADENCE_HOST select PCIE_CADENCE_PLAT @@ -32,7 +32,7 @@ config PCIE_CADENCE_PLAT_HOST vendors SoCs. =20 config PCIE_CADENCE_PLAT_EP - bool "Cadence platform PCIe controller (endpoint mode)" + tristate "Cadence platform PCIe controller (endpoint mode)" depends on OF depends on PCI_ENDPOINT select PCIE_CADENCE_EP diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/p= ci/controller/cadence/pcie-cadence-plat.c index 0456845dabb9..ebd5c3afdfcd 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-plat.c +++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c @@ -177,4 +177,7 @@ static struct platform_driver cdns_plat_pcie_driver =3D= { .probe =3D cdns_plat_pcie_probe, .shutdown =3D cdns_plat_pcie_shutdown, }; -builtin_platform_driver(cdns_plat_pcie_driver); +module_platform_driver(cdns_plat_pcie_driver); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Cadence PCIe controller platform driver"); diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/co= ntroller/cadence/pcie-cadence.c index bd683d0fecb2..8186947134d6 100644 --- a/drivers/pci/controller/cadence/pcie-cadence.c +++ b/drivers/pci/controller/cadence/pcie-cadence.c @@ -293,6 +293,7 @@ const struct dev_pm_ops cdns_pcie_pm_ops =3D { NOIRQ_SYSTEM_SLEEP_PM_OPS(cdns_pcie_suspend_noirq, cdns_pcie_resume_noirq) }; +EXPORT_SYMBOL_GPL(cdns_pcie_pm_ops); =20 MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Cadence PCIe controller driver"); --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11023122.outbound.protection.outlook.com [52.101.127.122]) (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 A40D91C84DF; Sat, 8 Nov 2025 14:03:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.122 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610597; cv=fail; b=BljC5AldyiflE9e2sh3pINbxGUziMPwExZFS6tBThWQA2x9NtC6MCHLrBFSodvrd+Dd5kTGHKthnE21qIdiO2j0LF8/ujaohGGZ9RIe0hIU7oXe7rBqV1KGDUeqAPb7LuyEoDcxWh11Rh+5kRMjX4sXREb7sHfd3u7+TUZMwiV8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610597; c=relaxed/simple; bh=6Z2tCLaqRtU/A64N92e1QGxPjYAopLwmmFbUuWtNKp8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sjnFd8k6pzlY4HayS4nf5CLf1o8RvE9e5LadJ0G7awJCKkg/wi7eLnZ6jS2R04ah0PgZPyGNi0zlkdnZ3twd98XV11x/va16nPovlDLcbvN7sn6P3F2wTpAtNB3eu0IyPlkvIWmi866Jj8ogombvUwYPuJgbSliAv8oG4nHbMGk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=52.101.127.122 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H9Rf8ZRpgx/oR03bdHTCYIsRbA7MwTFY/zV+zoKfhW/PA0Q0OFK2T6aK580exJ82goFXmpgfjfyar8AX5VJAv3I8tQiKpCnKyjsxgD2Lc7CiaSC5hIHhZyZdWK1kMS08U0LzNjgWs2MF3Etb1tMxFgv+X2Pj/349xY5sjoySvqLmu2VHliJ0Wk5F517jipxicdl4uh4+jyuLxthNyplJ97eUZlfbn9OW5/fvsJyFBqc1kpHmdnLRk72URKjEUwe8OvC9JWcjL9s/5ATP3l7JJVqLQ9a22pfoUH87+pHVRkZ/4D27GPYUuINPpJvL1F1igloWHLfjGqrs1DmwIA0Mlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MCGeJVV8MJnJQrlgf3jHZM9fzgyaLwApK73vrrs6Ty0=; b=Y7vexnoFraBOt/I106iw57dhEdzjcfc6LQj7JuF55Do0917m42rhokkuf0NgZxMHD02HKCmgiPDAy/fpT/LCVSXs7IAbgpxc/MqDyVVlXvE1SVc4ddlAWwypZ+bhPqCGKM/k2IRZcgrK5B6LpliPVunE2wsNXxBJuI/4qw1wH1XUnKPHQxxCaENlL9mW21da9E1m5HQgTbTIj+ScqP46Dd3Yn8MZeAX6fUHPhp2ycj0e6uTqjbs8QgDQxdXiemJsqKSgDYHU3kxAC9NCL00IhLBnJI+Flks9R1sTid0RNN4tEISPYnlL7V3+a7Jnq3kFInkaO42IMI/GsTCFwwYSiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from SG2PR06CA0249.apcprd06.prod.outlook.com (2603:1096:4:ac::33) by KL1PR06MB6759.apcprd06.prod.outlook.com (2603:1096:820:101::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Sat, 8 Nov 2025 14:03:08 +0000 Received: from SG2PEPF000B66CA.apcprd03.prod.outlook.com (2603:1096:4:ac:cafe::bc) by SG2PR06CA0249.outlook.office365.com (2603:1096:4:ac::33) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:03:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by SG2PEPF000B66CA.mail.protection.outlook.com (10.167.240.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:06 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id DDEE5400CA08; Sat, 8 Nov 2025 22:03:05 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v11 02/10] PCI: cadence: Split PCIe controller header file Date: Sat, 8 Nov 2025 22:02:57 +0800 Message-ID: <20251108140305.1120117-3-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SG2PEPF000B66CA:EE_|KL1PR06MB6759:EE_ X-MS-Office365-Filtering-Correlation-Id: b8c64af3-cea3-4ce8-2217-08de1ecf8ac0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|36860700013|82310400026|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?KMW0jeHqOyGvCqO7B3Ve61Cdh1zN3z4ohJ6bCOQt4iapWh3iccpYmaIzshX9?= =?us-ascii?Q?rrFXuqNtRu2s0G2ayLccIqYqhKXgNI317/i3HTLCKsZ4L4rdT3mNMhF7dTfZ?= =?us-ascii?Q?U8JNccJXeVQqJCofLvcoV9KnZpXQxMlQJv6s6yuK2Dm7JvQMDfYReyUiUzjr?= =?us-ascii?Q?c4zongpbF0BS7lFH8zf02USJLlKI44GrBVRGf3Zcx7YBmwzCbPRuSKMkzLWv?= =?us-ascii?Q?p5G7RKKK7Sx8dUQrpZcsjbIJng0/K8ERzxM94Q3X0WKL0Oxjgyt1jKCrSKE5?= =?us-ascii?Q?ZNDToz4Kwcwp5xYbJuY0SJzQWRJOBIxZZxEiLdnvB0FEBhkt3e1e2LYLAUzT?= =?us-ascii?Q?+u1wUH7allvFZ/Et1HhYDHNhrLLADXLtzcmA4Smu9MPVKpeYcHyyZOQvvpIR?= =?us-ascii?Q?QV5qECdBGO6JE5Ho5FHnm/HEArqRJIxePF29nDd9tTgLeCOwEos7sO7fNUUq?= =?us-ascii?Q?Kit+xKoPA5L4DbqTdOFjxj+hxudh4hBxz31zc111EFr6xqpgSBSzAcC4E5oU?= =?us-ascii?Q?BGpWPXptca1AbMmREZm72oR0k6+wBHNRzwYYHmNB5WQL4d2+4roAfJSLgYqX?= =?us-ascii?Q?lM6tcQaMKotdc3iHsDDYXWdKo/Ve0XoesaQfLHZYcTCwpvYHwQDJTWynn5DC?= =?us-ascii?Q?yWJm+Op8tEkXx9CXYRe9a+tgJL4Z4S+ayEfcW08WKsM+L58SI2+9gdJUwz0N?= =?us-ascii?Q?UthaIdImrr2EOJitSZNcUKmizAMqkR/CBXfmkhapeThvWS55AKft1XKMS3KJ?= =?us-ascii?Q?h40jqaU4L5HXgztAF2/H4XpE724R+Qr80YFI8itTCurv6goNX4bqfVpPQHX6?= =?us-ascii?Q?81smjkTOfY1fquUOjdarcXxgeVNE5a7oGfc2E159FTd3XuLduShhqGkDtNTc?= =?us-ascii?Q?jrukO/3IjMIkmsOnUtddxAhccjmphm6dcINILnj+IqGsJWWycvtkoL0Zo/+A?= =?us-ascii?Q?Ko26iNtsf4VjFMKnjb+blVEX0bgJnWbmRrNje1vBig4WPdhDk8NO/fkCYZP8?= =?us-ascii?Q?zTpPU+XMvCpMU2JCVFYYydkQz/27yOJJVe/TlywMjlJ5tVsK7XUcuhynH1JB?= =?us-ascii?Q?0xCiTAKhqCb+ZuZHN3fp6rVZMGlF8GMupH1iX0uRE8wnciUmT8MnfnzGCbD2?= =?us-ascii?Q?blwPDX7MUAtq0fUcSlCW+a5DY0swoPT0y/dT25++G9Ghq4wv435LVZNQVEF8?= =?us-ascii?Q?ySm/OvTQfYPE5Rjp+AwKdUCUF+k3cXh10/iZaOS6rqBJW8Mkh2zZ/2AQpujU?= =?us-ascii?Q?zZQj28frJ6pLV3n1LKr1iexGwn4Emt0NCmzJZpE+96Jywfo+y0AEbxdtnFu9?= =?us-ascii?Q?HnoyFHwJlb41FaNhbAcWqk3L2OzMd2TxMneONPNX/heESs1Yat2AWbWnn/xo?= =?us-ascii?Q?VL1l/btzvsCkALoWfsZ06sGLfZy1zahYSsUCKxcAiW0AJBKeMNa/Szsstjzv?= =?us-ascii?Q?POrocxdUE+akHgc16nYPAirEGT9L7FIqUmsCAv/8O53tWQ3F23g9eZUxrNvM?= =?us-ascii?Q?c68rLA9K+OXpT79Y+/1r6sDBScClnVxNuUgC4juCga3QXK/vRh5BuH5j5vpL?= =?us-ascii?Q?WjlTFlSJBs5BzcO+O24=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:ErrorRetry;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(36860700013)(82310400026)(7053199007);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:06.6353 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b8c64af3-cea3-4ce8-2217-08de1ecf8ac0 X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: SG2PEPF000B66CA.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR06MB6759 Content-Type: text/plain; charset="utf-8" From: Manikandan K Pillai Split the Cadence PCIe header file by moving the Legacy (LGA) controller register definitions to a separate header file for support of next generation PCIe controller architecture. Signed-off-by: Manikandan K Pillai --- .../cadence/pcie-cadence-lga-regs.h | 230 ++++++++++++++++++ drivers/pci/controller/cadence/pcie-cadence.h | 222 +---------------- 2 files changed, 232 insertions(+), 220 deletions(-) create mode 100644 drivers/pci/controller/cadence/pcie-cadence-lga-regs.h diff --git a/drivers/pci/controller/cadence/pcie-cadence-lga-regs.h b/drive= rs/pci/controller/cadence/pcie-cadence-lga-regs.h new file mode 100644 index 000000000000..857b2140c5d2 --- /dev/null +++ b/drivers/pci/controller/cadence/pcie-cadence-lga-regs.h @@ -0,0 +1,230 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Cadence PCIe controller driver. + * + * Copyright (c) 2017 Cadence + * Author: Cyrille Pitchen + */ +#ifndef _PCIE_CADENCE_LGA_REGS_H +#define _PCIE_CADENCE_LGA_REGS_H + +#include + +/* Parameters for the waiting for link up routine */ +#define LINK_WAIT_MAX_RETRIES 10 +#define LINK_WAIT_USLEEP_MIN 90000 +#define LINK_WAIT_USLEEP_MAX 100000 + +/* Local Management Registers */ +#define CDNS_PCIE_LM_BASE 0x00100000 + +/* Vendor ID Register */ +#define CDNS_PCIE_LM_ID (CDNS_PCIE_LM_BASE + 0x0044) +#define CDNS_PCIE_LM_ID_VENDOR_MASK GENMASK(15, 0) +#define CDNS_PCIE_LM_ID_VENDOR_SHIFT 0 +#define CDNS_PCIE_LM_ID_VENDOR(vid) \ + (((vid) << CDNS_PCIE_LM_ID_VENDOR_SHIFT) & CDNS_PCIE_LM_ID_VENDOR_MASK) +#define CDNS_PCIE_LM_ID_SUBSYS_MASK GENMASK(31, 16) +#define CDNS_PCIE_LM_ID_SUBSYS_SHIFT 16 +#define CDNS_PCIE_LM_ID_SUBSYS(sub) \ + (((sub) << CDNS_PCIE_LM_ID_SUBSYS_SHIFT) & CDNS_PCIE_LM_ID_SUBSYS_MASK) + +/* Root Port Requester ID Register */ +#define CDNS_PCIE_LM_RP_RID (CDNS_PCIE_LM_BASE + 0x0228) +#define CDNS_PCIE_LM_RP_RID_MASK GENMASK(15, 0) +#define CDNS_PCIE_LM_RP_RID_SHIFT 0 +#define CDNS_PCIE_LM_RP_RID_(rid) \ + (((rid) << CDNS_PCIE_LM_RP_RID_SHIFT) & CDNS_PCIE_LM_RP_RID_MASK) + +/* Endpoint Bus and Device Number Register */ +#define CDNS_PCIE_LM_EP_ID (CDNS_PCIE_LM_BASE + 0x022C) +#define CDNS_PCIE_LM_EP_ID_DEV_MASK GENMASK(4, 0) +#define CDNS_PCIE_LM_EP_ID_DEV_SHIFT 0 +#define CDNS_PCIE_LM_EP_ID_BUS_MASK GENMASK(15, 8) +#define CDNS_PCIE_LM_EP_ID_BUS_SHIFT 8 + +/* Endpoint Function f BAR b Configuration Registers */ +#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn) \ + (((bar) < BAR_4) ? CDNS_PCIE_LM_EP_FUNC_BAR_CFG0(fn) : CDNS_PCIE_LM_EP_FU= NC_BAR_CFG1(fn)) +#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG0(fn) \ + (CDNS_PCIE_LM_BASE + 0x0240 + (fn) * 0x0008) +#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG1(fn) \ + (CDNS_PCIE_LM_BASE + 0x0244 + (fn) * 0x0008) +#define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn) \ + (((bar) < BAR_4) ? CDNS_PCIE_LM_EP_VFUNC_BAR_CFG0(fn) : CDNS_PCIE_LM_EP_V= FUNC_BAR_CFG1(fn)) +#define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG0(fn) \ + (CDNS_PCIE_LM_BASE + 0x0280 + (fn) * 0x0008) +#define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG1(fn) \ + (CDNS_PCIE_LM_BASE + 0x0284 + (fn) * 0x0008) +#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) \ + (GENMASK(4, 0) << ((b) * 8)) +#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE(b, a) \ + (((a) << ((b) * 8)) & CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b)) +#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b) \ + (GENMASK(7, 5) << ((b) * 8)) +#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, c) \ + (((c) << ((b) * 8 + 5)) & CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)) + +/* Endpoint Function Configuration Register */ +#define CDNS_PCIE_LM_EP_FUNC_CFG (CDNS_PCIE_LM_BASE + 0x02C0) + +/* Root Complex BAR Configuration Register */ +#define CDNS_PCIE_LM_RC_BAR_CFG (CDNS_PCIE_LM_BASE + 0x0300) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE_MASK GENMASK(5, 0) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE(a) \ + (((a) << 0) & CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE_MASK) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL_MASK GENMASK(8, 6) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL(c) \ + (((c) << 6) & CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL_MASK) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE_MASK GENMASK(13, 9) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE(a) \ + (((a) << 9) & CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE_MASK) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL_MASK GENMASK(16, 14) +#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL(c) \ + (((c) << 14) & CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL_MASK) +#define CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_ENABLE BIT(17) +#define CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_32BITS 0 +#define CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_64BITS BIT(18) +#define CDNS_PCIE_LM_RC_BAR_CFG_IO_ENABLE BIT(19) +#define CDNS_PCIE_LM_RC_BAR_CFG_IO_16BITS 0 +#define CDNS_PCIE_LM_RC_BAR_CFG_IO_32BITS BIT(20) +#define CDNS_PCIE_LM_RC_BAR_CFG_CHECK_ENABLE BIT(31) + +/* BAR control values applicable to both Endpoint Function and Root Comple= x */ +#define CDNS_PCIE_LM_BAR_CFG_CTRL_DISABLED 0x0 +#define CDNS_PCIE_LM_BAR_CFG_CTRL_IO_32BITS 0x1 +#define CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_32BITS 0x4 +#define CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS 0x5 +#define CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_64BITS 0x6 +#define CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS 0x7 + +#define LM_RC_BAR_CFG_CTRL_DISABLED(bar) \ + (CDNS_PCIE_LM_BAR_CFG_CTRL_DISABLED << (((bar) * 8) + 6)) +#define LM_RC_BAR_CFG_CTRL_IO_32BITS(bar) \ + (CDNS_PCIE_LM_BAR_CFG_CTRL_IO_32BITS << (((bar) * 8) + 6)) +#define LM_RC_BAR_CFG_CTRL_MEM_32BITS(bar) \ + (CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_32BITS << (((bar) * 8) + 6)) +#define LM_RC_BAR_CFG_CTRL_PREF_MEM_32BITS(bar) \ + (CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS << (((bar) * 8) + 6)) +#define LM_RC_BAR_CFG_CTRL_MEM_64BITS(bar) \ + (CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_64BITS << (((bar) * 8) + 6)) +#define LM_RC_BAR_CFG_CTRL_PREF_MEM_64BITS(bar) \ + (CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS << (((bar) * 8) + 6)) +#define LM_RC_BAR_CFG_APERTURE(bar, aperture) \ + (((aperture) - 2) << ((bar) * 8)) + +/* PTM Control Register */ +#define CDNS_PCIE_LM_PTM_CTRL (CDNS_PCIE_LM_BASE + 0x0DA8) +#define CDNS_PCIE_LM_TPM_CTRL_PTMRSEN BIT(17) + +/* + * Endpoint Function Registers (PCI configuration space for endpoint funct= ions) + */ +#define CDNS_PCIE_EP_FUNC_BASE(fn) (((fn) << 12) & GENMASK(19, 12)) + +#define CDNS_PCIE_EP_FUNC_MSI_CAP_OFFSET 0x90 +#define CDNS_PCIE_EP_FUNC_MSIX_CAP_OFFSET 0xB0 +#define CDNS_PCIE_EP_FUNC_DEV_CAP_OFFSET 0xC0 +#define CDNS_PCIE_EP_FUNC_SRIOV_CAP_OFFSET 0x200 + +/* Endpoint PF Registers */ +#define CDNS_PCIE_CORE_PF_I_ARI_CAP_AND_CTRL(fn) (0x144 + (fn) * 0x1000) +#define CDNS_PCIE_ARI_CAP_NFN_MASK GENMASK(15, 8) + +/* Root Port Registers (PCI configuration space for the root port function= ) */ +#define CDNS_PCIE_RP_BASE 0x00200000 +#define CDNS_PCIE_RP_CAP_OFFSET 0xC0 + +/* Address Translation Registers */ +#define CDNS_PCIE_AT_BASE 0x00400000 + +/* Region r Outbound AXI to PCIe Address Translation Register 0 */ +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0(r) \ + (CDNS_PCIE_AT_BASE + 0x0000 + ((r) & 0x1F) * 0x0020) +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK GENMASK(5, 0) +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS(nbits) \ + (((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK) +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK GENMASK(19, 12) +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN(devfn) \ + (((devfn) << 12) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK) +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS_MASK GENMASK(27, 20) +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS(bus) \ + (((bus) << 20) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS_MASK) + +/* Region r Outbound AXI to PCIe Address Translation Register 1 */ +#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR1(r) \ + (CDNS_PCIE_AT_BASE + 0x0004 + ((r) & 0x1F) * 0x0020) + +/* Region r Outbound PCIe Descriptor Register 0 */ +#define CDNS_PCIE_AT_OB_REGION_DESC0(r) \ + (CDNS_PCIE_AT_BASE + 0x0008 + ((r) & 0x1F) * 0x0020) +#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_MASK GENMASK(3, 0) +#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_MEM 0x2 +#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_IO 0x6 +#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE0 0xA +#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE1 0xB +#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_NORMAL_MSG 0xC +#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_VENDOR_MSG 0xD +/* Bit 23 MUST be set in RC mode. */ +#define CDNS_PCIE_AT_OB_REGION_DESC0_HARDCODED_RID BIT(23) +#define CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN_MASK GENMASK(31, 24) +#define CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN(devfn) \ + (((devfn) << 24) & CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN_MASK) + +/* Region r Outbound PCIe Descriptor Register 1 */ +#define CDNS_PCIE_AT_OB_REGION_DESC1(r) \ + (CDNS_PCIE_AT_BASE + 0x000C + ((r) & 0x1F) * 0x0020) +#define CDNS_PCIE_AT_OB_REGION_DESC1_BUS_MASK GENMASK(7, 0) +#define CDNS_PCIE_AT_OB_REGION_DESC1_BUS(bus) \ + ((bus) & CDNS_PCIE_AT_OB_REGION_DESC1_BUS_MASK) + +/* Region r AXI Region Base Address Register 0 */ +#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0(r) \ + (CDNS_PCIE_AT_BASE + 0x0018 + ((r) & 0x1F) * 0x0020) +#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK GENMASK(5, 0) +#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) \ + (((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK) + +/* Region r AXI Region Base Address Register 1 */ +#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR1(r) \ + (CDNS_PCIE_AT_BASE + 0x001C + ((r) & 0x1F) * 0x0020) + +/* Root Port BAR Inbound PCIe to AXI Address Translation Register */ +#define CDNS_PCIE_AT_IB_RP_BAR_ADDR0(bar) \ + (CDNS_PCIE_AT_BASE + 0x0800 + (bar) * 0x0008) +#define CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK GENMASK(5, 0) +#define CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS(nbits) \ + (((nbits) - 1) & CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK) +#define CDNS_PCIE_AT_IB_RP_BAR_ADDR1(bar) \ + (CDNS_PCIE_AT_BASE + 0x0804 + (bar) * 0x0008) + +/* AXI link down register */ +#define CDNS_PCIE_AT_LINKDOWN (CDNS_PCIE_AT_BASE + 0x0824) + +/* LTSSM Capabilities register */ +#define CDNS_PCIE_LTSSM_CONTROL_CAP (CDNS_PCIE_LM_BASE + 0x0054) +#define CDNS_PCIE_DETECT_QUIET_MIN_DELAY_MASK GENMASK(2, 1) +#define CDNS_PCIE_DETECT_QUIET_MIN_DELAY_SHIFT 1 +#define CDNS_PCIE_DETECT_QUIET_MIN_DELAY(delay) \ + (((delay) << CDNS_PCIE_DETECT_QUIET_MIN_DELAY_SHIFT) & \ + CDNS_PCIE_DETECT_QUIET_MIN_DELAY_MASK) + +#define CDNS_PCIE_RP_MAX_IB 0x3 +#define CDNS_PCIE_MAX_OB 32 + +/* Endpoint Function BAR Inbound PCIe to AXI Address Translation Register = */ +#define CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar) \ + (CDNS_PCIE_AT_BASE + 0x0840 + (fn) * 0x0040 + (bar) * 0x0008) +#define CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar) \ + (CDNS_PCIE_AT_BASE + 0x0844 + (fn) * 0x0040 + (bar) * 0x0008) + +/* Normal/Vendor specific message access: offset inside some outbound regi= on */ +#define CDNS_PCIE_NORMAL_MSG_ROUTING_MASK GENMASK(7, 5) +#define CDNS_PCIE_NORMAL_MSG_ROUTING(route) \ + (((route) << 5) & CDNS_PCIE_NORMAL_MSG_ROUTING_MASK) +#define CDNS_PCIE_NORMAL_MSG_CODE_MASK GENMASK(15, 8) +#define CDNS_PCIE_NORMAL_MSG_CODE(code) \ + (((code) << 8) & CDNS_PCIE_NORMAL_MSG_CODE_MASK) +#define CDNS_PCIE_MSG_NO_DATA BIT(16) + +#endif /* _PCIE_CADENCE_LGA_REGS_H */ diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/co= ntroller/cadence/pcie-cadence.h index e2a853d2c0ab..0b8ba4ed5913 100644 --- a/drivers/pci/controller/cadence/pcie-cadence.h +++ b/drivers/pci/controller/cadence/pcie-cadence.h @@ -7,211 +7,11 @@ #define _PCIE_CADENCE_H =20 #include +#include #include #include #include - -/* Parameters for the waiting for link up routine */ -#define LINK_WAIT_MAX_RETRIES 10 -#define LINK_WAIT_USLEEP_MIN 90000 -#define LINK_WAIT_USLEEP_MAX 100000 - -/* - * Local Management Registers - */ -#define CDNS_PCIE_LM_BASE 0x00100000 - -/* Vendor ID Register */ -#define CDNS_PCIE_LM_ID (CDNS_PCIE_LM_BASE + 0x0044) -#define CDNS_PCIE_LM_ID_VENDOR_MASK GENMASK(15, 0) -#define CDNS_PCIE_LM_ID_VENDOR_SHIFT 0 -#define CDNS_PCIE_LM_ID_VENDOR(vid) \ - (((vid) << CDNS_PCIE_LM_ID_VENDOR_SHIFT) & CDNS_PCIE_LM_ID_VENDOR_MASK) -#define CDNS_PCIE_LM_ID_SUBSYS_MASK GENMASK(31, 16) -#define CDNS_PCIE_LM_ID_SUBSYS_SHIFT 16 -#define CDNS_PCIE_LM_ID_SUBSYS(sub) \ - (((sub) << CDNS_PCIE_LM_ID_SUBSYS_SHIFT) & CDNS_PCIE_LM_ID_SUBSYS_MASK) - -/* Root Port Requester ID Register */ -#define CDNS_PCIE_LM_RP_RID (CDNS_PCIE_LM_BASE + 0x0228) -#define CDNS_PCIE_LM_RP_RID_MASK GENMASK(15, 0) -#define CDNS_PCIE_LM_RP_RID_SHIFT 0 -#define CDNS_PCIE_LM_RP_RID_(rid) \ - (((rid) << CDNS_PCIE_LM_RP_RID_SHIFT) & CDNS_PCIE_LM_RP_RID_MASK) - -/* Endpoint Bus and Device Number Register */ -#define CDNS_PCIE_LM_EP_ID (CDNS_PCIE_LM_BASE + 0x022c) -#define CDNS_PCIE_LM_EP_ID_DEV_MASK GENMASK(4, 0) -#define CDNS_PCIE_LM_EP_ID_DEV_SHIFT 0 -#define CDNS_PCIE_LM_EP_ID_BUS_MASK GENMASK(15, 8) -#define CDNS_PCIE_LM_EP_ID_BUS_SHIFT 8 - -/* Endpoint Function f BAR b Configuration Registers */ -#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn) \ - (((bar) < BAR_4) ? CDNS_PCIE_LM_EP_FUNC_BAR_CFG0(fn) : CDNS_PCIE_LM_EP_FU= NC_BAR_CFG1(fn)) -#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG0(fn) \ - (CDNS_PCIE_LM_BASE + 0x0240 + (fn) * 0x0008) -#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG1(fn) \ - (CDNS_PCIE_LM_BASE + 0x0244 + (fn) * 0x0008) -#define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn) \ - (((bar) < BAR_4) ? CDNS_PCIE_LM_EP_VFUNC_BAR_CFG0(fn) : CDNS_PCIE_LM_EP_V= FUNC_BAR_CFG1(fn)) -#define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG0(fn) \ - (CDNS_PCIE_LM_BASE + 0x0280 + (fn) * 0x0008) -#define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG1(fn) \ - (CDNS_PCIE_LM_BASE + 0x0284 + (fn) * 0x0008) -#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) \ - (GENMASK(4, 0) << ((b) * 8)) -#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE(b, a) \ - (((a) << ((b) * 8)) & CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b)) -#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b) \ - (GENMASK(7, 5) << ((b) * 8)) -#define CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, c) \ - (((c) << ((b) * 8 + 5)) & CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)) - -/* Endpoint Function Configuration Register */ -#define CDNS_PCIE_LM_EP_FUNC_CFG (CDNS_PCIE_LM_BASE + 0x02c0) - -/* Root Complex BAR Configuration Register */ -#define CDNS_PCIE_LM_RC_BAR_CFG (CDNS_PCIE_LM_BASE + 0x0300) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE_MASK GENMASK(5, 0) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE(a) \ - (((a) << 0) & CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE_MASK) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL_MASK GENMASK(8, 6) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL(c) \ - (((c) << 6) & CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL_MASK) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE_MASK GENMASK(13, 9) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE(a) \ - (((a) << 9) & CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE_MASK) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL_MASK GENMASK(16, 14) -#define CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL(c) \ - (((c) << 14) & CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL_MASK) -#define CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_ENABLE BIT(17) -#define CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_32BITS 0 -#define CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_64BITS BIT(18) -#define CDNS_PCIE_LM_RC_BAR_CFG_IO_ENABLE BIT(19) -#define CDNS_PCIE_LM_RC_BAR_CFG_IO_16BITS 0 -#define CDNS_PCIE_LM_RC_BAR_CFG_IO_32BITS BIT(20) -#define CDNS_PCIE_LM_RC_BAR_CFG_CHECK_ENABLE BIT(31) - -/* BAR control values applicable to both Endpoint Function and Root Comple= x */ -#define CDNS_PCIE_LM_BAR_CFG_CTRL_DISABLED 0x0 -#define CDNS_PCIE_LM_BAR_CFG_CTRL_IO_32BITS 0x1 -#define CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_32BITS 0x4 -#define CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS 0x5 -#define CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_64BITS 0x6 -#define CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS 0x7 - -#define LM_RC_BAR_CFG_CTRL_DISABLED(bar) \ - (CDNS_PCIE_LM_BAR_CFG_CTRL_DISABLED << (((bar) * 8) + 6)) -#define LM_RC_BAR_CFG_CTRL_IO_32BITS(bar) \ - (CDNS_PCIE_LM_BAR_CFG_CTRL_IO_32BITS << (((bar) * 8) + 6)) -#define LM_RC_BAR_CFG_CTRL_MEM_32BITS(bar) \ - (CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_32BITS << (((bar) * 8) + 6)) -#define LM_RC_BAR_CFG_CTRL_PREF_MEM_32BITS(bar) \ - (CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS << (((bar) * 8) + 6)) -#define LM_RC_BAR_CFG_CTRL_MEM_64BITS(bar) \ - (CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_64BITS << (((bar) * 8) + 6)) -#define LM_RC_BAR_CFG_CTRL_PREF_MEM_64BITS(bar) \ - (CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS << (((bar) * 8) + 6)) -#define LM_RC_BAR_CFG_APERTURE(bar, aperture) \ - (((aperture) - 2) << ((bar) * 8)) - -/* PTM Control Register */ -#define CDNS_PCIE_LM_PTM_CTRL (CDNS_PCIE_LM_BASE + 0x0da8) -#define CDNS_PCIE_LM_TPM_CTRL_PTMRSEN BIT(17) - -/* - * Endpoint Function Registers (PCI configuration space for endpoint funct= ions) - */ -#define CDNS_PCIE_EP_FUNC_BASE(fn) (((fn) << 12) & GENMASK(19, 12)) - -/* - * Endpoint PF Registers - */ -#define CDNS_PCIE_CORE_PF_I_ARI_CAP_AND_CTRL(fn) (0x144 + (fn) * 0x1000) -#define CDNS_PCIE_ARI_CAP_NFN_MASK GENMASK(15, 8) - -/* - * Root Port Registers (PCI configuration space for the root port function) - */ -#define CDNS_PCIE_RP_BASE 0x00200000 -#define CDNS_PCIE_RP_CAP_OFFSET 0xc0 - -/* - * Address Translation Registers - */ -#define CDNS_PCIE_AT_BASE 0x00400000 - -/* Region r Outbound AXI to PCIe Address Translation Register 0 */ -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0(r) \ - (CDNS_PCIE_AT_BASE + 0x0000 + ((r) & 0x1f) * 0x0020) -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK GENMASK(5, 0) -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS(nbits) \ - (((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK) -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK GENMASK(19, 12) -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN(devfn) \ - (((devfn) << 12) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK) -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS_MASK GENMASK(27, 20) -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS(bus) \ - (((bus) << 20) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS_MASK) - -/* Region r Outbound AXI to PCIe Address Translation Register 1 */ -#define CDNS_PCIE_AT_OB_REGION_PCI_ADDR1(r) \ - (CDNS_PCIE_AT_BASE + 0x0004 + ((r) & 0x1f) * 0x0020) - -/* Region r Outbound PCIe Descriptor Register 0 */ -#define CDNS_PCIE_AT_OB_REGION_DESC0(r) \ - (CDNS_PCIE_AT_BASE + 0x0008 + ((r) & 0x1f) * 0x0020) -#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_MASK GENMASK(3, 0) -#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_MEM 0x2 -#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_IO 0x6 -#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE0 0xa -#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE1 0xb -#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_NORMAL_MSG 0xc -#define CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_VENDOR_MSG 0xd -/* Bit 23 MUST be set in RC mode. */ -#define CDNS_PCIE_AT_OB_REGION_DESC0_HARDCODED_RID BIT(23) -#define CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN_MASK GENMASK(31, 24) -#define CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN(devfn) \ - (((devfn) << 24) & CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN_MASK) - -/* Region r Outbound PCIe Descriptor Register 1 */ -#define CDNS_PCIE_AT_OB_REGION_DESC1(r) \ - (CDNS_PCIE_AT_BASE + 0x000c + ((r) & 0x1f) * 0x0020) -#define CDNS_PCIE_AT_OB_REGION_DESC1_BUS_MASK GENMASK(7, 0) -#define CDNS_PCIE_AT_OB_REGION_DESC1_BUS(bus) \ - ((bus) & CDNS_PCIE_AT_OB_REGION_DESC1_BUS_MASK) - -/* Region r AXI Region Base Address Register 0 */ -#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0(r) \ - (CDNS_PCIE_AT_BASE + 0x0018 + ((r) & 0x1f) * 0x0020) -#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK GENMASK(5, 0) -#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) \ - (((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK) - -/* Region r AXI Region Base Address Register 1 */ -#define CDNS_PCIE_AT_OB_REGION_CPU_ADDR1(r) \ - (CDNS_PCIE_AT_BASE + 0x001c + ((r) & 0x1f) * 0x0020) - -/* Root Port BAR Inbound PCIe to AXI Address Translation Register */ -#define CDNS_PCIE_AT_IB_RP_BAR_ADDR0(bar) \ - (CDNS_PCIE_AT_BASE + 0x0800 + (bar) * 0x0008) -#define CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK GENMASK(5, 0) -#define CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS(nbits) \ - (((nbits) - 1) & CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK) -#define CDNS_PCIE_AT_IB_RP_BAR_ADDR1(bar) \ - (CDNS_PCIE_AT_BASE + 0x0804 + (bar) * 0x0008) - -/* AXI link down register */ -#define CDNS_PCIE_AT_LINKDOWN (CDNS_PCIE_AT_BASE + 0x0824) - -/* LTSSM Capabilities register */ -#define CDNS_PCIE_LTSSM_CONTROL_CAP (CDNS_PCIE_LM_BASE + 0x005= 4) -#define CDNS_PCIE_DETECT_QUIET_MIN_DELAY_MASK GENMASK(2, 1) -#define CDNS_PCIE_DETECT_QUIET_MIN_DELAY_SHIFT 1 -#define CDNS_PCIE_DETECT_QUIET_MIN_DELAY(delay) \ - (((delay) << CDNS_PCIE_DETECT_QUIET_MIN_DELAY_SHIFT) & \ - CDNS_PCIE_DETECT_QUIET_MIN_DELAY_MASK) +#include "pcie-cadence-lga-regs.h" =20 enum cdns_pcie_rp_bar { RP_BAR_UNDEFINED =3D -1, @@ -220,29 +20,11 @@ enum cdns_pcie_rp_bar { RP_NO_BAR }; =20 -#define CDNS_PCIE_RP_MAX_IB 0x3 -#define CDNS_PCIE_MAX_OB 32 - struct cdns_pcie_rp_ib_bar { u64 size; bool free; }; =20 -/* Endpoint Function BAR Inbound PCIe to AXI Address Translation Register = */ -#define CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar) \ - (CDNS_PCIE_AT_BASE + 0x0840 + (fn) * 0x0040 + (bar) * 0x0008) -#define CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar) \ - (CDNS_PCIE_AT_BASE + 0x0844 + (fn) * 0x0040 + (bar) * 0x0008) - -/* Normal/Vendor specific message access: offset inside some outbound regi= on */ -#define CDNS_PCIE_NORMAL_MSG_ROUTING_MASK GENMASK(7, 5) -#define CDNS_PCIE_NORMAL_MSG_ROUTING(route) \ - (((route) << 5) & CDNS_PCIE_NORMAL_MSG_ROUTING_MASK) -#define CDNS_PCIE_NORMAL_MSG_CODE_MASK GENMASK(15, 8) -#define CDNS_PCIE_NORMAL_MSG_CODE(code) \ - (((code) << 8) & CDNS_PCIE_NORMAL_MSG_CODE_MASK) -#define CDNS_PCIE_MSG_DATA BIT(16) - struct cdns_pcie; =20 struct cdns_pcie_ops { --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazon11022096.outbound.protection.outlook.com [52.101.126.96]) (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 6E1361C84A1; Sat, 8 Nov 2025 14:03:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.126.96 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610595; cv=fail; b=ZQff5i2Q2bIE7s/UYHhAwfQp9NDP8It9kljHbAmc/wEVnjc0gWY6G9fI1ksZrw0QFhv7aACLvrcNzr+coj2puGZFIX8jTELMTeqOgMLXXPBci5akulb1tXcsZIJ2tms/Ys2kIoNNEfi1rae2F8TEJ7aLilnwqofxIZ5uvtyXY8U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610595; c=relaxed/simple; bh=TBgok9AP2pWXZZp+0POamyt8uyGp+OUFskSrKyvjVmY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ShtAhieHJjNlqtJa4UEGM9dvpIcnEtp3//ovm0rqV/cgiixNjVWUGKx+Pt5iWRYLgQHsVZjwU3Xtn9wjk36iDBnmLJieSprjJ+zBoSn8zkPboUky0qniX/mrScIq/kO6qneWAksT32TsEAwfk1wg+OlciIhpO0M5aj6/1ulD4nM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=52.101.126.96 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ldVZPV2GMEjfkoSe4EIzT7kUZIeC816frGKQGq3qIWu617Neh/7/LpgunaUjOkRLG3C4qaHIBoOTWyY1CCIPB5L+1yHlc7Pq/XC/mwFRvM/AQ/+JAQ4NHt60ORtYzjh72XXnAcUyzKEmoilhjlrQ9wIzu6DC6wPX7W4BUKXmzQVrorIUkW2/nKjlmk3Rc3ehSA0x6kJh0CU/Ww7oOq/G3H2jscdKxIpzbgHW0RT62N21rASgxkj8ldx41CVEDZeOqltmbYqxe3eOVJxtZkgN7OcoSHEytVSZmQ/UH7CyEIcisxTgZejp2zZU7bI80RjOecl6APLHCF86JV2xUoFbvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gnXw5VF3OCcUmjd0KPq1SawphiONvYYtw4hgtz2jLj4=; b=Wg5Dh4rzvXfv4Jfq8mSbXscCN3rsRn6iSuVNtL5qieTtwKQc5kugEWSUHHRfYVgtAgU0xQ+HuFDrozcvEEIi+L3EiPAmwlQNhgSqI7EGLi6ct3ZNNKX0gecS8fm436Q8VJCZQu9PjfzHwyaF/c9iqXpC76o+xPmT77Dqqb5mW3FXTRVMvuQIRO8J/V02wK96jX2p+P6DtPHkWioGnGmMpaz2AHvj/iYFcZDabMA8CCkJGeXgY54cZtYMXDu/5wtod1KIGFoQMwzhgeC7+vKsKcUTkzAV5C3mCZ/QuSKFURAM3pNc46swHHHsEmYcgZ8MBmhQ70ofgAE+1kXJ4kAC0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PS2PR02CA0072.apcprd02.prod.outlook.com (2603:1096:300:5a::36) by SG2PR06MB5083.apcprd06.prod.outlook.com (2603:1096:4:1ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Sat, 8 Nov 2025 14:03:10 +0000 Received: from OSA0EPF000000C6.apcprd02.prod.outlook.com (2603:1096:300:5a:cafe::79) by PS2PR02CA0072.outlook.office365.com (2603:1096:300:5a::36) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:03:04 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by OSA0EPF000000C6.mail.protection.outlook.com (10.167.240.52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:07 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id F03254079A20; Sat, 8 Nov 2025 22:03:05 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v11 03/10] PCI: cadence: Move PCIe RP common functions to a separate file Date: Sat, 8 Nov 2025 22:02:58 +0800 Message-ID: <20251108140305.1120117-4-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSA0EPF000000C6:EE_|SG2PR06MB5083:EE_ X-MS-Office365-Filtering-Correlation-Id: 97ee6a72-66e0-4b8c-7291-08de1ecf8bad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700013|376014|7416014|1800799024|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xJy8js5PgYGpssEs6Rc7WiSy02o8vAeSvW+5wIrJo+jXUh/iiw9X7YjszpQ9?= =?us-ascii?Q?2o67vwnnBZRo++YCfR+dQfrUBE4mIAB23ZVISIsL7G0SytFdRsCn26NWXMAX?= =?us-ascii?Q?9mMCfq2fY1ZDKO/hPiOrxDbMrMtczToEr6H4Id8LuqYEKe6CJs8nrb+0SHl7?= =?us-ascii?Q?+U90BKwlTQ1qF5j6NpZgyD0X8l9jSJK8qpkNn+zWxwjCAz1oYnNDUdDtIYcA?= =?us-ascii?Q?p6lttnXmzjG0eC1EgPHE2WashYuN5m8FJyYCbNhZQFF62lb6WvDRw7qpTY0w?= =?us-ascii?Q?ceeH3ifWLxW9syadYU0glMhsqyonJe4rtgMz8pd6AVyL92l85N4Ue5eSnVPO?= =?us-ascii?Q?UnInBZn56N6yVY2xzJfQN1j7e7RVHD9Ll57Ut6H+5ZvwLN3X9Y6pkeWerFYt?= =?us-ascii?Q?5yR482cFDZdfyAVkSaXCmTFpbnTuEjY44b1I6ucFkhE/xS3R/XH3XGRmim4p?= =?us-ascii?Q?m8PCf9dQ8LvpTm1GQTbWJoAr/nU0p6t2FI/H9yfPyzimVDIS859aAjMcjAWd?= =?us-ascii?Q?I3iLVC411vNy25GeQBMmck56emNN5WZJRS4hEIc75lYsB4VDb+qEwMcKtp2J?= =?us-ascii?Q?difZQrDyHrfNDQBJkyw9Srl9eOacDNtCi1tj4Lphh2X9OQ7zG5WYbYwkljd3?= =?us-ascii?Q?skUc18ZAYzFfk0tKkgVZX+47jl8MGjPuCHl+ZYbmpcOf+vUz0g7Nk8rXJSaF?= =?us-ascii?Q?3hdjwHangfDgg+x09KUGYvCTSCLm/raGpolEHiKW9GKOENFSgzrlrV0mEDBa?= =?us-ascii?Q?NnSpxCssoHCK8X/YXF7NgAGWmbcz8UDk2o9Z8Rp0KuOkEasuVxWnHPjvXtU/?= =?us-ascii?Q?ICoWPIfECqkKPIpsj53hI7sXfDvrD0EnNWqUyaVrIQhfLOC3usiwKqo1WNBf?= =?us-ascii?Q?9Y+tsFr19UsRjdl1v2nKtVX7tXD5jNVYtGIACk2uE8ziO29JX0E80Z8Urc9W?= =?us-ascii?Q?+mTMYMN9hY1ZqJtIRyo7DHM6QT8HldzTWShI76ZrDaSRSNIN8zu8i4TQMiSs?= =?us-ascii?Q?9/kcFIGO6V0HMu/Zu7vtUsPQDR6kUwR30lfp1yaWozYO8zX3MJ/D5zmwHZLd?= =?us-ascii?Q?HZU2FSP7AU56wznOojzOBxSEZ1wDV56PJWqogPCEb4wrF103vvcBaQtKgXqO?= =?us-ascii?Q?SS06doIbTXLGvp56gEgQwB5+29dQqp6xiSDIhiHMYfKESDC0LDfVy4vlVRji?= =?us-ascii?Q?JsWzqkvtWloVhpbnXuQ2uP191JPxvzgJehWahNephw02EbjTskNsti2VciEr?= =?us-ascii?Q?IL0i1YwDcTrtDuoi3owUvJWCKy2KI/glBJiNJY5MM6rAHx5UmOnb7hVLroo/?= =?us-ascii?Q?4JesNaO4DfteGwznT6qroqRM7B02vOQq6xZ75w0ubIzCPeVxA/lxmkT4m5Am?= =?us-ascii?Q?THpavs+QWOYt3Vp7L8w6QkqFzRHr0Ojlt0A7ywMCDl0Ici8pMe8aCjrjkep1?= =?us-ascii?Q?Eb55rbbMOOK9OuwD9Hf4fS/Ea87o825gbxQivVCxtEUk41a5OTomgOZ9vfVI?= =?us-ascii?Q?7W71SBZc2q5MKT6FQCji4+fS+6Mh2Y0uAQcfMc/6GdLD5wRtTz7cGzUFKqe4?= =?us-ascii?Q?4T0KkaL3L09+n3rcFA0=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700013)(376014)(7416014)(1800799024)(7053199007);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:07.3578 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 97ee6a72-66e0-4b8c-7291-08de1ecf8bad X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: OSA0EPF000000C6.apcprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB5083 Content-Type: text/plain; charset="utf-8" From: Manikandan K Pillai Move the Cadence PCIe controller RP common functions into a separate file. The common library functions are split from legacy PCIe RP controller functions to a separate file. Signed-off-by: Manikandan K Pillai --- drivers/pci/controller/cadence/Makefile | 10 +- .../cadence/pcie-cadence-host-common.c | 289 ++++++++++++++++++ .../cadence/pcie-cadence-host-common.h | 46 +++ .../controller/cadence/pcie-cadence-host.c | 278 +---------------- 4 files changed, 350 insertions(+), 273 deletions(-) create mode 100644 drivers/pci/controller/cadence/pcie-cadence-host-common= .c create mode 100644 drivers/pci/controller/cadence/pcie-cadence-host-common= .h diff --git a/drivers/pci/controller/cadence/Makefile b/drivers/pci/controll= er/cadence/Makefile index 5e23f8539ecc..91ffdbfd3aaa 100644 --- a/drivers/pci/controller/cadence/Makefile +++ b/drivers/pci/controller/cadence/Makefile @@ -1,7 +1,11 @@ # SPDX-License-Identifier: GPL-2.0 -obj-$(CONFIG_PCIE_CADENCE) +=3D pcie-cadence.o -obj-$(CONFIG_PCIE_CADENCE_HOST) +=3D pcie-cadence-host.o -obj-$(CONFIG_PCIE_CADENCE_EP) +=3D pcie-cadence-ep.o +pcie-cadence-mod-y :=3D pcie-cadence.o +pcie-cadence-host-mod-y :=3D pcie-cadence-host-common.o pcie-cadence-host.o +pcie-cadence-ep-mod-y :=3D pcie-cadence-ep.o + +obj-$(CONFIG_PCIE_CADENCE) =3D pcie-cadence-mod.o +obj-$(CONFIG_PCIE_CADENCE_HOST) +=3D pcie-cadence-host-mod.o +obj-$(CONFIG_PCIE_CADENCE_EP) +=3D pcie-cadence-ep-mod.o obj-$(CONFIG_PCIE_CADENCE_PLAT) +=3D pcie-cadence-plat.o obj-$(CONFIG_PCI_J721E) +=3D pci-j721e.o obj-$(CONFIG_PCIE_SG2042_HOST) +=3D pcie-sg2042.o diff --git a/drivers/pci/controller/cadence/pcie-cadence-host-common.c b/dr= ivers/pci/controller/cadence/pcie-cadence-host-common.c new file mode 100644 index 000000000000..10cd5239d9c2 --- /dev/null +++ b/drivers/pci/controller/cadence/pcie-cadence-host-common.c @@ -0,0 +1,289 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Cadence PCIe host controller library. + * + * Copyright (c) 2017 Cadence + * Author: Cyrille Pitchen + */ +#include +#include +#include +#include +#include +#include + +#include "pcie-cadence.h" +#include "pcie-cadence-host-common.h" + +#define LINK_RETRAIN_TIMEOUT HZ + +u64 bar_max_size[] =3D { + [RP_BAR0] =3D _ULL(128 * SZ_2G), + [RP_BAR1] =3D SZ_2G, + [RP_NO_BAR] =3D _BITULL(63), +}; +EXPORT_SYMBOL_GPL(bar_max_size); + +int cdns_pcie_host_training_complete(struct cdns_pcie *pcie) +{ + u32 pcie_cap_off =3D CDNS_PCIE_RP_CAP_OFFSET; + unsigned long end_jiffies; + u16 lnk_stat; + + /* Wait for link training to complete. Exit after timeout. */ + end_jiffies =3D jiffies + LINK_RETRAIN_TIMEOUT; + do { + lnk_stat =3D cdns_pcie_rp_readw(pcie, pcie_cap_off + PCI_EXP_LNKSTA); + if (!(lnk_stat & PCI_EXP_LNKSTA_LT)) + break; + usleep_range(0, 1000); + } while (time_before(jiffies, end_jiffies)); + + if (!(lnk_stat & PCI_EXP_LNKSTA_LT)) + return 0; + + return -ETIMEDOUT; +} +EXPORT_SYMBOL_GPL(cdns_pcie_host_training_complete); + +int cdns_pcie_host_wait_for_link(struct cdns_pcie *pcie, + cdns_pcie_linkup_func pcie_link_up) +{ + struct device *dev =3D pcie->dev; + int retries; + + /* Check if the link is up or not */ + for (retries =3D 0; retries < LINK_WAIT_MAX_RETRIES; retries++) { + if (pcie_link_up(pcie)) { + dev_info(dev, "Link up\n"); + return 0; + } + usleep_range(LINK_WAIT_USLEEP_MIN, LINK_WAIT_USLEEP_MAX); + } + + return -ETIMEDOUT; +} +EXPORT_SYMBOL_GPL(cdns_pcie_host_wait_for_link); + +int cdns_pcie_retrain(struct cdns_pcie *pcie, + cdns_pcie_linkup_func pcie_link_up) +{ + u32 lnk_cap_sls, pcie_cap_off =3D CDNS_PCIE_RP_CAP_OFFSET; + u16 lnk_stat, lnk_ctl; + int ret =3D 0; + + /* + * Set retrain bit if current speed is 2.5 GB/s, + * but the PCIe root port support is > 2.5 GB/s. + */ + + lnk_cap_sls =3D cdns_pcie_readl(pcie, (CDNS_PCIE_RP_BASE + pcie_cap_off + + PCI_EXP_LNKCAP)); + if ((lnk_cap_sls & PCI_EXP_LNKCAP_SLS) <=3D PCI_EXP_LNKCAP_SLS_2_5GB) + return ret; + + lnk_stat =3D cdns_pcie_rp_readw(pcie, pcie_cap_off + PCI_EXP_LNKSTA); + if ((lnk_stat & PCI_EXP_LNKSTA_CLS) =3D=3D PCI_EXP_LNKSTA_CLS_2_5GB) { + lnk_ctl =3D cdns_pcie_rp_readw(pcie, + pcie_cap_off + PCI_EXP_LNKCTL); + lnk_ctl |=3D PCI_EXP_LNKCTL_RL; + cdns_pcie_rp_writew(pcie, pcie_cap_off + PCI_EXP_LNKCTL, + lnk_ctl); + + ret =3D cdns_pcie_host_training_complete(pcie); + if (ret) + return ret; + + ret =3D cdns_pcie_host_wait_for_link(pcie, pcie_link_up); + } + return ret; +} +EXPORT_SYMBOL_GPL(cdns_pcie_retrain); + +int cdns_pcie_host_start_link(struct cdns_pcie_rc *rc, + cdns_pcie_linkup_func pcie_link_up) +{ + struct cdns_pcie *pcie =3D &rc->pcie; + int ret; + + ret =3D cdns_pcie_host_wait_for_link(pcie, pcie_link_up); + + /* + * Retrain link for Gen2 training defect + * if quirk flag is set. + */ + if (!ret && rc->quirk_retrain_flag) + ret =3D cdns_pcie_retrain(pcie, pcie_link_up); + + return ret; +} +EXPORT_SYMBOL_GPL(cdns_pcie_host_start_link); + +enum cdns_pcie_rp_bar +cdns_pcie_host_find_min_bar(struct cdns_pcie_rc *rc, u64 size) +{ + enum cdns_pcie_rp_bar bar, sel_bar; + + sel_bar =3D RP_BAR_UNDEFINED; + for (bar =3D RP_BAR0; bar <=3D RP_NO_BAR; bar++) { + if (!rc->avail_ib_bar[bar]) + continue; + + if (size <=3D bar_max_size[bar]) { + if (sel_bar =3D=3D RP_BAR_UNDEFINED) { + sel_bar =3D bar; + continue; + } + + if (bar_max_size[bar] < bar_max_size[sel_bar]) + sel_bar =3D bar; + } + } + + return sel_bar; +} +EXPORT_SYMBOL_GPL(cdns_pcie_host_find_min_bar); + +enum cdns_pcie_rp_bar +cdns_pcie_host_find_max_bar(struct cdns_pcie_rc *rc, u64 size) +{ + enum cdns_pcie_rp_bar bar, sel_bar; + + sel_bar =3D RP_BAR_UNDEFINED; + for (bar =3D RP_BAR0; bar <=3D RP_NO_BAR; bar++) { + if (!rc->avail_ib_bar[bar]) + continue; + + if (size >=3D bar_max_size[bar]) { + if (sel_bar =3D=3D RP_BAR_UNDEFINED) { + sel_bar =3D bar; + continue; + } + + if (bar_max_size[bar] > bar_max_size[sel_bar]) + sel_bar =3D bar; + } + } + + return sel_bar; +} +EXPORT_SYMBOL_GPL(cdns_pcie_host_find_max_bar); + +int cdns_pcie_host_dma_ranges_cmp(void *priv, const struct list_head *a, + const struct list_head *b) +{ + struct resource_entry *entry1, *entry2; + + entry1 =3D container_of(a, struct resource_entry, node); + entry2 =3D container_of(b, struct resource_entry, node); + + return resource_size(entry2->res) - resource_size(entry1->res); +} +EXPORT_SYMBOL_GPL(cdns_pcie_host_dma_ranges_cmp); + +int cdns_pcie_host_bar_config(struct cdns_pcie_rc *rc, + struct resource_entry *entry, + cdns_pcie_host_bar_ib_cfg pci_host_ib_config) +{ + u64 cpu_addr, pci_addr, size, winsize; + struct cdns_pcie *pcie =3D &rc->pcie; + struct device *dev =3D pcie->dev; + enum cdns_pcie_rp_bar bar; + unsigned long flags; + int ret; + + cpu_addr =3D entry->res->start; + pci_addr =3D entry->res->start - entry->offset; + flags =3D entry->res->flags; + size =3D resource_size(entry->res); + + while (size > 0) { + /* + * Try to find a minimum BAR whose size is greater than + * or equal to the remaining resource_entry size. This will + * fail if the size of each of the available BARs is less than + * the remaining resource_entry size. + * + * If a minimum BAR is found, IB ATU will be configured and + * exited. + */ + bar =3D cdns_pcie_host_find_min_bar(rc, size); + if (bar !=3D RP_BAR_UNDEFINED) { + ret =3D pci_host_ib_config(rc, bar, cpu_addr, size, flags); + if (ret) + dev_err(dev, "IB BAR: %d config failed\n", bar); + return ret; + } + + /* + * If the control reaches here, it would mean the remaining + * resource_entry size cannot be fitted in a single BAR. So we + * find a maximum BAR whose size is less than or equal to the + * remaining resource_entry size and split the resource entry + * so that part of resource entry is fitted inside the maximum + * BAR. The remaining size would be fitted during the next + * iteration of the loop. + * + * If a maximum BAR is not found, there is no way we can fit + * this resource_entry, so we error out. + */ + bar =3D cdns_pcie_host_find_max_bar(rc, size); + if (bar =3D=3D RP_BAR_UNDEFINED) { + dev_err(dev, "No free BAR to map cpu_addr %llx\n", + cpu_addr); + return -EINVAL; + } + + winsize =3D bar_max_size[bar]; + ret =3D pci_host_ib_config(rc, bar, cpu_addr, winsize, flags); + if (ret) { + dev_err(dev, "IB BAR: %d config failed\n", bar); + return ret; + } + + size -=3D winsize; + cpu_addr +=3D winsize; + } + + return 0; +} + +int cdns_pcie_host_map_dma_ranges(struct cdns_pcie_rc *rc, + cdns_pcie_host_bar_ib_cfg pci_host_ib_config) +{ + struct cdns_pcie *pcie =3D &rc->pcie; + struct device *dev =3D pcie->dev; + struct device_node *np =3D dev->of_node; + struct pci_host_bridge *bridge; + struct resource_entry *entry; + u32 no_bar_nbits =3D 32; + int err; + + bridge =3D pci_host_bridge_from_priv(rc); + if (!bridge) + return -ENOMEM; + + if (list_empty(&bridge->dma_ranges)) { + of_property_read_u32(np, "cdns,no-bar-match-nbits", + &no_bar_nbits); + err =3D pci_host_ib_config(rc, RP_NO_BAR, 0x0, (u64)1 << no_bar_nbits, 0= ); + if (err) + dev_err(dev, "IB BAR: %d config failed\n", RP_NO_BAR); + return err; + } + + list_sort(NULL, &bridge->dma_ranges, cdns_pcie_host_dma_ranges_cmp); + + resource_list_for_each_entry(entry, &bridge->dma_ranges) { + err =3D cdns_pcie_host_bar_config(rc, entry, pci_host_ib_config); + if (err) { + dev_err(dev, "Fail to configure IB using dma-ranges\n"); + return err; + } + } + + return 0; +} + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Cadence PCIe host controller driver"); diff --git a/drivers/pci/controller/cadence/pcie-cadence-host-common.h b/dr= ivers/pci/controller/cadence/pcie-cadence-host-common.h new file mode 100644 index 000000000000..fe7d4202a8b6 --- /dev/null +++ b/drivers/pci/controller/cadence/pcie-cadence-host-common.h @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Cadence PCIe Host controller driver. + * + * Copyright (c) 2017 Cadence + * Author: Cyrille Pitchen + */ +#ifndef _PCIE_CADENCE_HOST_COMMON_H +#define _PCIE_CADENCE_HOST_COMMON_H + +#include +#include + +extern u64 bar_max_size[]; + +typedef int (*cdns_pcie_host_bar_ib_cfg)(struct cdns_pcie_rc *, + enum cdns_pcie_rp_bar, + u64, + u64, + unsigned long); +typedef bool (*cdns_pcie_linkup_func)(struct cdns_pcie *); + +int cdns_pcie_host_training_complete(struct cdns_pcie *pcie); +int cdns_pcie_host_wait_for_link(struct cdns_pcie *pcie, + cdns_pcie_linkup_func pcie_link_up); +int cdns_pcie_retrain(struct cdns_pcie *pcie, cdns_pcie_linkup_func pcie_l= inkup_func); +int cdns_pcie_host_start_link(struct cdns_pcie_rc *rc, + cdns_pcie_linkup_func pcie_link_up); +enum cdns_pcie_rp_bar +cdns_pcie_host_find_min_bar(struct cdns_pcie_rc *rc, u64 size); +enum cdns_pcie_rp_bar +cdns_pcie_host_find_max_bar(struct cdns_pcie_rc *rc, u64 size); +int cdns_pcie_host_dma_ranges_cmp(void *priv, const struct list_head *a, + const struct list_head *b); +int cdns_pcie_host_bar_ib_config(struct cdns_pcie_rc *rc, + enum cdns_pcie_rp_bar bar, + u64 cpu_addr, + u64 size, + unsigned long flags); +int cdns_pcie_host_bar_config(struct cdns_pcie_rc *rc, + struct resource_entry *entry, + cdns_pcie_host_bar_ib_cfg pci_host_ib_config); +int cdns_pcie_host_map_dma_ranges(struct cdns_pcie_rc *rc, + cdns_pcie_host_bar_ib_cfg pci_host_ib_config); + +#endif /* _PCIE_CADENCE_HOST_COMMON_H */ diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/p= ci/controller/cadence/pcie-cadence-host.c index fffd63d6665e..db3154c1eccb 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-host.c +++ b/drivers/pci/controller/cadence/pcie-cadence-host.c @@ -12,14 +12,7 @@ #include =20 #include "pcie-cadence.h" - -#define LINK_RETRAIN_TIMEOUT HZ - -static u64 bar_max_size[] =3D { - [RP_BAR0] =3D _ULL(128 * SZ_2G), - [RP_BAR1] =3D SZ_2G, - [RP_NO_BAR] =3D _BITULL(63), -}; +#include "pcie-cadence-host-common.h" =20 static u8 bar_aperture_mask[] =3D { [RP_BAR0] =3D 0x1F, @@ -81,77 +74,6 @@ static struct pci_ops cdns_pcie_host_ops =3D { .write =3D pci_generic_config_write, }; =20 -static int cdns_pcie_host_training_complete(struct cdns_pcie *pcie) -{ - u32 pcie_cap_off =3D CDNS_PCIE_RP_CAP_OFFSET; - unsigned long end_jiffies; - u16 lnk_stat; - - /* Wait for link training to complete. Exit after timeout. */ - end_jiffies =3D jiffies + LINK_RETRAIN_TIMEOUT; - do { - lnk_stat =3D cdns_pcie_rp_readw(pcie, pcie_cap_off + PCI_EXP_LNKSTA); - if (!(lnk_stat & PCI_EXP_LNKSTA_LT)) - break; - usleep_range(0, 1000); - } while (time_before(jiffies, end_jiffies)); - - if (!(lnk_stat & PCI_EXP_LNKSTA_LT)) - return 0; - - return -ETIMEDOUT; -} - -static int cdns_pcie_host_wait_for_link(struct cdns_pcie *pcie) -{ - struct device *dev =3D pcie->dev; - int retries; - - /* Check if the link is up or not */ - for (retries =3D 0; retries < LINK_WAIT_MAX_RETRIES; retries++) { - if (cdns_pcie_link_up(pcie)) { - dev_info(dev, "Link up\n"); - return 0; - } - usleep_range(LINK_WAIT_USLEEP_MIN, LINK_WAIT_USLEEP_MAX); - } - - return -ETIMEDOUT; -} - -static int cdns_pcie_retrain(struct cdns_pcie *pcie) -{ - u32 lnk_cap_sls, pcie_cap_off =3D CDNS_PCIE_RP_CAP_OFFSET; - u16 lnk_stat, lnk_ctl; - int ret =3D 0; - - /* - * Set retrain bit if current speed is 2.5 GB/s, - * but the PCIe root port support is > 2.5 GB/s. - */ - - lnk_cap_sls =3D cdns_pcie_readl(pcie, (CDNS_PCIE_RP_BASE + pcie_cap_off + - PCI_EXP_LNKCAP)); - if ((lnk_cap_sls & PCI_EXP_LNKCAP_SLS) <=3D PCI_EXP_LNKCAP_SLS_2_5GB) - return ret; - - lnk_stat =3D cdns_pcie_rp_readw(pcie, pcie_cap_off + PCI_EXP_LNKSTA); - if ((lnk_stat & PCI_EXP_LNKSTA_CLS) =3D=3D PCI_EXP_LNKSTA_CLS_2_5GB) { - lnk_ctl =3D cdns_pcie_rp_readw(pcie, - pcie_cap_off + PCI_EXP_LNKCTL); - lnk_ctl |=3D PCI_EXP_LNKCTL_RL; - cdns_pcie_rp_writew(pcie, pcie_cap_off + PCI_EXP_LNKCTL, - lnk_ctl); - - ret =3D cdns_pcie_host_training_complete(pcie); - if (ret) - return ret; - - ret =3D cdns_pcie_host_wait_for_link(pcie); - } - return ret; -} - static void cdns_pcie_host_disable_ptm_response(struct cdns_pcie *pcie) { u32 val; @@ -168,23 +90,6 @@ static void cdns_pcie_host_enable_ptm_response(struct c= dns_pcie *pcie) cdns_pcie_writel(pcie, CDNS_PCIE_LM_PTM_CTRL, val | CDNS_PCIE_LM_TPM_CTRL= _PTMRSEN); } =20 -static int cdns_pcie_host_start_link(struct cdns_pcie_rc *rc) -{ - struct cdns_pcie *pcie =3D &rc->pcie; - int ret; - - ret =3D cdns_pcie_host_wait_for_link(pcie); - - /* - * Retrain link for Gen2 training defect - * if quirk flag is set. - */ - if (!ret && rc->quirk_retrain_flag) - ret =3D cdns_pcie_retrain(pcie); - - return ret; -} - static void cdns_pcie_host_deinit_root_port(struct cdns_pcie_rc *rc) { struct cdns_pcie *pcie =3D &rc->pcie; @@ -245,10 +150,11 @@ static int cdns_pcie_host_init_root_port(struct cdns_= pcie_rc *rc) return 0; } =20 -static int cdns_pcie_host_bar_ib_config(struct cdns_pcie_rc *rc, - enum cdns_pcie_rp_bar bar, - u64 cpu_addr, u64 size, - unsigned long flags) +int cdns_pcie_host_bar_ib_config(struct cdns_pcie_rc *rc, + enum cdns_pcie_rp_bar bar, + u64 cpu_addr, + u64 size, + unsigned long flags) { struct cdns_pcie *pcie =3D &rc->pcie; u32 addr0, addr1, aperture, value; @@ -290,137 +196,6 @@ static int cdns_pcie_host_bar_ib_config(struct cdns_p= cie_rc *rc, return 0; } =20 -static enum cdns_pcie_rp_bar -cdns_pcie_host_find_min_bar(struct cdns_pcie_rc *rc, u64 size) -{ - enum cdns_pcie_rp_bar bar, sel_bar; - - sel_bar =3D RP_BAR_UNDEFINED; - for (bar =3D RP_BAR0; bar <=3D RP_NO_BAR; bar++) { - if (!rc->avail_ib_bar[bar]) - continue; - - if (size <=3D bar_max_size[bar]) { - if (sel_bar =3D=3D RP_BAR_UNDEFINED) { - sel_bar =3D bar; - continue; - } - - if (bar_max_size[bar] < bar_max_size[sel_bar]) - sel_bar =3D bar; - } - } - - return sel_bar; -} - -static enum cdns_pcie_rp_bar -cdns_pcie_host_find_max_bar(struct cdns_pcie_rc *rc, u64 size) -{ - enum cdns_pcie_rp_bar bar, sel_bar; - - sel_bar =3D RP_BAR_UNDEFINED; - for (bar =3D RP_BAR0; bar <=3D RP_NO_BAR; bar++) { - if (!rc->avail_ib_bar[bar]) - continue; - - if (size >=3D bar_max_size[bar]) { - if (sel_bar =3D=3D RP_BAR_UNDEFINED) { - sel_bar =3D bar; - continue; - } - - if (bar_max_size[bar] > bar_max_size[sel_bar]) - sel_bar =3D bar; - } - } - - return sel_bar; -} - -static int cdns_pcie_host_bar_config(struct cdns_pcie_rc *rc, - struct resource_entry *entry) -{ - u64 cpu_addr, pci_addr, size, winsize; - struct cdns_pcie *pcie =3D &rc->pcie; - struct device *dev =3D pcie->dev; - enum cdns_pcie_rp_bar bar; - unsigned long flags; - int ret; - - cpu_addr =3D entry->res->start; - pci_addr =3D entry->res->start - entry->offset; - flags =3D entry->res->flags; - size =3D resource_size(entry->res); - - if (entry->offset) { - dev_err(dev, "PCI addr: %llx must be equal to CPU addr: %llx\n", - pci_addr, cpu_addr); - return -EINVAL; - } - - while (size > 0) { - /* - * Try to find a minimum BAR whose size is greater than - * or equal to the remaining resource_entry size. This will - * fail if the size of each of the available BARs is less than - * the remaining resource_entry size. - * If a minimum BAR is found, IB ATU will be configured and - * exited. - */ - bar =3D cdns_pcie_host_find_min_bar(rc, size); - if (bar !=3D RP_BAR_UNDEFINED) { - ret =3D cdns_pcie_host_bar_ib_config(rc, bar, cpu_addr, - size, flags); - if (ret) - dev_err(dev, "IB BAR: %d config failed\n", bar); - return ret; - } - - /* - * If the control reaches here, it would mean the remaining - * resource_entry size cannot be fitted in a single BAR. So we - * find a maximum BAR whose size is less than or equal to the - * remaining resource_entry size and split the resource entry - * so that part of resource entry is fitted inside the maximum - * BAR. The remaining size would be fitted during the next - * iteration of the loop. - * If a maximum BAR is not found, there is no way we can fit - * this resource_entry, so we error out. - */ - bar =3D cdns_pcie_host_find_max_bar(rc, size); - if (bar =3D=3D RP_BAR_UNDEFINED) { - dev_err(dev, "No free BAR to map cpu_addr %llx\n", - cpu_addr); - return -EINVAL; - } - - winsize =3D bar_max_size[bar]; - ret =3D cdns_pcie_host_bar_ib_config(rc, bar, cpu_addr, winsize, - flags); - if (ret) { - dev_err(dev, "IB BAR: %d config failed\n", bar); - return ret; - } - - size -=3D winsize; - cpu_addr +=3D winsize; - } - - return 0; -} - -static int cdns_pcie_host_dma_ranges_cmp(void *priv, const struct list_hea= d *a, - const struct list_head *b) -{ - struct resource_entry *entry1, *entry2; - - entry1 =3D container_of(a, struct resource_entry, node); - entry2 =3D container_of(b, struct resource_entry, node); - - return resource_size(entry2->res) - resource_size(entry1->res); -} - static void cdns_pcie_host_unmap_dma_ranges(struct cdns_pcie_rc *rc) { struct cdns_pcie *pcie =3D &rc->pcie; @@ -447,43 +222,6 @@ static void cdns_pcie_host_unmap_dma_ranges(struct cdn= s_pcie_rc *rc) } } =20 -static int cdns_pcie_host_map_dma_ranges(struct cdns_pcie_rc *rc) -{ - struct cdns_pcie *pcie =3D &rc->pcie; - struct device *dev =3D pcie->dev; - struct device_node *np =3D dev->of_node; - struct pci_host_bridge *bridge; - struct resource_entry *entry; - u32 no_bar_nbits =3D 32; - int err; - - bridge =3D pci_host_bridge_from_priv(rc); - if (!bridge) - return -ENOMEM; - - if (list_empty(&bridge->dma_ranges)) { - of_property_read_u32(np, "cdns,no-bar-match-nbits", - &no_bar_nbits); - err =3D cdns_pcie_host_bar_ib_config(rc, RP_NO_BAR, 0x0, - (u64)1 << no_bar_nbits, 0); - if (err) - dev_err(dev, "IB BAR: %d config failed\n", RP_NO_BAR); - return err; - } - - list_sort(NULL, &bridge->dma_ranges, cdns_pcie_host_dma_ranges_cmp); - - resource_list_for_each_entry(entry, &bridge->dma_ranges) { - err =3D cdns_pcie_host_bar_config(rc, entry); - if (err) { - dev_err(dev, "Fail to configure IB using dma-ranges\n"); - return err; - } - } - - return 0; -} - static void cdns_pcie_host_deinit_address_translation(struct cdns_pcie_rc = *rc) { struct cdns_pcie *pcie =3D &rc->pcie; @@ -561,7 +299,7 @@ static int cdns_pcie_host_init_address_translation(stru= ct cdns_pcie_rc *rc) r++; } =20 - return cdns_pcie_host_map_dma_ranges(rc); + return cdns_pcie_host_map_dma_ranges(rc, cdns_pcie_host_bar_ib_config); } =20 static void cdns_pcie_host_deinit(struct cdns_pcie_rc *rc) @@ -607,7 +345,7 @@ int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc) return ret; } =20 - ret =3D cdns_pcie_host_start_link(rc); + ret =3D cdns_pcie_host_start_link(rc, cdns_pcie_link_up); if (ret) dev_dbg(dev, "PCIe link never came up\n"); =20 --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11023118.outbound.protection.outlook.com [40.107.44.118]) (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 6E0921C1F02; Sat, 8 Nov 2025 14:03:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.118 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610596; cv=fail; b=W1cexXfUiUyqLLQddgyCK4Q9UlStilAHiuFj938JTHfdlzVxRMIrfJVYn+2rFCpm3J9mekscwRZrFb7yZM830YK+mJpKL6nb9EZl17pryu/4vT92Y3OvbKHetJYZ6AiNOQ8+NikhdHYgAatGqzyLL/qY64kBfM6WfDpd+3g1MjY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610596; c=relaxed/simple; bh=zc/K6A2FnlhVCL5BJxufe2tb4F5c9uQ+oumts202BdU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XqsLKXFr4TejBCl5E/LYxKlOjS/4u5l79ec+h82C2kiHtcLa6jiefqlRBGds14ts5sGtfU6EhkAmzmT0HXRJy/AdWfmGHHmEo/OTVcqVdJtOC89+5DCbx/FpNJR6hIXPQ+C/KQmBaqCSh4BJ9H2zB7MlgPZMunjnBH7lc15q1j0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.44.118 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wxCiSXof3rnim1lYkQjM4KtzmWW3Npv4N7T0YHaSBxsimLh2L4eQd3tnMDPL3dcJuPKRu3VrhR3kZ64HnWhvzsLy826rBIZutYYmCExi09zXfD6bsYiOMwf2oPT5O2Zohn4mHnJGXxdGCRCS6RzoIDUraNoKSCixAgZn7itFqlxYNRcaeCZ+ySERKUZE4zPgmxYetnc9YpIRjwAuXFlcexVthslpVqyAEbaKL5+qgQgDByl7wKFXDT3t2xrxtMWE+T2UrPKZd/7cEHQKNA3t02UrQSyelFrsXfAX5liyyTTvt3W4hhYRyqAjTUCZY/m9yCXWD1o5gvxzfJUZyKAYng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CH0nV+sjRQji0niu7XWWC68oGxSLJZWM7LhbSf5gc/E=; b=d6aY+4MhpQyQZB0H72QOTpwwyhXNq+f+ykQb+4ceDS33/Xv8vVZdcmRGUqdcjmo4I2h8+TKxGF0FZ0gcDPl2+zgy36r4yXCixHaQafZ2ofdjMhYjwsyGoPjAZ+5b68zzhNjf8vV/LVamopyTgHkN+madwN89txIyl0hcNvjA+xeo2/yHAWfvYr3sjTIvGBh4zmVIuDxxjKfLkrB3FUMBbicbzOKf+qDrvk9mQn/lfWJ9u6JzgqYCRssPSW1YwYWNH2jE/y24qsC0tTodTXRqqwV4yuRsxn5OvsTLtyqGlU6AnVDRqhm/GO4jaqC3Yopn18h6Cf9as7udsVWyi3ZGFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from SI1PR02CA0002.apcprd02.prod.outlook.com (2603:1096:4:1f7::16) by TYPPR06MB8136.apcprd06.prod.outlook.com (2603:1096:405:385::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Sat, 8 Nov 2025 14:03:08 +0000 Received: from SG2PEPF000B66CC.apcprd03.prod.outlook.com (2603:1096:4:1f7:cafe::3f) by SI1PR02CA0002.outlook.office365.com (2603:1096:4:1f7::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:03:03 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by SG2PEPF000B66CC.mail.protection.outlook.com (10.167.240.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.6 via Frontend Transport; Sat, 8 Nov 2025 14:03:06 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 0F20D40A5A1B; Sat, 8 Nov 2025 22:03:06 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v11 04/10] PCI: cadence: Add support for High Perf Architecture (HPA) controller Date: Sat, 8 Nov 2025 22:02:59 +0800 Message-ID: <20251108140305.1120117-5-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SG2PEPF000B66CC:EE_|TYPPR06MB8136:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ebd66e5-e80c-45d3-7a50-08de1ecf8aee X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|7416014|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?5dJjhm4awPSynsPwepGPiLA6X+i0dm09G2MEfPt8cMXMMFUri1BlrRe1LVf/?= =?us-ascii?Q?w3cxwv/wi50Z7fKmh9K9WEuUDCwRnt7f9rxfIFHJmHkE96fgDrm7LeFy6Lvo?= =?us-ascii?Q?+ZVi8mpzoVKaCnyo15oLJk/OAb0AojnYT+90R4B5MtY/84nJvbvAXUH3qGjA?= =?us-ascii?Q?MsUoNnAlGXJjzZyQrs30VkCiCUKQfUBXWIUIXhHY/VD/mRtlE8ZtrMUzVP07?= =?us-ascii?Q?mY5Fl6yFgI5wBwO+j93lfV8FQxCe8+B14New9jjKYajxygVuTgMa13+J+Lr1?= =?us-ascii?Q?rdJkacEqam7+PVeUp/+6ulW+4kigqbn+p/wfc03mrNYz8IRTZ1N0RXqMw2N3?= =?us-ascii?Q?ICV+/eYTLYnM3dknNieclL9q1fhSgUlEbY+1I3ilLBofm8WCX0IzaF+4Zwb+?= =?us-ascii?Q?moQbHwHGsRyySsh6pEagJwDpHOG4CHk7veuLQdJ+JR6MgxcP3mbEKs6hqsVi?= =?us-ascii?Q?Ng6AhnQ9s7g4mb/KFrSCahd73uO8R4fY0Jw8J2o1MPEKEikHFjOM/Wy8UnMj?= =?us-ascii?Q?x74vKQCLq+a26vxpSPA13XzLVV4aguPtc3j0P/UGNnPS22E7X1t6EubfbbOo?= =?us-ascii?Q?/hFSZzUDqrAI4W7xt1RzNyr8VJg7lPB8hLEcK+J6pr+qvc62pmRFoXABKUa2?= =?us-ascii?Q?8KTSAxi3XkqLtSi5K8JOudXnhDzKBYsQ4BKq2DokuhYG2ccZRyNe/NPvZzKc?= =?us-ascii?Q?Mf2MdGsM1aEMMjfdiNyJfjwRcPFRjAHOI5Q35c55POMKKqVcG/KK7n3ZOeLS?= =?us-ascii?Q?zn8ajrzkzfvJSHs+tKJ3QILtlFVaDPSzvN0oyEfoQ+HPbA2hpz9SID40+lj0?= =?us-ascii?Q?whpsqfVqia0jq+Bv8tMBMz0bP/AIL/+S8A6WsJm8KGjo8tm0V8nFtvwSk7E5?= =?us-ascii?Q?WM34llbhr4OJwsU4HfgvOPqkZK+Hh3dW5APxixjJ5t3A9HN1EeyxwDE7K+IU?= =?us-ascii?Q?ST4V2moTLahEjkHtfR+4VZJfKeRFmfxpi5lud6N2un2yO6Vz0nTDi0ae4eQv?= =?us-ascii?Q?uYv5+RlpwZ+VsYORL1T8/ccvfOzfX5OhLyO9qFbvAXKIMARWTQTzFzKqAbE1?= =?us-ascii?Q?v6miiSDZ0Y+RbluU/QH14MWjuh8JBB8Ht6vs05fME5hPEfunQM/TGRCabX5s?= =?us-ascii?Q?zZ5lLUCzo2rvLSG/ITsWTpb8sa1xG1Lu8Z8pVjSAA3ET4S6sRSifxQ/4WW9b?= =?us-ascii?Q?5G7raXT297qFD0C7T6htpAUvI5ouBLpCPUKcb1kIMbyWKbgC1jF1tHw2niAj?= =?us-ascii?Q?eDtJxXIycMVXVB3jV2mAbhjb90Oo680o+0wx2J2sKjKWTJq3IbuDhuUJVxk9?= =?us-ascii?Q?vqzsihd/nNtUqWwKOU1VVQSW0WlDPL9myn3bd2jjUhXCWqTthgtUikFgPrOc?= =?us-ascii?Q?nW4Wxq5tJjdt/mLf1bgACUiiTCmZPPcb2XANrJxBchapQkE3WT4mr+eGkoru?= =?us-ascii?Q?TuS+ov0+yB196cFN53NZNkSf5K90OYmT6SQ/iFlbwqdZIrTllH7cBqv8dbKi?= =?us-ascii?Q?cp2JEFyQ76ojlOO8HHtN0YMz10GMeuQ4Ee2VQXfZMqt3AXyRWaR0bpV6XwRz?= =?us-ascii?Q?zm6mxNJwwVupeO9IvB4=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(7416014)(376014)(7053199007);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:06.7343 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2ebd66e5-e80c-45d3-7a50-08de1ecf8aee X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: SG2PEPF000B66CC.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYPPR06MB8136 Content-Type: text/plain; charset="utf-8" From: Manikandan K Pillai Add support for Cadence PCIe RP configuration for High Performance Architecture (HPA) controllers. The Cadence High Performance controllers are the latest PCIe controllers that have support for DMA, optional IDE and updated register set. Add register definitions for High Performance Architecture (HPA) PCIe controllers. Signed-off-by: Manikandan K Pillai --- drivers/pci/controller/cadence/Makefile | 4 +- .../cadence/pcie-cadence-host-hpa.c | 368 ++++++++++++++++++ .../cadence/pcie-cadence-hpa-regs.h | 193 +++++++++ .../pci/controller/cadence/pcie-cadence-hpa.c | 167 ++++++++ .../controller/cadence/pcie-cadence-plat.c | 4 - drivers/pci/controller/cadence/pcie-cadence.c | 11 + drivers/pci/controller/cadence/pcie-cadence.h | 188 ++++++++- 7 files changed, 914 insertions(+), 21 deletions(-) create mode 100644 drivers/pci/controller/cadence/pcie-cadence-host-hpa.c create mode 100644 drivers/pci/controller/cadence/pcie-cadence-hpa-regs.h create mode 100644 drivers/pci/controller/cadence/pcie-cadence-hpa.c diff --git a/drivers/pci/controller/cadence/Makefile b/drivers/pci/controll= er/cadence/Makefile index 91ffdbfd3aaa..30189045a166 100644 --- a/drivers/pci/controller/cadence/Makefile +++ b/drivers/pci/controller/cadence/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 -pcie-cadence-mod-y :=3D pcie-cadence.o -pcie-cadence-host-mod-y :=3D pcie-cadence-host-common.o pcie-cadence-host.o +pcie-cadence-mod-y :=3D pcie-cadence-hpa.o pcie-cadence.o +pcie-cadence-host-mod-y :=3D pcie-cadence-host-common.o pcie-cadence-host.= o pcie-cadence-host-hpa.o pcie-cadence-ep-mod-y :=3D pcie-cadence-ep.o =20 obj-$(CONFIG_PCIE_CADENCE) =3D pcie-cadence-mod.o diff --git a/drivers/pci/controller/cadence/pcie-cadence-host-hpa.c b/drive= rs/pci/controller/cadence/pcie-cadence-host-hpa.c new file mode 100644 index 000000000000..0f540bed58e8 --- /dev/null +++ b/drivers/pci/controller/cadence/pcie-cadence-host-hpa.c @@ -0,0 +1,368 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Cadence PCIe host controller driver. + * + * Copyright (c) 2024, Cadence Design Systems + * Author: Manikandan K Pillai + */ +#include +#include +#include +#include +#include +#include +#include + +#include "pcie-cadence.h" +#include "pcie-cadence-host-common.h" + +static u8 bar_aperture_mask[] =3D { + [RP_BAR0] =3D 0x3F, + [RP_BAR1] =3D 0x3F, +}; + +void __iomem *cdns_pci_hpa_map_bus(struct pci_bus *bus, unsigned int devfn, + int where) +{ + struct pci_host_bridge *bridge =3D pci_find_host_bridge(bus); + struct cdns_pcie_rc *rc =3D pci_host_bridge_priv(bridge); + struct cdns_pcie *pcie =3D &rc->pcie; + unsigned int busn =3D bus->number; + u32 addr0, desc0, desc1, ctrl0; + u32 regval; + + if (pci_is_root_bus(bus)) { + /* + * Only the root port (devfn =3D=3D 0) is connected to this bus. + * All other PCI devices are behind some bridge hence on another + * bus. + */ + if (devfn) + return NULL; + + return pcie->reg_base + (where & 0xfff); + } + + /* Clear AXI link-down status */ + regval =3D cdns_pcie_hpa_readl(pcie, REG_BANK_AXI_SLAVE, CDNS_PCIE_HPA_AT= _LINKDOWN); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, CDNS_PCIE_HPA_AT_LINKDOWN, + (regval & ~GENMASK(0, 0))); + + /* Update Output registers for AXI region 0 */ + addr0 =3D CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_NBITS(12) | + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_DEVFN(devfn) | + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_BUS(busn); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(0), addr0); + + desc1 =3D cdns_pcie_hpa_readl(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC1(0)); + desc1 &=3D ~CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN_MASK; + desc1 |=3D CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(0); + ctrl0 =3D CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_BUS | + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_DEV_FN; + + if (busn =3D=3D bridge->busnr + 1) + desc0 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_CONF_TYPE0; + else + desc0 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_CONF_TYPE1; + + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC0(0), desc0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC1(0), desc1); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(0), ctrl0); + + return rc->cfg_base + (where & 0xfff); +} + +static struct pci_ops cdns_pcie_hpa_host_ops =3D { + .map_bus =3D cdns_pci_hpa_map_bus, + .read =3D pci_generic_config_read, + .write =3D pci_generic_config_write, +}; + +static void cdns_pcie_hpa_host_enable_ptm_response(struct cdns_pcie *pcie) +{ + u32 val; + + val =3D cdns_pcie_hpa_readl(pcie, REG_BANK_IP_REG, CDNS_PCIE_HPA_LM_PTM_C= TRL); + cdns_pcie_hpa_writel(pcie, REG_BANK_IP_REG, CDNS_PCIE_HPA_LM_PTM_CTRL, + val | CDNS_PCIE_HPA_LM_PTM_CTRL_PTMRSEN); +} + +static int cdns_pcie_hpa_host_bar_ib_config(struct cdns_pcie_rc *rc, + enum cdns_pcie_rp_bar bar, + u64 cpu_addr, u64 size, + unsigned long flags) +{ + struct cdns_pcie *pcie =3D &rc->pcie; + u32 addr0, addr1, aperture, value; + + if (!rc->avail_ib_bar[bar]) + return -ENODEV; + + rc->avail_ib_bar[bar] =3D false; + + aperture =3D ilog2(size); + if (bar =3D=3D RP_NO_BAR) { + addr0 =3D CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0_NBITS(aperture) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 =3D upper_32_bits(cpu_addr); + } else { + addr0 =3D lower_32_bits(cpu_addr); + addr1 =3D upper_32_bits(cpu_addr); + } + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_MASTER, + CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0(bar), addr0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_MASTER, + CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR1(bar), addr1); + + if (bar =3D=3D RP_NO_BAR) + bar =3D (enum cdns_pcie_rp_bar)BAR_0; + + value =3D cdns_pcie_hpa_readl(pcie, REG_BANK_IP_CFG_CTRL_REG, CDNS_PCIE_H= PA_LM_RC_BAR_CFG); + value &=3D ~(HPA_LM_RC_BAR_CFG_CTRL_MEM_64BITS(bar) | + HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_64BITS(bar) | + HPA_LM_RC_BAR_CFG_CTRL_MEM_32BITS(bar) | + HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_32BITS(bar) | + HPA_LM_RC_BAR_CFG_APERTURE(bar, bar_aperture_mask[bar] + 7)); + if (size + cpu_addr >=3D SZ_4G) { + value |=3D HPA_LM_RC_BAR_CFG_CTRL_MEM_64BITS(bar); + if ((flags & IORESOURCE_PREFETCH)) + value |=3D HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_64BITS(bar); + } else { + value |=3D HPA_LM_RC_BAR_CFG_CTRL_MEM_32BITS(bar); + if ((flags & IORESOURCE_PREFETCH)) + value |=3D HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_32BITS(bar); + } + + value |=3D HPA_LM_RC_BAR_CFG_APERTURE(bar, aperture); + cdns_pcie_hpa_writel(pcie, REG_BANK_IP_CFG_CTRL_REG, CDNS_PCIE_HPA_LM_RC_= BAR_CFG, value); + + return 0; +} + +static int cdns_pcie_hpa_host_init_root_port(struct cdns_pcie_rc *rc) +{ + struct cdns_pcie *pcie =3D &rc->pcie; + u32 value, ctrl; + + /* + * Set the root port BAR configuration register: + * - disable both BAR0 and BAR1 + * - enable Prefetchable Memory Base and Limit registers in type 1 + * config space (64 bits) + * - enable IO Base and Limit registers in type 1 config + * space (32 bits) + */ + + ctrl =3D CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_DISABLED; + value =3D CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR0_CTRL(ctrl) | + CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR1_CTRL(ctrl) | + CDNS_PCIE_HPA_LM_RC_BAR_CFG_PREFETCH_MEM_ENABLE | + CDNS_PCIE_HPA_LM_RC_BAR_CFG_PREFETCH_MEM_64BITS | + CDNS_PCIE_HPA_LM_RC_BAR_CFG_IO_ENABLE | + CDNS_PCIE_HPA_LM_RC_BAR_CFG_IO_32BITS; + cdns_pcie_hpa_writel(pcie, REG_BANK_IP_CFG_CTRL_REG, + CDNS_PCIE_HPA_LM_RC_BAR_CFG, value); + + if (rc->vendor_id !=3D 0xffff) + cdns_pcie_hpa_rp_writew(pcie, PCI_VENDOR_ID, rc->vendor_id); + + if (rc->device_id !=3D 0xffff) + cdns_pcie_hpa_rp_writew(pcie, PCI_DEVICE_ID, rc->device_id); + + cdns_pcie_hpa_rp_writeb(pcie, PCI_CLASS_REVISION, 0); + cdns_pcie_hpa_rp_writeb(pcie, PCI_CLASS_PROG, 0); + cdns_pcie_hpa_rp_writew(pcie, PCI_CLASS_DEVICE, PCI_CLASS_BRIDGE_PCI); + + /* Enable bus mastering */ + value =3D cdns_pcie_hpa_readl(pcie, REG_BANK_RP, PCI_COMMAND); + value |=3D (PCI_COMMAND_MEMORY | PCI_COMMAND_IO | PCI_COMMAND_MASTER); + cdns_pcie_hpa_writel(pcie, REG_BANK_RP, PCI_COMMAND, value); + return 0; +} + +static void cdns_pcie_hpa_create_region_for_cfg(struct cdns_pcie_rc *rc) +{ + struct cdns_pcie *pcie =3D &rc->pcie; + struct pci_host_bridge *bridge =3D pci_host_bridge_from_priv(rc); + struct resource *cfg_res =3D rc->cfg_res; + struct resource_entry *entry; + u64 cpu_addr =3D cfg_res->start; + u32 addr0, addr1, desc1; + int busnr =3D 0; + + entry =3D resource_list_first_type(&bridge->windows, IORESOURCE_BUS); + if (entry) + busnr =3D entry->res->start; + + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_TAG_MANAGEMENT, 0x01000000); + /* + * Reserve region 0 for PCI configure space accesses: + * OB_REGION_PCI_ADDR0 and OB_REGION_DESC0 are updated dynamically by + * cdns_pci_map_bus(), other region registers are set here once for all + */ + desc1 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS(busnr); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(0), 0x0); + /* Type-1 CFG */ + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC0(0), 0x05000000); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC1(0), desc1); + + addr0 =3D CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS(12) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 =3D upper_32_bits(cpu_addr); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(0), addr0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(0), addr1); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(0), 0x06000000); +} + +static int cdns_pcie_hpa_host_init_address_translation(struct cdns_pcie_rc= *rc) +{ + struct cdns_pcie *pcie =3D &rc->pcie; + struct pci_host_bridge *bridge =3D pci_host_bridge_from_priv(rc); + struct resource_entry *entry; + int r =3D 0, busnr =3D 0; + + if (!rc->ecam_supported) + cdns_pcie_hpa_create_region_for_cfg(rc); + + entry =3D resource_list_first_type(&bridge->windows, IORESOURCE_BUS); + if (entry) + busnr =3D entry->res->start; + + r++; + if (pcie->msg_res) { + cdns_pcie_hpa_set_outbound_region_for_normal_msg(pcie, busnr, 0, r, + pcie->msg_res->start); + + r++; + } + resource_list_for_each_entry(entry, &bridge->windows) { + struct resource *res =3D entry->res; + u64 pci_addr =3D res->start - entry->offset; + + if (resource_type(res) =3D=3D IORESOURCE_IO) + cdns_pcie_hpa_set_outbound_region(pcie, busnr, 0, r, + true, + pci_pio_to_address(res->start), + pci_addr, + resource_size(res)); + else + cdns_pcie_hpa_set_outbound_region(pcie, busnr, 0, r, + false, + res->start, + pci_addr, + resource_size(res)); + + r++; + } + + if (rc->no_inbound_map) + return 0; + else + return cdns_pcie_host_map_dma_ranges(rc, cdns_pcie_hpa_host_bar_ib_confi= g); +} + +static int cdns_pcie_hpa_host_init(struct cdns_pcie_rc *rc) +{ + int err; + + err =3D cdns_pcie_hpa_host_init_root_port(rc); + if (err) + return err; + + return cdns_pcie_hpa_host_init_address_translation(rc); +} + +int cdns_pcie_hpa_host_link_setup(struct cdns_pcie_rc *rc) +{ + struct cdns_pcie *pcie =3D &rc->pcie; + struct device *dev =3D rc->pcie.dev; + int ret; + + if (rc->quirk_detect_quiet_flag) + cdns_pcie_hpa_detect_quiet_min_delay_set(&rc->pcie); + + cdns_pcie_hpa_host_enable_ptm_response(pcie); + + ret =3D cdns_pcie_start_link(pcie); + if (ret) { + dev_err(dev, "Failed to start link\n"); + return ret; + } + + ret =3D cdns_pcie_host_wait_for_link(pcie, cdns_pcie_hpa_link_up); + if (ret) + dev_dbg(dev, "PCIe link never came up\n"); + + return ret; +} +EXPORT_SYMBOL_GPL(cdns_pcie_hpa_host_link_setup); + +int cdns_pcie_hpa_host_setup(struct cdns_pcie_rc *rc) +{ + struct device *dev =3D rc->pcie.dev; + struct platform_device *pdev =3D to_platform_device(dev); + struct pci_host_bridge *bridge; + enum cdns_pcie_rp_bar bar; + struct cdns_pcie *pcie; + struct resource *res; + int ret; + + bridge =3D pci_host_bridge_from_priv(rc); + if (!bridge) + return -ENOMEM; + + pcie =3D &rc->pcie; + pcie->is_rc =3D true; + + if (!pcie->reg_base) { + pcie->reg_base =3D devm_platform_ioremap_resource_byname(pdev, "reg"); + if (IS_ERR(pcie->reg_base)) { + dev_err(dev, "missing \"reg\"\n"); + return PTR_ERR(pcie->reg_base); + } + } + + /* ECAM config space is remapped at glue layer */ + if (!rc->cfg_base) { + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "cfg"); + rc->cfg_base =3D devm_pci_remap_cfg_resource(dev, res); + if (IS_ERR(rc->cfg_base)) + return PTR_ERR(rc->cfg_base); + rc->cfg_res =3D res; + } + + /* Put EROM Bar aperture to 0 */ + cdns_pcie_hpa_writel(pcie, REG_BANK_IP_CFG_CTRL_REG, CDNS_PCIE_EROM, 0x0); + + ret =3D cdns_pcie_hpa_host_link_setup(rc); + if (ret) + return ret; + + for (bar =3D RP_BAR0; bar <=3D RP_NO_BAR; bar++) + rc->avail_ib_bar[bar] =3D true; + + ret =3D cdns_pcie_hpa_host_init(rc); + if (ret) + return ret; + + if (!bridge->ops) + bridge->ops =3D &cdns_pcie_hpa_host_ops; + + return pci_host_probe(bridge); +} +EXPORT_SYMBOL_GPL(cdns_pcie_hpa_host_setup); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Cadence PCIe host controller driver"); diff --git a/drivers/pci/controller/cadence/pcie-cadence-hpa-regs.h b/drive= rs/pci/controller/cadence/pcie-cadence-hpa-regs.h new file mode 100644 index 000000000000..026e131600de --- /dev/null +++ b/drivers/pci/controller/cadence/pcie-cadence-hpa-regs.h @@ -0,0 +1,193 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Cadence PCIe controller driver. + * + * Copyright (c) 2024, Cadence Design Systems + * Author: Manikandan K Pillai + */ +#ifndef _PCIE_CADENCE_HPA_REGS_H +#define _PCIE_CADENCE_HPA_REGS_H + +#include +#include +#include +#include +#include + +/* High Performance Architecture (HPA) PCIe controller registers */ +#define CDNS_PCIE_HPA_IP_REG_BANK 0x01000000 +#define CDNS_PCIE_HPA_IP_CFG_CTRL_REG_BANK 0x01003C00 +#define CDNS_PCIE_HPA_IP_AXI_MASTER_COMMON 0x02020000 + +/* Address Translation Registers */ +#define CDNS_PCIE_HPA_AXI_SLAVE 0x03000000 +#define CDNS_PCIE_HPA_AXI_MASTER 0x03002000 + +/* Root Port register base address */ +#define CDNS_PCIE_HPA_RP_BASE 0x0 + +#define CDNS_PCIE_HPA_LM_ID 0x1420 + +/* Endpoint Function BARs */ +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG(bar, fn) \ + (((bar) < BAR_3) ? CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG0(fn) : \ + CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG1(fn)) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG0(pfn) (0x4000 * (pfn)) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG1(pfn) ((0x4000 * (pfn)) + 0x04) +#define CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG(bar, fn) \ + (((bar) < BAR_3) ? CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG0(fn) : \ + CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG1(fn)) +#define CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG0(vfn) ((0x4000 * (vfn)) + 0x08) +#define CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG1(vfn) ((0x4000 * (vfn)) + 0x0C) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(f) \ + (GENMASK(5, 0) << (0x4 + (f) * 10)) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_APERTURE(b, a) \ + (((a) << (4 + ((b) * 10))) & (CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_APERTU= RE_MASK(b))) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(f) \ + (GENMASK(3, 0) << ((f) * 10)) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, c) \ + (((c) << ((b) * 10)) & (CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)= )) + +/* Endpoint Function Configuration Register */ +#define CDNS_PCIE_HPA_LM_EP_FUNC_CFG 0x02C0 + +/* Root Complex BAR Configuration Register */ +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG 0x14 +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR0_APERTURE_MASK GENMASK(9, 4) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR0_APERTURE(a) \ + FIELD_PREP(CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR0_APERTURE_MASK, a) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR0_CTRL_MASK GENMASK(3, 0) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR0_CTRL(c) \ + FIELD_PREP(CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR0_CTRL_MASK, c) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR1_APERTURE_MASK GENMASK(19, 14) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR1_APERTURE(a) \ + FIELD_PREP(CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR1_APERTURE_MASK, a) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR1_CTRL_MASK GENMASK(13, 10) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR1_CTRL(c) \ + FIELD_PREP(CDNS_PCIE_HPA_LM_RC_BAR_CFG_BAR1_CTRL_MASK, c) + +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_PREFETCH_MEM_ENABLE BIT(20) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_PREFETCH_MEM_64BITS BIT(21) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_IO_ENABLE BIT(22) +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_IO_32BITS BIT(23) + +/* BAR control values applicable to both Endpoint Function and Root Comple= x */ +#define CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_DISABLED 0x0 +#define CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_IO_32BITS 0x3 +#define CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_MEM_32BITS 0x1 +#define CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS 0x9 +#define CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_MEM_64BITS 0x5 +#define CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS 0xD + +#define HPA_LM_RC_BAR_CFG_CTRL_DISABLED(bar) \ + (CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_DISABLED << ((bar) * 10)) +#define HPA_LM_RC_BAR_CFG_CTRL_IO_32BITS(bar) \ + (CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_IO_32BITS << ((bar) * 10)) +#define HPA_LM_RC_BAR_CFG_CTRL_MEM_32BITS(bar) \ + (CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_MEM_32BITS << ((bar) * 10)) +#define HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_32BITS(bar) \ + (CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS << ((bar) * 10)) +#define HPA_LM_RC_BAR_CFG_CTRL_MEM_64BITS(bar) \ + (CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_MEM_64BITS << ((bar) * 10)) +#define HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_64BITS(bar) \ + (CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS << ((bar) * 10)) +#define HPA_LM_RC_BAR_CFG_APERTURE(bar, aperture) \ + (((aperture) - 7) << (((bar) * 10) + 4)) + +#define CDNS_PCIE_HPA_LM_PTM_CTRL 0x0520 +#define CDNS_PCIE_HPA_LM_PTM_CTRL_PTMRSEN BIT(17) + +/* Root Port Registers PCI config space for root port function */ +#define CDNS_PCIE_HPA_RP_CAP_OFFSET 0xC0 + +/* Region r Outbound AXI to PCIe Address Translation Register 0 */ +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(r) (0x1010 + ((r) = & 0x1F) * 0x0080) +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_NBITS_MASK GENMASK(5, 0) +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_NBITS(nbits) \ + (((nbits) - 1) & CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_NBITS_MASK) +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK GENMASK(23, 16) +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_DEVFN(devfn) \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK, devfn) +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_BUS_MASK GENMASK(31, 24) +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_BUS(bus) \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_BUS_MASK, bus) + +/* Region r Outbound AXI to PCIe Address Translation Register 1 */ +#define CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(r) (0x1014 + ((r) = & 0x1F) * 0x0080) + +/* Region r Outbound PCIe Descriptor Register */ +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0(r) (0x1008 + ((r) = & 0x1F) * 0x0080) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MASK GENMASK(28, 24) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MEM \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MASK, 0x0) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_IO \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MASK, 0x2) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_CONF_TYPE0 \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MASK, 0x4) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_CONF_TYPE1 \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MASK, 0x5) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_NORMAL_MSG \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MASK, 0x10) + +/* Region r Outbound PCIe Descriptor Register */ +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC1(r) (0x100C + ((r) & 0x1F) = * 0x0080) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS_MASK GENMASK(31, 24) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS(bus) \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS_MASK, bus) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN_MASK GENMASK(23, 16) +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(devfn) \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN_MASK, devfn) + +#define CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(r) (0x1018 + ((r) & 0x1F)= * 0x0080) +#define CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_BUS BIT(26) +#define CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_DEV_FN BIT(25) + +/* Region r AXI Region Base Address Register 0 */ +#define CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(r) (0x1000 + ((r) & 0x1F)= * 0x0080) +#define CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS_MASK GENMASK(5, 0) +#define CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) \ + (((nbits) - 1) & CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS_MASK) + +/* Region r AXI Region Base Address Register 1 */ +#define CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(r) (0x1004 + ((r) & 0x1F)= * 0x0080) + +/* Root Port BAR Inbound PCIe to AXI Address Translation Register */ +#define CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0(bar) (((bar) * 0x000= 8)) +#define CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0_NBITS_MASK GENMASK(5, 0) +#define CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0_NBITS(nbits) \ + (((nbits) - 1) & CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0_NBITS_MASK) +#define CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR1(bar) (0x04 + ((bar) = * 0x0008)) + +/* AXI link down register */ +#define CDNS_PCIE_HPA_AT_LINKDOWN 0x04 + +/* + * Physical Layer Configuration Register 0 + * This register contains the parameters required for functional setup + * of Physical Layer. + */ +#define CDNS_PCIE_HPA_PHY_LAYER_CFG0 0x0400 +#define CDNS_PCIE_HPA_DETECT_QUIET_MIN_DELAY_MASK GENMASK(26, 24) +#define CDNS_PCIE_HPA_DETECT_QUIET_MIN_DELAY(delay) \ + FIELD_PREP(CDNS_PCIE_HPA_DETECT_QUIET_MIN_DELAY_MASK, delay) +#define CDNS_PCIE_HPA_LINK_TRNG_EN_MASK GENMASK(27, 27) + +#define CDNS_PCIE_HPA_PHY_DBG_STS_REG0 0x0420 + +#define CDNS_PCIE_HPA_RP_MAX_IB 0x3 +#define CDNS_PCIE_HPA_MAX_OB 15 + +/* Endpoint Function BAR Inbound PCIe to AXI Address Translation Register = */ +#define CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar) (((fn) * 0x0080) + = ((bar) * 0x0008)) +#define CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar) (0x4 + ((fn) * 0x00= 80) + ((bar) * 0x0008)) + +/* Miscellaneous offsets definitions */ +#define CDNS_PCIE_HPA_TAG_MANAGEMENT 0x0 +#define CDNS_PCIE_HPA_SLAVE_RESP 0x100 + +#define I_ROOT_PORT_REQ_ID_REG 0x141c +#define LM_HAL_SBSA_CTRL 0x1170 + +#define I_PCIE_BUS_NUMBERS (CDNS_PCIE_HPA_RP_BASE + 0x18) +#define CDNS_PCIE_EROM 0x18 +#endif /* _PCIE_CADENCE_HPA_REGS_H */ diff --git a/drivers/pci/controller/cadence/pcie-cadence-hpa.c b/drivers/pc= i/controller/cadence/pcie-cadence-hpa.c new file mode 100644 index 000000000000..f60a16938265 --- /dev/null +++ b/drivers/pci/controller/cadence/pcie-cadence-hpa.c @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Cadence PCIe controller driver. + * + * Copyright (c) 2024, Cadence Design Systems + * Author: Manikandan K Pillai + */ +#include +#include + +#include "pcie-cadence.h" + +bool cdns_pcie_hpa_link_up(struct cdns_pcie *pcie) +{ + u32 pl_reg_val; + + pl_reg_val =3D cdns_pcie_hpa_readl(pcie, REG_BANK_IP_REG, CDNS_PCIE_HPA_P= HY_DBG_STS_REG0); + if (pl_reg_val & GENMASK(0, 0)) + return true; + return false; +} +EXPORT_SYMBOL_GPL(cdns_pcie_hpa_link_up); + +void cdns_pcie_hpa_detect_quiet_min_delay_set(struct cdns_pcie *pcie) +{ + u32 delay =3D 0x3; + u32 ltssm_control_cap; + + /* Set the LTSSM Detect Quiet state min. delay to 2ms */ + ltssm_control_cap =3D cdns_pcie_hpa_readl(pcie, REG_BANK_IP_REG, + CDNS_PCIE_HPA_PHY_LAYER_CFG0); + ltssm_control_cap =3D ((ltssm_control_cap & + ~CDNS_PCIE_HPA_DETECT_QUIET_MIN_DELAY_MASK) | + CDNS_PCIE_HPA_DETECT_QUIET_MIN_DELAY(delay)); + + cdns_pcie_hpa_writel(pcie, REG_BANK_IP_REG, + CDNS_PCIE_HPA_PHY_LAYER_CFG0, ltssm_control_cap); +} +EXPORT_SYMBOL_GPL(cdns_pcie_hpa_detect_quiet_min_delay_set); + +void cdns_pcie_hpa_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u= 8 fn, + u32 r, bool is_io, + u64 cpu_addr, u64 pci_addr, size_t size) +{ + /* + * roundup_pow_of_two() returns an unsigned long, which is not suited + * for 64bit values + */ + u64 sz =3D 1ULL << fls64(size - 1); + int nbits =3D ilog2(sz); + u32 addr0, addr1, desc0, desc1, ctrl0; + + if (nbits < 8) + nbits =3D 8; + + /* Set the PCI address */ + addr0 =3D CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_NBITS(nbits) | + (lower_32_bits(pci_addr) & GENMASK(31, 8)); + addr1 =3D upper_32_bits(pci_addr); + + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(r), addr0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(r), addr1); + + /* Set the PCIe header descriptor */ + if (is_io) + desc0 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_IO; + else + desc0 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MEM; + desc1 =3D 0; + ctrl0 =3D 0; + + /* + * Whether Bit [26] is set or not inside DESC0 register of the outbound + * PCIe descriptor, the PCI function number must be set into + * Bits [31:24] of DESC1 anyway. + * + * In Root Complex mode, the function number is always 0 but in Endpoint + * mode, the PCIe controller may support more than one function. This + * function number needs to be set properly into the outbound PCIe + * descriptor. + * + * Besides, setting Bit [26] is mandatory when in Root Complex mode: + * then the driver must provide the bus, resp. device, number in + * Bits [31:24] of DESC1, resp. Bits[23:16] of DESC0. Like the function + * number, the device number is always 0 in Root Complex mode. + * + * However when in Endpoint mode, we can clear Bit [26] of DESC0, hence + * the PCIe controller will use the captured values for the bus and + * device numbers. + */ + if (pcie->is_rc) { + /* The device and function numbers are always 0 */ + desc1 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS(busnr) | + CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(0); + ctrl0 =3D CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_BUS | + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_DEV_FN; + } else { + /* + * Use captured values for bus and device numbers but still + * need to set the function number + */ + desc1 |=3D CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(fn); + } + + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC0(r), desc0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC1(r), desc1); + + addr0 =3D CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 =3D upper_32_bits(cpu_addr); + + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(r), addr0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(r), addr1); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(r), ctrl0); +} +EXPORT_SYMBOL_GPL(cdns_pcie_hpa_set_outbound_region); + +void cdns_pcie_hpa_set_outbound_region_for_normal_msg(struct cdns_pcie *pc= ie, + u8 busnr, u8 fn, + u32 r, u64 cpu_addr) +{ + u32 addr0, addr1, desc0, desc1, ctrl0; + + desc0 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_NORMAL_MSG; + desc1 =3D 0; + ctrl0 =3D 0; + + /* See cdns_pcie_set_outbound_region() comments above */ + if (pcie->is_rc) { + desc1 =3D CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS(busnr) | + CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(0); + ctrl0 =3D CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_BUS | + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_DEV_FN; + } else { + desc1 |=3D CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(fn); + } + + addr0 =3D CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS(17) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 =3D upper_32_bits(cpu_addr); + + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(r), 0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(r), 0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC0(r), desc0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_DESC1(r), desc1); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(r), addr0); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(r), addr1); + cdns_pcie_hpa_writel(pcie, REG_BANK_AXI_SLAVE, + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(r), ctrl0); +} +EXPORT_SYMBOL_GPL(cdns_pcie_hpa_set_outbound_region_for_normal_msg); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Cadence PCIe controller driver"); diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/p= ci/controller/cadence/pcie-cadence-plat.c index ebd5c3afdfcd..b067a3296dd3 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-plat.c +++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c @@ -22,10 +22,6 @@ struct cdns_plat_pcie { struct cdns_pcie *pcie; }; =20 -struct cdns_plat_pcie_of_data { - bool is_rc; -}; - static const struct of_device_id cdns_plat_pcie_of_match[]; =20 static u64 cdns_plat_cpu_addr_fixup(struct cdns_pcie *pcie, u64 cpu_addr) diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/co= ntroller/cadence/pcie-cadence.c index 8186947134d6..e6f1a4ac0fb7 100644 --- a/drivers/pci/controller/cadence/pcie-cadence.c +++ b/drivers/pci/controller/cadence/pcie-cadence.c @@ -23,6 +23,17 @@ u16 cdns_pcie_find_ext_capability(struct cdns_pcie *pcie= , u8 cap) } EXPORT_SYMBOL_GPL(cdns_pcie_find_ext_capability); =20 +bool cdns_pcie_linkup(struct cdns_pcie *pcie) +{ + u32 pl_reg_val; + + pl_reg_val =3D cdns_pcie_readl(pcie, CDNS_PCIE_LM_BASE); + if (pl_reg_val & GENMASK(0, 0)) + return true; + return false; +} +EXPORT_SYMBOL_GPL(cdns_pcie_linkup); + void cdns_pcie_detect_quiet_min_delay_set(struct cdns_pcie *pcie) { u32 delay =3D 0x3; diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/co= ntroller/cadence/pcie-cadence.h index 0b8ba4ed5913..717921411ed9 100644 --- a/drivers/pci/controller/cadence/pcie-cadence.h +++ b/drivers/pci/controller/cadence/pcie-cadence.h @@ -12,6 +12,7 @@ #include #include #include "pcie-cadence-lga-regs.h" +#include "pcie-cadence-hpa-regs.h" =20 enum cdns_pcie_rp_bar { RP_BAR_UNDEFINED =3D -1, @@ -26,18 +27,57 @@ struct cdns_pcie_rp_ib_bar { }; =20 struct cdns_pcie; +struct cdns_pcie_rc; + +enum cdns_pcie_reg_bank { + REG_BANK_RP, + REG_BANK_IP_REG, + REG_BANK_IP_CFG_CTRL_REG, + REG_BANK_AXI_MASTER_COMMON, + REG_BANK_AXI_MASTER, + REG_BANK_AXI_SLAVE, + REG_BANK_AXI_HLS, + REG_BANK_AXI_RAS, + REG_BANK_AXI_DTI, + REG_BANKS_MAX, +}; =20 struct cdns_pcie_ops { - int (*start_link)(struct cdns_pcie *pcie); - void (*stop_link)(struct cdns_pcie *pcie); - bool (*link_up)(struct cdns_pcie *pcie); + int (*start_link)(struct cdns_pcie *pcie); + void (*stop_link)(struct cdns_pcie *pcie); + bool (*link_up)(struct cdns_pcie *pcie); u64 (*cpu_addr_fixup)(struct cdns_pcie *pcie, u64 cpu_addr); }; =20 +/** + * struct cdns_plat_pcie_of_data - Register bank offset for a platform + * @is_rc: controller is a RC + * @ip_reg_bank_offset: ip register bank start offset + * @ip_cfg_ctrl_reg_offset: ip config control register start offset + * @axi_mstr_common_offset: AXI master common register start offset + * @axi_slave_offset: AXI slave start offset + * @axi_master_offset: AXI master start offset + * @axi_hls_offset: AXI HLS offset start + * @axi_ras_offset: AXI RAS offset + * @axi_dti_offset: AXI DTI offset + */ +struct cdns_plat_pcie_of_data { + u32 is_rc:1; + u32 ip_reg_bank_offset; + u32 ip_cfg_ctrl_reg_offset; + u32 axi_mstr_common_offset; + u32 axi_slave_offset; + u32 axi_master_offset; + u32 axi_hls_offset; + u32 axi_ras_offset; + u32 axi_dti_offset; +}; + /** * struct cdns_pcie - private data for Cadence PCIe controller drivers * @reg_base: IO mapped register base * @mem_res: start/end offsets in the physical system memory to map PCI ac= cesses + * @msg_res: Region for send message to map PCI accesses * @dev: PCIe controller * @is_rc: tell whether the PCIe controller mode is Root Complex or Endpoi= nt. * @phy_count: number of supported PHY devices @@ -45,16 +85,20 @@ struct cdns_pcie_ops { * @link: list of pointers to corresponding device link representations * @ops: Platform-specific ops to control various inputs from Cadence PCIe * wrapper + * @cdns_pcie_reg_offsets: Register bank offsets for different SoC */ struct cdns_pcie { - void __iomem *reg_base; - struct resource *mem_res; - struct device *dev; - bool is_rc; - int phy_count; - struct phy **phy; - struct device_link **link; - const struct cdns_pcie_ops *ops; + void __iomem *reg_base; + void __iomem *mem_base; + struct resource *mem_res; + struct resource *msg_res; + struct device *dev; + bool is_rc; + int phy_count; + struct phy **phy; + struct device_link **link; + const struct cdns_pcie_ops *ops; + const struct cdns_plat_pcie_of_data *cdns_pcie_reg_offsets; }; =20 /** @@ -70,6 +114,8 @@ struct cdns_pcie { * available * @quirk_retrain_flag: Retrain link as quirk for PCIe Gen2 * @quirk_detect_quiet_flag: LTSSM Detect Quiet min delay set as quirk + * @ecam_supported: Whether the ECAM is supported + * @no_inbound_map: Whether inbound mapping is supported */ struct cdns_pcie_rc { struct cdns_pcie pcie; @@ -80,6 +126,8 @@ struct cdns_pcie_rc { bool avail_ib_bar[CDNS_PCIE_RP_MAX_IB]; unsigned int quirk_retrain_flag:1; unsigned int quirk_detect_quiet_flag:1; + unsigned int ecam_supported:1; + unsigned int no_inbound_map:1; }; =20 /** @@ -132,6 +180,43 @@ struct cdns_pcie_ep { unsigned int quirk_disable_flr:1; }; =20 +static inline u32 cdns_reg_bank_to_off(struct cdns_pcie *pcie, enum cdns_p= cie_reg_bank bank) +{ + u32 offset =3D 0x0; + + switch (bank) { + case REG_BANK_RP: + offset =3D 0; + break; + case REG_BANK_IP_REG: + offset =3D pcie->cdns_pcie_reg_offsets->ip_reg_bank_offset; + break; + case REG_BANK_IP_CFG_CTRL_REG: + offset =3D pcie->cdns_pcie_reg_offsets->ip_cfg_ctrl_reg_offset; + break; + case REG_BANK_AXI_MASTER_COMMON: + offset =3D pcie->cdns_pcie_reg_offsets->axi_mstr_common_offset; + break; + case REG_BANK_AXI_MASTER: + offset =3D pcie->cdns_pcie_reg_offsets->axi_master_offset; + break; + case REG_BANK_AXI_SLAVE: + offset =3D pcie->cdns_pcie_reg_offsets->axi_slave_offset; + break; + case REG_BANK_AXI_HLS: + offset =3D pcie->cdns_pcie_reg_offsets->axi_hls_offset; + break; + case REG_BANK_AXI_RAS: + offset =3D pcie->cdns_pcie_reg_offsets->axi_ras_offset; + break; + case REG_BANK_AXI_DTI: + offset =3D pcie->cdns_pcie_reg_offsets->axi_dti_offset; + break; + default: + break; + }; + return offset; +} =20 /* Register access */ static inline void cdns_pcie_writel(struct cdns_pcie *pcie, u32 reg, u32 v= alue) @@ -144,6 +229,27 @@ static inline u32 cdns_pcie_readl(struct cdns_pcie *pc= ie, u32 reg) return readl(pcie->reg_base + reg); } =20 +static inline void cdns_pcie_hpa_writel(struct cdns_pcie *pcie, + enum cdns_pcie_reg_bank bank, + u32 reg, + u32 value) +{ + u32 offset =3D cdns_reg_bank_to_off(pcie, bank); + + reg +=3D offset; + writel(value, pcie->reg_base + reg); +} + +static inline u32 cdns_pcie_hpa_readl(struct cdns_pcie *pcie, + enum cdns_pcie_reg_bank bank, + u32 reg) +{ + u32 offset =3D cdns_reg_bank_to_off(pcie, bank); + + reg +=3D offset; + return readl(pcie->reg_base + reg); +} + static inline u16 cdns_pcie_readw(struct cdns_pcie *pcie, u32 reg) { return readw(pcie->reg_base + reg); @@ -239,6 +345,29 @@ static inline u16 cdns_pcie_rp_readw(struct cdns_pcie = *pcie, u32 reg) return cdns_pcie_read_sz(addr, 0x2); } =20 +static inline void cdns_pcie_hpa_rp_writeb(struct cdns_pcie *pcie, + u32 reg, u8 value) +{ + void __iomem *addr =3D pcie->reg_base + CDNS_PCIE_HPA_RP_BASE + reg; + + cdns_pcie_write_sz(addr, 0x1, value); +} + +static inline void cdns_pcie_hpa_rp_writew(struct cdns_pcie *pcie, + u32 reg, u16 value) +{ + void __iomem *addr =3D pcie->reg_base + CDNS_PCIE_HPA_RP_BASE + reg; + + cdns_pcie_write_sz(addr, 0x2, value); +} + +static inline u16 cdns_pcie_hpa_rp_readw(struct cdns_pcie *pcie, u32 reg) +{ + void __iomem *addr =3D pcie->reg_base + CDNS_PCIE_HPA_RP_BASE + reg; + + return cdns_pcie_read_sz(addr, 0x2); +} + /* Endpoint Function register access */ static inline void cdns_pcie_ep_fn_writeb(struct cdns_pcie *pcie, u8 fn, u32 reg, u8 value) @@ -303,6 +432,7 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc); void cdns_pcie_host_disable(struct cdns_pcie_rc *rc); void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn, int where); +int cdns_pcie_hpa_host_setup(struct cdns_pcie_rc *rc); #else static inline int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc) { @@ -319,6 +449,11 @@ static inline int cdns_pcie_host_setup(struct cdns_pci= e_rc *rc) return 0; } =20 +static inline int cdns_pcie_hpa_host_setup(struct cdns_pcie_rc *rc) +{ + return 0; +} + static inline void cdns_pcie_host_disable(struct cdns_pcie_rc *rc) { } @@ -333,6 +468,7 @@ static inline void __iomem *cdns_pci_map_bus(struct pci= _bus *bus, unsigned int d #if IS_ENABLED(CONFIG_PCIE_CADENCE_EP) int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep); void cdns_pcie_ep_disable(struct cdns_pcie_ep *ep); +int cdns_pcie_hpa_ep_setup(struct cdns_pcie_ep *ep); #else static inline int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep) { @@ -342,10 +478,17 @@ static inline int cdns_pcie_ep_setup(struct cdns_pcie= _ep *ep) static inline void cdns_pcie_ep_disable(struct cdns_pcie_ep *ep) { } + +static inline int cdns_pcie_hpa_ep_setup(struct cdns_pcie_ep *ep) +{ + return 0; +} + #endif =20 -u8 cdns_pcie_find_capability(struct cdns_pcie *pcie, u8 cap); -u16 cdns_pcie_find_ext_capability(struct cdns_pcie *pcie, u8 cap); +u8 cdns_pcie_find_capability(struct cdns_pcie *pcie, u8 cap); +u16 cdns_pcie_find_ext_capability(struct cdns_pcie *pcie, u8 cap); +bool cdns_pcie_linkup(struct cdns_pcie *pcie); =20 void cdns_pcie_detect_quiet_min_delay_set(struct cdns_pcie *pcie); =20 @@ -359,8 +502,23 @@ void cdns_pcie_set_outbound_region_for_normal_msg(stru= ct cdns_pcie *pcie, =20 void cdns_pcie_reset_outbound_region(struct cdns_pcie *pcie, u32 r); void cdns_pcie_disable_phy(struct cdns_pcie *pcie); -int cdns_pcie_enable_phy(struct cdns_pcie *pcie); -int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie); +int cdns_pcie_enable_phy(struct cdns_pcie *pcie); +int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie); +void cdns_pcie_hpa_detect_quiet_min_delay_set(struct cdns_pcie *pcie); +void cdns_pcie_hpa_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u= 8 fn, + u32 r, bool is_io, + u64 cpu_addr, u64 pci_addr, size_t size); +void cdns_pcie_hpa_set_outbound_region_for_normal_msg(struct cdns_pcie *pc= ie, + u8 busnr, u8 fn, + u32 r, u64 cpu_addr); +int cdns_pcie_hpa_host_link_setup(struct cdns_pcie_rc *rc); +void __iomem *cdns_pci_hpa_map_bus(struct pci_bus *bus, unsigned int devfn, + int where); +int cdns_pcie_hpa_host_start_link(struct cdns_pcie_rc *rc); +int cdns_pcie_hpa_start_link(struct cdns_pcie *pcie); +void cdns_pcie_hpa_stop_link(struct cdns_pcie *pcie); +bool cdns_pcie_hpa_link_up(struct cdns_pcie *pcie); + extern const struct dev_pm_ops cdns_pcie_pm_ops; =20 #endif /* _PCIE_CADENCE_H */ --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11023100.outbound.protection.outlook.com [40.107.44.100]) (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 B712D156677; Sat, 8 Nov 2025 14:03:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.100 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610596; cv=fail; b=TcIL2fjl0TnseL9xAdeapVG0elFVF9vutfqxo0MnDO2V+C1/qsRy72jsywpGR2/eznzQ/Kps4yioTCHU3yKac1GJK23UBoEW1ytMjcLD1lbsio0eRQ9iIQGcKC+zchU1O8ZBgHnofT3eF3xMew3IgSZIKXj+Ijo6BRNpQqcPjgI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610596; c=relaxed/simple; bh=kkkSztwjkWzHvNvHa8cZjDFHKf38e6sJJt9sJWcCEFk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kg30AOcwWh47uhlg76wN5lcvOARKMfHBE+365VTz5V40OjSNuKUBAwtfPcu6sjwPs6c0tL8apFCh1GDbhCroQk4mo/3T+ts5weaWsIuibyzeQuADEwxRHRDDSWrbilmgK6xPoYJ0RAu8YUUy31I728184s4d1KebuHe5DGZF8t0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.44.100 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=v4Hj6Un9ybcqT+HqovbxtyGMXj0QVXoavhzBxuw1K85KqBOIwq1D+p7dcrUH5UPgk0WLVl9zd6EG5aktHj+TXcYymDrrTxwQ+w4w0TZnMjoVoo+6JVwmAS58RTz+WdKpp/c1/MuZIKUaYo2g1U8j97jlGcnU3EsXjdw/kEdgZPwXWnKBDybSbIPtMWQc/RP0smBxd2mRU0HOhngCClwlNiNsocVnYyJDX3qaWga9ZAZKoIgj1MqM+sSAqbCrcLTOf7AgthzuHIpb+lf/d9KoHGjMtlQNLu3GodSjy5aUBu1vM+Skx9IPmOrrvkJPP4Swkxds3MpbwtmsFHH0Odttaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JB39FNr7E8ZDx2fRTsrnz/r0DpHC8LZ/b7gDjjDvJZY=; b=IWi1vgfg/K/dw1P45vjmXvdnN++kabUnTHzYCUgSAtxvRME60ic62FkXYoU54Y7U1VItmKsWs7CiW4HpUFcefcj654d60ic8gYr5tZpff++NqJjTGgeX1ku728Y9hbPAIxryXHkX8qC+d9sYC8rSEj7UzLLa0dWVqKHliye4GSyJHtXkBraYzBnQ5QJo4osajFwbz+tVTehaWhsuEJQlWmnxhShzdaBS/Bkko5t/XmnYA7cN1ZePogUxwhosrZLUZBVP5apPLqTkcs7c8WT04gfUTb4AkPc6NzIscg1uzcKjlVbiXUQK5BO7lyz9sYVMVhY1aRr2Cq3LtdW9YNrp5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PUZP153CA0007.APCP153.PROD.OUTLOOK.COM (2603:1096:301:c2::11) by SEYPR06MB8196.apcprd06.prod.outlook.com (2603:1096:101:2f5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.15; Sat, 8 Nov 2025 14:03:08 +0000 Received: from TY2PEPF0000AB85.apcprd03.prod.outlook.com (2603:1096:301:c2:cafe::9e) by PUZP153CA0007.outlook.office365.com (2603:1096:301:c2::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9320.11 via Frontend Transport; Sat, 8 Nov 2025 14:03:04 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by TY2PEPF0000AB85.mail.protection.outlook.com (10.167.253.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:07 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 212FF40A5A1E; Sat, 8 Nov 2025 22:03:06 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang , Krzysztof Kozlowski Subject: [PATCH v11 05/10] dt-bindings: PCI: Add CIX Sky1 PCIe Root Complex bindings Date: Sat, 8 Nov 2025 22:03:00 +0800 Message-ID: <20251108140305.1120117-6-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PEPF0000AB85:EE_|SEYPR06MB8196:EE_ X-MS-Office365-Filtering-Correlation-Id: 03135996-936d-42c6-4018-08de1ecf8b2b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EOILvl8I1c3oghW3MB3Ya+mkx2pywPLCuWTIPUC7rsE7NVB9B4iag7uS1RBW?= =?us-ascii?Q?zVIvsXGoQgiJvOC1Gw5bI3Ctj2ilNEf1Hz656PKVAVLstaiL7nljje11B5WH?= =?us-ascii?Q?a3WQjHu2NsTeeY74rJ74Mn/9YyTHSIjgEaknsYfhM7A5cKjQORqaJdiLAzcx?= =?us-ascii?Q?x1sRIXO46ige8B9cwE2aaWjMqcNiXOk/qIsAyM9eaF7xogDHKmk+qP62Pj9h?= =?us-ascii?Q?QrS8J9X29zk3w2E1FDGUMy0OcFgR37Te95c+F7BOjHY9cV9X6nTlPTj1TKbE?= =?us-ascii?Q?TneR7nIp5qDHnQUewz1CfOJzkIzHJN2ejTMDMvffscxFPfOY3MtChNZaFKdo?= =?us-ascii?Q?pcZQYPDdoXKhjlPIwfL7Hpgln+IOPdjg+r3tg1RhILX5EXHg4ep36LMJn+ai?= =?us-ascii?Q?f5i9gknt1yUWCbAAUNxeIj4X7/LnSG7mZcjsKIIlKUjAxfrjiUgZnTLyTAF+?= =?us-ascii?Q?SdcKr1Z6P5vL0h0i6eLdgNAYm+eKyuLVkQHbpzWfkwnrVEDPgU3Lpk7k456b?= =?us-ascii?Q?c7JgxYoI6K3HCaNJM6bPdWjyGdvp88er/owZsxIXOocEsA2u4lj6I2KzO5jO?= =?us-ascii?Q?6ZlnPj1yqyEnOIVQe+SvNqWqA4w+FPBQWNMcvlViAwWAff2obS8kEy3Lc54L?= =?us-ascii?Q?d6jVMVwnpjaAniKHiZf7Bpgocx7ZNBH5lfcRNBcEKooMgSV00PffUD9C1bkh?= =?us-ascii?Q?05UYXAfaHnjyozl4707J0wyWEkgTeQQ7bKneDPPHzhI9ptmsFfou00Y2V5xh?= =?us-ascii?Q?Wz16BNvvwM4xJT8OveYDBPfbtSQ480c5VU+urTRxaZ3NSORGUbHw924Swj0X?= =?us-ascii?Q?qtVJ4FLDTmn0u0RQeZnTQH0zVqCcpfpjc5rTJQnvBIXBNN/KmM5+spEQ0HuA?= =?us-ascii?Q?elr12W+hUCHzTRifzHC9lQ1f9xIrsFi7E0uPIjrGjjNDAHHD1d/trUoe75k0?= =?us-ascii?Q?p70hoqZr35LoUBmYkYqXxYiR7klMjaqH5QjV9IyN2p67LdJxg6cZixGyoVDO?= =?us-ascii?Q?tAE67tdQsusZFpk3o0lgEmsuNIYAk7LZ63UUz+vWv07sAkMxhF3Dou2UxxUo?= =?us-ascii?Q?QZnKZGz+4TBWj2YhCnBZEf666hXsw7WOdZeC4OUK/sbRmzHLAcNfuuNZ3bQg?= =?us-ascii?Q?PnUE1T+2FRDDND4o7XGn8xYEpjAG3/Kj2S42A/5AVLtYoWPBugNNO6rBU/RP?= =?us-ascii?Q?rQstmlyYiK/fflOlqCQBsBym+erAAwJyHSJw7EHFghMkp4NpaVIgexfmPHXs?= =?us-ascii?Q?YXVXZsOS4Ech216afINtXHu6JVruPiHCEdCNt6aSSvqwjbhPwC5HGiCQ/zKe?= =?us-ascii?Q?w4s64WO9VULvZX1Ob8zal10xOlqt0ZX7OMcb3HtPhUIP5GJZiiYbDrPlxtwk?= =?us-ascii?Q?bgB47iJ9vIa+Ot+HTTtP0BZY5HksADk0wiUja8676MeN5BVSWjpZ/W4JZwmx?= =?us-ascii?Q?eOjn5aJS4Wuk4udR90veC8F5JGXZFfimul3HpdrET5CtysSKgA2haR964iWE?= =?us-ascii?Q?3jeJVmKEFcv8Y5/K0XOq19yPFP+5JP2mju7D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(36860700013)(1800799024)(82310400026);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:07.2558 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 03135996-936d-42c6-4018-08de1ecf8b2b X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: TY2PEPF0000AB85.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEYPR06MB8196 Content-Type: text/plain; charset="utf-8" From: Hans Zhang Document the bindings for CIX Sky1 PCIe Controller configured in root complex mode with five root port. Supports 4 INTx, MSI and MSI-x interrupts from the ARM GICv3 controller. Signed-off-by: Hans Zhang Reviewed-by: Krzysztof Kozlowski --- .../bindings/pci/cix,sky1-pcie-host.yaml | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Documentation/devicetree/bindings/pci/cix,sky1-pcie-hos= t.yaml diff --git a/Documentation/devicetree/bindings/pci/cix,sky1-pcie-host.yaml = b/Documentation/devicetree/bindings/pci/cix,sky1-pcie-host.yaml new file mode 100644 index 000000000000..b910a42e0843 --- /dev/null +++ b/Documentation/devicetree/bindings/pci/cix,sky1-pcie-host.yaml @@ -0,0 +1,83 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pci/cix,sky1-pcie-host.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: CIX Sky1 PCIe Root Complex + +maintainers: + - Hans Zhang + +description: + PCIe root complex controller based on the Cadence PCIe core. + +allOf: + - $ref: /schemas/pci/pci-host-bridge.yaml# + +properties: + compatible: + const: cix,sky1-pcie-host + + reg: + items: + - description: PCIe controller registers. + - description: ECAM registers. + - description: Remote CIX System Unit strap registers. + - description: Remote CIX System Unit status registers. + - description: Region for sending messages registers. + + reg-names: + items: + - const: reg + - const: cfg + - const: rcsu_strap + - const: rcsu_status + - const: msg + + ranges: + maxItems: 3 + +required: + - compatible + - ranges + - bus-range + - device_type + - interrupt-map + - interrupt-map-mask + - msi-map + +unevaluatedProperties: false + +examples: + - | + #include + + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pcie@a010000 { + compatible =3D "cix,sky1-pcie-host"; + reg =3D <0x00 0x0a010000 0x00 0x10000>, + <0x00 0x2c000000 0x00 0x4000000>, + <0x00 0x0a000300 0x00 0x100>, + <0x00 0x0a000400 0x00 0x100>, + <0x00 0x60000000 0x00 0x00100000>; + reg-names =3D "reg", "cfg", "rcsu_strap", "rcsu_status", "msg"; + ranges =3D <0x01000000 0x00 0x60100000 0x00 0x60100000 0x00 0x= 00100000>, + <0x02000000 0x00 0x60200000 0x00 0x60200000 0x00 0x1f= e00000>, + <0x43000000 0x18 0x00000000 0x18 0x00000000 0x04 0x00= 000000>; + #address-cells =3D <3>; + #size-cells =3D <2>; + bus-range =3D <0xc0 0xff>; + device_type =3D "pci"; + #interrupt-cells =3D <1>; + interrupt-map-mask =3D <0 0 0 0x7>; + interrupt-map =3D <0 0 0 1 &gic 0 0 GIC_SPI 407 IRQ_TYPE_LEVEL= _HIGH 0>, + <0 0 0 2 &gic 0 0 GIC_SPI 408 IRQ_TYPE_LEVEL_H= IGH 0>, + <0 0 0 3 &gic 0 0 GIC_SPI 409 IRQ_TYPE_LEVEL_H= IGH 0>, + <0 0 0 4 &gic 0 0 GIC_SPI 410 IRQ_TYPE_LEVEL_H= IGH 0>; + msi-map =3D <0xc000 &gic_its 0xc000 0x4000>; + }; + }; --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11023108.outbound.protection.outlook.com [52.101.127.108]) (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 204D51FBEA2; Sat, 8 Nov 2025 14:03:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.108 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610596; cv=fail; b=b4Dc1SfdO3G2oaz8J2wTUOUNj8R794qE1x+EkrWO3Pb//JIFtuJwu+5Zlp/5mLe4GqKgdasm6aFaYCKQMfbVIVIbrMfD4hBM+8YvXCVOMrdgvBNOns4BXLJDIX8rUQgd3Wtft2ec9JgYaNe+dpGvpQsUpvgywERYjKwM9jWU2f4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610596; c=relaxed/simple; bh=PEfL7HCtbDHPpTBBl3f0Mrujw2hf06qHECNWPb2kCDQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Lt2sS7yh2QFb+/M23fyTta9LAWxgSdkyud7KeM5SA7rowxoG8E9xkD0wLWE3OO+apvLKnCusBhtjOLO2ff6oAVlm3bPk3rQievQKMcFKaaCLLPKAnBI+Sub13UHDRhbmiRqXJeOBTqX8DJHIudyXLcEzoEQVtxu9vv7AhUtqeVc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=52.101.127.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o2N95WvsV4609FCb4PETBxpzceRYypwXKBVikVblpx/afIaohE/ChjPQEL/fdl4JnZz+3YMddrQ21H5Dab3VjNo78Ge8OnYfbHEAgLm5GCIsVyu2j62ma17ZIiH8YgGJu6CN/scXVHTz6HPipSEcKusmVy8/TmB6CR34yxBWXf9aGuJjDDIF1C/m2yWoDcawzMD5+LWJ1XMXiBIvIsZnb6jU7Lecg+6Z6B9aAIExKzLxl5DW7Qiu34QfIL4yBERuGKXcrXlTj5CwxZ4jbWc3jfAzaD7ElqVZSDWaNScIRKiaALQAdRe2olliCG5h6sMTyp9mJ+a6gMmdV8kLVLylPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aaqs6SUEhJOGWaN6/+rzZk9nGERm84PZqBOu5zbAoVQ=; b=f7Q/IfFTKCj/2b58Bvi4lAkTrCbUpSxALcR9xZ/BGyyeh95IheE2UN52CHbBuF3iNBfL/nypLPsfsdK+BQD0VxwIkCOXLyu5FB7Wji4Tv3W8w0V1SlRK+zW5s63H7FS6kQi2PlIRva/yQaejbCEU2Un8NvwYfGOL7ELw8i6KAcrtiEXFIJ0UOuHRDdKGF8zHAvkDTFLfq2ZOceWEYOa+4c1k3jZfI7y1kBuwLvHA3vZ2slXeMsDuuWAqmT3q616LwZEMMYlRFCtdwI+b7iibSur81M3LTthKitxgZrHZiBzkhkPn4KDd7MMrKSZysMfoS2rP6DOj3K+b1U6yJ9eWdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PS2PR01CA0045.apcprd01.prod.exchangelabs.com (2603:1096:300:58::33) by JH0PR06MB6536.apcprd06.prod.outlook.com (2603:1096:990:3b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Sat, 8 Nov 2025 14:03:10 +0000 Received: from OSA0EPF000000CC.apcprd02.prod.outlook.com (2603:1096:300:58:cafe::39) by PS2PR01CA0045.outlook.office365.com (2603:1096:300:58::33) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:03:37 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by OSA0EPF000000CC.mail.protection.outlook.com (10.167.240.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:07 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 31F074115DE0; Sat, 8 Nov 2025 22:03:06 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang Subject: [PATCH v11 06/10] PCI: Add Cix Technology Vendor and Device ID Date: Sat, 8 Nov 2025 22:03:01 +0800 Message-ID: <20251108140305.1120117-7-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSA0EPF000000CC:EE_|JH0PR06MB6536:EE_ X-MS-Office365-Filtering-Correlation-Id: d2ad984d-656e-4405-3fb4-08de1ecf8ba2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8RWePSguEuInuY15f0a4p3zujhqsDn2iplyKioi7g4LieAuxd/1D6q0aVTgL?= =?us-ascii?Q?L3TU9yUuGYXevjw1nwIWGO+Muj0SGstaET1Jnn2ZqRKCNugKLXCMGobMkoFi?= =?us-ascii?Q?DXjT/5/VlIc1ODtUiUy5Smpq19RiCuXf7eiqcGt+eWmmOYNmagnmljQ7O3zO?= =?us-ascii?Q?LnHixv686diE/6VbNZAeLpOS0eTfJCjOga1Cqiesqcm0Il8Tf83i6eQ3xeDv?= =?us-ascii?Q?h8J7Fk/ey53UbhwA9rfJ5K07HRdpO7W7zOLhI9vM2841/GKqj7OVaVLnj1ZD?= =?us-ascii?Q?SvKWI70GNwuzRg953F8YLUN9v/e8sRryio9LpFrVnyxhmgSZEhQ8QW+5MKGX?= =?us-ascii?Q?en0ROHvh6DDrft01+Qv8BotyE52aiudS8eBTBYPPoGCZV4Z4B1zTmp0lQCVm?= =?us-ascii?Q?NmCtZJyI/y2uPzfB4g5cj99dSVDAAQ6M8N2RwOnzqZ8M0nXgpS2AuUcTZpeC?= =?us-ascii?Q?OKwsXKO0q321YOoD1N1W51+MerLNLUh5jJCTC6R0eAw3t5KaPTtt1LoUBQ37?= =?us-ascii?Q?TODveisnDCw2kbXigR7BFOaGz0IECS9MOsJt6MBB9psUTHqIHQqFzRfol8Qi?= =?us-ascii?Q?WI1ZbteqLxLUXTJFRl/rCBZMAd3DeTV1+JpgORUR37JYII2gQ/GD/lYsqFmA?= =?us-ascii?Q?VA7OfrBYJ6FXeZj3PIOWprc4F5/G5Km6afItQYsFw88CmSqUvkuEyWN4e1qv?= =?us-ascii?Q?K9cuN8Kh77CJVzu7xy1vtZS5iNSkzNtlAwZqP1kCzih4zCErAP+kVtCH559x?= =?us-ascii?Q?LkDgmeMJhksYO9xkwpuR6XIp+85jGicMUTfSENfVP1T88cTyqBGwzzwR6SZj?= =?us-ascii?Q?x4dSk8JS/qkT6BzVZEmsE/3SkwdIuLcUbapUMdxs/2/fgcKa11n0nualCJwj?= =?us-ascii?Q?C1gqDyioEfgqsP3a5BGY/hwfxMxFeg6gxEyY+LE3LDi4V+TxNBvDrkRDAWtA?= =?us-ascii?Q?f2kC/Ydn1lDOymqK+DdufrfefNBUhO0RCEHI1Aow5jLDAEQpmaGoJXAQoSkW?= =?us-ascii?Q?nwfGr2x7a/K9A2pcI5HSBkT+XyK5DR4H7Vr9oPMqo4HRiM2H/2Fir4dW1GAo?= =?us-ascii?Q?pLRgUuXlXQplWLaP6fjPYr/YZ9KGz35U77lMObUHTa+Med/jdgKcL042fp46?= =?us-ascii?Q?jgEd/fXHN3f7W9SA0ehHmwPFya9y+Sst1OOZP8mXNQFQnWc2/uKjALCYMFpo?= =?us-ascii?Q?7exdJOH+Hl6T9DEcYBNugLLdk8ETkqHj3LYB7BkUg8z6FsfLZ6bGCATaDto8?= =?us-ascii?Q?UQO9EYeQbTJbyO4jA3aVaRrR1H7tiQZFdTlZ9YuksGtD3oiu/LpM67JJaMh9?= =?us-ascii?Q?Y8wOEC+I8kTgndByk0Do48eBNXs14Yumi4LxpkzxtSFSH+IVtC5x8zp9hK4q?= =?us-ascii?Q?hqYVl9eLzyxm91COJVs/cSBwhrLWT7PXnsJkqhyAroEuGch8X03hQVWfvxoh?= =?us-ascii?Q?HFZ3YvcMJ/0DhC3d0t+7oh3w1OdJvk3y0eSJV5LNC6EgmQZttfikI9JjdR5q?= =?us-ascii?Q?drF+zZOr2YW8/h1JjKtFkOb2WCKNvsZR/F+xuLIgJOg/YqPDbyZgVgzxWWCE?= =?us-ascii?Q?tUwZQOejfcH34GecxTs=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:07.5510 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d2ad984d-656e-4405-3fb4-08de1ecf8ba2 X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: OSA0EPF000000CC.apcprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR06MB6536 Content-Type: text/plain; charset="utf-8" From: Hans Zhang Add CIX P1 (internal name sky1) as a vendor and device ID for PCI devices. This ID will be used by the CIX Sky1 PCIe host controller driver. Signed-off-by: Hans Zhang Acked-by: Manivannan Sadhasivam --- include/linux/pci_ids.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 92ffc4373f6d..24b04d085920 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2631,6 +2631,9 @@ =20 #define PCI_VENDOR_ID_CXL 0x1e98 =20 +#define PCI_VENDOR_ID_CIX 0x1f6c +#define PCI_DEVICE_ID_CIX_SKY1 0x0001 + #define PCI_VENDOR_ID_TEHUTI 0x1fc9 #define PCI_DEVICE_ID_TEHUTI_3009 0x3009 #define PCI_DEVICE_ID_TEHUTI_3010 0x3010 --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11022114.outbound.protection.outlook.com [40.107.75.114]) (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 26D0C1FCCF8; Sat, 8 Nov 2025 14:03:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610597; cv=fail; b=GNCU0gNkhRMxrDnGgyjwoI9qClsTc+ptZQfisDZdbzBv44qaLe+VVT8syfjli8t/eur2P0AvwlJxRE6R+g/ArmO+Gq99pduOC13La/7QXKthVLVEpNA8FSMPttDuVyHDmwO9bcRF1JAmNGssPflLuga5MEk8v0nf1YjBOwug+g0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610597; c=relaxed/simple; bh=fMLjF2v6NRwp6kKXJLnqD5rLfGbGzfNWYLVUDHTaNPk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=aCdi27Tcz+H7Tk4e+I3bLEn3Ra0DDpMYCexrQrN0FiFlvHU8n0aA6fUPkKDHxnFA85nwhbpqTjmbxj4ygJ8EhwYHAby53chex1KvI/AR+IpRyAu0PjuRzLM8g8pk2zN4QBwhhJTGYqVpNVO/8EOxn5ZrzCXn8oURDp9zlLXm+EM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.75.114 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=arnZG0YkpKkAPq2QP7vg7Bpxi1sG+9n7MOefw2yYKM4/5cr0NuyWA73psJyO7D7rMbvPcqcTE5uJ2vfMy9rvfJtUL1Z+ESmRXX57EJkvCSM8nLukQT4Lu+FByH4KDTgdRGjkzTcmR/gnDgqesugqXYS6Bcjq2/Mc5Pe5Y0dsE5J8vsnOwF/K3G/rNHx9erNtkPf/UijJ8Z8KhRNk3uBAVu4iU5ThS6CMKGpv6Uj8uXzp4KJrLJ6+zKRheir+6xPsQMK6XV7LpeCXBE4GdFhcFAPXf3SQovNaW3T8p63lXehvzRsP5QHqjVuncbyQk2nqPXhFmVcOUfnYYPHvpXFwBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NhSDlBGVDUOfaDh9K4bNJCtKkrWDyCArocKXz1X9/C4=; b=NH4sXtsOAhXNSlp6Mhrkg9SHLFnUqxPyxDGZgeE6r28qn59pIIi00S6W6iDh6uiwBcZa11YJEqDq/4su9Bqr1Rj9B+Bn14/pyUOzWDfCIeJYJ+evcod9idVXy2qYexT1uck3kqTR2wVugy5a9fXvq+uwPqBg/oOAc2WDQQp/joXjMBMvkgbfPOaVjbcXL06lFAl4/zdvKamTdz7Uny4P+jn/2DTjm5ZbM2lwDEc9L/WKjgjGYqE0bJo58Fjs6G1QhykzKMLUsKjwiMzaRNRN33BzvnPnf5cCaSdamYfmzjl9OV06q0s5Gg5wMlDat6VXZAj2EazSnR8QZte0Epbhvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PSBPR02CA0015.apcprd02.prod.outlook.com (2603:1096:301::25) by SEZPR06MB6976.apcprd06.prod.outlook.com (2603:1096:101:1f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.15; Sat, 8 Nov 2025 14:03:11 +0000 Received: from TY2PEPF0000AB87.apcprd03.prod.outlook.com (2603:1096:301:0:cafe::ec) by PSBPR02CA0015.outlook.office365.com (2603:1096:301::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:02:48 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by TY2PEPF0000AB87.mail.protection.outlook.com (10.167.253.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:09 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 40FE54126FFD; Sat, 8 Nov 2025 22:03:06 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang Subject: [PATCH v11 07/10] PCI: sky1: Add PCIe host support for CIX Sky1 Date: Sat, 8 Nov 2025 22:03:02 +0800 Message-ID: <20251108140305.1120117-8-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PEPF0000AB87:EE_|SEZPR06MB6976:EE_ X-MS-Office365-Filtering-Correlation-Id: ae0cc876-074e-4c82-d078-08de1ecf8ce7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|82310400026|376014|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?W+DN/rbrlfz7mG/QcwBq8RLPygrl7pCrsOHj+ubxxmJa7DPg2nRinqSAHG4U?= =?us-ascii?Q?y9Iz9UWN1NMOTfrDiGBXo5w+Y3YIDn46jfrPHbzWDl9sk4HEEi6QzSBMbgtk?= =?us-ascii?Q?uLSIXwH6mZ2Ekaby95AKteMglyy1iDlld+uQ9gGNajg2a9lCheZOpI+KpKYf?= =?us-ascii?Q?eLZkjvkQejK20UDTXj0OcbapjdpXbuYrBeGcL7UzJtSsaUWh8Ndb5IV91aNK?= =?us-ascii?Q?8bh9rtNNM+rW4wl0sl2apSH4rIsp1pzJWmzfnL3c4PDHVL7OOZa1gy28cPi1?= =?us-ascii?Q?PeIOl1mmwSEgPSNO/c3byl4083YjptDuTYQTPT9lRRCoYjrCl8a1E6d8CiFn?= =?us-ascii?Q?ejg+DrX65vTvnHVolbiMzJPtlCXQy4kqCWSc82InobdlFPOLrof1Ohp7yIla?= =?us-ascii?Q?3rKbftcAu7e/1gPD4hMFMELw2nhHPG7eH4IjVJYypYD654F5oCDZjH7ojXAy?= =?us-ascii?Q?VOQIFwZIx2xJOZ2nR8xrReT4h424QH9T6GAQOiiVmQTV6xOVMAMmn2xfQgQc?= =?us-ascii?Q?SrMI/C+dUxdfzvIsYGdbv7Fx7NnnlBN4sRzW/H6lmfAX48BJQxvO8R3M5Gmx?= =?us-ascii?Q?SnMGqHyaWv3FEtFaYrN0BoQynFccR55h6vYhb2Mu4mNqQtYl3Nn4dQxl2tJf?= =?us-ascii?Q?/wR+LRsL6K9P7PYqt+ERS0ryOL3xTL1mAhRHLAnzkWhqxMGxAuHhrW436Hhu?= =?us-ascii?Q?HlZNgdPTBFKACg7jYUl7BPN8DX04XhgclEmwMdiJiKfaXB0vWpsgI+qJZyB/?= =?us-ascii?Q?3K//0HZy0dNhq6uxbQ2xbcjj8TSNJVjbVAUAwuTzvUR9KZaMMSOZHv7r/E5K?= =?us-ascii?Q?Uw/vXQtT+WpFwX6PkA9j/krfQiVSqkA61a+1qG3SgWi9uRx34eWjJfcS/T4U?= =?us-ascii?Q?S8JiDC5Zc7FT10Sa+r5RphwvVIP8LaPWgi2GdcQdjx9Tic0e1A9D/2Vojzfi?= =?us-ascii?Q?H7mfe1gtNKKJS2/G1t1UQSW2mPm24TamBoxDVVoV1QAVIKal/o5A2PnK1d0g?= =?us-ascii?Q?B19jKIgHjP17Ra9owpoDrdxHDu5w6zUaIzYEpfvNWcs+kKk6F2YFBKZkXA8a?= =?us-ascii?Q?SlSlJ/QWoieFZP+Y1UIfNZTZcGmgdaLFth9tq+zeNPifxrdEEFpLenWLrwlV?= =?us-ascii?Q?idpv3si1eqRdjgw8GDvGft2pMe+DnXpMXyvUVrYfoozw/saNoUCMM2FQOrOF?= =?us-ascii?Q?B3b9CG7nWPD62mv8J1ymx9AwYm1zxle19seY5sEOhhBzMKlR/f/Wwh4FbQmu?= =?us-ascii?Q?mHvcR1emTqiIlP6jbQDrfGQrKC4NArPrSLb8ZgfbAJNrdJmPcEl33KjDZXNV?= =?us-ascii?Q?ftyW2XOLPq5XZx3oHyaQHAuqowMTgWQFaCgOM8Z2oZCT0YA0tXsvjiK7eudX?= =?us-ascii?Q?6qjEYceZFvkFaUWDmXDqGO0OuKl0gT6sTJNnLdQM4PdC5aNEBbbAnZVkiNM9?= =?us-ascii?Q?B0mQHMxAysDuqoHcywoddkBirVipA+PD1408eFXRoQ4c0+KfUQKlqDN62zIG?= =?us-ascii?Q?+lhOWFrNjq4XJs4LsJNiZvBByeuz/RL4MVNFrNBw6zVACDO3b6mWSyGbvZQt?= =?us-ascii?Q?CTs7e0Q9xpo3g/B5Q/Q=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(82310400026)(376014)(7416014);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:09.6960 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ae0cc876-074e-4c82-d078-08de1ecf8ce7 X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: TY2PEPF0000AB87.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6976 Content-Type: text/plain; charset="utf-8" From: Hans Zhang Add driver for the CIX Sky1 SoC PCIe Gen4 16 GT/s controller based on the Cadence PCIe core. Supports MSI/MSI-x via GICv3, Single Virtual Channel, Single Function. Signed-off-by: Hans Zhang --- drivers/pci/controller/cadence/Kconfig | 15 ++ drivers/pci/controller/cadence/Makefile | 1 + drivers/pci/controller/cadence/pci-sky1.c | 235 ++++++++++++++++++++++ 3 files changed, 251 insertions(+) create mode 100644 drivers/pci/controller/cadence/pci-sky1.c diff --git a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/controlle= r/cadence/Kconfig index 0b96499ae354..ceff65934e5f 100644 --- a/drivers/pci/controller/cadence/Kconfig +++ b/drivers/pci/controller/cadence/Kconfig @@ -51,6 +51,21 @@ config PCIE_SG2042_HOST controller in host mode. Sophgo SG2042 PCIe controller uses Cadence PCIe core. =20 +config PCI_SKY1_HOST + tristate "CIX SKY1 PCIe controller (host mode)" + depends on OF + select PCIE_CADENCE_HOST + select PCI_ECAM + help + Say Y here if you want to support the CIX SKY1 PCIe platform + controller in host mode. CIX SKY1 PCIe controller uses Cadence + HPA (High Performance Architecture IP [Second generation of + Cadence PCIe IP]) + + This driver requires Cadence PCIe core infrastructure + (PCIE_CADENCE_HOST) and hardware platform adaptation layer + to function. + config PCI_J721E tristate select PCIE_CADENCE_HOST if PCI_J721E_HOST !=3D n diff --git a/drivers/pci/controller/cadence/Makefile b/drivers/pci/controll= er/cadence/Makefile index 30189045a166..b8ec1cecfaa8 100644 --- a/drivers/pci/controller/cadence/Makefile +++ b/drivers/pci/controller/cadence/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_PCIE_CADENCE_EP) +=3D pcie-cadence-ep-mod.o obj-$(CONFIG_PCIE_CADENCE_PLAT) +=3D pcie-cadence-plat.o obj-$(CONFIG_PCI_J721E) +=3D pci-j721e.o obj-$(CONFIG_PCIE_SG2042_HOST) +=3D pcie-sg2042.o +obj-$(CONFIG_PCI_SKY1_HOST) +=3D pci-sky1.o diff --git a/drivers/pci/controller/cadence/pci-sky1.c b/drivers/pci/contro= ller/cadence/pci-sky1.c new file mode 100644 index 000000000000..ceb36bb74771 --- /dev/null +++ b/drivers/pci/controller/cadence/pci-sky1.c @@ -0,0 +1,235 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * PCIe controller driver for CIX's sky1 SoCs + * + * Copyright 2025 Cix Technology Group Co., Ltd. + * Author: Hans Zhang + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "pcie-cadence.h" +#include "pcie-cadence-host-common.h" + +#define STRAP_REG(n) ((n) * 0x04) +#define STATUS_REG(n) ((n) * 0x04) +#define LINK_TRAINING_ENABLE BIT(0) +#define LINK_COMPLETE BIT(0) + +#define SKY1_IP_REG_BANK 0x1000 +#define SKY1_IP_CFG_CTRL_REG_BANK 0x4c00 +#define SKY1_IP_AXI_MASTER_COMMON 0xf000 +#define SKY1_AXI_SLAVE 0x9000 +#define SKY1_AXI_MASTER 0xb000 +#define SKY1_AXI_HLS_REGISTERS 0xc000 +#define SKY1_AXI_RAS_REGISTERS 0xe000 +#define SKY1_DTI_REGISTERS 0xd000 + +#define IP_REG_I_DBG_STS_0 0x420 + +struct sky1_pcie { + struct cdns_pcie *cdns_pcie; + struct cdns_pcie_rc *cdns_pcie_rc; + + struct resource *cfg_res; + struct resource *msg_res; + struct pci_config_window *cfg; + void __iomem *strap_base; + void __iomem *status_base; + void __iomem *reg_base; + void __iomem *cfg_base; + void __iomem *msg_base; +}; + +static int sky1_pcie_resource_get(struct platform_device *pdev, + struct sky1_pcie *pcie) +{ + struct device *dev =3D &pdev->dev; + struct resource *res; + void __iomem *base; + + base =3D devm_platform_ioremap_resource_byname(pdev, "reg"); + if (IS_ERR(base)) + return dev_err_probe(dev, PTR_ERR(base), + "unable to find \"reg\" registers\n"); + pcie->reg_base =3D base; + + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "cfg"); + if (!res) + return dev_err_probe(dev, ENODEV, "unable to get \"cfg\" resource\n"); + pcie->cfg_res =3D res; + + base =3D devm_platform_ioremap_resource_byname(pdev, "rcsu_strap"); + if (IS_ERR(base)) + return dev_err_probe(dev, PTR_ERR(base), + "unable to find \"rcsu_strap\" registers\n"); + pcie->strap_base =3D base; + + base =3D devm_platform_ioremap_resource_byname(pdev, "rcsu_status"); + if (IS_ERR(base)) + return dev_err_probe(dev, PTR_ERR(base), + "unable to find \"rcsu_status\" registers\n"); + pcie->status_base =3D base; + + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "msg"); + if (!res) + return dev_err_probe(dev, ENODEV, "unable to get \"msg\" resource\n"); + pcie->msg_res =3D res; + pcie->msg_base =3D devm_ioremap_resource(dev, res); + if (IS_ERR(pcie->msg_base)) { + return dev_err_probe(dev, PTR_ERR(pcie->msg_base), + "unable to ioremap msg resource\n"); + } + + return 0; +} + +static int sky1_pcie_start_link(struct cdns_pcie *cdns_pcie) +{ + struct sky1_pcie *pcie =3D dev_get_drvdata(cdns_pcie->dev); + u32 val; + + val =3D readl(pcie->strap_base + STRAP_REG(1)); + val |=3D LINK_TRAINING_ENABLE; + writel(val, pcie->strap_base + STRAP_REG(1)); + + return 0; +} + +static void sky1_pcie_stop_link(struct cdns_pcie *cdns_pcie) +{ + struct sky1_pcie *pcie =3D dev_get_drvdata(cdns_pcie->dev); + u32 val; + + val =3D readl(pcie->strap_base + STRAP_REG(1)); + val &=3D ~LINK_TRAINING_ENABLE; + writel(val, pcie->strap_base + STRAP_REG(1)); +} + +static bool sky1_pcie_link_up(struct cdns_pcie *cdns_pcie) +{ + u32 val; + + val =3D cdns_pcie_hpa_readl(cdns_pcie, REG_BANK_IP_REG, + IP_REG_I_DBG_STS_0); + return val & LINK_COMPLETE; +} + +static const struct cdns_pcie_ops sky1_pcie_ops =3D { + .start_link =3D sky1_pcie_start_link, + .stop_link =3D sky1_pcie_stop_link, + .link_up =3D sky1_pcie_link_up, +}; + +static int sky1_pcie_probe(struct platform_device *pdev) +{ + struct cdns_plat_pcie_of_data *reg_off; + struct device *dev =3D &pdev->dev; + struct pci_host_bridge *bridge; + struct cdns_pcie *cdns_pcie; + struct resource_entry *bus; + struct cdns_pcie_rc *rc; + struct sky1_pcie *pcie; + int ret; + + pcie =3D devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL); + if (!pcie) + return -ENOMEM; + + bridge =3D devm_pci_alloc_host_bridge(dev, sizeof(*rc)); + if (!bridge) + return -ENOMEM; + + ret =3D sky1_pcie_resource_get(pdev, pcie); + if (ret < 0) + return ret; + + bus =3D resource_list_first_type(&bridge->windows, IORESOURCE_BUS); + if (!bus) + return -ENODEV; + + pcie->cfg =3D pci_ecam_create(dev, pcie->cfg_res, bus->res, + &pci_generic_ecam_ops); + if (IS_ERR(pcie->cfg)) + return PTR_ERR(pcie->cfg); + + bridge->ops =3D (struct pci_ops *)&pci_generic_ecam_ops.pci_ops; + rc =3D pci_host_bridge_priv(bridge); + rc->ecam_supported =3D 1; + rc->cfg_base =3D pcie->cfg->win; + rc->cfg_res =3D &pcie->cfg->res; + + cdns_pcie =3D &rc->pcie; + cdns_pcie->dev =3D dev; + cdns_pcie->ops =3D &sky1_pcie_ops; + cdns_pcie->reg_base =3D pcie->reg_base; + cdns_pcie->msg_res =3D pcie->msg_res; + cdns_pcie->is_rc =3D 1; + + reg_off =3D devm_kzalloc(dev, sizeof(*reg_off), GFP_KERNEL); + if (!reg_off) + return -ENOMEM; + + reg_off->ip_reg_bank_offset =3D SKY1_IP_REG_BANK; + reg_off->ip_cfg_ctrl_reg_offset =3D SKY1_IP_CFG_CTRL_REG_BANK; + reg_off->axi_mstr_common_offset =3D SKY1_IP_AXI_MASTER_COMMON; + reg_off->axi_slave_offset =3D SKY1_AXI_SLAVE; + reg_off->axi_master_offset =3D SKY1_AXI_MASTER; + reg_off->axi_hls_offset =3D SKY1_AXI_HLS_REGISTERS; + reg_off->axi_ras_offset =3D SKY1_AXI_RAS_REGISTERS; + reg_off->axi_dti_offset =3D SKY1_DTI_REGISTERS; + cdns_pcie->cdns_pcie_reg_offsets =3D reg_off; + + pcie->cdns_pcie =3D cdns_pcie; + pcie->cdns_pcie_rc =3D rc; + pcie->cfg_base =3D rc->cfg_base; + bridge->sysdata =3D pcie->cfg; + + rc->vendor_id =3D PCI_VENDOR_ID_CIX; + rc->device_id =3D PCI_DEVICE_ID_CIX_SKY1; + rc->no_inbound_map =3D 1; + + dev_set_drvdata(dev, pcie); + + ret =3D cdns_pcie_hpa_host_setup(rc); + if (ret < 0) { + pci_ecam_free(pcie->cfg); + return ret; + } + + return 0; +} + +static const struct of_device_id of_sky1_pcie_match[] =3D { + { .compatible =3D "cix,sky1-pcie-host", }, + {}, +}; +MODULE_DEVICE_TABLE(of, of_sky1_pcie_match); + +static void sky1_pcie_remove(struct platform_device *pdev) +{ + struct sky1_pcie *pcie =3D platform_get_drvdata(pdev); + + pci_ecam_free(pcie->cfg); +} + +static struct platform_driver sky1_pcie_driver =3D { + .probe =3D sky1_pcie_probe, + .remove =3D sky1_pcie_remove, + .driver =3D { + .name =3D "sky1-pcie", + .of_match_table =3D of_sky1_pcie_match, + .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, + }, +}; +module_platform_driver(sky1_pcie_driver); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("PCIe controller driver for CIX's sky1 SoCs"); +MODULE_AUTHOR("Hans Zhang "); --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11023137.outbound.protection.outlook.com [40.107.44.137]) (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 5C1D71DE4F1; Sat, 8 Nov 2025 14:03:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.137 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610598; cv=fail; b=qniHEv0yEQnXL9zUwJ/k9SmdmlX2RgLPOHQO8QpQCjRNjyVeWQE68wt7IjmvusBDeUW4F8n97CF3VPtoTNid51srPU3SC0i1BiNL4VYgDVQ2jAQD5kKiLXMCA42o9P7KvInvEQMNdBc3S6ywiStONZazc9WtOCDxCy8q8K2Mlfk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610598; c=relaxed/simple; bh=WlQClg6frxhcRHEMj8ZylbzI4DB6f6yJ0EXyHCZdLhU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PhA/OfBr+0U4HWUeR2S02BBuzHSMnV+MIBiXBwaDguhHUTYnFajjevczVufwy1OcQxWV7yU47lo3WMnrSCoNMcNuSrMbuVd6k1yzbu08qZYrkN9mMBWPoSIOPwy9T+O7czE9Vq0iwfRGCs2QsfpxNXvd6nYnXUMKQRU5s/RG50A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.44.137 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cfTaXzuihE+1VtoGYNRFS9eGccliapct/k+qyTG58gTaeUl0mUiRJVb+uJ0gnSodaJUSgxRs23PYFuQchSPZ4TSSwptbBS5wtC2d8qQ5VVHdym2Zl6uhdEcXhEVii9vfX5nNKh9OCLjJbOhVcRej23lIrIpRvy1VOMOIBxAXjR7DimowQlzDNOMBsNHd/aiPitB8gIslIN/tBMD0ndOM0X7wayADUDMFN6Kr9BtKQcr6eve9Aqqh0/7p9/nlCdo3onAQSQJ4rzmpZEUyzZT8MHJL9bgZ4aub/nAW3+uGFahNQsIi9n83BA7AwBnRlwF73hzzHQE1lnJjFlsTfDUs2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WXU9wPxi9DZ+GV6htPv6QnuXrMW5w671lSIBh5+Bnh4=; b=Cg/qc3qETuPz2J9lvJThGDuRIqsyMs6iQqvU/PsDioScjwRGZf3CvbleZycg7aZf2+7QJriT9/RqzCEzb3CbH+/5c4pLaDA7UtFrtWiu8NW2FeKZEhEwf2ayApqfsSzeSr0DXxkpwYgde+4RXV3AUslqpONfqHKaKGvTNK2VgiI5LT9yqfoXSFqW5dsr9CsaJV3pS+FjbqdqgEM6abG6AYQq6nK7aXQ6a2VbB/DmHyT20yPMteVhj6IB8rYHqWa7Ltl2PsQ3aGxK4ex3uVXEq3R57ObW6L9sMgNMtpYnDtjP4xwr3byTiGNAVYoJf5gTBXK1kButR06vu2A8Vlq/bw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PS2PR01CA0009.apcprd01.prod.exchangelabs.com (2603:1096:300:2d::21) by KUZPR06MB8109.apcprd06.prod.outlook.com (2603:1096:d10:47::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.15; Sat, 8 Nov 2025 14:03:11 +0000 Received: from TY2PEPF0000AB88.apcprd03.prod.outlook.com (2603:1096:300:2d:cafe::47) by PS2PR01CA0009.outlook.office365.com (2603:1096:300:2d::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:03:25 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by TY2PEPF0000AB88.mail.protection.outlook.com (10.167.253.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:09 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 529594143A8B; Sat, 8 Nov 2025 22:03:06 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang Subject: [PATCH v11 08/10] MAINTAINERS: add entry for CIX Sky1 PCIe driver Date: Sat, 8 Nov 2025 22:03:03 +0800 Message-ID: <20251108140305.1120117-9-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PEPF0000AB88:EE_|KUZPR06MB8109:EE_ X-MS-Office365-Filtering-Correlation-Id: 49d35590-7066-4d5f-b840-08de1ecf8c8a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|7416014|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0mstjp6x4McUIMe0lNIoZL6fLPOZAUCXdy3AWEBuCK48zYK1VQS0dFle7Bpd?= =?us-ascii?Q?Ka3LY48u+Q5wNIRBbj3ywwczr0HkQ5cE7TpSaZaWP8lm6BSZLpA6N+w7ggKl?= =?us-ascii?Q?iUMxqaPejZSNH6unvjBXYTOwW2HNOczQ6UM83RQEAnb/KnZqqR38J0mIjQ3s?= =?us-ascii?Q?UZVn8GXixRfHZqcsSxZZH61eRvayeaI/K79YzdymsXTnCSwAHgbGykWLDfS0?= =?us-ascii?Q?8sA4W+rdfvCiXyjzUxrvHPlROG1Y0OFHaMCAvVh4SfI8WRPHODxpfBEd4RB3?= =?us-ascii?Q?FkAhriQl2rdhbee/QK3fMVU2n6m2kg0zvCNkT56moUpy5S6c+9FMLFpXPyob?= =?us-ascii?Q?ypr7lxl9ges/2b2CATk6WVmV6KBt8ncNKI8WMoBQQO7b/Q9OLtp/lgYwm5qe?= =?us-ascii?Q?5pqVrCa5Os/f/HpDLkIpcuyDfiFUgaPKb9Cx/MUBHt+EKRvZHKYFuu558VVP?= =?us-ascii?Q?TiBhm8XZBxcQa7FIVQgmZ/+HEYFwgIA9+f6kqD9PJQlKTl1RQmT3PeN1n6Fj?= =?us-ascii?Q?7M9oX5MEWxrNphk8NeeY4PelNZJZz5ZnY786QyQHEE8i3BWCTng8Sjr/IARF?= =?us-ascii?Q?BHi3PFnnlBRjIsalgCCcgcohwH2NxIBSP6WTeEPE1oHsSePwWjlqPyLSV+tY?= =?us-ascii?Q?mSGRpCnI6DmmeD6tcl6hHnTdwTVvLcEi3iZ3JL/VtTqYqM6LQT2VMxEPRYmE?= =?us-ascii?Q?El0/5RdzLNDgd+uoZc4B39SuvQx6lFE7cjiqDxP4rJ03iq1iI8WjjFdK/DFt?= =?us-ascii?Q?OREy8Hp1I8/BHSXzOKBWoXcvFqc7XjbT/zO/2S35JGHyATNr2iQTjk051yO9?= =?us-ascii?Q?PbMhSwkAJH55BXcv9wewkYDJc1UeAvtgAiufgEDRpgbyZXSI1gOXn7lKN3HZ?= =?us-ascii?Q?EMJCk0Lb7go+GrOA7zfUVG6+N4huG1d/DQZ7///N2jmCBKnrbd4Va82q8J2Z?= =?us-ascii?Q?yB3F1lI3SMNYohJuHX3/Vn0Pn0CBmsSdAkIDjBynN1vUSpGjIgyqBwmvp89e?= =?us-ascii?Q?5BkER9GENhGwDurpBWgW9w36e/0AMIm2EB4kouL8KCu1s4OeVOKEiYaIHlpo?= =?us-ascii?Q?Kpw8MEZc9ezW+/vpX1W8acBLzXo8CJXb6LsvBgFgFZvWTFqsbfIVLcOd3uDL?= =?us-ascii?Q?C+ZLZnGWXpmO9M5+gjsrHxd0mZQNmBgdCAzyGelCVCSTY+WtXqdiW7rueSJn?= =?us-ascii?Q?9wGhgkCYOmW5ltBzE5Rfjvu/jYaT2sGh1lR7OY8mkmyyd6RqdDtaJZ1h8GqI?= =?us-ascii?Q?sGCjKEEJotw5EQOmMBhLLU6YEXfKptHqMxJpA34QL5anJeCx4yVBpf1f1Z1h?= =?us-ascii?Q?kfe1SR9Dbp+sANs9FaLhvtzskdPQ6PbLkOSQmadSVBVoB40fjyYwQBuGJapj?= =?us-ascii?Q?OyMJCkaBEuiTuoiUYQ/XxkmuDZ1PyNHHj3sCj1PmlOrpfAxKwsGG85qSZudj?= =?us-ascii?Q?FM9BK6W0VWNjA6cpnKP+t7DVyDJukB3jGNnaVPwZwj7ZglUOn5ZKBnoi3t4W?= =?us-ascii?Q?ECGa+3OfvC1PniFFj6PKOCiV3T7BAj8hYmTmQ2PN+X3A7lYcTkqwpyOQSnY2?= =?us-ascii?Q?rAncguDDZm36+BnR7/s=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(7416014)(376014)(82310400026)(1800799024);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:09.5517 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 49d35590-7066-4d5f-b840-08de1ecf8c8a X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: TY2PEPF0000AB88.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: KUZPR06MB8109 Content-Type: text/plain; charset="utf-8" From: Hans Zhang Add myself as maintainer of Sky1 PCIe host driver Signed-off-by: Hans Zhang --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 46bd8e033042..5b3f3aa74365 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -19646,6 +19646,13 @@ S: Orphan F: Documentation/devicetree/bindings/pci/cdns,* F: drivers/pci/controller/cadence/*cadence* =20 +PCI DRIVER FOR CIX Sky1 +M: Hans Zhang +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/cix,sky1-pcie-*.yaml +F: drivers/pci/controller/cadence/*sky1* + PCI DRIVER FOR FREESCALE LAYERSCAPE M: Minghuan Lian M: Mingkai Hu --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazon11022141.outbound.protection.outlook.com [52.101.126.141]) (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 B537C21FF36; Sat, 8 Nov 2025 14:03:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.126.141 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610599; cv=fail; b=LiKcS0Kfu43cA7DgN5ze0QQyMa8/3XC3iYppEkyramjyeXciM279TB/NXcFs0leSSQdRDq0rZq6HSEP2bu+6eiRBVcFJ8lIHFrMzI2osQgGIUuu9xqxpUKdM+3EgAN3qU44XDbxoLlzVyfbL6JjTpq+X5LeuhmyIRP4cF21qffI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610599; c=relaxed/simple; bh=X+k7Iigd2NMGn/R26vLP63F94H9w9AxUntSWq+w6fJI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=g9mvdd5+etOopf8tQ9gHJ9Y8n8PQZEU8sNh3OJ52dh/Ca5n9+rRX4e4Z5I30v6ROcAZc8CzT0xLQzFsc1IEbCgCO3fE3wMosRwaYeNb/bTB6cLIp5WpvpgRORmqN7QCSx2RsVzCJBXYCt5zQidzQ5tHCuEM9l9IK8b0J+UqmaAQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=52.101.126.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NggqGcRBshSQZkVy+dvPcq4Q2rQ4UBE1edrKfZRmyTIIIEqq13/m+X69LZgO5XLW+uNugEaZzMqRak3fFTtaObbMhyOYVYsKXPWFeM/A3sxbXlLk9wwYgO7iaasashgwON85bNea/kkx9wshC01wMUp2T7RonvrRyqAENFGTQpAL9H+tEcUY1qp6mcFs9EoNuoYjbp565Ahrxckqnq8Tzq95+Pz0tdrzqskK8OwnW5ej2rQ704FMuGnqRYECFIOzaxS9e7wuWEdBp5nqF0A81dBZydwCsdZyU1p1i4Gw0CetVTeUyIh/OgUBC3EBzHQ543z0gOKzI3eysmN7drBJiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=n+udEMxIaEkITBc0fDjiQfdSxHcDgn+KJXyxrpbyPnU=; b=PvSEv3ayRRJYOUwa/zhE+KhqSPtM0P/6g1yPOXCgf/jK4bPS8Vf+3gOUuITjP2BR+ySOqmHCbtKVatJKL66ZF6g24ueg6IxtP1t+eBbxOGM2Z4VXCXbpvgV/o+aTDL3FMSFUwHEW9Sh6PkBD7bZF1T4WP1dOTrrwAEp0v7ezqDJ/GAvNAmN7pawsbecRd8Uug4pKy1QavbK0ZlkUi01U4Adn6ndG0RVprpE5NmUpjS/X/4oWR635kIRx1ND218QvVgBM8xei2qOLckq5IK68W1GEdrwGxxYaCvuW9ZnEMlHz2m+clxhAmsjGLY7E46I7XG9tO7IDDs9sI1R3e3Rm4Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PS2PR02CA0070.apcprd02.prod.outlook.com (2603:1096:300:5a::34) by KL1PR06MB6257.apcprd06.prod.outlook.com (2603:1096:820:d1::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Sat, 8 Nov 2025 14:03:12 +0000 Received: from TY2PEPF0000AB89.apcprd03.prod.outlook.com (2603:1096:300:5a:cafe::53) by PS2PR02CA0070.outlook.office365.com (2603:1096:300:5a::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.14 via Frontend Transport; Sat, 8 Nov 2025 14:03:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by TY2PEPF0000AB89.mail.protection.outlook.com (10.167.253.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:11 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 61F294143A8D; Sat, 8 Nov 2025 22:03:06 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang Subject: [PATCH v11 09/10] arm64: dts: cix: Add PCIe Root Complex on sky1 Date: Sat, 8 Nov 2025 22:03:04 +0800 Message-ID: <20251108140305.1120117-10-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PEPF0000AB89:EE_|KL1PR06MB6257:EE_ X-MS-Office365-Filtering-Correlation-Id: 74592b3a-d3e5-4ddc-bae3-08de1ecf8d6a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1JHrkTtjzRjBQAgAaovIqCTFTjE7WkJGLPnMbZ4Bhycalnw0G5Gb+8EIS90w?= =?us-ascii?Q?GS1g+/9NpdJUdwKci8xPm6TXwz6FJZOSjxc3ft/4+Z0B6SVOjymvN8rittqD?= =?us-ascii?Q?gXnn+Gi1U86iS+sxCLHz6KeWM21mhSK//0uuWJTxoD/TxymX+BamHV8XvVHs?= =?us-ascii?Q?sYrLmA7DPKZlg8n7E/AgKv0pwYLlJ7iL/6jcOiRVVzf3TYj6JcdUun2O8T1t?= =?us-ascii?Q?VnCm7qWsvhmMAU8tBGtG9iPnvhAQ1YW31RnNxgPO3gULWsZ1/CDclgJNvSXH?= =?us-ascii?Q?MJGgKyqDpqHOJv1ffCzNc2ozacxZeAxm/5vFcqGUqEUSjuFOyVBKJhvvIrcd?= =?us-ascii?Q?tqSL8YeAZjzmsHhjRnVAhMRJAv8QJBfAZFGIhcKbvoelLKkvn3ev0zjgF47K?= =?us-ascii?Q?wfKMid40MGRL6MkWjWmsS6FEe/ED+LjgPzQiuWkigJapqJVa6ba5T2qunR8T?= =?us-ascii?Q?79Vb0z6tb3bE0rbURt7rJTPdeu6pEO2vwlqPg0Zz4iTx/bqA/sbYgmPRDeU0?= =?us-ascii?Q?BE5R8YNlUNDfCojbL0X8qjUPgrI/3qTxPS6pQNMgsUW6LNBQoxZVBPHxg7Eo?= =?us-ascii?Q?ldKAneQrrNQqZUhbXopGKrTGy/msJhSYMYZWtQOwlZfx6Z8YM12ruWc/58tT?= =?us-ascii?Q?mE2YAYMYXl+rvpxbQwdxf6wbHdoe0pVv5PUOP3AJ1xZIQt0obQZslMtjvMlm?= =?us-ascii?Q?bwHCwAcmNG0yXE0NIKkth5jYzKzefQUZwphCTCktd2k6lC5n1E+hwuWKlN+a?= =?us-ascii?Q?9iLwYuBwYaVP8k3sd08eHmjQGNnSD2YYG9uBtVF/kXiKEWELNdclLgVc4HkU?= =?us-ascii?Q?6N8S9digM8f8Z9bT8Te77NSDDkQxfakQeEJsDM2ngYIp6I0sTEMt6j1hU9TE?= =?us-ascii?Q?K9B27pGUd51KpaW80ufdeWm7XXxJMNSUCLPyP7iR3+ixpmNjAmtvDegzzu3v?= =?us-ascii?Q?06b8nW3ydmrtro7Xlxi+wCVAWQMrgxp/uZE4hvqm1lw27iWWDDxonV4RliJL?= =?us-ascii?Q?pzgDdh6yAjRoGIiYQAYiZ8RXHmgz2l6M7dWm7KOh6fhajReZjcHhG/h1F/JU?= =?us-ascii?Q?k0EaSO4WFY3FFkOGG4LC4QwaUBEXU+RedbbAzd42z/aKxDwdKV72C7Z1ytzJ?= =?us-ascii?Q?gh8PfW1RA9t77In58VSpB5GWViQEX09B4Si9V5tO9FBv8+qszPefkwfn0dr+?= =?us-ascii?Q?bHJmjrQjbNu/tMYIJvieUrjbO9ARr2OPA1Ql7QxV5EbO5p96Lw8utLnWb1VK?= =?us-ascii?Q?AmF4czZVDfbK7MaFEXn8oTYelpULJcyNp1Zcvays+s9j6E/olrE6lEWkY48w?= =?us-ascii?Q?U29nCt8rgHBZyT4uIMeAz0mp8h2N+LVhnuZOf5h9yfgvkU2HDFXYlyw1hPaV?= =?us-ascii?Q?zGKoW/gb7ylMnqsZABmZTOS9Rv1rXFym4ALfp8avRsnivCq81eQAd0gj6hP8?= =?us-ascii?Q?RK34Ukdd4jD47VPBTCQLnPaJLkm5SHxcLzVyIgV6YMvqvLSgE30kN9dWs1ru?= =?us-ascii?Q?SP+exkmHWZYHQYbAfQ5gUpZqgCkYVcBoEjSP1EnDfng6JzqbYfKI9o4HEPZV?= =?us-ascii?Q?5wzlL1KtMKWoQSU+zJQ=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(82310400026)(1800799024)(36860700013);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:11.0606 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 74592b3a-d3e5-4ddc-bae3-08de1ecf8d6a X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: TY2PEPF0000AB89.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR06MB6257 Content-Type: text/plain; charset="utf-8" From: Hans Zhang Add pcie_x*_rc node to support Sky1 PCIe driver based on the Cadence PCIe core. Supports Gen1/Gen2/Gen3/Gen4, 1/2/4/8 lane, MSI/MSI-x interrupts using the ARM GICv3. Signed-off-by: Hans Zhang Acked-by: Manivannan Sadhasivam --- arch/arm64/boot/dts/cix/sky1.dtsi | 126 ++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/arch/arm64/boot/dts/cix/sky1.dtsi b/arch/arm64/boot/dts/cix/sk= y1.dtsi index 2fb2c99c0796..1abafbfc3c9b 100644 --- a/arch/arm64/boot/dts/cix/sky1.dtsi +++ b/arch/arm64/boot/dts/cix/sky1.dtsi @@ -388,6 +388,132 @@ mbox_ap2sfh: mailbox@80a0000 { cix,mbox-dir =3D "tx"; }; =20 + pcie_x8_rc: pcie@a010000 { + compatible =3D "cix,sky1-pcie-host"; + reg =3D <0x00 0x0a010000 0x00 0x10000>, + <0x00 0x2c000000 0x00 0x4000000>, + <0x00 0x0a000300 0x00 0x100>, + <0x00 0x0a000400 0x00 0x100>, + <0x00 0x60000000 0x00 0x00100000>; + reg-names =3D "reg", "cfg", "rcsu_strap", "rcsu_status", "msg"; + ranges =3D <0x01000000 0x0 0x60100000 0x0 0x60100000 0x0 0x00100000>, + <0x02000000 0x0 0x60200000 0x0 0x60200000 0x0 0x1fe00000>, + <0x43000000 0x18 0x00000000 0x18 0x00000000 0x04 0x00000000>; + #address-cells =3D <3>; + #size-cells =3D <2>; + bus-range =3D <0xc0 0xff>; + device_type =3D "pci"; + #interrupt-cells =3D <1>; + interrupt-map-mask =3D <0 0 0 0x7>; + interrupt-map =3D <0 0 0 1 &gic 0 0 GIC_SPI 407 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 2 &gic 0 0 GIC_SPI 408 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 3 &gic 0 0 GIC_SPI 409 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 4 &gic 0 0 GIC_SPI 410 IRQ_TYPE_LEVEL_HIGH 0>; + msi-map =3D <0xc000 &gic_its 0xc000 0x4000>; + status =3D "disabled"; + }; + + pcie_x4_rc: pcie@a070000 { + compatible =3D "cix,sky1-pcie-host"; + reg =3D <0x00 0x0a070000 0x00 0x10000>, + <0x00 0x29000000 0x00 0x3000000>, + <0x00 0x0a060300 0x00 0x40>, + <0x00 0x0a060400 0x00 0x40>, + <0x00 0x50000000 0x00 0x00100000>; + reg-names =3D "reg", "cfg", "rcsu_strap", "rcsu_status", "msg"; + ranges =3D <0x01000000 0x00 0x50100000 0x00 0x50100000 0x00 0x00100000>, + <0x02000000 0x00 0x50200000 0x00 0x50200000 0x00 0x0fe00000>, + <0x43000000 0x14 0x00000000 0x14 0x00000000 0x04 0x00000000>; + #address-cells =3D <3>; + #size-cells =3D <2>; + bus-range =3D <0x90 0xbf>; + device_type =3D "pci"; + #interrupt-cells =3D <1>; + interrupt-map-mask =3D <0 0 0 0x7>; + interrupt-map =3D <0 0 0 1 &gic 0 0 GIC_SPI 417 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 2 &gic 0 0 GIC_SPI 418 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 3 &gic 0 0 GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 4 &gic 0 0 GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH 0>; + msi-map =3D <0x9000 &gic_its 0x9000 0x3000>; + status =3D "disabled"; + }; + + pcie_x2_rc: pcie@a0c0000 { + compatible =3D "cix,sky1-pcie-host"; + reg =3D <0x00 0x0a0c0000 0x00 0x10000>, + <0x00 0x26000000 0x00 0x3000000>, + <0x00 0x0a0600340 0x00 0x20>, + <0x00 0x0a0600440 0x00 0x20>, + <0x00 0x40000000 0x00 0x00100000>; + reg-names =3D "reg", "cfg", "rcsu_strap", "rcsu_status", "msg"; + ranges =3D <0x01000000 0x0 0x40100000 0x0 0x40100000 0x0 0x00100000>, + <0x02000000 0x0 0x40200000 0x0 0x40200000 0x0 0x0fe00000>, + <0x43000000 0x10 0x00000000 0x10 0x00000000 0x04 0x00000000>; + #address-cells =3D <3>; + #size-cells =3D <2>; + bus-range =3D <0x60 0x8f>; + device_type =3D "pci"; + #interrupt-cells =3D <1>; + interrupt-map-mask =3D <0 0 0 0x7>; + interrupt-map =3D <0 0 0 1 &gic 0 0 GIC_SPI 427 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 2 &gic 0 0 GIC_SPI 428 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 3 &gic 0 0 GIC_SPI 429 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 4 &gic 0 0 GIC_SPI 430 IRQ_TYPE_LEVEL_HIGH 0>; + msi-map =3D <0x6000 &gic_its 0x6000 0x3000>; + status =3D "disabled"; + }; + + pcie_x1_0_rc: pcie@a0d0000 { + compatible =3D "cix,sky1-pcie-host"; + reg =3D <0x00 0x0a0d0000 0x00 0x10000>, + <0x00 0x20000000 0x00 0x3000000>, + <0x00 0x0a060360 0x00 0x20>, + <0x00 0x0a060460 0x00 0x20>, + <0x00 0x30000000 0x00 0x00100000>; + reg-names =3D "reg", "cfg", "rcsu_strap", "rcsu_status", "msg"; + ranges =3D <0x01000000 0x0 0x30100000 0x0 0x30100000 0x0 0x00100000>, + <0x02000000 0x0 0x30200000 0x0 0x30200000 0x0 0x07e00000>, + <0x43000000 0x08 0x00000000 0x08 0x00000000 0x04 0x00000000>; + #address-cells =3D <3>; + #size-cells =3D <2>; + bus-range =3D <0x00 0x2f>; + device_type =3D "pci"; + #interrupt-cells =3D <1>; + interrupt-map-mask =3D <0 0 0 0x7>; + interrupt-map =3D <0 0 0 1 &gic 0 0 GIC_SPI 436 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 2 &gic 0 0 GIC_SPI 437 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 3 &gic 0 0 GIC_SPI 438 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 4 &gic 0 0 GIC_SPI 439 IRQ_TYPE_LEVEL_HIGH 0>; + msi-map =3D <0x0000 &gic_its 0x0000 0x3000>; + status =3D "disabled"; + }; + + pcie_x1_1_rc: pcie@a0e0000 { + compatible =3D "cix,sky1-pcie-host"; + reg =3D <0x00 0x0a0e0000 0x00 0x10000>, + <0x00 0x23000000 0x00 0x3000000>, + <0x00 0x0a060380 0x00 0x20>, + <0x00 0x0a060480 0x00 0x20>, + <0x00 0x38000000 0x00 0x00100000>; + reg-names =3D "reg", "cfg", "rcsu_strap", "rcsu_status", "msg"; + ranges =3D <0x01000000 0x0 0x38100000 0x0 0x38100000 0x0 0x00100000>, + <0x02000000 0x0 0x38200000 0x0 0x38200000 0x0 0x07e00000>, + <0x43000000 0x0C 0x00000000 0x0C 0x00000000 0x04 0x00000000>; + #address-cells =3D <3>; + #size-cells =3D <2>; + bus-range =3D <0x30 0x5f>; + device_type =3D "pci"; + + #interrupt-cells =3D <1>; + interrupt-map-mask =3D <0 0 0 0x7>; + interrupt-map =3D <0 0 0 1 &gic 0 0 GIC_SPI 445 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 2 &gic 0 0 GIC_SPI 446 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 3 &gic 0 0 GIC_SPI 447 IRQ_TYPE_LEVEL_HIGH 0>, + <0 0 0 4 &gic 0 0 GIC_SPI 448 IRQ_TYPE_LEVEL_HIGH 0>; + msi-map =3D <0x3000 &gic_its 0x3000 0x3000>; + status =3D "disabled"; + }; + gic: interrupt-controller@e010000 { compatible =3D "arm,gic-v3"; reg =3D <0x0 0x0e010000 0 0x10000>, /* GICD */ --=20 2.49.0 From nobody Sun Dec 14 06:16:25 2025 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11023086.outbound.protection.outlook.com [52.101.127.86]) (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 779DF212568; Sat, 8 Nov 2025 14:03:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.86 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610597; cv=fail; b=EkAMKI/r1Q5P14vxZCYMhY6N7WCyWxvD9OL4qr4OVZxNQ2SbjOHDoWF+yjJHuxUJytBZneLLpH/6SFnjaaQlLZ/Ba5jm/GpKoE3cZj8H/bWsPnxIUMm21K5ytFRvsQw/N2p/c7j9wltSFPOVC7Hy4VYUxCZkxT+FkSPF7XMJd1s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762610597; c=relaxed/simple; bh=xSRoZQb2UNYT+aOEzubP77z2bAgIJyDldNsTSU/nhN4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=knFoNWY3LOu/feR7O8tSv8B25hqSZeZM6UNDKjDp8/gAIkzdTk2vG2DJ/3taunnmqRGQ1x+PCbv25kGYl9jsGao9tJAVsk7nyPRN0qZEe8ToCBlnpsAUK41F5GmrleURQe64PaLCgRbL+YoDQZr33mig6BJz+sRVTHX2F3D8K8c= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=52.101.127.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dkeujA4ukNj8at67aVpwOPTm6IxFbdvNkqsC0GrXan7U48fcoLGMZEpx6ZV430+4kwYuWce78XXZ8oTFZ8txVaM4pZA7m3VZ64oN6im7dcqZtjFfBPgi+dLyPgXk1g0FPcKy2R9g5Y7GSb3A8mNI/q1QGFEl/rKg+Vl5F9zAZO6PUiAE1Fbo0d+ko9Tk6I3ycxSDEZCoHuq098IGmfHvGCEZWZExU4/S1+Z9g0G6NN+WzbHYdxsRVODy6IzGugsNS3fi+5HPYcUbvJd+nhIg86o3JTjchyy5T1VFu2VS4RfuoGR5sf1wpYJWFPsD6kYrtsxfR35iiLqkxbkLSXypPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nfKn7gVBO7GcjBMV8RC+LeGUQKD4zN506MIzDLFeQNk=; b=HNBf04tgsfn5UGdH8USR/InETYQEB1eb9NX4V/jlxykblBJLbrOgy/v0W+tdISP2UB5+9pgcAppGupyuOOhx/iwOidO9C9pSf/96gplzmWa5EG2p1lxU370mmcLYQskActI2Q24z4pVgkVMQVy9zEwnSg/eoaX3qNT0QKL0DHwzOTDGfzfeHrSMuuoEM1xzlUxeYyMKo/9CZ6J2azbZBesQsLu3fA9If9Bk2PmZXd/S4nrLoT2vbTk6fQjfJJvjv+G5spS+Tp2/NVTCrNwLOcW93cnK8DalRpkax3mdyE8uWcAEgnuIA1+7Qd8h+VnzzQUrPd+ztk+UbO7g5I+dt3A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=cadence.com smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from SG2PR01CA0121.apcprd01.prod.exchangelabs.com (2603:1096:4:40::25) by TY2PPF7E205D1F6.apcprd06.prod.outlook.com (2603:1096:408::799) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Sat, 8 Nov 2025 14:03:11 +0000 Received: from SG2PEPF000B66C9.apcprd03.prod.outlook.com (2603:1096:4:40:cafe::47) by SG2PR01CA0121.outlook.office365.com (2603:1096:4:40::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.15 via Frontend Transport; Sat, 8 Nov 2025 14:02:09 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by SG2PEPF000B66C9.mail.protection.outlook.com (10.167.240.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Sat, 8 Nov 2025 14:03:09 +0000 Received: from hans.. (unknown [172.16.64.208]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 720224143A8E; Sat, 8 Nov 2025 22:03:06 +0800 (CST) From: hans.zhang@cixtech.com To: bhelgaas@google.com, helgaas@kernel.org, lpieralisi@kernel.org, kw@linux.com, mani@kernel.org, robh@kernel.org, kwilczynski@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: mpillai@cadence.com, fugang.duan@cixtech.com, guoyin.chen@cixtech.com, peter.chen@cixtech.com, cix-kernel-upstream@cixtech.com, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang Subject: [PATCH v11 10/10] arm64: dts: cix: Enable PCIe on the Orion O6 board Date: Sat, 8 Nov 2025 22:03:05 +0800 Message-ID: <20251108140305.1120117-11-hans.zhang@cixtech.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251108140305.1120117-1-hans.zhang@cixtech.com> References: <20251108140305.1120117-1-hans.zhang@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SG2PEPF000B66C9:EE_|TY2PPF7E205D1F6:EE_ X-MS-Office365-Filtering-Correlation-Id: 458b4679-3264-4cd1-da85-08de1ecf8c67 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|7416014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xTfG4LTJQbtbtDap6JyOQJsaYGEy9KE2H/iXAr2c/T69YGo5UTtBE2XJeqly?= =?us-ascii?Q?0lw4fwJPjdZZ/tes8TauVwrBbbbnqffpsrL4JFwqnuMIa7LVQBbOlDbLHpPV?= =?us-ascii?Q?C7ujpxoiwGiQMRkDwBzUbKV3eYHgoMCHMTcM+6kN+Pn2VWjDaAAWGkIeTWgK?= =?us-ascii?Q?GO80vjzc7ARNS5uroFtN+uS+/8axlU5D7w473VQxX3jhz25ZmxztbzZX03OX?= =?us-ascii?Q?jPPFoibA8GDVCI2EZh4IcnWmrQFJRZmJaqYavVK9SPUXV64KTcNDKSSsnrsO?= =?us-ascii?Q?8KW/FJ1PUHPJ7U0W7XXwVNwN78jP+ezCpXLs0CJdJBejLveR22p0Nbqxg63l?= =?us-ascii?Q?ui4DQmpp4NfLZ8zelusiAgM8fuBspbDGUMk1M+B078BAK1UyiCVxrVhB2baP?= =?us-ascii?Q?pj6a0AwGPqkj3I8Vew884IesWyAx9GdNSyvsHKZ/wjEOA9/7Mnu+vVzbA3O+?= =?us-ascii?Q?eOH7f9vlphmEbJfq8z1LxvPn8bilZYtai+7COZ/fGU6b9H0e/gJlIoAgOUwx?= =?us-ascii?Q?/fnCRMA+rmLqz6yMQTNaSp178H3x6BlZi32U+FZwhHcU4z6vCdyXlKT3UgNU?= =?us-ascii?Q?UcQ2YILCE/QNpN9oTztA9Aalu62lzZwXWHovnRfs9V6aurjdu2DsRTDbiCJb?= =?us-ascii?Q?G3C4AmxCy9TEHad7LC7F4PR/T/AxfzTlfFNolAoCxE5xWI2xxWMTQ5M9TsnK?= =?us-ascii?Q?qV+gMyyknOUwk+Tqww2d6IEki3Ovtmvb2jJlmH+uA7DJWqlkujggWFnlswKL?= =?us-ascii?Q?gvXuNxJuNxcZ9QO+ajJ/L8MSN99RuI8Xweg41gepB0HHhFrs8WSCOGKhNv3n?= =?us-ascii?Q?03XJ+SoK8Y8jTmEbUGwis0cpQbGLgt1L+HwhrSvXi1AukCQb0pPdnee0mTBO?= =?us-ascii?Q?U1sJvkNSmY6vTa1Z9Vhu2IJPlJcHNByjXrXn0dmptX6+0SKpk0KWLZl2SSlq?= =?us-ascii?Q?jqu7eTgZ9HODiaEIQApXER9gDd7EK8wt3bhTUoIqEy62whgMagZgh9wjwszO?= =?us-ascii?Q?FIiQqEBBm1uXwEyq6VX/SqrnNMIrjPiYcR/ojRpi+PFAjNLOs01Mn31EQaKx?= =?us-ascii?Q?1FNOfvm2cDGYcofHxS9e6Y/RcJtFH1KEtdqQcpfqksowe4HR5pEy6UyxNo4x?= =?us-ascii?Q?yf4y0ig9EZVdqvYcaCYt5+ip0dV82pmzJHf90Z1Ncu1tbbryuwBdF6m16S0a?= =?us-ascii?Q?fhHDs2KtI6tba/1hdDyZWFSA6LRPYh0F2j4rF32lSeMWUKNr4yKkizFNFLR+?= =?us-ascii?Q?TRegRsW1fw8KdMVUof8diY5E7eorpkkwDf8cna9ettJjtQXLNc4OHK8PC9dl?= =?us-ascii?Q?8lMGYdZ54IShP6AMGFNHtcp4wSB6OJ5ijwNEarVNAx9gZ+/UoSfTP+8rglkM?= =?us-ascii?Q?BDc7wTKqbCLpJVE3LrUJoUdBVaaMR40RNbpGotjkdIBJXMBfTWdHjpSmfndq?= =?us-ascii?Q?o8W5z3LCPSTRlFq4UZnl2JbVn+SrajI+f8G2MF7PYQvu1gO5U36ws2ac6mmf?= =?us-ascii?Q?an50yUuUp07ewgtlVaIHx184a5SpUf1hSt4nWoheDuaMHxj6m0gztG2ssxai?= =?us-ascii?Q?jFeF6G9sfSFUthEi20U=3D?= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(7416014)(82310400026);DIR:OUT;SFP:1102; X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2025 14:03:09.4182 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 458b4679-3264-4cd1-da85-08de1ecf8c67 X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: SG2PEPF000B66C9.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY2PPF7E205D1F6 Content-Type: text/plain; charset="utf-8" From: Hans Zhang Add PCIe RC support on Orion O6 board. The Orion O6 board includes multiple PCIe root complexes. The current device tree configuration enables detection and basic operation of PCIe endpoints on this platform. GPIO and pinctrl subsystems for this platform are not yet ready for upstream inclusion. Consequently, attributes such as reset-gpios and pinctrl configurations are temporarily omitted from the PCIe node definitions. Endpoint detection and functionality are confirmed to be operational with this basic configuration. The missing GPIO and pinctrl support will be added incrementally in future patches as the dependent subsystems become available upstream. Signed-off-by: Hans Zhang Acked-by: Manivannan Sadhasivam --- Dear Krzysztof and Mani, Due to the fact that the GPIO, PINCTRL and other modules of our platform are not yet ready for upstream. Attributes that PCIe depends on, such as reset-= gpios and pinctrl*, have not been added for the time being. It will be added grad= ually in the future. The following are Arnd's previous comments. We can go to upsteam separately. https://lore.kernel.org/all/422deb4d-db29-48c1-b0c9-7915951df500@app.fastma= il.com/ The following are the situations of five PCIe controller enumeration device= s. root@cix-localhost:~# uname -a Linux cix-localhost 6.18.0-rc4-00010-g0f5b0f23abef #237 SMP PREEMPT Sat Nov= 8 21:47:44 CST 2025 aarch64 GNU/Linux root@cix-localhost:~# root@cix-localhost:~# lspci 0000:c0:00.0 PCI bridge: Device 1f6c:0001 0000:c1:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 81= 26 (rev 01) 0001:90:00.0 PCI bridge: Device 1f6c:0001 0001:91:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVM= e SSD Controller S4LV008[Pascal] 0002:60:00.0 PCI bridge: Device 1f6c:0001 0002:61:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8852BE = PCIe 802.11ax Wireless Network Controller 0003:00:00.0 PCI bridge: Device 1f6c:0001 0003:01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 81= 26 (rev 01) 0004:30:00.0 PCI bridge: Device 1f6c:0001 0004:31:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 81= 26 (rev 01) --- arch/arm64/boot/dts/cix/sky1-orion-o6.dts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/arch/arm64/boot/dts/cix/sky1-orion-o6.dts b/arch/arm64/boot/dt= s/cix/sky1-orion-o6.dts index d74964d53c3b..be3ec4f5d11e 100644 --- a/arch/arm64/boot/dts/cix/sky1-orion-o6.dts +++ b/arch/arm64/boot/dts/cix/sky1-orion-o6.dts @@ -34,6 +34,26 @@ linux,cma { =20 }; =20 +&pcie_x8_rc { + status =3D "okay"; +}; + +&pcie_x4_rc { + status =3D "okay"; +}; + +&pcie_x2_rc { + status =3D "okay"; +}; + +&pcie_x1_0_rc { + status =3D "okay"; +}; + +&pcie_x1_1_rc { + status =3D "okay"; +}; + &uart2 { status =3D "okay"; }; --=20 2.49.0