From nobody Thu Apr 2 17:18:18 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774619753; cv=pass; d=zohomail.com; s=zohoarc; b=eYMgN+pItiW0i0iw7PBZD8w2X8OA+XBJ15TlB03rb+ZioMrNe8JJi9eiStL+MllrHeypTCOcbcUwZjTCUPkUWC+3MUhSKP8K6/BqZ/MjH28b3Y36qKqsL6rOtr6PPBeyG/5FT5NmykZUR6mdMs2dPVO6xG6UnEqnGXoHmLh6UGc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774619753; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=X/hgFVUOUeEuadjSINl4NrZjcrgOSJUIv+5SLjSBL9c=; b=ZvEx1xOkAfJZ3peNDTSKLITtnLBlJ31srSpBr/VwpWXdM0RwgqzCHRzIsYt/YzFI6lSQ1BiBL/MgnDkEBFOejCOlpUsi+EyUBbfBgG6/CV1uUx7A9ahtrquRoMweaMU+JMtKuAS40acLO23gk07XbH4dQxCfYAiw1rj9aHFaLVM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774619753023119.2745135483566; Fri, 27 Mar 2026 06:55:53 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1265694.1556516 (Exim 4.92) (envelope-from ) id 1w67eu-0005d1-Vo; Fri, 27 Mar 2026 13:55:32 +0000 Received: by outflank-mailman (output) from mailman id 1265694.1556516; Fri, 27 Mar 2026 13:55: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 1w67eu-0005cr-SC; Fri, 27 Mar 2026 13:55:32 +0000 Received: by outflank-mailman (input) for mailman id 1265694; Fri, 27 Mar 2026 13:55:32 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w67eu-0005bl-4n for xen-devel@lists.xenproject.org; Fri, 27 Mar 2026 13:55:32 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w67et-008VBd-Gw for xen-devel@lists.xenproject.org; Fri, 27 Mar 2026 14:55:31 +0100 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c68c51-e002-0a2a0a5209dd-0a2a4503b4f6-6 for ; Fri, 27 Mar 2026 14:55:31 +0100 Received: from [40.93.196.8] (helo=SA9PR02CU001.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c68c51-1947-0a2a45030019-285dc408d95a-3 for ; Fri, 27 Mar 2026 14:55:31 +0100 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by DM6PR03MB5370.namprd03.prod.outlook.com (2603:10b6:5:249::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 13:55:28 +0000 Received: from CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343]) by CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343%4]) with mapi id 15.20.9745.024; Fri, 27 Mar 2026 13:55:28 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T3n4JlecW2F3zyvlT/XP74gJIAK8atAb0lHE9Y+gNVjX9sSyIjlGX0igSCvU4a92s1OmTFi6q9uA7xXrqjPzjPBdd30oU2boGi6rZU7rU1XaMjV3aI78En64UvWpZm63/6uBWFLYKFqFakiV4gBZEhGRqvjWjrBn1v1a7RD8/enGvAxOmA5aylGKik+LtZEK0Mirrx4FKQCJy0bQbmg2te2q7Wcha1DHjKgAWeUIKWYH2jdayaxgyipttcIm9OD0sTx9gc4q0hnP6w8muDFD1AWd165DU3I+q9xtlBzbnVhdF0etgKYhTHzizfKake6dUAto5lkmY/UKyq4dMKFNpA== 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=X/hgFVUOUeEuadjSINl4NrZjcrgOSJUIv+5SLjSBL9c=; b=ezVvAKDYe9BJShI1yE3lnRVBvr+AIMLGjzbEEspbLbI/NyLVu+jHARH5ub6pV1hqTbdJX210nGyRvcicB3ZvDkHfNVyaBRdmGXZ099/Z++eNdE1bRt8Pl00uGUt5tb2U+t8BxyCx+KLkzcYkH/NwCQzeSpGlRuDrMGgEHYlgJSHt9VaiklJWFPgp93vLukUWmaHkJ3hFyJSMpe1RM3PXbMV1kvICd7MGJmi+oqVxIKqmXL8Sd2Gawjbg/qLTkS3c5XlhKL69PwmllK/uBzV2M89+j16tosUICHQqZL4ym7VB8ijYK8O/VW/UsaNR062l1csHipnkD8hgUh6pjOFLNA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X/hgFVUOUeEuadjSINl4NrZjcrgOSJUIv+5SLjSBL9c=; b=SBD+BtjOBGOHAMSpx0MbGZUwS3RzEAy5K2OQh7ODqIuyUUy0AECF2ZneqXMO6BCLMY1G7n/kLlu8lzPE4YEVXZAqyYCp+20KfvZ9w6T4AkBiKjtitIKeYUAQcDnLPwcwkkAGlyOrQUcQ9RfweNKgfdhfEXFJ7C9dO4amWpXIx8I= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Roger Pau Monne , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , Stefano Stabellini Subject: [PATCH v2 3/3] xen/uart: switch ns16550 to use pci_sbdf_t Date: Fri, 27 Mar 2026 14:54:20 +0100 Message-ID: <20260327135420.7246-4-roger.pau@citrix.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327135420.7246-1-roger.pau@citrix.com> References: <20260327135420.7246-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA3P292CA0056.ESPP292.PROD.OUTLOOK.COM (2603:10a6:250:48::14) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|DM6PR03MB5370:EE_ X-MS-Office365-Filtering-Correlation-Id: 869f2f13-ce33-46d1-ce29-08de8c0880cb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: 7Krex+70GzXMm1jfwAUdiiIyWYecHmYnbOI6sgYd7yayzmnSoFuV3H4EVi0AJDhspiVBkOQkk29/Ln1cLEmpJp8VHp6KgrKsKF8Bdm10IVJILOzGV6Uof+OT+Io0LYaRScXX0d2TsFulAhvjfB34LSnMSQR4wE79xOgAIjqmzm5UO8tJKS4M7d6y5Zmy7/GlYKtSgYKeQKbYdRj9eW9fXThxfOdWE1I16WOzlf/Vt64EtdPlh6NZMsN5Kuook/KePISXEnfmx5x4na+i1Hm1Ku5YYuG3bP7O/AaTskbhyNrO1hSNorz9fxDdFqjUU/tP1hd9XLP3ExRz1eKDyZCaDhWJamfllHd/sKEui2m8Xk9Nmk8WKbU2TSOpng/O8ww0W56ZRASMzds3Mo4/iYZHLb9vrWjYzRvVvNCG9gLD2HNp9PJLJZ9d3Qz8+dPAUxvp/0ps8dRsCWmqnjAOaOjSbF+szGZ4i9OeNqVSD9zdYoRBsmyB8jJr4Zy/dn2jdqxRD8zKpryJWcI2C9/hNi8F6yPIVQkn2Y3UW2sa42BfqVFRneCVUMYy1CLF/THz9F+jlcSkkuSfD65/cYucqpUHshLWsLj42T1PviLHFGyySVjplwL0c8MXnRNR8wabcmaWNl4AISZ849FQoFzrfwthllAKVrPcgrhXXJTF5b9+3+BXfzG8hSWdIEgNbVNw3JB0XCa8O+4FyboR69+C498sZZdOmzeiD0rm4Gjw+7So8D8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH7PR03MB7860.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cWVVK1ZkWndLYkhEQzc3b2Nac1ZvZVNrNmwrdWZqU3hjc3dsNDdvODIzOWJO?= =?utf-8?B?YTM3aFM4QzdJV2poWlV1SlRWdVJXZmp0Z0lkWGlIdkJFZ2x3eE5WUytXZlJ3?= =?utf-8?B?VVJpZ3UwbXJJNDIxTVprUGZuUlZ0OW50enc5ZExEYmRQcXhVL2wyZnEydVVJ?= =?utf-8?B?bWVONzdiSGpBdWRnVWhMQnphZ3JvQUw2MGNmemgzMFFXODlpazdsZXNxTUx1?= =?utf-8?B?TzlsaHEyR3dKcmxRQjBKVUJ4YW4xWmpyVkhtRVduc0hlVkxNRWFFbU9ueWNa?= =?utf-8?B?RThSUThxNy9jV1FBdGdXODIrTmtCVzhOQXRsUDVVS0ZvUStHRTNtZklLOC9v?= =?utf-8?B?MHA1YmdHTTFlUitLTERXc0NyMmtWVkdEczFHT2E0eUhLemZ1ZnlWeE1xMFBV?= =?utf-8?B?U0NKNUFwVzM3dkZoZDZSNUNpWDZVcWE0d1o1VU5zM0FaOWRBb3VETkY2SkpS?= =?utf-8?B?Q0MvN1A3eHhhSHNTTnUxMzV6MGtnMXErbGZtRFZyV2hqRDZCVVcrNFNDWVNJ?= =?utf-8?B?b2JMYnRDVGZlb2ZwNVNmYXhDbjFsV29mdVdnaXphb2k5d3F4a3JGL2tkdFRJ?= =?utf-8?B?a0xZV2dObysrY0tjaXdyK1Jjc20wQVphSGt0dVJJeUp4cVhnN0NCdjFtdmN0?= =?utf-8?B?ZVBKNHZJYUFqbE1aSUJZMWljUmR3QVBwbjBHKzlYYm9lV1RLR3V3RU1JZng4?= =?utf-8?B?UXZiZnJGTTNnT0pyaUpSYlFvUkU3SldINnlVUzNlNFVubUVndm42UGJsRUpJ?= =?utf-8?B?K2FMNlBrblZ4WmFaM1p4aHdCdEh2UXZiaDd1OElXOFM5bUNzSkxCVld0UWlD?= =?utf-8?B?SmdiOGNnMUtvQUhVRkprYXdFUzlSSWoxOFpOWE5iclpsRFhzRGRLaDlwVlZn?= =?utf-8?B?ODJVU1AyVytMMyswVVpubXFQd1cxaER2dTEzT2FwY3RzYjJpakxnanRCNm9p?= =?utf-8?B?akdEd1VYSnlQc2ZqdDgxMzRWaTJ6aldWTmR1clhwaWphVmJ4djBvRXBHSW1a?= =?utf-8?B?Qk53Uitob29kTHMrZndwQzZ2QXdFUkxCb2hNOHpYbEJHTk9QcCtKYllQV2N3?= =?utf-8?B?ZEJFK0lORG1TWUNmNHRtUmVteXV2M2N6RnUzekMxTm8rdzRvempaMzBtK0V6?= =?utf-8?B?TDhmaGJzYlVJL2Rtb1cvdzVudDV6alZ5bi9JWEdlS2pRWVRjVFVSM0Fmdm5u?= =?utf-8?B?L1krTmV5aHB6VGhoTXdnZExUeTVuYUVVUGczZWdyU0laUnRkUitRc0tCTTU0?= =?utf-8?B?VlNxcjhFb1kxLy9zRXcyRHEvbEpGSVYwZVdKQWdHM1pORldOOTdEaXhnM0RU?= =?utf-8?B?TWJXUnJ1K2lOWWxTVG1HYS8yY3VYbWt2TTF0dTZieWY4YURTTm1KUTBUSlk5?= =?utf-8?B?Mmk3MjF4TVNQS1hxeEZzMCtmaU93NzR3SUpvTSs2TGZ2NDVQcEZoS0orSnQy?= =?utf-8?B?aDYyci80bEFEMENRMG50ZXd0MnhUWVlhdlkrWEtvVGJMS2ovTWpOZGtzSmJj?= =?utf-8?B?M0VyNkh5b04rdkd3K3RHV2tMWjNVRzZ3OHdkWXJBTHpzZmtMS3ZwV1NvVyt2?= =?utf-8?B?RlpLaWI0UXIvRkFGQjloTU1zaVZqcTgvQzZZYXFNOEljb0gvWkNXbFlVMkpN?= =?utf-8?B?RDhuQmZDZWpOYm1DL0JrSkpyWFphYTl1WmoyUmJVVVRabDdPNGFpS0FVVkcv?= =?utf-8?B?cVZuZGdoZFYzUVBrZWFGdGRpNFV4ZmlqcnRoVXZKUzgrU1FZeTFnTmdlTWFJ?= =?utf-8?B?ZEd2Vk55b2NTQXZCb2dnMXNjQ1lyc1BVeTZhL1NuUXNvaVpJMThyY3BtMndY?= =?utf-8?B?VTNXNFBZbkx4RFdBVStMMTJvKzk1MVlHRFhHMDNaZUN2S083Z1YzL2RaRFJr?= =?utf-8?B?dW91YWhxRVF3cFZSTzJlOXdVU2ZCQ1B5QmsyMk9XbHVFcndjSlNtQjYvZHF4?= =?utf-8?B?UHFHZ29tN0JCRndlRXlSUzlVakpRN01MblYxNmUzVGdnSWhwRm5xZlJhOURx?= =?utf-8?B?dnJEMXVhcWpVakxublJoMWN4TmY3dkdqNklIZ1I4d1N3ZGtIbi9vcDBMNlpV?= =?utf-8?B?cHMvVmxJclZWektjb1QrSVh3RlN3dnRyT2FBZzNPaEFvYVFUS0xsQytHUUJH?= =?utf-8?B?SGRVSDl4aGI5Z1ZCb1lhOFJLZ1Vqd2dPTXQ4VEJOdnNpK3JoTEhUSTR0TmhU?= =?utf-8?B?UTkxeXZ6VUYyVllJK1dXWGRYcVN3dnd6WjNMN0lzRW9tSHpsVDVtNTBNcEtS?= =?utf-8?B?QnhQL1BwVFFnTFpaVWtNdXRBZU9ldTY2K0EvQ0xvUTZGdHJtR3dZaGptRWVw?= =?utf-8?B?Rk9GUDc2cGJhd3dWUDNhWWYyd0NGRWE4YllFR0VDYngvU1lBNUxzZz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 869f2f13-ce33-46d1-ce29-08de8c0880cb X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 13:55:28.3085 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MKobCBEQCTVNgKuKGkrgN7vZrsKAmqoARcAwDT74ch4fNTgP8FjvR8BFrtvMAJJOvYs1U1STkTk+fH4bsrOCUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB5370 X-purgate-ID: tlsNG-33051d/1774619731-EB88A72C-36E9BB14/0/0 X-purgate-type: clean X-purgate-size: 13801 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774619754658154100 No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Andrew Cooper --- Not committing this ahead of the bugfixes, as to make those easier to backport. --- xen/drivers/char/ns16550.c | 133 ++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 75 deletions(-) diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index d16e447c0e76..0d780d82f918 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -67,8 +67,8 @@ static struct ns16550 { /* PCI card parameters. */ bool pb_bdf_enable; /* if =3D1, pb-bdf effective, port behind brid= ge */ bool ps_bdf_enable; /* if =3D1, ps_bdf effective, port on pci card= */ - unsigned int pb_bdf[3]; /* pci bridge BDF */ - unsigned int ps_bdf[3]; /* pci serial port BDF */ + pci_sbdf_t pci_bridge; + pci_sbdf_t pci_device; u32 bar; u32 bar64; u16 cr; @@ -288,31 +288,22 @@ static void pci_serial_early_init(struct ns16550 *uar= t) if ( !uart->ps_bdf_enable ) return; =20 - cmd =3D pci_conf_read16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), PCI_COMMAND); + cmd =3D pci_conf_read16(uart->pci_device, PCI_COMMAND); =20 if ( uart->io_base >=3D 0x10000 ) { - pci_conf_write16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), - PCI_COMMAND, cmd | PCI_COMMAND_MEMORY); + pci_conf_write16(uart->pci_device, PCI_COMMAND, cmd | PCI_COMMAND_= MEMORY); return; } =20 if ( uart->pb_bdf_enable ) - pci_conf_write16(PCI_SBDF(0, uart->pb_bdf[0], uart->pb_bdf[1], - uart->pb_bdf[2]), - PCI_IO_BASE, + pci_conf_write16(uart->pci_bridge, PCI_IO_BASE, (uart->io_base & 0xF000) | ((uart->io_base & 0xF000) >> 8)); =20 - pci_conf_write32(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), - PCI_BASE_ADDRESS_0, + pci_conf_write32(uart->pci_device, PCI_BASE_ADDRESS_0, uart->io_base | PCI_BASE_ADDRESS_SPACE_IO); - pci_conf_write16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), - PCI_COMMAND, cmd | PCI_COMMAND_IO); + pci_conf_write16(uart->pci_device, PCI_COMMAND, cmd | PCI_COMMAND_IO); #endif } =20 @@ -452,17 +443,16 @@ static void __init cf_check ns16550_init_postirq(stru= ct serial_port *port) PFN_UP(uart->io_base + uart->io_size) - 1)= ) printk(XENLOG_INFO "Error while adding MMIO range of device to= mmio_ro_ranges\n"); =20 - if ( pci_ro_device(0, uart->ps_bdf[0], - PCI_DEVFN(uart->ps_bdf[1], uart->ps_bdf[2])) ) - printk(XENLOG_INFO "Could not mark config space of %02x:%02x.%= u read-only.\n", - uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]); + if ( pci_ro_device(uart->pci_device.seg, uart->pci_device.bus, + uart->pci_device.devfn) ) + printk(XENLOG_INFO + "Could not mark config space of %pp read-only.\n", + &uart->pci_device); =20 if ( uart->msi ) { struct msi_info msi =3D { - .sbdf =3D PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), + .sbdf =3D uart->pci_device, .irq =3D uart->irq, .entry_nr =3D 1 }; @@ -504,9 +494,8 @@ static void __init cf_check ns16550_init_postirq(struct= serial_port *port) } =20 if ( rc ) - printk(XENLOG_WARNING - "MSI setup failed (%d) for %02x:%02x.%o\n", - rc, uart->ps_bdf[0], uart->ps_bdf[1], uart->ps_bdf[= 2]); + printk(XENLOG_WARNING "MSI setup failed (%d) for %pp\n", + rc, &uart->pci_device); } } #endif @@ -533,8 +522,7 @@ static void cf_check ns16550_suspend(struct serial_port= *port) =20 #ifdef NS16550_PCI if ( uart->bar ) - uart->cr =3D pci_conf_read16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_= bdf[1], - uart->ps_bdf[2]), PCI_COMMAND); + uart->cr =3D pci_conf_read16(uart->pci_device, PCI_COMMAND); #endif } =20 @@ -545,19 +533,15 @@ static void _ns16550_resume(struct serial_port *port) =20 if ( uart->bar ) { - pci_conf_write32(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), + pci_conf_write32(uart->pci_device, PCI_BASE_ADDRESS_0 + uart->bar_idx*4, uart->bar); =20 /* If 64 bit BAR, write higher 32 bits to BAR+4 */ if ( uart->bar & PCI_BASE_ADDRESS_MEM_TYPE_64 ) - pci_conf_write32(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), + pci_conf_write32(uart->pci_device, PCI_BASE_ADDRESS_0 + (uart->bar_idx+1)*4, uart->ba= r64); =20 - pci_conf_write16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], - uart->ps_bdf[2]), - PCI_COMMAND, uart->cr); + pci_conf_write16(uart->pci_device, PCI_COMMAND, uart->cr); } #endif =20 @@ -1217,13 +1201,12 @@ pci_uart_config(struct ns16550 *uart, bool skip_amt= , unsigned int idx) uint32_t bar, bar_64 =3D 0, len, len_64; u64 size =3D 0; const struct ns16550_config_param *param =3D uart_param; + pci_sbdf_t sbdf =3D PCI_SBDF(0, b, d, f); =20 - nextf =3D (f || (pci_conf_read16(PCI_SBDF(0, b, d, f), - PCI_HEADER_TYPE) & + nextf =3D (f || (pci_conf_read16(sbdf, PCI_HEADER_TYPE) & 0x80)) ? f + 1 : 8; =20 - switch ( pci_conf_read16(PCI_SBDF(0, b, d, f), - PCI_CLASS_DEVICE) ) + switch ( pci_conf_read16(sbdf, PCI_CLASS_DEVICE) ) { case 0x0700: /* single port serial */ case 0x0702: /* multi port serial */ @@ -1240,10 +1223,8 @@ pci_uart_config(struct ns16550 *uart, bool skip_amt,= unsigned int idx) /* Check for params in uart_config lookup table */ for ( i =3D 0; i < ARRAY_SIZE(uart_config); i++ ) { - u16 vendor =3D pci_conf_read16(PCI_SBDF(0, b, d, f), - PCI_VENDOR_ID); - u16 device =3D pci_conf_read16(PCI_SBDF(0, b, d, f), - PCI_DEVICE_ID); + u16 vendor =3D pci_conf_read16(sbdf, PCI_VENDOR_ID); + u16 device =3D pci_conf_read16(sbdf, PCI_DEVICE_ID); =20 if ( uart_config[i].vendor_id =3D=3D vendor && uart_config[i].dev_id =3D=3D device ) @@ -1266,29 +1247,26 @@ pci_uart_config(struct ns16550 *uart, bool skip_amt= , unsigned int idx) } =20 uart->io_base =3D 0; - bar =3D pci_conf_read32(PCI_SBDF(0, b, d, f), - PCI_BASE_ADDRESS_0 + bar_idx * 4); + bar =3D pci_conf_read32(sbdf, PCI_BASE_ADDRESS_0 + bar_idx= * 4); =20 /* MMIO based */ if ( param->mmio && !(bar & PCI_BASE_ADDRESS_SPACE_IO) ) { - pci_conf_write32(PCI_SBDF(0, b, d, f), - PCI_BASE_ADDRESS_0 + bar_idx*4, ~0u); - len =3D pci_conf_read32(PCI_SBDF(0, b, d, f), + pci_conf_write32(sbdf, PCI_BASE_ADDRESS_0 + bar_idx*4,= ~0u); + len =3D pci_conf_read32(sbdf, PCI_BASE_ADDRESS_0 + bar_idx * 4= ); - pci_conf_write32(PCI_SBDF(0, b, d, f), - PCI_BASE_ADDRESS_0 + bar_idx*4, bar); + pci_conf_write32(sbdf, PCI_BASE_ADDRESS_0 + bar_idx*4,= bar); =20 /* Handle 64 bit BAR if found */ if ( bar & PCI_BASE_ADDRESS_MEM_TYPE_64 ) { - bar_64 =3D pci_conf_read32(PCI_SBDF(0, b, d, f), + bar_64 =3D pci_conf_read32(sbdf, PCI_BASE_ADDRESS_0 + (bar_idx + 1) *= 4); - pci_conf_write32(PCI_SBDF(0, b, d, f), + pci_conf_write32(sbdf, PCI_BASE_ADDRESS_0 + (bar_idx+1)*4, ~0= u); - len_64 =3D pci_conf_read32(PCI_SBDF(0, b, d, f), + len_64 =3D pci_conf_read32(sbdf, PCI_BASE_ADDRESS_0 + (bar_idx + 1) * 4= ); - pci_conf_write32(PCI_SBDF(0, b, d, f), + pci_conf_write32(sbdf, PCI_BASE_ADDRESS_0 + (bar_idx+1)*4, ba= r_64); size =3D ((u64)~0 << 32) | PCI_BASE_ADDRESS_MEM_M= ASK; size &=3D ((u64)len_64 << 32) | len; @@ -1302,12 +1280,9 @@ pci_uart_config(struct ns16550 *uart, bool skip_amt,= unsigned int idx) /* IO based */ else if ( !param->mmio && (bar & PCI_BASE_ADDRESS_SPACE_IO= ) ) { - pci_conf_write32(PCI_SBDF(0, b, d, f), - PCI_BASE_ADDRESS_0 + bar_idx*4, ~0u); - len =3D pci_conf_read32(PCI_SBDF(0, b, d, f), - PCI_BASE_ADDRESS_0); - pci_conf_write32(PCI_SBDF(0, b, d, f), - PCI_BASE_ADDRESS_0 + bar_idx*4, bar); + pci_conf_write32(sbdf, PCI_BASE_ADDRESS_0 + bar_idx*4,= ~0u); + len =3D pci_conf_read32(sbdf, PCI_BASE_ADDRESS_0); + pci_conf_write32(sbdf, PCI_BASE_ADDRESS_0 + bar_idx*4,= bar); size =3D len & PCI_BASE_ADDRESS_IO_MASK; =20 uart->io_base =3D bar & ~PCI_BASE_ADDRESS_SPACE_IO; @@ -1341,18 +1316,14 @@ pci_uart_config(struct ns16550 *uart, bool skip_amt= , unsigned int idx) uart->fifo_size =3D param->fifo_size; =20 uart->ps_bdf_enable =3D true; - uart->ps_bdf[0] =3D b; - uart->ps_bdf[1] =3D d; - uart->ps_bdf[2] =3D f; + uart->pci_device =3D sbdf; uart->bar_idx =3D bar_idx; uart->bar =3D bar; uart->bar64 =3D bar_64; uart->io_size =3D max(8U << param->reg_shift, param->uart_offset); - uart->irq =3D pci_conf_read8(PCI_SBDF(0, b, d, f), - PCI_INTERRUPT_PIN) ? - pci_conf_read8(PCI_SBDF(0, b, d, f), - PCI_INTERRUPT_LINE) : 0; + uart->irq =3D pci_conf_read8(sbdf, PCI_INTERRUPT_PIN) ? + pci_conf_read8(sbdf, PCI_INTERRUPT_LINE) : 0; =20 #ifdef CONFIG_X86 /* @@ -1591,18 +1562,22 @@ static bool __init parse_positional(struct ns16550 = *uart, char **str) #ifdef CONFIG_HAS_PCI if ( *conf =3D=3D ',' && *++conf !=3D ',' ) { - conf =3D parse_pci(conf, NULL, &uart->ps_bdf[0], - &uart->ps_bdf[1], &uart->ps_bdf[2]); + unsigned int b, d, f; + + conf =3D parse_pci(conf, NULL, &b, &d, &f); if ( !conf ) PARSE_ERR_RET("Bad port PCI coordinates"); + uart->pci_device =3D PCI_SBDF(0, b, d, f); uart->ps_bdf_enable =3D true; } =20 if ( *conf =3D=3D ',' && *++conf !=3D ',' ) { - if ( !parse_pci(conf, NULL, &uart->pb_bdf[0], - &uart->pb_bdf[1], &uart->pb_bdf[2]) ) + unsigned int b, d, f; + + if ( !parse_pci(conf, NULL, &b, &d, &f) ) PARSE_ERR_RET("Bad bridge PCI coordinates"); + uart->pci_bridge =3D PCI_SBDF(0, b, d, f); uart->pb_bdf_enable =3D true; } #endif @@ -1685,18 +1660,26 @@ static bool __init parse_namevalue_pairs(char *str,= struct ns16550 *uart) break; =20 case port_bdf: - if ( !parse_pci(param_value, NULL, &uart->ps_bdf[0], - &uart->ps_bdf[1], &uart->ps_bdf[2]) ) + { + unsigned int b, d, f; + + if ( !parse_pci(param_value, NULL, &b, &d, &f) ) PARSE_ERR_RET("Bad port PCI coordinates\n"); + uart->pci_device =3D PCI_SBDF(0, b, d, f); uart->ps_bdf_enable =3D true; break; + } =20 case bridge_bdf: - if ( !parse_pci(param_value, NULL, &uart->pb_bdf[0], - &uart->pb_bdf[1], &uart->pb_bdf[2]) ) + { + unsigned int b, d, f; + + if ( !parse_pci(param_value, NULL, &b, &d, &f) ) PARSE_ERR_RET("Bad bridge PCI coordinates\n"); + uart->pci_bridge =3D PCI_SBDF(0, b, d, f); uart->pb_bdf_enable =3D true; break; + } #endif =20 default: --=20 2.51.0