From patchwork Mon Feb 24 09:18:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 13987647 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A5AECC021B5 for ; Mon, 24 Feb 2025 09:18:56 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.894979.1303603 (Exim 4.92) (envelope-from ) id 1tmUbf-0004LG-Bf; Mon, 24 Feb 2025 09:18:31 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 894979.1303603; Mon, 24 Feb 2025 09:18:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbf-0004K5-6r; Mon, 24 Feb 2025 09:18:31 +0000 Received: by outflank-mailman (input) for mailman id 894979; Mon, 24 Feb 2025 09:18:30 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbd-0003pb-WA for xen-devel@lists.xenproject.org; Mon, 24 Feb 2025 09:18:30 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20603.outbound.protection.outlook.com [2a01:111:f403:260d::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4f4df01f-f290-11ef-9aae-95dc52dad729; Mon, 24 Feb 2025 10:18:29 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8859.eurprd03.prod.outlook.com (2603:10a6:20b:56f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:24 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%3]) with mapi id 15.20.8466.016; Mon, 24 Feb 2025 09:18:24 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4f4df01f-f290-11ef-9aae-95dc52dad729 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=caBCYmK4UepmA73npYJqH5zIM3aql7FUj5iPWONqoT6FgmVob9Cl54AUsCg/rrGMU5AgGuJACIJb8dGtTJhtRY2tBZL5Jk48jsvWTTJdKFWqFPduBJ2QrYug0CvgdAjLGgf4U1kWOZkXy19SsSdiSEcN4lIKsCMJQyw/Li+IBjGuU8wen0Dlh5d7FwNjRoic5MNlqgMMM7LhMQu2EijkzcsFGerFqbV9somRmeMTuhqMIYUKaQj9+CbVaxVk9pl092zdNT2aB3JbKaHtCnV+IM/H9iAk/PT2oj0URNYUSn1dAu7yIftvkcq0wKt4whC7xHM9gtVKxyPcGykiGQPF8g== 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=JSi0MD6oXxZ7uBC7xTOyeBE4Fqcf0g3bSjWr9PLSTjU=; b=qq3RfAJwaxPgIrxbCu1gXLhxqjW2HE5CeZOIojZLv8nV+iMkIy1LcRaVUtwXhjXxJCW0Z2bP7aSuv69LNqYPwh/TUcmhYI/5KYr4v//eHZmTOWA7Eg9xzazs7ksS/kC5oJWNWnv4LsCbgMvMUG8RJBsmfEGUWCrSxxb2b8sPUKJfSKHA6VaWTZUNrO1bhZAJygsNEeBA2iLe1letnECxYIb/hjhFVSSxo29Q6XXZi7b/WhFrTI6aq8drXrTAbNE8QxjGWdAxqHAnFJXwVD+1L4MB/QRg3yXo02UNGabdO166RR/IQ6iLxOiNoxdmQxGIhZUw9Ip3vaYu1VrBecBUNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JSi0MD6oXxZ7uBC7xTOyeBE4Fqcf0g3bSjWr9PLSTjU=; b=TQntVCVWFJ/LpF/K48OKC6/gYSLXcMS7OMkszdwVdCIChpVAZhFX6qEqabsM4G1tcvd5D1FWhEoq/aZ38J+cuhnttVjRZFhdaPWcXEc0NTtjp/EXGNK44Xti4sDMOEgDpUlZT+9vil4LVFch2JKTOJArrXbQiHvqx5B6Gb3t5kZ6CoI+WnK1cF00HYiOxdogalM9Fa0knfBYpk93hyxKtcjfdNgKcxisDd3ftuWrg4N/zDWbbe+8KTkQ5JpCl0kOpbadbTKBxE0/H5VP0pm5dp3SkewpW5+BsMMmUgxFgEeeShsMrtNKRjHnoBJXWFQH8SNyN8+ffRrOnb94TKjXsA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Oleksandr Andrushchenko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH 1/7] xen/arm: allow PCI host bridge to have private data Thread-Topic: [PATCH 1/7] xen/arm: allow PCI host bridge to have private data Thread-Index: AQHbhp0ONBPLb/SsAUOQ1aj0su174A== Date: Mon, 24 Feb 2025 09:18:24 +0000 Message-ID: <4a09aafdb34784340c426c0199f8a290c0d204cd.1740382735.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8859:EE_ x-ms-office365-filtering-correlation-id: a80e7b87-1b9f-42d1-3acc-08dd54b4308d 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: =?iso-8859-1?q?4ONhxi+pfJw5stFxW1VCIVlzPt?= =?iso-8859-1?q?nPzdo3D/J9qcvkjAU9Q6NVvynT7Hvh2TSF4vF5dLy9xwE76JDHGU8bdXs0b+?= =?iso-8859-1?q?aIBvBomt0xlalo+5zWgG+SvfzsVo5p3ggbatBpsfAagvBA6YXFf33RKdgbrO?= =?iso-8859-1?q?+Bf88WkZ5ShCDkhIfRR4hBuCjO3DkSepElGAAdh8SeIoKNIdb91FlNMWPr5e?= =?iso-8859-1?q?GPDhB4+TNz6NzV5ds5ISZBXqe4RfQIkwQSr1WSONEcggsy27U3Lp1VamlqJV?= =?iso-8859-1?q?0rujGNPeFqqCiNKL0dJrAkfCXaLUI2F3/ck1lzJsEucC+NaJMpdPfLjzt5KN?= =?iso-8859-1?q?Ci8mZ4vB7e1ggqpnYd4wImy0oJm9fgCXilF3d5CqebaNBZ9NXWj8ZvmnCsDu?= =?iso-8859-1?q?LXV8iuZNUQDWm/iT5mR+jVY9yFMfpYXLwVejDX8dw8CQWgv/OiE7ozSP6n6q?= =?iso-8859-1?q?O6r5l18hNeBjsOs4DxlA3IWJlUD0nXFXzc9IPlhLUn/lEgUpo8O17V33vyFn?= =?iso-8859-1?q?K5qFf8UACuqqlOBi5lIcGOkuNmGZBubheE11Yt2eItbHUao/j0WqrG0vhSmM?= =?iso-8859-1?q?8ZdPwKvkrRReIKsoztafHLgXFesWa9u4ihMS/1m9PKkIbzf/xOFxYNsi0g0t?= =?iso-8859-1?q?CEgJI67fL6FSCAUeOuEkAqvApDzJNRQ/eYXIKrdAcZH8SamOu2s5hfBkMWDj?= =?iso-8859-1?q?H4Tc21csvCc1ZhGLVIC+Uk7c4KDe37nO55ir6M78fBgdHuRP0kP9rjkNPuVh?= =?iso-8859-1?q?Hkn8hWr/TUL0p1l3R1Z1BN655fUH2su8RXhJ/3/rKsJyKnVdmsK4wApeOB3A?= =?iso-8859-1?q?RUq358QIqeNNuYdEBtgEDJykn0B0UXb6x3Qs/xza4zbezJcDYw6obTADcWXU?= =?iso-8859-1?q?m4f85vWRF6pj/HbdNR7hrPGtziOpe9P/jXHg4BSfJqQQ4vWGGRc2iW9IUsMh?= =?iso-8859-1?q?WDHUMG6DU7MHa+j0GB/C6dLpQhJ7ze4kgG9yDAK3VJb+kiEQLrAbz5LF4uXf?= =?iso-8859-1?q?Lzi6r/Lx+gro3A4E5zKpo6DH31G+ul8Z1sllvVgk2LQW+LVcMyv6TakJjwVG?= =?iso-8859-1?q?YMnxn6QwrEeKNVLeh2Hsi9iVrquxGx+Yff1EvuIhhOHJ52qjVe4l2rt6GtFA?= =?iso-8859-1?q?au80/XqSlYl7g+RmMFqzJb4PwIgnrBolpp8kJDZN1g3GLgJfmmLaWc6GlkXK?= =?iso-8859-1?q?pnWWMHw7gA0GkmP4HFthGCFuEOL5HKgMSf4gzCRW5ll1WmMc+lfZ//hy9wMU?= =?iso-8859-1?q?dc6EoF5WBT6No+Lmu2th07npUaL9C4tlX1VwouK2WVqi2XGF0vNC272I2FZN?= =?iso-8859-1?q?CXsFnAqRU+E/jYFAZAr0KlO5xTcuBfK5UlM0nZK+dRBxSX3TXSchLMrDQ89+?= =?iso-8859-1?q?v5+JHjvac4rc9dEaC2/Wf1HkAIpD+4thmn1gly+/rk3h4csz4BvQHxVr//4n?= =?iso-8859-1?q?vqDV2zoljzB+XjA5a0Uwglj0y5KPpShTBKS7T/xxnE7VvXUhc0kxj52J/Wp8?= =?iso-8859-1?q?N3IqDR?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.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: =?iso-8859-1?q?ydB7NXBDJR2VEMA13leul8Z?= =?iso-8859-1?q?mGLEQ8p8S3cCDPnW+g4D74jigcmPsVEJUweLQOvm1OoZXfdk1rmEAHHc877p?= =?iso-8859-1?q?KHR9XeDgMdLmM4OGYet+fJmsV3tbcGGBNiw1QMcXrLecdR2oUccYl23hu5F3?= =?iso-8859-1?q?nylm1Nk1tTV19R8Py6fyDU5z+Ekl9oO04fj5Chmd9a2a0NIpOHoETtc+Djzm?= =?iso-8859-1?q?xTmm9MlGAf0K/RjvxF1zrsE9X3qvDDrHGKnOrjhKysLNjYAE04vJp93EMFV/?= =?iso-8859-1?q?tZAk5qWVB+OYN492Oo8pt4TGEqkZ6xnP1pKKm8fo2CD0ZjD3Es1GYT5Im/T2?= =?iso-8859-1?q?GSjJ3fn65oes1vanOUAKXauPvSW2pR+cRqWzHdsRj4u8/gxA0ALSMGHkZV0X?= =?iso-8859-1?q?ol0UsIrxh5+XHUNHbP6W/aMvwstTTqP70IFf6mfgFXrXxUKy6sA/gUuuJfvO?= =?iso-8859-1?q?c2FOpybcIy/e3V9MhAhJ3p5LQ9lH+en1IX6Oo/B9xh6RkDTmJq9SGLrcEDXx?= =?iso-8859-1?q?qu5J5SA+03x+L5wYAqKYsor39jUbEmTapgi1lj5pOv0R2IMh0cglXiHWQi1Z?= =?iso-8859-1?q?HfavH3Iw7pRUhfXWzhJWXOgA/u3WjFyfVt8gp/EamSfDiIE+KUuKkS7j9SSI?= =?iso-8859-1?q?3laKLsUbG26W9OsMbuWluUUjoGdD9LIZnJTKHeGKEmSFHA66uLN3m2AIM5HJ?= =?iso-8859-1?q?VDh32bL0JmhfCYlIYHD+XCcRLuSpo1KYvVwPBWJswj6WAnn+X8McKro2AxQ4?= =?iso-8859-1?q?B4z/zbLdE+5l1rktR8mEV/M1hhEadW51znXYsr/FHTm4q3nV/A/RWz6Y5N7k?= =?iso-8859-1?q?wNgTX1MdhVUUCEfm2qT1DwmLq6K4gp602tGxWvaf+1OuJhIWO1fYiHXLuwC1?= =?iso-8859-1?q?En1D+RlxtsZD88vOqmW+f9cYHPevrcBc9qUw6y94t5FBth1xiV2lfrS9bVTK?= =?iso-8859-1?q?QNuF7K3ibyDjH75TTwFwY3Ip9rseSG6PD78L11/jvnT7SdXvYf4yEFMdIUwo?= =?iso-8859-1?q?ksxf40L+bNP8KMgv8yRLLH7KWVu7ItNwR/yDtHLnQWwIi/Fb57a46QEKGx4S?= =?iso-8859-1?q?oavpkOeMoayo+FBNsjjQZrmOkrVCU+JDof7WxH/xmZDM6MaWL2ql2AGLhLSn?= =?iso-8859-1?q?0GfqGgm7Xj1WqQpStjpAnL/D7e7yev3yLOi3VERqPKAmAvWOoZmjTGB3hD7/?= =?iso-8859-1?q?KWpTS6Abi4UeaaQRBGddxlfy+K+aGDmqEIbsVDpAw/9dOU8nU3rpgd2zQFMQ?= =?iso-8859-1?q?iVXGo4XLKUdyGuX/V7q91sAoOAwP3aX1Cvxa+TnDBZdPg+uSUoX3mH6hoZr5?= =?iso-8859-1?q?tUzY1ouxOe377UjarZUcN3qlatcTcBYNcs4MXKHK9wHW00EdZG0dPywlDJEs?= =?iso-8859-1?q?jOQRTKfzXGj9BNqmg39GPNK85jagmOkYNxNt2UKjhJBYlCjmPU7Cjrax1hee?= =?iso-8859-1?q?pE2kcRikuT8upnGTnBkYk+ryTTnqOxxJJWsdGJlNsGlJj4OozQvSABxbX6v8?= =?iso-8859-1?q?HCj+38yUUTgR+NqTFL/rSHoeMQnxUpFCNKZ/hdl10kKDSZKHFqgNpjBQsB4X?= =?iso-8859-1?q?SLcouIL8tK8lw8mhTEmHrKv0ZPXaL5J/LvA+rAIA9z+FhvfRRAWlD20pGP6x?= =?iso-8859-1?q?DEhlpZnULQKh5725f6ekJ3ZvDWeNXFYge9HahIg=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a80e7b87-1b9f-42d1-3acc-08dd54b4308d X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 09:18:24.1778 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: G8FHnXhDm6ndViyB1N7ykzBB2K5juWqH2o/m/6pnw+iDVpEK8Gn50Hg4pS51Rp/QmHFzvm0j6JNTSnKrnhY8yA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8859 From: Oleksandr Andrushchenko Some of the PCI host bridges require private data. Create a generic approach for that, so such bridges may request the private data to be allocated during initialization. Signed-off-by: Oleksandr Andrushchenko Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/pci.h | 4 +++- xen/arch/arm/pci/pci-host-common.c | 18 +++++++++++++++++- xen/arch/arm/pci/pci-host-generic.c | 2 +- xen/arch/arm/pci/pci-host-zynqmp.c | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/xen/arch/arm/include/asm/pci.h b/xen/arch/arm/include/asm/pci.h index 7f77226c9b..44344ac8c1 100644 --- a/xen/arch/arm/include/asm/pci.h +++ b/xen/arch/arm/include/asm/pci.h @@ -66,6 +66,7 @@ struct pci_host_bridge { uint16_t segment; /* Segment number */ struct pci_config_window* cfg; /* Pointer to the bridge config window */ const struct pci_ops *ops; + void *priv; /* Private data of the bridge. */ }; struct pci_ops { @@ -95,7 +96,8 @@ struct pci_ecam_ops { extern const struct pci_ecam_ops pci_generic_ecam_ops; int pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops); + const struct pci_ecam_ops *ops, + size_t priv_sz); int pci_generic_config_read(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t reg, uint32_t len, uint32_t *value); int pci_generic_config_write(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, diff --git a/xen/arch/arm/pci/pci-host-common.c b/xen/arch/arm/pci/pci-host-common.c index c0faf0f436..be7e6c3510 100644 --- a/xen/arch/arm/pci/pci-host-common.c +++ b/xen/arch/arm/pci/pci-host-common.c @@ -209,7 +209,8 @@ static int pci_bus_find_domain_nr(struct dt_device_node *dev) } int pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops) + const struct pci_ecam_ops *ops, + size_t priv_sz) { struct pci_host_bridge *bridge; struct pci_config_window *cfg; @@ -241,11 +242,26 @@ int pci_host_common_probe(struct dt_device_node *dev, printk(XENLOG_ERR "Inconsistent \"linux,pci-domain\" property in DT\n"); BUG(); } + bridge->segment = domain; + + if ( priv_sz ) + { + bridge->priv = xzalloc_bytes(priv_sz); + if ( !bridge->priv ) + { + err = -ENOMEM; + goto err_priv; + } + } + pci_add_host_bridge(bridge); return 0; +err_priv: + xfree(bridge->priv); + err_exit: xfree(bridge); diff --git a/xen/arch/arm/pci/pci-host-generic.c b/xen/arch/arm/pci/pci-host-generic.c index 46de6e43cc..cc4bc70684 100644 --- a/xen/arch/arm/pci/pci-host-generic.c +++ b/xen/arch/arm/pci/pci-host-generic.c @@ -29,7 +29,7 @@ static const struct dt_device_match __initconstrel gen_pci_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return pci_host_common_probe(dev, &pci_generic_ecam_ops); + return pci_host_common_probe(dev, &pci_generic_ecam_ops, 0); } DT_DEVICE_START(pci_gen, "PCI HOST GENERIC", DEVICE_PCI_HOSTBRIDGE) diff --git a/xen/arch/arm/pci/pci-host-zynqmp.c b/xen/arch/arm/pci/pci-host-zynqmp.c index 101edb8593..985a43c516 100644 --- a/xen/arch/arm/pci/pci-host-zynqmp.c +++ b/xen/arch/arm/pci/pci-host-zynqmp.c @@ -47,7 +47,7 @@ static const struct dt_device_match __initconstrel nwl_pcie_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return pci_host_common_probe(dev, &nwl_pcie_ops); + return pci_host_common_probe(dev, &nwl_pcie_ops, 0); } DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI_HOSTBRIDGE) From patchwork Mon Feb 24 09:18:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 13987653 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A4C9BC021B3 for ; Mon, 24 Feb 2025 09:19:17 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.894977.1303589 (Exim 4.92) (envelope-from ) id 1tmUbd-000442-RG; Mon, 24 Feb 2025 09:18:29 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 894977.1303589; Mon, 24 Feb 2025 09:18:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbd-00043v-OZ; Mon, 24 Feb 2025 09:18:29 +0000 Received: by outflank-mailman (input) for mailman id 894977; Mon, 24 Feb 2025 09:18:28 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbc-0003pb-BH for xen-devel@lists.xenproject.org; Mon, 24 Feb 2025 09:18:28 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20603.outbound.protection.outlook.com [2a01:111:f403:260d::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4e2cb060-f290-11ef-9aae-95dc52dad729; Mon, 24 Feb 2025 10:18:27 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8859.eurprd03.prod.outlook.com (2603:10a6:20b:56f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:24 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%3]) with mapi id 15.20.8466.016; Mon, 24 Feb 2025 09:18:24 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4e2cb060-f290-11ef-9aae-95dc52dad729 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Zre0OrYPctFznQ06P/L57StD2/Vf+dcD37UOjzIPNLTWC6iS790JlgaWT5YyBQjPgMTnCViy7w2gxHtIrcHa65TlbHYqAMaXiRT9QOajDQ7m3YVteJpCbBGmuIXPyvf5Lj8YyNfp/f9QMV8sfazoSD8iX3qeDqeC6Df6D/pRUCRD5UB4QPQYPBq77M48fkX1FADmFkGNi91Hzso11/maDvag3cX+pBy/SSNx1M/gpR3LMST70K0GNfGYI+PN5wdhdkWfiK2LY+tnn9+mj0TBZQfeXGQUZJL/x7ZffU1gTE3iRIy1iBPgxz8mmZgOZCv1MibpHxrqetZbuHPPIQVN+Q== 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=Gblh8BA3B38RYzw5oAODeH7N8XCpfEMqk7ps6NGozAI=; b=GpmnHDTfIhdzjTvQIofLLzbVHQId43ZQWu393RFqIHmAwGhPGh5BU0rhWbK/erT1Lenv263n4tQ8n54wQKQxcvgFSPJljPQBpqRNXMqqCl+o0ftdmsS9OXIxX9xiihnmY0TKmtuuzReoeYvXAdFM7ktrf4GNGI5AvYGyMiPlNfCRNg0W1VPoPRSzK/3HNUVxadufOqYuDUz6Z+Papk7G5yWv0ULFBzK/fd/xrEjvb2bgLyOzXsJRQAM3yHGJ/p6aicWVywqyIIE4YCOHzqATMkRv9lRE6U4GJCXlSpKKv0C4wwA5CnloBPCm+IiF3+0HkdwJOIkfe5KnXeFivWpxEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gblh8BA3B38RYzw5oAODeH7N8XCpfEMqk7ps6NGozAI=; b=YHFVlDl8AhewLpqIGT9lrIV6H1qowwLEdzpQcKvwJFWMmjYMeJL3pbeAoUZnaRaeJDf5W2jBl7fzHhH+jBEOjB1fsM3Eprk4AV4kl7pYUkH+K9aXnHLit5f1e/6nLajsG9e78+E8O2y0CR65q6xRHGstOgYDIESXlrOZkrKumGO7w7k/si6UWnPNUjEAHnYOwn+6k8sio/ubn1y7FMRPH8A7SJCPnfnEkMjkMb0cIZ9MVuXFjcTjMR2HKWbCBvGk0dVbXoDlIHQoV7UrmVurf4GC7FPqgGgYYDl5+GGfJ+6AJ3mSKI8xk7oofuuB5wmx2VJdLsG4I/bYErhyxHv07Q== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Oleksandr Andrushchenko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH 2/7] xen/arm: make pci_host_common_probe return the bridge Thread-Topic: [PATCH 2/7] xen/arm: make pci_host_common_probe return the bridge Thread-Index: AQHbhp0OxJ4bxTlfI0yOtpGJET1sPA== Date: Mon, 24 Feb 2025 09:18:24 +0000 Message-ID: <922cdc05d4821925c796c6411814dfcb94d55b21.1740382735.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8859:EE_ x-ms-office365-filtering-correlation-id: a5077c81-2d02-472c-9e8e-08dd54b430d9 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: =?iso-8859-1?q?6oHPvNmwXDz2XZ7yTPbGISl4yK?= =?iso-8859-1?q?7AmFy0+TyRDgS6WD0Z8Rl20rTH7+0eG3DFHerwys4AT58Z6DFW1pLkgjVX6t?= =?iso-8859-1?q?kLXR/fybfESmf9GbJSlyFcrnBuMi8ZvyurwThk4IPXwpeRkZfW5gqo+21GzB?= =?iso-8859-1?q?YeA4FXcmpRNZjs8LLaweSWNPHgaPI2Tmem12UKpczNlfB+LJsx7P6SeABpad?= =?iso-8859-1?q?jd3wttx9+E+ms8aHeBix2stpPz0SpLVmWL9WaFo+oCciciiGJEy+pzkdFeAx?= =?iso-8859-1?q?oDQ1q8435qFkexNSKJNt1IaSkNX369W+CvUT3Oy7Wj2Szgte4P+eqegbzDYy?= =?iso-8859-1?q?x6h1+k67VkPDA041ZFEBp7I7GTKoCqnIvDs4I+3e4F1QF/U8L6d+GW7de+SQ?= =?iso-8859-1?q?6b+3rVcYyKMiOuUINBbaCFZgEbspFS1L/0BY9X75CRd3FGpQfJvMQMHFac0V?= =?iso-8859-1?q?6p2Zjr3SzAekzbG+TMBg+2YpoTBiuCNDOouNdH618W7TGjCHTqhIprOiPvT5?= =?iso-8859-1?q?cf/Wo+ettfSImDTNrV3QGKrXN+1NRKacY9EkGecLuVT86h5J1r8BEO0rDsrP?= =?iso-8859-1?q?aOwDVdS7fhElk1hzL3HoSWtRUfVElfcFBz6cjzGbNquViyFB0PPppMKaNgxB?= =?iso-8859-1?q?1ha3kGvATy36jmMgXFyRVuMS2McJBwBkoCvUEQNTUab3MYe4dMX9j9Lf075Y?= =?iso-8859-1?q?MwTN3y3ph7gYjGsfhpkUfBQbAsPIFHwOqKDjOtkEluC2sYfGR2YXg2viPopG?= =?iso-8859-1?q?Sc61sx6/uxa+7B7Z+QKftt/yeKkgcTrtKNA796jM3PcLSFnqjPYNTnE2Aeoy?= =?iso-8859-1?q?dkr6gwOu2gG9dxb8r4BC/KJqXpVhMarzg2QcCRlkMfDSuXwLl4yJNL/XAote?= =?iso-8859-1?q?K+hcKCE+YkdWHLc8ET8yNEnDzuiJUieZQm7QRVU8JtbDvFsvbo0wZ40lg4cw?= =?iso-8859-1?q?eClBkDXXH+9ec8L0KMyKWewhuhitxKO4LAzstOiDzGNkktD1OYid9WEckSUx?= =?iso-8859-1?q?d+MbIZ4bqzKmw96bd6SWuEaES3sPdgLKvJumv9EMjumzmSoHcSNIzIZASFO7?= =?iso-8859-1?q?7V4gVPBk/VgeRHHxuzl1fD0MCbCP/RDEnO29MQV/aluG03xVDbJNLj9+ptmx?= =?iso-8859-1?q?3E4HNtQ4SW4BgF2g+wnUPg1HgZyG+W3n510UQ7pGKXpzy0TTpQz8IqDM38v7?= =?iso-8859-1?q?P+R3pfrcqCoi+0+UXl9DgpGV5Ag+bgj2cwjBBFk4XnH/rqtih66zBM0LanJh?= =?iso-8859-1?q?A8ghXzHixXZCswsrAISrd4MYoRkMJvhdeIX0UDbG98DdH/KtS0QQcggTmCya?= =?iso-8859-1?q?oqewFvq0qoSDq7qsTgXGH2ErBdXPZHhHQcaWP4sSMURxXX189usuFsuCtfCo?= =?iso-8859-1?q?51b0vtTlCJvKJiVQg3/toa7gqaam+3gyD55Yw5p7OPmSe4Us7W3lWQqzgpqO?= =?iso-8859-1?q?XmBsSfn5a0qdxQItMSd0xyzrgb9cOtco7G2Hb4TTffJcd7xBtjbZ/bsp4+sM?= =?iso-8859-1?q?yw/Z3k?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.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: =?iso-8859-1?q?6OAylqsHEI3pcq6+0986LUp?= =?iso-8859-1?q?hGQnZSXnsvyxthz8IjKrFCPjEmo012GJ7O2YqMeTNdznmgCW2yKvUfhBpVUk?= =?iso-8859-1?q?Ua1VQypA4HO2drq6TIoSiSw+A9S3fg9gbrQRsOEX3EADWApZBV62NFSzCMAv?= =?iso-8859-1?q?jniJbj17cFUoQDttHKt/RXnqsYXn0AaTrZAaPdtn72qYP/rYOF1SPHmtcMgA?= =?iso-8859-1?q?HYJLw8XjSD8pR3JRoY6uQwnC2ymOCd5i3nOACgvcvyibhxD/ofcGOMPW+Vev?= =?iso-8859-1?q?48KbIVjrqxQbnvIU9JS0T2SAUxbXbmSUVTLLLx08SshqBDQD/OTiX0PQfMMR?= =?iso-8859-1?q?RhxBXcIHChKG/dDDxTDUPghKQGGil4HTSz1GcnZlBEwlEKsqBonnKfgwaObY?= =?iso-8859-1?q?PwvXEXS3M4i7aBnM2nrPOpQuQ8d/+xBHXXIBwufwvkB4Vh37s9KjeATDSXd8?= =?iso-8859-1?q?P3gw366p8oNobOq1CcOEh9QAZ/em4axAOhzAtp0OzRnJSXq8ZSztRQosL8Hz?= =?iso-8859-1?q?uP2vzRhEnR7fUhkq7rAAIMF4lACvYpPEr2pnu1QP/I5Mk3FE8GoZ9+Pc4I3M?= =?iso-8859-1?q?kd+cTZOz/pkAW1a0ii7IWrk/wDYqXgKt61BTzrAjN47Pau8Tbuooc3RCbZLy?= =?iso-8859-1?q?KEYPAsT5fIS3gZyn24WQdRaoMKRuS4Yt8JrJCtsqVDgwmekwgk4fZ6hS2/UT?= =?iso-8859-1?q?ZZKYv6U4mgbqFGXZtKLnAJYYQekjIcwFlYGiIvIwruAf+CGur5dR2hjfSSBp?= =?iso-8859-1?q?JuYKQ7hkzprE+sPQ4SZ+Dt6LUs1pPQLq3+Bhm7HtnunL3ID9yzZPxYzYcuH1?= =?iso-8859-1?q?Us2QyKm8cULGUjwMxvYxKSC4D+Dz/4VRCnA+ZSd0AUN3qAFxAGpGUIuCPzM7?= =?iso-8859-1?q?XYRi2O6ffLaJIBi61ZxZ3InRmvd2InsVKIafQplsgoC+hK+43+B/oSRSLFuJ?= =?iso-8859-1?q?i7uV7x5R6BC6ABdWneFhUyqnCnsxomQ+CQP79WC+KqikwpVMztwWf2FXp1Se?= =?iso-8859-1?q?P27QCuUWviHYEpLPLwGABO1Y1sEeVO2f8tTbW0LHNL2ihv1ZxDLoeIfl20Cz?= =?iso-8859-1?q?xJqcnCdf1ElgsLr8/HDuGBxZRsru9uyLGdARenFI2Zax7k816Nk9XsKUcUm5?= =?iso-8859-1?q?/MYJNYAzPaSWm+v6Pd8C6ueOPKGnLIpFQN8Je2UlzMPgXuFVP/gchPmZ7V3e?= =?iso-8859-1?q?ppR0hGTM/ZUz/pUpSvLKP88MlcwcjnjrW0SHUFmj6dl26uOpVapH3xfTyfdp?= =?iso-8859-1?q?fn4qZy1TLcU1WxaBP9UztSHrM2c8Ie5TqqAagJxlzcOYXbQoB5F3OXqs2rEx?= =?iso-8859-1?q?igtysWykI1jZ/q5pxJdTrb7n63yOByOpNegfeOZsbkz5+mRW2Wfnc3bBel/c?= =?iso-8859-1?q?FUF5XUPDoP/uM8JAx4NhAepLSxuseXQMBBv4/EBjYDxbgzF60RRQgwZa8SvR?= =?iso-8859-1?q?Lpl0F2pJuDg6KOP9XmBvTXp2dVbJYIOLEcLG1SkfTLqhKoQ7QpGnkXuHYYNy?= =?iso-8859-1?q?a3RPw1VvP9nwgO97SDj7ta4DDuzih2gOV0utwSKNn3bBeV29sWnWREvoMQd9?= =?iso-8859-1?q?AXVeLbiHIjLTovdBiwVMPxy3w39Tky2cnylyEgLoP9ZqC2hyP/C3TlpYAkeA?= =?iso-8859-1?q?rSENip5CHtqgqkEIhnDi2N0iXk3V94dH18LTOVg=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a5077c81-2d02-472c-9e8e-08dd54b430d9 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 09:18:24.6687 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: JolKrYjr4h5iCwgGmlxT+2pPl79lg0SHaAf2OoRRmX6pd2CLOjtEOQVPY5JOwEz4Pwbn547hteC6+ukdPMCmcg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8859 From: Oleksandr Andrushchenko Some of the PCI host bridges require additional processing during the probe phase. For that they need to access struct bridge of the probed host, so return pointer to the new bridge from pci_host_common_probe. Signed-off-by: Oleksandr Andrushchenko Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/pci.h | 8 +++++--- xen/arch/arm/pci/pci-host-common.c | 12 ++++++------ xen/arch/arm/pci/pci-host-generic.c | 2 +- xen/arch/arm/pci/pci-host-zynqmp.c | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/xen/arch/arm/include/asm/pci.h b/xen/arch/arm/include/asm/pci.h index 44344ac8c1..e1f63d75e3 100644 --- a/xen/arch/arm/include/asm/pci.h +++ b/xen/arch/arm/include/asm/pci.h @@ -17,6 +17,8 @@ #ifdef CONFIG_HAS_PCI +#include + #include #define pci_to_dev(pcidev) (&(pcidev)->arch.dev) @@ -95,9 +97,9 @@ struct pci_ecam_ops { /* Default ECAM ops */ extern const struct pci_ecam_ops pci_generic_ecam_ops; -int pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops, - size_t priv_sz); +struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, + const struct pci_ecam_ops *ops, + size_t priv_sz); int pci_generic_config_read(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t reg, uint32_t len, uint32_t *value); int pci_generic_config_write(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, diff --git a/xen/arch/arm/pci/pci-host-common.c b/xen/arch/arm/pci/pci-host-common.c index be7e6c3510..e4e05d1176 100644 --- a/xen/arch/arm/pci/pci-host-common.c +++ b/xen/arch/arm/pci/pci-host-common.c @@ -208,9 +208,9 @@ static int pci_bus_find_domain_nr(struct dt_device_node *dev) return domain; } -int pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops, - size_t priv_sz) +struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, + const struct pci_ecam_ops *ops, + size_t priv_sz) { struct pci_host_bridge *bridge; struct pci_config_window *cfg; @@ -222,7 +222,7 @@ int pci_host_common_probe(struct dt_device_node *dev, bridge = pci_alloc_host_bridge(); if ( !bridge ) - return -ENOMEM; + return ERR_PTR(-ENOMEM); /* Parse and map our Configuration Space windows */ cfg = gen_pci_init(dev, ops); @@ -257,7 +257,7 @@ int pci_host_common_probe(struct dt_device_node *dev, pci_add_host_bridge(bridge); - return 0; + return bridge; err_priv: xfree(bridge->priv); @@ -265,7 +265,7 @@ err_priv: err_exit: xfree(bridge); - return err; + return ERR_PTR(err); } /* diff --git a/xen/arch/arm/pci/pci-host-generic.c b/xen/arch/arm/pci/pci-host-generic.c index cc4bc70684..dde6a79a8e 100644 --- a/xen/arch/arm/pci/pci-host-generic.c +++ b/xen/arch/arm/pci/pci-host-generic.c @@ -29,7 +29,7 @@ static const struct dt_device_match __initconstrel gen_pci_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return pci_host_common_probe(dev, &pci_generic_ecam_ops, 0); + return PTR_RET(pci_host_common_probe(dev, &pci_generic_ecam_ops, 0)); } DT_DEVICE_START(pci_gen, "PCI HOST GENERIC", DEVICE_PCI_HOSTBRIDGE) diff --git a/xen/arch/arm/pci/pci-host-zynqmp.c b/xen/arch/arm/pci/pci-host-zynqmp.c index 985a43c516..c796447ac4 100644 --- a/xen/arch/arm/pci/pci-host-zynqmp.c +++ b/xen/arch/arm/pci/pci-host-zynqmp.c @@ -47,7 +47,7 @@ static const struct dt_device_match __initconstrel nwl_pcie_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return pci_host_common_probe(dev, &nwl_pcie_ops, 0); + return PTR_RET(pci_host_common_probe(dev, &nwl_pcie_ops, 0)); } DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI_HOSTBRIDGE) From patchwork Mon Feb 24 09:18:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 13987650 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D3945C021B3 for ; Mon, 24 Feb 2025 09:19:05 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.894978.1303598 (Exim 4.92) (envelope-from ) id 1tmUbf-0004I7-2a; Mon, 24 Feb 2025 09:18:31 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 894978.1303598; Mon, 24 Feb 2025 09:18:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbe-0004Hw-W0; Mon, 24 Feb 2025 09:18:30 +0000 Received: by outflank-mailman (input) for mailman id 894978; Mon, 24 Feb 2025 09:18:29 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbd-0003pb-7K for xen-devel@lists.xenproject.org; Mon, 24 Feb 2025 09:18:29 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20603.outbound.protection.outlook.com [2a01:111:f403:260d::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4ec72298-f290-11ef-9aae-95dc52dad729; Mon, 24 Feb 2025 10:18:28 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8859.eurprd03.prod.outlook.com (2603:10a6:20b:56f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%3]) with mapi id 15.20.8466.016; Mon, 24 Feb 2025 09:18:25 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4ec72298-f290-11ef-9aae-95dc52dad729 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CRyHYSypBSLR9j1ELa59f0k5ebczB4IDkRPe4t26s4SdwLxwl8LWhIoeNxtWU9P3OTC8pAx3Mp0wfD8VnpNzv2GVpUhNizrhWQz2TpaHb5EwnPMqOA1jV1dAmYI37w8tg8oXqVFQ1mYZHaE0gbx8TZH6K6YLkbD8PSXKCw4Z72q43b4k9bZv4JfOha4vDu1YrtrDoGSP1MwV5Vjrlu58Cy40BwjKbLwSs10F2ZtUCLtJM0NpTbB6bBGE2HEfIb+VpNX3rCmTLUePbw3AZ57KB61OkXeeAH27fLUaCpshfmAjFZYLWrBimMbyCHJ50XGkyX3cnjOFzJcb2kHXWEBMCA== 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=fC2pKV6Knn2B6+xxOok9PcE5unrt7qlO9zl/Phe/vsk=; b=qHU+q2ZJwbwyiJ3NDMCiyBohHJG6ap8USGDuxrf2al2qs3g34xpf0GEaWKE7HMPCK1A/ToRM/aZzZq3wpBHHBp1cO9LJ7oLx5hteKeq+7k3HMWKBvH7acrPXXCzN8tB7eSl1+bwp8mTYfvOFOkDMsvEKQLWv64wdWMyITkgV1X91PBb/uZXomxanu2f8q2Tglti/w8BJacfiv0HQHcB424af1ULBpH9k8A7+IDVw6TVw+9AykkIzdd1zDhOimVhxOUhYrekxh4epPekgB6/Q7hqm7q8PxZeP2Ke3ynK9Df62jc+sl45bFm20unkk8Y3yq8HiOsMVtkMiXLFR9wMGUA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fC2pKV6Knn2B6+xxOok9PcE5unrt7qlO9zl/Phe/vsk=; b=iUEqzOOBFiGYsozQK1nW3oOGHPXjZzdwUabeds5Wwot4AhKHUyMk/ExuiyENXCsEf9M0EbFRty1t37hqjGFWKjAuml2Sh6Lt54Gq0dFvdBMz0nuKAIjl40ylSPtIxVYUvz+i3NrF23pMowXCSr56ZlAlw0Um+zIFx9xgbgiXGLw4rnxmVzrTF4jbUzblaP17X2Mfz5LIjXypp1UIaI7hh7pccfTv9lWCWe6qNN0menq9lijkJb+7w0ZyaO6/s7BCsm6hQocrqX0HkLIN84WoTMeBV+KSlZw0VMfMkRHskTH2m4QZrDYiVvFY2j+wSobBk8eVx4JOLwb1YrtznrO4bw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Oleksandr Andrushchenko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH 3/7] xen/arm: add support for PCI child bus Thread-Topic: [PATCH 3/7] xen/arm: add support for PCI child bus Thread-Index: AQHbhp0OxLzto7VX00+joODTbNcGbw== Date: Mon, 24 Feb 2025 09:18:25 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8859:EE_ x-ms-office365-filtering-correlation-id: eb8219a2-3ecf-47a4-c2e0-08dd54b43112 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: =?iso-8859-1?q?Kfji/g30rB6MQ7+4rMf+a44BLb?= =?iso-8859-1?q?xM8hDq+3mINog32do68sT/ho4hwFmqrEnt1aWY0r0PqfV/gfN97dYexm28Dr?= =?iso-8859-1?q?Cs+ZpIgafVPZZhmwReONWL788eD8PNX9kziGNtp9/9+RvIhI9BaYctDIMRAp?= =?iso-8859-1?q?53HoN3Ug7sjkj/oj9BKHf5XGovUqlcVbyVK07H0Hc2IqZOL7lGyrEYcCKehx?= =?iso-8859-1?q?mS+hGYGOS4rjyPaRgDhVgwQ3MHY5p/KpiAVN7dP9QDmWso4dAWqzCjoN91C1?= =?iso-8859-1?q?JK4UKzJUMo9F0I3rQQJQAMKEnnw75lASFcDimOHYtwukwJLu76UWz4F3zu2X?= =?iso-8859-1?q?pyMCRXcyvRxsx1xYs9Oq1jCYmXQez5etv7ojzWN0DUDBXDE+7CoLtM9JQqs1?= =?iso-8859-1?q?7xQ6m+keO3UPvTsovkkXS+1YjM5RqGneiZshpqd0kdVdJ/DRDone1wIK/EWD?= =?iso-8859-1?q?+U8DjhUsqJGUTLQMCXPj5/g/24WqG2lyf6mfib/S2rOWgxn5fA6+f0k2o7d6?= =?iso-8859-1?q?nJkblqLKxx79YzSQyUhsPi4MfGBbSLIXq9dyOsLmqTmwSFYCFQ9be5fQMvWq?= =?iso-8859-1?q?cBZjwxgtEcFOkJXlT5yF1vnyuh1jCVSvsLa3nknA96hnLJnGtdtE6HoepZij?= =?iso-8859-1?q?eov7LGEVxIiFL+cW8rv91n38xwf1z7+8j6oDd/2DQi55w96SgZF2rPyVXd3R?= =?iso-8859-1?q?4TqdnQwbRXnBjT+PHbRlqCHfmikNPXIN3G+XJkwPOO7IbG/8ma68LL4X15BE?= =?iso-8859-1?q?sapHyrXOsB0f/TCHMqgfv6q6AMzhrYxigvj4/Ieqvk83e5IJEMmHMZQPeIfQ?= =?iso-8859-1?q?WPzUmb0ibDE8hJs9oCJzhSFBe8BjaJ1v3uTHWBMOWVOrskZYKG1351+jCqXr?= =?iso-8859-1?q?d3srMv4V6AMgys9qTwFepstnkT9n2Su7RgaZEHrqFWbZ58mzJwpO6Q3gEk3t?= =?iso-8859-1?q?2tph4Y46RQ/SKf/olzUpEPTbQZVl308U1uqpLcZd7my5upFVT/aVNx37KKp4?= =?iso-8859-1?q?6mWiOh2d5zyNA2zDZFKvCijdZlZiytDjLKxmoD8Ib2/xxhKcRsxVQX05x30J?= =?iso-8859-1?q?BT79Aa9sGxAMy478/Pk/7lJ0DNYQl1zyVronC+ywuDORP+QLoL3UXcNBO2mm?= =?iso-8859-1?q?iVmLxP7grFTrrYLKfyFxnBfA21s8JgB7bvdDOvQJsdAkx/ile16al0cR+I0/?= =?iso-8859-1?q?PZQBeM3eJDH1uZS7kWAG72lJuelrf4ZYnwm12rPG8Y01F8/gsMPJ3W37hpoa?= =?iso-8859-1?q?SzRkJtfrH3jYB6vVhp26BihyS/A9YtPtO83vqUP2VioiJ1vi1F5CMxKVUyd7?= =?iso-8859-1?q?9ucXtiplap7gpoi4egn6lzzH+QGM7GnSuoetOqU4OEpV35yWsUv3GMG5a6lD?= =?iso-8859-1?q?60ImWPWbkwKMkzPkMZLMvyWXts3wd30tqCFOliisGA0mzUNFMgnRw4cLDzgI?= =?iso-8859-1?q?CA6vq0Jh7LatMoUPFPI5Z/fg=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.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: =?iso-8859-1?q?Q4fGGAqvqEomoJ8O4Hvti5P?= =?iso-8859-1?q?lZP9HrR4++KZjCzve+29nRd/itM9UVef5BZbh6acr1md63K6ywUA3pxtbLiL?= =?iso-8859-1?q?yjQoUeVyl5CPRD2L//TNyaxtQJXsP+RXbyjcW+k7yk4WHkcVoMmcXCEb8Ocu?= =?iso-8859-1?q?2YQX/wINdeHfDt/C53l5/ftziaZD1UgvSnaKVfucKkFfxtodlgZA/0CogbCH?= =?iso-8859-1?q?vlhAP05c9R8wa433tkVLQstEBTdchpHkEJ56BBS/iC/EAHzqLpKsCaCTtQXH?= =?iso-8859-1?q?vabmlzMC/1kOAolNe+tLM2QCMUD921axQVX/GvMBvEjqS2pCiA/rDt9PSD9O?= =?iso-8859-1?q?anxSlADoZmudq4VnHv0RaBm5pMDZFrV23ZfPo4veompBenAd+WX1NAtgHU2+?= =?iso-8859-1?q?68sQkv45kgKO3EEHpfQJTUgjW6nPqdr2dJzKPV7zIlAk93baMRIP0wqniKCk?= =?iso-8859-1?q?jcMesuXQKobXB9/MjAyTBlDC6kseoXW5r6rTIS95V9ypyJYh8cfGzr8rMHM4?= =?iso-8859-1?q?uu4aNKMUp7k7xzskjP4/q12inyo3kg7St+vwN/DWT8j78tB6dUXIUciNdtBg?= =?iso-8859-1?q?ZDVkxJrSCWlgkOpjgxps9GYk23KRJ2+mmMmR49l5QtO5LlLBng5ToGjEytCr?= =?iso-8859-1?q?yz+jfHoeL2tHig7diY+06XKWNbU0a4OkW/wwFmIq6RI0ZivUV8zi1IImJzkM?= =?iso-8859-1?q?UM7Agz8dmv+k5HAeJfw93hdKCdmJ/dHbq0HeeFjXclj4jJcWEUnF7rzs9TlA?= =?iso-8859-1?q?QCbWBY77NeQMdj7dmTF9JvrjQGJUU930ghftrNwmDuzAg/9Bg0+b1EpPAns8?= =?iso-8859-1?q?yuh9y45GsI+FTvGprr5XIU/lpqhRQpikOx8i11DNchc8P5XJcrJiBB71vbea?= =?iso-8859-1?q?5RAzsXjow/bM9WfMKFGEvNkrRHeETb2XI17q68QTtWcKCOuzfs9n/SDRXFKs?= =?iso-8859-1?q?vgDJeJKFOgy6BIIOWqjAsb5WaQhq7/bx3C/b3ENxXhi0ukCjeIJ9LhDAreYV?= =?iso-8859-1?q?9bRMiEQfaPQEH6Sa9qNvbxf8XwCs9LGn8QrkdLZLOlrqwWsb2+Pnk4a/V3PV?= =?iso-8859-1?q?CSWlWB76qDuUide+zR0QXn27vh1cYQg5oEQsIQV/d/xfWx3bTnfaFYkgtZet?= =?iso-8859-1?q?qgTW3ByfymeBjNS2Zi5JR8yK4WZcZGtNedPww5UV6E8G01BdwdQVyS/tlbUc?= =?iso-8859-1?q?ifKHOjFdZm6RmgLdGUpNDIHmGUjnohV1wJe2CtOi/f1vPEeZ65FnVkT7foOD?= =?iso-8859-1?q?F1to1ggzCr4E26heX48X1V8YuUavLRA2R6A/MWSoWtSoVnND3AhHF06ifUZw?= =?iso-8859-1?q?G2qaaFlrKE2Y82aOEJlsaJQeLkFRBy/W+fhoEP1Nyxtrzq1jSMvmEVI4J9Rd?= =?iso-8859-1?q?U54kwGUZXeHGO3ZfzZyQM3vwAAtyo42CBn5KRKcKU3eDWQv03r+S79HOVV3U?= =?iso-8859-1?q?Cz3UseTW+3RQOG+rjMukX1yuZmEmGZTxrWsocuzyUn7uyvU5xm4wValcu/mT?= =?iso-8859-1?q?kJuuw61Jo5dyzbClWG7pck2LXeI6rdsX+uxrVYZTQQMruuARF/A2WwVRnNGG?= =?iso-8859-1?q?NBfnCkyHqG2rQXRj/frN66T7U4FlwRaOEyMRsDaOKrp8VkE0w/J+Q3j1GGvR?= =?iso-8859-1?q?/SduzelBUkXpQEaJMSwKv/PEtdrCbJuEcfhaIRA=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb8219a2-3ecf-47a4-c2e0-08dd54b43112 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 09:18:25.0273 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: e2VJMz00H2MbPRQ53I4TNRoOnRL9ITS6rHGQ13t3dmwLmjXS+UFrPAi524qspd8aprBcthaVPit/5u3PVp6RCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8859 From: Oleksandr Andrushchenko PCI host bridges often have different ways to access the root and child bus configuration spaces. One of the examples is Designware's host bridge and its multiple clones [1]. Linux kernel implements this by instantiating a child bus when device drivers provide not only the usual pci_ops to access ECAM space (this is the case for the generic host bridge), but also means to access the child bus which has a dedicated configuration space and own implementation for accessing the bus, e.g. child_ops. For Xen it is not feasible to fully implement PCI bus infrastructure as Linux kernel does, but still child bus can be supported. Add support for the PCI child bus which includes the following changes: - introduce bus mapping functions depending on SBDF - assign bus start and end for the child bus and re-configure the same for the parent (root) bus - make pci_find_host_bridge be aware of multiple busses behind the same bridge - update pci_host_bridge_mappings, so it also doesn't map to guest the memory spaces belonging to the child bus - make pci_host_common_probe accept one more pci_ops structure for the child bus - install MMIO handlers for the child bus - re-work vpci_mmio_{write|read} with parent and child approach in mind [1] https://elixir.bootlin.com/linux/v5.15/source/drivers/pci/controller/dwc Signed-off-by: Oleksandr Andrushchenko Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/pci.h | 14 ++++- xen/arch/arm/pci/ecam.c | 17 ++++-- xen/arch/arm/pci/pci-access.c | 37 ++++++++++-- xen/arch/arm/pci/pci-host-common.c | 86 +++++++++++++++++++++------ xen/arch/arm/pci/pci-host-generic.c | 2 +- xen/arch/arm/pci/pci-host-zynqmp.c | 2 +- xen/arch/arm/vpci.c | 91 ++++++++++++++++++++++++----- 7 files changed, 200 insertions(+), 49 deletions(-) diff --git a/xen/arch/arm/include/asm/pci.h b/xen/arch/arm/include/asm/pci.h index e1f63d75e3..0012c2ae9e 100644 --- a/xen/arch/arm/include/asm/pci.h +++ b/xen/arch/arm/include/asm/pci.h @@ -69,6 +69,9 @@ struct pci_host_bridge { struct pci_config_window* cfg; /* Pointer to the bridge config window */ const struct pci_ops *ops; void *priv; /* Private data of the bridge. */ + /* Child bus */ + struct pci_config_window* child_cfg; + const struct pci_ops *child_ops; }; struct pci_ops { @@ -97,15 +100,20 @@ struct pci_ecam_ops { /* Default ECAM ops */ extern const struct pci_ecam_ops pci_generic_ecam_ops; -struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops, - size_t priv_sz); +struct pci_host_bridge * +pci_host_common_probe(struct dt_device_node *dev, + const struct pci_ecam_ops *ops, + const struct pci_ecam_ops *child_ops, + size_t priv_sz); int pci_generic_config_read(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t reg, uint32_t len, uint32_t *value); int pci_generic_config_write(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t reg, uint32_t len, uint32_t value); void __iomem *pci_ecam_map_bus(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t where); +void __iomem *pci_ecam_map_bus_generic(const struct pci_config_window *cfg, + const struct pci_ecam_ops *ops, + pci_sbdf_t sbdf, uint32_t where); bool pci_ecam_need_p2m_hwdom_mapping(struct domain *d, struct pci_host_bridge *bridge, uint64_t addr); diff --git a/xen/arch/arm/pci/ecam.c b/xen/arch/arm/pci/ecam.c index 3987f96b01..5486881c5c 100644 --- a/xen/arch/arm/pci/ecam.c +++ b/xen/arch/arm/pci/ecam.c @@ -20,12 +20,10 @@ /* * Function to implement the pci_ops->map_bus method. */ -void __iomem *pci_ecam_map_bus(struct pci_host_bridge *bridge, - pci_sbdf_t sbdf, uint32_t where) +void __iomem *pci_ecam_map_bus_generic(const struct pci_config_window *cfg, + const struct pci_ecam_ops *ops, + pci_sbdf_t sbdf, uint32_t where) { - const struct pci_config_window *cfg = bridge->cfg; - const struct pci_ecam_ops *ops = - container_of(bridge->ops, const struct pci_ecam_ops, pci_ops); unsigned int devfn_shift = ops->bus_shift - 8; void __iomem *base; unsigned int busn = sbdf.bus; @@ -39,6 +37,15 @@ void __iomem *pci_ecam_map_bus(struct pci_host_bridge *bridge, return base + (sbdf.devfn << devfn_shift) + where; } +void __iomem *pci_ecam_map_bus(struct pci_host_bridge *bridge, + pci_sbdf_t sbdf, uint32_t where) +{ + const struct pci_ecam_ops *ops = + container_of(bridge->ops, const struct pci_ecam_ops, pci_ops); + + return pci_ecam_map_bus_generic(bridge->cfg, ops, sbdf, where); +} + bool __init pci_ecam_need_p2m_hwdom_mapping(struct domain *d, struct pci_host_bridge *bridge, uint64_t addr) diff --git a/xen/arch/arm/pci/pci-access.c b/xen/arch/arm/pci/pci-access.c index 9f9aac43d7..4da607ac3f 100644 --- a/xen/arch/arm/pci/pci-access.c +++ b/xen/arch/arm/pci/pci-access.c @@ -18,10 +18,31 @@ #define INVALID_VALUE (~0U) #define PCI_ERR_VALUE(len) GENMASK(0, len * 8) +static const struct pci_ops *get_ops(struct pci_host_bridge *bridge, + pci_sbdf_t sbdf) +{ + if ( bridge->child_ops ) + { + struct pci_config_window* cfg = bridge->child_cfg; + + if ( (sbdf.bus >= cfg->busn_start) && (sbdf.bus <= cfg->busn_end) ) + return bridge->child_ops; + } + return bridge->ops; +} + +static void __iomem *map_bus(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, + uint32_t reg) +{ + const struct pci_ops *ops = get_ops(bridge, sbdf); + + return ops->map_bus(bridge, sbdf, reg); +} + int pci_generic_config_read(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t reg, uint32_t len, uint32_t *value) { - void __iomem *addr = bridge->ops->map_bus(bridge, sbdf, reg); + void __iomem *addr = map_bus(bridge, sbdf, reg); if ( !addr ) { @@ -50,7 +71,7 @@ int pci_generic_config_read(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, int pci_generic_config_write(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t reg, uint32_t len, uint32_t value) { - void __iomem *addr = bridge->ops->map_bus(bridge, sbdf, reg); + void __iomem *addr = map_bus(bridge, sbdf, reg); if ( !addr ) return -ENODEV; @@ -78,14 +99,16 @@ static uint32_t pci_config_read(pci_sbdf_t sbdf, unsigned int reg, { uint32_t val = PCI_ERR_VALUE(len); struct pci_host_bridge *bridge = pci_find_host_bridge(sbdf.seg, sbdf.bus); + const struct pci_ops *ops; if ( unlikely(!bridge) ) return val; - if ( unlikely(!bridge->ops->read) ) + ops = get_ops(bridge, sbdf); + if ( unlikely(!ops->read) ) return val; - bridge->ops->read(bridge, sbdf, reg, len, &val); + ops->read(bridge, sbdf, reg, len, &val); return val; } @@ -94,14 +117,16 @@ static void pci_config_write(pci_sbdf_t sbdf, unsigned int reg, unsigned int len, uint32_t val) { struct pci_host_bridge *bridge = pci_find_host_bridge(sbdf.seg, sbdf.bus); + const struct pci_ops *ops; if ( unlikely(!bridge) ) return; - if ( unlikely(!bridge->ops->write) ) + ops = get_ops(bridge, sbdf); + if ( unlikely(!ops->write) ) return; - bridge->ops->write(bridge, sbdf, reg, len, val); + ops->write(bridge, sbdf, reg, len, val); } /* diff --git a/xen/arch/arm/pci/pci-host-common.c b/xen/arch/arm/pci/pci-host-common.c index e4e05d1176..3824146561 100644 --- a/xen/arch/arm/pci/pci-host-common.c +++ b/xen/arch/arm/pci/pci-host-common.c @@ -57,17 +57,12 @@ static void pci_ecam_free(struct pci_config_window *cfg) xfree(cfg); } -static struct pci_config_window * __init -gen_pci_init(struct dt_device_node *dev, const struct pci_ecam_ops *ops) +static void __init gen_pci_init_bus_range(struct dt_device_node *dev, + struct pci_host_bridge *bridge, + struct pci_config_window *cfg) { - int err, cfg_reg_idx; u32 bus_range[2]; - paddr_t addr, size; - struct pci_config_window *cfg; - - cfg = xzalloc(struct pci_config_window); - if ( !cfg ) - return NULL; + int err; err = dt_property_read_u32_array(dev, "bus-range", bus_range, ARRAY_SIZE(bus_range)); @@ -82,6 +77,36 @@ gen_pci_init(struct dt_device_node *dev, const struct pci_ecam_ops *ops) if ( cfg->busn_end > cfg->busn_start + 0xff ) cfg->busn_end = cfg->busn_start + 0xff; } +} + +static void __init gen_pci_init_bus_range_child(struct dt_device_node *dev, + struct pci_host_bridge *bridge, + struct pci_config_window *cfg) +{ + cfg->busn_start = bridge->cfg->busn_start + 1; + cfg->busn_end = bridge->cfg->busn_end; + bridge->cfg->busn_end = bridge->cfg->busn_start; + + printk(XENLOG_INFO "Root bus end updated: [bus %x-%x]\n", + bridge->cfg->busn_start, bridge->cfg->busn_end); +} + +static struct pci_config_window * __init +gen_pci_init(struct dt_device_node *dev, struct pci_host_bridge *bridge, + const struct pci_ecam_ops *ops, + void (*init_bus_range)(struct dt_device_node *dev, + struct pci_host_bridge *bridge, + struct pci_config_window *cfg)) +{ + int err, cfg_reg_idx; + paddr_t addr, size; + struct pci_config_window *cfg; + + cfg = xzalloc(struct pci_config_window); + if ( !cfg ) + return NULL; + + init_bus_range(dev, bridge, cfg); if ( ops->cfg_reg_index ) { @@ -208,9 +233,11 @@ static int pci_bus_find_domain_nr(struct dt_device_node *dev) return domain; } -struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops, - size_t priv_sz) +struct pci_host_bridge * +pci_host_common_probe(struct dt_device_node *dev, + const struct pci_ecam_ops *ops, + const struct pci_ecam_ops *child_ops, + size_t priv_sz) { struct pci_host_bridge *bridge; struct pci_config_window *cfg; @@ -225,7 +252,7 @@ struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, return ERR_PTR(-ENOMEM); /* Parse and map our Configuration Space windows */ - cfg = gen_pci_init(dev, ops); + cfg = gen_pci_init(dev, bridge, ops, gen_pci_init_bus_range); if ( !cfg ) { err = -ENOMEM; @@ -245,6 +272,21 @@ struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, bridge->segment = domain; + if ( child_ops ) + { + /* Parse and map child's Configuration Space windows */ + cfg = gen_pci_init(dev, bridge, child_ops, + gen_pci_init_bus_range_child); + if ( !cfg ) + { + err = -ENOMEM; + goto err_child; + } + + bridge->child_cfg = cfg; + bridge->child_ops = &child_ops->pci_ops; + } + if ( priv_sz ) { bridge->priv = xzalloc_bytes(priv_sz); @@ -262,6 +304,9 @@ struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, err_priv: xfree(bridge->priv); +err_child: + xfree(bridge->cfg); + err_exit: xfree(bridge); @@ -296,9 +341,11 @@ struct pci_host_bridge *pci_find_host_bridge(uint16_t segment, uint8_t bus) { if ( bridge->segment != segment ) continue; - if ( (bus < bridge->cfg->busn_start) || (bus > bridge->cfg->busn_end) ) - continue; - return bridge; + if ( bridge->child_cfg && (bus >= bridge->child_cfg->busn_start) && + (bus <= bridge->child_cfg->busn_end) ) + return bridge; + if ( (bus >= bridge->cfg->busn_start) && (bus <= bridge->cfg->busn_end) ) + return bridge; } return NULL; @@ -364,6 +411,7 @@ int __init pci_host_bridge_mappings(struct domain *d) { const struct dt_device_node *dev = bridge->dt_node; unsigned int i; + bool need_mapping; for ( i = 0; i < dt_number_of_address(dev); i++ ) { @@ -379,7 +427,11 @@ int __init pci_host_bridge_mappings(struct domain *d) return err; } - if ( bridge->ops->need_p2m_hwdom_mapping(d, bridge, addr) ) + need_mapping = bridge->ops->need_p2m_hwdom_mapping(d, bridge, addr); + if ( need_mapping && bridge->child_ops ) + need_mapping = bridge->child_ops-> + need_p2m_hwdom_mapping(d, bridge, addr); + if ( need_mapping ) { err = map_range_to_domain(dev, addr, size, &mr_data); if ( err ) diff --git a/xen/arch/arm/pci/pci-host-generic.c b/xen/arch/arm/pci/pci-host-generic.c index dde6a79a8e..08d94879b7 100644 --- a/xen/arch/arm/pci/pci-host-generic.c +++ b/xen/arch/arm/pci/pci-host-generic.c @@ -29,7 +29,7 @@ static const struct dt_device_match __initconstrel gen_pci_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return PTR_RET(pci_host_common_probe(dev, &pci_generic_ecam_ops, 0)); + return PTR_RET(pci_host_common_probe(dev, &pci_generic_ecam_ops, NULL, 0)); } DT_DEVICE_START(pci_gen, "PCI HOST GENERIC", DEVICE_PCI_HOSTBRIDGE) diff --git a/xen/arch/arm/pci/pci-host-zynqmp.c b/xen/arch/arm/pci/pci-host-zynqmp.c index c796447ac4..0b51ff6bd9 100644 --- a/xen/arch/arm/pci/pci-host-zynqmp.c +++ b/xen/arch/arm/pci/pci-host-zynqmp.c @@ -47,7 +47,7 @@ static const struct dt_device_match __initconstrel nwl_pcie_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return PTR_RET(pci_host_common_probe(dev, &nwl_pcie_ops, 0)); + return PTR_RET(pci_host_common_probe(dev, &nwl_pcie_ops, NULL, 0)); } DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI_HOSTBRIDGE) diff --git a/xen/arch/arm/vpci.c b/xen/arch/arm/vpci.c index b63a356bb4..05af4ef390 100644 --- a/xen/arch/arm/vpci.c +++ b/xen/arch/arm/vpci.c @@ -8,15 +8,17 @@ #include static pci_sbdf_t vpci_sbdf_from_gpa(const struct pci_host_bridge *bridge, - paddr_t gpa) + paddr_t gpa, bool use_root) { pci_sbdf_t sbdf; if ( bridge ) { - sbdf.sbdf = VPCI_ECAM_BDF(gpa - bridge->cfg->phys_addr); + const struct pci_config_window *cfg = use_root ? bridge->cfg : + bridge->child_cfg; + sbdf.sbdf = VPCI_ECAM_BDF(gpa - cfg->phys_addr); sbdf.seg = bridge->segment; - sbdf.bus += bridge->cfg->busn_start; + sbdf.bus += cfg->busn_start; } else sbdf.sbdf = VPCI_ECAM_BDF(gpa - GUEST_VPCI_ECAM_BASE); @@ -24,11 +26,9 @@ static pci_sbdf_t vpci_sbdf_from_gpa(const struct pci_host_bridge *bridge, return sbdf; } -static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info, - register_t *r, void *p) +static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info, register_t *r, + pci_sbdf_t sbdf) { - struct pci_host_bridge *bridge = p; - pci_sbdf_t sbdf = vpci_sbdf_from_gpa(bridge, info->gpa); const unsigned int access_size = (1U << info->dabt.size) * 8; const register_t invalid = GENMASK_ULL(access_size - 1, 0); /* data is needed to prevent a pointer cast on 32bit */ @@ -46,31 +46,86 @@ static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info, return 0; } -static int vpci_mmio_write(struct vcpu *v, mmio_info_t *info, - register_t r, void *p) +static int vpci_mmio_read_root(struct vcpu *v, mmio_info_t *info, + register_t *r, void *p) +{ + struct pci_host_bridge *bridge = p; + pci_sbdf_t sbdf = vpci_sbdf_from_gpa(bridge, info->gpa, true); + + return vpci_mmio_read(v, info, r, sbdf); +} + +static int vpci_mmio_read_child(struct vcpu *v, mmio_info_t *info, + register_t *r, void *p) { struct pci_host_bridge *bridge = p; - pci_sbdf_t sbdf = vpci_sbdf_from_gpa(bridge, info->gpa); + pci_sbdf_t sbdf = vpci_sbdf_from_gpa(bridge, info->gpa, false); + return vpci_mmio_read(v, info, r, sbdf); +} + +static int vpci_mmio_write(struct vcpu *v, mmio_info_t *info, + register_t r, pci_sbdf_t sbdf) +{ return vpci_ecam_write(sbdf, ECAM_REG_OFFSET(info->gpa), 1U << info->dabt.size, r); } +static int vpci_mmio_write_root(struct vcpu *v, mmio_info_t *info, + register_t r, void *p) +{ + struct pci_host_bridge *bridge = p; + pci_sbdf_t sbdf; + + if ( !vpci_sbdf_from_gpa(v->domain, bridge, info->gpa, + true, &sbdf) ) + return 0; + + return vpci_mmio_write(v, info, r, sbdf); +} + +static int vpci_mmio_write_child(struct vcpu *v, mmio_info_t *info, + register_t r, void *p) +{ + struct pci_host_bridge *bridge = p; + pci_sbdf_t sbdf; + + if ( !vpci_sbdf_from_gpa(v->domain, bridge, info->gpa, + false, &sbdf) ) + return 0; + + return vpci_mmio_write(v, info, r, sbdf); +} + static const struct mmio_handler_ops vpci_mmio_handler = { - .read = vpci_mmio_read, - .write = vpci_mmio_write, + .read = vpci_mmio_read_root, + .write = vpci_mmio_write_root, +}; + +static const struct mmio_handler_ops vpci_mmio_handler_child = { + .read = vpci_mmio_read_child, + .write = vpci_mmio_write_child, }; static int vpci_setup_mmio_handler_cb(struct domain *d, struct pci_host_bridge *bridge) { struct pci_config_window *cfg = bridge->cfg; + int count = 1; register_mmio_handler(d, &vpci_mmio_handler, cfg->phys_addr, cfg->size, bridge); - /* We have registered a single MMIO handler. */ - return 1; + if ( bridge->child_ops ) + { + struct pci_config_window *cfg = bridge->child_cfg; + + register_mmio_handler(d, &vpci_mmio_handler_child, + cfg->phys_addr, cfg->size, bridge); + count++; + } + + return count; } int domain_vpci_init(struct domain *d) @@ -101,8 +156,12 @@ int domain_vpci_init(struct domain *d) static int vpci_get_num_handlers_cb(struct domain *d, struct pci_host_bridge *bridge) { - /* Each bridge has a single MMIO handler for the configuration space. */ - return 1; + int count = 1; + + if ( bridge->child_cfg ) + count++; + + return count; } unsigned int domain_vpci_get_num_mmio_handlers(struct domain *d) From patchwork Mon Feb 24 09:18:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 13987648 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6986FC021B3 for ; Mon, 24 Feb 2025 09:18:56 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.894980.1303619 (Exim 4.92) (envelope-from ) id 1tmUbg-0004lU-QY; Mon, 24 Feb 2025 09:18:32 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 894980.1303619; Mon, 24 Feb 2025 09:18:32 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbg-0004lN-M1; Mon, 24 Feb 2025 09:18:32 +0000 Received: by outflank-mailman (input) for mailman id 894980; Mon, 24 Feb 2025 09:18:31 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbf-0003pb-09 for xen-devel@lists.xenproject.org; Mon, 24 Feb 2025 09:18:31 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20603.outbound.protection.outlook.com [2a01:111:f403:260d::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4f984d22-f290-11ef-9aae-95dc52dad729; Mon, 24 Feb 2025 10:18:29 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8859.eurprd03.prod.outlook.com (2603:10a6:20b:56f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%3]) with mapi id 15.20.8466.016; Mon, 24 Feb 2025 09:18:25 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4f984d22-f290-11ef-9aae-95dc52dad729 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=D7fMnZzFVK7HilAfS10fEgD8N4cV/jNKZu1DR63ODdGqNvhszOYYOlCWaz2SZulBWT5qvl6FAiHmF6r+LslZdzp0zYMPq6Y/+hTzjNtNqO7PbbiTXtjnfFbCa+ujFG49Bdpzx25X7bNH/Con9cLJTFlEADZksvYt97/ZicYMKoSI9mdDuoiVAnrl8jw8wcltytDrjPrvUtgSR5ZZcKGKaVVW47nxJS5K5FHVC83GXAzyAqRJcSZ6LqKKlq6oj1sPSplL3+dqcSbgpl2hGU08UBxFkMTxiSp+tWG3CgrPLUrBfBvSdLtNYieNjIJA8AA/2jjdNbzqCYvp103SuLHoXQ== 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=CFD8EL417kBsRTr2esgxWJnqnirmd77/F9gJ5bh9ez4=; b=cj4SNoFwM3EXkIl06gbl9O9leIR7fk7HwHvQEWarKv6nsPoNIbRQA2+YHUUBvc+gI4aBYvnVTshJTnitacQZMZUOmYTcIyoYMZxSCzsc7KxD00dswPwuxccl34N0kmcOgEMjb9coO1XrGUsBbt3wHZY3AulrZ3Groi5t5QxVWQjE8tqeuFIgcPaqw1exjD/QJmeJ5yoKa6etsbtnurhzciew7uyRSICv2vTfLyUvsTjJh4tk5eY+JUh5N0CgI/8XlfJKYmZVulcFwNbidKMpkhwhZfL3CQPFiG7rGgs7bz/u0ySj/4iJkkQh5m5I+FiXkTv46ZE7u5EfV7BijK+EpQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CFD8EL417kBsRTr2esgxWJnqnirmd77/F9gJ5bh9ez4=; b=huqgC6BA4VZtYy3eJGZLD9a2yHEAGdLcUWKUgjB78Fk2mAKdb4rJJUmMvl56xQRw8oNs82kDq0r9rb7kbQtA+AThZGdAOoR56Ur/8EFcBUFrSwFJdPk1UrWvFBn2HP7SGNOP9XdHhwNDI8WggL023wEJ0PlY9Ay5AEmKL7aE54wGgs2/wa0FD6gfJuCJqCvt/G8ZyT192fJgKVggONV/5rDYvtOCVch3hZGbgNN5kBUV6pbmP05+yKzIsd6PWZuNDjf9iEb5UHNRdF/V5KOuOI6L/OH6Gvc2xKp1/weJBO+ZFnq9RlRqfof+EtXJWv7D4XrniVv0QkM4yYuOotYu5Q== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Oleksandr Andrushchenko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH 4/7] xen/arm: add support for R-Car Gen4 PCI host controller Thread-Topic: [PATCH 4/7] xen/arm: add support for R-Car Gen4 PCI host controller Thread-Index: AQHbhp0OJEwwd7KbIUWidoI1k6AKJw== Date: Mon, 24 Feb 2025 09:18:25 +0000 Message-ID: <8e567e7db48ba6d268c5e3a3481d53d891524d68.1740382735.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8859:EE_ x-ms-office365-filtering-correlation-id: d9814b2f-3d43-4f68-9c33-08dd54b43155 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: =?iso-8859-1?q?lk7ri5yYUStex+Gw5e6B8Za03t?= =?iso-8859-1?q?HRIS5ZkaeOTTxxkwtB4MPfVo1vTnsHKxHN33q+5/aQKbN4GdgyoFxNAklLLO?= =?iso-8859-1?q?tBmJZQyOxJ+TqvyvIvzrHtBezJDd/EmgQIJMMmgtrboAV8+A1TN0UzGti/9c?= =?iso-8859-1?q?n3RfCcr9ah7UK3leYvSD4nEXvG/H/vt2zDdzjT/DweEZABdVIqfn48cpiU80?= =?iso-8859-1?q?vp4kewjnHjKsmMJIH6tVJpP82up9+98dxibIpPkWmEINJl2ocmXhaVmYeaN2?= =?iso-8859-1?q?GbEN3wjB/0ePTO5TVc0pKk0zqLWtijnMq9PBQhowJP2RhLTKPzqthuSWo+H4?= =?iso-8859-1?q?Z95FsY+l4hk9oClJ0RytF+1KxX/zbsy9PfzwvS0waLJxSZg/EgdhGBKjMxmX?= =?iso-8859-1?q?yAzssPMgqX+6pBUaonGAeOKsxsNYiAJYOANe6Ahd68dMIT2+zX4EDbm+GH2a?= =?iso-8859-1?q?qgI2W1xbn8A13FWGV/5LMUYMygAheZZSaJq/TgfR9H4Lwpbv8CbNADn3DN0K?= =?iso-8859-1?q?YKmbmVTS6RlaYEix6u01fiiss0U+73goKgJ1jGVCWShf995CEO00t6nMrXUl?= =?iso-8859-1?q?frCzTLgY/xdWCPpc9dwXSnqcoBc44D74Pmf8ulUxJA2xk1u3xb9N/cH8Tq+q?= =?iso-8859-1?q?Wz623TQjC/R6N9BymhNm/Ij/YBuYoLJ7oR4TPE78KRWT1Uh8Ht5E1AVkF4cj?= =?iso-8859-1?q?a4pUpLK94BiNebZkE/aJDFmM81+nH0R1HIOSvxb4s83Wwm6YUOF9LbvEiaXL?= =?iso-8859-1?q?8964/yBFQWH+tj22YARtvi8Z/b3ikVXvvJBH9YswwLT7WvCqTIDlZ9TTy8ru?= =?iso-8859-1?q?v9CIT60q5WxbBNoUtc03Z/hxib2LjujMD09hA3dHIysbGMmrdGq0E9DLylV0?= =?iso-8859-1?q?eBpLP80JOQO9lk3eG5s55LF0CCgVAw3T5OquyYeS5D9XH+M4igbW4lnNCTbW?= =?iso-8859-1?q?r6Z5qSWJxfldtNHvGpSyPaGrn2/HmBVGyRYNE3E46g2tc5e3JYCLhGJSyOfy?= =?iso-8859-1?q?swewOl0uFJlMWf8SZY+tFSlmxHV33RyXqEeeMlMuIqSEJCi5Zcv0Gql5Yq7G?= =?iso-8859-1?q?Cccs8AFL3wMI6Psh/UpD2x4xC3CiJ3V3TD85wfVF3MSEXWYLOjIXwVh9Q2vj?= =?iso-8859-1?q?DbK6ogNKTwCXJYp+8rej20Xtwv3GeGVo64x8xoJZ+/1WVDL3Ns5uBPGw9yFM?= =?iso-8859-1?q?QKwnF3qPKOw8w0zo/MZotUcjYpu8aTfseqh0dq2q3Nj0O294ccsnANxZx20b?= =?iso-8859-1?q?RGdwwIcOlMXtBfJTVHAuXddd5VslhcrjiHDq09LxGsq01Vt/BSR3ib5FrvhS?= =?iso-8859-1?q?Hz/ldMX1ilJYfbVFzl364LyiSXh3SSmrHZHyS+Ny9MIfv3hCAEg699O4GImH?= =?iso-8859-1?q?vSSahF9sFrmkkqy7fZzmLC4VssypliDWuaObKNsRpXIYIjd+F06JTw8D1MeM?= =?iso-8859-1?q?8PZyTdxK2OL7UbOBO0WFAfLg=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.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: =?iso-8859-1?q?Bs9JMOVlvrCR1BwUlim0XbQ?= =?iso-8859-1?q?of7StXdZZrj/33PVZtoW1ZQg/cGqLok62JYP7seCxh8+xJs3XJgythZ6xU8H?= =?iso-8859-1?q?FK3yHgMT01KCU2Kp42FbnkZtnv77mQbLQpTo/mbrWjVytU0Mg8+PAngZ0ms9?= =?iso-8859-1?q?xxAIe9iXpCjOQZslKv1on0iOVNZq+e7BCoEuUH/Zjh6f2oTIQ4kTB2Ng1eEW?= =?iso-8859-1?q?eK+nWjhMew6osTUpinigX9kcy6aXkqNvXimxn5bOQrOn7a4D/wqQmnXqhUg7?= =?iso-8859-1?q?w7zsIqrDAKUY1d5gBrcg/UOeBtuGdNYdJWljG7y1HGYZ8l8e1kxHdz0BI03I?= =?iso-8859-1?q?HZnGWgT12KOV4Vx+aKTrP9NsEjg9MvAdP4O0x0v1bocMLaLCo9CU9TEwXeyG?= =?iso-8859-1?q?9hr688sAv2jjFTFETQywMijOEoi7ABlG8AxQyU9bbG5W4t7b0L4TTZMVC/Js?= =?iso-8859-1?q?S2nM8RJWX85WI2PuvU84ZiVwf/kT1AyapTyluSSPAgYisfFkY8Poh/Hb+ZLr?= =?iso-8859-1?q?fs8nHoKYoGYyfkqV0L4aH3U+OikP7949Z8M0vKgj5FJc5OaiV2MK+P6RCFT8?= =?iso-8859-1?q?5BBuQBJpQ83sv0vkqOsG6uI57Zi+UZwCFXSnFIvY9HO7795cFiGewu+ay/e9?= =?iso-8859-1?q?GMUfQ1oC28cV8miVvQra+3rUvsrOHABPs8V3ntjIZZsIqaqCPWSeTFHAivjo?= =?iso-8859-1?q?xf1zf7J1wev5EefgP2/yIGvc6fwIdak8v6tQB1nRCoFyM9DNqDgvF+4/nbL5?= =?iso-8859-1?q?fEj8FJzsHOMz5o+a4d6FJZuab4O63wpmGtFT1HsQBCPVTkQE4W2VhE51/f1g?= =?iso-8859-1?q?cUTYapg4SgsmZBLvfbi5kPKA33WO04t1jDf7mAOgUJtgFSyHBl3JLyNrGYnn?= =?iso-8859-1?q?RR4GqDSUyuAek6/zyP+HgXsVjoMq2OpcMDmbLqeR/i2xANK9xKO2jYZ8uDE0?= =?iso-8859-1?q?SGgbsVre++Q+5FfAPOpo6O+O3bPFQsh6u/Abh+yeXdxZ4Ic4wsC6ROXcUaEK?= =?iso-8859-1?q?EJb6CeeZPhozxaJ75rZAIBqCvtJsxMWj3/JBqHUBLCFCHfSeAA8BdwG2X3n6?= =?iso-8859-1?q?RQ93X7CdJKsLxddmGog2D8Cw17u+qh/ABehPZWiUjFBuCcO7xeXGWoclAewR?= =?iso-8859-1?q?BpsVrPIpJysGroV48qeiVLid01ThG8682cUE/ykkib7B/ALipflqsjdTYwH6?= =?iso-8859-1?q?Iz3euZit7w7CBAdSmzIvyQ12AqufBU0/DCJBxbomfk7ooCg2UvGI+tDt6Xa3?= =?iso-8859-1?q?YYp1yxhYi7WMN1Pumu/PjIpNeoZRv+FLk9gOVGYPDK71eMBeewffOYKJKnqI?= =?iso-8859-1?q?D2frPyo7Jiu5kyD4P/FKpIs01hIut3Foh0Ftdzp+7hfODG79JwqQrAbJDWqu?= =?iso-8859-1?q?up+W9rnfLddFSX4jgKqbqF5M7EPIQDqcnwNmMx/hPu0nEbT1ysbIw+WdMLcJ?= =?iso-8859-1?q?5LXzv5RxVx2eCOrocOgCzQSaEr0OOtcP5bRd10vzWUWDaJcHmIPndtJmfYcO?= =?iso-8859-1?q?geUwiZTIJi1/uaY/gOnqCCjdWR4TkiUzmpkOJIfg+c+oCU/6UAeWlKjCEEay?= =?iso-8859-1?q?xqpQhQhNfMmQhC56gtN/W+c8GlUkJvQZK2qM1nSEA1etBRRMS2awJnxsbeR1?= =?iso-8859-1?q?Z2FYHoykX6rPhgS3AcejO6JRbTvYiNecnyOGDGQ=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9814b2f-3d43-4f68-9c33-08dd54b43155 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 09:18:25.4453 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: mTxDsPNcwEfGaNasMdXIq+7JdCFEGjj3yLLnroRNEFoQ8DN8QNsb9hHgfS9DeY9APTdi+fX4YRpGJyfQ6MjenA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8859 From: Oleksandr Andrushchenko Add support for Renesas R-Car Gen4 PCI host controller. S4 and V4H SoCs are supported. Implement config read/write operations for both root and child buses. For accessing the child bus, iATU is used for address translation. Signed-off-by: Oleksandr Andrushchenko Signed-off-by: Mykyta Poturai --- xen/arch/arm/pci/Makefile | 1 + xen/arch/arm/pci/pci-host-rcar4.c | 529 ++++++++++++++++++++++++++++++ 2 files changed, 530 insertions(+) create mode 100644 xen/arch/arm/pci/pci-host-rcar4.c diff --git a/xen/arch/arm/pci/Makefile b/xen/arch/arm/pci/Makefile index 1d045ade01..63ea86d9fa 100644 --- a/xen/arch/arm/pci/Makefile +++ b/xen/arch/arm/pci/Makefile @@ -4,3 +4,4 @@ obj-y += pci-host-generic.o obj-y += pci-host-common.o obj-y += ecam.o obj-y += pci-host-zynqmp.o +obj-y += pci-host-rcar4.o diff --git a/xen/arch/arm/pci/pci-host-rcar4.c b/xen/arch/arm/pci/pci-host-rcar4.c new file mode 100644 index 0000000000..df337e3159 --- /dev/null +++ b/xen/arch/arm/pci/pci-host-rcar4.c @@ -0,0 +1,529 @@ +/* + * Based on Linux drivers/pci/controller/pci-host-common.c + * Based on Linux drivers/pci/controller/pci-host-generic.c + * Based on xen/arch/arm/pci/pci-host-generic.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include + +#include +#include +#include + +#define RCAR4_DWC_VERSION 0x520A + +struct rcar4_priv +{ + uint32_t num_viewport; + bool iatu_unroll_initilized; + bool iatu_unroll_enabled; + void __iomem *atu_base; + unsigned int version; +}; + +/* + * PCI host bridges often have different ways to access the root and child + * bus config spaces: + * "dbi" : the aperture where root port's own configuration registers + * are available. + * "config": child's configuration space + * "atu" : iATU registers for DWC version 4.80 or later + */ +static int __init rcar4_cfg_reg_index(struct dt_device_node *np) +{ + return dt_property_match_string(np, "reg-names", "dbi"); +} + +static int __init rcar4_child_cfg_reg_index(struct dt_device_node *np) +{ + return dt_property_match_string(np, "reg-names", "config"); +} + +/* ECAM ops */ +const struct pci_ecam_ops rcar4_pcie_ops = { + .bus_shift = 20, + .cfg_reg_index = rcar4_cfg_reg_index, + .pci_ops = { + .map_bus = pci_ecam_map_bus, + .read = pci_generic_config_read, + .write = pci_generic_config_write, + .need_p2m_hwdom_mapping = pci_ecam_need_p2m_hwdom_mapping, + } +}; + +#define PCIBIOS_SUCCESSFUL 0x00 +#define PCIBIOS_BAD_REGISTER_NUMBER 0x87 + +#define FIELD_PREP(_mask, _val) \ + (((typeof(_mask))(_val) << (ffs64(_mask) - 1)) & (_mask)) + +/** + * upper_32_bits - return bits 32-63 of a number + * @n: the number we're accessing + * + * A basic shift-right of a 64- or 32-bit quantity. Use this to suppress + * the "right shift count >= width of type" warning when that quantity is + * 32-bits. + */ +#define upper_32_bits(n) ((uint32_t)(((n) >> 16) >> 16)) + +/** + * lower_32_bits - return bits 0-31 of a number + * @n: the number we're accessing + */ +#define lower_32_bits(n) ((uint32_t)((n) & 0xffffffff)) + +#define PCIE_ATU_VIEWPORT 0x900 +#define PCIE_ATU_REGION_OUTBOUND 0 +#define PCIE_ATU_CR1 0x904 +#define PCIE_ATU_INCREASE_REGION_SIZE BIT(13, UL) +#define PCIE_ATU_CR2 0x908 +#define PCIE_ATU_ENABLE BIT(31, UL) +#define PCIE_ATU_LOWER_BASE 0x90C +#define PCIE_ATU_UPPER_BASE 0x910 +#define PCIE_ATU_LIMIT 0x914 +#define PCIE_ATU_LOWER_TARGET 0x918 +#define PCIE_ATU_UPPER_TARGET 0x91C +#define PCIE_ATU_UPPER_LIMIT 0x924 + +#define PCIE_ATU_REGION_INDEX1 0x1 +#define PCIE_ATU_TYPE_IO 0x2 +#define PCIE_ATU_TYPE_CFG0 0x4 + +#define PCIE_ATU_BUS(x) FIELD_PREP(GENMASK(31, 24), x) +#define PCIE_ATU_DEV(x) FIELD_PREP(GENMASK(23, 19), x) +#define PCIE_ATU_FUNC(x) FIELD_PREP(GENMASK(18, 16), x) + +/* Register address builder */ +#define PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(region) \ + ((region) << 9) + +/* + * iATU Unroll-specific register definitions + * From 4.80 core version the address translation will be made by unroll + */ +#define PCIE_ATU_UNR_REGION_CTRL1 0x00 +#define PCIE_ATU_UNR_REGION_CTRL2 0x04 +#define PCIE_ATU_UNR_LOWER_BASE 0x08 +#define PCIE_ATU_UNR_UPPER_BASE 0x0C +#define PCIE_ATU_UNR_LOWER_LIMIT 0x10 +#define PCIE_ATU_UNR_LOWER_TARGET 0x14 +#define PCIE_ATU_UNR_UPPER_TARGET 0x18 +#define PCIE_ATU_UNR_UPPER_LIMIT 0x20 + +#define PCIE_ATU_FUNC_NUM(pf) ((pf) << 20) + +/* Parameters for the waiting for iATU enabled routine */ +#define LINK_WAIT_MAX_IATU_RETRIES 5 +#define LINK_WAIT_IATU 9 + +static int dw_pcie_read(void __iomem *addr, int size, uint32_t *val) +{ + if ( !IS_ALIGNED((uintptr_t)addr, size) ) + { + *val = 0; + return PCIBIOS_BAD_REGISTER_NUMBER; + } + + if (size == 4) + *val = readl(addr); + else if (size == 2) + *val = readw(addr); + else if (size == 1) + *val = readb(addr); + else + { + *val = 0; + return PCIBIOS_BAD_REGISTER_NUMBER; + } + + return PCIBIOS_SUCCESSFUL; +} + +static int dw_pcie_write(void __iomem *addr, int size, uint32_t val) +{ + if ( !IS_ALIGNED((uintptr_t)addr, size) ) + return PCIBIOS_BAD_REGISTER_NUMBER; + + if (size == 4) + writel(val, addr); + else if (size == 2) + writew(val, addr); + else if (size == 1) + writeb(val, addr); + else + return PCIBIOS_BAD_REGISTER_NUMBER; + + return PCIBIOS_SUCCESSFUL; +} + +static uint32_t rcar4_read_dbi(struct pci_host_bridge *bridge, + uint32_t reg, size_t size) +{ + void __iomem *addr = bridge->cfg->win + reg; + uint32_t val; + + dw_pcie_read(addr, size, &val); + return val; +} + +static void rcar4_write_dbi(struct pci_host_bridge *bridge, + uint32_t reg, size_t size, uint32_t val) +{ + void __iomem *addr = bridge->cfg->win + reg; + + dw_pcie_write(addr, size, val); +} + +static uint32_t rcar4_readl_dbi(struct pci_host_bridge *bridge, uint32_t reg) +{ + return rcar4_read_dbi(bridge, reg, sizeof(uint32_t)); +} + +static void dw_pcie_writel_dbi(struct pci_host_bridge *pci, uint32_t reg, + uint32_t val) +{ + rcar4_write_dbi(pci, reg, sizeof(uint32_t), val); +} + +static void rcar4_read_iatu_unroll_enabled(struct pci_host_bridge *bridge) +{ + struct rcar4_priv *priv = bridge->priv; + uint32_t val; + + val = rcar4_readl_dbi(bridge, PCIE_ATU_VIEWPORT); + if (val == 0xffffffff) + priv->iatu_unroll_enabled = true; + + printk(XENLOG_DEBUG "%s iATU unroll: %sabled\n", + dt_node_full_name(bridge->dt_node), + priv->iatu_unroll_enabled ? "en" : "dis"); +} + +static uint32_t dw_pcie_readl_atu(struct pci_host_bridge *pci, uint32_t reg) +{ + struct rcar4_priv *priv = pci->priv; + int ret; + uint32_t val; + + ret = dw_pcie_read(priv->atu_base + reg, 4, &val); + if ( ret ) + printk(XENLOG_ERR "Read ATU address failed\n"); + + return val; +} + +static void dw_pcie_writel_atu(struct pci_host_bridge *pci, uint32_t reg, + uint32_t val) +{ + struct rcar4_priv *priv = pci->priv; + int ret; + + ret = dw_pcie_write(priv->atu_base + reg, 4, val); + if (ret) + printk(XENLOG_ERR "Write ATU address failed\n"); +} + +static uint32_t dw_pcie_readl_ob_unroll(struct pci_host_bridge *pci, + uint32_t index, uint32_t reg) +{ + uint32_t offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index); + + return dw_pcie_readl_atu(pci, offset + reg); +} + +static void dw_pcie_writel_ob_unroll(struct pci_host_bridge *pci, + uint32_t index, uint32_t reg, uint32_t val) +{ + uint32_t offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index); + + dw_pcie_writel_atu(pci, offset + reg, val); +} + +static uint32_t dw_pcie_enable_ecrc(uint32_t val) +{ + ASSERT_UNREACHABLE(); + return 0; +} + +static void dw_pcie_prog_outbound_atu_unroll(struct pci_host_bridge *pci, + uint8_t func_no, int index, + int type, uint64_t cpu_addr, + uint64_t pci_addr, uint64_t size) +{ + struct rcar4_priv *priv = pci->priv; + uint32_t retries, val; + uint64_t limit_addr = cpu_addr + size - 1; + + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_BASE, + lower_32_bits(cpu_addr)); + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_BASE, + upper_32_bits(cpu_addr)); + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_LIMIT, + lower_32_bits(limit_addr)); + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_LIMIT, + upper_32_bits(limit_addr)); + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET, + lower_32_bits(pci_addr)); + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET, + upper_32_bits(pci_addr)); + val = type | PCIE_ATU_FUNC_NUM(func_no); + val = upper_32_bits(size - 1) ? val | PCIE_ATU_INCREASE_REGION_SIZE : val; + if (priv->version == 0x490A) + val = dw_pcie_enable_ecrc(val); + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL1, val); + dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2, + PCIE_ATU_ENABLE); + + /* + * Make sure ATU enable takes effect before any subsequent config + * and I/O accesses. + */ + for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) + { + val = dw_pcie_readl_ob_unroll(pci, index, + PCIE_ATU_UNR_REGION_CTRL2); + if (val & PCIE_ATU_ENABLE) + return; + + mdelay(LINK_WAIT_IATU); + } + printk(XENLOG_ERR "Outbound iATU is not being enabled\n"); +} + +static void __dw_pcie_prog_outbound_atu(struct pci_host_bridge *pci, + uint8_t func_no, int index, int type, + uint64_t cpu_addr, uint64_t pci_addr, + uint64_t size) +{ + struct rcar4_priv *priv = pci->priv; + uint32_t retries, val; + + if (priv->iatu_unroll_enabled) + { + dw_pcie_prog_outbound_atu_unroll(pci, func_no, index, type, + cpu_addr, pci_addr, size); + return; + } + + dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, + PCIE_ATU_REGION_OUTBOUND | index); + dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_BASE, + lower_32_bits(cpu_addr)); + dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_BASE, + upper_32_bits(cpu_addr)); + dw_pcie_writel_dbi(pci, PCIE_ATU_LIMIT, + lower_32_bits(cpu_addr + size - 1)); + if (priv->version >= 0x460A) + dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_LIMIT, + upper_32_bits(cpu_addr + size - 1)); + dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_TARGET, + lower_32_bits(pci_addr)); + dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_TARGET, + upper_32_bits(pci_addr)); + val = type | PCIE_ATU_FUNC_NUM(func_no); + val = ((upper_32_bits(size - 1)) && (priv->version >= 0x460A)) ? + val | PCIE_ATU_INCREASE_REGION_SIZE : val; + if (priv->version == 0x490A) + val = dw_pcie_enable_ecrc(val); + dw_pcie_writel_dbi(pci, PCIE_ATU_CR1, val); + dw_pcie_writel_dbi(pci, PCIE_ATU_CR2, PCIE_ATU_ENABLE); + + /* + * Make sure ATU enable takes effect before any subsequent config + * and I/O accesses. + */ + for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) + { + val = rcar4_readl_dbi(pci, PCIE_ATU_CR2); + if (val & PCIE_ATU_ENABLE) + return; + + mdelay(LINK_WAIT_IATU); + } + printk(XENLOG_ERR "Outbound iATU is not being enabled\n"); +} + +static void dw_pcie_prog_outbound_atu(struct pci_host_bridge *pci, int index, + int type, uint64_t cpu_addr, + uint64_t pci_addr, uint64_t size) +{ + __dw_pcie_prog_outbound_atu(pci, 0, index, type, + cpu_addr, pci_addr, size); +} + +static void __iomem *rcar4_child_map_bus(struct pci_host_bridge *bridge, + pci_sbdf_t sbdf, uint32_t where) +{ + uint32_t busdev; + + busdev = PCIE_ATU_BUS(sbdf.bus) | PCIE_ATU_DEV(PCI_SLOT(sbdf.devfn)) | + PCIE_ATU_FUNC(PCI_FUNC(sbdf.devfn)); + + /* FIXME: Parent is the root bus, so use PCIE_ATU_TYPE_CFG0. */ + dw_pcie_prog_outbound_atu(bridge, PCIE_ATU_REGION_INDEX1, + PCIE_ATU_TYPE_CFG0, + bridge->child_cfg->phys_addr, + busdev, bridge->child_cfg->size); + + return bridge->child_cfg->win + where; +} + +static int rcar4_child_config_read(struct pci_host_bridge *bridge, + pci_sbdf_t sbdf, uint32_t reg, + uint32_t len, uint32_t *value) +{ + struct rcar4_priv *priv = bridge->priv; + int ret; + + /* + * FIXME: we cannot read iATU settings at the early initialization + * (probe) as the host's HW is not yet initialized at that phase. + * This read operation is the very first thing Domain-0 will do + * during its initialization, so take this opportunity and read + * iATU setting now. + */ + if ( unlikely(!priv->iatu_unroll_initilized) ) + { + rcar4_read_iatu_unroll_enabled(bridge); + priv->iatu_unroll_initilized = true; + } + + ret = pci_generic_config_read(bridge, sbdf, reg, len, value); + if ( !ret && (priv->num_viewport <= 2) ) + dw_pcie_prog_outbound_atu(bridge, PCIE_ATU_REGION_INDEX1, + PCIE_ATU_TYPE_IO, + bridge->child_cfg->phys_addr, + 0, bridge->child_cfg->size); + + return ret; +} + +static int rcar4_child_config_write(struct pci_host_bridge *bridge, + pci_sbdf_t sbdf, uint32_t reg, + uint32_t len, uint32_t value) +{ + struct rcar4_priv *priv = bridge->priv; + int ret; + + ret = pci_generic_config_write(bridge, sbdf, reg, len, value); + if ( !ret && (priv->num_viewport <= 2) ) + dw_pcie_prog_outbound_atu(bridge, PCIE_ATU_REGION_INDEX1, + PCIE_ATU_TYPE_IO, + bridge->child_cfg->phys_addr, + 0, bridge->child_cfg->size); + return ret; +} + +bool __init rcar4_child_need_p2m_hwdom_mapping(struct domain *d, + struct pci_host_bridge *bridge, + uint64_t addr) +{ + struct pci_config_window *cfg = bridge->child_cfg; + + /* + * We do not want ECAM address space to be mapped in Domain-0's p2m, + * so we can trap access to it. + */ + return cfg->phys_addr != addr; +} + +const struct pci_ecam_ops rcar4_pcie_child_ops = { + .bus_shift = 20, + .cfg_reg_index = rcar4_child_cfg_reg_index, + .pci_ops = { + .map_bus = rcar4_child_map_bus, + .read = rcar4_child_config_read, + .write = rcar4_child_config_write, + .need_p2m_hwdom_mapping = rcar4_child_need_p2m_hwdom_mapping, + } +}; + +static const struct dt_device_match __initconstrel rcar4_pcie_dt_match[] = +{ + { .compatible = "renesas,r8a779f0-pcie" }, + { .compatible = "renesas,r8a779g0-pcie" }, + { }, +}; + +static int __init pci_host_generic_probe(struct dt_device_node *dev, + const void *data) +{ + struct pci_host_bridge *bridge; + struct rcar4_priv *priv; + paddr_t atu_phys_addr; + paddr_t atu_size; + int atu_idx, ret; + + bridge = pci_host_common_probe(dev, &rcar4_pcie_ops, &rcar4_pcie_child_ops, + sizeof(*priv)); + if ( IS_ERR(bridge) ) + return PTR_ERR(bridge); + + priv = bridge->priv; + + atu_idx = dt_property_match_string(dev, "reg-names", "atu"); + if ( atu_idx < 0 ) + { + printk(XENLOG_ERR "Cannot find \"atu\" range index in device tree\n"); + return atu_idx; + } + ret = dt_device_get_address(dev, atu_idx, &atu_phys_addr, &atu_size); + if ( ret ) + { + printk(XENLOG_ERR "Cannot find \"atu\" range in device tree\n"); + return ret; + } + printk("iATU at [mem 0x%" PRIpaddr "-0x%" PRIpaddr "]\n", + atu_phys_addr, atu_phys_addr + atu_size - 1); + priv->atu_base = ioremap_nocache(atu_phys_addr, atu_size); + if ( !priv->atu_base ) + { + printk(XENLOG_ERR "iATU ioremap failed\n"); + return ENXIO; + } + + if ( !dt_property_read_u32(dev, "num-viewport", &priv->num_viewport) ) + priv->num_viewport = 2; + + /* + * FIXME: we cannot read iATU unroll enable now as the host bridge's + * HW is not yet initialized by Domain-0: leave it for later. + */ + + printk(XENLOG_INFO "%s number of view ports: %d\n", dt_node_full_name(dev), + priv->num_viewport); + + priv->version = RCAR4_DWC_VERSION; + + return 0; +} + +DT_DEVICE_START(pci_gen, "PCI HOST R-CAR GEN4", DEVICE_PCI_HOSTBRIDGE) +.dt_match = rcar4_pcie_dt_match, +.init = pci_host_generic_probe, +DT_DEVICE_END + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ From patchwork Mon Feb 24 09:18:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 13987654 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CF63BC021B5 for ; Mon, 24 Feb 2025 09:19:21 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.894981.1303625 (Exim 4.92) (envelope-from ) id 1tmUbh-0004ow-6T; Mon, 24 Feb 2025 09:18:33 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 894981.1303625; Mon, 24 Feb 2025 09:18:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbg-0004om-V0; Mon, 24 Feb 2025 09:18:32 +0000 Received: by outflank-mailman (input) for mailman id 894981; Mon, 24 Feb 2025 09:18:32 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbg-0003pb-0Q for xen-devel@lists.xenproject.org; Mon, 24 Feb 2025 09:18:32 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20603.outbound.protection.outlook.com [2a01:111:f403:260d::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 5017b7d3-f290-11ef-9aae-95dc52dad729; Mon, 24 Feb 2025 10:18:30 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8859.eurprd03.prod.outlook.com (2603:10a6:20b:56f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%3]) with mapi id 15.20.8466.016; Mon, 24 Feb 2025 09:18:25 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 5017b7d3-f290-11ef-9aae-95dc52dad729 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FuAm1FnkGJi9HVUGRz1IuuczifKg4vr9FwyuZ943OqovmzaGCEdEUOEbDG5xj9oCUhVZjBiLfTIKwko8beCZgOQR3VT94+pBD3wQPHpIHSS9MOrzXVcLR+y3SrQdtcdTcpGgzAJII9Zt6tDtslOA2nUExB9o7kys9I9doNtlKiQnm/ExetOpsycMx7iKtqW/+9QlrMcOW4tO4ABuptJovs/KGMw0wJ/xBpEj7p0aLH1h5aMrJrDHTTFMOViPimY3ukg/sxFBNTdav4dFAHw9xerUT/uov5qsyUt/SsA3Hj6nTGYzjbuc1Xf+2/oPmk37YO4lE1je+2QpM23M9Rf+Dw== 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=tAMV7D+1eDnHsag6KRUbwF9Dqhd0IxQ+BlQYpLBU+aA=; b=oib6hlG8TS3xvNKf7tTbC1AN/cigpsvbPEkpDkT2BEXv4QpQZ8b+w6c42U6XAAUuwUdvXAlQUeOJSr+rGL0+OOTQiT2pjgwqcDlK7iqnrfCqbEYzK3YDAKWZ7Uk+gBH6shtn/s4pRbMqabb+3Z5afdCf3IYUAFfBenOlnXsyJlMqMZ9X+BYQXHsWBdL66O67HuZV0F0mX1p+9wg6AVW9O1G3q/+l2TEmQYfcE9fPQiCWQ5CavU9QybWqUYX/vu2H3INHoHoPcTLM5w6c4XhZA55dRx20lPMmx1OwCLU1LWxTDZqbCKtH8e9mCFF3Ns09E/Tk8UAYQFpuYPKyjTwWRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tAMV7D+1eDnHsag6KRUbwF9Dqhd0IxQ+BlQYpLBU+aA=; b=R/aTZHzifB7Y9xFvwv0uAO5+yslD7PXhwSiq4ojz1Faavtp8wUT/GIaBwOrhz+6cd5Bp1mTOCr0HZvpLu7FvWY5frFazLQVCVc63Ymes6PBaruNd/Hu6aO6xDLqkpXa+Fm3V0gWWEmMY6QZptrgTtO59DJ25LUu8wN1BSfsaAaUaKFpKz/ABwbPPerp9wAQenY6lNyxXPuYDGXHqvX47XqyVuxsGd/qxkQhPKKFvhaJtRx9bTJerLFckH2HcmtzyZxpgRtI1Xi6IBRgp8C3ix2LUq0Rmi+0IVzN9Gm5V1+Mvluw9f41wWzW41lYvdodDkU9oBgB9D91455/6/BBw1A== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Volodymyr Babchuk , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH 5/7] xen/arm: rcar4: add delay after programming ATU Thread-Topic: [PATCH 5/7] xen/arm: rcar4: add delay after programming ATU Thread-Index: AQHbhp0PUAmh9clLH0yLO3Eb3ISwIw== Date: Mon, 24 Feb 2025 09:18:25 +0000 Message-ID: <5837e6b60b413a3ea137fed1a59003bf2e2fb336.1740382735.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8859:EE_ x-ms-office365-filtering-correlation-id: 4adbbd0d-8034-4d45-903c-08dd54b43191 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: =?iso-8859-1?q?pzv8vOut8s+A4h0rwuOZCZtiBy?= =?iso-8859-1?q?S+U0zcLYqcDUA3P0dqf0/1s7n0RweYcOOqhF4ddCuDwnrw069aK4OFecvzdY?= =?iso-8859-1?q?sQGjwavV0bsdt8Pclt7735xarr0HNNMd0Rblrs1ar3780u16sgYecDp+qF8C?= =?iso-8859-1?q?JiYpnKBKzo0pC83OIjeUJeDBl/wSiOc7X4cLHdqCM+8Gy2YH9Lsg5XtD0cSO?= =?iso-8859-1?q?agXI5CSrtNb3qSbg4zJHlKw9xjxg83aOJNVlB0MRnsNc4bgPp2S7i7+exRhy?= =?iso-8859-1?q?sAQGszvK+FVhp+GI0idUEThJ1AlDilKJyuvy4OM3ZWYEZ3LChMof0XCyTreU?= =?iso-8859-1?q?ZheXZWGjlJG2Hbv2ut2ruPSisLhwHR9qdQdoXfnVyYd2NdvEWNA8ZtoT6cH+?= =?iso-8859-1?q?Cc+2f4vNZIOWfDGgqWGsaihtk1Avt1T2JGmF7WPEsiqbKhmPNKmvwSgTMVAu?= =?iso-8859-1?q?SLIo9Fi54S7bdI8MZbAkb1VO5s1tN8+a/lf/0WyMwxp45+ECPxmxe2zrQRga?= =?iso-8859-1?q?j3hLeejEGLSG3a8wreQ6OsdEBK3uREhtRKbTfNuXoi7aIW5aZrVxaLzONJ/B?= =?iso-8859-1?q?0TavH0hNJl8nXnMJpxfx8RA1cvDAI4Yr/uAV+PylV7jBrwFdQaq8j+mNanh2?= =?iso-8859-1?q?sJzWtiVQXBm1811URtjO56eOv0W3KqFMUxpCpf9gmLgi7bd/6DKqFtBeo5Ij?= =?iso-8859-1?q?E8CVZ3EZoBIExRV3E+DQMXucGe2kxMuNoC4JXn9/6x7W2JxqAhtwyqgro9B4?= =?iso-8859-1?q?JU59iNHv1KZB99uqnuPHReP0hxBXCOcuualh0Tgx+4HL765FFJxM2Dh7t1u9?= =?iso-8859-1?q?Ls68VJjo7NBLycAAG5zSDHTAjYGp45mAJqqJxQmy08S0kjoiTKf08D6hoI3D?= =?iso-8859-1?q?BypeZZEVV81W2Y/C28oUvKf0PwyGkkCIu8Cr+wZIYLJW2Es2jiatuObEj9nx?= =?iso-8859-1?q?YjbOxLIG+ZeDg4XW9hUMO2nydvehXX5pvOoAYu7WEs9lt/xw7Uy9jyv0ek/l?= =?iso-8859-1?q?CKlrj6P3dwxDHmgQx/GeSnHxqy61OAZ3m3pUl1ofB3+0tIaah/tZDn0DHBkj?= =?iso-8859-1?q?pT3KHh2+imqrKDTe48M5hIOnd5yeUgGBpkX51BFS4Glcw33dHzpp6cXrKDA3?= =?iso-8859-1?q?qCeNjejJvwnlbDavhBzlb5gVOZoj15VXpO49DUrC/sR3Q4a5Xmki/yMs/B+8?= =?iso-8859-1?q?XgLJaGP6/DK8AIjP1vD5Qke7yxB1W4dYAhmfxAOXiiiLxq5GHM36vTc0FfhJ?= =?iso-8859-1?q?iaP11Bl/2EGyFggal4asr+4xLW218DGtDqBAP0bP1lNX/FHdglwBPbCf456N?= =?iso-8859-1?q?g2uIMM24H+dyaImoPNTqLkO+WMwEQsUGby30a687+IpCrvLpMxWPBHpRN+UO?= =?iso-8859-1?q?mf9hKGwknlSpd8Z4BbwQLkM6m7VXVtwpip3iEZ8fIVQ7Kid8wNzEm1iY+9jC?= =?iso-8859-1?q?bx03/Hqas1Qk+LqScPafRVLQJcmIGHxy5SXnVEYpsDEiSww0sSSi1YSY+n1d?= =?iso-8859-1?q?mFKSzu?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.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: =?iso-8859-1?q?13vgp4AU4MtA0DMWOLZZx6l?= =?iso-8859-1?q?Dm+X9z5wsYpvrc0XvsNG1jKQyxH9m/cxezvLhPoDzXmGroJOzh6HAI2qXf5+?= =?iso-8859-1?q?7+TQIST7A42d/G/E7bL3XLyrtnxDH2DI7N9VrIw5CyDqNcQDR148B2pXvLlC?= =?iso-8859-1?q?Wx7hhsPQoJV6sUSl/1D0JdjcDnaNSQWSoxHkVnz2KpC+CxAUT9CFbRXmHGz9?= =?iso-8859-1?q?5UzWVoTb3C0IIMI2eZq9zHSG+Pg/mlA35H2DLG8U7gPPVuuaWHUWhiZo/Lqj?= =?iso-8859-1?q?Z4gjrO2iUxJXr97DIJtZ7noV5mJJFc8/F4NX8L4Rpy1olXgB2uvmuI5gBxwz?= =?iso-8859-1?q?Ja4VKEIynDj0kqBPPWJr6sH37oCrzTAx/+pxqRnn24gi/IZNLUz+2PgjI5PH?= =?iso-8859-1?q?7X90xevSW9aF6hA711TxR6Vo2FrqnmVICxS0BGCRfNo7OImsPhyYv9skJ7os?= =?iso-8859-1?q?tus55LhXKGCSA4rYvmGy9QLCDQKN481LtkjHAQJ0U9irot0EVs336hnn4t4J?= =?iso-8859-1?q?k9+LkQP8XVRGfvAWihbXqNYKqA72l2rYQYfXxCSNFUc13zwHCAePjDOHM+36?= =?iso-8859-1?q?Gm4xQWKVGDI0G+zwWfbQvQ6K96LNwcvW4qo5acB7CRCytW6MbWzl3lsqNJUu?= =?iso-8859-1?q?8hRukxoKNrQg5dbO/xyvgBxXcu2XQgLT8EuFQGuSHOuZah8sy+/kpfx+xDNN?= =?iso-8859-1?q?TFKldcjfzlJN4uO8YzH92IXiyW2XI+4Fb/KaJGJuryfM/EYKNiyHcp6QeyZ4?= =?iso-8859-1?q?VGwKuyErGAo05K2eZ6jd0Yx2sutmCIBnnNdD7FNM6lIw3klStKZcuvxlXzG6?= =?iso-8859-1?q?W4xWY9p8XJWXnx/oTGLfgkNtFm28bxEkpzCNooS5kU3pb5IPFcVfKUMn3aO+?= =?iso-8859-1?q?IQ4QpTrj7ikqRRyQhsWOxY3ZBW3L8+mKPpZmRD2BWubu1zlrMXDMy4n0fAmz?= =?iso-8859-1?q?66tFMyCq5f4UbKbrpNf+9/WafHSnhnbXvZ/eriWs8NTpkZb9WnI05Ag1ftKM?= =?iso-8859-1?q?zWEq++7CLgjvoDo1+5ZQaIOfSTwqQ40SkjjpEw66iFVjw7d/9v5PRfOXNZUj?= =?iso-8859-1?q?9VILDX63+KVeva2WbsZkBaMlzfO9mHMGJWixjTeGlarVYX4q1JY0OkvfcJX6?= =?iso-8859-1?q?XoHTWEf90NFR5teYCxSNqPAzzbnw7e3RIcVPAIfrM3/ulqv0UQh/ZfV8xaZ7?= =?iso-8859-1?q?9wBFqVuXAvRlw2xg1ZWATPBmLJZHP2o2COsz4zwgCudJoLDSo/+QbEIxFard?= =?iso-8859-1?q?vsjaIxxEACGECyUeKiMVGcc1JrS5YiA1Rr1YC9DWZQJ5AaMB3Grbn2xDy20r?= =?iso-8859-1?q?wGE4XZYm9c6LAi4yWImSx5TRgTpjhy9fifzA6tzJVQl7Dfk0Q+9ZpzPhthme?= =?iso-8859-1?q?7FNFBkc30HGAg50v+2mOUxaZQwSnoWr0XGRwersV1oGhlOtcayJQ/wBWY/k9?= =?iso-8859-1?q?U6CA3qylcToxJPdhCglBwVG0aH7Kxn+2nxIIG2HpO98c7xk3cdPt9dZV4HzX?= =?iso-8859-1?q?AjPDTe9LF6toe0vT8Wi2rTDu0zzxAKl260TycgVGvSzUeKjZv/pQPRewpuvg?= =?iso-8859-1?q?O4sYhFcm0T1YVv1J4XLaDELZNyaR8/g6FfLXjBJ/5hPHRcjgScJbrKC1D8uj?= =?iso-8859-1?q?SQLDloDDa9JobdOtFbqkCheQDBnQDC/mmaLijtQ=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4adbbd0d-8034-4d45-903c-08dd54b43191 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 09:18:25.8517 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: rw9UYxUuV5dQRsoastiS2e8muIw+UGvzmpNexXmLMLQhZgs2eKy0lXViaDzXydDPE0KEXMp5NzNLyIVo/cvTfg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8859 From: Volodymyr Babchuk For some reason, we need a delay before accessing ATU region after we programmed it. Otherwise, we'll get erroneous TLP. There is a code below, which should do this in proper way, by polling CTRL2 register, but according to documentation, hardware does not change this ATU_ENABLE bit at all. Signed-off-by: Volodymyr Babchuk Signed-off-by: Mykyta Poturai --- xen/arch/arm/pci/pci-host-rcar4.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xen/arch/arm/pci/pci-host-rcar4.c b/xen/arch/arm/pci/pci-host-rcar4.c index df337e3159..3b97bf138a 100644 --- a/xen/arch/arm/pci/pci-host-rcar4.c +++ b/xen/arch/arm/pci/pci-host-rcar4.c @@ -289,6 +289,11 @@ static void dw_pcie_prog_outbound_atu_unroll(struct pci_host_bridge *pci, dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2, PCIE_ATU_ENABLE); + /* + * HACK: We need to delay there, because the next code does not + * work as expected on S4 + */ + mdelay(1); /* * Make sure ATU enable takes effect before any subsequent config * and I/O accesses. From patchwork Mon Feb 24 09:18:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 13987652 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B92F8C021B3 for ; Mon, 24 Feb 2025 09:19:12 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.894982.1303638 (Exim 4.92) (envelope-from ) id 1tmUbi-0005FT-IA; Mon, 24 Feb 2025 09:18:34 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 894982.1303638; Mon, 24 Feb 2025 09:18:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbi-0005En-E7; Mon, 24 Feb 2025 09:18:34 +0000 Received: by outflank-mailman (input) for mailman id 894982; Mon, 24 Feb 2025 09:18:33 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbh-0003pb-0i for xen-devel@lists.xenproject.org; Mon, 24 Feb 2025 09:18:33 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20603.outbound.protection.outlook.com [2a01:111:f403:260d::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 5059ae58-f290-11ef-9aae-95dc52dad729; Mon, 24 Feb 2025 10:18:32 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8859.eurprd03.prod.outlook.com (2603:10a6:20b:56f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%3]) with mapi id 15.20.8466.016; Mon, 24 Feb 2025 09:18:26 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 5059ae58-f290-11ef-9aae-95dc52dad729 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lLE7WwhonQoGgTC8F2vONGYnZ2qYX2hRoEoFIIVyHyT+/D1r7qycWr1blVUKlIOoXN44AlZoPZTYQ4F+3pM4rBhxvIXLq+l1hRLSaE1mbRfKYytiErKJHFnfwoPpBJnmM5QUcQtIqg/NyCZRZg7oWrE1B5WzcVJZomglJO1Ix3CxqgvSI+znMRnySy4vt8KZ113P+/TFwQ3UKigWqyiVGomJMUj3lr8n+DgCMqhOsuDvHbPecn6rGesTD4+0GXeICNNME3HT+dQn8+5/U5Y1G0AWS1GyKOANyDxLNSzQ3sN4RmYTq0rqDZCdOE4COdRjN+14kxpNR8yAKEiuNQvGBA== 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=ArXy3H4w82OCwUvmpq0NyU7K5YqtXJp08wLVcf0//QI=; b=Bglo5RvP+NJLDbAijYFS1kN26UZKeHfsUZtUyKnE1y3iSEnV3UaVPPWo3GOs2th04JSHwXAdaS5MJtG4uS3JsloNL1gCkZ2NWhuY5rMjTwgyvBh0jX1ZoWLjpzBb2y86iaPzUb/LV10moljpmj3/vcE6bq3ISJOvsvhItbZeLWVXqOLNzzJn+0s8uevUMsZzES9cl6QQMWCSWdcWzyW8xxTQbRjCCIfwh9OjD7g0Q3w9fCyK2SyYLHSm7ZJF5CHPuHv7oNurkbNY4WZCt94YNKE+FZFToHzN+ssmq6U+LBPmR3ZUx4lSHyTO/8VtGDjTzavg/MiArxF1l6h129XIFg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ArXy3H4w82OCwUvmpq0NyU7K5YqtXJp08wLVcf0//QI=; b=BseJo9CYO9fLje9obak6umL98CRbuBNiyA+R5fTjh6WxNFrlffwKgN3WmzbwK6Mq82+0SYCKNUZV8JmiyLH/zleJyUC5CqtUUSDYARYoPfZdL5n0q8AVrv9tieq6AVrHgcbAmArevVxHvVJjBlWQhmaphbgyPjY1eja69fRnvpUDcjv5b4K9XX2psv1rpy1TCCSZ8b6sOdpYrhIudbWv2JdrBpbtV4rfS+JJ4ETHcIogHapen1Sa3RLZogO+Qx4CkHbl6hSLEXWZgHG/9qmFpl2lxhJETz4UTnI5I8oAiwbOXmYvz/AAEI8IfP+dd1nfz8t9d1F62sJGzCAvfRaNAA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Volodymyr Babchuk , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH 6/7] xen/arm: rcar4: add simple optimization to avoid ATU reprogramming Thread-Topic: [PATCH 6/7] xen/arm: rcar4: add simple optimization to avoid ATU reprogramming Thread-Index: AQHbhp0P6SKfNkaWykyl+zsyAHE9bw== Date: Mon, 24 Feb 2025 09:18:26 +0000 Message-ID: <499ef211f469949e5fefd47b17e135b26325e0e5.1740382735.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8859:EE_ x-ms-office365-filtering-correlation-id: c336d425-a5e3-4e6f-084e-08dd54b431c8 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: =?iso-8859-1?q?GdcYRgYiWWgTcGd4xJPgS83ZHP?= =?iso-8859-1?q?T4oAEtgLlKEvVhDRIXMUDLCwYOSusAyrcW0zAj/vRA+QFEnx6LKIpePhhqXd?= =?iso-8859-1?q?QuNfPTD7Z0EHaBLywFIKIBmG7r3H2/QCsI99ehX984rgkkC7bWxLdAzEnf74?= =?iso-8859-1?q?J3S0fnbNQp9EfF1TLOmO6TGorwzc9+qMeVZ2PLjfdnxCG7/9FwG6Gne9loYj?= =?iso-8859-1?q?gsFuTMxwd2/fMbTcXsMZI1850e4xcvM0q9VNWrpY05daLD/vT/5PVFpA1FCM?= =?iso-8859-1?q?WMmY7HKukJTwS9o82R0dNQME2nqIzJqfIVSrX+9NbVsRIRu5YwC9lnHVTbLz?= =?iso-8859-1?q?YgiZeVKGqHgnL1PGFOywBN8BWUGjhiUTcaL2+KFdGsSmUxmTN00kiHDC0rRz?= =?iso-8859-1?q?UaK2pr7nS+efIvU1mzZK5DoCImgvenJpL1plTHqUEKHCf4hci3An9tPB/95G?= =?iso-8859-1?q?zwv4cM7DFKTRygUrNAhadmSRTjAWvLL9oiHPH94qrAxEQ8mWjt4nGtkzBINX?= =?iso-8859-1?q?cYK7Xx4Pc/DyDK5bGCXab48aK8KATvskijAtjWJ3Yl8Vsoxdp/OFx6wujnyc?= =?iso-8859-1?q?0ydNsYQvP7/ylAvD0Sly4BeBZOfCyveacLjZn09dqnhSgTLHuQaS5Rm3Ghjy?= =?iso-8859-1?q?IGc9pvvaFPbYwb/0D9GzzgZTm54BacWi75eVGH+XtH0TvmQBEX6ip36nhR1E?= =?iso-8859-1?q?zaOw76Ey3bst/brDKhcZ+fTpStBzXHquYUn1Fzlt12La8P4YXNRSO2eIhFC3?= =?iso-8859-1?q?Fb1WWkEBqFesRjbUIQGycClxDeTssK066v/qwplpFl/Y3J0EO7qoUXhgYRyW?= =?iso-8859-1?q?lWcDpjDirmjioLJSBMv4DDK4DwmwcwU0cu5brCgEPNNy47jpm/yDsXbFm6Jm?= =?iso-8859-1?q?TQvOrUiSP0wyfeNh0nLYAnFSRj6MY1zZhyPhkijZjJfk/Gaxx2Y1kB56LtLI?= =?iso-8859-1?q?usYCTln3aXx7G3Cx0RCOT4iM1YZL32Ms8PDR8Z5ohP8eFWJS6cXQmODltqMY?= =?iso-8859-1?q?FT4nV+v7SZCm2wDdg0FQZO0GhETzAtPIosASwDlsCCmh8wQEh/YnkntZklNx?= =?iso-8859-1?q?6fhvCozWVDUYD3wkFTdq2/J1sOXw20XpTIRp6qnCvb4EyR1zdEqaysgWwMlr?= =?iso-8859-1?q?drb5vmkkKu0+LsdIMUDxgg8tSMzsAJ4MibisHd1h3JTlvbeWz1LIRqsY5yqe?= =?iso-8859-1?q?y2Ld8L1qnVvqGuL5ONTWsrVeOp0cCTSbkxBFUZWhSJCL0OJB+bf1p8oaEm8I?= =?iso-8859-1?q?Aym7duS95LBYCwp1hzSACsUbeQ6s+KT7DrzYXLAEh2RUqaL7jWrhXmQ0d4by?= =?iso-8859-1?q?coy3fI0041WgQ0by68JNxH+Bz4FCH/TR5I5OS1mJu+3B9zAevntBph4aZJPN?= =?iso-8859-1?q?bWrMCBck9FhEOv7xuN9+ilwaknPv+rxX8LMKc+sOYhbtskqrJV49etSuBhuh?= =?iso-8859-1?q?YF2/XDva/kkZcFenNg8y1GnOcxLbe1vO+TZqDl5Cx8Ep1CRxiM0LXNG/pzK3?= =?iso-8859-1?q?r/YK+s?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.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: =?iso-8859-1?q?sxVR42xMPy2vkDxWy/OpaNF?= =?iso-8859-1?q?ZgXaywl1rwNzsJq2IQvBHosqCTx5yiE4GJeMbr2Pqx9Q7TOfDWbY/qqE5VDt?= =?iso-8859-1?q?Ie+C1A+OP6ydMVS5A6B7Ry2LVnw5TstES0aJKHTWCz2+iBd94jxRstR0dsj3?= =?iso-8859-1?q?cZATskDnTUyAH0E+T/o2+5ppJ15oKTLe8wN1tLOsU1aFLmUXvrUT4kRtmcm8?= =?iso-8859-1?q?P16lqY+mYjLSdoFyU+SLsHjyZ78NpIzgzlGMjEFMnGbQwjl/qNurSqf5NvcH?= =?iso-8859-1?q?YT7TBjY87zRI4xJO+Co0OZD/uUCBNvkpG3JNOUKxHuG13B5e8xcICcxu28jj?= =?iso-8859-1?q?q5Gs/vHIAhOy6w3J0HA7jLsKOlMa3+q84dfhwDeOKAbF0giSRe0zZsZwUIT5?= =?iso-8859-1?q?ji8SEcGl33ZVKif6N5NWhuNlE0K4ypXoHDSWUzGykXsZ7wlOG6DSMOLFHDup?= =?iso-8859-1?q?XEbB++GnX+RrpFy5Msyu3c++jc6mr1z1RpTuIrv+bOrLQPHF1nkCZ+udXoSR?= =?iso-8859-1?q?klON+XdAfrxaUWTB7S0XpVgshZ83ardywURnETsU66WVVM5DXNEOPqHD93pS?= =?iso-8859-1?q?LrGJKXK9RT8vtrCnNxOxv5py+dIKBOLbibrEaST8vs6S9/kvrCL+PVNrHl2e?= =?iso-8859-1?q?eaGsVsgH5T7rspP8XE0ZuwsA+tJvwxM15iPWxH1OpnQNUc5/Kt/YFGBs1Co6?= =?iso-8859-1?q?Oofye4LW1y+x+VlJ5xN6bIr7xnrT2eHOxERdohcBRM81EIUpPUHLx77NfYAT?= =?iso-8859-1?q?4fvspEIFyM4qaOkths3OFJwqZnKZP31ucthrSDDYfjVqki6y0MzlGh5BnTrk?= =?iso-8859-1?q?XbbUm2D/NdHa2JAQkr51U85fIa3Lg0jj3s8ELxvWzZ6jmeYwCE4qkKTbVL2I?= =?iso-8859-1?q?x3z4OicRYE2IXksdxrplIZsP4+VU49iq69lt0WSo7q7hOpxU8QYtNs0ZZLXo?= =?iso-8859-1?q?8uNsronB4bvtT9hCzmCaTDXbQo55QDd6gdPrNQ0XGKNoOIUK+1Ek+KUtVZSG?= =?iso-8859-1?q?FUqTcalKGl37HIUNNOVmBH5LKLYCER4H2O7zhHbe5F4WD+aPinTxjn9Hn74W?= =?iso-8859-1?q?9FYZ+MMHz0MV9Srvo148mAPCGQItdZVqw/NPvwfQqXCfqhkez/t7eveHpAE5?= =?iso-8859-1?q?3hLD6tDFhUzdOrm37yYUedHYQ4AeTFPcvO4vjd+tg3YiZiybIAupbBiRMRUo?= =?iso-8859-1?q?js/hM4F8/+NgPvS7nfW87vfpaZPQsFJXZ+NbxsWjLwvhlKie7le0K9tgA5rG?= =?iso-8859-1?q?aXvesCuF9x5G0eBPDi621aByBTHyrxo5H3OX+7Hg5Fz4bLs4ZdkXLNxAcijr?= =?iso-8859-1?q?4phTpieZQJB9ykFQcFYcwmTeRCPWwytbM+0ZcjiaNbN13SLgTX8WQYKOjN/C?= =?iso-8859-1?q?WlZNwk51yHxdDqIBMc1rv3p8nvpNK7xwkiMrDiRn4DQByOqLOBsu1XLNxZPe?= =?iso-8859-1?q?dTNoxVRsjwrhotWtWDJclnNeU3txGFzywdmYhvRvz/Tr1MQdkIFOb0mQv9Y/?= =?iso-8859-1?q?ZKl8XxZ1Bda74VDQEBvqv5Zk63u6BE9P8OGyZK1kujXPI40dx1WDljs2b3fw?= =?iso-8859-1?q?nVCj/g9RPbYg5kDr8/XDXcTIaNJP8xq5y11hZdGdbj2PZl6vg7KehlnsClJS?= =?iso-8859-1?q?jZAaU4Y5mJmBnu3XsIXicvXf2ch+vZeVZ73Jmgg=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c336d425-a5e3-4e6f-084e-08dd54b431c8 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 09:18:26.1947 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lEB9BFdBtHm6W5ktqzIae5+ZL3guFSoflT6bGNaDgm94IyWp1ZdF6SdRGXGaOMRO8O3/U5rRnnI0OAaQFx9S3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8859 From: Volodymyr Babchuk There are high chances that there will be a number of a consecutive accesses to configuration space of one device. To speed things up, we can program ATU only during first access. This is mostly beneficial taking into account the previous patch that adds 1ms delay after ATU reprogramming. Signed-off-by: Volodymyr Babchuk Signed-off-by: Mykyta Poturai --- xen/arch/arm/pci/pci-host-rcar4.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xen/arch/arm/pci/pci-host-rcar4.c b/xen/arch/arm/pci/pci-host-rcar4.c index 3b97bf138a..3e3e073b09 100644 --- a/xen/arch/arm/pci/pci-host-rcar4.c +++ b/xen/arch/arm/pci/pci-host-rcar4.c @@ -367,6 +367,14 @@ static void dw_pcie_prog_outbound_atu(struct pci_host_bridge *pci, int index, int type, uint64_t cpu_addr, uint64_t pci_addr, uint64_t size) { + static uint64_t prev_addr = ~0; + + /* Simple optimization to not-program ATU for every transaction */ + if (prev_addr == pci_addr) + return; + + prev_addr = pci_addr; + __dw_pcie_prog_outbound_atu(pci, 0, index, type, cpu_addr, pci_addr, size); } From patchwork Mon Feb 24 09:18:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 13987649 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 11A81C021B3 for ; Mon, 24 Feb 2025 09:18:59 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.894983.1303644 (Exim 4.92) (envelope-from ) id 1tmUbi-0005K8-VY; Mon, 24 Feb 2025 09:18:34 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 894983.1303644; Mon, 24 Feb 2025 09:18:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbi-0005It-OR; Mon, 24 Feb 2025 09:18:34 +0000 Received: by outflank-mailman (input) for mailman id 894983; Mon, 24 Feb 2025 09:18:34 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmUbi-0003pb-0z for xen-devel@lists.xenproject.org; Mon, 24 Feb 2025 09:18:34 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20603.outbound.protection.outlook.com [2a01:111:f403:260d::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 51519fdb-f290-11ef-9aae-95dc52dad729; Mon, 24 Feb 2025 10:18:32 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8859.eurprd03.prod.outlook.com (2603:10a6:20b:56f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Mon, 24 Feb 2025 09:18:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%3]) with mapi id 15.20.8466.016; Mon, 24 Feb 2025 09:18:26 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 51519fdb-f290-11ef-9aae-95dc52dad729 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uujkxZsQBRQQYdsW2Y2bSDOHsia/kvSQscV8b3xpkIlKWi7EuIdY91yF+kUPnJFRFA+t9yoMQux38E5FxMFMLv1jPOD6AvLnSSulzZbwXDbAq4lPKP8PdTOB23N1IzdYZKJsnBRvC4/+zoN1deAxun02Kf7GA6iNPiTZ9A1eqJTKZqqy/FYLsSxsKfTPas7tGlAA62BtzXJ90RIUzOvMtrYG3MsETdWaHJs1ATCmGF6Zhu5FQPfUHM90z3ahmmfnzM6V3UnnTMlCkLwxYQt/XCa51oA6DaQFQ65PliBLRgnK6ayzULuUxvDaqTB8p6nReUm4EckB/ToFKK7DgHSBhw== 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=Vr+RJzxbtfbXzyJxjIhXUxDesNrZnM6NrhcX9itp9QE=; b=adJlmy+Ws/8IV8BVcvqmF4RSWFadYIcsTrKauqDnWjN914xiPI8Fz+9c4lwo5I8UXa3vGoWApWQ9cMhI5gyQJOcpAIaRDSRqpG2fS/j1B/eUbrDv7J/CHiehxPReA2PGxMc6/BMbOvBXfgxbiwNuHcXb3cM3zC7W/14n7qjuVaz3le9scbIFeJ6kEceq13rMeJLg6qc3Ogticm0a9vPCQrfgN8lo9qnZUGaNkgfu8GKSKSb5xpxL6reixCvFd2tYTMuUW+MHZ3IfQcIbHyPICovztGmQ7jhVGDqCKfEnax0UYhPATJR437KtVMKkndj969/U5NWsVr0B+FuUzfG1lg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Vr+RJzxbtfbXzyJxjIhXUxDesNrZnM6NrhcX9itp9QE=; b=vZxwfzJ9ldhKUbwODe0jtpOlPi/I1B/3waN8j7XJORiu1Y2JSePh8MH/RNA60T1CaUgsaknboowJHv9yK2X+b90p47U0Vm9MCOWwgFwFilDJs4KIdr3u/JagZHjNewHDQmL5Lzx5o+onbHKQXS1lGjEMWXTvPxCJm3QIPu/2o7w4vMN7v2OpFFXaTCQIQLLH8y1ILbN7Zh1UsDooUj9kGSSUFTAS2qqxxLURctxksysAvbZtzDjO1ut9xQkLzWLP2cGtSL6pJDxFXYxe9DLtxT4B7sdmGlOzXqOcqtsdc2N48nmwRfWZFFMWkOmTC7AmkzJjnWpZEqD1Nj42j2lkBg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Volodymyr Babchuk , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH 7/7] xen/arm: rcar4: program ATU to accesses to all functions Thread-Topic: [PATCH 7/7] xen/arm: rcar4: program ATU to accesses to all functions Thread-Index: AQHbhp0PHs93+Pzdu0q8aV6A0xlD/w== Date: Mon, 24 Feb 2025 09:18:26 +0000 Message-ID: <571bf109b9db5b826eb814da603ac194e82981d4.1740382735.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8859:EE_ x-ms-office365-filtering-correlation-id: a67f55e3-d105-4e99-298d-08dd54b431fa 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: =?iso-8859-1?q?5e5E2ZMffzEyDiy3N7MvQhnkNA?= =?iso-8859-1?q?aS+EbwZaqATffZpZLeqOEOZduYav0fosYEELaZRBpF/yh7zG60aZZ77r1zwS?= =?iso-8859-1?q?OcXHH5lyDVkAHtqSz9kKKOddiGud4nU6syyJe8koEo6nbm64WC5Pm9lUeiKT?= =?iso-8859-1?q?qjMCAoC1bQnVbt+kKPPQUBevGi6ZxCeS3w6V3BCcczERDa/rj4wfyYJg3hzj?= =?iso-8859-1?q?tbprJyA1xpO273zwxd2hvOhjFCRRdJO7m8toIq9x34sIwgZge8Mk9lMHq6Cj?= =?iso-8859-1?q?0QGRstwjJkXufEC+qCNDBbjUDm1Iw9ScxSALA2aXwevFu4kHVxWbQGVOqdQG?= =?iso-8859-1?q?dLqrCBpTlcKUsimSnCqbP7E2yHd2QLtO53pJXT649cPCOkaXj0l4PUNOL7Va?= =?iso-8859-1?q?GMcEWPb0S32TvRpQHDXya+caMIFHKCrD3K+EZq6E6YrfrERLj/hNlmBpL4Kf?= =?iso-8859-1?q?c3TG/+KsS+fCihhGqcaEOg+21aJVcUmvXDt4J3sbJ8wN3WD3GjNsPg3KfeMu?= =?iso-8859-1?q?d3RZ5FlxOMcIu2ZPAz4rEbeHKmKQcgW2gbjPHa3hx2DIa2ZOnTPLSHfe3wHD?= =?iso-8859-1?q?HwJD0jb8hcTao3y7d/jAkeXDn6kSzieJxUdY0dtcDWUqo1MxfrQMvMzUiNcY?= =?iso-8859-1?q?E00mLgxDeG1XF6up3UctmBAENZr7xOI6uF3aTS0o6wb9e+CtGN2IpuZ+KYfl?= =?iso-8859-1?q?M01NSyCvjB3c6DxslmTqfFVeqm2Ib3ZVg9O2f7kQe64y1/t2do+bWy92IzsX?= =?iso-8859-1?q?zvi7ABfLVbjf4yxhx/4vwrkgBGF05hMR+Izjtlozhl+t03AFNOyXFnJmrRDv?= =?iso-8859-1?q?lh64SeEubE7WgOJlQPMBgTruw81NcMZurKerN82N6Bshe7hxg/Ffxgd03mkZ?= =?iso-8859-1?q?kLsBeKgqtMUZlfJpcP6LjRJvAyNObVLAMciuA2W+cBJuyVgBv4YJPvrnW8AO?= =?iso-8859-1?q?cYqm86PFPrrR/iOb6JO6B+qGxACwDsqn4A/NHgdGrlc5Ybc4MbadaJIDBniD?= =?iso-8859-1?q?Co2BWST/PJWJ4zXEimY3P0eFPmusTXaCSVXyUXa+zoAu0kUxI7B6d4I3ihvq?= =?iso-8859-1?q?3gUSolLE9GSqHfXaZARQzbuEak7Yw5AxLQoKC1FDcoGSoivzfiD4ITiFfDKp?= =?iso-8859-1?q?AdWJtThWK6EtURdut1eiieL0a5jS3cQqb97T0pgiIDqZbtZqHG9WpXb1fFk8?= =?iso-8859-1?q?Ig9tjzQ9Ujnr02QHbdYsXNfNFg5MF0OGWSAgi9RdfLSluIRWPk4w5zIDcZIB?= =?iso-8859-1?q?1DFwjYTrW1N/yuqFX7cUVOqF/kH4BG6Q0X9VDgP6i61/CZlVkBBRRUYsHLd6?= =?iso-8859-1?q?Q+YDBTZxTa/W4pyXEGesPVD4t9FSWwtoS7c4HhX5XBZMk0uT2z8vZbWsUCiU?= =?iso-8859-1?q?G85REsmY0FgjR8d+tAEka3HkvK6dfLB3yrZD0R4mHr4tWGcO+1f6dApxDVQn?= =?iso-8859-1?q?qO41IGQacF4kzQfpkDgzUVpsR+IfU0dfW5PLxzaK9XryA6aAtjW8EEy3PlVt?= =?iso-8859-1?q?wvFo4q?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.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: =?iso-8859-1?q?vJfieua+yIAt3Jb8mKIWi4B?= =?iso-8859-1?q?ePGbOE+9Y8H5C3piVoQ6bGu1OMz6hABBOTl67ksTT7SjaCSmPbF9fND/MxyM?= =?iso-8859-1?q?24zpY+1rVFUNaIxWw6B+OU2V6jeMom0ww3TR253V7BXjPKSPtK6hu5+7HWgN?= =?iso-8859-1?q?BP3NS2Re4yxIoCJBjT+LcuL0qS9VdJKyqOU22fOHBBlY+815fdfQAsWEUDKo?= =?iso-8859-1?q?Ie3biwBWdE6W63NgnIU8BDFCHPh0+LsS0Tl+UY4nhR1enBEwj6iZyQHNDYoB?= =?iso-8859-1?q?dJxRdADgSdToQgdHVuNAmWM//9ejuGGbY/kGsN+R+w1zxT9MY2HGIOaD7n3U?= =?iso-8859-1?q?ZO1Ne1TEspx8pjtHke7ShOrvnk5nSrnv6irIb/qUPpJBHe6V4enzXbqwESIh?= =?iso-8859-1?q?he7GxfPmZWhffUMSlXk8Lhc83dJSzAEf5BaxCyY1Vay6tqFYn63aeJvO5oUg?= =?iso-8859-1?q?7icrYDU2SSmnlxm+/vUS6nwqjdxeqc6IJAZx4T3l8HdSPF4JeK35Z+39gKjD?= =?iso-8859-1?q?RfmLNQxMNipQwsNk2FPXs4gqaH0Tu4Uwkq7eo7V6RpO+daYvgisZb2jHxb2W?= =?iso-8859-1?q?WLNbzLQfy1wHLaS4GQSuhZuUPwvwLIvNCcGp0usawNl84bkmQYeYDXNcBlgZ?= =?iso-8859-1?q?lBTdfqxl3r+2ib8kF2RJn73aS4oTEnp36srYYqk9/aLA5ag3TXVbvt9hjySv?= =?iso-8859-1?q?44mylistKKuuARwwX9QIMR5ZqPDf52I7l9y3hlShnfL6n9y3P/EvbvsAepUl?= =?iso-8859-1?q?m/fl+wNV6zZ8vrIpf6pmJGK5K6TRGFulTzeqkltJjALZU7SjlS4oZIRxNoTg?= =?iso-8859-1?q?lRtlJE+yDYbKRPzZ6oYB8ilph63KqTz/3ff3mHlM/n7IT0w3/9en0PBCWq5f?= =?iso-8859-1?q?YsRHZNP9AA42CvUf8gcqoukmm+xCyIjlYfuLWQz9L9K0mpceAnjY88QTQfNF?= =?iso-8859-1?q?6MTNeubGpQQOw4wY3CpX5Zh8ysf8lLjPwqo5fAMJVL5NrdxQUGXzl4ZNNs/h?= =?iso-8859-1?q?LHQYFztf+/f7bP4EMGC8UNJqrPlbv8t4ijaycGUmr4hYIo/0owtnjqw+DKLw?= =?iso-8859-1?q?CmMG+wHLt+p9Phny/SlVjs8AbcHcCISKz9gqRMr+3sIQ2UTgclDla/S6lRlJ?= =?iso-8859-1?q?scCgvr9hnM4Fock58EDIgh2BtR1ND8UIbL/RA1lbMInvoiJ1kx55eTXZ1eam?= =?iso-8859-1?q?6HB3hNmgfTM58/WDfO9ek3e9PSeE6adof12hcUWUDa9LNj9DpfpFnZmRg2BS?= =?iso-8859-1?q?60aYqWcmQqhbgrZloM7Rj7y/K/MQc2z3gMi8JGVD9B7IGfSN6iKKsp9WvwoD?= =?iso-8859-1?q?dscXOrq3FllTahc91ZVjxLK5DjIB9zNEx4c9nyZgvaflEUw0LwIYr4Z8H7m8?= =?iso-8859-1?q?+USDEz1ffi9sry1eVbeu9c4TD6T/3GEaA7SLlsxnokT9rV+fqVS90TsylUUD?= =?iso-8859-1?q?z0FgLGAFDQORS3krsUjMDtxBWldF1ynQpfgbRXqTscVgCcC7anjAnYiwd0NA?= =?iso-8859-1?q?q3Cg+CyYAMyrWw3poHsC0yONHhQaAMLO7aUfdKcyZj40lA9I43+HlvED4Oei?= =?iso-8859-1?q?WyCCw8SIN9em2nBeSGJYX4+9LrnIV/mqaGupb8GZcA7Ar7fo+Vev57ff93gf?= =?iso-8859-1?q?1q9oN7GJMDyNOjKIsE/fKgWuNHIiMWN9O1WtZJw=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a67f55e3-d105-4e99-298d-08dd54b431fa X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 09:18:26.5516 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: CHbOzhl4BlMIFZ6Movog7nirrxrOzE0V0E1Uvuc9ZmVZPIiYXg7QWFc1JaelD69IfVRdY5ChV0D/g/HMojuGEA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8859 From: Volodymyr Babchuk According to ATU documentation, bits [18:16] of accessed memory address correspond to a function number. This is somewhat similar to ECAM, but with huge holes between regions. We can use this to minimize number of ATU re-programmings: configure ATU to access BDF with F=0 and adjust memory address with function number. Taking into account the previous patch, that optimizes ATU reprogramming by skipping call to __dw_pcie_prog_outbound_atu() if we already configured pci_address, we can be sure that accesses to all functions of one device will not trigger ATU reprogramming at all. Signed-off-by: Volodymyr Babchuk Signed-off-by: Mykyta Poturai --- xen/arch/arm/pci/pci-host-rcar4.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/pci/pci-host-rcar4.c b/xen/arch/arm/pci/pci-host-rcar4.c index 3e3e073b09..5d006e4897 100644 --- a/xen/arch/arm/pci/pci-host-rcar4.c +++ b/xen/arch/arm/pci/pci-host-rcar4.c @@ -385,7 +385,7 @@ static void __iomem *rcar4_child_map_bus(struct pci_host_bridge *bridge, uint32_t busdev; busdev = PCIE_ATU_BUS(sbdf.bus) | PCIE_ATU_DEV(PCI_SLOT(sbdf.devfn)) | - PCIE_ATU_FUNC(PCI_FUNC(sbdf.devfn)); + PCIE_ATU_FUNC(0); /* FIXME: Parent is the root bus, so use PCIE_ATU_TYPE_CFG0. */ dw_pcie_prog_outbound_atu(bridge, PCIE_ATU_REGION_INDEX1, @@ -393,7 +393,7 @@ static void __iomem *rcar4_child_map_bus(struct pci_host_bridge *bridge, bridge->child_cfg->phys_addr, busdev, bridge->child_cfg->size); - return bridge->child_cfg->win + where; + return bridge->child_cfg->win + ((uint32_t)sbdf.fn << 16) + where; } static int rcar4_child_config_read(struct pci_host_bridge *bridge,