From nobody Wed Sep 10 05:48:29 2025 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-Seal: i=1; a=rsa-sha256; t=1757365939; cv=none; d=zohomail.com; s=zohoarc; b=OBl1mry1I/xFaenoE/vjs3ozPFwulbQNABjdwM1kD7wtdmo2zojiEHSU8seBitByFd7LxIYzSMaLEj6mURtBqitwcFMFitppLl+yHMRW2xYn/hG2H/yXKHpj2kCjTcYAd4Y/luItvYdNg4k6/5z2CbKc4PNjf9E+jcuzESNQSec= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757365939; h=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=ScRE3g8jVmbQQYHS5u6EzEGBByXpDzH+16MqZDTV2QA=; b=aQBWv79fCvMIc21MIL1g8RkOYku8E+8VdWEa5zNepT9b5zZQ6hiVMxxFuOxhkcjTJ+FTHC8LA9cxE5BjsqJGevnlKAphU7v5g/PbA+1ksSUTwsak7idl7bFnJWp0vFwL2OkI953VmmYY1nRN4hLZhdwz60iV1awYwjacUp7DsSo= ARC-Authentication-Results: i=1; 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 Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1757365939024267.90410062041735; Mon, 8 Sep 2025 14:12:19 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1115535.1462091 (Exim 4.92) (envelope-from ) id 1uvj9X-0007qp-K2; Mon, 08 Sep 2025 21:11:55 +0000 Received: by outflank-mailman (output) from mailman id 1115535.1462091; Mon, 08 Sep 2025 21:11:55 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uvj9X-0007pP-Ed; Mon, 08 Sep 2025 21:11:55 +0000 Received: by outflank-mailman (input) for mailman id 1115535; Mon, 08 Sep 2025 21:11:54 +0000 Received: from mail.xenproject.org ([104.130.215.37]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uvj9W-0007g9-Hb for xen-devel@lists.xenproject.org; Mon, 08 Sep 2025 21:11:54 +0000 Received: from xenbits.xenproject.org ([104.239.192.120]) by mail.xenproject.org with esmtp (Exim 4.96) (envelope-from ) id 1uvj9W-000FSM-0J; Mon, 08 Sep 2025 21:11:54 +0000 Received: from [19.12.91.86] (helo=localhost) by xenbits.xenproject.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uvj9W-000gK2-0U; Mon, 08 Sep 2025 21:11:54 +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" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org; s=20200302mail; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From; bh=ScRE3g8jVmbQQYHS5u6EzEGBByXpDzH+16MqZDTV2QA=; b=SHNIZw8PuWMOdsmDTnYETDo1QS klbIfNDdyd+svI1DElYh8m7wO2zafd0+hnHN+ivmRyfphzI5KoDyTumkeIVue0muN6BuTNHLQf5mj 0tJ6p3QPKnAbVVqqvYCA7BqNSyI1/fRkOKjOQ+Xw9HykDa6PhfJMk1U56Cfil547TY+w=; From: dmukhin@xen.org To: xen-devel@lists.xenproject.org Cc: andrew.cooper3@citrix.com, anthony.perard@vates.tech, jbeulich@suse.com, julien@xen.org, michal.orzel@amd.com, roger.pau@citrix.com, sstabellini@kernel.org, dmukhin@ford.com Subject: [PATCH v7 02/16] xen/8250-uart: update definitions Date: Mon, 8 Sep 2025 14:11:35 -0700 Message-ID: <20250908211149.279143-3-dmukhin@ford.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250908211149.279143-1-dmukhin@ford.com> References: <20250908211149.279143-1-dmukhin@ford.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @xen.org) X-ZM-MESSAGEID: 1757365941519124100 Content-Type: text/plain; charset="utf-8" From: Denis Mukhin =20 Added missing definitions needed for NS16550 UART emulator. Newly introduced MSR definitions re-used in the existing ns16550 driver. Also, corrected FCR DMA definition bit#3 (0x08) as per: https://www.ti.com/lit/ds/symlink/tl16c550c.pdf See "7.7.2 FIFO Control Register (FCR)". Signed-off-by: Denis Mukhin --- Changes since v6: - used raw bitmasks instead of BIT() for consistency --- xen/drivers/char/ns16550.c | 16 ++++++++-------- xen/include/xen/8250-uart.h | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index df7fff7f81df..0e80fadbb894 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -388,7 +388,7 @@ static void __init cf_check ns16550_init_preirq(struct = serial_port *port) =20 /* Check this really is a 16550+. Otherwise we have no FIFOs. */ if ( uart->fifo_size <=3D 1 && - ((ns_read_reg(uart, UART_IIR) & 0xc0) =3D=3D 0xc0) && + ((ns_read_reg(uart, UART_IIR) & UART_IIR_FE) =3D=3D UART_IIR_FE) = && ((ns_read_reg(uart, UART_FCR) & UART_FCR_TRG14) =3D=3D UART_FCR_T= RG14) ) uart->fifo_size =3D 16; } @@ -728,20 +728,20 @@ static int __init check_existence(struct ns16550 *uar= t) * Mask out IER[7:4] bits for test as some UARTs (e.g. TL * 16C754B) allow only to modify them if an EFR bit is set. */ - scratch2 =3D ns_read_reg(uart, UART_IER) & 0x0f; - ns_write_reg(uart,UART_IER, 0x0F); - scratch3 =3D ns_read_reg(uart, UART_IER) & 0x0f; + scratch2 =3D ns_read_reg(uart, UART_IER) & UART_IER_MASK; + ns_write_reg(uart, UART_IER, UART_IER_MASK); + scratch3 =3D ns_read_reg(uart, UART_IER) & UART_IER_MASK; ns_write_reg(uart, UART_IER, scratch); - if ( (scratch2 !=3D 0) || (scratch3 !=3D 0x0F) ) + if ( (scratch2 !=3D 0) || (scratch3 !=3D UART_IER_MASK) ) return 0; =20 /* * Check to see if a UART is really there. * Use loopback test mode. */ - ns_write_reg(uart, UART_MCR, UART_MCR_LOOP | 0x0A); - status =3D ns_read_reg(uart, UART_MSR) & 0xF0; - return (status =3D=3D 0x90); + ns_write_reg(uart, UART_MCR, UART_MCR_LOOP | UART_MCR_RTS | UART_MCR_O= UT2); + status =3D ns_read_reg(uart, UART_MSR) & UART_MSR_STATUS; + return (status =3D=3D (UART_MSR_CTS | UART_MSR_DCD)); } =20 #ifdef CONFIG_HAS_PCI diff --git a/xen/include/xen/8250-uart.h b/xen/include/xen/8250-uart.h index d13352940c13..a8a26b64689e 100644 --- a/xen/include/xen/8250-uart.h +++ b/xen/include/xen/8250-uart.h @@ -32,6 +32,7 @@ #define UART_MCR 0x04 /* Modem control */ #define UART_LSR 0x05 /* line status */ #define UART_MSR 0x06 /* Modem status */ +#define UART_SCR 0x07 /* Scratch pad */ #define UART_USR 0x1f /* Status register (DW) */ #define UART_DLL 0x00 /* divisor latch (ls) (DLAB=3D1) */ #define UART_DLM 0x01 /* divisor latch (ms) (DLAB=3D1) */ @@ -42,6 +43,8 @@ #define UART_IER_ETHREI 0x02 /* tx reg. empty */ #define UART_IER_ELSI 0x04 /* rx line status */ #define UART_IER_EMSI 0x08 /* MODEM status */ +#define UART_IER_MASK \ + (UART_IER_ERDAI | UART_IER_ETHREI | UART_IER_ELSI | UART_IER_EMSI) =20 /* Interrupt Identification Register */ #define UART_IIR_NOINT 0x01 /* no interrupt pending */ @@ -51,12 +54,19 @@ #define UART_IIR_THR 0x02 /* - tx reg. empty */ #define UART_IIR_MSI 0x00 /* - MODEM status */ #define UART_IIR_BSY 0x07 /* - busy detect (DW) */ +#define UART_IIR_FE 0xc0 /* FIFO enabled (2 bits) */ =20 /* FIFO Control Register */ #define UART_FCR_ENABLE 0x01 /* enable FIFO */ #define UART_FCR_CLRX 0x02 /* clear Rx FIFO */ #define UART_FCR_CLTX 0x04 /* clear Tx FIFO */ -#define UART_FCR_DMA 0x10 /* enter DMA mode */ +#define UART_FCR_DMA 0x08 /* enter DMA mode */ +#define UART_FCR_RSRVD0 0x10 /* reserved; always 0 */ +#define UART_FCR_RSRVD1 0x20 /* reserved; always 0 */ +#define UART_FCR_RTB0 0x40 /* receiver trigger bit #0 */ +#define UART_FCR_RTB1 0x80 /* receiver trigger bit #1 */ +#define UART_FCR_TRG_MASK (UART_FCR_RTB0 | UART_FCR_RTB1) + #define UART_FCR_TRG1 0x00 /* Rx FIFO trig lev 1 */ #define UART_FCR_TRG4 0x40 /* Rx FIFO trig lev 4 */ #define UART_FCR_TRG8 0x80 /* Rx FIFO trig lev 8 */ @@ -98,9 +108,30 @@ /* Modem Control Register */ #define UART_MCR_DTR 0x01 /* Data Terminal Ready */ #define UART_MCR_RTS 0x02 /* Request to Send */ -#define UART_MCR_OUT2 0x08 /* OUT2: interrupt mask */ +#define UART_MCR_OUT1 0x04 /* Output #1 */ +#define UART_MCR_OUT2 0x08 /* Output #2 */ #define UART_MCR_LOOP 0x10 /* Enable loopback test mode */ +#define UART_MCR_RSRVD0 0x20 /* Reserved #0 */ #define UART_MCR_TCRTLR 0x40 /* Access TCR/TLR (TI16C752, EFR[4]=3D1)= */ +#define UART_MCR_RSRVD1 0x80 /* Reserved #1 */ +#define UART_MCR_MASK \ + (UART_MCR_DTR | UART_MCR_RTS | \ + UART_MCR_OUT1 | UART_MCR_OUT2 | \ + UART_MCR_LOOP | UART_MCR_TCRTLR) + +/* Modem Status Register */ +#define UART_MSR_DCTS 0x01 /* Change in CTS */ +#define UART_MSR_DDSR 0x02 /* Change in DSR */ +#define UART_MSR_TERI 0x04 /* Change in RI */ +#define UART_MSR_DDCD 0x08 /* Change in DCD */ +#define UART_MSR_CTS 0x10 +#define UART_MSR_DSR 0x20 +#define UART_MSR_RI 0x40 +#define UART_MSR_DCD 0x80 +#define UART_MSR_CHANGE \ + (UART_MSR_DCTS | UART_MSR_DDSR | UART_MSR_TERI | UART_MSR_DDCD) +#define UART_MSR_STATUS \ + (UART_MSR_CTS | UART_MSR_DSR | UART_MSR_RI | UART_MSR_DCD) =20 /* Line Status Register */ #define UART_LSR_DR 0x01 /* Data ready */ @@ -111,6 +142,7 @@ #define UART_LSR_THRE 0x20 /* Xmit hold reg empty */ #define UART_LSR_TEMT 0x40 /* Xmitter empty */ #define UART_LSR_ERR 0x80 /* Error */ +#define UART_LSR_MASK (UART_LSR_OE | UART_LSR_BI) =20 /* These parity settings can be ORed directly into the LCR. */ #define UART_PARITY_NONE (0<<3) --=20 2.51.0