From patchwork Fri Feb 7 09:40:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manikandan Karunakaran Pillai X-Patchwork-Id: 13964694 X-Patchwork-Delegate: kw@linux.com Received: from mx0a-0014ca01.pphosted.com (mx0b-0014ca01.pphosted.com [208.86.201.193]) (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 2FA831DE4E3; Fri, 7 Feb 2025 09:40:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=208.86.201.193 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738921249; cv=fail; b=iUUJx1GWA9kM3J9nmj7+I4CDqega/z2F96yL1illjrSfXg7mgGQ2Jn+zPBOqHaDMUWFBm9Oa9Jp2MMAf4hcg9IIVAHjTeLFy3NW9GR2Fdar4aP9ShQ0EUNRXhnYa8jl3bbmirBAF0dtyT4t4z3hn779vyUQiffS8YbSwV/PnNvY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738921249; c=relaxed/simple; bh=67oJym94rmCVZ4suBb6Zoqny50SnbZXsisG3WbD5AiI=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=DgRcuUM5VDQZUJE/q2+ztG12nsu2tInwbPX3wWloH9yyrh85VIBxySYZ/TT7/4XIDyxYYUBthWzymbiN+L1D3QGh0XVslzgnxvC9c8jQ2AfGL5h2XwC1vZqeGB7tYePqY9rHJpgYqqxWJQpmEBHiovtUUECuH4hxMLlxP4z/R8U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=cadence.com; spf=pass smtp.mailfrom=cadence.com; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b=ol4/EeOA; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b=brGHC0NP; arc=fail smtp.client-ip=208.86.201.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=cadence.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cadence.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b="ol4/EeOA"; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b="brGHC0NP" Received: from pps.filterd (m0042333.ppops.net [127.0.0.1]) by mx0b-0014ca01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51781AWV027036; Fri, 7 Feb 2025 01:40:37 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=proofpoint; bh=0jCYPLa/SDkSVsBwNhjp/PjPQhgzOOqYnq4yllaiV2c=; b=ol4/EeOAjbNM jiavcJ8UgOevvTG1+zPa+oyZbsBiUlwQG7WvF5xjWZ0e9WJF1pqS++DYtMwPwx3z cvkmBk1oIR5LJfTCMRcAtb5koEV3wPnudflphmBWPDsJZGSZ3WZ/vAztiF6p/Y6O sXyfiu+9lN6JBZppFq4M6iVadbxBeiqSbWWdpRlGQkk+8ADH6uGWoO2ZFs9KQHQo FR9W6hggBKXA7zPUpgEXoVlO5MXUDA8WvYEySuTMbrtcg2ZSKCF0y6KMl9+m5LVN ZKoE6rTnxP2z/Bs5f14ucofuCz1WWKsFLwDRhaqEFJbM3XgkadZyV+VouFBBNCyi prwEkajCpw== Received: from cy4pr05cu001.outbound.protection.outlook.com (mail-westcentralusazlp17010002.outbound.protection.outlook.com [40.93.6.2]) by mx0b-0014ca01.pphosted.com (PPS) with ESMTPS id 44ndt0rm16-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 07 Feb 2025 01:40:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VPABh0045HIUgYpPReyh2QswZAIYjjp0jyBU/y8XGcZabURpZ/PB4SA5XlkouoFoUg8ObXcVN762mbvTBsgXb9xJh4/i3AMGpGfXI4uU5cMM219w6lPQ+hird3Z8rFKWD1A9aU8eMyAsq5RJ8SlPc3pPyzb8CIwg4EYkk1w44SOsQWIWW1NY79lfEXOoEa7Z72yC2sNj7MB2TeVop615jv+zIpT0wIQBsbTPWpv3e7sMw2UpZizDaFkd7cZSQCbhCE8Jz5HsoH7GWw9r+lGKf/IA9ZpIy6s2g7zXoVLxZqa7WPaThzOqitKQOHI4vooFRtafchEc7jSSjqtRPxxKgA== 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=0jCYPLa/SDkSVsBwNhjp/PjPQhgzOOqYnq4yllaiV2c=; b=h06ral6vVgpkcOAtVvq017co0ZhGeeXQZk4Q5qfXXpDEAeayzA9cjJi8HuHutw6FSsuNpHVaZAv2dB7gweDvugC0BOkfbcu2vUuX6hBaweiIeMIn6CcM4HVcrzJXgy/+eePALRj59s0jEmADMdUJiRySDeXVcVy/JDMf1YThXi/EjHN1dCPGaYw6aZXaNGyDQv7jhE5lJuD4PjCnBa8DRP4blIOmHzcnsOg5ZjyxZuQiEu/MDE5EtaZdf25XfuOwD4RKhNtaS5fBScdfYECnB+IQD2UO95GwcaJg5oRJP7896mDy4/b0Vyah5O/+SYg0vhQWBpv4r0PXeeYO0d6jtw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cadence.com; dmarc=pass action=none header.from=cadence.com; dkim=pass header.d=cadence.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0jCYPLa/SDkSVsBwNhjp/PjPQhgzOOqYnq4yllaiV2c=; b=brGHC0NPdgtv8M+znlaRiGJoy0hkUEjPJ+C8f5E0EAIF0d4xk4dEEj+lqwF1JbU7HKxW7HgnjQckuzCsSYWbTFM+wARxHt+9KiNbysvUeAlEHL3uU1xTu3LM9NDmIIv/Y/75YfKyoKc6DpDOQmkfmrA4/QreC92HHlXscUC5nRk= Received: from CH2PPF4D26F8E1C.namprd07.prod.outlook.com (2603:10b6:61f:fc00::278) by BL3PR07MB8817.namprd07.prod.outlook.com (2603:10b6:208:350::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.14; Fri, 7 Feb 2025 09:40:35 +0000 Received: from CH2PPF4D26F8E1C.namprd07.prod.outlook.com ([fe80::d517:a32:d647:386c]) by CH2PPF4D26F8E1C.namprd07.prod.outlook.com ([fe80::d517:a32:d647:386c%7]) with mapi id 15.20.8422.012; Fri, 7 Feb 2025 09:40:35 +0000 From: Manikandan Karunakaran Pillai To: "lpieralisi@kernel.org" , "manivannan.sadhasivam@linaro.org" , "bhelgaas@google.com" , "kw@linux.com" , "robh@kernel.org" CC: "manivannan.sadhasivam@linaro.org" , "linux-kernel@vger.kernel.org" , "linux-pci@vger.kernel.org" Subject: [RFC 1/3] PCI: cadence: Add architecture information for PCIe controller Thread-Topic: [RFC 1/3] PCI: cadence: Add architecture information for PCIe controller Thread-Index: AQHbeUJv0R6G3CvWD0iCxp9Vq80oNbM7lcKA Date: Fri, 7 Feb 2025 09:40:34 +0000 Message-ID: References: <20250207092645.3140461-1-mpillai@cadence.com> <20250207092645.3140461-2-mpillai@cadence.com> In-Reply-To: <20250207092645.3140461-2-mpillai@cadence.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-ref: PG1ldGE+PGF0IGFpPSIwIiBubT0iYm9keS50eHQiIHA9ImM6XHVzZXJzXG1waWxsYWlcYXBwZGF0YVxyb2FtaW5nXDA5ZDg0OWI2LTMyZDMtNGE0MC04NWVlLTZiODRiYTI5ZTM1Ylxtc2dzXG1zZy05MmMwZGJkOS1lNTM3LTExZWYtYTM2OC1jNDQ3NGVkNmNlZTVcYW1lLXRlc3RcOTJjMGRiZGItZTUzNy0xMWVmLWEzNjgtYzQ0NzRlZDZjZWU1Ym9keS50eHQiIHN6PSI0NTY4IiB0PSIxMzM4MzM5NDgzMjk4NDk0MzMiIGg9ImN2SXdGZXlTWC9Kcm5uNGlRamdSNGRPTjk2Yz0iIGlkPSIiIGJsPSIwIiBibz0iMSIgY2k9ImNBQUFBRVJIVTFSU1JVRk5DZ1VBQUdBSUFBQlpzaFpWUkhuYkFUMkk3RlFsRlQ1RFBZanNWQ1VWUGtNS0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIQUFBQUFzQmdBQW5BWUFBTVFCQUFBQUFBQUFBQUFBQUFFQUFRQUJBQUFBaEZWOHlRQUFBQUFBQUFBQUFBQUFBSjRBQUFCakFHRUFaQUJsQUc0QVl3QmxBRjhBWXdCdkFHNEFaZ0JwQUdRQVpRQnVBSFFBYVFCaEFHd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0FBQUFBQW5nQUFBR01BWkFCdUFGOEFkZ0JvQUdRQWJBQmZBR3NBWlFCNUFIY0Fid0J5QUdRQWN3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUNlQUFBQVl3QnZBRzRBZEFCbEFHNEFkQUJmQUcwQVlRQjBBR01BYUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWRBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUlBQUFBQUFKNEFBQUJ6QUc4QWRRQnlBR01BWlFCakFHOEFaQUJsQUY4QVlRQnpBRzBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB x-dg-refone: QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUFBbmdBQUFITUFid0IxQUhJQVl3QmxBR01BYndCa0FHVUFYd0JqQUhBQWNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFDQUFBQUFBQ2VBQUFBY3dCdkFIVUFjZ0JqQUdVQVl3QnZBR1FBWlFCZkFHTUFjd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBSUFBQUFBQUo0QUFBQnpBRzhBZFFCeUFHTUFaUUJqQUc4QVpBQmxBRjhBWmdCdkFISUFkQUJ5QUdFQWJnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdBQUFBQUFuZ0FBQUhNQWJ3QjFBSElBWXdCbEFHTUFid0JrQUdVQVh3QnFBR0VBZGdCaEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUNBQUFBQUFDZUFBQUFjd0J2QUhVQWNnQmpBR1VBWXdCdkFHUUFaUUJmQUhBQWVRQjBBR2dBYndCdUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB x-dg-reftwo: QUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFJQUFBQUFBSjRBQUFCekFHOEFkUUJ5QUdNQVpRQmpBRzhBWkFCbEFGOEFjZ0IxQUdJQWVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0FBQUFBQXhBRUFBQUFBQUFBSUFBQUFBQUFBQUFnQUFBQUFBQUFBQ0FBQUFBQUFBQUNrQVFBQUNnQUFBRElBQUFBQUFBQUFZd0JoQUdRQVpRQnVBR01BWlFCZkFHTUFid0J1QUdZQWFRQmtBR1VBYmdCMEFHa0FZUUJzQUFBQUxBQUFBQUFBQUFCakFHUUFiZ0JmQUhZQWFBQmtBR3dBWHdCckFHVUFlUUIzQUc4QWNnQmtBSE1BQUFBa0FBQUFIUUFBQUdNQWJ3QnVBSFFBWlFCdUFIUUFYd0J0QUdFQWRBQmpBR2dBQUFBbUFBQUFBQUFBQUhNQWJ3QjFBSElBWXdCbEFHTUFid0JrQUdVQVh3QmhBSE1BYlFBQUFDWUFBQUFBQUFBQWN3QnZBSFVBY2dCakFHVUFZd0J2QUdRQVpRQmZBR01BY0FCd0FBQUFKQUFBQUFBQUFBQnpBRzhBZFFCeUFHTUFaUUJqQUc4QVpBQmxBRjhBWXdCekFBQUFMZ0FBQUFBQUFBQnpBRzhBZFFCeUFHTUFaUUJqQUc4QVpBQmxBRjhBWmdCdkFISUFkQUJ5QUdFQWJnQUFBQ2dBQUFBQUFBQUFjd0J2QUhVQWNnQmpBR1VBWXdCdkFHUUFaUUJmQUdvQVlRQjJBR0VBQUFBc0FBQUFBQUFBQUhNQWJ3QjFBSElBWXdCbEFHTUFid0JrQUdVQVh3QndBSGtBZEFCb0FHOEFiZ0FBQUNnQUFBQUFBQUFBY3dCdkFIVUFjZ0JqQUdVQVl3QnZBR1FBWlFCZkFISUFkUUJpQUhrQUFBQT0iLz48L21ldGE+ x-dg-rorf: true x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PPF4D26F8E1C:EE_|BL3PR07MB8817:EE_ x-ms-office365-filtering-correlation-id: 2a5bd27f-c37f-4468-d6d5-08dd475b78c2 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700018; x-microsoft-antispam-message-info: A34SfGzj35kIr9ep4jTgmxj1GfWjnwYFaOYnCwy7Ja21XR6pU/d3sbKjKYQtpwSfxduRsbwKutAaGrjGoDGcVLQN88vhJit5HyQLKFNCO0767Pg8x+0o641hBU13LVoBCMHJj+jByd4Qer92POuEYURspf++dKhg6fYlMBsEOah+1y5muiJ6ezomlIMu//bKuY2CULQIgwZ34+JHYVL08LvNdQaPpbaPjx9yB6WDEot/POFSFR4lFXJYTwNtL5DEAG+k63HUBY08UV9JHQP/esSZyeI3d6ARaLzTW6VwxcbyHiI27/7WhYwgQ15psBvE6qX7nmh3ULovj+MZHZrWgpluKm7yzU7qp6cvRl6QYeBcNgOtucxhWJ5V5jZZvP1JCm+6nHgs8ng9RksC4K3H3c88HyfdGAPoBV9Yr4nlwLZ7T5dzW3SGGPYs7+tpPzs++NHmLpnylidFC+jGVLYPcUxHAC+7QygiSOb2f+PXTDxHuITl/2zRSeLFo08ZXV2Aaq+vFN/kt6r0S1ERRTconsF3XFuWTe/iuA8drUqF9Qg9Wozg+/gwwTIvSl660S+O11+NAoUBYqV0CfUy2dKObeVVTcUe9mWXxuKuuy8ig3Mgi3eQiwPrZv9+eu97rvBwmA1HMaNoxnrCOIzA3mIPUYY5D3qQ3Sg8p6DuU3Bz9yZzURd8qfIAhOmn+CR7wnkYHUa1vNDeeALpow+Sa1VOGDREOU6uHzBkTAPjoJwpp8ZV30lFOyatkBD1e45rwQGbECYjGlLRzhLDKf2mTfiClv0TArvyTc9yDqWFb+sdyvAJrlsiYxFJka7yk6IuZD+hgl4+ryFxA9Z/BkeqbIb9gIYYWagv5fqTsxatBfJbqFsHzQjCYuBbcdAYU8L4EJtQy+tUANfyAoYBdbJuLfJs7q66Ht4HHjZqXpLig0r/XNG3evsJRTDNM8Vx5iGsgUlTpszIfkAW0Rk5w9lOUm8AKXSZ07R8UyVh4SqNjUg1bYWDqeJaOSjcO+SnxJSaAorVpQ4hfV+5SbHLUjI0CISFzHXpUejbzYwbbHTP6gmsXh9CBvH8jET/FOMUfOzdvrVKDHzC81j4za0YoHjnAMeZdhobk2mxuavqbCEfcFRqT7Be4kFbiStMQ+v3He4ZZMtpvL+Qm+kW7iW6/2JPFd+kkKlbllS/V8urpfncL88tMQM+3/U72Cmew9g65ChmUa1FF4ulbCmrh9UckflfmOc2hlBitAseCzL55MaWFkSpkYcWKivI1Chbvi5iDYgpbcj2LEBLoVMU4XpN0Qu0KTAGzA6wIKrW0Ol1ZrAAF1sVOFiTYKl//MQwDuyzl/rgPwRu67c2kytIzve+HMrS+zp5DaEPpzKSzSOQ2J+GyL1KBFSwkIeQAWVTP4YoZId7VuoQOqu+hDwJGmJRIOaxz1v95XW7qo0qm6OE8w4RYgfQY2UnYdYJ5Fo3/M2RhDUJJ3kz x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PPF4D26F8E1C.namprd07.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: HYNnP7G0lINxR++Jdkko92owt81eapDLsMhp/TkNekqNNv0a4JCb3/Fw3wl3TzEOMATZNpspC9+LKzUQMVQcvfr8Rxt5UjMr0jz28YDqjGBnkYKgb/H0Zu1bKF0MzGou6ER/E6KUDtLQLhgZ/cSoOG+rBbIuN81sQpJL2dJdssv3yveo+FWTNm3HUsxrgxgBHhGqC15pnZpi+wDIJ5He1gzmtXQZQGU6WyPv0b9FCNff818nJTPjRMWUDXF1joj61mHXsoapSQYdJQCzloHVtUDAtal9efL5dYfSY+NK6mPsSVAR0qXMP2G0qBLQNl0E6g2PvCYZEDryaa/3fuXZK1M8b2tHwuc0ryxmaYYzepvWVDTr68J/jzFHAoI937sib4/9DfvpJRFOduP3vMDPymMVZ1zreOo9euFMTzJgUjq/VVOK8LdihjxgeQgqGwIC1GL/sAmX0Ix22enIW2zqqlNijFEhrGtD8eoYgX49fBHIV84iIy0GP9W5rS2LTGmVaALFLOEf4oO8fgUszyKg1veMzRq9wtugDi9L/Sh8xW8EdSp6+HJEMiOUezbB+9T0X0l4JdiQe7GSqBRMUSuHCDjBU04wIX2kNB6tUYvM7EczyllgxanChp9hhcz9/VJXU2rRYEo7vvadvZZg6qyXwsvPiEQ7/c84Pr979WIiLWFFfnB7EqxlcRkw7m0/dB+6y8wWfDVS2mpKdaRi1C8+QRBqCinfZSsQz7yRJQ2/GCKOWDtt3BnPMenkDww0opgF2SPWw1seoo422yxJpls6hLZsQqwifNcle18dCBVP0XmSCrCMCpQRGpDK4YTQ/pY9XRddEWqV1/fdjsQcYLYMStyNcZoaMNstwSZYT2270Jt2TcaVmXERU915tDPSfAkXItic/WdXdNtpxdKbeqEKp64pyYG3lqGA0PEKKs/3dUSfmXtBGgQHtCfJDE3G+HUytO+L3jqIhOMrzeRX602kSTNRUv95/L2Dk0n19UEbcmUOdV+5L8T1yhfWBJjVIJtWAD40aP4ZcFukTaJw96PGZ6kX9OcihqojUeTG7j8wfSsAio0CWPDKpekLlyy4VtmoX2egM7VEBUnhsM5oui+BXMy0Q4MXLMo1N3SUaCUY3etrb6A91HvTjcc8V1nWkOLKuKKFtjebJ7HjrUjGCveIGWa9NZ6FD3l67huFz1hXQLz/CszZ3m8g1nzvgM/jGQtfmJZw0rc5f5QcGtG3WXRVZKEepDL2phpFim7vgCYzHNsbiyytQ5Z6lPWEJh/RtM1jXwBWWPnoyTgm2NJoftu70Z8QLW6mcN9SMxF28DSri+P0zU+RhbdQakJuamFDmHvMVwFOc8k4x8/yo/oxidAcezpN8KRsIG7xFkXmw9FVJn8w35o6l76oF5XUMShWvVxWYKsnYAptxQt84fDbqFmKJpaFWyxBTGDqmDPFlpOxinPSSukSapPs6SXRnyImsK8Vdq3jjLZa4MCszh4x1Nubvj/UXJdyjOS03kpRdAFv/79ja3+q23xfo3Gm80yNIQPeQJAjVEVGkpID68spl13J0HZsFDKXO8kaPiNwMf4oX6v/vBwm7z+yN1vDhfcn4ZyK Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: cadence.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PPF4D26F8E1C.namprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a5bd27f-c37f-4468-d6d5-08dd475b78c2 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2025 09:40:35.0084 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d36035c5-6ce6-4662-a3dc-e762e61ae4c9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: EZrO71I6I3oSB1H2WUwaYe/IcvwVJLP7jTgjceACbmjek1lutdVgX1oT/ByGvD025dHVLY9C+f8nhwvjSotvZOkp0F7dQ918IoYXX0T669E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR07MB8817 X-Proofpoint-ORIG-GUID: eRy4kNs44brgDhghahrfVf9Dwm9RgM1g X-Authority-Analysis: v=2.4 cv=ZJ0tmW7b c=1 sm=1 tr=0 ts=67a5d515 cx=c_pps a=joY0rRILPjs92yFVhGOM/w==:117 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=T2h4t0Lz3GQA:10 a=aBq_wrnhfgAA:10 a=Zpq2whiEiuAA:10 a=Br2UW1UjAAAA:8 a=IaFNTQcsxjruqrN0RNYA:9 a=CjuIK1q_8ugA:10 a=WmXOPjafLNExVIMTj843:22 X-Proofpoint-GUID: eRy4kNs44brgDhghahrfVf9Dwm9RgM1g X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-07_04,2025-02-07_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_check_notspam policy=outbound_check score=0 adultscore=0 phishscore=0 mlxlogscore=999 priorityscore=1501 lowpriorityscore=0 impostorscore=0 mlxscore=0 suspectscore=0 bulkscore=0 malwarescore=0 spamscore=0 clxscore=1015 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502070073 Add is_hpa boolean to struct cdns_pcie, to support presence of next generation - HPA(High performance architecture) PCIe controllers. Signed-off-by: Manikandan K Pillai --- drivers/pci/controller/cadence/pcie-cadence-plat.c | 5 +++++ drivers/pci/controller/cadence/pcie-cadence.h | 1 + 2 files changed, 6 insertions(+) -- 2.27.0 diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/pci/controller/cadence/pcie-cadence-plat.c index 0456845dabb9..98ffd184be93 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-plat.c +++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c @@ -42,11 +42,13 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev) const struct cdns_plat_pcie_of_data *data; struct cdns_plat_pcie *cdns_plat_pcie; struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; struct pci_host_bridge *bridge; struct cdns_pcie_ep *ep; struct cdns_pcie_rc *rc; int phy_count; bool is_rc; + bool is_hpa; int ret; data = of_device_get_match_data(dev); @@ -55,6 +57,8 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev) is_rc = data->is_rc; + is_hpa = of_property_read_bool(np, "hpa"); + pr_debug(" Started %s with is_rc: %d\n", __func__, is_rc); cdns_plat_pcie = devm_kzalloc(dev, sizeof(*cdns_plat_pcie), GFP_KERNEL); if (!cdns_plat_pcie) @@ -72,6 +76,7 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev) rc = pci_host_bridge_priv(bridge); rc->pcie.dev = dev; rc->pcie.ops = &cdns_plat_ops; + rc->pcie.is_hpa = is_hpa; cdns_plat_pcie->pcie = &rc->pcie; ret = cdns_pcie_init_phy(dev, cdns_plat_pcie->pcie); diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h index f5eeff834ec1..fecb64ec9581 100644 --- a/drivers/pci/controller/cadence/pcie-cadence.h +++ b/drivers/pci/controller/cadence/pcie-cadence.h @@ -305,6 +305,7 @@ struct cdns_pcie { struct resource *mem_res; struct device *dev; bool is_rc; + bool is_hpa; int phy_count; struct phy **phy; struct device_link **link; From patchwork Fri Feb 7 09:41:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manikandan Karunakaran Pillai X-Patchwork-Id: 13964695 X-Patchwork-Delegate: kw@linux.com Received: from mx0a-0014ca01.pphosted.com (mx0b-0014ca01.pphosted.com [208.86.201.193]) (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 39C8F1DDA31; Fri, 7 Feb 2025 09:41:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=208.86.201.193 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738921318; cv=fail; b=FcEND1GRgCHjRgCLkVnCp1kP0ib7MkQU+9W464Yk+FNKJJJ2mH+V4nrfJDMhI7H92jutPlUb6LFDO1hJnX23ldxMDGdCXYn6ryh3L6MvGC2hpi2WrW1MGtWFM3kopr5h6T0ZNbeeJAADk0qk5+KU6aQr9gHqBfY7AORZn0hpOMw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738921318; c=relaxed/simple; bh=W8cKGTsSehbp/n7p51IbEWANMRZm8+8DyheFtLhDu0Q=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=A+5G5Ps+iKOrhXivG3Py4Ik4bIzpeQNzcRJ0zoJt3OXlvAMPsYDQXETdYfPzzhFoJGolp5eh/0ZP/GUVzG/t5TxA77T2QuBq9lE9YNZ0Wax8vWThW0nQ89Zffm1RNBQqau50w5Ob3YaVg8/8DG5zmidOYWDmvV/kgFvj4deygrM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=cadence.com; spf=pass smtp.mailfrom=cadence.com; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b=k78GM0P9; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b=jU0Xtxj1; arc=fail smtp.client-ip=208.86.201.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=cadence.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cadence.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b="k78GM0P9"; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b="jU0Xtxj1" Received: from pps.filterd (m0042333.ppops.net [127.0.0.1]) by mx0b-0014ca01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5177R2b7026937; Fri, 7 Feb 2025 01:41:48 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=proofpoint; bh=5Jzm1mxjm0S3JXM++UkoMQ69Kbf/9QnVHnJIXd+Xho0=; b=k78GM0P9rwbe 7LH2pmEcSdQxIEYgt3m+XRpxcq1SM/yesxgdS2BT/bobNKKVPvVhiBFbYVhJwmP+ wK+xmfD4XiXFa6HN1zlRLMlEFVEiVQDk8TjQoNoMNPo5cX5U8UObmezwaUMuSNyY m2ImNNcG59/1HbMICxqGKfgEtbrCb5yfS2VwVbPbqsBwV9/wBz31Lk3ZoMTTXUUb 4Mw5ZeChcX3gByeUe78/mjWZ9IJEm96QB1GRkGgeK23HNoYNgq9sDry4R6D0SJjV w1D1B8i02LHc53hkMt2Qi+cNwjLf/4LrMLsBZeTm9YKFHPeRTyMST7Fr+zED0FHz 4PcW0C86+Q== Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazlp17013079.outbound.protection.outlook.com [40.93.6.79]) by mx0b-0014ca01.pphosted.com (PPS) with ESMTPS id 44ndt0rm5f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 07 Feb 2025 01:41:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Vbe/JNQYLs/jqCBk0MlMcZUgXFXdVlPijacpYHKm571c4u6GoL8eNEhx2MuU5QNfj7GYyenEOlbg6AsMyC4NV/CyAMQJxATcDtgRaaQvGN0ZgMiOssh2whfeDTh+7q0XkXJBubb4QX1SfAuGBI9HalCeSOiTxKZtrRz9a9cInu5eeAUKWt7qCJzDOp/2EQHREjRCnlIgLYGa74VjZH6HvL6TwwTHzrerlQLusQkdwNQK1MFCpvqCvScauE5+8Ju8y5ECnPclY+TimwU6EYpgHnvzfSxs7cQZ83yX9ELkbQQjQDNpp0T/E5Vi+SyYZpwUhsWnPB5p7R0WMhQ0I9s3SQ== 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=5Jzm1mxjm0S3JXM++UkoMQ69Kbf/9QnVHnJIXd+Xho0=; b=KUWmrapB9himoPShxXQKGeAql5EqHGelLxbyCwopQEDmB/1QlpYj4Q0s4ZrmAQ4JwRFqEFZEhBjb6xQurnFw5z9/xDZUwtKy0rT61y9vlZUkDP8JO5pn1TtiUMfiwdjJHRiYZ1Rt9lZU2CZUnWpWAdBKE/0n0hlSFdJ0Bkt3E+b8XZL++ZuJrXYqGgBfrVH/bKSiAzNqfIdIAzViM8IpxpEOeiJS2WLAVCG42gnM1/12W2AaofhVyTV7rHygoMMIhXbDX7mn1svut+csgLS8eBklyIXUynq+mueLFqVeU4H22Ivi1BZRYPQrSN1Rgyo5H4D54lK9ynbAeq6n5JFJig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cadence.com; dmarc=pass action=none header.from=cadence.com; dkim=pass header.d=cadence.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5Jzm1mxjm0S3JXM++UkoMQ69Kbf/9QnVHnJIXd+Xho0=; b=jU0Xtxj186CkHEFxbuqXAustdTTvU8SSTpxm9IrHXNm8WfF/jb8zugoF8KB+0IGv5ObRx9Jfs7o+83BI+EacARwdQndFEZLRA4vZANdVxQQ+5aD/cAPkFw8XTbLyLiLl+srWdHlKitUvO9oQk5B7zww+hUlQqSm/YmIa4sDMxaI= Received: from CH2PPF4D26F8E1C.namprd07.prod.outlook.com (2603:10b6:61f:fc00::278) by BL3PR07MB8817.namprd07.prod.outlook.com (2603:10b6:208:350::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.14; Fri, 7 Feb 2025 09:41:46 +0000 Received: from CH2PPF4D26F8E1C.namprd07.prod.outlook.com ([fe80::d517:a32:d647:386c]) by CH2PPF4D26F8E1C.namprd07.prod.outlook.com ([fe80::d517:a32:d647:386c%7]) with mapi id 15.20.8422.012; Fri, 7 Feb 2025 09:41:46 +0000 From: Manikandan Karunakaran Pillai To: "lpieralisi@kernel.org" , "manivannan.sadhasivam@linaro.org" , "bhelgaas@google.com" , "kw@linux.com" , "robh@kernel.org" CC: "manivannan.sadhasivam@linaro.org" , "linux-kernel@vger.kernel.org" , "linux-pci@vger.kernel.org" Subject: [RFC 2/3] PCI: cadence: Add support for PCIe Endpoint HPA controller Thread-Topic: [RFC 2/3] PCI: cadence: Add support for PCIe Endpoint HPA controller Thread-Index: AQHbeUJuDpjhayRluEOMJR4sHBEYfbM7liow Date: Fri, 7 Feb 2025 09:41:45 +0000 Message-ID: References: <20250207092645.3140461-1-mpillai@cadence.com> <20250207092645.3140461-3-mpillai@cadence.com> In-Reply-To: <20250207092645.3140461-3-mpillai@cadence.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-ref: PG1ldGE+PGF0IGFpPSIwIiBubT0iYm9keS50eHQiIHA9ImM6XHVzZXJzXG1waWxsYWlcYXBwZGF0YVxyb2FtaW5nXDA5ZDg0OWI2LTMyZDMtNGE0MC04NWVlLTZiODRiYTI5ZTM1Ylxtc2dzXG1zZy1iYjI4ZDk3ZS1lNTM3LTExZWYtYTM2OC1jNDQ3NGVkNmNlZTVcYW1lLXRlc3RcYmIyOGQ5ODAtZTUzNy0xMWVmLWEzNjgtYzQ0NzRlZDZjZWU1Ym9keS50eHQiIHN6PSI0NTMxMCIgdD0iMTMzODMzOTQ5MDA3NzUzMjE0IiBoPSJFOGVyUnFjbTFqRDRsVjM3TkdTQmVRRG5qWTQ9IiBpZD0iIiBibD0iMCIgYm89IjEiIGNpPSJjQUFBQUVSSFUxUlNSVUZOQ2dVQUFLWUlBQUQrcjM1OVJIbmJBZGFDSllqOWZxU2oxb0lsaVAxK3BLTUtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBQUFBc0JnQUFuQVlBQUFvQ0FBQUFBQUFBQUFBQUFBRUFBUUFCQUFBQWhGVjh5UUFBQUFBQUFBQUFBQUFBQUo0QUFBQmpBR0VBWkFCbEFHNEFZd0JsQUY4QVl3QnZBRzRBWmdCcEFHUUFaUUJ1QUhRQWFRQmhBR3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdBQUFBQUFuZ0FBQUdNQVpBQnVBRjhBZGdCb0FHUUFiQUJmQUdzQVpRQjVBSGNBYndCeUFHUUFjd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUNBQUFBQUFDZUFBQUFZd0J2QUc0QWRBQmxBRzRBZEFCZkFHMEFZUUIwQUdNQWFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUI5QUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFJQUFBQUFBSjRBQUFCekFHOEFkUUJ5QUdNQVpRQmpBRzhBWkFCbEFGOEFZUUJ6QUcwQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB x-dg-refone: QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0FBQUFBQW5nQUFBSE1BYndCMUFISUFZd0JsQUdNQWJ3QmtBR1VBWHdCakFIQUFjQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBV3dBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUNlQUFBQWN3QnZBSFVBY2dCakFHVUFZd0J2QUdRQVpRQmZBR01BY3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUlBQUFBQUFKNEFBQUJ6QUc4QWRRQnlBR01BWlFCakFHOEFaQUJsQUY4QVpnQnZBSElBZEFCeUFHRUFiZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUFBbmdBQUFITUFid0IxQUhJQVl3QmxBR01BYndCa0FHVUFYd0JxQUdFQWRnQmhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFDQUFBQUFBQ2VBQUFBY3dCdkFIVUFjZ0JqQUdVQVl3QnZBR1FBWlFCZkFIQUFlUUIwQUdnQWJ3QnVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB x-dg-reftwo: QUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBSUFBQUFBQUo0QUFBQnpBRzhBZFFCeUFHTUFaUUJqQUc4QVpBQmxBRjhBY2dCMUFHSUFlUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdBQUFBQUFDZ0lBQUFBQUFBQWNBQUFBQVFBQUFBQUFBQUFlOXhzbzY2d25TS1IzbzZMM1RJcm9IQUFBQUFFQUFBQUFBQUFBY2EwWEEyRHEwMFdITDB4TXZhY296eVlBQUFBQkFBQUFIZ0FBQUFBQUFBQmpBRzhBWkFCbEFGOEFZd0J2QUd3QWJ3QnVBQUFBcEFFQUFBb0FBQUF5QUFBQUFBQUFBR01BWVFCa0FHVUFiZ0JqQUdVQVh3QmpBRzhBYmdCbUFHa0FaQUJsQUc0QWRBQnBBR0VBYkFBQUFDd0FBQUFBQUFBQVl3QmtBRzRBWHdCMkFHZ0FaQUJzQUY4QWF3QmxBSGtBZHdCdkFISUFaQUJ6QUFBQUpBQUFBSDBBQUFCakFHOEFiZ0IwQUdVQWJnQjBBRjhBYlFCaEFIUUFZd0JvQUFBQUpnQUFBQUFBQUFCekFHOEFkUUJ5QUdNQVpRQmpBRzhBWkFCbEFGOEFZUUJ6QUcwQUFBQW1BQUFBV3dBQUFITUFid0IxQUhJQVl3QmxBR01BYndCa0FHVUFYd0JqQUhBQWNBQUFBQ1FBQUFBQ0FBQUFjd0J2QUhVQWNnQmpBR1VBWXdCdkFHUUFaUUJmQUdNQWN3QUFBQzRBQUFBQUFBQUFjd0J2QUhVQWNnQmpBR1VBWXdCdkFHUUFaUUJmQUdZQWJ3QnlBSFFBY2dCaEFHNEFBQUFvQUFBQUFBQUFBSE1BYndCMUFISUFZd0JsQUdNQWJ3QmtBR1VBWHdCcUFHRUFkZ0JoQUFBQUxBQUFBQUFBQUFCekFHOEFkUUJ5QUdNQVpRQmpBRzhBWkFCbEFGOEFjQUI1QUhRQWFBQnZBRzRBQUFBb0FBQUFBQUFBQUhNQWJ3QjFBSElBWXdCbEFHTUFid0JrQUdVQVh3QnlBSFVBWWdCNUFBQUEiLz48L21ldGE+ x-dg-rorf: true x-dg-tag-bcast: {7FF4CCB8-0673-4548-995C-62232765B6C0} x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PPF4D26F8E1C:EE_|BL3PR07MB8817:EE_ x-ms-office365-filtering-correlation-id: 8b5630f4-4fb0-490a-7ad2-08dd475ba313 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700018; x-microsoft-antispam-message-info: X5fJ10RSvyQc9mzlYObTTtcKvUM6NSY/jvkCBqd2e1qNPqNkXvZPJGClNKdEWTnpVqekrfnwNQvlcWcj5WKKTW5JSTBo9vOo5P/LRSyrahLSzSrgvLvvHgElu90hzrdzuBJdQ4R73zdqeB4YnfYNuNlDfQu01efbO/lK1/pD4hIcf2O8+nPcp2yCVeqU1PTVdTD0Tw2IEE7XmQmaIswdzPuPMDXPL+7AaO9Hpcm4WE6t6udQekjKfRh+Vmm8uS25BeuZDCuOULoDXY1lVM30z+USOrydEvoUkokXYgjCeIUz7dNPtTqi4rK7JYGf5nE0XlcpQ1oyaHqrxSszE7vOonp8+JO9WQpKgqN+ef9OLsoOeY2DW+z71XOHE9mjM/JJYSfo3p1DsvmIa+IwhXElWEZGN3oOKL8C+7Ih8qs/Z8fL6jmUFt0awBvqTFPZqQVvfob3qu7a0O3flEDSpYWAOXMKO9CEwELNUy/nR+1C9U6OMzskGZ6zIZD0uQ2l7ukxveXyidt59F/+xuT+OgqN5W8EzKFFo7hg5HOfYeRPTzvizb6+DfPShloB7lGCQLyDnzlpi7Tt821uoE/lzYJR3DugzbTjywcHT2KRsE+jvkW++JiiRNIkCMhAURV4BKKMknV8ItjKhwbwtSfaO+DRKYwpLbTFUKinkL8VE5CzCZDC54mZlXrYaGhWlMJjOuBnEnzVNw5GjUaTzWHWVF/7gtzMSXXi/q2yEpd+fbD+Bfj+6sPFSyLTsD/Jbi1XmlhGETMs6E5ipKeji2lQo1sCWKFygGL3W/HqoA+Az9KyM+sJCBaJhK3D9fFrTFLEu0hJjlCZ6nJdBG3/gWVxC1ShxiNfAgMWTgKZurFFAxZL8+vTRZW6e6kgHtFx28Et2yA+BSxk8Wts5YiXiRlUUphUC86NHDmHxuoAMwxcnqkrRzzTKkO+rFdkJ/v9WrIqRTBcAQRFzRskmSC6zTNmkNBslLP778s3FfG6OGzkxQKv4YtZUviwwDkF9vhwuTcK2859juhRfJ5A2DgrNoeTT8/7L022C2miLX6XjrM0Y2DpcPFgb9tOqL5MddFIqfeDVB+oskSoNzZKYAQn9HfgaHbsCAyGnhVTREyrW9Dguda9oS8ZtZ7fkjl092thjEGbUOU1nIZyRhZqHfgQEVCtTVYis/kRbPH8lzxKko+64/DfYQGYGrk5j9Nl99PQL7WR24a8JRf9NeiyDF9tUcijBY8YNq1NPCPav6ofO7jDEXi8EWlrldaXkvycaRfKBmPvvHOynOQ8627iFDlWkGLozkMLV9z/jFd7x1sGZRmRt2JBWrmRG/APbrInzr+k+VoH9HqaFnHHUxbUN0AIA4+FV3ba6ZZCreMR8ZXbQf6wqRz4bddxHihBS2GFQj9Zkal6BFrdtWe5Pv2ivpVaK+5FGcxFhs1m9v3gxejzIzvnu3KB3u1sxzZz5pjtKPx6oLvQr4bF x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PPF4D26F8E1C.namprd07.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: PXFZnW6d3tJ9RLHrXKJ2za+0E4vDs4x0fc1qUOQ1YdJoiSpLCGbgsiT/YK6k1mMEQC+QLcu/w/y/xz/b9ibhhC/SOYQDal1EWEd9ZZ6y9QYaJYTc+AzbjokByobfhMmSSMVzpCNkiGvE4xi3ekbFquRaARA3VkFHEsF8oIfLoRooV+ysumQHeQjKF4xIIGrLna3vZ2tqAkRRMaOE6uQuVKIWnXfbwsemPf9FqiLp/u3IMw7ikLcKx2nAo2D4gGRciC1zJQAVcYZpgz9y1g2GCcH1gdQ9Sr3m1oZOjbElBzozEKUyhQCS4FGfKGzgdh9Mdurlf69wqsqP3r3GKC0i1aEeQT82yv0mWvMNC5E+qFc7qF1O2oEosmIjKiGd7v2McxYr56iGf+6YpVq+cLBlNA4Wf3tU+l9p8r3GmxiGh0JoIWQ4cIGaqU/tYhdGvzVufqK2Mcv+HWkdFdtleXZs2u+Xhz4FLEbB0ylOGnDUFn0pck6nlPN3j8fUzH58g9A8bVlx8avTmgKBmP/lhMuKiAmcXXePJwMKVQ4cm5ohkoRlWEutSUMtwm0e7DNb4bA1j8Lv+j/8F9ghOeQHpAadCSX7VucPRGnckPbbBOvpvJvhtuMjuBuMKlpcpRAkgAzcpYNDFiPpJA76yNfIZlcSF+/dK6mENmayth2fVa6nNlJgls2we6lHnRhStfDmRN+UKgU0aAC61w6zkabEe88NrBE/mZTaJstY7TKxcPABiMccE2LE0QUkl/2ZIMnT8R/ourcLgGJgopbEEVLpReJ8h9VESEeoJED+vGBtCInbKiPrBizXRe56RWRXm2HBL8lAIhVHsAA9nOGq5WRyVx7pmIu2+vBlOOIAwyz9YlRuEkT5tASO891rbP4btPe7Kq5Dga4zDTp7NMy1CjtrvcppviPbCWr6Gop6Lgm9A/YTDcjxIpEMkfkNZg9jv0u8mHjfia9qOhmeSVFMXfWcu/PRrWtcqn6gNJj4yDuKrOJnOQeexzOrBzPCn0PBvI9IdWZrRN/jj71K7N03sTXaoTKTh3HZZekPM2CCANAjzMblFOQBjdKIBd3cReldFctnMFsAcUu2tVrAp4ZxkpThLmU1iSjYBP9edTBrbK8M+4/aAx+f4GevZ8YzBxHEvVA26nEydnJPGui4wljQNyniLLj4MLUdCbNxox5eYtKiGFVDdtbB4uGpgvp0uxmezSrkPCKhyP1b2JSJkfNCgA6Oius/1BSyqC83tHdJ9+4TKkE7gzc62rV/OIL12p466ufYL0kHBwQRiDU4nwZOnj6R2zBXXk5omG/NS1vBm4UrSzHX+AYIGLuijixZTgU+xROeivDmCPfbYslQPbuUMDJv/jZmHNOWJkxgYo3fmH1NoOs2H+AmNhQ1/DKgrXLA/hRteJCb8fM7Wl0thwiUgeoTzr6Y2nY36TVjMN6Kd43C07xdyihprUMDKNxUCV1STcSvpPEKfOP1Z4nos6syzzM1yA7SfFlj8jbCR5XJoPTnxB1bzE/kbWVqW5lP4/YAjYZx6D8CG0MTFnLEaKeEOGfLGrX+icgQ+uLe5c3UVIwMCcqrvW1cKYfsaklO4Ym2t4/+IGDz Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: cadence.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PPF4D26F8E1C.namprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b5630f4-4fb0-490a-7ad2-08dd475ba313 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2025 09:41:45.9913 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d36035c5-6ce6-4662-a3dc-e762e61ae4c9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Wa+fdsEKc5jVlXfYB9aGRJLy2Z1nyH85kPx6/PfDYEdPSh/hbEAAv6dvS/ir7Wl3yB9BeLNAlK3PU728tjnj+xYyPr73sVerEVk7QP59z/0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR07MB8817 X-Proofpoint-ORIG-GUID: VRacR2n7WPbN3e4yNZzuy15TiFumntjF X-Authority-Analysis: v=2.4 cv=ZJ0tmW7b c=1 sm=1 tr=0 ts=67a5d55b cx=c_pps a=K1+iGLXgNHoxMcL4Lb8acQ==:117 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=T2h4t0Lz3GQA:10 a=aBq_wrnhfgAA:10 a=Zpq2whiEiuAA:10 a=Br2UW1UjAAAA:8 a=u77rZ1vYNVD7zGrFyLEA:9 a=CjuIK1q_8ugA:10 a=WmXOPjafLNExVIMTj843:22 X-Proofpoint-GUID: VRacR2n7WPbN3e4yNZzuy15TiFumntjF X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-07_04,2025-02-07_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_check_notspam policy=outbound_check score=0 adultscore=0 phishscore=0 mlxlogscore=999 priorityscore=1501 lowpriorityscore=0 impostorscore=0 mlxscore=0 suspectscore=0 bulkscore=0 malwarescore=0 spamscore=0 clxscore=1015 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502070073 Add support for the second generation PCIe controller by adding the required callback function and updating the register addresses and register bit definitions. Signed-off-by: Manikandan K Pillai --- .../pci/controller/cadence/pcie-cadence-ep.c | 144 ++++++++- .../controller/cadence/pcie-cadence-host.c | 12 +- drivers/pci/controller/cadence/pcie-cadence.h | 277 ++++++++++++++++++ 3 files changed, 420 insertions(+), 13 deletions(-) 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); + int (*cdns_pcie_host_init_root_port)(struct cdns_pcie_rc *rc); + 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_init_address_translation)(struct cdns_pcie_rc *rc); + void (*cdns_pcie_detect_quiet_min_delay_set)(struct cdns_pcie *pcie); + void (*cdns_pcie_set_outbound_region)(struct cdns_pcie *pcie, u8 busnr, u8 fn, + u32 r, bool is_io, u64 cpu_addr, + u64 pci_addr, size_t size); + void (*cdns_pcie_set_outbound_region_for_normal_msg)(struct cdns_pcie *pcie, + u8 busnr, u8 fn, u32 r, + u64 cpu_addr); + void (*cdns_pcie_reset_outbound_region)(struct cdns_pcie *pcie, u32 r); }; /** @@ -526,6 +752,22 @@ int cdns_pcie_host_init(struct cdns_pcie_rc *rc); int cdns_pcie_host_setup(struct cdns_pcie_rc *rc); void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn, int where); +int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc); 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_init_address_translation(struct cdns_pcie_rc *rc); +int cdns_pcie_host_init(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_init_root_port(struct cdns_pcie_rc *rc); +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); +int cdns_pcie_hpa_host_init_address_translation(struct cdns_pcie_rc +*rc); int cdns_pcie_hpa_host_init(struct cdns_pcie_rc *rc); + #else static inline int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc) { @@ -547,6 +789,34 @@ static inline void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int d { return NULL; } + +void __iomem *cdns_pci_hpa_map_bus(struct pci_bus *bus, unsigned int +devfn, int where) { + return NULL; +} + +int cdns_pcie_hpa_host_init_root_port(struct cdns_pcie_rc *rc) { + return 0; +} + +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) +{ + return 0; +} + +int cdns_pcie_hpa_host_init_address_translation(struct cdns_pcie_rc +*rc) { + return 0; +} + +int cdns_pcie_hpa_host_init(struct cdns_pcie_rc *rc) { + return 0; +} #endif #ifdef CONFIG_PCIE_CADENCE_EP @@ -572,6 +842,13 @@ 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); +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, u8 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 *pcie, + u8 busnr, u8 fn, u32 r, u64 cpu_addr); void +cdns_pcie_hpa_reset_outbound_region(struct cdns_pcie *pcie, u32 r); + extern const struct dev_pm_ops cdns_pcie_pm_ops; #endif /* _PCIE_CADENCE_H */ -- 2.27.0 diff --git a/drivers/pci/controller/cadence/pcie-cadence-ep.c b/drivers/pci/controller/cadence/pcie-cadence-ep.c index e0cc4560dfde..c911963b6e06 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-ep.c +++ b/drivers/pci/controller/cadence/pcie-cadence-ep.c @@ -121,7 +121,7 @@ static int cdns_pcie_ep_set_bar(struct pci_epc *epc, u8 fn, u8 vfn, reg = CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn); else reg = CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn); - b = (bar < BAR_4) ? bar : bar - BAR_4; + b = (bar < BAR_3) ? bar : bar - BAR_3; if (vfn == 0 || vfn == 1) { cfg = cdns_pcie_readl(pcie, reg); @@ -158,7 +158,7 @@ static void cdns_pcie_ep_clear_bar(struct pci_epc *epc, u8 fn, u8 vfn, reg = CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn); else reg = CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn); - b = (bar < BAR_4) ? bar : bar - BAR_4; + b = (bar < BAR_3) ? bar : bar - BAR_3; if (vfn == 0 || vfn == 1) { ctrl = CDNS_PCIE_LM_BAR_CFG_CTRL_DISABLED; @@ -569,7 +569,10 @@ static int cdns_pcie_ep_start(struct pci_epc *epc) * BIT(0) is hardwired to 1, hence function 0 is always enabled * and can't be disabled anyway. */ - cdns_pcie_writel(pcie, CDNS_PCIE_LM_EP_FUNC_CFG, epc->function_num_map); + if (pcie->is_hpa) + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_LM_EP_FUNC_CFG, epc->function_num_map); + else + cdns_pcie_writel(pcie, CDNS_PCIE_LM_EP_FUNC_CFG, +epc->function_num_map); /* * Next function field in ARI_CAP_AND_CTR register for last function @@ -606,6 +609,113 @@ static int cdns_pcie_ep_start(struct pci_epc *epc) return 0; } +static int cdns_pcie_hpa_ep_set_bar(struct pci_epc *epc, u8 fn, u8 vfn, + struct pci_epf_bar *epf_bar) +{ + struct cdns_pcie_ep *ep = epc_get_drvdata(epc); + struct cdns_pcie_epf *epf = &ep->epf[fn]; + struct cdns_pcie *pcie = &ep->pcie; + dma_addr_t bar_phys = epf_bar->phys_addr; + enum pci_barno bar = epf_bar->barno; + int flags = epf_bar->flags; + u32 addr0, addr1, reg, cfg, b, aperture, ctrl; + u64 sz; + + /* + * BAR size is 2^(aperture + 7) + */ + sz = max_t(size_t, epf_bar->size, CDNS_PCIE_EP_MIN_APERTURE); + /* + * roundup_pow_of_two() returns an unsigned long, which is not suited + * for 64bit values. + */ + sz = 1ULL << fls64(sz - 1); + /* + * 128B -> 0, 256B -> 1, 512B -> 2, ... + */ + aperture = ilog2(sz) - 7; /* 128B -> 0, 256B -> 1, 512B -> 2, ... */ + + if ((flags & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) { + ctrl = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_IO_32BITS; + } else { + bool is_prefetch = !!(flags & PCI_BASE_ADDRESS_MEM_PREFETCH); + bool is_64bits = !!(flags & PCI_BASE_ADDRESS_MEM_TYPE_64); + + if (is_64bits && (bar & 1)) + return -EINVAL; + + if (is_64bits && is_prefetch) + ctrl = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS; + else if (is_prefetch) + ctrl = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS; + else if (is_64bits) + ctrl = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_MEM_64BITS; + else + ctrl = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_MEM_32BITS; + } + + addr0 = lower_32_bits(bar_phys); + addr1 = upper_32_bits(bar_phys); + + if (vfn == 1) + reg = CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG(bar, fn); + else + reg = CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG(bar, fn); + b = (bar < BAR_4) ? bar : bar - BAR_4; + + if (vfn == 0 || vfn == 1) { + cfg = cdns_pcie_readl(pcie, reg); + cfg &= ~(CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) | + CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)); + cfg |= (CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_APERTURE(b, aperture) | + CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, ctrl)); + cdns_pcie_writel(pcie, reg, cfg); + } + + fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar), addr0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar), +addr1); + + if (vfn > 0) + epf = &epf->epf[vfn - 1]; + epf->epf_bar[bar] = epf_bar; + + return 0; +} + +static void cdns_pcie_hpa_ep_clear_bar(struct pci_epc *epc, u8 fn, u8 vfn, + struct pci_epf_bar *epf_bar) { + struct cdns_pcie_ep *ep = epc_get_drvdata(epc); + struct cdns_pcie_epf *epf = &ep->epf[fn]; + struct cdns_pcie *pcie = &ep->pcie; + enum pci_barno bar = epf_bar->barno; + u32 reg, cfg, b, ctrl; + + if (vfn == 1) + reg = CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG(bar, fn); + else + reg = CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG(bar, fn); + b = (bar < BAR_4) ? bar : bar - BAR_4; + + if (vfn == 0 || vfn == 1) { + ctrl = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_DISABLED; + cfg = cdns_pcie_readl(pcie, reg); + cfg &= ~(CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) | + CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)); + cfg |= CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, ctrl); + cdns_pcie_writel(pcie, reg, cfg); + } + + fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar), 0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar), +0); + + if (vfn > 0) + epf = &epf->epf[vfn - 1]; + epf->epf_bar[bar] = NULL; +} + static const struct pci_epc_features cdns_pcie_epc_vf_features = { .linkup_notifier = false, .msi_capable = true, @@ -645,6 +755,21 @@ static const struct pci_epc_ops cdns_pcie_epc_ops = { .get_features = cdns_pcie_ep_get_features, }; +static const struct pci_epc_ops cdns_pcie_hpa_epc_ops = { + .write_header = cdns_pcie_ep_write_header, + .set_bar = cdns_pcie_hpa_ep_set_bar, + .clear_bar = cdns_pcie_hpa_ep_clear_bar, + .map_addr = cdns_pcie_ep_map_addr, + .unmap_addr = cdns_pcie_ep_unmap_addr, + .set_msi = cdns_pcie_ep_set_msi, + .get_msi = cdns_pcie_ep_get_msi, + .set_msix = cdns_pcie_ep_set_msix, + .get_msix = cdns_pcie_ep_get_msix, + .raise_irq = cdns_pcie_ep_raise_irq, + .map_msi_irq = cdns_pcie_ep_map_msi_irq, + .start = cdns_pcie_ep_start, + .get_features = cdns_pcie_ep_get_features, +}; int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep) { @@ -682,10 +807,15 @@ int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep) if (!ep->ob_addr) return -ENOMEM; - /* Disable all but function 0 (anyway BIT(0) is hardwired to 1). */ - cdns_pcie_writel(pcie, CDNS_PCIE_LM_EP_FUNC_CFG, BIT(0)); - - epc = devm_pci_epc_create(dev, &cdns_pcie_epc_ops); + if (pcie->is_hpa) { + epc = devm_pci_epc_create(dev, &cdns_pcie_hpa_epc_ops); + } else { + /* + * Disable all but function 0 (anyway BIT(0) is hardwired to 1) + */ + cdns_pcie_writel(pcie, CDNS_PCIE_LM_EP_FUNC_CFG, BIT(0)); + epc = devm_pci_epc_create(dev, &cdns_pcie_epc_ops); + } if (IS_ERR(epc)) { dev_err(dev, "failed to create epc device\n"); return PTR_ERR(epc); diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c index 8af95e9da7ce..1e2df49e40c6 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-host.c +++ b/drivers/pci/controller/cadence/pcie-cadence-host.c @@ -175,7 +175,7 @@ static int cdns_pcie_host_start_link(struct cdns_pcie_rc *rc) return ret; } -static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc) +int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc) { struct cdns_pcie *pcie = &rc->pcie; u32 value, ctrl; @@ -215,10 +215,10 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc) return 0; } -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 = &rc->pcie; u32 addr0, addr1, aperture, value; @@ -428,7 +428,7 @@ static int cdns_pcie_host_map_dma_ranges(struct cdns_pcie_rc *rc) return 0; } -static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc) +int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc) { struct cdns_pcie *pcie = &rc->pcie; struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc); diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h index fecb64ec9581..63284d741fc5 100644 --- a/drivers/pci/controller/cadence/pcie-cadence.h +++ b/drivers/pci/controller/cadence/pcie-cadence.h @@ -218,6 +218,217 @@ (((delay) << CDNS_PCIE_DETECT_QUIET_MIN_DELAY_SHIFT) & \ CDNS_PCIE_DETECT_QUIET_MIN_DELAY_MASK) +/* + * High Performance Architecture(HPA) PCIe controller register */ +#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(HPA) + */ +#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 (CDNS_PCIE_HPA_IP_REG_BANK + 0x1420) + +/* + * Endpoint Function BARs(HPA) Configuration Registers */ +#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) \ + (CDNS_PCIE_HPA_IP_CFG_CTRL_REG_BANK + (0x4000 * (pfn))) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG1(pfn) \ + (CDNS_PCIE_HPA_IP_CFG_CTRL_REG_BANK + (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) \ + (CDNS_PCIE_HPA_IP_CFG_CTRL_REG_BANK + (0x4000 * (vfn)) + 0x08) +#define CDNS_PCIE_HPA_LM_EP_VFUNC_BAR_CFG1(vfn) \ + (CDNS_PCIE_HPA_IP_CFG_CTRL_REG_BANK + (0x4000 * (vfn)) + 0x0C) +#define CDNS_PCIE_HPA_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(f) \ + (GENMASK(9, 4) << ((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_APERTURE_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 (CDNS_PCIE_HPA_IP_REG_BANK + 0x02c0) + +/* + * Root Complex BAR Configuration Register */ +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG (CDNS_PCIE_HPA_IP_CFG_CTRL_REG_BANK + 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_32BITS 0 +#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_16BITS 0 +#define CDNS_PCIE_HPA_LM_RC_BAR_CFG_IO_32BITS BIT(23) + +/* BAR control values applicable to both Endpoint Function and Root Complex */ +#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)) + +#define CDNS_PCIE_HPA_LM_PTM_CTRL (CDNS_PCIE_HPA_IP_REG_BANK + 0x0520) +#define CDNS_PCIE_HPA_LM_TPM_CTRL_PTMRSEN BIT(17) + +/* + * Root Port Registers PCI config space(HPA) 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) \ + (CDNS_PCIE_HPA_AXI_SLAVE + 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) \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_NBITS_MASK, ((nbits) - 1)) +#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) \ + (CDNS_PCIE_HPA_AXI_SLAVE + 0x1014 + ((r) & 0x1F) * 0x0080) + +/* + * Region r Outbound PCIe Descriptor Register 0 */ +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC0(r) \ + (CDNS_PCIE_HPA_AXI_SLAVE + 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 1 */ +#define CDNS_PCIE_HPA_AT_OB_REGION_DESC1(r) \ + (CDNS_PCIE_HPA_AXI_SLAVE + 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) \ + (CDNS_PCIE_HPA_AXI_SLAVE + 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) \ + (CDNS_PCIE_HPA_AXI_SLAVE + 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) \ + FIELD_PREP(CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS_MASK, ((nbits) - +1)) + +/* + * Region r AXI Region Base Address Register 1 */ +#define CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(r) \ + (CDNS_PCIE_HPA_AXI_SLAVE + 0x1004 + ((r) & 0x1F) * 0x0080) + +/* + * Root Port BAR Inbound PCIe to AXI Address Translation Register */ +#define CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0(bar) \ + (CDNS_PCIE_HPA_AXI_MASTER + ((bar) * 0x0008)) +#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) \ + FIELD_PREP(CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0_NBITS_MASK, ((nbits) - 1)) +#define CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR1(bar) \ + (CDNS_PCIE_HPA_AXI_MASTER + 0x04 + ((bar) * 0x0008)) + +/* + * AXI link down register + */ +#define CDNS_PCIE_HPA_AT_LINKDOWN (CDNS_PCIE_HPA_AXI_SLAVE + 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 (CDNS_PCIE_HPA_IP_REG_BANK + 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_RP_MAX_IB 0x3 +#define CDNS_PCIE_HPA_MAX_OB 15 + +/* + * Endpoint Function BAR Inbound PCIe to AXI Address Translation +Register(HPA) */ +#define CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar) \ + (CDNS_PCIE_HPA_IP_AXI_MASTER_COMMON + ((fn) * 0x0040) + ((bar) * 0x0008)) +#define CDNS_PCIE_HPA_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar) \ + (CDNS_PCIE_HPA_IP_AXI_MASTER_COMMON + 0x4 + ((fn) * 0x0040) + ((bar) * +0x0008)) + enum cdns_pcie_rp_bar { RP_BAR_UNDEFINED = -1, RP_BAR0, @@ -249,6 +460,7 @@ struct cdns_pcie_rp_ib_bar { #define CDNS_PCIE_MSG_NO_DATA BIT(16) struct cdns_pcie; +struct cdns_pcie_rc; enum cdns_pcie_msg_code { MSG_CODE_ASSERT_INTA = 0x20, @@ -286,6 +498,20 @@ struct cdns_pcie_ops { From patchwork Fri Feb 7 09:42:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manikandan Karunakaran Pillai X-Patchwork-Id: 13964696 X-Patchwork-Delegate: kw@linux.com Received: from mx0a-0014ca01.pphosted.com (mx0b-0014ca01.pphosted.com [208.86.201.193]) (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 3AF6E1A2381; Fri, 7 Feb 2025 09:42:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=208.86.201.193 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738921379; cv=fail; b=WoZEydTIdcszj1gHc5z/U2A6izziYQe6gJ/ouriXqBSSXtsqFla/WxhwlOn5kqGbTnCacCvnrwZGj4flVqc7lEVzHCGQs0BajK0cEB3WYey70nfCcmXnAZZrVJAgGLQQNlBciWU2BPZTAcntotAMF1kBTmU+PcnmCn3MLqVN40c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738921379; c=relaxed/simple; bh=W5K6GYoHK29R+0ba/u3eIsRSriHAkam02kshjtsRiyo=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=DdydN1jcQDDT25TbFMXzrnrDhG6OxNT7Nt6Gdt4fagVVqIAGoW4nCd8sVvd2sozbsL87nCMWBR7z60f06Hntp/HD8sU/aiZpUYpMfjlue4xrbITv15P7prUv08fWhnYEes/IF3sPjsQLt/DAVmN+RbLsWW1INCgqx9lkyWwD6uM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=cadence.com; spf=pass smtp.mailfrom=cadence.com; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b=cZMineVw; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b=P92VnMn0; arc=fail smtp.client-ip=208.86.201.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=cadence.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cadence.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b="cZMineVw"; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b="P92VnMn0" Received: from pps.filterd (m0042333.ppops.net [127.0.0.1]) by mx0b-0014ca01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5177R2bA026937; Fri, 7 Feb 2025 01:42:47 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=proofpoint; bh=RctRab4QuOAKG4YasdaNrGuLp3zXdqyE8dgKVru/MTE=; b=cZMineVwQnmC qES79/hGlGG1E2Phc+Ncuq2XWjpNM2Exjl/UiUvwf49MIS6plWn4soGiAkZ4LW2z gsxt8bsaCNoYEhxqOlX0Sk3YE3EukXIBsZvs1ihxrIA5OQdWtARcwtFlTsbIo2aY tY03gSasEHYfm6eGr4eU0y+iFzsYUK3Qd3mx3OPLA8aD+s0sjvF5EgBnCV+AP5Kl AOQFv0S8Wn92Yvj2wFQcRcAZ0g5eHUvEI53WNSEDIl3v67cS5gCiMmWo7sN8NgAC Ie2jukANWqpJtFMvLKGbAKu8aSVYwSNasK8BWIPg0tLqI1ycPNMiFABc++PtOT6C wjvA0Pisxw== Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazlp17012052.outbound.protection.outlook.com [40.93.20.52]) by mx0b-0014ca01.pphosted.com (PPS) with ESMTPS id 44ndt0rm85-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 07 Feb 2025 01:42:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tZOVIYbW4kgmsGZZ3st0d7ED/jktn4d2ibNE8J+Timv/ah74mBLi3t8Ck0XONiedWbWJ2e50HflkBH6wrhVj4QPegcG2wckOp5ENXhiB1SlsSgEKKErbLEfgNVbQVsGaLqsHJ20h2Kf4opVluPufGWJvgqPu2VB6+pRrPLIqaUtuDMNEgIB0dy1Yb3Kti4ad0xhaqoYNQ8jIyd5ZHzghy0UFuqZM0O9nogViFczTwVSKkMUFPi4d51SfJX5yYGoIYvgsOCg96LHDYQZkCVzPpzh1juHflUordXiCCfTrV6IHRQp6S/o4ivJU8cN+XHl6tg/nABtg++zR1efD6wo3Yw== 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=RctRab4QuOAKG4YasdaNrGuLp3zXdqyE8dgKVru/MTE=; b=PQYufRPJtEiFpzNaL1wFb6GeMiljDOkYmzF//oMpUC4Ls1UH7TWsYHu39Nj0F18C17h2qoU/NBYaDj5oR86aA7/DtzcVx59ECaQoT3waDpjgE+BFoRvselP59Jvkkh8VjOSmmzA45t8PwDphhaNi4phVw4ihG/18PnY16qohsUskeR3YfP1HmsPusjLvhXHzJgcfwBzdnzHp/JDWaPOCeTzll9639W5cAZjJ9aY5zua7Cl/0nJR3mu3v1OGQnm11aS4pSwl8pghbvrhQZoDjssOAKx2xYG8Zj2xnBIiet7V8HuOZSnd/QlPtnP2aEss50/6JdrUf26hiF78SXgjqWw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cadence.com; dmarc=pass action=none header.from=cadence.com; dkim=pass header.d=cadence.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RctRab4QuOAKG4YasdaNrGuLp3zXdqyE8dgKVru/MTE=; b=P92VnMn0T4WsSeBGZYKoi2+MHnxxW0BcuzGheJwiMhmlbsNeOsjFP6VMSWQ4GninclqZU1klJHTRtNwDXQq3aDW3Q4SltUir5IvOTfoVnuC+DKM/MrJz2ZWJ39yNoaX8BFBc1VYa3F09KuBTIUWMGxqUfcOJCawkAmFz0Ua4Eow= Received: from CH2PPF4D26F8E1C.namprd07.prod.outlook.com (2603:10b6:61f:fc00::278) by BL3PR07MB8817.namprd07.prod.outlook.com (2603:10b6:208:350::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.14; Fri, 7 Feb 2025 09:42:44 +0000 Received: from CH2PPF4D26F8E1C.namprd07.prod.outlook.com ([fe80::d517:a32:d647:386c]) by CH2PPF4D26F8E1C.namprd07.prod.outlook.com ([fe80::d517:a32:d647:386c%7]) with mapi id 15.20.8422.012; Fri, 7 Feb 2025 09:42:44 +0000 From: Manikandan Karunakaran Pillai To: "lpieralisi@kernel.org" , "manivannan.sadhasivam@linaro.org" , "bhelgaas@google.com" , "kw@linux.com" , "robh@kernel.org" CC: "manivannan.sadhasivam@linaro.org" , "linux-kernel@vger.kernel.org" , "linux-pci@vger.kernel.org" Subject: [RFC 3/3] PCI: cadence: Add callback functions for Root Port and EP HPA controllers Thread-Topic: [RFC 3/3] PCI: cadence: Add callback functions for Root Port and EP HPA controllers Thread-Index: AQHbeUJ70j53gmI0/UCefC+2kcf0nrM7loqA Date: Fri, 7 Feb 2025 09:42:44 +0000 Message-ID: References: <20250207092645.3140461-1-mpillai@cadence.com> <20250207092645.3140461-4-mpillai@cadence.com> In-Reply-To: <20250207092645.3140461-4-mpillai@cadence.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-ref: PG1ldGE+PGF0IGFpPSIwIiBubT0iYm9keS50eHQiIHA9ImM6XHVzZXJzXG1waWxsYWlcYXBwZGF0YVxyb2FtaW5nXDA5ZDg0OWI2LTMyZDMtNGE0MC04NWVlLTZiODRiYTI5ZTM1Ylxtc2dzXG1zZy1kZWQ4YzBmMC1lNTM3LTExZWYtYTM2OC1jNDQ3NGVkNmNlZTVcYW1lLXRlc3RcZGVkOGMwZjItZTUzNy0xMWVmLWEzNjgtYzQ0NzRlZDZjZWU1Ym9keS50eHQiIHN6PSI0NjM3MiIgdD0iMTMzODMzOTQ5NjA2NTI0MTQ3IiBoPSJNNE5QN01rVzVicWlqcnNNS2lqYW45ZUFGaW89IiBpZD0iIiBibD0iMCIgYm89IjEiIGNpPSJjQUFBQUVSSFUxUlNSVUZOQ2dVQUFHQUlBQUR6TkMraFJIbmJBV1NoRUJaU1QzS0haS0VRRmxKUGNvY0tBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBQUFBc0JnQUFuQVlBQU1RQkFBQUFBQUFBQUFBQUFBRUFBUUFCQUFBQWhGVjh5UUFBQUFBQUFBQUFBQUFBQUo0QUFBQmpBR0VBWkFCbEFHNEFZd0JsQUY4QVl3QnZBRzRBWmdCcEFHUUFaUUJ1QUhRQWFRQmhBR3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdBQUFBQUFuZ0FBQUdNQVpBQnVBRjhBZGdCb0FHUUFiQUJmQUdzQVpRQjVBSGNBYndCeUFHUUFjd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUNBQUFBQUFDZUFBQUFZd0J2QUc0QWRBQmxBRzRBZEFCZkFHMEFZUUIwQUdNQWFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURGQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFJQUFBQUFBSjRBQUFCekFHOEFkUUJ5QUdNQVpRQmpBRzhBWkFCbEFGOEFZUUJ6QUcwQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB x-dg-refone: QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0FBQUFBQW5nQUFBSE1BYndCMUFISUFZd0JsQUdNQWJ3QmtBR1VBWHdCakFIQUFjQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUNlQUFBQWN3QnZBSFVBY2dCakFHVUFZd0J2QUdRQVpRQmZBR01BY3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUlBQUFBQUFKNEFBQUJ6QUc4QWRRQnlBR01BWlFCakFHOEFaQUJsQUY4QVpnQnZBSElBZEFCeUFHRUFiZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUFBbmdBQUFITUFid0IxQUhJQVl3QmxBR01BYndCa0FHVUFYd0JxQUdFQWRnQmhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFDQUFBQUFBQ2VBQUFBY3dCdkFIVUFjZ0JqQUdVQVl3QnZBR1FBWlFCZkFIQUFlUUIwQUdnQWJ3QnVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB x-dg-reftwo: QUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBSUFBQUFBQUo0QUFBQnpBRzhBZFFCeUFHTUFaUUJqQUc4QVpBQmxBRjhBY2dCMUFHSUFlUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdBQUFBQUF4QUVBQUFBQUFBQUlBQUFBQUFBQUFBZ0FBQUFBQUFBQUNBQUFBQUFBQUFDa0FRQUFDZ0FBQURJQUFBQUFBQUFBWXdCaEFHUUFaUUJ1QUdNQVpRQmZBR01BYndCdUFHWUFhUUJrQUdVQWJnQjBBR2tBWVFCc0FBQUFMQUFBQUFBQUFBQmpBR1FBYmdCZkFIWUFhQUJrQUd3QVh3QnJBR1VBZVFCM0FHOEFjZ0JrQUhNQUFBQWtBQUFBeFFBQUFHTUFid0J1QUhRQVpRQnVBSFFBWHdCdEFHRUFkQUJqQUdnQUFBQW1BQUFBQUFBQUFITUFid0IxQUhJQVl3QmxBR01BYndCa0FHVUFYd0JoQUhNQWJRQUFBQ1lBQUFBQUFBQUFjd0J2QUhVQWNnQmpBR1VBWXdCdkFHUUFaUUJmQUdNQWNBQndBQUFBSkFBQUFBQUFBQUJ6QUc4QWRRQnlBR01BWlFCakFHOEFaQUJsQUY4QVl3QnpBQUFBTGdBQUFBQUFBQUJ6QUc4QWRRQnlBR01BWlFCakFHOEFaQUJsQUY4QVpnQnZBSElBZEFCeUFHRUFiZ0FBQUNnQUFBQUFBQUFBY3dCdkFIVUFjZ0JqQUdVQVl3QnZBR1FBWlFCZkFHb0FZUUIyQUdFQUFBQXNBQUFBQUFBQUFITUFid0IxQUhJQVl3QmxBR01BYndCa0FHVUFYd0J3QUhrQWRBQm9BRzhBYmdBQUFDZ0FBQUFBQUFBQWN3QnZBSFVBY2dCakFHVUFZd0J2QUdRQVpRQmZBSElBZFFCaUFIa0FBQUE9Ii8+PC9tZXRhPg== x-dg-rorf: true x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PPF4D26F8E1C:EE_|BL3PR07MB8817:EE_ x-ms-office365-filtering-correlation-id: 249d007e-200b-49a2-13a5-08dd475bc60d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700018; x-microsoft-antispam-message-info: GKDK8GMCvAanZAWQS9fEIfhQDTBGXvm/w2riEE5oo4w8kYuLnSVWt9HnMLahVVjg77v40xf65GHo+vDNxDQH9KRwG1c5y1idiuOqtf3oSZz4eKktwdON+mKAtQ6GTbkXoPbeGzG7JMYKug4n9zOo98HM3dX7yfYp2tC9KNQWRgFxTCLSkhscpvx7Koda0VKktNb6KVOv+uKTBqXizHqg/P6yDsQHvi8t8Y9IIQsMAJhxE6y3q1sM+glwxmlBf2rcsthZiK4uRdrdGCvAVuiLVfX1nrdzf79uQ5Ps5bgbCI7kXNfvEFlqGYoX5mz6JnETA3NhiiWrEvTEgD2EKfCRkfmCoPbVcmTZR8bBVqELT/YdnSNCaEsFENe5kHaNUlNi3aWjMZtYwZY3PmA3u7m+L9PsfOqzS6vXkOy40AvEHP6zHBRZoynZ4nDtchUkGNlyUKUMP5D6ZajZtCmJHkwkCasX5kgnAq+MvL6o8RyF0UlEQQuet533cJIbIl2R+5SV3ksjCLWHsD5aJlkQm1fer9yAXKWKEq31qd+qNY0Lw5NO/mGzCc9PvzJvPex6DFmR/N4vl+Wcb6gCKmZft+WgMIv7jYnt/zqf3EPGpf000w6AMB6NjAaFv/YavUzL3T9Ox81wFjzRCPExL+k0FmGDfYyJoNYiTSsqpdu1WRVrEfH2Y+mhsAG26nfJjZN5UvgsXec6H9BfMiAmna6mmEvICYnqcmcFGS6XjXvhSyDJ6RwT4vb2dJzy4Dugu0lH/RNwhqbD2mcg8r16VJCGmzBmMBF7cHhmPHjva27flUOnNYGUdXXtfb0/zZrBuaRYHlVBPV7V7i+0FUjy+ZniDFAbJfNV2ZjPl7vwiAtljUgDRy2N/mw3lUVsge/v6PG9Y4e6CLqDcoXeIkiQryZoKBkxDFCaZLbQt6DSWtWUrKi7+PYQhgkVg7xqfGV5somkW+uUvV4w52gxovOdUvKT0I934xa9gpXzUueGLP5WwnXxqCGW6OUQqlYiG00hZoAZyf8iQ2CwmhsgnaMl63ni3aqhQL0WU3q9PVA1wftmYHpmXngjvRQrJ/YTR9k+WdNSkTzk4larJb1LOc4trjOAjPBDf0pmDqlS7LD/NERS6jjfaNaH+Mqp3qcH1j7Y7cYzMzik/DPi4ZdklsCv2P45QCz8ErGMfqD4rUc8d5opLc7q2k+GVKZ8jjEC8jiJ+XnjrKtzZ8cZ8Ycx4HsSJxygzgeHSvTjzcc4sp7mNgjkdpZhkZDI+Qo3QwALP9SSGhuIfcIz9G2KValw21zBlbNZf1DBNJ6CnTUMymjg+QWnVv6y59B4O+Iah40HFZyBSWBXKpCP8Fsd/tVnPVTBTkhJ1eRe2IGdeXRAPy9lRwSoDsXRFeCf5T14KCuqhwnYvXKb3JJJrHcq6/pNddh/17HvALTt9yqH580dthKtxHYV6HcFACNkSDc21+64R96iw7HWsH+F x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PPF4D26F8E1C.namprd07.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: nVWZV+e5nlXukNMV9I9E3d9hYrntwppEEaIoQoiSWSBIv4HeqPbpMODSjS3KWoJEpQBYpJONAidz1xoKoshZTcX0No7BW/BQDvjx6hUrueNfX69dBWVZe1CsPrMeBGJKCs9m66clfkalbSRs0fbMtaPAbc3UsysjjurJiYlgCv+HUJPkMo6m4snVxJgJZ5YWDLblUAX1nphNqNDsbQAiC2aSJ3xFONnqEGUVZCeMeQcpVZV7GtGz/SNcamy7QjwWXT7NWbF6p4zV8ykoOi7w1aRyVAJfyeiKzr1502onqYbS2Ai+uVjvpb/wTuu1/1la/HFrDHYAokrrr02sQ+PiNiMBqfw086wit1KsXj60OClJu8qlCLWR750q52wOVAPkFfl4vzjn+rB/tMQOK/w8G42HQ0AaD93HJ0ZS/j2FR5iGWpsjt2I2pEKkSYI6aB7GWg9MTPed3bxbGwA3C/pasIl4P3oSB+kP0cQybZhdd30pKqqfcNrpiTKCxejuLU01ilw4Hh2B0suuDTB6cMwd9plDqDzaeAhJKD60pa2xeiuHJmQ/uALGrn3gCbySMIuQ/6v2lpBVCsLRWPyzQ2g2M3kiaXMLxC7sOFo4qNEZexEwioQTgX35EnUvq6HYGJJO5pLUN25PZkn+tXGd+bYnOjlv00B5pShWVn9fQZMJ5NNOpOqA2UKGRV3Oek1GDgZGnqArCZSsGv6gQ9NAx0vEuqN47mIMzydgrENoaNujs/lwzFsQuaYWsG743RVTSAbjhCV7a1BcmrfJOB/GF7j+cMYgg9wFRSlBZouS+e+Njmd33PNx/CBcUHuS0rS/B9+mFMvm+FrcYdl5ryKPR/RdLfBhJy7/V9SgV6m6l/gFojGe4Ue0xCL4VAoGQcV6thsLGoNBRZ/9gGZ96uf3rjUGuYBwE6YAxGccddZ/cEp4HuaasgkeBNem09zRVcn20vTGZ2KwLIurwWxGRr7aWLyS/z18IU5mcXWnge87bkiF4B7dbXGkmZfv+TG9VCpzWLFMjgOWWPVXxcA9tZ9LvRYqsDYdywCIqC7IbBp2QIz3wFInLihsCkP28R6CZcPXobjiGHhNpevYIhEqWvTacY4Xeoo7kUA2tzxXkOGyTG4a7BKSbZQ0FlHsvbnqBJNkHvZm2uBPtCPoJ/qqG8BEbOR5+6GkYu7/iQPYeGXRmFF4023jdcIO0GBZniM5PWr1SioyT5r6QLHHyqZUBvXWchPXx14ZcgnkGMx7WIOetbQpKKqDHYw+naCXvA2/VMcmz9zim0TYY9n5/8CDL9eak8HvdnDAZApiiLj4Wv1LQle/k+Rd+DF494hZDZpaN6txvw30lWL1d0LZJqaUfucbaCNZ2t23AshYfQURLA+QLJlGLOj+IZWIIWToDV3x7rRdLtj9IUQ6ikbe2ECwzLxRnnX28yZqkNjFx6icvEkwQzn216sqZHNeXUPvFir3Qx1crm1hHwVyHf4idsxut4nQ3CJIJ2cqxql0xvT+IvQxMkIfskcrqp/E3GdchUEvllQvjqVcyx7l20aiVitlEiep4d4ooW51tIVajQoSG/t2mREosf3o9bObfzDiKc7r79qwT4LQ Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: cadence.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PPF4D26F8E1C.namprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 249d007e-200b-49a2-13a5-08dd475bc60d X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2025 09:42:44.6514 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d36035c5-6ce6-4662-a3dc-e762e61ae4c9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FI/ba19QNLPpwm7uMe2W+oTo7wgDAQsBJGtoQVyTPOmEhVkqwp3irflRLRm/+xa5471r5LnkZxL1nTmDj+4bSJ0AJAlZ5S2x/W3nnpSGALI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR07MB8817 X-Proofpoint-ORIG-GUID: nTRewmxuPoL4OjXYwKZOVLPQsN2G_1FN X-Authority-Analysis: v=2.4 cv=ZJ0tmW7b c=1 sm=1 tr=0 ts=67a5d596 cx=c_pps a=UnxCF3xIguukyKwtQsEHPg==:117 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=T2h4t0Lz3GQA:10 a=aBq_wrnhfgAA:10 a=Zpq2whiEiuAA:10 a=Br2UW1UjAAAA:8 a=Eoq2wZs9ZSUw5P7FtuoA:9 a=CjuIK1q_8ugA:10 a=WmXOPjafLNExVIMTj843:22 X-Proofpoint-GUID: nTRewmxuPoL4OjXYwKZOVLPQsN2G_1FN X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-07_04,2025-02-07_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_check_notspam policy=outbound_check score=0 adultscore=0 phishscore=0 mlxlogscore=999 priorityscore=1501 lowpriorityscore=0 impostorscore=0 mlxscore=0 suspectscore=0 bulkscore=0 malwarescore=0 spamscore=0 clxscore=1015 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502070074 Add support for the second generation PCIe controller by adding the required callback function. Update the common functions for endpoint and Root port modes. Invoke the ops platform functions registered during initialization for the relevant PCIe controller architecture for EP or RP mode. Signed-off-by: Manikandan K Pillai --- .../pci/controller/cadence/pcie-cadence-ep.c | 16 +- .../controller/cadence/pcie-cadence-host.c | 237 +++++++++++++++++- .../controller/cadence/pcie-cadence-plat.c | 21 ++ drivers/pci/controller/cadence/pcie-cadence.c | 154 +++++++++++- 4 files changed, 406 insertions(+), 22 deletions(-) cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_CPU_ADDR1(r), 0); } +void cdns_pcie_hpa_detect_quiet_min_delay_set(struct cdns_pcie *pcie) { + u32 delay = 0x3; + u32 ltssm_control_cap; + + /* + * Set the LTSSM Detect Quiet state min. delay to 2ms. + */ + ltssm_control_cap = cdns_pcie_readl(pcie, CDNS_PCIE_HPA_PHY_LAYER_CFG0); + ltssm_control_cap = ((ltssm_control_cap & + ~CDNS_PCIE_HPA_DETECT_QUIET_MIN_DELAY_MASK) | + CDNS_PCIE_HPA_DETECT_QUIET_MIN_DELAY(delay)); + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_PHY_LAYER_CFG0, +ltssm_control_cap); } + +void cdns_pcie_hpa_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u8 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 = 1ULL << fls64(size - 1); + int nbits = ilog2(sz); + u32 addr0, addr1, desc0, desc1, ctrl0; + + if (nbits < 8) + nbits = 8; + + /* + * Set the PCI address + */ + addr0 = CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0_NBITS(nbits) | + (lower_32_bits(pci_addr) & GENMASK(31, 8)); + addr1 = upper_32_bits(pci_addr); + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(r), addr0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(r), +addr1); + + /* + * Set the PCIe header descriptor + */ + if (is_io) + desc0 = CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_IO; + else + desc0 = CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_MEM; + desc1 = 0; + + /* + * Whatever 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 = CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS(busnr) | + CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(0); + ctrl0 = 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 |= CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(fn); + } + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC0(r), desc0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC1(r), desc1); + + /* + * Set the CPU address + */ + if (pcie->ops->cpu_addr_fixup) + cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr); + + addr0 = CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 = upper_32_bits(cpu_addr); + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(r), addr0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(r), addr1); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(r), ctrl0); } + +void cdns_pcie_hpa_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie, + u8 busnr, u8 fn, + u32 r, u64 cpu_addr) +{ + u32 addr0, addr1, desc0, desc1, ctrl0; + + desc0 = CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_NORMAL_MSG; + desc1 = 0; + + /* + * See cdns_pcie_set_outbound_region() comments above. + */ + if (pcie->is_rc) { + desc1 = CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS(busnr) | + CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(0); + ctrl0 = CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_BUS | + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_DEV_FN; + } else { + desc1 |= CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(fn); + } + + /* + * Set the CPU address + */ + if (pcie->ops->cpu_addr_fixup) + cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr); + + addr0 = CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS(17) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 = upper_32_bits(cpu_addr); + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(r), 0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(r), 0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC0(r), desc0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC1(r), desc1); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(r), addr0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(r), addr1); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(r), ctrl0); } + +void cdns_pcie_hpa_reset_outbound_region(struct cdns_pcie *pcie, u32 r) +{ + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(r), 0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(r), 0); + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC0(r), 0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC1(r), 0); + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(r), 0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(r), 0); } + void cdns_pcie_disable_phy(struct cdns_pcie *pcie) { int i = pcie->phy_count; -- 2.27.0 diff --git a/drivers/pci/controller/cadence/pcie-cadence-ep.c b/drivers/pci/controller/cadence/pcie-cadence-ep.c index c911963b6e06..31ba454ff542 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-ep.c +++ b/drivers/pci/controller/cadence/pcie-cadence-ep.c @@ -93,7 +93,7 @@ static int cdns_pcie_ep_set_bar(struct pci_epc *epc, u8 fn, u8 vfn, * for 64bit values. */ sz = 1ULL << fls64(sz - 1); - aperture = ilog2(sz) - 7; /* 128B -> 0, 256B -> 1, 512B -> 2, ... */ + aperture = ilog2(sz) - 7; if ((flags & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) { ctrl = CDNS_PCIE_LM_BAR_CFG_CTRL_IO_32BITS; @@ -192,7 +192,7 @@ static int cdns_pcie_ep_map_addr(struct pci_epc *epc, u8 fn, u8 vfn, } fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); - cdns_pcie_set_outbound_region(pcie, 0, fn, r, false, addr, pci_addr, size); + pcie->ops->cdns_pcie_set_outbound_region(pcie, 0, fn, r, false, addr, +pci_addr, size); set_bit(r, &ep->ob_region_map); ep->ob_addr[r] = addr; @@ -214,7 +214,7 @@ static void cdns_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn, if (r == ep->max_regions - 1) return; - cdns_pcie_reset_outbound_region(pcie, r); + pcie->ops->cdns_pcie_reset_outbound_region(pcie, r); ep->ob_addr[r] = 0; clear_bit(r, &ep->ob_region_map); @@ -329,7 +329,7 @@ static void cdns_pcie_ep_assert_intx(struct cdns_pcie_ep *ep, u8 fn, u8 intx, if (unlikely(ep->irq_pci_addr != CDNS_PCIE_EP_IRQ_PCI_ADDR_LEGACY || ep->irq_pci_fn != fn)) { /* First region was reserved for IRQ writes. */ - cdns_pcie_set_outbound_region_for_normal_msg(pcie, 0, fn, 0, + pcie->ops->cdns_pcie_set_outbound_region_for_normal_msg(pcie, 0, fn, +0, ep->irq_phys_addr); ep->irq_pci_addr = CDNS_PCIE_EP_IRQ_PCI_ADDR_LEGACY; ep->irq_pci_fn = fn; @@ -412,7 +412,7 @@ static int cdns_pcie_ep_send_msi_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn, if (unlikely(ep->irq_pci_addr != (pci_addr & ~pci_addr_mask) || ep->irq_pci_fn != fn)) { /* First region was reserved for IRQ writes. */ - cdns_pcie_set_outbound_region(pcie, 0, fn, 0, + pcie->ops->cdns_pcie_set_outbound_region(pcie, 0, fn, 0, false, ep->irq_phys_addr, pci_addr & ~pci_addr_mask, @@ -515,7 +515,7 @@ static int cdns_pcie_ep_send_msix_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn, if (ep->irq_pci_addr != (msg_addr & ~pci_addr_mask) || ep->irq_pci_fn != fn) { /* First region was reserved for IRQ writes. */ - cdns_pcie_set_outbound_region(pcie, 0, fn, 0, + pcie->ops->cdns_pcie_set_outbound_region(pcie, 0, fn, 0, false, ep->irq_phys_addr, msg_addr & ~pci_addr_mask, @@ -633,7 +633,7 @@ static int cdns_pcie_hpa_ep_set_bar(struct pci_epc *epc, u8 fn, u8 vfn, /* * 128B -> 0, 256B -> 1, 512B -> 2, ... */ - aperture = ilog2(sz) - 7; /* 128B -> 0, 256B -> 1, 512B -> 2, ... */ + aperture = ilog2(sz) - 7; if ((flags & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) { ctrl = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_IO_32BITS; @@ -869,7 +869,7 @@ int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep) set_bit(0, &ep->ob_region_map); if (ep->quirk_detect_quiet_flag) - cdns_pcie_detect_quiet_min_delay_set(&ep->pcie); + pcie->ops->cdns_pcie_detect_quiet_min_delay_set(&ep->pcie); spin_lock_init(&ep->lock); diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c index 1e2df49e40c6..7acf401158e6 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-host.c +++ b/drivers/pci/controller/cadence/pcie-cadence-host.c @@ -73,12 +73,76 @@ void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn, return rc->cfg_base + (where & 0xfff); } +void __iomem *cdns_pci_hpa_map_bus(struct pci_bus *bus, unsigned int devfn, + int where) +{ + struct pci_host_bridge *bridge = pci_find_host_bridge(bus); + struct cdns_pcie_rc *rc = pci_host_bridge_priv(bridge); + struct cdns_pcie *pcie = &rc->pcie; + unsigned int busn = bus->number; + u32 addr0, desc0, desc1, ctrl0; + + if (pci_is_root_bus(bus)) { + /* + * Only the root port (devfn == 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 + */ + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_LINKDOWN, + cdns_pcie_readl(pcie, CDNS_PCIE_HPA_AT_LINKDOWN) & GENMASK(0, 0)); + + desc1 = 0; + ctrl0 = 0; + /* + * Update Output registers for AXI region 0. + */ + addr0 = 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_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR0(0), +addr0); + + desc1 = cdns_pcie_readl(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC1(0)); + desc1 &= ~CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN_MASK; + desc1 |= CDNS_PCIE_HPA_AT_OB_REGION_DESC1_DEVFN(0); + ctrl0 = CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_BUS | + CDNS_PCIE_HPA_AT_OB_REGION_CTRL0_SUPPLY_DEV_FN; + /* + * The bus number was already set once for all in desc1 by + * cdns_pcie_host_init_address_translation(). + */ + if (busn == bridge->busnr + 1) + desc0 |= CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_CONF_TYPE0; + else + desc0 |= CDNS_PCIE_HPA_AT_OB_REGION_DESC0_TYPE_CONF_TYPE1; + + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC0(0), desc0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC1(0), desc1); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CTRL0(0), ctrl0); + + return rc->cfg_base + (where & 0xfff); } + static struct pci_ops cdns_pcie_host_ops = { .map_bus = cdns_pci_map_bus, .read = pci_generic_config_read, .write = pci_generic_config_write, }; +static struct pci_ops cdns_pcie_hpa_host_ops = { + .map_bus = cdns_pci_hpa_map_bus, + .read = pci_generic_config_read, + .write = pci_generic_config_write, +}; + static int cdns_pcie_host_training_complete(struct cdns_pcie *pcie) { u32 pcie_cap_off = CDNS_PCIE_RP_CAP_OFFSET; @@ -340,8 +404,8 @@ static int cdns_pcie_host_bar_config(struct cdns_pcie_rc *rc, */ bar = cdns_pcie_host_find_min_bar(rc, size); if (bar != RP_BAR_UNDEFINED) { - ret = cdns_pcie_host_bar_ib_config(rc, bar, cpu_addr, - size, flags); + ret = pcie->ops->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; @@ -366,8 +430,8 @@ static int cdns_pcie_host_bar_config(struct cdns_pcie_rc *rc, } winsize = bar_max_size[bar]; - ret = cdns_pcie_host_bar_ib_config(rc, bar, cpu_addr, winsize, - flags); + ret = pcie->ops->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; @@ -408,8 +472,8 @@ static int cdns_pcie_host_map_dma_ranges(struct cdns_pcie_rc *rc) if (list_empty(&bridge->dma_ranges)) { of_property_read_u32(np, "cdns,no-bar-match-nbits", &no_bar_nbits); - err = cdns_pcie_host_bar_ib_config(rc, RP_NO_BAR, 0x0, - (u64)1 << no_bar_nbits, 0); + err = pcie->ops->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; @@ -467,13 +531,156 @@ int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc) u64 pci_addr = res->start - entry->offset; if (resource_type(res) == IORESOURCE_IO) - cdns_pcie_set_outbound_region(pcie, busnr, 0, r, + pcie->ops->cdns_pcie_set_outbound_region(pcie, busnr, 0, r, + true, + pci_pio_to_address(res->start), + pci_addr, + resource_size(res)); + else + pcie->ops->cdns_pcie_set_outbound_region(pcie, busnr, 0, r, + false, + res->start, + pci_addr, + resource_size(res)); + + r++; + } + + return cdns_pcie_host_map_dma_ranges(rc); +} + +int cdns_pcie_hpa_host_init_root_port(struct cdns_pcie_rc *rc) { + struct cdns_pcie *pcie = &rc->pcie; + u32 value, ctrl; + u32 id; + + /* + * Set the root complex 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 = CDNS_PCIE_HPA_LM_BAR_CFG_CTRL_DISABLED; + value = 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_writel(pcie, CDNS_PCIE_HPA_LM_RC_BAR_CFG, value); + + /* Set root port configuration space */ + if (rc->vendor_id != 0xffff) { + id = CDNS_PCIE_LM_ID_VENDOR(rc->vendor_id) | + CDNS_PCIE_LM_ID_SUBSYS(rc->vendor_id); + cdns_pcie_writel(pcie, CDNS_PCIE_LM_ID, id); + } + + if (rc->device_id != 0xffff) + cdns_pcie_rp_writew(pcie, PCI_DEVICE_ID, rc->device_id); + + cdns_pcie_rp_writeb(pcie, PCI_CLASS_REVISION, 0); + cdns_pcie_rp_writeb(pcie, PCI_CLASS_PROG, 0); + cdns_pcie_rp_writew(pcie, PCI_CLASS_DEVICE, PCI_CLASS_BRIDGE_PCI); + + return 0; +} + +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 = &rc->pcie; + u32 addr0, addr1, aperture, value; + + if (!rc->avail_ib_bar[bar]) + return -EBUSY; + + rc->avail_ib_bar[bar] = false; + + aperture = ilog2(size); + addr0 = CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0_NBITS(aperture) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 = upper_32_bits(cpu_addr); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR0(bar), addr0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_IB_RP_BAR_ADDR1(bar), addr1); + + if (bar == RP_NO_BAR) + return 0; + + value = cdns_pcie_readl(pcie, CDNS_PCIE_HPA_LM_RC_BAR_CFG); + value &= ~(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] + 2)); + if (size + cpu_addr >= SZ_4G) { + if (!(flags & IORESOURCE_PREFETCH)) + value |= HPA_LM_RC_BAR_CFG_CTRL_MEM_64BITS(bar); + value |= HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_64BITS(bar); + } else { + if (!(flags & IORESOURCE_PREFETCH)) + value |= HPA_LM_RC_BAR_CFG_CTRL_MEM_32BITS(bar); + value |= HPA_LM_RC_BAR_CFG_CTRL_PREF_MEM_32BITS(bar); + } + + value |= HPA_LM_RC_BAR_CFG_APERTURE(bar, aperture); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_LM_RC_BAR_CFG, value); + + return 0; +} + +int cdns_pcie_hpa_host_init_address_translation(struct cdns_pcie_rc +*rc) { + struct cdns_pcie *pcie = &rc->pcie; + struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc); + struct resource *cfg_res = rc->cfg_res; + struct resource_entry *entry; + u64 cpu_addr = cfg_res->start; + u32 addr0, addr1, desc1; + int r, busnr = 0; + + entry = resource_list_first_type(&bridge->windows, IORESOURCE_BUS); + if (entry) + busnr = entry->res->start; + + /* + * 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. + */ + addr1 = 0; + desc1 = CDNS_PCIE_HPA_AT_OB_REGION_DESC1_BUS(busnr); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_PCI_ADDR1(0), addr1); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_DESC1(0), desc1); + + if (pcie->ops->cpu_addr_fixup) + cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr); + + addr0 = CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0_NBITS(12) | + (lower_32_bits(cpu_addr) & GENMASK(31, 8)); + addr1 = upper_32_bits(cpu_addr); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR0(0), addr0); + cdns_pcie_writel(pcie, CDNS_PCIE_HPA_AT_OB_REGION_CPU_ADDR1(0), +addr1); + + r = 1; + resource_list_for_each_entry(entry, &bridge->windows) { + struct resource *res = entry->res; + u64 pci_addr = res->start - entry->offset; + + if (resource_type(res) == IORESOURCE_IO) + pcie->ops->cdns_pcie_set_outbound_region(pcie, busnr, 0, r, true, pci_pio_to_address(res->start), pci_addr, resource_size(res)); else - cdns_pcie_set_outbound_region(pcie, busnr, 0, r, + pcie->ops->cdns_pcie_set_outbound_region(pcie, busnr, 0, r, false, res->start, pci_addr, @@ -489,11 +696,11 @@ int cdns_pcie_host_init(struct cdns_pcie_rc *rc) { int err; - err = cdns_pcie_host_init_root_port(rc); + err = rc->pcie.ops->cdns_pcie_host_init_root_port(rc); if (err) return err; - return cdns_pcie_host_init_address_translation(rc); + return rc->pcie.ops->cdns_pcie_host_init_address_translation(rc); } int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc) @@ -503,7 +710,7 @@ int cdns_pcie_host_link_setup(struct cdns_pcie_rc *rc) int ret; if (rc->quirk_detect_quiet_flag) - cdns_pcie_detect_quiet_min_delay_set(&rc->pcie); + pcie->ops->cdns_pcie_detect_quiet_min_delay_set(&rc->pcie); cdns_pcie_host_enable_ptm_response(pcie); @@ -567,8 +774,12 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc) if (ret) return ret; - if (!bridge->ops) - bridge->ops = &cdns_pcie_host_ops; + if (!bridge->ops) { + if (pcie->is_hpa) + bridge->ops = &cdns_pcie_hpa_host_ops; + else + bridge->ops = &cdns_pcie_host_ops; + } ret = pci_host_probe(bridge); if (ret < 0) diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/pci/controller/cadence/pcie-cadence-plat.c index 98ffd184be93..26d54162a95f 100644 --- a/drivers/pci/controller/cadence/pcie-cadence-plat.c +++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c @@ -35,6 +35,26 @@ static u64 cdns_plat_cpu_addr_fixup(struct cdns_pcie *pcie, u64 cpu_addr) static const struct cdns_pcie_ops cdns_plat_ops = { .cpu_addr_fixup = cdns_plat_cpu_addr_fixup, + .cdns_pcie_host_init_root_port = cdns_pcie_host_init_root_port, + .cdns_pcie_host_bar_ib_config = cdns_pcie_host_bar_ib_config, + .cdns_pcie_host_init_address_translation = cdns_pcie_host_init_address_translation, + .cdns_pcie_detect_quiet_min_delay_set = cdns_pcie_detect_quiet_min_delay_set, + .cdns_pcie_set_outbound_region = cdns_pcie_set_outbound_region, + .cdns_pcie_set_outbound_region_for_normal_msg = + cdns_pcie_set_outbound_region_for_normal_msg, + .cdns_pcie_reset_outbound_region = cdns_pcie_reset_outbound_region, }; + +static const struct cdns_pcie_ops cdns_hpa_plat_ops = { + .cpu_addr_fixup = cdns_plat_cpu_addr_fixup, + .cdns_pcie_host_init_root_port = cdns_pcie_hpa_host_init_root_port, + .cdns_pcie_host_bar_ib_config = cdns_pcie_hpa_host_bar_ib_config, + .cdns_pcie_host_init_address_translation = cdns_pcie_hpa_host_init_address_translation, + .cdns_pcie_detect_quiet_min_delay_set = cdns_pcie_hpa_detect_quiet_min_delay_set, + .cdns_pcie_set_outbound_region = cdns_pcie_hpa_set_outbound_region, + .cdns_pcie_set_outbound_region_for_normal_msg = + cdns_pcie_hpa_set_outbound_region_for_normal_msg, + .cdns_pcie_reset_outbound_region = +cdns_pcie_hpa_reset_outbound_region, }; static int cdns_plat_pcie_probe(struct platform_device *pdev) @@ -104,6 +124,7 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev) ep->pcie.dev = dev; ep->pcie.ops = &cdns_plat_ops; + ep->pcie.is_hpa = is_hpa; cdns_plat_pcie->pcie = &ep->pcie; ret = cdns_pcie_init_phy(dev, cdns_plat_pcie->pcie); diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c index 204e045aed8c..9035a7312a10 100644 --- a/drivers/pci/controller/cadence/pcie-cadence.c +++ b/drivers/pci/controller/cadence/pcie-cadence.c @@ -5,7 +5,6 @@ #include #include - #include "pcie-cadence.h" void cdns_pcie_detect_quiet_min_delay_set(struct cdns_pcie *pcie) @@ -147,6 +146,159 @@ void cdns_pcie_reset_outbound_region(struct cdns_pcie *pcie, u32 r)