From nobody Fri Apr 3 01:29:47 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=1774450744; cv=pass; d=zohomail.com; s=zohoarc; b=AIyf7fJQIFvRQg/sJYVQ138trzoSCM3ebYT0Nd/ijioD1XX4ZYkFz2sfvIHstjnF0jpSlDSh93r7z64EL22GfmgLqh86qzffQiSUtNCmbx2v7fWVOmrDtyH4bcX+hXBYw8fr5404K/PbEZmN5WLzQHV55GYK8g5gbYwDtLX9uLc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774450744; 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=LCCbnci/1/Eb/HhtKG9s1fldlqwHd88/UxiGZ/Ck8Yw=; b=KtoNxG0VQOMgouGwsg/bhEt5j3ZI/A/dPBjv2eA/HxT06BuWd70JQXi7V+9BRi7a6b6kAxoCRDybzsZh7HRXSy0PMQ3bF/koXoVYgb93YHB1Y82p2GvLjECtPwM/hcwEUc9V6jNcDdvAedNxQjFFkhY6gIgCEKAXm8nMD//0rg8= 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 1774450744736933.6718712424215; Wed, 25 Mar 2026 07:59:04 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1262510.1554989 (Exim 4.92) (envelope-from ) id 1w5Ph0-0003IJ-Fr; Wed, 25 Mar 2026 14:58:46 +0000 Received: by outflank-mailman (output) from mailman id 1262510.1554989; Wed, 25 Mar 2026 14:58:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Ph0-0003I3-9r; Wed, 25 Mar 2026 14:58:46 +0000 Received: by outflank-mailman (input) for mailman id 1262510; Wed, 25 Mar 2026 14:58:45 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Pgz-0003Hm-Cd for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 14:58:45 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Pgy-00H94M-Oi for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 15:58:44 +0100 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3f81e-5cb7-0a2a0a5109dd-0a2a450b8c88-18 for ; Wed, 25 Mar 2026 15:58:44 +0100 Received: from [52.101.52.57] (helo=BL2PR02CU003.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3f823-ef63-0a2a450b0019-3465343945fa-3 for ; Wed, 25 Mar 2026 15:58:44 +0100 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by SA1PR03MB8032.namprd03.prod.outlook.com (2603:10b6:806:45a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Wed, 25 Mar 2026 14:58:14 +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.019; Wed, 25 Mar 2026 14:58:39 +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=F3FBUMdoo8NBUo4GSWACakMgNySExrJ8s4sC23Zok81KfYJgakc/sbUu2wZZGzS5F1FyRHp5BA49JPGQdJjdcWVt0SyZW58lvnAgUiNYffCpSh3XzuYBKyGHW/ixxUaXEBrOLMk1kMERlGstSZGhnzZbrCHLqc/EfN7lXUBb3uoI2U8uLwM29t+dkY8fU8fLQVOoa0SLOSylBxCNJ9Me84S0aggLQiQk1VK/6VhPwHRg3t7mA2zS2tpYVubvs7U0cNjrGR9DEusAZbuYUAqREgQ2+4NC42Pi69zetu0CmPdueiJe01lQEoOiXdcaM5gkn1h7NMbkdOsLxWdE/kB70w== 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=LCCbnci/1/Eb/HhtKG9s1fldlqwHd88/UxiGZ/Ck8Yw=; b=W0uRWdl+sENRJYCNhastCSV7r2y6niXWxQ1ihxdxk8fD3fksYgr9BrTxriAg1y87ALp31hiEELQXyEaycEGqwq3luliZRNb8fm5OBrpigWFEc/4u9R8DTb0VrMFGUvqXQQgDodPo8IDfcMI9z0dFMOhR3Pk/cb9WL2HcM5P3Km9Ait11VDcyKs8mIfTqmH13cZ4pHnhtArBW3ZdnzG0NBneMN1QKEJYYJpNiLna43k8JoztNAgfd4Kn8vTcvJgpgLvzkZSy96BcVhsppZS0GD+M2Nn26/VN0RjrVuN80kBVLJ18Dz0iuTdjN7zGwVIYht0+eg1kjBbPvY24Ja8DchA== 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=LCCbnci/1/Eb/HhtKG9s1fldlqwHd88/UxiGZ/Ck8Yw=; b=rDlcdElYr0BXQSVxVzIWxju6ika5OYpM0Ot1drHOXN9Vp5on5CN8LpfXotfxQHR/vn67o9TK1idq9jUh4HojpDr0tSz5K9YSY45URkrqORmFKSMwG0hFi0RSvXXKA0Ljmu0uSLTZK1hKPYpLkyLaaA84XtOvKmrvCdqcUIZpWvA= 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 1/4] xen/uart: be more careful with changes to the PCI command register Date: Wed, 25 Mar 2026 15:58:21 +0100 Message-ID: <20260325145824.31601-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260325145824.31601-1-roger.pau@citrix.com> References: <20260325145824.31601-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA4P292CA0007.ESPP292.PROD.OUTLOOK.COM (2603:10a6:250:2d::12) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|SA1PR03MB8032:EE_ X-MS-Office365-Filtering-Correlation-Id: 28a28ed3-829a-438b-568e-08de8a7effb4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: Cj92Xa800JsgpTwsbQH5CXLk+hlt8XkOTPXROhjzBzr9O274BJvormJQEAaBfUP6ThxwE4NO77LVkFLM2Ip9bzKQpjozF+/EpNEi0jIUzEVkcB7dpfD0wHefbtNdCQoW7Np83IhZX5T1hk8WGScxkWCzkk7NHxth0aM8Z4ZcVQNGktcfb7ix2czWflvMvLHtmirmptVI92HpUqS3nLdWm4n6BV13CiJ40KNKQDdn5430gtjw5JDFurZL8GPwzVoUQ1K/uNHL+bf06+x4jhyHSyl3ISMFe9FbmlJW3yfF4+NHMud4H/U4w0jkGCNlWj29WN/xkGCmFq91vUKKcz/rSITf5l3itg1wv67lOBD4slVisTVYUUSE8yLGlbAdxYOW9DCNNJE+wKZq7IQf/kfoSmc8RLQOJ7Atyw74cyfTot3j8xdLqvJ8Kr1CYNmvYu4o9ImK21DV2O4mogIiwkvzVGDLkmZBn5Kep+qz0LvkAaeX/2axyUnK+3ipkhCx2OWLPjEQ1tIEurFaOUPZRWDYvtoM1tMg4M2kyPMlgGpqBUPstVotAUfHgjBz2geKbXNxi8A041HuDVy8bjFBL/i7go+OLJ+XIE/3YDgT+Za1++eV4fMPLiIuC5ss1FP4kbxuqdE5MF7xrXxCvM1zn0SUaRNdlhDVnba2yTxLk7SSI9shZJQJqT5fCfFr064ijbfwfvB87UTDo5LuhnxhFb/dY7B9YJP7vr07p+MGxH26i9k= 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)(366016)(376014)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QU96eW4wOWljYkNrQW9VRXpFVkJQeG1MYTY2N2l5dEYwK0s0MmpSUzZkbnhx?= =?utf-8?B?aS93SXlLTy9memdZSFRZM0M5MGROMDdIWjV2RVlkOUFTVVBoTHAvUitrbFdP?= =?utf-8?B?SWJnbS9xTUU5OUtjU2RmQmVNY2dLTDE0OUp1enJuR1crU2VwMDBEKzYrdloy?= =?utf-8?B?WG1SY1Q0TEM1cmUvN0hHUHBOWDJmL2MycE05WTY5Yk9aQkVhbmdRaXhCRmdo?= =?utf-8?B?dVZ0cXlUNk5pNlNvZTQ0KzEwNEh0R2pHcTloU2xwRVV4ZXdPbHJnVEFsL1VM?= =?utf-8?B?MFE1NkJQUXViR0Z2ZEpCWUVDemJDUFo4Y0lBNGlNUlRPbHg0UWJtNkFOdTFS?= =?utf-8?B?OEhjVHB6VzhQSUQrWGJFTUdVcnBVMzBkelpocjZmb2REYkM2cGJieWlMaUlm?= =?utf-8?B?U2dEeEtxTU4weFo2UUtHWk1kMjc5UHZ6azdVQW5vaEhtRXJNNUtQczdSUVFj?= =?utf-8?B?Nk80Vnd3WUpRWUcwV0dncUp6WWY2WTFNd3pnU1MydGNrUjhKNnNJZ2N6dGdD?= =?utf-8?B?RTJ3emd1OHpQVE1pdVZiaUpodEdQamdDRVBWdDN3a1ZOSWFGdjJRZzNUSTZj?= =?utf-8?B?Z1NwMklRejF2RTEva2F5aTNZV256NDlrNFE5YzB3UlkyRzNzSmZveC9QR1FR?= =?utf-8?B?djJCTXMyaEZuYWJlSHZBaWhnaTgxZWhkeWc4Z21vMHlkSEFSNm1mS2U5djNl?= =?utf-8?B?NDkyU2F6WTFQdUw1S1E1Mk81ekI4RGh3R0RxNGM0aFY0RmczMlhpYWxiWWh6?= =?utf-8?B?a2E4YkMrR0hVZENnKzNVRVZ0YmNRbFpyT1EzTG8xVGpZcGJrYS9Uc2lZU21L?= =?utf-8?B?dzJKWjRDQWtBd1dXNjdzdm9QV3NjSnNhWmIvZXB6TkZjVGZpeW9XODlUSk5S?= =?utf-8?B?c0pxV0VUbnpWbEtBNHUxejQyclA3UkczOVplUkF4UWp6bFYrL0czWVFXZGpq?= =?utf-8?B?ZVRyd1crTnhVNWk0MGZHSXBrUUMvRHBCelNIcjY1ZGVXKy9BQ0tKelgrdmd2?= =?utf-8?B?Z0lDQTI2QkJWS0ZkVDlTckRCcWNhOGlabTZydGs5bXNNM2k2cERXSytuOXdL?= =?utf-8?B?eDAyeXd6c3ltTnBpUmRxdHQxaDFJdEZwTkNQNDdxVDNnNEdVeGNkSVlNRnI5?= =?utf-8?B?bUtScTNZRGFSRGdSanE5eW04Uk5qWDh6YkJFWVpFSnlQK2pqazQyNkFtTjZI?= =?utf-8?B?SHhnUDdEWG5EVXE5Y3Q5Rmk2YXpzVWdvMzZZR21CMTFySng2SDJZSDI5azA4?= =?utf-8?B?QXltZjQ3OFhNVnVnTWJwbitIQTdBYWNPdlV1SDVUVnRFc21hVjB2bFB1eHp2?= =?utf-8?B?UzNYOVNkRkJRaVYyM1VhZndPSEpvUXRJK20vTFVweVNDeEYycGtJclFzUkFB?= =?utf-8?B?U1kvWUJaUWZveENnYzhEMFZUajNNeFQ2ZVc2U1R2QzZ5ZjE5SVVWUTYweHNk?= =?utf-8?B?OTlqNHNzVkN6N05LdzZVY0NwVzVhVjhsZjBjRlF4YjhDWThScEdKK2lpNXZK?= =?utf-8?B?N0ZZZVZLSTV0am1WRU5zVkNaNDMzOE5YdUFxMjJlVWh5ZC8xY1hQLytFRHpu?= =?utf-8?B?dVNobWJCSkJKbDJqdi9YWHNGb2YrMkRKQWNPNjNYS2ZwS0VHSHppbTJsVk12?= =?utf-8?B?NHF2cm15SEp5clpJUkhDTysyd05sdFB1c1Z6ZmpIWktzWENhY0Z4RnNyczJH?= =?utf-8?B?MW5TS3RwcFZpWHFTd3FBZjRQYWNWejZTdll5VTRnMWxzbzdrMExJbUFkUWRL?= =?utf-8?B?Q2thUmhjMm1IV0kvUHZ3UVdqV2piSGVzTkk2VDAvT2ZJcjFzQkJBQk1Qd09s?= =?utf-8?B?QTJlSGY2dmpoajVRS2pUcnMvaGU3bmZNSSttdGNjeWlnU1lnYjlwNndFTUFQ?= =?utf-8?B?U3NMSW1neTdBQXN3bnpkc3ZSTlFDZm9kMFF4TmZFKzJHSjVWUFNGWVdOS3or?= =?utf-8?B?KzlCeXVDb2FNMHU4Q09NZ0xvVGRYeG5pZDE1NU4rek8yc1FrY1AweWVId25h?= =?utf-8?B?aCt0UWlMSE9mUzV3WDZPbWQzd0RMaDg5ZGJkU3RQNDZZM3VySnhaeWZYVHFL?= =?utf-8?B?RkhqMmNpY25lb21nMXF2NTVvRTVCRVhTNFBkR214dGY0eGpWSjNQenZMUERU?= =?utf-8?B?aHQwQ2pJZnV3eWVqYnRLNmRTdE1lNDUyZ0lneUNQWHdwVFUvdVhucEZHWEhD?= =?utf-8?B?THZjVUZ5SXlqRnkwNHdwMzhiaExpbG4yRVdadzFlNmdhQnJiaFZyL0JtTTdz?= =?utf-8?B?UjkxVGRrZktVWExsZmxqOEx1ZlNSamFLQkFWelV0Vk13eXpyV0h6N3k2cnZM?= =?utf-8?B?R2dtYmU0VGMrdGNrNlFaTE91bmtJR1VtTDI1WHhOOVpkc0RRdGVoZz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28a28ed3-829a-438b-568e-08de8a7effb4 X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2026 14:58:39.5644 (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: x8q3wji2hdxGdFcDvo21gZnk2bCum+XScQBXw1z9Hq5zpJxsOziilaOVpBCsflj3y+5lXjZDDT39fbVMdMGcMA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR03MB8032 X-purgate-ID: tlsNG-42698a/1774450724-A1003112-0154B624/0/0 X-purgate-type: clean X-purgate-size: 2062 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774450746780158500 Read the existing PCI command register and only add the required bits to it, as to avoid clearing bits that might be possibly set by the firmware already. This fixes serial output when booting with `com1=3Ddevice=3Damt` on a system using an "Alder Lake AMT SOL Redirection" PCI device (Vendor ID 0x8086 and Device ID 0x51e3). That device has both IO and memory decoding enabled by the firmware, and disabling memory decoding causes the serial to stop working (even when the serial register BAR is in the IO space). Fixes: f2ff5d6628b3 ("ns16550: enable PCI serial card usage") Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Andrew Cooper Reviewed-by: Jan Beulich --- xen/drivers/char/ns16550.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index df7fff7f81df..41d6380367ca 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -283,11 +283,17 @@ static int cf_check ns16550_getc(struct serial_port *= port, char *pc) static void pci_serial_early_init(struct ns16550 *uart) { #ifdef NS16550_PCI + uint16_t cmd =3D 0; + + if ( uart->ps_bdf_enable ) + cmd =3D pci_conf_read16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[= 1], + uart->ps_bdf[2]), PCI_COMMAND); + if ( uart->bar && 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, PCI_COMMAND_MEMORY); + PCI_COMMAND, cmd | PCI_COMMAND_MEMORY); return; } =20 @@ -307,7 +313,7 @@ static void pci_serial_early_init(struct ns16550 *uart) 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, PCI_COMMAND_IO); + PCI_COMMAND, cmd | PCI_COMMAND_IO); #endif } =20 --=20 2.51.0 From nobody Fri Apr 3 01:29:47 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=1774450745; cv=pass; d=zohomail.com; s=zohoarc; b=nIYS4Uqb80Y7wIWWI3/xiuLYKdeIiHwp2TOHNkqurR8EDtmmUrA6kiMx0VHi38WHr5zSAyB3/xaR/UrrEcCeDp654YAFdOgA+xct5kUoZzeZtHFDXs5so841zEebfF066ruHd0BpCd4mZo7iC8aKv1oXqd5o9hZU4wPtr/Cfg9k= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774450745; 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=JEgJ8Wd5qW4VAjfsP1HrFdECze8KglxkMRJ4l8ASAB0=; b=Bifzxk7UN3xto82RIPgNdxGBC0/+4kgY28nqYhijX/9dGBnRLXMuvvvZgNmsNOEXSudqgEvPmmECXP6VUa7RTlO1ufggRx7KGfH//nKezmAgzeqhcDVAEERK9Kb54NEwuie+bgzkHxQJwg2Qw9u+4AdPVIrAzqKtISQ6jjz6Nbs= 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 1774450745144248.66016391890594; Wed, 25 Mar 2026 07:59:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1262511.1554997 (Exim 4.92) (envelope-from ) id 1w5Ph1-0003Vz-L6; Wed, 25 Mar 2026 14:58:47 +0000 Received: by outflank-mailman (output) from mailman id 1262511.1554997; Wed, 25 Mar 2026 14:58:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Ph1-0003Vq-H1; Wed, 25 Mar 2026 14:58:47 +0000 Received: by outflank-mailman (input) for mailman id 1262511; Wed, 25 Mar 2026 14:58:46 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Ph0-0003Hw-35 for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 14:58:46 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Pgz-00H94M-FS for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 15:58:45 +0100 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3f81e-5cb7-0a2a0a5109dd-0a2a450b8c88-20 for ; Wed, 25 Mar 2026 15:58:45 +0100 Received: from [52.101.52.57] (helo=BL2PR02CU003.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3f823-ef63-0a2a450b0019-3465343945fa-4 for ; Wed, 25 Mar 2026 15:58:45 +0100 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by SA1PR03MB8032.namprd03.prod.outlook.com (2603:10b6:806:45a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Wed, 25 Mar 2026 14:58:18 +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.019; Wed, 25 Mar 2026 14:58:42 +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=yrOZvG87EWg2+nb8D2wy4UXJeKw94N+vnlnZHBiIX1qvPOQyozCmu+itxY8/EukLpJ/w+Ida/YFBlZW4hBXLF1ag1+5lGHBbyWG50G+0xHjylMyNp1adyGFWH1Js+Drm5dlDtVzVhhmGeLcF6zZ+d1uZ/iEKwncRi1j3CzR7O7XvKiS0lEYnDgUuYRaXTuMXpWgU17RfXywLuFc4QCrbDLNriAJZ34FBeP0K4/G4PyHcTrkCtmUZNr+VWs5oU+JDht7DfeaaHd02l/oSEJgyrN6xr3Sj8/dHOvBuQWtCaPnouPl4veEg/QT7glYXcep7EfkH2yTPsrffgBfTz6Rg7Q== 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=JEgJ8Wd5qW4VAjfsP1HrFdECze8KglxkMRJ4l8ASAB0=; b=JYz8VkFiJeUV7GhVv/mkweX8N1FBLB4kBUnKy0nk9S/9p644R/W0BxA9Tse5SP3v26M2ZnfwMHjRIc6iE2tnj0mhNNJRBjPVJz9dmfUPNPcC75TZHFF0ZnPNgHJzUWsQYgoSYQOK2W2mctmTFaV654uZLJ3LdLBuWOx8OJZOZnv8CxlU/86cq9nA22oaDIRmAj8Op4kkfLcP8gv66ntwW6v3qDRIfucHvUETwMw+odzSDdff9Lu05st1XbsP+uBLGg1DwpOOyDdeU6xXE5dX3TpipN4DzKdS55JoWQSGNJM21KJE62wANKnx6ZyTFc9a97i91XXXmyt8sZ8/8XiW+w== 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=JEgJ8Wd5qW4VAjfsP1HrFdECze8KglxkMRJ4l8ASAB0=; b=pAnYjCspYhtEyK+cRQ8dyslOlEPqx7OB/58KLBcYQTWNS47W0yYhlahiDbhtxTefg+exHf/OyiQ4g73edQmBA+5wGjX2Reu30d3bUdHnAGJsIHXTTeo+ZuFa1nYLG2rtTClnobNMNnqdhEB4x6fKZKGX4GzXDfEZUr7TBMUXav8= 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 2/4] xen/uart: switch ns16550 to use pci_sbdf_t Date: Wed, 25 Mar 2026 15:58:22 +0100 Message-ID: <20260325145824.31601-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260325145824.31601-1-roger.pau@citrix.com> References: <20260325145824.31601-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA3P292CA0046.ESPP292.PROD.OUTLOOK.COM (2603:10a6:250:48::16) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|SA1PR03MB8032:EE_ X-MS-Office365-Filtering-Correlation-Id: d60645bd-1fb3-42cd-946f-08de8a7f01ab X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: 1QC4Z8XYk+zkmknKj+WDxIUxvTy6QewrXQw7dZyr4rUMn8B0Imd3zLS92xf4cDz7Tro1siCeHHYP4JvXX7b15o15Oyo9bKqZjX019caYJ0nzwSg02ag64/GN2hJgOVW0cbWdHx9dbmVsYHaa1Pf9hTJfTJc7+AIKyId5NjOMveBvoZGzVCAE9oajNMclK0R5kwKvGYgJ8s4YFA2mPDh0O5lNxqewqleCkhY8VJbvsn7YKf/CzY1AHqdXUAzPhJiq/vlW1gLVR5uyHhxKbUX8Mekm5HXqOzKQkemYnkdJjhG8FnRnbUfMeimfw611yN/M+AdUcoIGndyOLgR5PoT4O0ACHAd44tuk9SyvUszws6VQ7H4F2whJXQ0SQGvvz6YMnAE04YO0FhbbLtnCxfHmZprFQ/fEpWhPnqaMfh63S4JpGEA3ws/SciBEJTe4kMX+K7YalmaB2aIuUeTYNatw7LiA0jRCLH9stQHDpEDZ/8B6evagZGE6pT0CPPC4A3U8d0i7SQM+IMjX+kHv0UCgifQuiSubZVl3vA5wKNkr4FsdbAlYJBibOLKp8jemjNKca5WrZvy5jrw50E9IGjdIZN+8QV34xwQFLwf0T62TO/cBKc88qdKsMzltUAbwizL4xRfMc4kJKj7HzmqMnP10m/pP29wfRb/glkTFW0wvsf2gCuNwn/mb42jrFmJWhv58ejP+7nx3ykuR+kqMpmg3ao+uvzK8gEe/JbN6S/xGgAE= 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)(366016)(376014)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?M0JxWVd5UkJlTlJYOXIyZXFwNmJGU0l4U2xZbGY3Vk03Q3pqSUlLNm9WT3dN?= =?utf-8?B?dDNhSWpLYTQxNDFaWEpIMVJnTzJ4RWU3aUw5Q0x0b2x1S0FUM3plRjZEbDRj?= =?utf-8?B?WGdhVExCYi8xaE4zTXdHTDVJMGZPOUkydldRNDl6aVFvaDUxU0U2U01ZT09m?= =?utf-8?B?ZXpIZWtwNjZ0TEJZOVN2RFV1c09nVjBGL2lOeDNzQVdpZUtoYVd4bHdSSnls?= =?utf-8?B?YlZCU3ZNRzlUbHVZTlNhTkdOdTZuOENXSUlJUVF6cG4vN3RHR3FEUzU2WmV3?= =?utf-8?B?a1JmRi9YbXR1WENJUXcyODkwdDRWRmE4MXMzdCtURU8vLzJTV2JYQjkyMmxY?= =?utf-8?B?RmNrL05FWEpJUm41WVEzaE1DSkJjWVZMMXE4eDVVR1hKNERuUi9qVUQwYUhS?= =?utf-8?B?bTRZRmZDaVhoQktPUHV5cDlzVmdZMjJTd280L214cUpDNmU2dWp4YmxUTkVF?= =?utf-8?B?cUplc08xbWUxZTZIZVFsVmc2T3IyZU5SMC9WSzZta0M2MHJ5aDJXRGdweUlU?= =?utf-8?B?VGRrZjdUNloyZWZKUnFVaFZpSis2ZUJBTDQvK25xRml4K1A5VDdCajBSZDc5?= =?utf-8?B?bysySzFHay81UlJXTXNMUEFjdzgwZ2hLTXZacXRRMTd1V3Nzc0Q3cWlrZDR4?= =?utf-8?B?N0JNWTNNUHIvbnV5R3hzeXhKcjI0cUw5VFpoUnp5cTdyOEJkVkZNYmM2UC9V?= =?utf-8?B?ckJjcW1ZYzNZR1ZsK0t5R3V1ZVcwMkE3MGU3VXlncXBYV3FuZVFyVXhQTTZC?= =?utf-8?B?ci8wRXF4T05ST3FuNjJNTW1Tb2tERlZieVpFMldQSmt1WHZDZzE5RFk5aGNH?= =?utf-8?B?ZHFvVnVTUFZQV1FoSkF6RmNReHhVclBzMmlzQzZJUTR4RzYyNFl4SlBaR2xH?= =?utf-8?B?VzJwUjFRaHZTaTcxTmVtNkEveVNWMUhJT01TcnR0am5BeU1vM0xGbTI1KzB4?= =?utf-8?B?dTRqOGU1em1IckNhU01jQTZaanptQWxXMDJtQWEvNC8rV2l0Y2pZV1ZlSU1l?= =?utf-8?B?eXFvY21LVk9wUUhyeDdnTEN0Zld5T1dCMUVpa1FHYTdvalgvZUt2UytWRGZp?= =?utf-8?B?YXZLUzJsY25EUGx5aTZaU3RqSWZzRFZwZDZPYkJHL0pldUJaMFVTaHVtenZz?= =?utf-8?B?eDlxWFNOMWs5bFpYVUZxRU1qbkpoNmVGZnk4U1Irbll2ZmppOUR2bFJqb3Iy?= =?utf-8?B?N3BXRzRsalpxMExJMTRvTnpZVDlxQjZ0UTIvKzJGWUVaMzZaVHAzbEgrZVZR?= =?utf-8?B?MEthc1Z3ZGJxU3BYaC9Bd0pQeEF6RGUrTVpSMmJwNGp1VDkzR2NWSWI3Rmp5?= =?utf-8?B?enEvNmJmZE5BUHQ2L0R5NHQrWDVyTzRjY2o3T3h6ckJKOGVSam42MkdCZVFJ?= =?utf-8?B?M29tTmpML3dFOWVrM3dNdGVDYlVWNGJFNFcrdzZSa0ZoMWhlcStlcmlFVnB0?= =?utf-8?B?YUQ1WUw3Vng3bzhlWTB2WGpJbVl0QnA2MDZvU3lONHdKVWhSLytUMDczNmtr?= =?utf-8?B?bkFqZFNQbXIzeGpNdHREaUorNnh2YUlyUElJOG5NY2kyUjB6OGpEZnFtM1pz?= =?utf-8?B?UVV0ODNXUVNFUUJodjREZ2hqNFlxUEJTU3pzR1dFY3RJSXgrV3pXcjg3YXFH?= =?utf-8?B?RVNEVEhlUEtGcTc2T1IxRmJhdUJhSEx1d1ovckVhTExlVDkySWFIcmdtUWx5?= =?utf-8?B?ZGlEcnoyYmVlbHZsK2RpUGF4aHAwWkFIUmNUaUd6d1pSaXBYUngzeENnbkN5?= =?utf-8?B?Q0h2bWpabEVoN2hxbXpGSlFlQ2hJUTF3YkpsdzVsTEY3dVNnMmFVeUkrQzdm?= =?utf-8?B?ZEJuRDc1NlFzVW5HNVdSMSsrb1llbVUxZWlzTlRZdEdtbGp2WnNPZjROWnFo?= =?utf-8?B?dm9CYzEwZFdWMWMwZGo0Y09YanVuUEIzS2E5UTBSNndSUGhXa0owSnFLZVlO?= =?utf-8?B?dm1JdTI3M25sV2Q0MlBTWGlYTWhpT0piemxoc2FkYTRIZ2dmdjhwRkJRUUdo?= =?utf-8?B?cTQ4NDdZNGNRUmpKWCs5NUd0NzNrZW5PV2RveXN2NzhQZnJ2WTcxb0h2MTRB?= =?utf-8?B?WVBWV1R3cFJlZCtLbXZCM1pzb3pvcUR0VkZCVDhXa25EMTVaaU5hZGhyY3Z2?= =?utf-8?B?NUlqMy9jcDJ4WnVWWU5NTDlndk9PVVNVRDJGcWNwdEZQVDhhQ2JQYlRvTUdJ?= =?utf-8?B?bXdDMnp4MExwSStVZGJlSTRlWHllSVJxMVdtVVR0M1I3aTQrOHVKc251WnhB?= =?utf-8?B?S21TOGJ6cnliSVduMGpiY3pHa0FUK2t2a2dsOHN0RW9taGJlQlM1SFdHQ3JQ?= =?utf-8?B?QXh4RlNLZTZTSlJjWUs1N3hrRjlBc1c1THpqdExGZUovWTVtL0p0Zz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: d60645bd-1fb3-42cd-946f-08de8a7f01ab X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2026 14:58:42.8157 (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: OKib/BomPupOiiXOtPbmkn9ZZD/ciFx4/4s0gbxWHPp8I7CQzyEmpeyLVL36ABxXfbjUuDJTWpEJarIcPhBy1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR03MB8032 X-purgate-ID: tlsNG-42698a/1774450725-BB0A9112-9A782E94/0/0 X-purgate-type: clean X-purgate-size: 13785 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774450746761158500 No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Andrew Cooper --- 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 41d6380367ca..da3b6fdf99d9 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; @@ -286,14 +286,11 @@ static void pci_serial_early_init(struct ns16550 *uar= t) uint16_t cmd =3D 0; =20 if ( uart->ps_bdf_enable ) - 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->bar && 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 @@ -301,19 +298,13 @@ static void pci_serial_early_init(struct ns16550 *uar= t) 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 @@ -453,17 +444,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 }; @@ -505,9 +495,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 @@ -534,8 +523,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 @@ -546,19 +534,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 @@ -1218,13 +1202,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 */ @@ -1241,10 +1224,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 ) @@ -1267,29 +1248,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; @@ -1303,12 +1281,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) if ( param->fifo_size ) uart->fifo_size =3D param->fifo_size; =20 - 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 @@ -1683,18 +1658,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 From nobody Fri Apr 3 01:29:47 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=1774450751; cv=pass; d=zohomail.com; s=zohoarc; b=ZIex4bGnh0HXNFuu/Gn1PakMQBHqJGPjSRQup3biSHCS3wzW2dsDCy4Xnv6kwfMdAfPbGf+QgFR9yBQMX7RjlU0WG3y2kV/RThpU0OS2/ona2APaq2IEw8+jEwrb0p3zJ0huoQ1uZL9t2QaAoAmmXrHFlw8Aa/DgfQxzaGIMgUw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774450751; 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=0HJQmWV5LXBRJiOFnmS7ItBccNC3tJXifThqLT1z2f4=; b=nEEYCPXlXFN7DPKIUoWet0tROM5z01p3OtR1xajHUm1bJ+RVkPItD8xuc/viSYc9PWQ2bLyeCP3wpiXbP8T1OyaV2p3/07lhZ391ey2wsVxv8fNgh1fJu7/4Fm5NeVvKPlQGPK8FE8Pmb+Cc6TobOedQ+nFv8toNEgNDKxER/Rw= 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 1774450751711252.49781376221426; Wed, 25 Mar 2026 07:59:11 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1262512.1555006 (Exim 4.92) (envelope-from ) id 1w5Ph7-0003pU-12; Wed, 25 Mar 2026 14:58:53 +0000 Received: by outflank-mailman (output) from mailman id 1262512.1555006; Wed, 25 Mar 2026 14:58:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Ph6-0003pF-T7; Wed, 25 Mar 2026 14:58:52 +0000 Received: by outflank-mailman (input) for mailman id 1262512; Wed, 25 Mar 2026 14:58:51 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Ph4-0003mm-UI for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 14:58:51 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Ph4-00GX2B-A4 for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 15:58:50 +0100 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3f811-bab6-0a2a0a5309dd-0a2a4507d41a-46 for ; Wed, 25 Mar 2026 15:58:50 +0100 Received: from [40.93.194.40] (helo=SN4PR0501CU005.outbound.protection.outlook.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3f828-fd74-0a2a45070019-285dc228b9de-3 for ; Wed, 25 Mar 2026 15:58:50 +0100 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by SA1PR03MB8032.namprd03.prod.outlook.com (2603:10b6:806:45a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Wed, 25 Mar 2026 14:58:21 +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.019; Wed, 25 Mar 2026 14:58:46 +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=ieuV3YtokPS0ABuZKF/6NiNMC60w3jO6TVXXDyJ7yOcYFOKzMeF7bkzE3p1A0C75Jjd5lQLzvtjYwwTV4amSxBosBnAhTfmf0oWhQAPYTtzKqeg5obsdwgF9LHWGK+7qxhTT3XwkSnRvrSqM2aQqJUxpZRn2feQ6NitgXTt315tEUn9g+omAaZCDe5b2RslgcCLf9GhkL2GxTai5SBlaIwLI07fYVjP58rS8bEXXXIJMGMus/4AoLfnAv6hzJk/zuaDC4qCoQtMy4rS9ikDBia3EoTriaFXkfVYz3JfZO9B0NE2yafFcdredkqWWneiJMGMhAjS6xmNk71THFoWNTA== 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=0HJQmWV5LXBRJiOFnmS7ItBccNC3tJXifThqLT1z2f4=; b=Z/SQHsk2JRf1VMo2/GFthJBiuHybXPX8FY1lW9AyfTZ5NuJ1t2JYPAPKDaqfJLxfaaa3owYieABzbZ8gALnL4X6+IXStifKUhXNpG3eyOipCeE9OdRZ9BIRo4w6/ELjYomY11mRKR1aG7fSzVVLfAGtnIs7OGEYaIKbMs+d396P9ThsGSm7higNnmIgtOFReK0zuGvtst4Rrp13yyV8lLlAjj7clPm5gearfYfjvnlw0c6uBoHi6rmf8BvflADuHjOkQ+hsLGECqwuV6tcZj0zUpWOKqZB9UtvoTXNRtAaXhs48mNwgA44itM/jLkTZW8kd+y6/x5dbM+cPt0Kz46g== 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=0HJQmWV5LXBRJiOFnmS7ItBccNC3tJXifThqLT1z2f4=; b=S/IBT+kADLsTiVLCvN2ri338FFRaVXWQHu8eyTala17a8MQ1r+TQ3OmMUj5fb9CEIsz4pF2yJTjk2nXU8Hsu7q+wYDfCi416c/I/ZVCpagiiq5EAOyBEmEY+tMnuZBjCgb0HU8Os3lT0gt4dQA3d7oGNH4B3lEJlBaq6ZVao/6M= 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 3/4] xen/uart: report an error if the device type is not supported Date: Wed, 25 Mar 2026 15:58:23 +0100 Message-ID: <20260325145824.31601-4-roger.pau@citrix.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260325145824.31601-1-roger.pau@citrix.com> References: <20260325145824.31601-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA2P292CA0022.ESPP292.PROD.OUTLOOK.COM (2603:10a6:250::11) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|SA1PR03MB8032:EE_ X-MS-Office365-Filtering-Correlation-Id: e827eb6a-1d12-41a7-d930-08de8a7f03dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: jgMgvq5l2jx1XL5JtOr3YkaG8hN4J0SyAItSaVOmSVwC+MTST00q01Y0y8VHiHWJmtk1AGgm01V8fYrYPetv9j30MtXfeKqWamMJ2pGcOjLlR7DyJKnYSsZyvU38pdj2ZEyfT91Kv9UQAWBUYQk/FEXNmULyNcPdY5pNhdzo8JrhYq7bWninjeNDOZqXvroxaky8we+ppTmk8Gh6zZVtjrziFOacOpMnuozV8Ey7nyJm5lk0vmWq3LPgCr/1wdw2MjQpHzsTsbDeF5jOJV3szfaYrSI+E8Flfccmo7G3p0gyg3m6oo12XwSFyn9wzXq4KzmXb/YWUvS9uIwXb749pyP6dr1IjTlqRqzAdT/SiUd0m0BvqRQy6QLFURQXOVGYyJeRScSclRney/3SArmoWdr94oieXFLpeiK0FlFsYHcDrphN4v5dj+10GBtdWhR9cgHn94jYcgz9Q4VDy9cIYVFVURWPO8WJ27d5Eg3VH4g5YOh1RWyPUFnUgO5Jaa5Dz08jv7f2dgJywhTRixqrIgDZ5zgTlTbGqNtnW/oWhO+05VwVfJ1Bk7I7sNjR0CiOaojGIJcD1SckaFCVv6O1deSpIy8x9WRlFKR4KLQQMbSHgo68jrnJrcnMGHa8htoVG0YFFILKdQ048XvGviHwkIRw7Xsqbu2jHNNl1v2x1uyegmvg1Ix9G64MeBb0+x6opWXV35K2zVBpBNb4lGdwc+4XZIDaA+BlsiTUgvIAOwo= 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)(366016)(376014)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a3VrZHNrSjcreUNCUExBYnQrV3E0SS9MZzA2QlgvcXIvVGNhYU5wd3FwNTRX?= =?utf-8?B?SjZBNHJ3Z1FKd1Qya3cvOFFtTHFNNC9qYkMzQmRYbEJ4SDVWRVBIcEhSNnpp?= =?utf-8?B?QmdhK2NETXpDa01xL0NycytGSWZXVkd2eURkcFRTcTJTbzd5NHh2bG4vUkM2?= =?utf-8?B?cEdUM3ZJSmJHT3pkVDJ0TEFkR0kzRXJMWlJzTUhkRkRWOUFobDByaWVIT0hV?= =?utf-8?B?dGw1TmpmbThFWHpuMjhxdk1FZGo3RFJJQ1NBaU1nRFRRV2t3bHNjSjNGc0RK?= =?utf-8?B?Vno4MkI4cUdTNEZHYXVPM0tza1VJRzU0N3RpQkxxc01aUUV6QWxleGhFWUhy?= =?utf-8?B?K0pHdFA5ZmxkSHI0WERlR1puM0w0cC91TFZxYnEzUHRIMmJKRXV1aGJ5Nmw4?= =?utf-8?B?MjFaZUFrN3pWSFlwN2RVejdJRFBUdW1wUDk1cDduelNua1lXM1RLZkU1Vm9r?= =?utf-8?B?UjVaeEJrdlJiNnhkSVQxamI3RER0M3JGNzErUkwra1JVWjZGMnBpUzRxaEta?= =?utf-8?B?UjNXbTk2UmFvd09OSTJHQ25hZTVCL2dvQnZvS2c1SUpkWWxxdGM1ZHNlZVNP?= =?utf-8?B?WTY4aE40cG5mUTZDUWRqcTFKdTErazIyR1FUQVJsalhnb0I5ZklTN1QyOXJo?= =?utf-8?B?cDNhM09pcTR4ZWszckFaRU9PQUVMYVhJUDlqaDNtOS9QaDRRcVNnbS91TWRZ?= =?utf-8?B?d3JIdlMwMGRLN3dIaGRaVkExNHJBeHVIcW0vSW1TY2tBbzU0YVRyL3lVN01Y?= =?utf-8?B?bE4zVjJWUm9pY3VJZDB4TzhkNmhRd1NRM0FHQzYwclYvazR1dmcyVTlzR1NJ?= =?utf-8?B?VGltOGl0U1ZaR0FLUlpqaThlNWkwRTdoR1dsWGRHazVKeG5uQVpNd09ZdGox?= =?utf-8?B?QkZtOFhxdWhUclo2RkRwemFicGNJd2FLNEd4cE1iSmo1cFNPTGs4WmxWT0pB?= =?utf-8?B?Tjhjd0ZQQWttV00xRjVCSDJvU2JQYm4zZzhsQlA4a0cwYjlnTUJZQ3JYVkh1?= =?utf-8?B?L0VTcFZxRi83aTl3d2NNTGUwM29pWFJ0U093blVWVXFuQS9VYkJvK2ZMOUFo?= =?utf-8?B?aFFNSUxyTnBEMElIUXQ1a05CR3REVXpQQklLdDlmUWdCc2hmSElFMEJYdFps?= =?utf-8?B?dG90bDMzQ1VPU1h5R2NVOEgrL0pVMGZoazFnYU8vcUpiM0JnRGRRQUt3YUJN?= =?utf-8?B?dEdNd1NSLzhUOFBqMUZ3dXlEc3RPa3JtT1FSM0c1NGVwalN0M2N2VVhXYU5I?= =?utf-8?B?SHU4cUJnYktPRGlObHFhN0NWNDFLcEJzUmo5cDRVZUJSTG9LeHFiOXlERDRz?= =?utf-8?B?TUczZEhDN1c1SGszOUNXb1U3c0Jsc3VndzUzNVQxTzJHSnJMWGN5QldQcEQ4?= =?utf-8?B?Q0E1dExNN3N5clRleFhYc0FwaDBDRG00b0E2TkpuQnpIdmVYbUpaWGF2NDNC?= =?utf-8?B?eGVHQm9ZR214a3ZZVzd1WXNFR25zU0xKTnV6d2pPbzcrcjlIZGNhcTY3RC9H?= =?utf-8?B?SVNqWEd5VE1lRzhucXh4bFU1Z3ZWZ3ZGNnVBQlI4VVJLak9EdjlHVXFoTFYw?= =?utf-8?B?bUtJSlI4Q2lqT3JxY0ZtKzR1NDJQcll1bE1HajVRUlZ1QjIxUHAwWUowYXc1?= =?utf-8?B?N2RzV1VMbS80Z1Y1MXlCUUl0bllvcE5xbFV1ZVQ4cUVuSXRpQzg5bFI0bWhi?= =?utf-8?B?dmo3aGthZkprUkhZNkNhMDdaYk16TjNGVTJHQ1FuWEdSbEFVbTBkMTlCdEFs?= =?utf-8?B?M1gxRVZDelh2MDN1bE53azM0NFdwU21MOVhJZURvNWJVOW8yU0V1YmN0S2Zq?= =?utf-8?B?NGN4ejRURVRWOHhCNVdXaW1Ma2pCWkJaeXpoWkJKaW90OFhjZ3NrdkQzbXdX?= =?utf-8?B?RTNxdXlLU0FQVXo4MUhldkhKVDdDd3ZvOTFrb0ZvVGZ4ZXpHditUZkFrQ01X?= =?utf-8?B?cUNlWWFwOGx1RDZBMHdIUDZqQzV2SWs3aWZ3TnU5Tng4cElBejU5a2FQSVJ4?= =?utf-8?B?Z0RzbVpsSkZQTlFIdDNjeTdWS2orcW5CZFJRVFVDMGJ0dXRZMGJFL1Uvdjg5?= =?utf-8?B?MVBFZFBsem5YL0Y4Z1dpUFdLeVFKL3RHVE9GS2FTSG45Ykd3WHFEVEl4Y3pY?= =?utf-8?B?TTZyWWVFdWY3QlMvNlFLL2wyYTgrSEQyTlRYYkdiRTVkMXd4QnA0bEZvSVp0?= =?utf-8?B?TUJQUUhuY1ZxWmhnVWlTWkVwRE1SNk5mblhiTDF0UU03cmJRUlNCS2VwUXEr?= =?utf-8?B?Qmx1RlpUa1kvallLc0RjenN5T2E5WkhmT2c0a1RkTDhRS216L2JldzhDQkF2?= =?utf-8?B?eW1NMW4xblkvSHliRFg2M3RxeWt4NmxFbU8wdDlsVkRyY25GRnowdz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: e827eb6a-1d12-41a7-d930-08de8a7f03dc X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2026 14:58:46.5378 (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: x1Pjeil8tVgIbzkgke61f+qGv1DHyRqM0T6HyDWTRAelUAgoN9J7lYUpJlVCwTXoOPpoGUKyRGy82z/laxJ/8Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR03MB8032 X-purgate-ID: tlsNG-ef75cf/1774450730-566AF303-9F04E9DC/0/0 X-purgate-type: clean X-purgate-size: 866 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774450752630158500 When using key pairs for the uart configuration (com1 and com2 command line options), report an error if the passed device=3D is not recognized instead of silently ignoring it. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Andrew Cooper --- xen/drivers/char/ns16550.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index da3b6fdf99d9..9cd3e471bfa5 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -1655,6 +1655,8 @@ static bool __init parse_namevalue_pairs(char *str, s= truct ns16550 *uart) pci_uart_config(uart, 0, uart - ns16550_com); dev_set =3D true; } + else + PARSE_ERR_RET("Unknown device type %s\n", param_value); break; =20 case port_bdf: --=20 2.51.0 From nobody Fri Apr 3 01:29:47 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=1774450753; cv=pass; d=zohomail.com; s=zohoarc; b=BXfOXNzys7wySJc16g0j4mfLo9TJTJS58wyKs1F6ShwHgyQ9jea2Hzp62Bt5I5rhzGQlqFVCd0+15Ocl8Y1K1gQdvW1dZ2EcUz2DXFTdrwrXpPM5Kw0dEF60EPTeyRdvFSYgZwdMU5tIg/O3oG53PxFy3JTZNY7F7QPeJkbOWOM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774450753; 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=psSwTiMHxfUat3/JIkx9r7muILzs13+b/MhPgdlVn7k=; b=Yn64ZJaaa6TTLIRdqGrScIAGCajOcaj9jAG2FsMnemw1Txs5ugXpXPZUhuBQeV5PA6mndCcd4jIKS+Q5IDgr56yR2Y75hVWoL7gpyzW0jrhN1sca5tnSTyBIGw1Dymr4dMgvoSzADZOgHB6rAMRNTA3WioFCjNDkgh7WtJvP2s4= 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 1774450753019475.79184314184954; Wed, 25 Mar 2026 07:59:13 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1262515.1555016 (Exim 4.92) (envelope-from ) id 1w5PhA-00047B-An; Wed, 25 Mar 2026 14:58:56 +0000 Received: by outflank-mailman (output) from mailman id 1262515.1555016; Wed, 25 Mar 2026 14:58:56 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5PhA-000471-4p; Wed, 25 Mar 2026 14:58:56 +0000 Received: by outflank-mailman (input) for mailman id 1262515; Wed, 25 Mar 2026 14:58:54 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Ph7-0003yr-Sl for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 14:58:54 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Ph7-00GX2B-8V for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 15:58:53 +0100 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3f81e-bab6-0a2a0a5309dd-0a2a450ca2c4-36 for ; Wed, 25 Mar 2026 15:58:53 +0100 Received: from [40.107.201.38] (helo=CH4PR04CU002.outbound.protection.outlook.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3f82b-f93d-0a2a450c0019-286bc9263638-3 for ; Wed, 25 Mar 2026 15:58:52 +0100 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by SA1PR03MB8032.namprd03.prod.outlook.com (2603:10b6:806:45a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Wed, 25 Mar 2026 14:58:24 +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.019; Wed, 25 Mar 2026 14:58:49 +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=CxTpgdybzIUTejkbmW1/tQr7jiS8PiFL0U97Q4uYeWrJlhYZZGeBHfZalnOI5Y3HVAB0+zuLZs2f1vGhv3BLrnbzX4TyLw4+dQhdkCstESJ+fopwaL8KIuVOUDbXrFUvrY1LAj5Y+YXpTB7yBBcWKUaAOu83WCjv42GSFbZGJyvLKhUrq8ndL6aKbOGk45uIJxabWWCwFmp3XDZdi4KkozCuUqrEHP8VZOlN0C7o/Eg73FO3waFxEUhS71mQqMWbbR3irf0yM9cJW2uXAvWj7edk1jYKqBgKSDPNYzgm7M8t6D1dbGhe1iyBHX4gT2TWvk/5lKHcrIku5QqIC6srnQ== 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=psSwTiMHxfUat3/JIkx9r7muILzs13+b/MhPgdlVn7k=; b=qpA1VTLSndzxbdwh5VlyKU6JkXJp1r/KdP8T/KtH7ltMFyRd76H0oR1+ivzhAh4yIkLRqkmJgcUE2Lv7axA2HSgvpbOekb064Pv+agOwq1timDBSPwlM+GJp9iFvH5W52ZgK3r9UVhE1K+Hsg+BAcEN4TkWpT8PiRTrU0uXcXF19Ppw6s/hzPWDit65zLhp7YNbN2e6P6jrhoQLBSuxGbqiVCiXxNkKO56g3+hqRQD4C4NSpLpp80ND1k8Dex6VJKX5YBkUMgOe+DsdyWGtZfKZY1llNcivV+Q64RRZ7tGuCbn+IJJiY4dhdrr5aRAwPxTZmNYdYcSxkFlt1Omd73Q== 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=psSwTiMHxfUat3/JIkx9r7muILzs13+b/MhPgdlVn7k=; b=xM/S7Bc9h/QDsbJUbuKYOIpjL6rp9GHT54yZNLURHAXKd+KSOnhWoMSa8kqNGk18jynh5dFU1xs199vq2ulupttWmSEjuqEvZd0DPIdwKTfnbQ9DqwjgHoRW92yu8QSo4kBG1xNWaDMwPkj5auI9vU44gIcZc9+tOZFoDGnpjZQ= 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 4/4] xen/uart: enable parsing ACPI SPCR on x86 Date: Wed, 25 Mar 2026 15:58:24 +0100 Message-ID: <20260325145824.31601-5-roger.pau@citrix.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260325145824.31601-1-roger.pau@citrix.com> References: <20260325145824.31601-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA3P292CA0068.ESPP292.PROD.OUTLOOK.COM (2603:10a6:250:49::6) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|SA1PR03MB8032:EE_ X-MS-Office365-Filtering-Correlation-Id: 242e09b4-95b9-460a-d95b-08de8a7f058e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: pWECrpdXnbhs5XNshngbPzddDPy25r6EmyRmdUSo8OXlnCJlUfP3ax827uZnbkQspd+MgXiUSXF1rNN5zrbb4azPPDk1treww7sMrNFts6PcruQ+Nmbn7pc17DpYpT0MwbzTYD4iBx2Ozqyg0J2dRqqpfkZMaTBrmOZKKj0BIRG12U8NskYP713LNBZNlLnPgCe9nKK4bqqeFFWo+ylWcDljUsVeynkXM38NlbYYWX3IprDiZXW6ULj3RUnwux+Umfu20teCVrmLFw0Oip56LdyE5lITW41wC03F8T1cwPIe+YCuG5YFahA68QARxjayoxSBmuryysPsArY2ZWAhGA1PJptmPWGS9v3GupYS8LKn3BuTjpfE+CCd3Bt1bow/8ptvdegoUIDzwO53BFRhZKwVu7wK0E0Jbkp2Kw0skThlRniK7pgkbnYAyqzq4wy/PLJA7ZS/BCrsCLicM7Lp8ntr8y5ei+qHoz3kBU9PcftEUqCk59ayMXw48DxO1OWvd+eRFPgHtowXj+VD99VP0ObdGrich7INfQJXEc8BQDNPYNpLU/vwob/nz3WJ2miKjuKOvGzB3gNMYXaXvyE2JBF9b8KRG7j0xpp7r9StdriI08d2z/fUNPsi590UtJJcxURkeKWIjyx4uxu3Dlb1vOqjXq7yeUZNAdJsIxd9Nv2Sj/Umwo2O6TAm0a+o/UWRwf7K8G5siFPfullKuNDDTVp3g8onp6Hd+d6B1OAb44U= 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)(366016)(376014)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZmRyaExsT3l3Q0ZtZzVsbnBUUTQ2S0FZU1ArS3VPQThMVDNtYklDVTV3ZU5n?= =?utf-8?B?YzcrRGhWOGNkeGdmbjV2c0IzTk5RYUZuWEVMVmhPZWZUZTBDZDN6eDhxNFpZ?= =?utf-8?B?Qk9jR1o0ZkhuVk4zNTFtbytvMUhmaE1xNmxJODFZTEMxRmxuQ2QyT08veVVp?= =?utf-8?B?ZFJKRzdyRXFZQlJ4bXlINlV3Qm5wbUFuR294cE9admdLNU02WXQ1YzA4eWVV?= =?utf-8?B?SmtGZXhLNnlBWm1DUlo5R1BZMFNYYSswU0tJUkYwdVYzMkE2V0dVaVQwNElN?= =?utf-8?B?RXViMFFYZ3RQRU5MYXVma1FKcmM5Q0hsNTQ3V1I2OUhPNmxTV2tKeVo1QUdi?= =?utf-8?B?YXo4QVh0cVVJaGgvUlZ6SjdJK2J1QndPSzBQT2l6YkRiQmF0SER2MDhlM282?= =?utf-8?B?MW4xZlRUTm5TRlpTR1pOc2k4VGZaeFRNYzh5c3c3aTRsb0FCcTVUQXVKNFBa?= =?utf-8?B?M3dWQjRLdnpCek9mamV0NGtuMWZ3MERFTzB2ZzNzUEdLbTl1Qmg5VVIzaDM2?= =?utf-8?B?S0VmeE1DSjkrSEJwdE1NcUpVb0g4SEF4TUdDRVNxa1VNRERNZWZBTVVqVFBh?= =?utf-8?B?NHRUUnFlSjdtOGFhdXBQZVh0T0RyNEVCMys5NGhpQldGM05YaFUyYStZMGVU?= =?utf-8?B?YStqOEQ4NEVpa1JuN2VxQ0dmazlaak1mSGVwWVpGOTUvd2xOWWJyRlpWc28z?= =?utf-8?B?UzNhdTV1aUJGU0JYWFhJajBuQmhRVXlEWDNCd1V4ZkQ0TFFUNFVIQ0UxS2E5?= =?utf-8?B?M0l0TWdMMndtY0syK0hUdlZza29DRnFCdmkxaG9yVzNqdi8wN2dtc1NwVm9y?= =?utf-8?B?cHJoQ3VRM3JpWUw2eXVQeUVEd0dXcGFvdXZVVWRRRzladDA1STJmbG9lazZG?= =?utf-8?B?dE16bHlWa0dSSTNlSlBQZ0d2NnpYNHZHeTlYOHdXOEg1LzhiY3UwRXhVeCtF?= =?utf-8?B?NlJ1WnBweFVZdkpFb0hvditTVWFUMEhGT1lWRC9RUTBXeTExakhSWHc0SXhs?= =?utf-8?B?VzAxMU1GYkEwWkdrWDZJOWpNSm5PcnlKVFFrd2VUUW9ibjdvK2trSjY5OFRs?= =?utf-8?B?c2pVTzBmVjJKRE9OSkwybzJvUXY5c2xSSkF1bS9vaWdYeFd1WFd0dTZheU5k?= =?utf-8?B?eTY0TUNCL2kwQS9xSVFKUkhjd0tsVzBqUVRMY3JCd1Y0am5kY0pOckV4VmxH?= =?utf-8?B?a3ZkeCtPQVZsdzJ1SGhrS0I2M1BDQzQ5MVJlYk1XblIyWWV5V2JDbFQxZHlS?= =?utf-8?B?eSthdko3UmJ3UEdnc0tLSllxVUc0UUJmaVRlenljK05xTHc0NjNYNkRjaDZk?= =?utf-8?B?NnVXK09oaXdtNWs2RmM5M1NKSkdpR0pxbitXcEVGNU5HWUpsUCtxMThZc2Fi?= =?utf-8?B?WEFmSVVvNWdadjBDNkYzaytuenNXSVc4UkpsYUpMd1Q5US94Szg2T29wbklS?= =?utf-8?B?M01SdFoxcXAwTW1kMUZTUmR4L3ptcCtpak5YYk8rREkvR2VlbENiMk9RREE1?= =?utf-8?B?bml1cXA0U1l4WEtLWGtqdDRwazltOFA0VkFZQmJybVpSc21ROFNtQnM5N1g0?= =?utf-8?B?TWR4a0Y5SEcxY3BZajE5K3dRNEJsWERjTnB4VHdqNVJmRWdYRmtKWHk1dVZK?= =?utf-8?B?YllpV1h5SW1OZm9TbzdkaVo2cFBPM1Q0MjduV3Rpd3kzUWVSUGNtbEExMUlo?= =?utf-8?B?SG85SFdaaW9qY3UyM2pDbWRIOWl4Vk1oVzJUTlhoL0laV1YvRmdCRE1MMWpW?= =?utf-8?B?OE1kaENrbmIwYnBScC80TEwwb1ZxdUdIMEw4SUN1dFhjdVZoam15K09rbU9K?= =?utf-8?B?MFgyZE9WTVJhZ3lqTkExYlJtc2NCRFJ2a2ZiYzNPRFdlZnVBQlkvdGhCODJH?= =?utf-8?B?SVRsS3BCcHM0OVpLSzAzcWJWWHduQklIOGR2RVphTjcxQkhxd1FudU81cUNF?= =?utf-8?B?WE5SRHZaVGlHQ3hDVWp3clYwb1BwTkJzVk4wSWYzYXNMOExUSXFnVHRDRnc3?= =?utf-8?B?T3dUU3Q3a0R4cWpDK25ZZk1NS3kycVRreXJtVm8vK0hoa2FYb00rWUhyc2RT?= =?utf-8?B?L2RGL1lIQW9JTEdOY3BtbTBwUjdBQ0xxazlQZ2d1aFlUSUJCREppMDY1Smcv?= =?utf-8?B?WkZkQW9KVFBvQ1Q3N1A4T2E3Tk56SlJETFBmbm1DbGRIRlNTTFZYRy94WVJR?= =?utf-8?B?Z3hDSnhUTTFZZmJkTG1uRm9oanE2b2grMmNXQ1NDL21VeGRvcldYOTdMejhS?= =?utf-8?B?TU1rcG5ZV0dvT1dKQWNYUWxscHN5Q2ZsNVJ2c2lSSm9IMVQ5UkN0VVdUVXlI?= =?utf-8?B?V3VaQThVdEd2OVhFeTFwTFRyU3Y1YWhHSFNjUnZpcllFcGt4TWpGQT09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 242e09b4-95b9-460a-d95b-08de8a7f058e X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2026 14:58:49.3472 (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: Nm+zvVcPwCbyw6kQBjFDrAp832L+UOkY2HzhOtIMem/u35kgrd/A/JPUNhJbxAHMaCkrtiHhIazPKl0wuetJeQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR03MB8032 X-purgate-ID: tlsNG-d25034/1774450733-F6EAB734-CD2B7F58/0/0 X-purgate-type: clean X-purgate-size: 18677 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774450755057154100 Introduce extra logic to allow parsing ACPI tables extra early, and use it to parse the ACPI SPCR table and obtain the serial configuration. This is gated to the "acpi" device type being set in "com1" on the Xen command line. Note that there can only be one serial device described in the SPCR, so limit it's usage to com1 exclusively for the time being. I can't test the interrupt information parsing on my system, as the interrupt is set to GSI with a value of 0xff, which is outside of the range of GSIs available on the system. I've also assumed that the interrupt being 0xff is used to signal not interrupt setup (just like the Interrupt Pin register on PCI headers). Signed-off-by: Roger Pau Monn=C3=A9 --- WIP/RFC, not sure whether there's interest in attempting to pursue this further on x86. So far the device I have is also exposed on the PCI bus aside from SPCR, so using com1=3Ddevice=3Damt also works to detect it. Posting it kind of early to know whether I should try to polish it for submission or we are happy with not having this on x86. --- docs/misc/xen-command-line.pandoc | 8 +- xen/drivers/acpi/tables/tbutils.c | 131 +++++++++++++++---- xen/drivers/char/ns16550.c | 202 +++++++++++++++++++++++------- xen/include/acpi/actables.h | 5 + xen/include/acpi/actbl2.h | 10 ++ 5 files changed, 282 insertions(+), 74 deletions(-) diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line= .pandoc index ebdca007d26b..12e1965cfb60 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -349,7 +349,7 @@ ACPI indicating none to be there. =20 ### com1 (x86) ### com2 (x86) -> `=3D [/][,[DPS][,[|pci|amt][,[|msi][,[][,[]]]]]]` +> `=3D [/][,[DPS][,[|pci|amt|acpi][,[|msi][= ,[][,[]]]]]]` =20 Both option `com1` and `com2` follow the same format. =20 @@ -379,6 +379,8 @@ Both option `com1` and `com2` follow the same format. avoiding Intel AMT devices. * `amt` indicated that Xen should scan the PCI bus for the UART, including Intel AMT devices if present. +* `acpi` indicates Xen should use ACPI information (from SPCR table) if pr= esent + to configure the serial console. This option is only supported for com1. =20 A typical setup for most situations might be `com1=3D115200,8n1` =20 @@ -403,9 +405,9 @@ The accepted name keywords for name=3Dvalue pairs are: * `clock-hz`- accepts large integers to setup UART clock frequencies. Do note - these values are multiplied by 16. * `data-bits` - integer between 5 and 8 -* `dev` - accepted values are `pci` OR `amt`. If this option +* `dev` - accepted values are `pci`, `amt` or `acpi`. If this option is used to specify if the serial device is pci-based. The io_base - cannot be specified when `dev=3Dpci` or `dev=3Damt` is used. + cannot be specified when `dev=3Dpci|amt|acpi` is used. * `io-base` - accepts integer which specified IO base port for UART regist= ers * `irq` - IRQ number to use * `parity` - accepted values are same as positional parameters diff --git a/xen/drivers/acpi/tables/tbutils.c b/xen/drivers/acpi/tables/tb= utils.c index 458989abea99..c5eb6b1fc523 100644 --- a/xen/drivers/acpi/tables/tbutils.c +++ b/xen/drivers/acpi/tables/tbutils.c @@ -341,39 +341,20 @@ acpi_tb_get_root_table_entry(u8 * table_entry, } } =20 -/*************************************************************************= ****** - * - * FUNCTION: acpi_tb_parse_root_table - * - * PARAMETERS: Rsdp - Pointer to the RSDP - * Flags - Flags - * - * RETURN: Status - * - * DESCRIPTION: This function is called to parse the Root System Descripti= on - * Table (RSDT or XSDT) - * - * NOTE: Tables are mapped (not copied) for efficiency. The FACS mu= st - * be mapped and cannot be copied because it contains the act= ual - * memory location of the ACPI Global Lock. - * - *************************************************************************= *****/ - -acpi_status __init -acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags) +static acpi_status __init +acpi_tb_get_root_table(acpi_physical_address rsdp_address, + struct acpi_table_header **out_table, + unsigned int *entry_size) { struct acpi_table_rsdp *rsdp; acpi_native_uint table_entry_size; - acpi_native_uint i; - u32 table_count; struct acpi_table_header *table; acpi_physical_address address; acpi_physical_address rsdt_address =3D 0; u32 length; - u8 *table_entry; acpi_status status; =20 - ACPI_FUNCTION_TRACE(tb_parse_root_table); + ACPI_FUNCTION_TRACE(tb_get_root_table); =20 /* * Map the entire RSDP and extract the address of the RSDT or XSDT @@ -454,6 +435,42 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_ad= dress, u8 flags) return_ACPI_STATUS(status); } =20 + *out_table =3D table; + *entry_size =3D table_entry_size; + return_ACPI_STATUS(AE_OK); +} + +/*************************************************************************= ****** + * + * FUNCTION: acpi_tb_parse_root_table + * + * PARAMETERS: Rsdp - Pointer to the RSDP + * Flags - Flags + * + * RETURN: Status + * + * DESCRIPTION: This function is called to parse the Root System Descripti= on + * Table (RSDT or XSDT) + * + * NOTE: Tables are mapped (not copied) for efficiency. The FACS mu= st + * be mapped and cannot be copied because it contains the act= ual + * memory location of the ACPI Global Lock. + * + *************************************************************************= *****/ + +acpi_status __init +acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags) +{ + struct acpi_table_header *table; + unsigned int table_count, table_entry_size, i; + void *table_entry; + acpi_status status; + + status =3D acpi_tb_get_root_table(rsdp_address, &table, + &table_entry_size); + if (!ACPI_SUCCESS(status)) + return_ACPI_STATUS(status); + /* Calculate the number of tables described in the root table */ =20 table_count =3D @@ -502,7 +519,7 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_add= ress, u8 flags) * It is not possible to map more than one entry in some environments, * so unmap the root table here before mapping other tables */ - acpi_os_unmap_memory(table, length); + acpi_os_unmap_memory(table, table->length); =20 /* * Complete the initialization of the root table array by examining @@ -523,3 +540,67 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_ad= dress, u8 flags) =20 return_ACPI_STATUS(AE_OK); } + +acpi_status __init +acpi_early_get_table(const char *signature, acpi_native_uint instance, + struct acpi_table_header **out_table) +{ + static acpi_physical_address __initdata table_addr[128]; + static unsigned int __initdata table_count; + static unsigned int __initdata table_entry_size; + unsigned int i; + + ACPI_FUNCTION_TRACE(tb_early_get_table); + + if (!table_count) { + struct acpi_table_header *table; + void *table_entry; + acpi_status status; + acpi_physical_address rsdp_address =3D acpi_os_get_root_pointer(); + + if (!rsdp_address) + return_ACPI_STATUS(AE_NOT_FOUND); + + status =3D acpi_tb_get_root_table(rsdp_address, &table, + &table_entry_size); + if (!ACPI_SUCCESS(status)) + return_ACPI_STATUS(status); + + /* Calculate the number of tables described in the root table */ + table_count =3D (table->length - sizeof(*table)) / table_entry_size; + + if (table_count > ARRAY_SIZE(table_addr)) { + table_count =3D 0; + return_ACPI_STATUS(AE_NO_MEMORY); + } + + table_entry =3D ACPI_CAST_PTR(uint8_t, table) + sizeof(*table); + + for (i =3D 0; i < table_count; i++) { + table_addr[i] =3D + acpi_tb_get_root_table_entry(table_entry, + table_entry_size); + table_entry +=3D table_entry_size; + } + + acpi_os_unmap_memory(table, table->length); + } + + for (i =3D 0; i < table_count; i++) { + struct acpi_table_header *header =3D + acpi_os_map_memory(table_addr[i], sizeof(*header)); + + if (ACPI_COMPARE_NAME(header->signature, signature)) { + unsigned int len =3D header->length; + + acpi_os_unmap_memory(header, sizeof(*header)); + *out_table =3D acpi_os_map_memory(table_addr[i], len); + + return_ACPI_STATUS(AE_OK); + } + + acpi_os_unmap_memory(header, sizeof(*header)); + } + + return_ACPI_STATUS(AE_NOT_FOUND); +} diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index 9cd3e471bfa5..606dd404fd76 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -1375,6 +1375,136 @@ static void enable_exar_enhanced_bits(const struct = ns16550 *uart) =20 #endif /* CONFIG_HAS_PCI */ =20 +#ifdef CONFIG_ACPI +#include +#include + +#include + +static int __init acpi_uart_config(struct ns16550 *uart, unsigned int idx) +{ + struct acpi_table_header *table; + struct acpi_table_spcr *spcr; + acpi_status status; + int rc =3D 0; + + /* + * SPCR specifies a single port, expect it to be configured at positio= n 0 + * in the uart array. + */ + if ( idx ) + return -EXDEV; + + if ( system_state <=3D SYS_STATE_early_boot ) + status =3D acpi_early_get_table(ACPI_SIG_SPCR, 0, &table); + else + status =3D acpi_get_table(ACPI_SIG_SPCR, 0, &table); + + if ( ACPI_FAILURE(status) ) + { + printk(XENLOG_ERR "Failed to find or parse ACPI SPCR table\n"); + return -ENODEV; + } + + spcr =3D container_of(table, struct acpi_table_spcr, header); + + rc =3D -EDOM; + if ( spcr->interface_type !=3D ACPI_DBG2_16550_COMPATIBLE ) + { + printk(XENLOG_ERR "Incompatible ACPI SPCR UART interface %u\n", + spcr->interface_type); + goto out; + } + + if ( spcr->serial_port.space_id !=3D ACPI_ADR_SPACE_SYSTEM_MEMORY && + (IS_ENABLED(CONFIG_ARM) || + spcr->serial_port.space_id !=3D ACPI_ADR_SPACE_SYSTEM_IO) ) + { + printk(XENLOG_ERR "Incompatible ACPI SPCR UART address space %u\n", + spcr->serial_port.space_id); + goto out; + } + + if ( !spcr->serial_port.address ) + { + printk(XENLOG_ERR "ACPI SPCR console redirection disabled\n"); + goto out; + } + + uart->io_base =3D spcr->serial_port.address; + uart->io_size =3D DIV_ROUND_UP(spcr->serial_port.bit_width, BITS_PER_B= YTE); + uart->reg_shift =3D spcr->serial_port.bit_offset; + + uart->parity =3D spcr->parity; + uart->stop_bits =3D spcr->stop_bits; + uart->data_bits =3D 8; + + if ( uart->baud =3D=3D BAUD_AUTO && spcr->baud_rate ) + { + switch ( spcr->baud_rate ) + { + case ACPI_SPCR_BAUD_9600: + uart->baud =3D 9600; + break; + + case ACPI_SPCR_BAUD_19200: + uart->baud =3D 19200; + break; + + case ACPI_SPCR_BAUD_57600: + uart->baud =3D 57600; + break; + + case ACPI_SPCR_BAUD_115200: + uart->baud =3D 115200; + break; + + default: + printk(XENLOG_WARNING + "Ignoring invalid baud rate %u in ACPI SPCR\n", + spcr->baud_rate); + } + } + + if ( IS_ENABLED(CONFIG_X86) ) + { + /* Use polling mode by default. */ + uart->irq =3D 0; + + if ( (spcr->interrupt_type & ACPI_SPCR_INTR_TYPE_IO_APIC) && + spcr->interrupt < 0xff ) + uart->irq =3D spcr->interrupt; + else if ( (spcr->interrupt_type & ACPI_SPCR_INTR_TYPE_PC_AT) && + ((spcr->pc_interrupt >=3D 2 && spcr->pc_interrupt <=3D = 7) || + (spcr->pc_interrupt >=3D 9 && spcr->pc_interrupt <=3D = 12) || + (spcr->pc_interrupt >=3D 14 && spcr->pc_interrupt <=3D = 15)) ) + uart->irq =3D spcr->pc_interrupt; + } + +#ifdef CONFIG_ARM + /* The trigger/polarity information is not available in spcr. */ + irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); + uart->irq =3D spcr->interrupt; +#endif /* CONFIG_ARM */ + +#ifdef CONFIG_HAS_PCI + if ( spcr->pci_device_id !=3D 0xffff && spcr->pci_vendor_id !=3D 0xfff= f ) + { + uart->ps_bdf_enable =3D true; + uart->pci_device =3D PCI_SBDF(spcr->pci_segment, spcr->pci_bus, + spcr->pci_device, spcr->pci_function); + } +#endif /* CONFIG_HAS_PCI */ + + rc =3D 0; + + out: + if ( system_state <=3D SYS_STATE_early_boot ) + acpi_os_unmap_memory(&spcr, spcr->header.length); + return rc; +} +#endif /* CONFIG_ACPI */ + /* * Configure serial port with a string: * [/][,DPS[,[,[,[,= ]]]]]. @@ -1539,6 +1669,15 @@ static bool __init parse_positional(struct ns16550 *= uart, char **str) conf +=3D 3; } else +#endif +#ifdef CONFIG_ACPI + if ( strncmp(conf, "acpi", 4) =3D=3D 0 ) + { + if ( acpi_uart_config(uart, uart - ns16550_com) ) + return true; + conf +=3D 4; + } + else #endif { uart->io_base =3D simple_strtoull(conf, &conf, 0); @@ -1643,8 +1782,17 @@ static bool __init parse_namevalue_pairs(char *str, = struct ns16550 *uart) uart->reg_width =3D simple_strtoul(param_value, NULL, 0); break; =20 -#ifdef CONFIG_HAS_PCI case device: +#ifdef CONFIG_ACPI + if ( strncmp(param_value, "acpi", 3) =3D=3D 0 ) + { + acpi_uart_config(uart, uart - ns16550_com); + dev_set =3D true; + break; + } + else +#endif /* CONFIG_ACPI */ +#ifdef CONFIG_HAS_PCI if ( strncmp(param_value, "pci", 3) =3D=3D 0 ) { pci_uart_config(uart, 1/* skip AMT */, uart - ns16550_com); @@ -1656,9 +1804,11 @@ static bool __init parse_namevalue_pairs(char *str, = struct ns16550 *uart) dev_set =3D true; } else +#endif /* CONFIG_HAS_PCI */ PARSE_ERR_RET("Unknown device type %s\n", param_value); break; =20 +#if CONFIG_HAS_PCI case port_bdf: { unsigned int b, d, f; @@ -1680,7 +1830,7 @@ static bool __init parse_namevalue_pairs(char *str, s= truct ns16550 *uart) uart->pb_bdf_enable =3D true; break; } -#endif +#endif /* CONFIG_HAS_PCI */ =20 default: PARSE_ERR_RET("Invalid parameter: %s\n", token); @@ -1845,8 +1995,6 @@ DT_DEVICE_END #endif /* HAS_DEVICE_TREE_DISCOVERY */ =20 #if defined(CONFIG_ACPI) && defined(CONFIG_ARM) -#include - static int __init ns16550_acpi_uart_init(const void *data) { struct acpi_table_header *table; @@ -1857,51 +2005,13 @@ static int __init ns16550_acpi_uart_init(const void= *data) * Only support one UART on ARM which happen to be ns16550_com[0]. */ struct ns16550 *uart =3D &ns16550_com[0]; - - status =3D acpi_get_table(ACPI_SIG_SPCR, 0, &table); - if ( ACPI_FAILURE(status) ) - { - printk("ns16550: Failed to get SPCR table\n"); - return -EINVAL; - } - - spcr =3D container_of(table, struct acpi_table_spcr, header); - - if ( unlikely(spcr->serial_port.space_id !=3D ACPI_ADR_SPACE_SYSTEM_ME= MORY) ) - { - printk("ns16550: Address space type is not mmio\n"); - return -EINVAL; - } - - /* - * The serial port address may be 0 for example - * if the console redirection is disabled. - */ - if ( unlikely(!spcr->serial_port.address) ) - { - printk("ns16550: Console redirection is disabled\n"); - return -EINVAL; - } + int rc; =20 ns16550_init_common(uart); =20 - /* - * The baud rate is pre-configured by the firmware. - * And currently the ACPI part is only targeting ARM so the flow_contr= ol - * field and all PCI related ones which we do not care yet are ignored. - */ - uart->baud =3D BAUD_AUTO; - uart->data_bits =3D 8; - uart->parity =3D spcr->parity; - uart->stop_bits =3D spcr->stop_bits; - uart->io_base =3D spcr->serial_port.address; - uart->io_size =3D DIV_ROUND_UP(spcr->serial_port.bit_width, BITS_PER_B= YTE); - uart->reg_shift =3D spcr->serial_port.bit_offset; - uart->reg_width =3D spcr->serial_port.access_width; - - /* The trigger/polarity information is not available in spcr. */ - irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); - uart->irq =3D spcr->interrupt; + rc =3D acpi_uart_config(uart, 0); + if ( rc ) + return rc; =20 uart->vuart.base_addr =3D uart->io_base; uart->vuart.size =3D uart->io_size; diff --git a/xen/include/acpi/actables.h b/xen/include/acpi/actables.h index 527e1c9f9b9d..afb808998825 100644 --- a/xen/include/acpi/actables.h +++ b/xen/include/acpi/actables.h @@ -104,4 +104,9 @@ acpi_tb_install_table(acpi_physical_address address, acpi_status acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags); =20 +/* Get a table early, before acpi_tb_parse_root_table() is called. */ +acpi_status +acpi_early_get_table(const char *signature, acpi_native_uint instance, + struct acpi_table_header **out_table); + #endif /* __ACTABLES_H__ */ diff --git a/xen/include/acpi/actbl2.h b/xen/include/acpi/actbl2.h index ee96e990d636..923c784e8bd5 100644 --- a/xen/include/acpi/actbl2.h +++ b/xen/include/acpi/actbl2.h @@ -1037,6 +1037,16 @@ struct acpi_table_spcr { =20 #define ACPI_SPCR_DO_NOT_DISABLE (1) =20 +/* Masks for interrupt_type field above */ +#define ACPI_SPCR_INTR_TYPE_PC_AT 0x01 +#define ACPI_SPCR_INTR_TYPE_IO_APIC 0x02 + +/* Values for the baud_rate field above */ +#define ACPI_SPCR_BAUD_9600 3 +#define ACPI_SPCR_BAUD_19200 4 +#define ACPI_SPCR_BAUD_57600 5 +#define ACPI_SPCR_BAUD_115200 7 + /*************************************************************************= ****** * * SPMI - Server Platform Management Interface table --=20 2.51.0