[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 2/3] xen/uart: be more careful with changes to the PCI command register


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • Date: Fri, 27 Mar 2026 14:54:19 +0100
  • 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
  • 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=FJ0Ji5W2h3aOIBrVtvdFNdAp9lxGhfHtiIvV+ocnmZg=; b=l/UwnxKfO8sEKlaZAw/GDCB7bNpKcphMcJhm/psk2vB2D0ZMWThsAwFeAFAtxJQagBB8MTnkJ4b1Sb95HHgGWEhJ6ms5ncQn9jZlYsHsbiY4LeATdSWCPrcVzECd80GHgb66zOpE1WoTt5DxildVQvJCCziJJUNS4UW6nttegl+gY3d/kxjBnpun/XNTNdtWyPuSDL8GZjWLmGomS6I2wLNq0u7hJUzqHYaqHmk2rD3LvgWA/tIrxoMQmeMkRGHMglIZ4nReUE+aqNl68n3LXZrLHmKSvxRAB0ixob2P0Sn8a4KaofWHZOStKUPvuytCAvs3VdXWn1jYNEwDpB/sbA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jXpBxFgmWHq+sRMVRK+Ges0s8czGkBxI5p8JPrpSSn6JD0Iq+dXheDM4iiSZzLdJ6l0XKy8mU2Eh3TNUGx2rj7sXeKdFBB3VO312ZLrXayT+gelLYprMYKDF0B1PoN2ziWaRGRpFvp2ghVC5i9MxYPZMCsN6tgqL3fzYuoohBsfpZtVyDQJc+EviwT70lq43bWKujyDm1rXoArxqvKnm3OfZUqLvVMvaUUupB5vGVCtzFMIbQ5PmQeAgroHNLp0/Ih6QYJdUSSyql53ZpS3Ejc8iKfzQy0F9tW7LntAlCcnSJtv8LasMrCEYz2z4mv/3PMjOzDIbnUBHLj8Rkw0S/Q==
  • 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"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • Delivery-date: Fri, 27 Mar 2026 13:55:33 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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, which might put the device into a non-working state.

Fixes: f2ff5d6628b3 ("ns16550: enable PCI serial card usage")
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
Changes since v1:
 - Adjusted over previous fixes.
---
 xen/drivers/char/ns16550.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
index d05dc506ed9c..d16e447c0e76 100644
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -283,14 +283,19 @@ 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;
+
     if ( !uart->ps_bdf_enable )
         return;
 
+    cmd = pci_conf_read16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1],
+                                  uart->ps_bdf[2]), PCI_COMMAND);
+
     if ( uart->io_base >= 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;
     }
 
@@ -307,7 +312,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
 }
 
-- 
2.51.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.