From nobody Mon May 4 13:06:51 2026 Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazon11012007.outbound.protection.outlook.com [52.101.126.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 38F95318B9B; Mon, 4 May 2026 08:49:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.126.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884590; cv=fail; b=VOF8cEziI73Varn5DgUb7QNzv74YsI6LPkSeidYVxhIdo3sGLuZneyIVEuTGol4IO9bmY4+OfmnIQRSHYcHghf1NiH3A2RCT9w5oTPVBHDJwQrqEFX930H3IqS7Bu2tWlehAAtMN2eAqL+sowL/TQfczrukGt/2eKP07Xcc3+sE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884590; c=relaxed/simple; bh=PreglOf6gsla9yNQ22n51jnAXR8en40NWwcD3xHuW2Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=uQ10YGd31C7VSAVBj1HdEi/cXO4yumuGs1Oi4qFMtkYyCKMNGPpW+AuY3jFpO/2FOQeXRODnKx+aOQZ9n0OLbmogrNDj7CTKu0ZvptpK7kqTGcKqO+IAUgnQY2c4R1jGp2qdJCI3J1K4pBlVloYY3ssjOfkz4VItM8KF6AUd4m4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=XtRgkdeA; arc=fail smtp.client-ip=52.101.126.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="XtRgkdeA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tLXd/IPOYIbTh5rjDC5FsYpan6laLP9vNFz7JK/45r5ZXZD024tOP2dYMDgHEpS7+LXXSWL8N9EhnW3Xf9NjUngdIx3daBxzud6CXlOHpHyHgcXtT5QSXtg3V6rm/8qf9gRGw7CX3K2lCwEMEQ4B19UfDaBI5zE2Ksx75P6xMcMU9RtsNJovF1NcBjJYxGlENyINXTIQHpvfyjfSqwlDo9V1HulFjuTDxne0NwXu9bRjxUFyCStHn2pdP3aSVq4jw6eWwPBFRQswGKFiwbFV+xUjT1/uUFzqGWFMFQ8wZpIEoYYTvzdKvaC8ihzHx23sKNzygVrvTGros8hpAUHJng== 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=6Fpcw9Ce5B3vTwfBTHvnNlYX1RlRSGX2gESz4cdXQTs=; b=negK0wrmn5UlETZq1roVsZ5BOEM2jMzHAak6oRP0MZBnXCyuGXcGcO/uM8GRnGylXYe9+bdWCK3Jx5JqjdC/MxA7AcnDetmcTsN9KaSIot4X5ZKoRYJ+JhyGYqejZ7U4SfnNMAGyIRk2P0ImZ/ARuTyXscAOtf7dPzrvj4hksmxj1C02U8MVqEaVFju2lpx7o4I90KUwYyw8k/X+rUbgP2tcgQxVo/pZ2bOQHAQsQA1QEsOPneYaCH4YbcbQMyxw0vN9Y5zRjSSn0edU6BM8Ytv6nAAaQI40kz2XG5OfNgHtsPV1uc5CTG99PFeEW4sNR/Ruys2dVKCUQr7OiVno4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6Fpcw9Ce5B3vTwfBTHvnNlYX1RlRSGX2gESz4cdXQTs=; b=XtRgkdeAKmkvI636YuBfs6Nq0fTyQzjU+KR6U+1nmRnLaZEDMIqXp5w3yRocKsObtUW79kTQpHwh4OchbJ+geU2h3/URrdxKmxhtFAF6qZPDBSvbaOockposYmLpgnAqfGnoHi0rdCWvEldwwSq2shksJTo6cqqgpfWMHrhmp5I= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by OSQPR01MB7823.apcprd01.prod.exchangelabs.com (2603:1096:604:425::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:49:44 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:49:44 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 01/15] serial: 8250: split Moxa PCIe serial board support out of 8250_pci Date: Mon, 4 May 2026 16:48:46 +0800 Message-ID: <20260504084900.22380-2-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|OSQPR01MB7823:EE_ X-MS-Office365-Filtering-Correlation-Id: 364ebc39-d584-4e99-cc61-08dea9ba16a3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|52116014|376014|56012099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: y7TPcerlc5Z4HKJOj3Xmj4Mx1Gzlq71crGB7ggfrO3sJV7dBMDu5mCgCZbxjWn1o/4AGv+46zDnSw08MNPOmMA0xbLxYd8ovriazlBuqQY7NdcAPCab8jNP2YkLCl05JeUQImJ9ANwme5YKtStS4H+hNHuQSFSY39trmY2Gpq5CZG4iI45qHmhXwJCsMmtt/zuYUFN8+6LGHDw250wW+EbUwYvMJbcVzCUONeAJ60isC9f3oCJbyOTagK2gAThwugh42Uw9gAGxG1KdOBh8LmOgCQ7Cp7TcFL6iWqAdXB86yDXyeuLTSRlFAcgj8OlaXX0QJQo+WggwhJyJzHi2aDW9nMPVWNwEOY01zKceI3MwD0lz9z05VcVqiiCvgrYxXxkV6jf2Bja3TDCRnlaBKkqeHzeEZkKrszbwEW3Ai0F++NZZL23PRdPQjM2oapDrzpLeJSe8olugRQf3wlqQrMZG19zwWBv6mdna9o+MzU/k27+RsHbEUFSNJwFztoGTYfnkRPaLzB1OMhL6MzRB8dQuInk9KQsLVvBBpkug31ZE+G7FnghpIR9p50vuMOsigwrAHWpjvbGoU8rM2Dj/RanajLdqpFSh5luvNW7U47BgvJdHdA7QLONwTcHUVdHHLoXfeWlmrbiowm4YCE1TMUgyrvYxZhnQDvTs66EUfynFgCX+o7qZb97UYwRajap23gOReIayUMH/obvKFIoxIX8rRkIlzi94jjGao8APKphF6g77H03oumR7cvjtrjSW8 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(52116014)(376014)(56012099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ANbeJY8bmHNj3Qh20TyLIH+32csqnkB7N0/nkF1KZ7vKO1Uu+pHKv70gOboZ?= =?us-ascii?Q?o4zSFqIdCZeuTR8RpVbmU5V+oRnweBZzWZqbsVgrg32/LwHGFwG8Uz7Xe5dq?= =?us-ascii?Q?Ub7AEnskuxvLf4Ad3H3S8zYV7f+rZ0Cj/uuyREenzQ9IJhK/JWD6tJ4BoAmG?= =?us-ascii?Q?m0/ZUERDV8N9Zj0f4uOFncB0++9wmli6Zuf4Khpw0iHuTkp2fvjvx2MYc0pE?= =?us-ascii?Q?XbHHYcdvz6jDLuaAp0xA1Z2Bb/tT1E5jXJL3/QW16/ohfKXWAH8lJQZV1QuH?= =?us-ascii?Q?svCeeZX344ljVZEgMfqnlIwcXeall+5JbjM4h0yqdC48+OCNuXxPG+OC06lx?= =?us-ascii?Q?QjbzAurY72ylV+RCWmRjWpNAIJCPenltrSOPJvBVqRPI4hX/AibivaKF+o71?= =?us-ascii?Q?rAsi06sIaOaaRsGsg7BBANL56x5OeG1O9BiNO9EEVce6Mdf7cuYNvM6xsO/m?= =?us-ascii?Q?vQQHGen0eB/+FPl9uSFxwnGbZBDNa2jCuNcQAMSovmms6VBwk4uKSY3Ns+1u?= =?us-ascii?Q?sxiNA277QdmUfxhTijx5F7JbZhvRxFqWCqPPcryKMv9VrUGeHvVVp0YiVuc3?= =?us-ascii?Q?uY52G01f5eunTqoNI2bRgONbWsK155JVBXfKVTIqdIVovM4MJr1C2nPyMsuh?= =?us-ascii?Q?cH3SfBiFholo7jBy/KEaWvmt9v2nnxFSgBZMJSSrLEGZ3DwYAzqIFzl+yRtc?= =?us-ascii?Q?Zkz4YGHxJKFG6F8r6806yn2zC1tOxK/nahAvZZ+WghLvUYfK4N7FBkGULxwq?= =?us-ascii?Q?k9NmeaqRZK4XUV0cnf4I1NkrP0IAge3d6UtLiDrllRF0URitfGxTqJFk6Z4L?= =?us-ascii?Q?pggjQNzjfwY6C8gZI1n1f01dAexkUwUBIu34YZRQB/bKx1Z/hOkKLpueD6TY?= =?us-ascii?Q?jcKBMSIrVeykNSXFEG01DwsK329Ki+MUkuEYqA0ZjZGF6rgw8/nm4FulipXZ?= =?us-ascii?Q?7YHwhbOuVKZfe6GnePYM4xDQ9jJ4jyWS5z9iMSJSG6rQMIDE2tXOm1jeBdTS?= =?us-ascii?Q?abNOATgV1/rZ1LI03hoRAB85zLYTwFhrxhqdD6F14NM5nMdY3oBr/uqD1ef4?= =?us-ascii?Q?iV8fKTNUZMXqyIIDVDNYPbmPD7+6Aa66t8X4nz62SUIyl8QJlASTDp6P/C98?= =?us-ascii?Q?5tX3n5Wh63Gf+i724dadA+phXf0IAgWMHVqSbvab49o8lW5uC6OVHg/izxab?= =?us-ascii?Q?JiG24ePNn1eGci/3iDI78Zmri8YtqR9oiz+L3IvO8CiapgMeMMEUq9+N65p/?= =?us-ascii?Q?F4aANRqaWSJ0XIEn8ZZ5XzatIXZHBZ1qrLHJSUcFKAliUSgHY3xOJ+vApvVs?= =?us-ascii?Q?bgt0EUr9APwm/Iv8CxGSF5RmGVzts7E7lBJysVSEwhPUJAQGvqsbKATZcYQ5?= =?us-ascii?Q?Tl5Et+hrNmy+VVmxYEDMz+RQbOVACKJc17a+a+g0RkuVF8i0+9YTqsZARzr9?= =?us-ascii?Q?mAoAuD0CB2TIyd++2JW4e+W1kO+6U0EsgwtUoIJoozFiFCqwaC687ZhkttaN?= =?us-ascii?Q?1JSuUzidxA0g4vUyManaKYTw+8bxCsR572NbaC1PMtp59uaG3k83LEhi37Sw?= =?us-ascii?Q?cAVNEKawVGiPzo+esFJiTRBlgMbUPGgKdULIsd45GsjViYkzAcubl0Zi3bmB?= =?us-ascii?Q?kuHiGmdFqux/ROFiLOo4v0df2rQd/V/zkxvUxYcyZq/71j8zi+IATcISYO+y?= =?us-ascii?Q?UZNTXsswooBiRbGuGl7O9qLOrjS08F/+SblwKXnGpKQClsPgLVjJoQ5vaCwi?= =?us-ascii?Q?YrnnEGyZSSArPc0r4PE0QNPB1vQ6lG0=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 364ebc39-d584-4e99-cc61-08dea9ba16a3 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:49:44.4028 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tnWeFg/S0BW4ArMD+xrUnZIkT0PwFO0ckrDhkg+wROe/gvX8GG11UAUZj29QxRrtUCTaB19S0SXMQnbUC2l+4N+M3hWROb7SndhDDOzMKHM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSQPR01MB7823 Content-Type: text/plain; charset="utf-8" The Moxa PCIe multiport serial boards are currently handled as part of 8250_pci.c. In preparation for adding Moxa-specific UART features and optimizations, move the Moxa PCIe implementation into a dedicated driver. This introduces drivers/tty/serial/8250/8250_mxpcie.c and wires it up via Kconfig and Makefile, while preserving the existing probe flow and device IDs. This change was suggested during earlier review by Andy Shevchenko. No functional change intended. Link: https://lore.kernel.org/all/ZmQovC6TbDpTb3c8@surfacebook.localdomain/ Link: https://lore.kernel.org/all/CAHp75VeDsVt0GQYUFxLM+obfmqXBPa3hM3YMsFbc= 26uzWZG-SQ@mail.gmail.com/ Suggested-by: Andy Shevchenko Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 292 ++++++++++++++++++++++++++ drivers/tty/serial/8250/8250_pci.c | 208 +----------------- drivers/tty/serial/8250/Kconfig | 11 + drivers/tty/serial/8250/Makefile | 1 + 4 files changed, 307 insertions(+), 205 deletions(-) create mode 100644 drivers/tty/serial/8250/8250_mxpcie.c diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c new file mode 100644 index 000000000000..aa0afdbed791 --- /dev/null +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -0,0 +1,292 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Moxa PCIe multiport serial device driver + * + * Copyright (C) 2025 Moxa Inc. (support@moxa.com) + * Author: Crescent Hsieh + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "8250.h" +#include "8250_pcilib.h" + +#define PCI_DEVICE_ID_MOXA_CP102E 0x1024 +#define PCI_DEVICE_ID_MOXA_CP102EL 0x1025 +#define PCI_DEVICE_ID_MOXA_CP102N 0x1027 +#define PCI_DEVICE_ID_MOXA_CP104EL_A 0x1045 +#define PCI_DEVICE_ID_MOXA_CP104N 0x1046 +#define PCI_DEVICE_ID_MOXA_CP112N 0x1121 +#define PCI_DEVICE_ID_MOXA_CP114EL 0x1144 +#define PCI_DEVICE_ID_MOXA_CP114N 0x1145 +#define PCI_DEVICE_ID_MOXA_CP116E_A_A 0x1160 +#define PCI_DEVICE_ID_MOXA_CP116E_A_B 0x1161 +#define PCI_DEVICE_ID_MOXA_CP118EL_A 0x1182 +#define PCI_DEVICE_ID_MOXA_CP118E_A_I 0x1183 +#define PCI_DEVICE_ID_MOXA_CP132EL 0x1322 +#define PCI_DEVICE_ID_MOXA_CP132N 0x1323 +#define PCI_DEVICE_ID_MOXA_CP134EL_A 0x1342 +#define PCI_DEVICE_ID_MOXA_CP134N 0x1343 +#define PCI_DEVICE_ID_MOXA_CP138E_A 0x1381 +#define PCI_DEVICE_ID_MOXA_CP168EL_A 0x1683 + +/* Bits in PCI device ID encoding board capabilities */ +#define MOXA_DEV_ID_IFACE_MASK GENMASK(11, 8) /* Supported serial interfac= e */ +#define MOXA_DEV_ID_NPORTS_MASK GENMASK(7, 4) /* Number of UART ports */ + +/* UART */ +#define MOXA_PUART_BASE_BAUD 921600 +#define MOXA_PUART_OFFSET 0x200 + +#define MOXA_GPIO_DIRECTION 0x09 +#define MOXA_GPIO_OUTPUT 0x0A + +#define MOXA_GPIO_PIN2 BIT(2) + +#define MOXA_UIR_OFFSET 0x04 +#define MOXA_UIR_RS232 0x00 +#define MOXA_UIR_RS422 0x01 +#define MOXA_UIR_RS485_4W 0x0B +#define MOXA_UIR_RS485_2W 0x0F + +#define MOXA_EVEN_RS_MASK GENMASK(3, 0) +#define MOXA_ODD_RS_MASK GENMASK(7, 4) + +struct mxpcie8250 { + unsigned int supp_rs; + unsigned int num_ports; + void __iomem *bar1_base; /* UART registers (MMIO) */ + void __iomem *bar2_base; /* UIR / GPIO / CPLD (IO) */ + int line[]; +}; + +enum { + MOXA_SUPP_RS232 =3D BIT(0), + MOXA_SUPP_RS422 =3D BIT(1), + MOXA_SUPP_RS485 =3D BIT(2), +}; + +static bool mxpcie8250_is_mini_pcie(unsigned short device) +{ + if (device =3D=3D PCI_DEVICE_ID_MOXA_CP102N || + device =3D=3D PCI_DEVICE_ID_MOXA_CP104N || + device =3D=3D PCI_DEVICE_ID_MOXA_CP112N || + device =3D=3D PCI_DEVICE_ID_MOXA_CP114N || + device =3D=3D PCI_DEVICE_ID_MOXA_CP132N || + device =3D=3D PCI_DEVICE_ID_MOXA_CP134N) + return true; + + return false; +} + +static unsigned int mxpcie8250_get_supp_rs(unsigned short device) +{ + switch (device & MOXA_DEV_ID_IFACE_MASK) { + case 0x0000: + case 0x0600: + return MOXA_SUPP_RS232; + case 0x0100: + return MOXA_SUPP_RS232 | MOXA_SUPP_RS422 | MOXA_SUPP_RS485; + case 0x0300: + return MOXA_SUPP_RS422 | MOXA_SUPP_RS485; + } + + return 0; +} + +static unsigned short mxpcie8250_get_nports(unsigned short device) +{ + switch (device) { + case PCI_DEVICE_ID_MOXA_CP116E_A_A: + case PCI_DEVICE_ID_MOXA_CP116E_A_B: + return 8; + } + + return FIELD_GET(MOXA_DEV_ID_NPORTS_MASK, device); +} + +static void mxpcie8250_set_interface(struct mxpcie8250 *priv, + unsigned int port_idx, + u8 mode) +{ + void __iomem *uir_addr =3D priv->bar2_base + MOXA_UIR_OFFSET + port_idx /= 2; + u8 cval; + + cval =3D ioread8(uir_addr); + + if (port_idx & 1) + cval =3D FIELD_MODIFY(MOXA_ODD_RS_MASK, &cval, mode); + else + cval =3D FIELD_MODIFY(MOXA_EVEN_RS_MASK, &cval, mode); + + iowrite8(cval, uir_addr); +} + +static void mxpcie8250_init_board(struct pci_dev *pdev, struct mxpcie8250 = *priv) +{ + void __iomem *bar2_base =3D priv->bar2_base; + unsigned short device =3D pdev->device; + u8 cval; + + /* Initial terminator */ + if (device =3D=3D PCI_DEVICE_ID_MOXA_CP114EL || + device =3D=3D PCI_DEVICE_ID_MOXA_CP118EL_A) { + iowrite8(0xff, bar2_base + MOXA_GPIO_DIRECTION); + iowrite8(0x00, bar2_base + MOXA_GPIO_OUTPUT); + } + /* + * Enable hardware buffer to prevent break signal output when system boot= s up. + * This hardware buffer is only supported on Mini PCIe series. + */ + if (mxpcie8250_is_mini_pcie(device)) { + /* Set GPIO direction */ + cval =3D ioread8(bar2_base + MOXA_GPIO_DIRECTION); + cval |=3D MOXA_GPIO_PIN2; + iowrite8(cval, bar2_base + MOXA_GPIO_DIRECTION); + /* Enable low GPIO */ + cval =3D ioread8(bar2_base + MOXA_GPIO_OUTPUT); + cval &=3D ~MOXA_GPIO_PIN2; + iowrite8(cval, bar2_base + MOXA_GPIO_OUTPUT); + } +} + +static void mxpcie8250_setup_port(struct pci_dev *pdev, + struct mxpcie8250 *priv, + struct uart_8250_port *up, + int idx) +{ + unsigned short device =3D pdev->device; + int offset =3D idx * MOXA_PUART_OFFSET; + u8 init_mode =3D MOXA_UIR_RS232; + + if (!(priv->supp_rs & MOXA_SUPP_RS232)) + init_mode =3D MOXA_UIR_RS422; + + mxpcie8250_set_interface(priv, idx, init_mode); + + if (idx =3D=3D 3 && + (device =3D=3D PCI_DEVICE_ID_MOXA_CP104EL_A || + device =3D=3D PCI_DEVICE_ID_MOXA_CP114EL || + device =3D=3D PCI_DEVICE_ID_MOXA_CP134EL_A)) + offset =3D 7 * MOXA_PUART_OFFSET; + + up->port.mapbase =3D pci_resource_start(pdev, FL_BASE1) + offset; + up->port.membase =3D pcim_iomap_table(pdev)[FL_BASE1] + offset; +} + +static int mxpcie8250_probe(struct pci_dev *pdev, const struct pci_device_= id *id) +{ + struct device *dev =3D &pdev->dev; + struct uart_8250_port up =3D {}; + struct mxpcie8250 *priv; + unsigned short device =3D pdev->device; + unsigned int i, num_ports; + int ret; + + ret =3D pcim_enable_device(pdev); + if (ret) + return ret; + + num_ports =3D mxpcie8250_get_nports(device); + + priv =3D devm_kzalloc(dev, struct_size(priv, line, num_ports), GFP_KERNEL= ); + if (!priv) + return -ENOMEM; + + priv->supp_rs =3D mxpcie8250_get_supp_rs(device); + priv->num_ports =3D num_ports; + + priv->bar1_base =3D pcim_iomap(pdev, FL_BASE1, 0); + if (!priv->bar1_base) + return -ENOMEM; + + priv->bar2_base =3D pcim_iomap(pdev, FL_BASE2, 0); + if (!priv->bar2_base) + return -ENOMEM; + + mxpcie8250_init_board(pdev, priv); + + up.port.dev =3D dev; + up.port.irq =3D pdev->irq; + up.port.uartclk =3D MOXA_PUART_BASE_BAUD * 16; + up.port.flags =3D UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ; + + up.port.iotype =3D UPIO_MEM; + up.port.iobase =3D 0; + up.port.regshift =3D 0; + + for (i =3D 0; i < num_ports; i++) { + mxpcie8250_setup_port(pdev, priv, &up, i); + + dev_dbg(dev, "Setup PCI port: port %lx, irq %d, type %d\n", + up.port.iobase, up.port.irq, up.port.iotype); + + priv->line[i] =3D serial8250_register_8250_port(&up); + if (priv->line[i] < 0) { + dev_err(dev, + "Couldn't register serial port %lx, irq %d, type %d, error %d\n", + up.port.iobase, up.port.irq, + up.port.iotype, priv->line[i]); + break; + } + } + dev_set_drvdata(dev, priv); + + return 0; +} + +static void mxpcie8250_remove(struct pci_dev *pdev) +{ + struct mxpcie8250 *priv =3D dev_get_drvdata(&pdev->dev); + unsigned int i; + + for (i =3D 0; i < priv->num_ports; i++) + serial8250_unregister_port(priv->line[i]); +} + +static const struct pci_device_id mxpcie8250_pci_ids[] =3D { + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102E) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102EL) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102N) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104EL_A) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104N) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP112N) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114EL) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114N) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_A) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_B) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118EL_A) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118E_A_I) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132EL) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132N) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134EL_A) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134N) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP138E_A) }, + { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168EL_A) }, + { } +}; +MODULE_DEVICE_TABLE(pci, mxpcie8250_pci_ids); + +static struct pci_driver mxpcie8250_pci_driver =3D { + .name =3D "8250_mxpcie", + .id_table =3D mxpcie8250_pci_ids, + .probe =3D mxpcie8250_probe, + .remove =3D mxpcie8250_remove, +}; +module_pci_driver(mxpcie8250_pci_driver); + +MODULE_AUTHOR("Moxa Inc."); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Moxa PCIe Multiport Serial Device Driver"); +MODULE_IMPORT_NS("SERIAL_8250_PCI"); diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8= 250_pci.c index 152f914c599d..fa172477409a 100644 --- a/drivers/tty/serial/8250/8250_pci.c +++ b/drivers/tty/serial/8250/8250_pci.c @@ -76,25 +76,6 @@ #define PCI_DEVICE_ID_WCHIC_CH384_4S 0x3470 #define PCI_DEVICE_ID_WCHIC_CH384_8S 0x3853 =20 -#define PCI_DEVICE_ID_MOXA_CP102E 0x1024 -#define PCI_DEVICE_ID_MOXA_CP102EL 0x1025 -#define PCI_DEVICE_ID_MOXA_CP102N 0x1027 -#define PCI_DEVICE_ID_MOXA_CP104EL_A 0x1045 -#define PCI_DEVICE_ID_MOXA_CP104N 0x1046 -#define PCI_DEVICE_ID_MOXA_CP112N 0x1121 -#define PCI_DEVICE_ID_MOXA_CP114EL 0x1144 -#define PCI_DEVICE_ID_MOXA_CP114N 0x1145 -#define PCI_DEVICE_ID_MOXA_CP116E_A_A 0x1160 -#define PCI_DEVICE_ID_MOXA_CP116E_A_B 0x1161 -#define PCI_DEVICE_ID_MOXA_CP118EL_A 0x1182 -#define PCI_DEVICE_ID_MOXA_CP118E_A_I 0x1183 -#define PCI_DEVICE_ID_MOXA_CP132EL 0x1322 -#define PCI_DEVICE_ID_MOXA_CP132N 0x1323 -#define PCI_DEVICE_ID_MOXA_CP134EL_A 0x1342 -#define PCI_DEVICE_ID_MOXA_CP134N 0x1343 -#define PCI_DEVICE_ID_MOXA_CP138E_A 0x1381 -#define PCI_DEVICE_ID_MOXA_CP168EL_A 0x1683 - /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588 @@ -1994,138 +1975,6 @@ pci_sunix_setup(struct serial_private *priv, return setup_port(priv, port, bar, offset, 0); } =20 -#define MOXA_PUART_GPIO_EN 0x09 -#define MOXA_PUART_GPIO_OUT 0x0A - -#define MOXA_GPIO_PIN2 BIT(2) - -#define MOXA_RS232 0x00 -#define MOXA_RS422 0x01 -#define MOXA_RS485_4W 0x0B -#define MOXA_RS485_2W 0x0F -#define MOXA_UIR_OFFSET 0x04 -#define MOXA_EVEN_RS_MASK GENMASK(3, 0) -#define MOXA_ODD_RS_MASK GENMASK(7, 4) - -enum { - MOXA_SUPP_RS232 =3D BIT(0), - MOXA_SUPP_RS422 =3D BIT(1), - MOXA_SUPP_RS485 =3D BIT(2), -}; - -static unsigned short moxa_get_nports(unsigned short device) -{ - switch (device) { - case PCI_DEVICE_ID_MOXA_CP116E_A_A: - case PCI_DEVICE_ID_MOXA_CP116E_A_B: - return 8; - } - - return FIELD_GET(0x00F0, device); -} - -static bool pci_moxa_is_mini_pcie(unsigned short device) -{ - if (device =3D=3D PCI_DEVICE_ID_MOXA_CP102N || - device =3D=3D PCI_DEVICE_ID_MOXA_CP104N || - device =3D=3D PCI_DEVICE_ID_MOXA_CP112N || - device =3D=3D PCI_DEVICE_ID_MOXA_CP114N || - device =3D=3D PCI_DEVICE_ID_MOXA_CP132N || - device =3D=3D PCI_DEVICE_ID_MOXA_CP134N) - return true; - - return false; -} - -static unsigned int pci_moxa_supported_rs(struct pci_dev *dev) -{ - switch (dev->device & 0x0F00) { - case 0x0000: - case 0x0600: - return MOXA_SUPP_RS232; - case 0x0100: - return MOXA_SUPP_RS232 | MOXA_SUPP_RS422 | MOXA_SUPP_RS485; - case 0x0300: - return MOXA_SUPP_RS422 | MOXA_SUPP_RS485; - } - return 0; -} - -static int pci_moxa_set_interface(const struct pci_dev *dev, - unsigned int port_idx, - u8 mode) -{ - resource_size_t iobar_addr =3D pci_resource_start(dev, 2); - resource_size_t UIR_addr =3D iobar_addr + MOXA_UIR_OFFSET + port_idx / 2; - u8 val; - - val =3D inb(UIR_addr); - - if (port_idx % 2) { - val &=3D ~MOXA_ODD_RS_MASK; - val |=3D FIELD_PREP(MOXA_ODD_RS_MASK, mode); - } else { - val &=3D ~MOXA_EVEN_RS_MASK; - val |=3D FIELD_PREP(MOXA_EVEN_RS_MASK, mode); - } - outb(val, UIR_addr); - - return 0; -} - -static int pci_moxa_init(struct pci_dev *dev) -{ - unsigned short device =3D dev->device; - resource_size_t iobar_addr =3D pci_resource_start(dev, 2); - unsigned int i, num_ports =3D moxa_get_nports(device); - u8 val, init_mode =3D MOXA_RS232; - - if (!IS_ENABLED(CONFIG_HAS_IOPORT)) - return serial_8250_warn_need_ioport(dev); - - if (!(pci_moxa_supported_rs(dev) & MOXA_SUPP_RS232)) { - init_mode =3D MOXA_RS422; - } - for (i =3D 0; i < num_ports; ++i) - pci_moxa_set_interface(dev, i, init_mode); - - /* - * Enable hardware buffer to prevent break signal output when system boot= s up. - * This hardware buffer is only supported on Mini PCIe series. - */ - if (pci_moxa_is_mini_pcie(device)) { - /* Set GPIO direction */ - val =3D inb(iobar_addr + MOXA_PUART_GPIO_EN); - val |=3D MOXA_GPIO_PIN2; - outb(val, iobar_addr + MOXA_PUART_GPIO_EN); - /* Enable low GPIO */ - val =3D inb(iobar_addr + MOXA_PUART_GPIO_OUT); - val &=3D ~MOXA_GPIO_PIN2; - outb(val, iobar_addr + MOXA_PUART_GPIO_OUT); - } - - return num_ports; -} - -static int -pci_moxa_setup(struct serial_private *priv, - const struct pciserial_board *board, - struct uart_8250_port *port, int idx) -{ - unsigned int bar =3D FL_GET_BASE(board->flags); - int offset; - - if (!IS_ENABLED(CONFIG_HAS_IOPORT)) - return serial_8250_warn_need_ioport(priv->dev); - - if (board->num_ports =3D=3D 4 && idx =3D=3D 3) - offset =3D 7 * board->uart_offset; - else - offset =3D idx * board->uart_offset; - - return setup_port(priv, port, bar, offset, 0); -} - /* * Master list of serial port init/setup/exit quirks. * This does not describe the general nature of the port. @@ -2941,17 +2790,6 @@ static struct pci_serial_quirk pci_serial_quirks[] = =3D { .setup =3D pci_fintek_setup, .init =3D pci_fintek_init, }, - /* - * MOXA - */ - { - .vendor =3D PCI_VENDOR_ID_MOXA, - .device =3D PCI_ANY_ID, - .subvendor =3D PCI_ANY_ID, - .subdevice =3D PCI_ANY_ID, - .init =3D pci_moxa_init, - .setup =3D pci_moxa_setup, - }, { .vendor =3D 0x1c29, .device =3D 0x1204, @@ -3169,9 +3007,6 @@ enum pci_board_num_t { pbn_titan_2_4000000, pbn_titan_4_4000000, pbn_titan_8_4000000, - pbn_moxa_2, - pbn_moxa_4, - pbn_moxa_8, }; =20 /* @@ -3943,24 +3778,6 @@ static struct pciserial_board pci_boards[] =3D { .uart_offset =3D 0x200, .first_offset =3D 0x1000, }, - [pbn_moxa_2] =3D { - .flags =3D FL_BASE1, - .num_ports =3D 2, - .base_baud =3D 921600, - .uart_offset =3D 0x200, - }, - [pbn_moxa_4] =3D { - .flags =3D FL_BASE1, - .num_ports =3D 4, - .base_baud =3D 921600, - .uart_offset =3D 0x200, - }, - [pbn_moxa_8] =3D { - .flags =3D FL_BASE1, - .num_ports =3D 8, - .base_baud =3D 921600, - .uart_offset =3D 0x200, - }, }; =20 #define REPORT_CONFIG(option) \ @@ -4014,6 +3831,9 @@ static const struct pci_device_id blacklist[] =3D { { PCI_VDEVICE(PERICOM, PCI_ANY_ID), REPORT_8250_CONFIG(PERICOM), }, { PCI_VDEVICE(ACCESSIO, PCI_ANY_ID), REPORT_8250_CONFIG(PERICOM), }, =20 + /* Moxa devices */ + { PCI_VDEVICE(MOXA, PCI_ANY_ID), REPORT_8250_CONFIG(MOXA), }, + /* End of the black list */ { } }; @@ -5851,28 +5671,6 @@ static const struct pci_device_id serial_pci_tbl[] = =3D { PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_ni8430_4 }, =20 - /* - * MOXA - */ - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102E), pbn_moxa_2 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102EL), pbn_moxa_2 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102N), pbn_moxa_2 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104EL_A), pbn_moxa_4 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104N), pbn_moxa_4 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP112N), pbn_moxa_2 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114EL), pbn_moxa_4 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114N), pbn_moxa_4 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_A), pbn_moxa_8 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_B), pbn_moxa_8 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118EL_A), pbn_moxa_8 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118E_A_I), pbn_moxa_8 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132EL), pbn_moxa_2 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132N), pbn_moxa_2 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134EL_A), pbn_moxa_4 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134N), pbn_moxa_4 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP138E_A), pbn_moxa_8 }, - { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168EL_A), pbn_moxa_8 }, - /* * ADDI-DATA GmbH communication cards */ diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kcon= fig index f64ef0819cd4..7cf8547d18f6 100644 --- a/drivers/tty/serial/8250/Kconfig +++ b/drivers/tty/serial/8250/Kconfig @@ -157,6 +157,17 @@ config SERIAL_8250_EXAR 422x PCIe serial cards that are not covered by the more generic SERIAL_8250_PCI option. =20 +config SERIAL_8250_MOXA_PCIE + tristate "8250/16550 Moxa PCIe device support" + depends on SERIAL_8250 && PCI + select SERIAL_8250_PCILIB + default SERIAL_8250 + help + Say Y here if you have a Moxa PCIe serial card. + + To compile this driver as a module, choose M here: the + module will be called 8250_mxpcie. + config SERIAL_8250_HP300 tristate depends on SERIAL_8250 && HP300 diff --git a/drivers/tty/serial/8250/Makefile b/drivers/tty/serial/8250/Mak= efile index 9ec4d5fe64de..be78fd6b337a 100644 --- a/drivers/tty/serial/8250/Makefile +++ b/drivers/tty/serial/8250/Makefile @@ -42,6 +42,7 @@ obj-$(CONFIG_SERIAL_8250_LPC18XX) +=3D 8250_lpc18xx.o obj-$(CONFIG_SERIAL_8250_LPSS) +=3D 8250_lpss.o obj-$(CONFIG_SERIAL_8250_MEN_MCB) +=3D 8250_men_mcb.o obj-$(CONFIG_SERIAL_8250_MID) +=3D 8250_mid.o +obj-$(CONFIG_SERIAL_8250_MOXA_PCIE) +=3D 8250_mxpcie.o obj-$(CONFIG_SERIAL_8250_MT6577) +=3D 8250_mtk.o obj-$(CONFIG_SERIAL_8250_NI) +=3D 8250_ni.o obj-$(CONFIG_SERIAL_OF_PLATFORM) +=3D 8250_of.o --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11012028.outbound.protection.outlook.com [40.107.75.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4721B3368A8; Mon, 4 May 2026 08:49:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884593; cv=fail; b=iipXUEPHTupIlIpnSO9daJGtJbnVi0STKcjHnF4BeaWaXKgBRI5eWr4Q4h8jZkXqOl6l9zasWKUD0f8Lf96NxXsO0ZWccQghn2dIdB3+DhP4523cpj3flx0w2uKiPJ+jMO1MkwI78HotcV8wXovtXhpHUj8xGdtjBw4mp3i7DTc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884593; c=relaxed/simple; bh=o0fxDdWHa2dYSme0oLN6xwJlQ2U1A7iqPvQJosZwaIk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=hRpGIHcHdlrwRrsiwsAr/04WO1UWVjUudgdL+ogSMtODtm6FL+7gl1Mk5C8RsixK8QFTbAkoF6siWFEbeRA+zULP17bQSADB4xIdURApwU2BWPVdXsZY4LT+9ug3dVqve69fPTkjf/L/XsAq1OzwYjc/peczD3JKPwyNzy0oSrk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=eJRjBLxa; arc=fail smtp.client-ip=40.107.75.28 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="eJRjBLxa" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KCyjKTj9XLnyjfAiqbs3IM9/vBFVQdTKHrIV4EQEjedYDUI0BQ0qg7Q2r3r9Ck1GTOJ31J/FRb5zBSYQVTcCMIq97+3ika/5+9DwA6HSJq+m571EO+qk5F+DF9X8kMRPXsueCpw+pSB8puj+Liha/h/qpbuJNfqPHS+up8kuVIOKdXiQQmMWSCOUj7p+U/oMwDaqiIzWkCeXFzD6J7KghJxqNseANi6n1jeJZtIQBBc/DXhcKWmSjSKyMcUDEsQbPCcJ7+6LGLWvuXQ60eLVHRSmVC+7WDqcWXJVpeZDriaokjyJnu1IMX4NHjyUWSgXDzDxuio//sAMXgAq6VBMvQ== 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=mU+ELC6mJKpkmKVyShEyNwAmQJr03MrIzhWo+RV8zLg=; b=rKKNczoT7UARW76FtbKtZT2PK6gwfNBAetcvzQoImETtrTCJjXWUK6dk0Q2xx+M1RHpqE+oXC8nD7bZ/g2u/fR9ZVG8l97Fh/hW3fE/t6STn+YCGxN8RwsipOqSLpY6zQDKVXuYYjIk6DUSefqUIl3VOTfhi3izwzhhks83uhvChO7q0k6wreliBjZLpSSMuk8ZjNCeVX3suqbtYcv4tpCQVeVc9GVN2vfwP9LmVtSSZVR9wD+Dj7KXvFWZXg7y9q3cjvrTXC/Am8iA28tg7t0eQAuesR6PvkW9fFCWjdfjfOBCH+V/61gop5rVMhtXbkA5TGB5xqyDTBgW0xBz9SQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mU+ELC6mJKpkmKVyShEyNwAmQJr03MrIzhWo+RV8zLg=; b=eJRjBLxaI14iVexQzJLvpM1/Ecn0cdeDuXBQuYcfrhsaMytXnaeTQJBl3WXgDCmcc+oOXC8LKh1gcJ7Ff2i3CgPi+D0i1/hnNOvEiRn4cau4p8i9lYQPKHUr0p+GFSLHXwYuPjiRmpBMoORZfBaZ4ooa0uFYUhEZFv8YYCwIN7M= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by OSQPR01MB7823.apcprd01.prod.exchangelabs.com (2603:1096:604:425::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:49:50 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:49:50 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 02/15] serial: 8250: add Moxa MUEx50 UART port type Date: Mon, 4 May 2026 16:48:47 +0800 Message-ID: <20260504084900.22380-3-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|OSQPR01MB7823:EE_ X-MS-Office365-Filtering-Correlation-Id: 90370a26-6408-4747-a291-08dea9ba19f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|52116014|376014|56012099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: mrqv/DJoBlJSVb92Pr+g5LCMlDQY8FC43Yot9XJD678WAEMO97U5XOD639JFDMiAfJ53CZYM0DkulDZ/sdZCspI+mx29llEu0xMG0eUWSToE6oU4gZDHcik1yqXVPqNhS+aBIrGZFoj/Pw2aVD27uxwgDDfXZwcK2tGZ0yaTHUUYlyIKJVUF9wDGc2aVYa8GdytKnzNADqmYr9IYcqrZ7qvP6GU8665AEYRMKtTnPUsfDQ1sQ+mzh20NgVwrHCG6kOUlq3V9+UwPcNtgvFIHvl4JVqljZdVChjtBObGm2LmEBuF0/AqR8Z449JI1zEyEWuCSP20543qA9jZO8iPOgkv5a8csTqZTZT3IY0s7aNXn9vzS7QxkTD7Asp7kO0zSAH92wD7KDx9l9JJB4frTMkyeICA4mCeltCcvmGRiyqDPfAEz3bcVBPeNpfgYwjKRUjlTL7oSHognVBQhDk6DFpZ4hmmMG7itHYQdia8PldIOSeXA7evH2IB44rXoJUrRTLvroGF5qbnOQFwKfw6YR/U7Ksqi17uClmTJwY2sH2WJp0NHQ87prvCpMYmysjcTQA9dTdM1p7fsv8HFCQQZSKu+HImtvNBUJ0AnaHfwpzYe2u+tzYQZtLrn5vnTgVWDZhGUT8r9DK+5mIFxlKUHKHgQXhB7bv2sTbvxctBkkL2AbvJ4tB/+fM+fbS9ST6qlRDsx0L9M6PhU8ADwpfbiOJ2RaH62czwqqL+6onbzL3a4yItnVVBfLYACme92++o4 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(52116014)(376014)(56012099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1JuHBaV278FNQe1xhrSTmP29SIIFlmksniMGj4QqA62V3WmJv9lLG1TmP68E?= =?us-ascii?Q?KgTLaVU4LYYZHYwYv9Eqk0ij5g0mXSuERGJpgtq19jdW6fwMsG2Tq7eLj/z4?= =?us-ascii?Q?NSym2YpAe0GJsDTjJigZL2tzqTHmYD7vDSzObl9Jaoqq5f9D1secI22+HiP+?= =?us-ascii?Q?/qVmbaDj7R8xEps8K3ZBdq2WBPI1Cuv3UJB3e0QfbX6u04C9T8sjtee3mX2G?= =?us-ascii?Q?ETDou1QiYYpE9YqOthaAr7Pb9b4XgN1xQKZEhRv85OA6cYrHr+neduf6yzEC?= =?us-ascii?Q?E3vHYIiGMDWHKp6FGS1huorutqmM84kmzf2WQDSm/yai5ZwzITlJwGOlhro7?= =?us-ascii?Q?6AU2colBCpAg/ZKCWgUHp+JeA7It5Eij7a1lREs4XuF9ka+BLRq1UCxlihtE?= =?us-ascii?Q?jI11OBQstu3j+aXO2kS7/Y04rMNld09KC3WZ9Y/9GOp3FWQ0AI+AVp/ZzGIx?= =?us-ascii?Q?T3upzMgDRjjShqEwx0PIQIY/OdFzszIWjxVjhu/ONOukLYlW6Q5lHl0vqMDF?= =?us-ascii?Q?cE2daw9Gar4oQ85pOWZ5V1ShiCgbGLtH+1TORbYr/4J8OMKqUqZXgp00qxYZ?= =?us-ascii?Q?fCvzpduDjhAfikZCKZDbgGohTzfwqMAMkc1vMNDAnL2kBbPHIiyHvb/6Jxe2?= =?us-ascii?Q?QVSxXarx5yyCUU2yLf3bayM5zNgUE6IZk1JoCXQW4tyjEAWWgvl+4ghXk8w8?= =?us-ascii?Q?UjUmV+RTMJuBdHtXU/ffFMM3ZGksqIBsIvWGL8Ajmye9Tp/Dxif887a9qZ/E?= =?us-ascii?Q?pTP+jGhVHwDfAjG75HDQQHkgmErtBJFtRFOwjL0d4y9RlEdsocDvHGHx91zC?= =?us-ascii?Q?d2Cczxf5bmWFY+UI4eqJ77PmIneieOkb0zArvRqSpMlsFkSwLLIlsYpF3s7K?= =?us-ascii?Q?UQiumxJ2tcK7381cV9BlJgRKH0slx65Uh4uNqOH/MwszpUUbyD+ZAyHD8O7s?= =?us-ascii?Q?hf1N7s6atUlNwtp12clOqZcb7elv0s01n1GuPt8kQA//HcVDos5PS2/6rxZa?= =?us-ascii?Q?xMDHKe8FJfMCoSmVWEzJqz2rL3FWt2lOUZ2HSIlpNtDEv8/C0lgJ+ntrPwY/?= =?us-ascii?Q?o7EVQrCfHay6HLbUjz/GwTFdEldSGfH80YFJ1cWR0HkmQzCcURmC9z1lglOQ?= =?us-ascii?Q?7MI9G7vgcGv57UlWs7P4ejcm7fHrq15AaZkNIJSAWz6eta2dam0XmOVRPf9A?= =?us-ascii?Q?x0sXXgjBPWd1M8QdZYHdz96c5DoQ3MrQZNv92OjXmNjurL9AbbBQP+vrr5Rk?= =?us-ascii?Q?ZNR6xl54sHMfoJ4ZW1Na7v/6y4+wVxsnE5u3Lehq4OW9bGgrrzzpNtNmAML1?= =?us-ascii?Q?FTjuzTJLHwDcAlkMV8AZyvnAsLfNeViwmFpYON95hHQ8sudeQHZgdNgcTvUl?= =?us-ascii?Q?/GnAU42kr9bF8uKjU2bHuclVkGY70WIuHiNlAT+oT5TSkTcSr/rpVCB31m4v?= =?us-ascii?Q?ZyQM0xz1uPtX683KHWwAuXlMy1y/IuT7m1rHB7B83gWvBdBIvudFU7v0OaOE?= =?us-ascii?Q?6qsiLDOxPIr635/XjaJRzzKoNmjMSxvI6eE6fn/w4mNM9NP+yVpB1N8HA2Ig?= =?us-ascii?Q?P1XNtDKSTBPRAey8Zdhnkh1Mh8cRTzpb2afOa8sCvJRWHYgEPLAKwR2xzUiP?= =?us-ascii?Q?CQTS2ITLvUUQ55Kg7Ooktra39l2GwLOdJBKPccVuWsOuxmvdsCDeCiBknJQ8?= =?us-ascii?Q?yiW6AW6bqfwMQ+xmAxSDKjYyzp8Bbo1M1xBacuoBPV539LHhxAgJ+qxnJ3be?= =?us-ascii?Q?waCDUSsbKcn1GOfr1FpisDwtXPvkUJ0=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 90370a26-6408-4747-a291-08dea9ba19f6 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:49:49.9829 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LrLAOPl//Rg5zZBN/xGPk9Zqkk6CCKHocDoaqHy1zsPscutjuP2uquiTh87KcKDcMjRpRTRnyRDq5opT+r8j46mV2f3irgxR82uxTjJs6ek= X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSQPR01MB7823 Content-Type: text/plain; charset="utf-8" Add a new 8250 port type for the Moxa MUEx50 UART and describe its basic FIFO size and trigger characteristics in the 8250 port configuration table. The 8250_mxpcie driver sets UPF_FIXED_TYPE and uses PORT_MUEX50 so that the generic 8250 core applies the correct defaults. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 3 ++- drivers/tty/serial/8250/8250_port.c | 8 ++++++++ include/uapi/linux/serial_core.h | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index aa0afdbed791..ec91db1a3008 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -220,7 +220,8 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id up.port.dev =3D dev; up.port.irq =3D pdev->irq; up.port.uartclk =3D MOXA_PUART_BASE_BAUD * 16; - up.port.flags =3D UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ; + up.port.flags =3D UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ | UPF= _FIXED_TYPE; + up.port.type =3D PORT_MUEX50; =20 up.port.iotype =3D UPIO_MEM; up.port.iobase =3D 0; diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/= 8250_port.c index 719faf92aa8a..a17fdb5d68d2 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -310,6 +310,14 @@ static const struct serial8250_config uart_config[] = =3D { .rxtrig_bytes =3D {1, 8, 16, 30}, .flags =3D UART_CAP_FIFO | UART_CAP_AFE, }, + [PORT_MUEX50] =3D { + .name =3D "Moxa MUEx50 UART", + .fifo_size =3D 128, + .tx_loadsz =3D 128, + .fcr =3D UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, + .rxtrig_bytes =3D {15, 31, 63, 111}, + .flags =3D UART_CAP_FIFO, + }, }; =20 /* Uart divisor latch read */ diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_c= ore.h index 9c007a106330..377884e3856a 100644 --- a/include/uapi/linux/serial_core.h +++ b/include/uapi/linux/serial_core.h @@ -100,6 +100,9 @@ /* TXX9 type number */ #define PORT_TXX9 64 =20 +/* Moxa MUEx50 UART */ +#define PORT_MUEX50 65 + /*Digi jsm */ #define PORT_JSM 69 =20 --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11012050.outbound.protection.outlook.com [40.107.75.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 583B0289E13; Mon, 4 May 2026 08:49:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884599; cv=fail; b=DHr2ICGM/aUBafxe0H7EauJ2gR5UzB6FqmOt8K7mvyfpE+ffepoUcJPtUIAzt0qbl5jdVj+99RO8FegE4WjnTKF/a6avQR+5Q548YQx0eG1xIuCG22E3T3crHYThOlLJgcavixkqaXuXixsl2RHP1pmmdeV/n3QtVZ963OOBG1E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884599; c=relaxed/simple; bh=Q2NPefM+XTAlTxFpry0yqkUDQjQzXQiF2XYIUziT6Ds=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=mxZnC6PaKHG6EghZUDCXObDLXnSEACnybkbHR+PhuRMXZhAeWPR6Tiqrl9k8KVZH91eVoeViJOD2IgvusmkTBmmI7vrvPe5Yu07h+4Dr/8aBFxJ7TXHr1o4w/7OeCUHc6KdxKQTU16opAwX1dvHE4p6ChO5zUOx/NtNAWvaH3sI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=hlHUZJvz; arc=fail smtp.client-ip=40.107.75.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="hlHUZJvz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CmDFMBawkXHe1mXJUnuplF7fm6xAmwmmdmCufe/aM0+l8MRQBAa6EoVrA0zMNKFKzv7/gGMzLQ94PuFkSgjeJAkKvfpA+0EVBlRiwO0u4xgmcUADfvmAzLyzdAPWl2yZBeKpPYdB8yLBN9/exZV9PqpuUkfCXxitjYDusEnshpAo+CeziM5f0jt+h7B+s3Ax/MUZac+l0jeEhIlcbwCv+79KZgkwXiybuov3EkTvIMsXUde8Jc+urh6m/tquphOHoVqfzBfVK0+b5tq3afLE73xvBrjLtkNy5VPmlKWsf98MAGSwyaVjCb+IjU4z2LZmTP12rEoOs+pNLsXTlAnh8A== 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=Tq635nznzQtPAcBy5oMtd4det9IAJRxHaNajiZFYBwo=; b=AeqpdzbiPQk+4EFUT46+MStKi2zm5Ow4DX12ZsRMsoQpiFkdSqCE3FP8R4CKZkAYrOsY1u0RjW4/jzLqDBAkh+9CeK/NpWaqCpq6+lCXTf50e8koRkO2tc0WnSg4jzVzj0hVam3gl8R+8nFx1kgypMW5srTyiE+HjIE1c/wM29OceyPj2st6j1m9hqR72FTINBpu2tFs0zh0AAVOCcnKOUnrzu+b1+f3Yigk7uFqA+PkCYzk5AH8jpMpiBkS/IpNNxOt30VMTlgNnaoonKhjMKmL0Ry/nZdt/sYhNbYtsW+quqcM5uY0yjqs0rjY3eEgeaDEjrPY9culFu07xlcgaw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Tq635nznzQtPAcBy5oMtd4det9IAJRxHaNajiZFYBwo=; b=hlHUZJvzxD7bfHeUUauGlm+Sxsoo3ScjKMiSJUPcTblH/MS2MfuFIHos0b9wQpIILfz6IRZxlgEAYJhqCayRFGzdgUJNBG0c4vlXHFE11UwoUFkCElKkU0DqRXKhAxc0F+M7F1hkUtz64ol/8EA18rfBX7k4Ccu6IRv+gsOcgZw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:49:55 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:49:55 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 03/15] serial: 8250_mxpcie: enable enhanced mode and program FIFO trigger levels Date: Mon, 4 May 2026 16:48:48 +0800 Message-ID: <20260504084900.22380-4-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: 93580102-d7c9-4316-4fa6-08dea9ba1d16 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: 72Ec5+isOeefyE9aRKjjGv7NtA+IA1gr+VCn8kR4JHRq2B+YaNjpEXGSUno9YDhnUS3wMgv4KX4WFyELwjK5M3JNtFh8hiW9/e+S6rOYUC6gf9f36kk7Ogjx6M3p+ORYASxxKRkA8+D0nrOVgSoc70aUBGUtCi9/456v8fLv2iPh5UknGzpBBOm6QixY8VbQvuRV367W+bXk8G1CSaZ2njyevSFJbISSJMHE5XBtQrLN0LPvNmlK9zvRSM54L7eH3a1KhQkscYv+Rr/gpVErgjnTj4lLaHDLFhgvXtOshhWv5HVXX9XGQqe+YVRHv7Z7coXWJ/FShWTKl/yubYPvxGqF+ocVxQ1sJnoDGacdByaeVNHOJLpneWHOxdd+4hKsB1GSGdDH/VtswLzUSV0hRTIb75LCBkbF30ripbViHm/zwh/ZS8oEhiXYBv00G1orjiCZkXJJinlQNBzff15FI5U77NRCZd7xY66gwhIht80AQh1L3PEiOaDTI8m8R0kFjyUjh7dnSSnHAao1so40SoPvYn8RLDtXsFzXHA0mQhnkNmU6phsKZp0KhhVBv2vn+0eRq0kCZwYABeDrYXMLa6PtRUbjE56y+32qhDrnCGfQ/WFPbTJFzaOWJONGZ67/+2RVNdh3ZFzjuadziPVkrZPBJ6T+Y4MFuBR6SUssTeP+kvHaJKQYkYx7wLoMByv8akUyF9emuzOpeCLwW53V8Xn+ykZoHL5UX8NJiziveikKCGIyRJIWHnDZcklOSOM7 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?gd7GWLHAMfC2/VKyBIi9TSkfNmty6zqQ9c5xxbPW+kUDri6R6g5qfzSeRP+t?= =?us-ascii?Q?fYNcRW3T+5D2XA64RQNyQBURHfNolP2PIfB9z1PS6/dU6Vr0hKqFudCK6Ry8?= =?us-ascii?Q?9koaakeUE2pP+WOpDIuvLvUuzpqVv+bVAh4r7/FPcdEeIJNFB0oxiwWh4k6V?= =?us-ascii?Q?9c1+nEuFM1+C2edBP/YLxu5smfQNJDy0v8lSC1O2GQQfUn+zAhQlIME3rOVm?= =?us-ascii?Q?T2hMDXJK5Ft6jdJIRfIeBJCC8JSIPlVo1G+LS0snesa9XNb7fOpipYXAgV6u?= =?us-ascii?Q?8iya/kXrIgBzX8MGaJ58cNeRGqOZiJrMpryNWeOFWuisHZol7K9rq/82D1gc?= =?us-ascii?Q?enIKX4SDpVtGD4rH5IUqAZf4h+8vQKCGSDelMdM6Tam4uJMhht2Ba5LQKP8r?= =?us-ascii?Q?BtjJNnJDUmZDxEi/66Rc1nqP/qNal2VLA3CocItstz+EDY64oh0U23wYDFjF?= =?us-ascii?Q?slOorC2icrA4GNcA7C8k/seCwqQvmSDUcFIC2LAu4BkOCwZife0hsEW8bJlo?= =?us-ascii?Q?vv9AEa5VKSKUq3v0+zFm294hDymyLZpXDtLZv7m46x6Hise4J21oOgE6curM?= =?us-ascii?Q?TM+xuepXhKum8a8+DgzaRhpyaPlEcK8yNqnhVpMIfnDsMRJGEbpiEnVflqgc?= =?us-ascii?Q?DuH/UI6mNZVOWLZtMQuAfr1F2PyKEMdmLYtbL9rKBEMnPu3ioKEvQMhU5VlF?= =?us-ascii?Q?x/rI6pzVR4KeY+F5sLZkSaSxjUM8tTQY9LJNllXyzxdSdSnAQTrqQye7x0i0?= =?us-ascii?Q?kDlxqTYO/0/rEYn0Xl5gt+k54bUzScXzDYcQ3Rjuk/8B2l5/UnALr+C5FgrN?= =?us-ascii?Q?Gt06d/6IF9o678+thxFJ8LjAiTiU0EytVRP+NK6RACKMSO/t71UkWSYz6nPd?= =?us-ascii?Q?aEXimo6ek2vKF/dbk3MO+7DWMdx/wLuH/ELUvOpFlzWYvKBzGhuY+sCcNe4v?= =?us-ascii?Q?eTuMY+NxnxFCWXD/2Rf2YZLUO7ZIzwnlfxJ7rLS10I6V109hQ0AxU+s8Z8bx?= =?us-ascii?Q?JcJABUsVWN+XaXmA/j+sEHRnYK8A44cXNiscUoamNeP12d1rizBrokIEfsWO?= =?us-ascii?Q?KkdqfoEtmk52RKBm3ZMjH9Nd3PIreekGdtS+PvLNzd4c74uHimqpScqbcR36?= =?us-ascii?Q?SN/KMbDLRpo16nsAjXDMf6IBkEjT+/LOT5lyZKWbqjKj30OOdzfmRWfWIhG1?= =?us-ascii?Q?vJFbruVW4mqGWsW359K3xxNeYnfgUr9yoXOnFJuSeaTf1DrDcxdtF/UHjiKV?= =?us-ascii?Q?4/ahzINQDQMHEhPZDq7xtIuoX2A9qXVjgRkxMYPuP2v4rgzWewiGYY7W48Kf?= =?us-ascii?Q?5L/T2e1uN6LK3DaEKvFs9/jMOowDd9gnt5V2PAL9+uc+s2Ly8jiKmp1mnC3a?= =?us-ascii?Q?NUOrmT0bXNIG5+TSha9y/HBhoQ7Kq8EeV5WK6PVwChI+Tf8iVR4qUmJ6L5hQ?= =?us-ascii?Q?7FmQLsChK2G2q5NwnfJPiSs1CjoJ6t7NHnvi3O1hgvPdAyk+mbYtUGTOIoNL?= =?us-ascii?Q?E3j3J3ohzKZANJTnO+uyReIis1vsYWgoIrVIRdjKEk1jE+s6r5VnFs0s/U1J?= =?us-ascii?Q?8wvV1LUVRU6s1iDjGgnMfvC/V6PCggbpka8JFH0lS3Zl642tjjjlIhanvAtM?= =?us-ascii?Q?s09GQuLkT0ALizt23vXcpKAqCyMlKnnKfLD76Qvj/lew8ufTtZYDBNlQdFcm?= =?us-ascii?Q?Nsd2KWufMBKng3RAEX+Atw4q9ZXPVhUBQnqt60uIYyROnqBLxl+seVhzg6GY?= =?us-ascii?Q?xUdXQ5ZHiFLgsCnBv0biWl8N3Pji64s=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 93580102-d7c9-4316-4fa6-08dea9ba1d16 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:49:55.1846 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MUuHJL/LlKC6/4esH8ZzILg6rIlmZgUomNnBzrdPd39gNRtHnnhB5d1JC0gCqKiu2QyWBVTVMn+hB5/qxQCAE72TwHM5O/8ps5uTrzepWyw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" The MUEx50 UART provides an enhanced register set and programmable FIFO trigger levels for RX, TX, and flow control. Enable enhanced mode during port startup and program the MUEx50 FIFO trigger registers according to the configured port settings. Clear the programmed state again during shutdown to restore the default UART configuration. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 50 +++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index ec91db1a3008..7ba96a954bb1 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -49,6 +49,19 @@ #define MOXA_PUART_BASE_BAUD 921600 #define MOXA_PUART_OFFSET 0x200 =20 +/* Special Function Register (SFR) */ +#define MOXA_PUART_SFR 0x07 +#define MOXA_PUART_SFR_950 BIT(5) + +/* Enhanced Function Register (EFR) */ +#define MOXA_PUART_EFR 0x0A +#define MOXA_PUART_EFR_ENHANCED BIT(4) + +#define MOXA_PUART_TTL 0x10 /* Tx Interrupt Trigger Level */ +#define MOXA_PUART_RTL 0x11 /* Rx Interrupt Trigger Level */ +#define MOXA_PUART_FCL 0x12 /* Flow Control Low Trigger Level */ +#define MOXA_PUART_FCH 0x13 /* Flow Control High Trigger Level */ + #define MOXA_GPIO_DIRECTION 0x09 #define MOXA_GPIO_OUTPUT 0x0A =20 @@ -133,6 +146,40 @@ static void mxpcie8250_set_interface(struct mxpcie8250= *priv, iowrite8(cval, uir_addr); } =20 +static int mxpcie8250_startup(struct uart_port *port) +{ + struct uart_8250_port *up =3D up_to_u8250p(port); + unsigned int i; + int ret; + + ret =3D serial8250_do_startup(port); + if (ret) + return ret; + + for (i =3D 0; i < 5; ++i) + serial_out(up, UART_FCR, UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); + + serial_out(up, MOXA_PUART_EFR, MOXA_PUART_EFR_ENHANCED); + serial_out(up, MOXA_PUART_SFR, MOXA_PUART_SFR_950); + + serial_out(up, MOXA_PUART_TTL, 0); + serial_out(up, MOXA_PUART_RTL, 96); + serial_out(up, MOXA_PUART_FCL, 16); + serial_out(up, MOXA_PUART_FCH, 110); + + return 0; +} + +static void mxpcie8250_shutdown(struct uart_port *port) +{ + struct uart_8250_port *up =3D up_to_u8250p(port); + + serial_out(up, MOXA_PUART_EFR, 0); + serial_out(up, MOXA_PUART_SFR, 0); + + serial8250_do_shutdown(port); +} + static void mxpcie8250_init_board(struct pci_dev *pdev, struct mxpcie8250 = *priv) { void __iomem *bar2_base =3D priv->bar2_base; @@ -227,6 +274,9 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id up.port.iobase =3D 0; up.port.regshift =3D 0; =20 + up.port.startup =3D mxpcie8250_startup; + up.port.shutdown =3D mxpcie8250_shutdown; + for (i =3D 0; i < num_ports; i++) { mxpcie8250_setup_port(pdev, priv, &up, i); =20 --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11012048.outbound.protection.outlook.com [40.107.75.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D98E4347BD7; Mon, 4 May 2026 08:50:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.48 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884607; cv=fail; b=eatRDjw8kn/tyfjZ4ZiS4dZd3xPi/YDKVkUt1SOa4L82dsiNgZgiMPMd6IgNtvhSCJjn5HQgKRudrVNC6QjFCWchQqJxLtewqJ4QSxMlg9NXvuRGbRN02LZDD9s/PiMJE8TvOMhe7czoq8f5XA1k5KYIaCKqH9KPY1xp8eMM66g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884607; c=relaxed/simple; bh=s/CoqFRSvRQ7BoR2NRV3X8TiBneQT6N6oKJkBvojWy4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=hbWhzJGqf7Sv2e1H8Sta/nVHqAkhjnWyMIRcM4XtbdXjq5DNeQjiRb1Yy1UH0gd+iEd6MuIGw11fifa1o7TA22EkDvak2BbkeALLAPTez13ZayGzRaWPdnAIKS+YewM/VKs7AYp1jzEpst0HJyNgC6JK1fauZvsCkE6IZE7a4Ng= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=Q2JQlVK+; arc=fail smtp.client-ip=40.107.75.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="Q2JQlVK+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=N2TmIqxOstTZwMb4HZ1nA7usbCpFzwTHsn7zoc7BM5RsiEIF2E6Guvwxmrh1ShegRt4+55eNzVgjmgglXbrZx8Pi6/lxZEGg/wDV/kao/6thOQ1my50O/Y3kHDc25I9crnF17IZ4MzWpzuXON4lsOW0H3kTpxBJU2kUTpWjTH80SqqlOL/ZmTyi0SZyug+i+oNseqvNBArhORo6jEaqopkpvLL79neY5plEua/zCoUX1oAQ1+kAVKYUmgrJPRLF3B6Edy5xT0zfpRp7TtBNIWVJtK3V+At+UUC0Ryxdm+xAXj5I/k4aVjvdzl6eOgOXbdui9/pdx9RF5VpUOQW99Aw== 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=zjKuGHd8HjTQE6peK/KD9ozWXYBidJ47UlGeAfoQq4w=; b=N9gnk+/mIALjlP8e6D1m7T/uGzOBK7LBG8vkGawJAtrRsraGijGD+l+zZg7iHcRABT6bgw0eijzqHrBYqMTAUJ2PL6ANwo6jUkpcj+EkcxNBkzmIM156Ql1odWIpglKlsfxEIRx6iA+3P/ya3rmBHkH2DbZNhuWJCcmmK1wy5Zqena5ZJCBEsB3F+lSOBG3nww0Je7TT9nMPSx6bBzEfgLB41kLbtltaCkTOz3kIcyaA4ls8Tqx3JvUvHIZGOlSLJWRy6cj993LcPnxN97FYY8dRk1xq8KCv6a20/RljYHaRRJwdFeRC9hN28kiLSL6Nfk3QU7PPMIOxCfD/bfYeWw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zjKuGHd8HjTQE6peK/KD9ozWXYBidJ47UlGeAfoQq4w=; b=Q2JQlVK+CivjnZG26tYemEpGLTU3aRxVbMilBuVWaNinRLKe03L7AbxTb2xSuWVZzhO1hHFUO4l9uBUtZ2Jsd5KYNTIabg+pNM08k2QZuGLvI0D/DpSVu/GxlY+GhwclIkXQYci91TieOPlhfyhSsPfUcQ6L2nZHDsLBBGtNzc0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:03 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:02 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 04/15] serial: 8250_mxpcie: enable automatic RTS/CTS flow control Date: Mon, 4 May 2026 16:48:49 +0800 Message-ID: <20260504084900.22380-5-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: 8803c427-1c5f-4665-5d34-08dea9ba215e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: PR2yzyl89THaTRYk7GY1yXXtJ+euYMFWqgjXHnKc8rHNuRjl2wHpVL38ddoSi2mxDguszWd7PC8QXIpBeYTGEiLktX4lpVuvjXimRtPYuhFogqf8lBkghy43lDOtOb4bxWfE1siZFfH+L5i47GJK0zpWTd1KG5BwvnGUDjK6STyE58KtRngzojYMJ5NwSmyC6HfLMzAwKz68ilJ5OCw05oWHRD/bkXBDTivlCpQdB7JRdrH3KKd9g1mfHdt+8zRIxheYiwP3t8i8wVShm4M4FF+l+O1OudHeJuR2GENUPmlIT4eQo/A6xd3Sag5EaW3gWYTRlYq6B967cdhPpAzMDhl99gnJCPGHI3YV+ZHmhQlEN8BTLcZL2gvFEkXIJHUHEHn1i7Fq/9tQfEA/86fzpdTbIFZrqitZWCg1RKD0SMeNTEv+oTEmYjJMBvAcnTLaveOZ4zNYpj1CHdUeJ8MYBwnRKQpE6/P2LSl+JqYa076yas+n8oMZ0ejFHj/HhUB/v8krMDlizRwRj/3OQZm/NmhnlENvnj46KZqcycLBs75H+Cq6hKCEyMy6UbkffPpeua+hqXllBx0fO4ISHb54aHAxefaYr7z5dN3RQkF7/eEbxX1Vl2r4vnlbrnI9Hu8vTwm46bwtoATdc/lQFUtT7tLY1lFVM/KLE4D2NNqAUyQaX+4WO5m3Sgm4lylBjzywvrt4MU2ysa1arv4Fshkj7wUqeK1Er1epHxlzdFFCmkCPAZ2SSkRGq68YSsk6xMio X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HuQNxaAmOHS+GDGPJOn0H8sGJTa9vAsheT8+DPFY7MMkjO8zhLgAJzSADr1W?= =?us-ascii?Q?XAlHJeE+5ll4bhQVHGn8gypnqrxJQscDYwAu7vpw07DzF8ml7SsUymJsUs9k?= =?us-ascii?Q?2xJiP0DUmEGlj9njNiwiu/KhlaN+N985G6LsffQfSv96x7ifoA/rWhJN3emj?= =?us-ascii?Q?leO+wul+1klVGvzSZA0Hv6byvrjsjvnRt+uOjcMpb0k4HCX3PNH3GkTVTXUW?= =?us-ascii?Q?z8Y4Y4h41A6KG5SwN7/C0EDsNuWDiJrUP/2PO88k6Q3KWwfaMJDScqzZvxu5?= =?us-ascii?Q?6FQtnqqL4AnPHif+Q5XujFPzom5m3+adE+TZZXhmYwmnXBIp0vv6RhGk37IN?= =?us-ascii?Q?VQHQJh7Tx/Csn323FpLZvkvoWeNI6V9iwXkQovXFeYeBVKG5WhyiBp9XjI/i?= =?us-ascii?Q?mqmlaF1CPhbQtjqC1aweOHqXAnKdIbElr8riwG7Ie/+HqytTREkYF0vuJpVl?= =?us-ascii?Q?v+kW0dltVj4FIZQgu0kebAbViLm9FOGv91JzcwwHktf3WZYsRuZ6elXhhyeO?= =?us-ascii?Q?d7EX+4Oe5TeBalC0eJkmba6tnl1v8q13idEvpui3mQ0Q9uxqv0zv0PLVPKJ9?= =?us-ascii?Q?bVgiq9C8wRjHQx60ksU706SwvVG1yLn2CGDzrbFUk9heZUZTDjHayMpL74ki?= =?us-ascii?Q?o0ZC+/lQA9xta212JYXfdBefduS3o1JwGSffLJ6IeOYwQXK61FsDEht4guwO?= =?us-ascii?Q?6ZMTIv4yFxsY1E4z0pbKdcfM719CVFGichA0rvIOwEDV6SQkZzCEfFJuqt41?= =?us-ascii?Q?og4S9f6slAgsRI0YyfGF5bxav+4g9CAwL3z8XHvaegHnsZ3/YYasHuF0He00?= =?us-ascii?Q?5793k4ip0cUmsrDc4tyasDZDVEhknjzKOfvdG2WmcysH33sPI3uUdbQqM4MT?= =?us-ascii?Q?tN9HfjxXxbWS1WRlNCwP9fqWMh2LdCMwwQeAAbeLJGkQxFmwTc0foYi/a5uw?= =?us-ascii?Q?9oRuQKbIElls24C4U25YIRpblj8maMmmyg2VuawLMHcKvMkkaMMMBSQmVKI8?= =?us-ascii?Q?X3eaUgRDXgcNhSNxByyor92YCvZJpDPe1nAUwRdaayGfMIIAIW/x8KBg3rhZ?= =?us-ascii?Q?fe1C8KeTW1c4K4w/mhXWBfozzHbDKrig3bGDZZfgEr+CTcGfOP2cc1gDAXJM?= =?us-ascii?Q?+K1ppdODFWd+itZW97c4mnf1ucK5MYumIh/417HSSo4UeBuXjFCQc/6RiAK4?= =?us-ascii?Q?4lSDIZyK2P/AdV8vWP7xaeTZWutWGyBjRGTzgwByz4heJVLl5wIAaL0CJmQD?= =?us-ascii?Q?ok9mzZ7uvXJNnSuxmmWJca+pp1iPRdhSnF3GT5mXc16ryGnKT21sSy7h3PZr?= =?us-ascii?Q?/frLtk9uGl6P7LYvhnvS+U6XjhCFxbFwyItsNdhMgspX86R/S0m68Wb5PVZr?= =?us-ascii?Q?cJHZYc9/AbDnUbBlK/aF3f36I8B4Po9WEuU56K54aST+3rKSTks9R3EQHxDQ?= =?us-ascii?Q?dn++cCph0R9MWjI4twb3PWGAId0wo+UWTzqtWPIWgFlQf8U7DeyD3nDtLojw?= =?us-ascii?Q?C/OQanG1A8wx/wuVgyU6Ay6Ki8jp0A+L20UpEOsPSe532RIDvlQIjYV3wNfd?= =?us-ascii?Q?C3I8QpjGgzIfLKF79cdpZNDV3XhJat54AbLlUSsT7T6PUsJEiZ08aVTNB9v+?= =?us-ascii?Q?Dm/2JDZz+FUxcY5xHB/JGk+WAYsJHwT22CoYyJBEvngZSWiDcyWrh9h0iujO?= =?us-ascii?Q?WsQTE/0ZbnaAEnir9XCwNeT7O25DUexuOFcVwVP1dnRi66Jbo2LdWa+z7aYP?= =?us-ascii?Q?m5TjMqZPprH/UmBB3e2VmRLPpUwZqf0=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8803c427-1c5f-4665-5d34-08dea9ba215e X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:02.3337 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VBJJMQrmhgx05onc6SzlIpkOohtElFd7LZ4STJvy7VVvdCyo9uveVzV5SJ/ztCuO9rFdsw7YISSlpVSRL06CX60dog8izW489UXroF3SZfA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" The MUEx50 UART supports automatic RTS/CTS flow control via the enhanced feature register. Implement a mxpcie-specific set_termios() callback that enables MUEx50 auto-RTS/auto-CTS when CRTSCTS is requested and disables it otherwise. Keep the 8250 port status flags in sync with the hardware configuration. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 7ba96a954bb1..89086aa7b228 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -56,6 +56,10 @@ /* Enhanced Function Register (EFR) */ #define MOXA_PUART_EFR 0x0A #define MOXA_PUART_EFR_ENHANCED BIT(4) +#define MOXA_PUART_EFR_AUTO_RTS BIT(6) +#define MOXA_PUART_EFR_AUTO_CTS BIT(7) +#define MOXA_PUART_EFR_RX_FLOW_MASK GENMASK(1, 0) +#define MOXA_PUART_EFR_TX_FLOW_MASK GENMASK(3, 2) =20 #define MOXA_PUART_TTL 0x10 /* Tx Interrupt Trigger Level */ #define MOXA_PUART_RTL 0x11 /* Rx Interrupt Trigger Level */ @@ -146,6 +150,29 @@ static void mxpcie8250_set_interface(struct mxpcie8250= *priv, iowrite8(cval, uir_addr); } =20 +static void mxpcie8250_set_termios(struct uart_port *port, + struct ktermios *new, + const struct ktermios *old) +{ + struct uart_8250_port *up =3D up_to_u8250p(port); + struct tty_struct *tty =3D port->state->port.tty; + unsigned int cflag =3D tty->termios.c_cflag; + u8 efr; + + serial8250_do_set_termios(port, new, old); + + up->port.status &=3D ~(UPSTAT_AUTORTS | UPSTAT_AUTOCTS); + + efr =3D serial_in(up, MOXA_PUART_EFR); + efr &=3D ~(MOXA_PUART_EFR_AUTO_RTS | MOXA_PUART_EFR_AUTO_CTS); + + if (cflag & CRTSCTS) { + efr |=3D (MOXA_PUART_EFR_AUTO_RTS | MOXA_PUART_EFR_AUTO_CTS); + up->port.status |=3D (UPSTAT_AUTORTS | UPSTAT_AUTOCTS); + } + serial_out(up, MOXA_PUART_EFR, efr); +} + static int mxpcie8250_startup(struct uart_port *port) { struct uart_8250_port *up =3D up_to_u8250p(port); @@ -274,6 +301,7 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id up.port.iobase =3D 0; up.port.regshift =3D 0; =20 + up.port.set_termios =3D mxpcie8250_set_termios; up.port.startup =3D mxpcie8250_startup; up.port.shutdown =3D mxpcie8250_shutdown; =20 --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013061.outbound.protection.outlook.com [40.107.44.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35637347FD7; Mon, 4 May 2026 08:50:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884614; cv=fail; b=MjO/AV/yMjGSUO536uTtxPPDasirAAlw0zEhNdeUvWc8EoulF1/4KgBGRoJ32vQuV9zG6Pb32o0fIWd4hac51qmroAstgvi/xAYmiIKPC+V1f/WCask3am6DwjJs0WINptHWaUUhCJv5obC8Zm6SdKV0kd1PpAl/7eU3QiH2fbs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884614; c=relaxed/simple; bh=2BWMsQcviIAlYSd5qOgjA7zWJr8/zjEjk8e4RdhTGMk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UI7XsN7hPY6hcd8cM3wbGtqX3X6p4opR43D1Lp4KfaDvcmp7v9/LVr4BRo/D7AHXrSGCjdP7Dg3vB7OnLYVMqKkEYzcvHNPN8ZET7KUFOETissMqpFlosnw1slofE/jEtIT8372iz7D9CTzM9dQ9ABNwBUNyr8Ynf/roLGuPbkw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=GKsndMlQ; arc=fail smtp.client-ip=40.107.44.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="GKsndMlQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sne6fUCQG4LWlf+rxN8ZaKjHP2bz+k6YW29l9XZkfGKwkLuRfIoz77hrABzyOBnVRpkVniKqt/kdH7jXpW8GMlxbVOnA2D8QGAHNqs1Uea7R7RDSFt8j4GvbdX89wlEozOonQrPPL2aiR76AO2lEGQ/9sVkcr+qEGvAsg3tVyqlUcVrhbRqFShu0OXzL+WkTu0RWYWn383jgTjJUWx+YYlCAs4IQdoO1c1GMLhv6Q90zhTZFAAkZM4N4wuX6tQeIbUz5D7k8o0m2zDQmvw6J7qK0XARL+gDyuD+kUGnYEUPppQ+Kv1EFWci/Tdfc6plQXZhKmcVUCviGmp8j5YHfzA== 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=QpS3JLL9xGV6JYf+ZycaWbhs7LicS2btM2YNSYqn6wY=; b=T2vbCGkgGXeOlX8hnkCicPItZjDQe79ahF57Po9vZpr3MYdJjP4NDN7CmcLY+spaXXI3AS5K7Hb56N01I51zDaF3rQOmCdNHUCilEdIIe4ZakU6leClp6xgNzaOlcspb/C0e+IBwtx29WFclvv31VAuXG+vGSzGmVJFWUxCTEKXqDeHtfIlJoxcQBiPbi5AM3GigNyO9/GQg3Mie/QpolAnO3Lmmd3CJyAW2IUbNGpANii1Z2GIG5H+s+dV7+d/iJmrqojAMFMSdGNpTk3/vWZXTW0Ay64SyMdzNUowM/DgrW3cfYS+mTaQrMXSEsLI2CmdWrxLn88Q2Cq1FYrlENA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QpS3JLL9xGV6JYf+ZycaWbhs7LicS2btM2YNSYqn6wY=; b=GKsndMlQkcbyZFCXIcEbzkJefG8Tp11PIg92kcbqqdsHgfJDu45n+xJm52zeiElR/oZ7ezBYxIt7xtwbxuYdHpHofJalwBle76UhVxwDNp7HiI0LnZhdSAGRzCtW01grEen4FyJtpZ9CqzXXpN/W2Z9aMj6OYKKWs8AgABlWAxQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:10 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:10 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 05/15] serial: 8250_mxpcie: offload XON/XOFF flow control to MUEx50 hardware Date: Mon, 4 May 2026 16:48:50 +0800 Message-ID: <20260504084900.22380-6-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: 9f461246-124e-43a4-0bc8-08dea9ba25f9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: HRVdQuwc3jmy0P8Lb4xJ8XvOAeXkC5Z/lIQNcBQrbnPNhOIiRzgV0qYjwuwGxgWCFAP8GFoZ697VwBWD9XZa0CV3eHOMpUQ0i06P4VxSofX54FoyzssASkK8ZhHS2xp3I712bBHu20i0WBuC33I8q96weZ9HOyiFiui7vz0X4dE89aW6GHiV45osf9W9CTnn8UjGRKmc0IgY33s64opoYuP6sIH4H5e9XxFvw0WCjoZVW2XS8wRtcfxVYo5rWme+b8ba2ZQX1ws5HqY0fe40dO3R6Ww7B3Uj1O6LkArgKq7JAG3n9pK2EzjCXTNoLTdgY2z1w3nyP9rE75GXwii0iCk8J1ZARneRhbgBunE1wXYGEwwcMu2rWEg/6A5qO6nj18ahuCGroVFNXgdxsN88mvEQzbvHtYgXcxIZORPa3njZglsyekt2e2FftZ8S+/DfSc4b0buOAciuSryPAdxTwvfDPPE9nowMTIumX1Z5HAZqJEBlHhcFAH0oji2dz+Zj94bsRnIEqKPOBEK74BvngR/F4t+fdKrLLFPp0VqH86uDprmBp+awaFdf36+DHIRb/ywX3E/4KJZbOiPVxvFINTCKg6zxsJDgxvXwY+9ywlFmOvlLSWQXziWXGXBg6V7+Vf5syP0RGqEeR3TCdtpgYYmewiesrlNbXaE08SnrlWyc3O5w6E5dzs9rtMa91TmQM5dPQO9/K2uKqXp46mxJhqXcIUHm5YW+B9byeR2qVPqqC0nbHMCHuiS1+gqG/+kH X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?selcoiXpwcsakk9OvQpDbbZRt9iivfbCMd72taYotiuZ/QAnSJvl7QYGKjy9?= =?us-ascii?Q?4ct9NfWbQhnLGOgUEGV828Y+154pIYdgDKzd8QI8IYMTdY0L7ejyZwCTU8wJ?= =?us-ascii?Q?0HvSEn1EasycH84cGNNRmDFyEGKf+ldBD4kSAbuz3XDPSgqMfylWaS5wpCdh?= =?us-ascii?Q?BzidEaBDp2UXsPoBj7Pjqgs45qFFbKqTX4y8UiuhKTuEqivhHGz0QY6pwyT9?= =?us-ascii?Q?tzjEeYX1ffxrUT8H/5lAeQo25woAxakAu1GrlrO2GjRRSn2+p0Ek9355saFe?= =?us-ascii?Q?whRdWewXoXix109vMqllzLdJFumTAPYWMmG2bjqarZE6N9OeHErnoyK9spG2?= =?us-ascii?Q?4r9NQoXVoXy1tH0uhS17w6IPitjwCd2+anr6vPa5fJXt+LBDWiWcNcxDI41b?= =?us-ascii?Q?vFVrsvgPdriEAHa9N+6UDw7Ej+OazbsblcNTVEAaOCY44DYphs3dmARZ1tOw?= =?us-ascii?Q?Q1WbT6HNJVLKcnAeqdhcyag0iXA/vRHphewImIvMGNZ0BvSewm86WJGcnCbi?= =?us-ascii?Q?cr1h7JX4CxO4H5awAFw2PaS87lycqNoXlH4i/3wt1jwEenV6mxsZIhP+D96U?= =?us-ascii?Q?yMEPNS91vmDnEgyX+EM7w3KOaFAlYCsi/ffRLAbZ5RzEO3FOnxw2Twvr4hX+?= =?us-ascii?Q?bZFgE8AFLpQfi7/vpLNuCNBmsyPHsjW/bCU5VJpBweQru1jWNOV8EInrZkYz?= =?us-ascii?Q?osND4h3gMjG8uLYNXPOntl5MtO700hY3PF7GAMOEUSRt++UcExORhYsT1zOM?= =?us-ascii?Q?TXL2Uv+cush4WQK7h/4ZwwtRR7Wg2+0VAkWKT835VwoIkg1j4j9NLbrxxHxL?= =?us-ascii?Q?6/saCm04NzqGDDGHVnoUuqq1JEu6TiWvO+D0+OMH82WdD+QA2AEbxIkSpBDl?= =?us-ascii?Q?5bgTZ5+eKBJDiBvF4vRtZK0O+vxanMY0UwbiOGvVgSO0tT54goKZViY7y64Q?= =?us-ascii?Q?pVAkT/1AmRzWFhynNYq1GjbZ3eYh1m3IOXJ0iVVFlwP09SStaAubREwVStCx?= =?us-ascii?Q?1SAR0CeJ1WD92G+dtrwBcM7pCKiqDpczCX79vKcdV/S23OVMaW2juXrbCNkL?= =?us-ascii?Q?XTLk+0aYP2CUOC4zLeZBkqxq6lcDCR2LiiWyxzD8AitfiX2B5B10n4ZZLSml?= =?us-ascii?Q?ATi6m9hHRovF18nXQVo3vLOTjneZzgu1dEiIwicqsTsa0UHAk0Zn7RKS1qnw?= =?us-ascii?Q?mQyPvMXBuUhhAvloS+EdgY0XbFMlchZLZPxa9WdJFbDCHX5Tv+7/D21Fnt0r?= =?us-ascii?Q?k436H15v99xcfXp8TP0+k+5R1h4HH9L8mt8StqOeof0maa5S2J9W3UHAKSo5?= =?us-ascii?Q?KnSA/zSrTCXRl9Vr8Q6lDQ2aifXy6JZFnxv8VZDHpQo0QQqv/X+QNx9QuVdR?= =?us-ascii?Q?jfUSRZGocN6rFNipnP5f48b7QQzGZPWOEQw3n5gCRPMSGoC1nUCgEict7yx4?= =?us-ascii?Q?MjMg/a98g+tgpzR8YiDBT58Cbim9kNNS8nOIzmT1XIYxRTRYLy5vC8hJbk8g?= =?us-ascii?Q?Pppbj6iTbQKP2Czdanb/O/CkIVqvx3Cb+AExllisGeC+rwOMS1LlaPAQ5J+B?= =?us-ascii?Q?1e0+7AiDIO/GtjW6bjCAGR2onhl+CLX8ySoNByneLfWV9yV2UAEu92aY1iC8?= =?us-ascii?Q?tG5o+LQ8w/FygiD/UL9etjp4Ui75hUO14jj0FZX6r9t44QRivImMVnIZcS/q?= =?us-ascii?Q?7uXt7tkwtoZ27b5xz4x45q0sUjkC5KonTUVn763Cco9POpJslRm0kh7NrSkU?= =?us-ascii?Q?kHb5/FLHK0iPaFu7Sb2MWD/SJfXgA9o=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9f461246-124e-43a4-0bc8-08dea9ba25f9 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:10.0879 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YKzXwFbiVvAUm0xvhhU4JyyxE0Rr2z9GDE+y8OE1c35keHLaknD2WLghkMqiYi9RCoHJ8StyqmM2ptn4+dx0WfvxvO/u4eFcih+aTWUL448= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" The MUEx50 UART can handle in-band software flow control (XON/XOFF) directly in hardware. Program the on-chip XON/XOFF characters from termios settings and enable the corresponding MUEx50 flow control modes when IXON or IXOFF is requested. Provide throttle and unthrottle callbacks so RX can be stopped and resumed cleanly. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 62 ++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 89086aa7b228..99fd789b7665 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -54,13 +54,31 @@ #define MOXA_PUART_SFR_950 BIT(5) =20 /* Enhanced Function Register (EFR) */ +/* + * EFR[1:0] - In-Band Receive Flow Control Mode (Compare XON/XOFF): + * 00b (0x00) =3D Disabled + * 01b (0x01) =3D Recognize XON2 & XOFF2 as XOFF character + * 10b (0x02) =3D Recognize XON1 & XOFF1 as XOFF character + * 11b (0x03) =3D Depends on EFR[3:2] + * EFR[3:2] - In-Band Transmit Flow Control Mode (Insert XON/XOFF): + * 00b (0x00) =3D Disabled + * 01b (0x04) =3D Use XON2 & XOFF2 as XOFF character + * 10b (0x08) =3D Use XON1 & XOFF1 as XOFF character + * 11b (0x0C) =3D Reserved + */ #define MOXA_PUART_EFR 0x0A +#define MOXA_PUART_EFR_RX_FLOW 0x02 /* Recognize XON1 & XOFF1 as XOFF cha= racter */ +#define MOXA_PUART_EFR_TX_FLOW 0x08 /* Use XON1 & XOFF1 as XOFF character= */ #define MOXA_PUART_EFR_ENHANCED BIT(4) #define MOXA_PUART_EFR_AUTO_RTS BIT(6) #define MOXA_PUART_EFR_AUTO_CTS BIT(7) #define MOXA_PUART_EFR_RX_FLOW_MASK GENMASK(1, 0) #define MOXA_PUART_EFR_TX_FLOW_MASK GENMASK(3, 2) =20 +#define MOXA_PUART_XON1 0x0B +#define MOXA_PUART_XON2 0x0C +#define MOXA_PUART_XOFF1 0x0D +#define MOXA_PUART_XOFF2 0x0E #define MOXA_PUART_TTL 0x10 /* Tx Interrupt Trigger Level */ #define MOXA_PUART_RTL 0x11 /* Rx Interrupt Trigger Level */ #define MOXA_PUART_FCL 0x12 /* Flow Control Low Trigger Level */ @@ -161,7 +179,7 @@ static void mxpcie8250_set_termios(struct uart_port *po= rt, =20 serial8250_do_set_termios(port, new, old); =20 - up->port.status &=3D ~(UPSTAT_AUTORTS | UPSTAT_AUTOCTS); + up->port.status &=3D ~(UPSTAT_AUTORTS | UPSTAT_AUTOCTS | UPSTAT_AUTOXOFF); =20 efr =3D serial_in(up, MOXA_PUART_EFR); efr &=3D ~(MOXA_PUART_EFR_AUTO_RTS | MOXA_PUART_EFR_AUTO_CTS); @@ -170,6 +188,21 @@ static void mxpcie8250_set_termios(struct uart_port *p= ort, efr |=3D (MOXA_PUART_EFR_AUTO_RTS | MOXA_PUART_EFR_AUTO_CTS); up->port.status |=3D (UPSTAT_AUTORTS | UPSTAT_AUTOCTS); } + /* Set on-chip software flow control character */ + serial_out(up, MOXA_PUART_XON1, START_CHAR(tty)); + serial_out(up, MOXA_PUART_XON2, START_CHAR(tty)); + serial_out(up, MOXA_PUART_XOFF1, STOP_CHAR(tty)); + serial_out(up, MOXA_PUART_XOFF2, STOP_CHAR(tty)); + + efr &=3D ~(MOXA_PUART_EFR_RX_FLOW_MASK | MOXA_PUART_EFR_TX_FLOW_MASK); + + if (I_IXON(tty)) + efr |=3D MOXA_PUART_EFR_RX_FLOW; + + if (I_IXOFF(tty)) { + efr |=3D MOXA_PUART_EFR_TX_FLOW; + up->port.status |=3D UPSTAT_AUTOXOFF; + } serial_out(up, MOXA_PUART_EFR, efr); } =20 @@ -207,6 +240,31 @@ static void mxpcie8250_shutdown(struct uart_port *port) serial8250_do_shutdown(port); } =20 +static void mxpcie8250_throttle(struct uart_port *port) +{ + unsigned long flags; + + uart_port_lock_irqsave(port, &flags); + + port->ops->stop_rx(port); + + uart_port_unlock_irqrestore(port, flags); +} + +static void mxpcie8250_unthrottle(struct uart_port *port) +{ + struct uart_8250_port *up =3D up_to_u8250p(port); + unsigned long flags; + + uart_port_lock_irqsave(port, &flags); + + up->ier |=3D UART_IER_RLSI | UART_IER_RDI; + port->read_status_mask |=3D UART_LSR_DR; + serial_out(up, UART_IER, up->ier); + + uart_port_unlock_irqrestore(port, flags); +} + static void mxpcie8250_init_board(struct pci_dev *pdev, struct mxpcie8250 = *priv) { void __iomem *bar2_base =3D priv->bar2_base; @@ -304,6 +362,8 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id up.port.set_termios =3D mxpcie8250_set_termios; up.port.startup =3D mxpcie8250_startup; up.port.shutdown =3D mxpcie8250_shutdown; + up.port.throttle =3D mxpcie8250_throttle; + up.port.unthrottle =3D mxpcie8250_unthrottle; =20 for (i =3D 0; i < num_ports; i++) { mxpcie8250_setup_port(pdev, priv, &up, i); --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013055.outbound.protection.outlook.com [40.107.44.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D83AD3368A8; Mon, 4 May 2026 08:50:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884621; cv=fail; b=IYWRNTI9Mr0rIB06MOXL0DCsQsuFKA5SluRDVph6DDMm7Uhn65841GWAOzp8rfSNGyaTIInFjIeKjkuJxIDjpl3k2891apVYmCxc7aZ/6DgMR0VP1F9bcov6B6Xwwww6nVv2LwGtpnJbMAvrPznmo9q1A2pMJv4LhUfbsob77wI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884621; c=relaxed/simple; bh=9sFkUnpZOf4lFlsUISHLPqvlQ6peziiqPc18gueOIq4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=N6CQjkmWf74qi49bahJI0wgiWP57LwhSrcsUYo9dsdlMFsOj08bX8Dy8mZGi7XQfD58hvDpyv9Dl8vFZ/JVEZbF/cJe6z0rJTp/A8xHIx5BU8Xc5dQx9tBaU000YTTO6cyy8gazP6Q0Z9/w7Le3c4an1gINn6r0XY+RjFtWHAT0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=bDhH9u+z; arc=fail smtp.client-ip=40.107.44.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="bDhH9u+z" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bKu9XTPhgZzbHoi6O4aEiWnLR8LEr6INk5Wg63B6RR1l582s6yi7WgMcCSonIYADdZ0tL7+mMkugE56xqsn9wd9vDiB11TRBr0w/xmYwkPK9RK6lUK7VJev4FGQPdwL0wOeVHAACPZSaku63OZ9gqxQdBuUY0ryMP9kgFlvT2F9++QqOvrVPZzvIMj7zSIZ3eWEOC+js3AqqAxyo57Ui94JlgwhWEdb+2FV3jusDHSoNP/lCR4fIB3VvcDlIjvLAhnXgneId1+dRuJXwlDRjslfWAtwGeQOwuFisoKfTaJ4B84GRD/D8ituL8OdBFY5jyNKVa5E7H+/qLJNqCjc1Hg== 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=VnKc3D4TFsTjW7cYP48eslv+rfVSlTgJqEWMbJh0vAY=; b=l0gwbc3+P6Ajnlu1mBEDxFABTZ5l2APoINscr50zGUULywA5tlqHngSxaWsjedS9H2dobXda1MUl9Vwjva3d0P+CHEoreBFYANNKWA5/RlEmFqhQwwSHSIKkDWQcGBhA6ypjie7jOPmpBHxnEn9NhjspZHU9O1AdHL07Dd2dRfWz483fB9D1Txsaaa15OXqRzbAhVfBeqgfKG8aKMOQthv77Nyxz1VKV4RRfqliGKjE8vqp/Kah4Xg1hqPv0w+iG7iYAbiCyP53eg9c0pAFArEINErCjtAvOkQgvZRL1NWt1cEhDls1/2H0OPOV93SPSffKb0R8u4ODCqcTWNOOsPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VnKc3D4TFsTjW7cYP48eslv+rfVSlTgJqEWMbJh0vAY=; b=bDhH9u+zVOXneFg2c7xc1jmumXgyk+fq+v0lxerVRyvoCQUE/9HlaKkqqN7oQC5weKo0f8H4LosLsp9Xr0RseGNLnZeb33ntkksQ70u9P04pTlkOhPyQqzAFdyEoTomcs8XQCfJICNIDGBwsm1o54NqBpzMLtIOjFr6qGK5l7eA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:15 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:15 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 06/15] serial: 8250_mxpcie: add custom handle_irq callback Date: Mon, 4 May 2026 16:48:51 +0800 Message-ID: <20260504084900.22380-7-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: d0a7607d-38f4-4e32-3194-08dea9ba2960 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: DKpDvPH0QZlENtibAbbh1r4MdNnvuYJ1WnNO2ZVrkDTDRb5sXznAsCGit+4s98dYo0yaSz8jnuCfb6GvXYKDZbfIWyWOOaC3PLU8fhtflnZL+K2a4zzWnUOYNRkFWn+xyL0NRu0DN0fT43HjTAlyQ/O73iWSKwvCFa8yzWOYgqF1PgSIwd9Z61hwyvnAehj6MdmcFBQMNa4ywgDY3KC/KWczdOhyeCemWeR4IsaS3zgrPEEMzQEzicd5U9qS4iQYGW8ARHd5kbfWqheSeM5py+qDxEgQn2dwxBn+t5FoxqO9MsCfowgYOGJcwGg7IbyynTvUr9lSlmcDrjl//e6sQjwJ4+7x0IYpdx5GDfLi+GYFO+joxEwyU3Nk4Z7KRfDmWUeQCXzAGtocPBHeSDlyD2dBbXz6hrzf2ixzus1do/Q8drXAgC2rZ5i3mUmBpikeWKF00s9CC7WQRPOIAPsPzNdwlXBsxz+jykr6xJpKivW8PWoUPGFnMXH+sYEwDDa0ByjUSmsgroCmmUSvJTk4DTS+XbWvJq9+NPfYePjXFl92OlOlrOouOcVjSp0jvzGKZ7+TfSuQoqTSCc0TP7DGVXV2wjMk4qwzVIiQBsywp0p2/Y8AsoxNdoweAwCeT6Iv2Eg1L5UMeV2iL/KdgRjlMKr0WSpCLpXYm2WOvVaHChEAaF7gwoPtJFXecTMRNzdqVYXbhwP3jw70PTBCgxeTWGY2Maca7DZxRiBfiLBh+bsWf0kOu+awoT/EdK3otmJB X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pusObHgdlFbjINJJyRW6ynguBj8QmfS3Pa98S/Ce3ZRpA5FYnWBKlmFHAw6X?= =?us-ascii?Q?zFCGA8zrAazCROhgx9W3sixm0/HAKodhiFIVWMdnfpiZIOjVrqrsf77swK/h?= =?us-ascii?Q?yJTLmO4QZ2y6F8jbyQ5t4fK4rsZ5nKrB+CRPPuK0XEF5xdK1tJa3l84eVAsl?= =?us-ascii?Q?XksrtXYoY77nTaUvLcajbuEP5JD3FLdJI2+ActavP8RoQ4WViKCSjmaWRy/b?= =?us-ascii?Q?wlZ56vCI3CcaaWfzBzZwMEs8V6NoDh6qdYg9tohmhjK8djhzJR50GNQORPYA?= =?us-ascii?Q?shkwpzc41FgkbBXVPQJZjRG80PZb8FYJUDddDMtSAVcvYF3eQpZirMzi9jLe?= =?us-ascii?Q?sU63UcSahN55JkpKfvi9xOHu/oduJFO/PfgPgoUtUKoY2UHK0s2+roW8oGD9?= =?us-ascii?Q?G4MK58R2KzVQhTdjLQtyMYnIcq2ERAWOqzbfHwudO0ldkUoUrA3kCLFY72WW?= =?us-ascii?Q?bIRvIf7Suq9Wfij1a59RIgFbj0CjEoEEtEguS7nVivvuNqvXg457ouVHQBBI?= =?us-ascii?Q?89kxIUlol2pjbuUVvIV/QQrwqb6JWEOM9XRJWhL0wOx6uhhNYAMNbtSjm5Mt?= =?us-ascii?Q?9AxWYqn9D3JP4k661tKQuFic6KL4Iw5uZ435f338oIRo6gRGSioF1yvhiHLK?= =?us-ascii?Q?Iu5rmdQFFu+3yRrh1lnknz20qTeGj8NLgtMcQdqwkbNsdSjyRoM/Ff5w7Eu9?= =?us-ascii?Q?64hTiDH/ow9aHeGEMcqragAS89FUAxlikqpt2QhxWcExTpUer9hxTsZRvy1k?= =?us-ascii?Q?PM2OUJiVfF6RnpS64NJ8QYO8jS4DL9zLa4kwThxqvkkGFfLRFD6g80+iPLRx?= =?us-ascii?Q?f36TGcx2xDeT7YOJ5YpLPBVl1gjDS8ZgwpwyeYZTP1UUEPH9v/y9fQux1MOK?= =?us-ascii?Q?NQuaAl4t/tduo22lrxvVIW7OT+oRUMNlys5cE46QEZO4qXqYXvv2LARoq9Nc?= =?us-ascii?Q?tv88lRNn7TQyabUVJEznVzL35Fl+Tss/8nkwD2Rs6INLmaMiGr9djreTYEEp?= =?us-ascii?Q?wNHWxlZ3CoJnIvWVPX45eXQi7mKrHatspKsCr2R1idSd4h5QpP/rQn5IPDSD?= =?us-ascii?Q?WlBvdHTjeC0MsCWIMXBrKEMqltp0MRmaM3UwC4KUxGfR0KklS79hezAVjVZN?= =?us-ascii?Q?oT7Hb27IDq3TcecZe4YObtXZjK8R4hV0qWeIr5CgVVfTMUAoe8Mjusog7/8J?= =?us-ascii?Q?7+cu/7UvzvjV2VuKkEZbfzBw0Lvvtxw75vLITIvSbaSR6qw2EkLdc+meqmAe?= =?us-ascii?Q?MzkrgTdAc//eCs8OuphGtYzbA5+xjLiZ89RAG+6ezsh+y/xv5xDlWzY/rkiz?= =?us-ascii?Q?1Km6QFwiOTlsKHiRxWpBqYRkpYm9JfyiCCAZUDFK7fQxefVoeRDuMklu5V8Q?= =?us-ascii?Q?sUHPWsmvfTBhA3Afil7GB2Y2l+V9n6IELNbxF+4KWWezIVOn6F5Czcsk28Nc?= =?us-ascii?Q?UTIMbiyer/T4jrLHq4U61tvgR7N/PN0zoCzAkNI2+kv2jCx9cu4qnUOwkZAg?= =?us-ascii?Q?1xw6rmaHORJCCuXAW1wyUcKxgA+Senqi6K+zag7YPWRtMhoUzrvm6ygeLWKO?= =?us-ascii?Q?2dYVHRmMjPXmbOymNfSURIGAqYWtIYeyYlm739+Z4nYppyPmN0gc8e+686+4?= =?us-ascii?Q?ey/HxgM2O60QoaqVchqMoFWJmcOBSk6thpCTD6Zu40PCsKu3rJVO2b9k/koF?= =?us-ascii?Q?d+VoBtf0tw5t363e90lrvUtmCEh8RRf8PBcpMyIZPWO7EFqnJmJD5Hpn2pN+?= =?us-ascii?Q?44xRut0gyLRP2cNVH+B42tIu2hAg23E=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0a7607d-38f4-4e32-3194-08dea9ba2960 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:15.7694 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: homCCvJYBEyBxr6TlzU1IMMiJF4PusMdiDI3DWvtI6NzLM/QL2+SuLZdUBLmq2IkyB90vo0aBdK8/TdPSyUT/yag3uCp/8gfQLdaVN9Sa38= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" Add a mxpcie-specific handle_irq() implementation for Moxa PCIe serial ports. This keeps the interrupt handling self-contained in the driver and provides a hook point for MUEx50-specific RX/TX paths added in subsequent patches. The handler processes RX, updates modem status, and handles TX when THRE is asserted. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 48 +++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 99fd789b7665..9860f2ac2572 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -265,6 +265,53 @@ static void mxpcie8250_unthrottle(struct uart_port *po= rt) uart_port_unlock_irqrestore(port, flags); } =20 +static u16 mxpcie8250_rx_chars(struct uart_8250_port *up, u16 lsr) +{ + struct uart_port *port =3D &up->port; + + if (!(lsr & (UART_LSR_DR | UART_LSR_BI))) + return lsr; + + if (!(port->status & (UPSTAT_AUTOCTS | UPSTAT_AUTORTS))) + goto do_rx; + if (lsr & (UART_LSR_FIFOE | UART_LSR_BRK_ERROR_BITS)) + goto do_rx; + if (port->read_status_mask & UART_LSR_DR) + goto do_rx; + + return lsr; + +do_rx: + return serial8250_rx_chars(up, lsr); +} + +static int mxpcie8250_handle_irq(struct uart_port *port) +{ + struct uart_8250_port *up =3D up_to_u8250p(port); + unsigned long flags; + u16 lsr; + u8 iir; + + iir =3D serial_in(up, UART_IIR); + if (iir & UART_IIR_NO_INT) + return 0; + + uart_port_lock_irqsave(port, &flags); + + lsr =3D serial_lsr_in(up); + + lsr =3D mxpcie8250_rx_chars(up, lsr); + + serial8250_modem_status(up); + + if ((lsr & UART_LSR_THRE) && (up->ier & UART_IER_THRI)) + serial8250_tx_chars(up); + + uart_unlock_and_check_sysrq_irqrestore(port, flags); + + return 1; +} + static void mxpcie8250_init_board(struct pci_dev *pdev, struct mxpcie8250 = *priv) { void __iomem *bar2_base =3D priv->bar2_base; @@ -364,6 +411,7 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id up.port.shutdown =3D mxpcie8250_shutdown; up.port.throttle =3D mxpcie8250_throttle; up.port.unthrottle =3D mxpcie8250_unthrottle; + up.port.handle_irq =3D mxpcie8250_handle_irq; =20 for (i =3D 0; i < num_ports; i++) { mxpcie8250_setup_port(pdev, priv, &up, i); --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013024.outbound.protection.outlook.com [40.107.44.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63FCE34A76B; Mon, 4 May 2026 08:50:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884626; cv=fail; b=oThrMGvzDDCFQL4kAVbSsRwcNmDlgESXmGWhA7r0TgxwWisiMY1iwADJD9vnUl+5YHxDGY6x8rg0mP17Ch4l9c+tIkcHl0+V4bo0ZJwe9U6kAOUbyg3z+ZDluhzB4MePmnRwgLKnv8y0e379Le4Ku3rFLjlNUTBxyxLfjXd+3Qc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884626; c=relaxed/simple; bh=xKBvLkqxDtv6U1lZnKgvraOQEB+TSCDuSM2rdJk6Wl4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=n+x2CiSXPaCK8l2n5qLvQspicaeHOPxzTzTGHhUxMcUM7vYzknGUPI4d+UcJ5HHj/uBMdXJlA9sWzGM7ORb6iixfE35a6cgZ2EhCeKm0aoKFW8ymyjp44qwZSGNYurX6QOmz9R9nvf0cz6wippAeIfCdoMOss0C51dS39lvI9JM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=aZGTyxYq; arc=fail smtp.client-ip=40.107.44.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="aZGTyxYq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Msz34k2KQwPmeGK/VZjOaZLw8TpdJGDywGpuL/iGxV6qs829nMdY1vlouv01b149IB8GMyFOQjGjI2Vmm7yILfUizlIsbTjRhLPYwQBnJaak2vOZNLOnRoDini/AR/XpIAip7Wf4FwNv/IYC2hFjE/1ktUiYbSxP1qa3u0dDQkLLTiA/Gk/6DNJvRDbw+zZ63urVFvHWxN0P8AZ1pS85Ob8B/R6Zx7MDa/ahRTqoj/GDpMkPnOQTyagZZrY6YMviJVnFlMTHMGcWuIhDbQvTORGyZFDUfDZaxT1FdHDPCpPNdDxiH3UXrEGilvG9Dcesib/4yD8O0LvsA8o72n/PYQ== 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=FZZykS7L49T+f77OFZ589/58pChY1UbheilEgTp2iFQ=; b=Kl7hJl6RaGl06XIBr1RALaLGNVq2ULdtHfQuYt/Tk35PQoCX3MrrR3BT0EBIQ3w72X5urrr93o0KJ1p3LxGiVTLXS2M7XXzAg+0DPZQzCQNiWbCSS7w8T17olhjtICe1HG7+s/hlJFgTdG3trEvFtstTBJ9ClQlqjElwFD4tZiGui1jxqxJS5TGuXuic1RTgs1yuowvZaVALkRPe5tdb5IYC9gZun06W8luia0dLofWbtEOS7onnNxAwKkh7vV92yFLWWjGOARb2xSCd/rKWZt4kORLmy6SN8XuDnIMCBX7FZ1P42GItGpwpK0I3XDmlLP3YlecrzJlY6yo4CI5lpw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FZZykS7L49T+f77OFZ589/58pChY1UbheilEgTp2iFQ=; b=aZGTyxYqf2vhhhqbcfk1tWCQovZtRS6bLR1t0ttNpGEXmexIAFiLy+yqUxl0gN/VCeOYfruyGwnUYYlOI05hoKFsIZ89YcZrOr03t3Kbj9dHJ3ZFHcPh+SFl0f5+KiMm98nY4/gnvHNCvZGlX8NquEcnuC+1l1S/6rPPX9MnUJg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:21 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:21 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 07/15] serial: 8250_mxpcie: speed up RX using memory-mapped FIFO window Date: Mon, 4 May 2026 16:48:52 +0800 Message-ID: <20260504084900.22380-8-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: 48520837-daa9-4111-4bbf-08dea9ba2ccc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: kGtlax5CAfnWNX9J9I20KPUZW2wojInbWJf98etVA5E8wnPsZyuJOr9ds0FMprHF8HxvIH2PRADk8/9LF/rGlYoG7qBZcO9JsoGe/JiVrYK5w7VrX2UE/cAYIWGZBxWcxuCUu3KPuhOAhHtzcSpVv9GLevg5wo6QsGOe8p1Llk9w6afF/6Gxsy8513OLgppTYSw8kDdL6kIdVGaS+mgLYsWzYzAfJ3PbIc43lYLUhDif0rKj5uj2XCq4/nwzJTzE+yKPU+kmrPUNVVuvubnf9TiVaphWsACgyqIoOxDOFAjKvZJQKReUrEVxVWPYFjhc+I6hONOMKTYte3hW4OaEhFiym/pHaTzcq65s3lepzzYtBRWZTDM3+3/cvzek9D//tr0F/5HXpJ7oMov7aGDiNRzVmsYJTIxuut8gveB7ptkQAV4hnF1fc5f/K1TAdmbhuVrbDvG6DAJqoKEOVxhMxsCemh/pqto4dfXuxe8cKjyq8gDf4FUgfablipHIBjNp4l3AiYGGbiBfAuqfXShOgG0ZNngekgC/59CX0XphCr8ThceLN6H9yYd0habR6KDHTyXPCXu5f06IzYbjR0myTN4oGIk3LNdG8KqOdrjD4D7nA41U/j5omeZgVSqP5lzdy+LACskq4t2tTTjZM39RLUK5o66rU4iBpSqN1UG6NInZhDFgwvA2NPN9gab2sso4KtpySG+FUn+RMkfxVjTk0LBpahZ5z7P7KjJf3QOWtEC6x52DFECPX3QlBRu+tmK2 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XvaqckGqu5PRZfsYSZS5JP57Ibciejz5mrEPZOVguQMEg3B3BzS0mT8qCGxt?= =?us-ascii?Q?FRxsoG5MqLLjqDnimcWtUQZQs6H92UF0Q1385b87cAQMWpRsGAwc2bxMaZCE?= =?us-ascii?Q?fEgOtKSO5qQ5NsiFS0kZ09h7APBIJUlkIXYarOXBjYoU12RPxW1DE4xxP4Fy?= =?us-ascii?Q?8dQ41AnHU8tMbFKYYyiTxU8/u06zd0wEXhsjGcDTnIoEt/tXOgp336JEbeSX?= =?us-ascii?Q?CqWMvYcb3FyOZw/PMJyuX0pPWsm0T0QHJZBseBjLA8W7V2lyEQP+/apoEoiV?= =?us-ascii?Q?9cWPJQGUOcLS7eADgE2ImJKgd5y1PKf2fsiTrAPOgVd+lx/xdHKysnFij2rD?= =?us-ascii?Q?LrdwXu1jVmJ31vt7rR41zwkNEkP1rix1+P2mUjycrTKDj5LWzzVWPMcEZWp/?= =?us-ascii?Q?WbHPEkURx5gVUYGsr5IIMTem9Pcs7HgN1g28iooJfb5NvPI6SKcC3LVugVKp?= =?us-ascii?Q?n9sm6BgaE/oPfno3olgRRObOgQEyelU39KteFwwFmpqag10jKf+a11Wvm20k?= =?us-ascii?Q?2wsQMgaYQech5KgABof7MPOGNBZ/5tvweVkPHx56BR+AtmOHeQrKzgyB58bq?= =?us-ascii?Q?+qnJ3SiylJu4nMhsF9uA7cQDtFAtqi5RC3cV5kYDSHgrVJNJDhPVXp5hp1uZ?= =?us-ascii?Q?/lydCF4R9kWhQJqbJKbA8dXfc9/WTrfKIYzlDSMcZkTBDFHGzmGmB2S7VqII?= =?us-ascii?Q?KxEtlpdVlznlry2kzSY1rf3PS+XjG6RlPODRMqf7TgN8YCLThGmCzkrgfRFy?= =?us-ascii?Q?NsRqqVEhyamMgWPh1xnamw6/m/+3ceU/bsTtxOko8bHAIdNN1fIrR3yyxPaH?= =?us-ascii?Q?q34rNPgzTZGHy0swA7/Kux75rG2DeLDE7wi6kWv9sGu5RZL0OyIzzGSm9Lej?= =?us-ascii?Q?hMcIue9wRNy2yftax43nHw+iD2vgYzbU96y4kxLXIgncJfFGEgk+gdxfZI+F?= =?us-ascii?Q?kdPkSeYk2Gn4GW0TZS/DWHqrRIG8cKTkJY/CvxmTyH98su9U1TeLYj92XlzK?= =?us-ascii?Q?OBXs2fJ004e/itGRRaOe8M4pC3JxcQ8NXUTFPML0IbP4NSzNdTmJU+FBp+pV?= =?us-ascii?Q?FUNfC1NBSDWqHwqORpbDQcu6TzeHSyD26jZ4Cr2h+eQf+PPX+GACNskAAd50?= =?us-ascii?Q?NTb4wIRKsPD1wafr4PZc4/X/zDoyZqXYm7yrlhOPybMiDwltMrUdtB9Affmf?= =?us-ascii?Q?4BOGIdFIY9Jy6BEVOjl9r5Mez/OxR5mdL9PBxNGgY+Z3ySZo+OMH8Mu4veI1?= =?us-ascii?Q?ceLwhLqZgiAI+PFxDfAUKTxwQmtvuo4A2Jcg0Z89EnUP3+OLKL1jI8CyuNa4?= =?us-ascii?Q?Xv+SHjgNZFe7p6l9v5HD2G/Mykdds5hPIM5q6m5tczBI3X90C++wRIqtXca2?= =?us-ascii?Q?iYxd/Hmtd+qzvqA07bKI+Y5WuX0J0BNEzGKC3Ks/m2fwoUo/9B5WuD+zeoFJ?= =?us-ascii?Q?noalrYtt8gpWBr1+RR+6oQaXIQGHdLqVPrss0nelf4BGAigEdm+GuZToxaEE?= =?us-ascii?Q?hORrLF22uRxeCPreYcSf7nN6DvsYULplsCjMeGKSv6a6LMY2KIkcRigvNUb5?= =?us-ascii?Q?h7qX4xAVO0e7M4UMSj8HrqmBJ6OQ0BlPhYFGkmTL/4viW7wj6Rq3rvPRgHpx?= =?us-ascii?Q?k3CyqmXeb1ZDf9O+9GpTSN+LUt0gn5Y/oDf5cKm2gBo8QnvFMGLyO27ppBuQ?= =?us-ascii?Q?vtN1vOB6ExIp/1cC8Y7ZnWOwX0sWyXPdwzJGmfsJFVxKBdEQk6ILH1PG46s/?= =?us-ascii?Q?B6dfGPYiEbHg6x9yGZsgEbDuQryVnEE=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 48520837-daa9-4111-4bbf-08dea9ba2ccc X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:21.5142 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: i47iRHxNb5Utw7if+xe0GW9S1V6Rm0sxIcRAVchoiHNGBsI7za6XrOKARb7gkNCLhpX8hIXDrD4+3a0C42Jk12gDrWQydyAjx+hGWqb+fuM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" The MUEx50 UART provides a memory-mapped RX FIFO data window along with an RX FIFO byte counter. When no break or error conditions are present, read received data in bulk via the MMIO FIFO window and push it to the tty layer in one operation. Fall back to the generic 8250 RX path for break and error handling. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 9860f2ac2572..f13fcb090df7 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -17,6 +17,7 @@ #include #include #include +#include #include =20 #include "8250.h" @@ -48,6 +49,7 @@ /* UART */ #define MOXA_PUART_BASE_BAUD 921600 #define MOXA_PUART_OFFSET 0x200 +#define MOXA_PUART_FIFO_SIZE 128 =20 /* Special Function Register (SFR) */ #define MOXA_PUART_SFR 0x07 @@ -83,6 +85,9 @@ #define MOXA_PUART_RTL 0x11 /* Rx Interrupt Trigger Level */ #define MOXA_PUART_FCL 0x12 /* Flow Control Low Trigger Level */ #define MOXA_PUART_FCH 0x13 /* Flow Control High Trigger Level */ +#define MOXA_PUART_RX_FIFO_CNT 0x15 /* Rx FIFO Data Counter */ + +#define MOXA_PUART_RX_FIFO_MEM 0x100 /* Memory Space to Rx FIFO Data Regis= ter */ =20 #define MOXA_GPIO_DIRECTION 0x09 #define MOXA_GPIO_OUTPUT 0x0A @@ -265,6 +270,29 @@ static void mxpcie8250_unthrottle(struct uart_port *po= rt) uart_port_unlock_irqrestore(port, flags); } =20 +static void mxpcie8250_do_rx_chars(struct uart_8250_port *up) +{ + struct uart_port *port =3D &up->port; + struct tty_port *tport =3D &port->state->port; + u8 buf[MOXA_PUART_FIFO_SIZE]; + int recv_room, gdl, i; + + recv_room =3D tty_buffer_request_room(tport, port->fifosize); + if (!recv_room) + return; + + gdl =3D serial_in(up, MOXA_PUART_RX_FIFO_CNT); + if (gdl > recv_room) + gdl =3D recv_room; + + for (i =3D 0; i < gdl; ++i) + buf[i] =3D serial_in(up, MOXA_PUART_RX_FIFO_MEM + i); + + port->icount.rx +=3D gdl; + tty_insert_flip_string(tport, buf, gdl); + tty_flip_buffer_push(tport); +} + static u16 mxpcie8250_rx_chars(struct uart_8250_port *up, u16 lsr) { struct uart_port *port =3D &up->port; @@ -282,6 +310,10 @@ static u16 mxpcie8250_rx_chars(struct uart_8250_port *= up, u16 lsr) return lsr; =20 do_rx: + if (!(lsr & UART_LSR_BRK_ERROR_BITS)) { + mxpcie8250_do_rx_chars(up); + return lsr; + } return serial8250_rx_chars(up, lsr); } =20 --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013022.outbound.protection.outlook.com [40.107.44.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C53F34C80D; Mon, 4 May 2026 08:50:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.22 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884630; cv=fail; b=KmX087LgL++4CNL06SXTXbMXdKVXbXs0kLd7c+xpLtc0dmi2RmlzmW12NhXdUtcg+fYgNvSX4FnwrdPf1Hak5ideZm1M4lrpp9Fw9jnNQyzrZEMHtJ1t84e6dGycsZOD62T9Fe4zQDEwrYPh8JDq0ucyV/nbGZ3rmzLIpCkfBeU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884630; c=relaxed/simple; bh=jLO65BFNX8Jwmu/xi+EhkhWMkw2m0mHKwMhN+h2xCPc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kSV6TTq9ZtciqCcVH3XSuLB4yo3bi3t0A+dR2UiSYI1q4A/JsARLPLJ6/n+c7+6s8RUMcTY1xKTNzjelj7pZOhQa5x65viL1/0ldRoHLp9mI4V/TfN86/gohrT1xqS4L8WhEISdJhlkzsbldV34DOHSFRQHtirMaXN+tO2nbp/8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=ZTsoPOvG; arc=fail smtp.client-ip=40.107.44.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="ZTsoPOvG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JIQhstjx/LHRFDF+YYbM2g8bYgGYSVr76Nk4xpmd/ELTHcJii/bQEKZGq6X0yJ31E3peNLUl5204FDkw4fen85ZovwSQKnY1ALpyTExpcZeYqTvFzc5OkB06OfVH2e/URdCBsofKJ8tLTDUX4pbieK0cggIPpaOyS8L1XCPuDTd4tUqKwZeb0vEWLeBVslKE/et/zpCzFMqGVSkOVdF8Tus7Ze4nlc5vcVYrKphSzuD0IBRfugCkT4fu0gV7no9Ycd7xuepRAbwaoy4DYbokryN/F6IXdZIkPMtrjrx6UzA+q+8kOSoiUexPR9hzXUaf2CLzFCmjpBcAcNZDLhJHpw== 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=3oZI0JiCiXp/6MO1OOVjOY1MlKKTG5Q2es6MtYitfiA=; b=ZTq732pCiU4UCUEPCxUFx8IDR15nyDalzxYlBfOGBWuCtArtSUC/UqbZAfkpRvQVyTyXC9S5iPe5XfvNKJRzI2tacWiUvc589HA9JyFJ/5fVk7GMvKUbrq4pTX1lN8MJEHq/BDxM72XsEvGqppiNZWQgXTWOZ6D0BMb/uIgHSpcvH1KZekeYPyNwrnClZlR+hw+FpV1RfOFhHk3u8r/wmLlQe3kRoB79+rQEuhMFt2Jan5s2voDzAMAeC7wub7SKroHTWX+dpo7sCqxWuxEy0gZf6O9WQnzhfM5tL7lD8a9UmFp7dQxuNr3UhPdJzK+DtkOGC506Itee53d5fC2sTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3oZI0JiCiXp/6MO1OOVjOY1MlKKTG5Q2es6MtYitfiA=; b=ZTsoPOvGG5mBvAXVlgLzIdpv5LzZOlbytvwLbF+rzdcLeG6+gbZY/qIZD1lVelOmCJ/JQqa14pdtQZP8hhqEf/Aql5AK2t3w7wecm5QcOPRGJF/KNYaassfhUoUNrVExTXetClw3jEchuK2cIPY5sUc353ZNyc4/YuZSV0pNLf4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:27 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:26 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 08/15] serial: 8250_mxpcie: speed up TX using memory-mapped FIFO window Date: Mon, 4 May 2026 16:48:53 +0800 Message-ID: <20260504084900.22380-9-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: dd16dc1b-99af-4f04-6175-08dea9ba2ff5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: oUhsmRmeurrm0MFsAiAyxwlKRE4A1A/kDg04PMuckAq73y08hAeydtTtC1luyhc0Zh0hhJs1pDJdowI1jV/sijGAbclXmwFkI9asky+y5yfgBKW7btefPwF9b+eEWVxHcQV1Nb7CldzbpgGDBLEeVARU7WDR22UAOHy3hCeqJimPLx5Jagg3va1i/vtXHZnTNVV7jPLJ1NJ8Xw7BjwxWSCLRlBmST+l+ArZh1gyyRYKVJTCDXsH2XNrVRzU4p9bYAWl5hKPPP1twShChdP1Yq6PMbTuygisPRp/2qTbKOZT+zDN7O4Mj3F8A5gCPxZpxvHbvTthjk5iMyjlw+/3mCQ8JSQAe6rwKcLOc0l/QgsUtP7D4dy9NR1JNeNPZtfelFt3wn+oqhphRHNQX/WKXDw+AMoS5GEVGmVDZYA0emJ+a6TGUOSCUtyx3VHQ6pU69mshxZMiv9h/o9Y83cAngAaXzZzCO1+aOp64pIkG4xYahwvgQJ58bI2sm3IYSB1f77KLI25hlCslgYoEn8c3H5/FMDYvrl/z1eq5lNCRIUPKcPVHuCbH/9QppB6+MIVR0rm4A+5ashaOJGR8QRf6Q+Z4pTYEjAWB0Rizsax1sawKnePTuztFdL0ah9owIKtVBR+9/nsI+h6s8ocMQ7gw6tc80iIstro9KnJd0gb2LP1iyPK2ZifXt0IPo7woCVkIFCdToRWPgylNQcH+GmWzIip1jH7V+Js5mtRWEd/uIOQrAK1nZw4ah1NFIbHCeT1K9 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IQpyJzTD36AfWtvwNSC/U7TjlQeXpmxHmS3b5ubfFEHoHz4r3aS2MaFLyzar?= =?us-ascii?Q?VvPuAYoFyXEE1WWHnxzEGX8udfHkRo9MeUwpWcH3SK67t/KFKB12ZmUiQwVZ?= =?us-ascii?Q?wD3SRf3Ky0l3u8JDZJxtyutuq0JHhfw9mUg6+EYf43XdDvYD9eWZLFMBvPEL?= =?us-ascii?Q?Xseep3r2n/QEQs+7ch/MxD8VCahsSmfgE5BhaisQaE1sCmdmOcyiRtno7V0+?= =?us-ascii?Q?9kqTJI6Cw/Ys9O7fe9E1ziRFmCkJQ8bVILcZip3UQfu0ZWuaWo5zlpcKcA6r?= =?us-ascii?Q?f+JEMXzLPr9cCSx7CJXpUGw5/v5r7YDILgcudZiXUf/cqza7pUJSdH7HmGyM?= =?us-ascii?Q?8Otg+ixzzh86tKiJm4cPAu4w5UfZG9DMedLLAHIoTuLEWQw5nioRe6Nkxo1F?= =?us-ascii?Q?94PcPlOYxVCihK0tuQM/PRCddsKNVhiFZxrPugN892iE6wic1BubofXNp6C/?= =?us-ascii?Q?VptS1NgX7+CabCVlTCwHmx5T82ETHjq1jis4YsV6c8tVyK9lUUV1uzwgoAwY?= =?us-ascii?Q?in/+6xq1DKby2C9DVTEvCLbm8dcl3hQ7RZzLAcQ2DM2l3oTarRe1Khgx5Zk9?= =?us-ascii?Q?0nAOpmfgs3CvU/9mcjBRB7wb72oEcIbtyISh1HdNaOlrUIgG+ss0QdwoZsuR?= =?us-ascii?Q?ENNNR7zPDHbZdSSbop606B2JFHB/Jyc70dwglbo6b27pX8gp4ir6+v0gMdie?= =?us-ascii?Q?FyY6TgSf2JSNMi4IC7ekUk6Ip3RD4djeZLxyr1ptMCupw5YS5n5bBGrxK8Yf?= =?us-ascii?Q?dDXlcdtjDvFCsYiwnUMfS+1KkppOV/UoI88abcITAEjz0yU0n9WN1UAwyvrc?= =?us-ascii?Q?XpZzJSTshhinXaucZAxt9iZlLf3iUXErBDHsMyGC8n8/U8mLIIo8MskXYtAg?= =?us-ascii?Q?hUsxMZdkySLfVP/2kLe9iaIA634XcDbInWiCtAITZHMGz5/wls8wGTbWmjco?= =?us-ascii?Q?miMzqDec0i9qPDJ5m7AZr0mgewV+ph3IWpc/zNB6Pgk9WsboZENYgrjqly9O?= =?us-ascii?Q?w9V5QGl9Bgtjn57tICttvCReo7dRRscvZ9He9YChKn6SWWm6wfme3/oQi6zV?= =?us-ascii?Q?phy0L26m5ozrme3lKdm6Mln0GWVdxw9++DFBi1g+g2tgsHdcfSpdOC63epf9?= =?us-ascii?Q?zgIoIWuHr8N9cIvh63cJPgOzWm+Pt01fKiEs2uHmp+FNPjMFcfNjDw+ma9cV?= =?us-ascii?Q?ZVQO97nhaoR71Df92lLmEMu8rzGUe8Kf0dDD0MP1zJDBhBuyNQxbxa8pMW68?= =?us-ascii?Q?wSZN06wEtfAsObF6LyjvDbGb+jdEJxvmgbf+/d4ljZ1kzT0AY+Dt8Boqjfu8?= =?us-ascii?Q?7uEgzG9nt4OICSY89o8M5VfrP1l20LsVCIBc05aLMBTzcidVYaInyTeq8uBO?= =?us-ascii?Q?tQCQZ+LUU9woEBFWnjJ4gKimbdjR/u/i3WFEdR25xFRT0ytHk/dHv4NqA75o?= =?us-ascii?Q?WW/7AbOUSBVSVV7L11J2x4ChLALkVL1ba2XukwdR29EGcvw6ennSqN/Y8z32?= =?us-ascii?Q?BMluLqFE67A2lD1Op+XGIJacLwMv++FIA8YVbRVzzHg0Z5IbaaVX7IHUWK6t?= =?us-ascii?Q?UujNK1uNuggvq9YEjVmKrWAIP8XxZ+Zccp/Uj1G7yOdfpg/10IJx0zYS0Y5r?= =?us-ascii?Q?qzef9KJjJDAr7N+DeX2gl4P9+mI8vMrywjKulS9sRPtAC7ZEOq/rFfT/fm8w?= =?us-ascii?Q?WHQ4arxNs85G6yaS4qep02K55/73wzizTfpc+nd9FjAkB+aM8VBD2akyBSb3?= =?us-ascii?Q?z9QqA2VIxHYx0G3ouS1uWLxj+d5mExY=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd16dc1b-99af-4f04-6175-08dea9ba2ff5 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:26.8652 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NSDhAisls4aqwFQCLpG2izjVlG85Dxa7wNCxFCxD9lZvJEaY2rkaaUtPAUdoFYObMYxa4VeDvj0nfolDr75hR9Gfrx8XitsCApEyXX8QlpA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" The MUEx50 UART provides a memory-mapped TX FIFO data window along with a TX FIFO level counter. Fill the TX FIFO in bulk via the MMIO FIFO window based on available FIFO space, and use this path from the mxpcie interrupt handler instead of the generic serial8250_tx_chars() helper. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 35 ++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index f13fcb090df7..5fe07f6947ef 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -86,8 +86,10 @@ #define MOXA_PUART_FCL 0x12 /* Flow Control Low Trigger Level */ #define MOXA_PUART_FCH 0x13 /* Flow Control High Trigger Level */ #define MOXA_PUART_RX_FIFO_CNT 0x15 /* Rx FIFO Data Counter */ +#define MOXA_PUART_TX_FIFO_CNT 0x16 /* Tx FIFO Data Counter */ =20 #define MOXA_PUART_RX_FIFO_MEM 0x100 /* Memory Space to Rx FIFO Data Regis= ter */ +#define MOXA_PUART_TX_FIFO_MEM 0x100 /* Memory Space to Tx FIFO Data Regis= ter */ =20 #define MOXA_GPIO_DIRECTION 0x09 #define MOXA_GPIO_OUTPUT 0x0A @@ -317,6 +319,37 @@ static u16 mxpcie8250_rx_chars(struct uart_8250_port *= up, u16 lsr) return serial8250_rx_chars(up, lsr); } =20 +static void mxpcie8250_tx_chars(struct uart_8250_port *up) +{ + struct uart_port *port =3D &up->port; + struct tty_port *tport =3D &port->state->port; + unsigned int i, count, txsize; + unsigned char c; + + if (port->x_char) { + uart_xchar_out(port, UART_TX); + return; + } + if (uart_tx_stopped(port) || kfifo_is_empty(&tport->xmit_fifo)) { + port->ops->stop_tx(port); + return; + } + txsize =3D serial_in(up, MOXA_PUART_TX_FIFO_CNT); + count =3D min(kfifo_len(&tport->xmit_fifo), port->fifosize - txsize); + + for (i =3D 0; i < count; ++i) { + if (!uart_fifo_get(port, &c)) + break; + + serial_out(up, MOXA_PUART_TX_FIFO_MEM + i, c); + } + if (kfifo_len(&tport->xmit_fifo) < WAKEUP_CHARS) + uart_write_wakeup(port); + + if (kfifo_is_empty(&tport->xmit_fifo) && !(up->capabilities & UART_CAP_RP= M)) + port->ops->stop_tx(port); +} + static int mxpcie8250_handle_irq(struct uart_port *port) { struct uart_8250_port *up =3D up_to_u8250p(port); @@ -337,7 +370,7 @@ static int mxpcie8250_handle_irq(struct uart_port *port) serial8250_modem_status(up); =20 if ((lsr & UART_LSR_THRE) && (up->ier & UART_IER_THRI)) - serial8250_tx_chars(up); + mxpcie8250_tx_chars(up); =20 uart_unlock_and_check_sysrq_irqrestore(port, flags); =20 --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11013007.outbound.protection.outlook.com [52.101.127.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4931A34A3B1; Mon, 4 May 2026 08:50:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884637; cv=fail; b=rQvcwkaRtip3GaTJqqdhGxPTuh9gAiiU1JEWFkl0cU76qVNlQ2vbctZCjst7hLlNeJIJl6BmDye1aFWGS5Mzm17G5Se2yV5fDiCel4j15SE4+a+ThegKWQPQJHPRkpKy23PDfuEGEvViDSYfx3VE3VHhWFx7QBvD/54+57biU84= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884637; c=relaxed/simple; bh=qp1fJ3/RgeHCqujRvwCKtjoRF7SoKV4Ki43DFVrbiy0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bFg3Z7CEZ1lbLwweuHEbRYmSOYfI3ZBnQ8boxz7Ep3rrDihNkiuOekCAZLF1mFzA3ShO6rANXGx1wIZZyZ3hLqWwmrSI8uwplj++9GpTio84KK2nw7/8F6AVVNptZt60+d5UHLxqBEV6a2qz2mVOVm++7YNPvGcjKmkY3+5qcr0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=Jpz5/rM4; arc=fail smtp.client-ip=52.101.127.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="Jpz5/rM4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iL5uE37RLO5qGVcfFCA0J4ujG4UWLJwdmV4rQW6W5ESW+njmfyEOj3UlrufD7Rr2BV4lIwqI+ZmlJ6tCVyuO0ZbVkJ9ZxG4t+ipS1UVrVCBY3pzwsAhowBr8c0OGn6QSr09t8zmLwBEh179pycf640C+0hA9IXH10spza2M6uIbdBUlXL02x2pbmkTASM324WEuLnAPsC+w5jAp3l2itVMWChHAj92r7oYWQ6JLu1MHPUwMwdRU2Xi6mm6k5jDt0CcRdjyD4uEWiyDq4Fb0vGmRubl3YJlE0SEOmlrlawMFIJX93Wa2Vli9hoGy09t4SOtq3JSo1KdagwTkS3vQaBQ== 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=lVPeZE7BXVGpFQ46Lo1ZoGrXZzsq92fNOYIdX1b0KEI=; b=q/U+EniJJBs6VLTU7spFjdiE9pCBapts6qCu7WSh2kuFjPoUcZ+4s1kGgbBkbja5Vx4i+tUuRyfM3LwZ/AUS1mPZu/acSnQSwpBSM+bAMFkf+AGxFsAEgvWiN9m1bXPSGZUKQWOgMIAAQTp3BV+QsUOtVx3HfFscEbZ8DT/fN/4yOf/WvonkteJvfwa55PnaBJipXpXOSLGbiwzCf5K3EnbWNKeHbIqn6sddvzrw/NNknn6cZBJzSQhJHaJa07KAUW1nra9X08xYrQdLtfrrYq2q6xW0SyvhCKJlbO0kgyBE/xuO6xAQnKu0rA1a3r1SW5s3XSuO+tPnSWrNuS49ew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lVPeZE7BXVGpFQ46Lo1ZoGrXZzsq92fNOYIdX1b0KEI=; b=Jpz5/rM4BCT6xadP0lvtvxcg3rZiRyH8rFh6xJUP9CmbeGDG5eQPqOPnoUsUva4zSX/8eOpPUQD898AXAmoz9F/x7zUHr5e+usk4UOZLpHJ/eiPpr+GHNgLUrLJQWM/DlyfuYN9LgJmoAytP/vdP4DHEmfhdsD2Z5yojtBewTpg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:33 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:33 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 09/15] serial: 8250_mxpcie: introduce per-port private data structure Date: Mon, 4 May 2026 16:48:54 +0800 Message-ID: <20260504084900.22380-10-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: d90c766a-07c4-484c-f200-08dea9ba3407 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: TrDZjrqX+IqtxH7OPQYeNDAky6+db+YOSk9OY0/sXdvdzRR4HmezvPR/QlQc52DwMoM1ULQ2kherrKycRkOrKjGFiJBosuUqaO9SA5rTEcFjxl4y8/mGOt0SJYaNSoEEX+7mwxi7MP2dABty5fnYfdGsBrEFDMxtcHb/lbMmSnj0CP+ghbpHhVNrp6uadg99Jh9hLniURDxMsS6FXzm3xFhCPuPQNdFxgflFuF9GbNZgtWolZEoPah0bAmJg8uizXxp7NQII6sNM42PTkgOuQSpoyOBSA7420u7+bFbyiE46mB/TS59nmwxzAEKfD/K+gHLkgzYcGAT0p3QtQ8Aax9JJvbTOl2EqRdTE4OM1pDm4I4UNinHdOsJe3wAhVme47CNCt8Gih9OeluJyXacJkRd7Of7uJts+7zUh7Qg0S8LCZQ3EDunjshlbRvtHIBMmneMh5/Jd5btMoDK9eH7EkpHiC9ROgXsqUKeS7aSj295bdx1Tfho/a+tKEyNSqoIlvn3IJ1w26nNa5ZKLHvKw+/OUirymDon7bl1Fj8LDKZ5IRpa7KMMLRm3/eaOUeknJKz2I7Eh4iRHubtfhLWLrIH3MHLUSEF1ZAlpgs4dcvhu00jpfJwzyARhwILXD5hjj7Sos0DnHJwRPWlSezkoGoPE5LfrFT8Q/IbVNDJAkcooKTA3Bj/RDQqLdhfJBKD0max4KE9nKZSxMN4d5UNEBbdr8WDOJxVuKyPX3iWb6AS8LBwFfQwfzzbxkzvy6S0zY X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rHlkAr1UvCtV3+wukp5kwuZnlBOuZxUNb8BJTzGjG06SdpFUbPukqVCnfM07?= =?us-ascii?Q?Waj8jrA/O4EMT4S+BmgFvvoX7wuDup8NNYJFHC2AiMOSU4x55MJuKYtUosdJ?= =?us-ascii?Q?HCUMZyg9r3OElb5ltMPZRdSfyLBOXn28NL6eY+hYJVpJ1/He0yU6XwLyCTXp?= =?us-ascii?Q?2twWQ5SAagW/WkIdugMfqR4ISNUbCiwT3tOyqKzTKr6Op8NW7ZNFYFRcY7oO?= =?us-ascii?Q?tVNgSsnsQV3e5eaADFs+zOyTYWY2+c+kNY47dRIqhsmGLai0S2alj1DDfMDu?= =?us-ascii?Q?c8U7LDrwAHMnWNOl4TbJsUpYW54vmrDvI8XOgmGe2Yi6gguY9RcRgF4bn2+k?= =?us-ascii?Q?ixREaG+Qc5PRC+WtkGJ46JfKMVleWW3eKR2hrZ1ju8pllJ4+jTODYXIXSDOM?= =?us-ascii?Q?F/1NjqWgizJ8/UFUJTpgFiuIDrBkiw5Hrc1EuukDU/3e8eDhrE9QjJFFy60f?= =?us-ascii?Q?V79YXyLv/i87BVbrG0+4tq8EumQyMhnWZ1ol2T7yyGk4FEGvgw/DO9krdwlT?= =?us-ascii?Q?N5Th6Qsb12/oPjBchZv5MWjYEQ+BYWD8nDrUZgyKWiiwkfAzDtNDZeasft1B?= =?us-ascii?Q?lGTCA3XQXJOm5+hZO/EYfPPj/9ofvPqDV6fts96t5tbN8qoOiGOKq0lcQ/Nk?= =?us-ascii?Q?uU7UP7tGQ1P88Ai81tpwOfuin6uc7h5+nnQ/DILS5wtd81JJlyz/S2WPn2kh?= =?us-ascii?Q?OVZi4ivcOKmPdZIKxJUTWfCw5C9sNWhEPiNgrdUHVoLDTAKqsGLRK9xvsHUh?= =?us-ascii?Q?7bO1pWz5pdYTfJHscNOaCaTfpBDQne1rm/QBBOzqkBT4E912x0Jxe0kb5Lg1?= =?us-ascii?Q?Hj4qfAvVIX2lNpt3+xh2RLdRrH/dbWfmgvh/g0B3TCFfm2eO9sCeQTVrHLZG?= =?us-ascii?Q?whxqViT3+2P0yvA3Coe03IE7e3cvNlSWwtqOAa25MGp8lsyTtqwvHG3eiCly?= =?us-ascii?Q?fCqs9PQAcGW/Jz/zu0bYsMRs93AMJi0AlfZUVLDdK/49bl2slziO6Y9koS/4?= =?us-ascii?Q?tNaTQJqJtJeiWmNc3EJ/x/HsaURlJQbXNbyT1srzeALIsmiLv8i4UZxUMUnJ?= =?us-ascii?Q?oJD2GO+MpdAWzVN8ARMq6XpHq3ZkyNTrZkV4HzOgpyhuRJS119+d8E5+Er32?= =?us-ascii?Q?c+ele/lKv/pXSiHpO/17FnwfjnFK2UOjSlJBvK07c4uFO46qByBnCN6StDqC?= =?us-ascii?Q?prbKOAvgjH0UWx6/RQ7ft+l2PRxP3Z/iCsKPp98r+rl3bzpn7vQroVK5QLAt?= =?us-ascii?Q?HQ/kQm2HRBwN/rBnPiw6iMWYsL0/JcMzIdIla7n1Zv5l+YGtqEzZjsXCfmw7?= =?us-ascii?Q?VgVxi9FFRmgCQ+DkxgrUI+7xrNWCyZbS7F+XqW1uYeTe0T81GhpXbRPHBdm+?= =?us-ascii?Q?tOlv47pDcTCnkCeBZaH5Rn8DYwWXmeHB48GCUlivY9x40RsAYyuuCVCu0c+4?= =?us-ascii?Q?8D4iGu/WfsWVU+wly/dEntMKZETyZTjJ0Q5SVKA7+m0J7WGXLz4qxIDEhrXK?= =?us-ascii?Q?P/0JAVYLrETigIv+7Fs0276Mt0iXKGwEizf5/tghGp3gr9iNSrLnmxaZfIk9?= =?us-ascii?Q?gTsyR6d3JmH7pMkI/NtJyVeKznlBpplnea0X4qzZazjw+10w03GKGV5A4136?= =?us-ascii?Q?+1/Frfimk5yPddNRdXh1eX9yEcer8g/vJXAXLwPR1UgwHAwVorE4F8jMu4Cu?= =?us-ascii?Q?8lqeLLdvb2BeamvjYpzUNDKeEXL5sKAzsKdEBHK6OfMWEZuvVZQOjuts0DIj?= =?us-ascii?Q?Af8ppxPIHVmaruue2jDv/wH6MckCDe4=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: d90c766a-07c4-484c-f200-08dea9ba3407 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:33.6956 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DKJRUtJii0ea19D9f8fKoGIgVnryBGBp38+fj9Aizednuaq2MABU5WaOX/GWgMRWReAjWol5vyC48l08/A9Wyd6s5f4chAAW/xzo1JzlXfo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" Introduce a private per-port data structure for the mxpcie driver and replace the shared flexible array of registered lines with an array of per-port objects. This prepares the driver for storing per-port state needed by subsequent features. No functional change intended. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 5fe07f6947ef..19233c3c5f1f 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -105,12 +105,16 @@ #define MOXA_EVEN_RS_MASK GENMASK(3, 0) #define MOXA_ODD_RS_MASK GENMASK(7, 4) =20 +struct mxpcie8250_port { + int line; +}; + struct mxpcie8250 { unsigned int supp_rs; unsigned int num_ports; void __iomem *bar1_base; /* UART registers (MMIO) */ void __iomem *bar2_base; /* UIR / GPIO / CPLD (IO) */ - int line[]; + struct mxpcie8250_port port[]; }; =20 enum { @@ -444,7 +448,7 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id =20 num_ports =3D mxpcie8250_get_nports(device); =20 - priv =3D devm_kzalloc(dev, struct_size(priv, line, num_ports), GFP_KERNEL= ); + priv =3D devm_kzalloc(dev, struct_size(priv, port, num_ports), GFP_KERNEL= ); if (!priv) return -ENOMEM; =20 @@ -484,12 +488,12 @@ static int mxpcie8250_probe(struct pci_dev *pdev, con= st struct pci_device_id *id dev_dbg(dev, "Setup PCI port: port %lx, irq %d, type %d\n", up.port.iobase, up.port.irq, up.port.iotype); =20 - priv->line[i] =3D serial8250_register_8250_port(&up); - if (priv->line[i] < 0) { + priv->port[i].line =3D serial8250_register_8250_port(&up); + if (priv->port[i].line < 0) { dev_err(dev, "Couldn't register serial port %lx, irq %d, type %d, error %d\n", up.port.iobase, up.port.irq, - up.port.iotype, priv->line[i]); + up.port.iotype, priv->port[i].line); break; } } @@ -504,7 +508,7 @@ static void mxpcie8250_remove(struct pci_dev *pdev) unsigned int i; =20 for (i =3D 0; i < priv->num_ports; i++) - serial8250_unregister_port(priv->line[i]); + serial8250_unregister_port(priv->port[i].line); } =20 static const struct pci_device_id mxpcie8250_pci_ids[] =3D { --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013040.outbound.protection.outlook.com [40.107.44.40]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C7E1234A79E; Mon, 4 May 2026 08:50:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884643; cv=fail; b=ZbZW5vROoq8puCPLU0q+b/7vKn/vomwfx9UeEDsOMkaCUebEmiVk46qFALlpeMVKb1vJDNpwL1x5STJ6E/VqfMqXL79MLefAZeNsWXGL+ewuEoth4D3KRauGexSIqAPcgXQnfdq/sz2s/+Y6ilLpXqwjJFpeHWNRdcIgaGFt4LE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884643; c=relaxed/simple; bh=Y0TWoR2cbFGUegMWlPk9w49DDp2AV6+ZZgPvqBa/fOs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=b+8EoZig8TRmfnUMs/eiYvPXoLT3vLwQmtgQlkNWnwKiU0o2ie/dJC86n/KdxjKY9T3JVEf6Xo1cW+0UWGviesAzzBZjBc6D1l5rmVJKq2XQczCLBwindLGoYS5m2kZazyZBumeI3HAcTbQOPQcFeEynV+KsIhDy/bwB9ULEoa4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=Rru4v1Lq; arc=fail smtp.client-ip=40.107.44.40 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="Rru4v1Lq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BOyz5c9WR1p11S1VtKahDTSBPsdblhtB/kpKsDBMra+CStp9vn17aiLlljtYevsYjXz0eC40Esej18mogekI/ZO5VdVhl9/89+tiM09XL05HLDgcHiksAevh0h6GN38itcOtLQkMHQB/bauSMJplew9G9i4tTV7WYl6T67QrHscchRBUtYpExm04yGsBX/mZXeq2SvXSHJSiMX59RgYu28zlOfug3sgNVoBMKzUBIj+YU/OhzEHntmsTLzG121d9lIpv/Xth8G18aPdnRsG7vMjdZEGIyJNxfFYMVi4re8CUxK39ppN1sHcGNh/4xfJdoofk9gP0JxOGaqvKnY2N9Q== 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=ZDXj83kgcKHe5KhWDRchM0FXUd1m3zmqWurq1HvzH6U=; b=jFHP/tDVUqxijoOoMs4UczN+eozllfBYLKrKGszDGW57TBefWWd6y90fAhud0wcT9We3zPeGiFGg+vUr4ug8HM2Ed73nQOUH/BcnL9vEoIc2it5EB2XXFQNfYbj69XJAVOjVWRKSjvqXD9/1OnzSk6bhmQWgGf9EWDjf7PL7OplpZwvt56Py4nggXnyhtI4pUf2eNPIjsT4LVQ1JLFgVjr+NKP0eAjCSTTtdb0SwqsWRjuDbcb91/hRHlYQvBRfH2KoxibQXnbDw0ZR0T1XxYppM5czwkPP9/g1wN1tsN1h+GqEn5+xuUKHQXb45FnZoGVuFz85rmkF8UlNwZrgl7g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZDXj83kgcKHe5KhWDRchM0FXUd1m3zmqWurq1HvzH6U=; b=Rru4v1LqixZ3VbYVfS/FzpCEpCmWQ4J4irslpIhodblN2nXdIfU0+Nw0K88pGIKiTopXDECm5vZXWvKZnuAlVPkSlQbqZ7MjGapxFGBSQ2VCXfJgYTo81yh3LYXG8VUTqqzz86ZMLyoPboZIWE2XKI6NjrprZX/FNUDv1J9w9mM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:39 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:38 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 10/15] serial: 8250_mxpcie: defer uart_write_wakeup() to workqueue Date: Mon, 4 May 2026 16:48:55 +0800 Message-ID: <20260504084900.22380-11-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: d72b63e3-d2ed-4ddf-0dae-08dea9ba3712 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: 6Or70SkS4iDlCIfA/KRBtnLOYAkWEswNrxZphptMGE+iiH22vfeiZDcbjbA/0VT9Fj7Y6cpT5eUU62jozoVsd+SpzU0GOJUsa6eykib04uTUPoSmP95MyU0gA2PxRuePgTqeKs88EOR00wlU3PZMjMxsHMR5EWVyjT2e/ZeptHFBVV3eVgpWEghpAjxJexVjxSDpaHYEuzlFr+plH/gdqnvrAsbMcHmXIi1KL/E5bTQzH/RNHfr9nk0OqtecTaTi453dKakSCFao1ErezpsIazSrMnNyVaUb9urgxQNKNL+FiR2JYv8rASef6lTnNUNdTdgJLNeZWBDJE1LgmsRMVemyojIBOQX60JzoPGju64DVDorkNPum66UgqYe4GkZe4hzpL5SxXt9obcWY9Z7wIwT6SgTCkIM4hDbJzeljNZ5CQt9JLOIDQ8RY0K33qcRX7sVLUMaICJtDIUWDV8g6LQHAZ4AGMJJHAenFouzixKBsnxS6UMWOZi27szDYOhUGC0Joba/GQg+CkSuImy9zYxnB3hw+PapJeoWdZoptgQU61mhM53K9ZNeF6hcFnJbdoA1o/mzqcQx3gID9LFAXZ97WNaQuu8dgxlyzzW/gibK/RHLTe/lVXf2bUHG81HOctCxq69TN5siEfx9bgUKSoHjBJw25EbMSPGMk1f+1j4xsi7Ngw3jB3veluQpBIVajb2sitm9uiUMvRMgNzlY++GlZWzed30k1TuNmMnQcMBIwSkmjHQmwHmqfcxjaaIgM X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1SQp2cWzOyV9lb7WsHvREC4nUHJChVGFTSY7/Y3FS3FOPpXFbgae0AOrTZdp?= =?us-ascii?Q?1MP4x5cviYHU3IwfoEham87hpVAApu48Y6UyqdnwTZvtiN0K0n/eeiNWRWtW?= =?us-ascii?Q?HIAUXFSV1sgVOqwIoNMdDyLIOrn2R/lB2VK2UnWcTLD71NhWRh+KCX/fKtG+?= =?us-ascii?Q?9G9tgtg5pSpT/UOqAcGRB+FrXVv87RP9nk/0CwhfS9md0dOMXdI7vwE5wX+Y?= =?us-ascii?Q?kw3ehS0csV8CsAwgpjv4KkB16ae+zvH4e7/H4mpZqHwyHwDV3elltP3l03uC?= =?us-ascii?Q?zh4ycm7qTuwS5pNQYoQbJTNPmu8q03X3NobEbDBQFFWmebVaci7RDlvA5BGv?= =?us-ascii?Q?CqL3w34I4S5mxst6TYmCNQuRJ6VEWC7p8NzhgQhudhDfsEbO6JZyUr33a0iq?= =?us-ascii?Q?d3c9O48xEt+goQhYkAoXZGKeF4jJ6i0qBZNs9M2HYTjAhEEFAZQcMiRuWkx3?= =?us-ascii?Q?vxxfHua9xOCJHJaWiKhQbwmIdToYf/f29/iRFzgtMPRY1eKgZToXKgMWvXgx?= =?us-ascii?Q?yaBi4ny0dFgbYwmg6Llvmw8FwloXTnZm8SBhpDCs7sR5fxeHlVzQKgwCzEtz?= =?us-ascii?Q?xbmyQRarFyo010u9RPUfzOC+v4t2xinTpFIorcLWHjbCwaHNLfiDcvBTAAzi?= =?us-ascii?Q?WimUDodHv6XHl8KQemcH1e956rxNO+95uA1GP7in0fPhXoRVbqhD8W1/MWlR?= =?us-ascii?Q?os93gWbq5qalfLStic/iwBgirHjop1QGX+MJjEoXChJL7L5PXoRzMbGq+aSN?= =?us-ascii?Q?UgbFXfT73tSb/ozqdxuL18mFO7MeXBag/BYfGoGqPmjj/jggqEMHp5PYIbBE?= =?us-ascii?Q?++8xPdPI5gzbqTKpdYxQrPYw7t7Hde4oWZlc20Dno3O+tSVSDfOjmXYUpNBJ?= =?us-ascii?Q?8+/1Wwr+IRbRHN/QoZiLiAkJ8ZTO/Ghia2drCGGmLtjjWiV8OBq6znPBqrAa?= =?us-ascii?Q?d/73h8dvM+cgXMCFrt5DAGLt2YupyLbjZXO1YxV9rviTfe34qHNj6mywBhkw?= =?us-ascii?Q?RGeQZeLeIi3BxFFv5FtcZRqLXTQtAPcpOtm9rbgqiuJvJ4JpASFw4f3oJdAC?= =?us-ascii?Q?Ex7VFElX0coI74WhdVfQJIYgOx1T+oSUJ7t8LyOWOQ0kHHXYPCPK9CvCZwwi?= =?us-ascii?Q?YkpuR1HEhDGpfwIj7potm1eVRaUY14RJTgcCd7enhdm/Ulq1Ft65Ycq83Dbe?= =?us-ascii?Q?q9uB5ODXeXslcRHQi1QlPzLVmwB2FjkWnKpOI2XF/PZfb72SrpetRbBplzwF?= =?us-ascii?Q?+BKJ4fKFckHGuSAmYBaznj8VZueuQUIj6+xvO31JZC8jkp5y/w7m2gWLGd8m?= =?us-ascii?Q?pc30/8zTzRiQE52oVh7/r6xLiqcNC6mm9yD/qrywlOKKYkEgbbBJbkZhJlB9?= =?us-ascii?Q?6w3EjeQbsoJzhHYEr9FiLKQfCCea+46jJDl5t/g3DEiZyC4NTJwNpRY1I1An?= =?us-ascii?Q?8w6swzi08I5iQybL/esaKkLakxggsWHuNAhOQ4tysKq3SwfEYsmZuNmG1wwY?= =?us-ascii?Q?XLyMh0GVu7X2bJPp7YfbKJMCARFwTcQXMqXmm6DcUO6WuIxp8kHk4KO69vml?= =?us-ascii?Q?AV9Y0ESajV06EewJeOuhI8wkTX8+iibAkPSdo66a20WxL22qB1e4neV1SjiU?= =?us-ascii?Q?zlomWiTR/h4kC4qYflwUsvtmlP9qC6A+d9aCDI0EuAAqEz9Rb6wvDY3Rbw+3?= =?us-ascii?Q?Vqi6c2wZTqiYIyG49iKCKQOP3WSgyutkvdZapQJaRwdFdpxMLjIbi3AWyVV7?= =?us-ascii?Q?ChgyJV4LhFpVmnueuBKuZi8BipJdyEY=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: d72b63e3-d2ed-4ddf-0dae-08dea9ba3712 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:38.8009 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gr2PDPVybj3mzr/wvp3GYxN+GyPP5OJSClxMVXfcZk9HFFyRAdQ64qM5ZfiIbXtOQQ9fUyqXXmkcy1euUd/OcHzrUcHsmotW2Uiw7Khzfq4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" Avoid calling uart_write_wakeup() directly from the interrupt-driven TX path. Defer the wakeup to a per-port work item and coalesce multiple TX events using a pending flag, so only one wakeup is scheduled while a previous one is still outstanding. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 34 +++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 19233c3c5f1f..8dc1b7b0af04 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -18,6 +18,7 @@ #include #include #include +#include #include =20 #include "8250.h" @@ -105,8 +106,13 @@ #define MOXA_EVEN_RS_MASK GENMASK(3, 0) #define MOXA_ODD_RS_MASK GENMASK(7, 4) =20 +#define MOXA_EVENT_TXLOW BIT(0) + struct mxpcie8250_port { int line; + unsigned long event_flags; + struct uart_port *port; + struct work_struct work; }; =20 struct mxpcie8250 { @@ -327,6 +333,8 @@ static void mxpcie8250_tx_chars(struct uart_8250_port *= up) { struct uart_port *port =3D &up->port; struct tty_port *tport =3D &port->state->port; + struct device *dev =3D port->dev; + struct mxpcie8250 *priv =3D dev_get_drvdata(dev); unsigned int i, count, txsize; unsigned char c; =20 @@ -347,9 +355,10 @@ static void mxpcie8250_tx_chars(struct uart_8250_port = *up) =20 serial_out(up, MOXA_PUART_TX_FIFO_MEM + i, c); } - if (kfifo_len(&tport->xmit_fifo) < WAKEUP_CHARS) - uart_write_wakeup(port); - + if (kfifo_len(&tport->xmit_fifo) < WAKEUP_CHARS) { + if (!test_and_set_bit(MOXA_EVENT_TXLOW, &priv->port[port->port_id].event= _flags)) + schedule_work(&priv->port[port->port_id].work); + } if (kfifo_is_empty(&tport->xmit_fifo) && !(up->capabilities & UART_CAP_RP= M)) port->ops->stop_tx(port); } @@ -381,6 +390,14 @@ static int mxpcie8250_handle_irq(struct uart_port *por= t) return 1; } =20 +static void mxpcie8250_work_handler(struct work_struct *work) +{ + struct mxpcie8250_port *priv_port =3D container_of(work, struct mxpcie825= 0_port, work); + + if (test_and_clear_bit(MOXA_EVENT_TXLOW, &priv_port->event_flags)) + uart_write_wakeup(priv_port->port); +} + static void mxpcie8250_init_board(struct pci_dev *pdev, struct mxpcie8250 = *priv) { void __iomem *bar2_base =3D priv->bar2_base; @@ -436,7 +453,7 @@ static void mxpcie8250_setup_port(struct pci_dev *pdev, static int mxpcie8250_probe(struct pci_dev *pdev, const struct pci_device_= id *id) { struct device *dev =3D &pdev->dev; - struct uart_8250_port up =3D {}; + struct uart_8250_port up =3D {}, *new_port; struct mxpcie8250 *priv; unsigned short device =3D pdev->device; unsigned int i, num_ports; @@ -496,6 +513,11 @@ static int mxpcie8250_probe(struct pci_dev *pdev, cons= t struct pci_device_id *id up.port.iotype, priv->port[i].line); break; } + new_port =3D serial8250_get_port(priv->port[i].line); + + priv->port[i].port =3D &new_port->port; + + INIT_WORK(&priv->port[i].work, mxpcie8250_work_handler); } dev_set_drvdata(dev, priv); =20 @@ -507,8 +529,10 @@ static void mxpcie8250_remove(struct pci_dev *pdev) struct mxpcie8250 *priv =3D dev_get_drvdata(&pdev->dev); unsigned int i; =20 - for (i =3D 0; i < priv->num_ports; i++) + for (i =3D 0; i < priv->num_ports; i++) { + cancel_work_sync(&priv->port[i].work); serial8250_unregister_port(priv->port[i].line); + } } =20 static const struct pci_device_id mxpcie8250_pci_ids[] =3D { --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11012043.outbound.protection.outlook.com [40.107.75.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F02ED33121E; Mon, 4 May 2026 08:50:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884650; cv=fail; b=cJ91VFuI+5F0y87eKkaq1gVSua9UfcIP7XiWLw4vfqJHJasZrmxsYWGFP24B1g2U5nYapnNuPLxlocrvsiK66G12R77fLfriJxyvowtQxX8Mc+odVa/Iy3n4udk/y4k3BtlSs+WQx9vKr5id4KZxihkYJMaam3fuFNCyBNIFgno= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884650; c=relaxed/simple; bh=MDLhrOJ3CDs/zMbfzB0dy8UBnx1SNEauFoXVPfXEEho=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=srRPqcpvZODMORSDr+x8H7qAOfJg41zTBmgmI5TBrkJdkPLf8twpigOdmsSlIBgzqSpOSczNfpO/WQwwYwdhAq03/Y27PmW02TViyiWHy6Xie3MpvE66JK2Hvua4PQvpUk4o86+6bfF4f3AfLQDg/kf7lZ1TxbXtSdJkkAP4P78= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=O+SuZSTB; arc=fail smtp.client-ip=40.107.75.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="O+SuZSTB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CC8NMlAoBMieU1Dop+tunN5HqgKOuMgk2ZOjoi5EzufzbrSLOx3rHySAf5FisPac/W5/nFBPFH8Rg5Jb4x7rhaCzcMpjTZHYV2h2wkMAkab7MF6cHvysOv6O2BSWxKv3sDdEc8hYZRlCOE9RIX1/Ua3Aek4+1nSGl7/0+eYOfV2YexmSB46292Y9z4ibsWujKYYMiewqO5zo4pcESGhAk/vWgJQ4glQC9GrOocOTLizk6vNKQS5HTELQH9JRee9ghvrgUMxMWCk2JgCXghdD3DVu06n8MXA+Pc3mk7hyiYySUz+VnphFYtvsLZCDD/ifCPRnoOijtHwNfDjL5pRNDg== 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=A26X0bmfE/rbrzVPagwjlpywNyar0WJ2FsXAYGaLfZg=; b=YbZzM+yAOEpyt36chLaqN50xlqNPD203G0Tqvkb9JiHUFWg2aAK+TznTqMCKTiCU1tLi4ZoZtGNvcykJdVGB029wEFm4O2Zrqwa3dKN6I9YFRx0w56hho/v6tWqcYXdeDlDpQxbx2F+bbq+S2zh+k/BOf/EHAooJaJad9p+o6QqXgmplJNWcwhIpMosOTFPosFthPCC50tMatIDddwKymxMgcsxZ2zxdIAv1K+NZ1bKVOrCPqS9COUQyxT93zP/7uM+hDT2B1Szx3Xi2CY5LQH5zKFpHNdvFd2r+96d8j/CPDwYlx1LF5XgJUvuofDgEKzzuXipCaXFaQWwpeu4AfQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=A26X0bmfE/rbrzVPagwjlpywNyar0WJ2FsXAYGaLfZg=; b=O+SuZSTBdJkP6c4wNkx75fIRCZiq+82zCJadN36XUZydz7uU+15xP7JC1Oijcc04SrqL1xoLdAyoCVK25ycYctfqyeRbg9/wLG9e9b/JCJb34jyDEMKAG9wLljCMTtYI9M1JDgRpMEbi+pg/1rnrx748cy0di/5TprzvkB8L7MQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:46 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:46 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 11/15] serial: 8250_mxpcie: support serial interface mode switching Date: Mon, 4 May 2026 16:48:56 +0800 Message-ID: <20260504084900.22380-12-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: aeca5712-ec40-4186-1da0-08dea9ba3b60 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: DTPdEqgrfgFf8GpXRimwk08rm6Sl9T/UzTLKvyY4yXVc6Ky1Q6mPG+PI36YqtJrvcs5IN3XY7tomnP6kqi0f3/QebFbfFR3G5C6uxRw6W2c7acRJyuUJd7FlnHeUg20SOyOz9i01oqIJVWzTLEJoffE90FrIfwydXzhmdYX1aXtwPSha656IBLKuD8RncxCP275u8sVuLQ1wY288/s+3d11b6lHuIpiuLsMrVuy/MZ/mgCRssdQog8/4C9P0pyzCMuefqHMg+N0MIf8W3i/lpNa/eFupRb9oP+mE9B4vreAXtoRX/wzbtu8tr4yZ3XdbAQGe1G8LlxoCOuiIfG0rLS2lQmRouN0Flrfi845+vsrjGvwll61mxMiPuLRsmG6GN9snem+qqBs+QIH92+HGTNPZEwmQhlISXBCSGZVjy8htGcnG5UGpLrTMBX5h86jt6pE41cJxJbygEHQIOhIaGaiUX9MugYTp1BJ2Siy8OhpwkhMoumsBcUZ1EmS8a3vdl7bjFVAL+ftHnZiPqbIO+V06h+pB5vcy9G9icrx7kiYcrCASkvDayBD5GT/hOAhpuN1luOVyERvH7h7WeijP+YbFjhW/YhTehPNeTVJdh+HGB/H+a9AyGt/4xN9xbfS2+XiPVf4ut5LeSGwk/Yn611xO8Td2OfE/wwdlyczcFB5BNRCaJl46ctvwehbTQy5NiSn0DkwxlfjT4VP/cmiqtzFwEOwUOmJL1k6b6uOalqQ36JJPtez+P8P9lmEfA77M X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UEmXF85O5DvF5zZy+YakwuKzD3QwJEUi1xRw+VyE/aVrgzG3LDWPwmIOtsuP?= =?us-ascii?Q?Ysq7l9hxX/RlmCsXYap6vyazuQeWkmcSgrdIUM18FYGkxUnNfXtXgNZvSHBa?= =?us-ascii?Q?Kfdd9TV7G2v8xkTD2fGKd1lFtvezVDHpZgGLBadNXLSxLuyCGyfe7JGrxg1m?= =?us-ascii?Q?LVpJEJTEQJen588CS0Gw7sfV1QRGF7gVJYad/6fKumT059D3/TnyA1hhd0jl?= =?us-ascii?Q?rAEdP0Nqn1f55IkY2b1tD6pzq9Vqg4+aZXVdCbvni0NRaZqgN2QQJkunYN46?= =?us-ascii?Q?1qa3CvRkBxm2ENfAkFhtvPS3A4f/mX+IEoCyDHLXP2+Ucyl5z85ZgtS1qf3Z?= =?us-ascii?Q?Xqf3DOndSXishhd2IrWnVWrO4ckIRd8WBcAoG+xra6puRSVCqFztBKcr3xEI?= =?us-ascii?Q?vSMwToEGMmmmFf9FjycJJp0lJ4Jfcaai1pE+gsX+1suOMf783S3RH3rQH1ly?= =?us-ascii?Q?bOTKXJwhUlx/O95oZMkGl1hsnC0YmTAyxHl7Qt8P9Vqt5xDXodgfFKx34DMr?= =?us-ascii?Q?uZdsd0y1V+Uj8oSBm+8ddToyy2wU/Fvc1PE3696k6OGfDyPKPUMn7Ypnvoda?= =?us-ascii?Q?Jb1/VyVMx2At8/NlSaQj297U9iPVLgaxY56yo2UP9pUOIiWyo81rN8NIYQd9?= =?us-ascii?Q?FkORX6Dr0GwZvoYDtlJn0WtF5aFpOs1L+y7EU1nHvYtlAVeOjFSJxQYjCr+V?= =?us-ascii?Q?WCugWw85iaQHlt5T1dOSdiPm7UDPbApE1qzIuJUf74xlFG8va5ICMdTp+V6g?= =?us-ascii?Q?DgjATjinjIKsO4HqtJwIXHLb8TolrUx3FkQExVAg6VCG7Zmg0i4Ni3Gdt9HO?= =?us-ascii?Q?Ochj9eUR1RsdooKoqrJB/MFc1R9bSt8jIuxTbuTqUNl/euYFVOy3KWIa5saS?= =?us-ascii?Q?hbOBIOqOjJJLa5hYtgkEJD9iTRVgvbmvUpIx9pi94UApDWQAD+FgDEA9AXLu?= =?us-ascii?Q?hColxIed4K/DsQ8KhH9aVUAtCTfTwmeEpky6mpRq7vThTwI4XCLXdR9I9Kyk?= =?us-ascii?Q?zXqbAZd4268nnK9OiJqOcdSnr3x5kXlRMFrC4ddpih59Cg/QiiU+y2uMMIie?= =?us-ascii?Q?ikYs/Venv+/0xIEqv3khHEfdkJ7Dvq6qMGFiFo3XjrrVHLytb9//nGRR2MF8?= =?us-ascii?Q?vHdVEt35TIegVx6jNMaSZno1gDNffIKjuQ7FI8IAexUl/YoMbnRXD+IemmYs?= =?us-ascii?Q?xQYhg2AAdh1MJMCOw4tHIWShgKoHYhrOjbTuMYKCF4+o9pFMmLkxIoL/4Wif?= =?us-ascii?Q?58bppBojuiFt1OCquin9AThcwAvA8yDu1EiB/xFD26w6f6OwijbfNAHTGxvA?= =?us-ascii?Q?PphgCTD2+fTd6DzXzWO1p+O4TXhiF6kajbQS7/HiLWcyTT7Rg94dwvI6PZ7k?= =?us-ascii?Q?HBozulGdyQ3N0smfas+nMd/JYGIv/Vfg6Lrq9lCUPJGJOGu0Z7ij6NdATrBR?= =?us-ascii?Q?pzuQL+KPwa8bEaB+8SJ+u2h++CwlAo1Sc6TUQXqxlGXHNrf8GZJa9HwO5RFO?= =?us-ascii?Q?8tGGD0HlEbS7SGrkXSmldQIwBNKSogUQdfA/ysmV8ZE4cMw6DbW7mpGXO/vm?= =?us-ascii?Q?IJhb0m0DsAcYajyu/efVrbYdj3pBEXHRogNbs3o5kgVisqsCC+nnTl5YYykg?= =?us-ascii?Q?/LbstZT4d3Ass6/Rd8NiywhdT6A5xfN8TYAk+hQVh3Hk9TmjBLcjETs/rOvr?= =?us-ascii?Q?tVmInov7FdGLYOyE6/qXPnFwh7mun89FwNtixlDYYKVJA1kZ6mE/ZSBsXngb?= =?us-ascii?Q?Jhwa2GBs8rLMTbmGkZNtttMJfo+Edxw=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: aeca5712-ec40-4186-1da0-08dea9ba3b60 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:45.9688 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 92B2p3E+DTbwuoSzp/PvqSCWCEyujBL8drVgb39T8DEDen0/43cFD8/NuBS+6S6gi93NcXpNwfENjA31Hf/nk/5XWj3+kE1ZI+Tj/XpFxw0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" Moxa PCIe multiport serial boards support switching the serial interface mode between RS232, RS422, RS485-2W, and RS485-4W via on-board control registers. Implement an rs485_config() callback and map TIOCSRS485 requests to the corresponding hardware modes using serial_rs485 flags: - RS232 =3D (no flags set) - RS422 =3D SER_RS485_ENABLED | SER_RS485_MODE_RS422 - RS485_2W (half-duplex) =3D SER_RS485_ENABLED - RS485_4W (full-duplex) =3D SER_RS485_ENABLED | SER_RS485_RX_DURING_TX This allows users to reconfigure the serial mode at runtime via ioctl(). Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 45 +++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 8dc1b7b0af04..94c3552b9798 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -129,6 +129,10 @@ enum { MOXA_SUPP_RS485 =3D BIT(2), }; =20 +static const struct serial_rs485 mxpcie8250_rs485_supported =3D { + .flags =3D SER_RS485_ENABLED | SER_RS485_RTS_ON_SEND | SER_RS485_RX_DURIN= G_TX | SER_RS485_MODE_RS422, +}; + static bool mxpcie8250_is_mini_pcie(unsigned short device) { if (device =3D=3D PCI_DEVICE_ID_MOXA_CP102N || @@ -185,6 +189,38 @@ static void mxpcie8250_set_interface(struct mxpcie8250= *priv, iowrite8(cval, uir_addr); } =20 +/* + * Moxa PCIe multiport serial boards support switching serial interfaces + * via the ioctl() command "TIOCSRS485". Supported modes and corresponding + * flags in "serial_rs485": + * + * RS232 =3D (no flags set) + * RS422 =3D SER_RS485_ENABLED | SER_RS485_MODE_RS422 + * RS485_2W (half-duplex) =3D SER_RS485_ENABLED + * RS485_4W (full-duplex) =3D SER_RS485_ENABLED | SER_RS485_RX_DURING_TX + */ +static int mxpcie8250_rs485_config(struct uart_port *port, + struct ktermios *termios, + struct serial_rs485 *rs485) +{ + struct mxpcie8250 *priv =3D dev_get_drvdata(port->dev); + u8 mode =3D MOXA_UIR_RS232; + + if (rs485->flags & SER_RS485_ENABLED) { + if (rs485->flags & SER_RS485_MODE_RS422) + mode =3D MOXA_UIR_RS422; + else if (rs485->flags & SER_RS485_RX_DURING_TX) + mode =3D MOXA_UIR_RS485_4W; + else + mode =3D MOXA_UIR_RS485_2W; + } else if (!(priv->supp_rs & MOXA_SUPP_RS232)) { + return -ENODEV; + } + mxpcie8250_set_interface(priv, port->port_id, mode); + + return 0; +} + static void mxpcie8250_set_termios(struct uart_port *port, struct ktermios *new, const struct ktermios *old) @@ -435,9 +471,14 @@ static void mxpcie8250_setup_port(struct pci_dev *pdev, int offset =3D idx * MOXA_PUART_OFFSET; u8 init_mode =3D MOXA_UIR_RS232; =20 - if (!(priv->supp_rs & MOXA_SUPP_RS232)) + if (priv->supp_rs & MOXA_SUPP_RS485) { + up->port.rs485_config =3D mxpcie8250_rs485_config; + up->port.rs485_supported =3D mxpcie8250_rs485_supported; + } + if (!(priv->supp_rs & MOXA_SUPP_RS232)) { init_mode =3D MOXA_UIR_RS422; - + up->port.rs485.flags =3D SER_RS485_ENABLED | SER_RS485_MODE_RS422; + } mxpcie8250_set_interface(priv, idx, init_mode); =20 if (idx =3D=3D 3 && --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11012009.outbound.protection.outlook.com [40.107.75.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 50E0D33121E; Mon, 4 May 2026 08:50:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884656; cv=fail; b=OevrEKS3XFeTGl7ldhxIMTskA+Lz9Wtnb30/eezEJSmEKVhrF70K++JBkviZ0JQ07eZU1eWepoBMjuzWhSQuw5AkR94k5PclnsX9qX6t6hWDWuotSwrO17nZQsyBfauDWeW4xq8Y4NS1Pg52FAVu3nFisXElDLppcCgjhbFjkrA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884656; c=relaxed/simple; bh=77UL0xplWxMp+bMupdwh0TYGttwWe6fRZwK/PqR1ekc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=p2c/8OXkbT1P0iZKFIFkFL7fst95B61+juSulnbARtKLI/7biRmAHgKatR+JZGGJY/arF1uscX+savDvmUOD3q5pdn0pXfXGmHNgy478D2PRZqBzINEuSypYSSluCVhDMv380qgd3H7iDx4l5A9bxGR8NAEeg/6zXCzatPaTg+k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=e2LgS3HK; arc=fail smtp.client-ip=40.107.75.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="e2LgS3HK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VS6VT/D2T9DSmJBIxgDi71fY/KKtA1cZoxMF88Cb30Mz7Jsw7RolfiLJfiQ7FsnD7GkjW+1pG01dCZw6hzdi80k5uz9nTcyClFFytIh3LKR5ol5sA32dIx+V4YOfchPDWg7NuhaHpnzlKjEQHFfdDawb3yPakvZdjRkeTmC976p+VRlFu3K2NfOqw6uaY2x/Z2+TluzugM7uLsYbTndm2nDMaJW93THYog0ckoHAhZJKVKP8x9VCWEsj5/G0abjWndvcW0GuDESnmJ2nAEcyuhJWX17vhsEOQRznb8xgeS6vrOn+z7rS2nntrMPQA1AayhoRB46Eip5+AqTfcyFV1w== 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=rZJa+2ZHe/bghRJVKi0q6/ZSTodPl/2sDYtzBgiFekI=; b=d4b+1QUVzZOLi2LqllL0SLkdia1rXxg1AX1nkiTCR/gBaFiVkGoYYsqI54KITMQRoksfKJ7rcskezk8COEWKVbTC/eRnv1tMZvmQof6p90uOV4IF/jJinOwS/rLzDmpPPMv2OFA4EuPqiPHVBNQZCP7wgZc7CXUhy/pB4BHOejEl2Mub5jGauSa9fdVGY41z5bkTp30BgGziQ85OwIhHy/7RJgxtlZ+yZ9MdNG4Kvehy/26E0WSSn20rNQHYLc/cxjvdqhy/+uNImRipJhz75shCpW6CejQcEVA1+7i4E193o0rQSM9rwH+3gXqfGomHueyX3IzD1cmDwUX1i3XzFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rZJa+2ZHe/bghRJVKi0q6/ZSTodPl/2sDYtzBgiFekI=; b=e2LgS3HKyAQGUDLpNELZpZBSrElA3cpqzrBeGWKaPvYfr9BbkLSQf0l/voA6btvQbJeb2fizjOzVAncDM+uNq5SqP9iyn8B0NafrivR3MyKjDygvEY3OS9/0jHLXdvkdDdiGQaI1fmUl/aiQGwND3FyXjN+S/PtIu6SGVN9ujrs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:52 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:52 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 12/15] serial: 8250: allow low-level drivers to override break control Date: Mon, 4 May 2026 16:48:57 +0800 Message-ID: <20260504084900.22380-13-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: c812adf2-800e-4bb0-a6e2-08dea9ba3f50 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: znAsNtNkyaDT+oh3xMC388F2SrjZAMFpbTsNowAWM5uUKokHQaBxmCZ3ftC/pDzbQad4Sr0DZGuNa/xk06guUG2x7ElPVx0gducVOMLX0KZnk2eQXaMdYSx1LaMTq2zOBoV/H31xQbyAZp3U7+OCsyJSMxFm88UXnBvYFfBfNK7rhVcE8bm/weNPT3gwX+Hn8v5OQB2Bj5M7Wwh/CcvpU+3XzacTDvHZZgYhX5EJxTAjzant3O6P4PjtWpr1yqN6a4xFxX53Ket5o1SbXBYVwGaVbDZa+q81IlKZErymAG7GV1B5eItSjipbipaeSSDCgYNyUjTa5QYz69nKu8mnPCrUjQyvQNY3O7bemWnZshJd4Sz8PZx6lQzCLu43Azb1fU4u7kDn5I4lojNhWC1dO2W3Z3f0+Miqo4VSb6wnNk/MEA4rtbdZMCs0f75yQ2T8FeEiR/AFy1nuwTO8bIUWdGz5oFPgx6a/ScfkmFpTqQTyHAw6cePQQSFld0ve5TdVtl+HmcG9pey5W9wcRWERcEWvZsoN18Q2Mrx1tH4IKaDOvcitqmMWPu0DdUW0wQs/jx6LBeIEwlGTjq+loWcV8c7EceJnFGmYTGO6G7h2z9gg3lLYR92BPi027FpcaBwykJ+jORHJ4/ivkRJO7VVkUl/5jQl35TWw9ZVoeGjucdjnZrxazyHooh6AZqrHeA8SPhLie8fTC/PCrxKegzlLyXxi4j5PqTs8FKRl+GDst5tvG9RLhEt1EzJ7t4b0/uya X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ZPd6T4Oae358cHKFxg56CSwiMgPBFHmE8LZ+ztxbMyvuTITjXVa81U+l4ftx?= =?us-ascii?Q?EJAvo01DzJuI0rWFDhzoZfL2Il0PUqdeEwNtX9XaeF+R0mO3g7ZhJsum3pMO?= =?us-ascii?Q?niWr0L6JrDnbsk7qE+o2N1ZHIWzUD+yLOqfToJbZHyKBGdjYM5kAOIBMz3I+?= =?us-ascii?Q?zo9Qn8bviJoZxFqILmQDSP5sUqAdR/+NhS8bBy5BNc6x00hJScjXTE7r2Y7l?= =?us-ascii?Q?SYwUTICJyFRoprMKFsBTIbeISUpncWXHAIEQAaEUAQRIaFTe4IEzNfWArjuv?= =?us-ascii?Q?jd3EZ6GnsindG7UuzyT/4smmY74hJ6dBSZ74qtBsPdkILamEAHDQ08u4NDh7?= =?us-ascii?Q?yN0mz1auxwXLp9K1H88PYnsz5iACweDqtSZFBrAG3mOj0NUpo6KmaUN9oqiF?= =?us-ascii?Q?fRH0oWzib5FqsNP4XK9WrC2DkhzsNSESohIgC4QfzkTXu6thpBsFhtRmOP8Z?= =?us-ascii?Q?659NYyiMjYsgVZ6FOqI37CkwNFCLIHrzyX0j6qg7Mx6cqssDSo+TdDnIsXYl?= =?us-ascii?Q?WPsDmv3lY4IrlKZA6ip6/sEuaB+jkXomQLtXXBHZtVjRVqGoGqcw4znpE+mA?= =?us-ascii?Q?VmQPij6/9DY/ah2qX+qJrNi+YZi0W08u4Ge4lysbNpB+1GF0Wm6KaaWJc+0m?= =?us-ascii?Q?UsvbcYJtS6HayO1hBKj8eaqFVKJg0BGVEnI+t3zTvKUAlTh/+PTNZix2Gy0H?= =?us-ascii?Q?eqfwntw7i4LFW7XgRfyMJxSDm8kKRBup4F2q+2OoBwcQlOdP1VuaCJ4vtRqu?= =?us-ascii?Q?1H4YbaRjcuUONhF07ITechB0Hr9TLzPujcwwoKzQQ8v7wVkHuXC8BFRkLwaa?= =?us-ascii?Q?nzYwfFgr72E/g22nJSP+4lVJosn4CTlV6nRkj/muvU/5+mSmIUzPyqYpjcE5?= =?us-ascii?Q?SCGqvy+u9X0mP00R1b9iMkiHbC65Uf/xypzTFnqPeO3jvUVH5Bk7BiA8IyGC?= =?us-ascii?Q?EgYknEjL0tqM4c9RZrtCJDhwNqvCTuG9/F1fJ5hFDL5r5UROlT6CcKPnwMZa?= =?us-ascii?Q?hrZgfhSdcUXRgC2PEL9DSdAGoU6NIxkovA72vxFoizkGwOeu3Q9FssMK9k5S?= =?us-ascii?Q?rwLhAm1XPg36SeI3JDidFDOh1gZ+frfbsgTs9jjgsU1hPeXrG5c2fuH7eD5u?= =?us-ascii?Q?KaNMUvNxTbpkBVYJZnHPTnOtBUZqHS5YMvcHwDCtHBXqSAuhkqbRe0ZxTEF4?= =?us-ascii?Q?j4fhCR6FaJ/P5W2Yk0jHSPssW4U+8TOJ7rUwClXyo2TaagUXo7Qt0YcgnaTM?= =?us-ascii?Q?j95bYETeomCCi4R14st2N6bbgm8R0wSPYZi9rXfz3woflJq7IMM3n0r+87ql?= =?us-ascii?Q?sYg1kc2x1vUbWE2TLUa85sYps9TcRsaMVpujwVJ9cQBukPZ4jdmY2jM0PfES?= =?us-ascii?Q?QotCdhoE5tT+m+D7+rF+YRPbWtaluDeHef4N8nyCn2Nf1IOFpYdT71EKj+KB?= =?us-ascii?Q?NQ2CA3QhTPTkpKcR8hnhM+eqFT83Ub/XyVGySMIPFAjqxeL/ILpg5hTy1Ch8?= =?us-ascii?Q?zLjSjoXpN2QRoL8EY9K38FYxRFhmf/FiPvqmRRFg4kl2lG6MQSGVuUM05pe9?= =?us-ascii?Q?4o9Pk5SiV0DFslODa64mcskpr//Ok5cuAzGtUN+h6wOqVZ6eacbzBkNypl8H?= =?us-ascii?Q?6Oye8nH1T6xQCg20aQx8QifvWINuyjte4xjZD0ZXaG7jIJ/aqjDnaS1TDgAa?= =?us-ascii?Q?m3FhiZLRO2+2183rpfARHXhNWzM0Zgmx7m6nZr9cmlPJ38igQKLJP5UGRxO7?= =?us-ascii?Q?wJIeTSwjFerukWJazU9jI50ImO280Nc=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: c812adf2-800e-4bb0-a6e2-08dea9ba3f50 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:52.5490 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TuPcPw4z9s4dtGAfdQ8TOgeYifbW564x9A9zqIdQjF8U/U8HfLf0vQK4rQRz0XY7HK7MoH5mnljKtnV3Lo7dWt5rt2ixXpMNqCl7QcYLpCw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" Some UARTs require driver-specific handling for break signaling, which cannot be expressed by the generic 8250 break implementation alone. Add an optional uart_port break_ctl callback and route serial8250_break_ctl() through it when provided. Rename the existing 8250 implementation to serial8250_do_break_ctl() and export it under the SERIAL_8250_PCI namespace so low-level drivers can reuse the default 8250 behavior when appropriate. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_core.c | 2 ++ drivers/tty/serial/8250/8250_port.c | 11 ++++++++++- include/linux/serial_8250.h | 1 + include/linux/serial_core.h | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/= 8250_core.c index bfa421ab3253..0a3355eb4bc3 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -796,6 +796,8 @@ int serial8250_register_8250_port(const struct uart_825= 0_port *up) uart->port.startup =3D up->port.startup; if (up->port.shutdown) uart->port.shutdown =3D up->port.shutdown; + if (up->port.break_ctl) + uart->port.break_ctl =3D up->port.break_ctl; if (up->port.pm) uart->port.pm =3D up->port.pm; if (up->port.handle_break) diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/= 8250_port.c index a17fdb5d68d2..72ecc0112b8a 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -1937,7 +1937,7 @@ static void serial8250_set_mctrl(struct uart_port *po= rt, unsigned int mctrl) serial8250_do_set_mctrl(port, mctrl); } =20 -static void serial8250_break_ctl(struct uart_port *port, int break_state) +void serial8250_do_break_ctl(struct uart_port *port, int break_state) { struct uart_8250_port *up =3D up_to_u8250p(port); =20 @@ -1950,6 +1950,15 @@ static void serial8250_break_ctl(struct uart_port *p= ort, int break_state) up->lcr &=3D ~UART_LCR_SBC; serial_port_out(port, UART_LCR, up->lcr); } +EXPORT_SYMBOL_NS_GPL(serial8250_do_break_ctl, "SERIAL_8250_PCI"); + +static void serial8250_break_ctl(struct uart_port *port, int break_state) +{ + if (port->break_ctl) + port->break_ctl(port, break_state); + else + serial8250_do_break_ctl(port, break_state); +} =20 /* Returns true if @bits were set, false on timeout */ static bool wait_for_lsr(struct uart_8250_port *up, int bits) diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index 01efdce0fda0..5ae00dede026 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h @@ -192,6 +192,7 @@ void serial8250_do_shutdown(struct uart_port *port); void serial8250_do_pm(struct uart_port *port, unsigned int state, unsigned int oldstate); void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl); +void serial8250_do_break_ctl(struct uart_port *port, int break_state); void serial8250_do_set_divisor(struct uart_port *port, unsigned int baud, unsigned int quot); int fsl8250_handle_irq(struct uart_port *port); diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 666430b47899..d9e5e3d02003 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h @@ -463,6 +463,7 @@ struct uart_port { void (*shutdown)(struct uart_port *port); void (*throttle)(struct uart_port *port); void (*unthrottle)(struct uart_port *port); + void (*break_ctl)(struct uart_port *port, int break_state); int (*handle_irq)(struct uart_port *); void (*pm)(struct uart_port *, unsigned int state, unsigned int old); --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013054.outbound.protection.outlook.com [40.107.44.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E3EC347FD7; Mon, 4 May 2026 08:51:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.54 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884663; cv=fail; b=PWyGI4iOAwus1T4jBHaljTAOI0M1tw+BQy2oEkT2dq2k+MWxB6v+JWLra5b6SVxN2/pWWXqgvxIOdK/J0GGYcvc2xjRSQ0iksQ7fi3h3rm8m0L3+O2kGgcaz+LRgShNZZFdz5lUzFTOG+fzl35qc/cVThKXAbTZGtkpbhRcC+fY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884663; c=relaxed/simple; bh=OgiJOnrKRXQq9vi937mnexg6Y1nWTRBX9d3/SIkF/jw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=F9wbhkLCbUpfl+CephEVPDyRDjcjAPwwS2pCnmUhJnfYRhPur1GIduvnYdtTLKCpwPMk0VQc0C0ychMJauPOJw61ycHqui+CoooPIskNedZDtrhz1H/59NzD1jE9LCzjluc/qh5AmooW+pBXP5eGqnviQsDiPi2l1zvKwwBI/6A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=Gt6hckOr; arc=fail smtp.client-ip=40.107.44.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="Gt6hckOr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qCDmeWB8C6fSiAkWBV3Hdkw6HVkXKHYCw89os4CeodAdl1JTy2g9kAD5l0da9M+fp1ptzoOgIz6JH05/LKeTyLYMWZreS9vc/vg15ENmMykzczb6VlFeRk9fNQLwrQcQmZaNp3/PY5SFewhPKLkK/xceIjU/hc7b9vklZgTBqFxO6ST+MCUuG7VWUkqV7YPQ2IBrEpQPVf7Z+GijrKnf3aKv7JzuGpPukbE8VdzJU7MKlPsOAio81ISYSIC1yVs2f/fnfPizIc8Tsa2jRiHtyap8hF3QzoMArrDRn06QBkGOjH7t18nxks3X1f2Z7GKL7qXPQ7R/CgoIzHiehbVOuQ== 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=ynUrElF54FaDr8ntvGzpNRyMwEu8h8Y7LKKP6yOBXCo=; b=MSiPjMP2+33vaCPKytzTHurypRUFMdoB/SgnyxhQ0q4oAbhQKFXOl9N9cxXAlX8GQMf7JZ2H6lDOFnt94GpVBIu8fIf/vpbJfNEwqHEgwD32Z1gFQpVhzi+//qjaaJ2ewh5CuCjEWHFXNgqM4mLX2wyYA08Hjvcr597rW1A/3+UZSbo6AP9LYH8VcsBv6a89Yx3yuWxyNaRtJq3Q8zpntbIu5MrkM125dkgRyIb3g49j2mB3Kk7Tx4R/uU0sOlCk3baIOa0lb8ow3EUIrp12Xnt+784/WTx/OeWY7Xh4JNz9eq/aygKgbZQ/I0oEm5KD0H1lMpd3SUTpPqx4hriKfw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ynUrElF54FaDr8ntvGzpNRyMwEu8h8Y7LKKP6yOBXCo=; b=Gt6hckOrDPRF+xEqt5NnX6hPqWfyND2kPIewc6QcIRtdTvlOvckgZeTyQ/aV0RiYOvB8fLclenVTcOQrdyYyPhFIqfrTdcaIU6+wQIsU7EGzTc5yj4PYtbLGUG+JpakcBbzcK/8Vb5FC22yvzbpE1tvryZtfLDpk3GjbhbX9Nt0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:50:59 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:50:59 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 13/15] serial: 8250_mxpcie: add break support for RS485 using MUEx50 features Date: Mon, 4 May 2026 16:48:58 +0800 Message-ID: <20260504084900.22380-14-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: e4b5397a-407e-4e96-f20d-08dea9ba436b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: teRJxgX1Q/NHk829xCK1SyrRgPXqxx4RY/jV2YZ54He61kv8mKTvRNORaMef5tob+25d/9+HgNTzdSOOU5Q15WvvDck5SvRSV7JUMfTFEkpSr+y+vMz2WlgqN6a7PogPwZVKTx91qnhjf1tYaS1yJI3ElaP6ZH/7COvEzvB2ATbaLWyKmR/gA0FsxsNQuP/QCNQqYahQBm4sJE4eez3sOC/JuCaxHi3+pD8ZMbU/XlDDvR0WIibsx6PBzN8deDmmOYIUrgoouWvE8OiPFqVy7x9QxwpWHu10PWw3q0C7qBb+IundTl1C5QJU2dC7TyCtgHmP6lrlkVSV1K6rnBXlnsAi6VQ+eJtU+0fp/hKhMQkG6khY9+STRGmio4zs1vNvcNExF2+zv2//v8XkSuxmTtOcOaiYT2L9XWx0zirNgZbe1F/CkXWNBEM07hr5mM0WiAFql6WpO2XU8ChrF/NGN0kt1z9klVnSWV81HfizfV/MV57Kw7BjwHHzf2lj4bf8nxRMe44d0rFr8onM7Wn0ExWBxVWdQ4yT+4ED6iaowYFZEUhcRPSV2aHIY2n9vpg2oTQIHstL7ZJeGNGfeYbSmppTWXpr0htm5ncBb5k+V/udUqhRvyewcCMVUJI6ml7FpFSJ1lKg6u+iNGErtgRKt7AIvOx9ms43Y6d5PttJ3keVABUyWhMHcm3VlKKbAThosUfI9aMnY3jmgSspa2JHVhSen3eUynoTar4V/8EMousIA1rIPEma/mvLkBaEznIv X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ECdsV8p5vYCHzDlfFKbYQEchlRmPR6wt/PaVN0sE6ytTqCsDUDC4YeP4qZ8y?= =?us-ascii?Q?aKflWHTDL5VgixZukw3G2UBhut6/7LQDmoFnoL3lixRs9br+NJCuUuNKlQxa?= =?us-ascii?Q?1zIlQ+IrNt+240QvDzuDpGK/I7KR3yymLm6NpH25vmMcK2oujHZOoq8B3kD2?= =?us-ascii?Q?X5t9xg3Mtx9WVzRYv+LXWC13ZhP32BkjtP9woMOMdYoVy9DTYjWtqt9WKc9V?= =?us-ascii?Q?Gkze1dqBwFOhjF90UKMJpNcU6AGV+VKOYjyh7Ly/bG88SgiTofGy6Y9pj7wM?= =?us-ascii?Q?VlogywyyQsHtAzqrxxDzfvTc+wRUYdhhQLSxVvMGjQuKhMmwZXDjStrKuvPf?= =?us-ascii?Q?UrZBte5ngjirBZSd+Hv64Saby075F2Kj1jMjONtEstw1TSiTKD0keBNNTrTw?= =?us-ascii?Q?xfIZkWkWGIbg/euTDeuKGdj3lsZuPvUKQ8Ha61JtBDrtDDRHaQZTGtXHT9UD?= =?us-ascii?Q?Z02mtLfBLqU7FebR0YIy6aoXrl+Y8xjXdpHKqRVeshF3mncp7ElPYtWUmf1d?= =?us-ascii?Q?yrjNWn2Kjwg26OyOb/ld/axJTYMG90yOwaUbVmLPteMYOa1faZ+k4DR/Wiqg?= =?us-ascii?Q?5PcY4Nire/lQwlgt+2oaRXfAjCFn9otkwmgFkJ2m39R7lEB+CjWPzFKQdCCi?= =?us-ascii?Q?iOr2JHYwfIXfyUxAo7397YwS4D6z2w6ELGHhQ1yKsa7CwCNPE8cMSdTHUgML?= =?us-ascii?Q?zTKolMTrNPk4g4g8ApZoHgdioiBrVVuKuUQ3OCU1elE4zFemUy/Vm6LeLhgx?= =?us-ascii?Q?YFER7GDWKoCngP+zCSTlv8gC9G6RF5QGoXbhvETO1F07wzGufcPpMWoE0vVb?= =?us-ascii?Q?1bFWNQoKmJuWc8JWNBe7M31wM5G4obBrdUDvQ+RWPbHUrYK+RusIGrEUdbR/?= =?us-ascii?Q?3I1r59fl61R9fC4DJuWzX0BfG5rQcsB+T/IS23SeQzmlH7Lgf4mV9M5K+qnu?= =?us-ascii?Q?+9K8gdlR/7XfAnSUnYHXznevIlrkYH7j+o46102U8/cuQpkm5PKYmGf6+9cP?= =?us-ascii?Q?ryynjDMY+VxMmXXlQzvrALt2h+g76kgJkfRfjevKPPxorO3sjdktrnYOvaGS?= =?us-ascii?Q?4qmw3/v9KFMhBPOyhTyISGQqQkMGHLIvnVkOo1uclbJPpuFVxh24er8zyPK1?= =?us-ascii?Q?Pb72DTbmz7aFhdac3Hhi+F5Xf5eQ058sfXzSK2cZ0TkIUVt+P0WWhsOR4oJP?= =?us-ascii?Q?Sy93kdYhL/mKOYkBZa3AjV4aNspWyyJ6eV4JHWN9srdGSHqGfQu7EarNuYOW?= =?us-ascii?Q?QPeVFlFqX5NKH0Boc/k4uxJ6rp0wVYYCg1SYEi4bmAc829M4DLxmj/mbVsRq?= =?us-ascii?Q?6rjCdAr4XvBJ6H12j1+QQQPZ/twdW+GXxC6b4IYip3yf0A3I5pTYu5UV3IzD?= =?us-ascii?Q?3NwqruNp0Gg8ljyDiLp0HNeZ3mdTYGbHczFY+SBbslEW5gyRbFvk4Jz82ufj?= =?us-ascii?Q?YaXpOMg/H0yUu8YMbOeDitzBy940TvIjPEfBYB+XEWjSqEkf9iB1T0Up071e?= =?us-ascii?Q?WpP4TBKFMxL2ZzlSeyI/Zug/VBUI6+RuYwesQyY7Ww8yj1pdjLTbje3XW9su?= =?us-ascii?Q?4/4kJS1l6xlcRBiW4kV++GVkC6QVeYWRE7XciRnp9tvNNdBbn7+Mtt+ZzJHd?= =?us-ascii?Q?EBWlIoud6rA5Zh2lP1FJmWgTaKcpDYcu4Awt8vb/170L8NvF4p2VTat6KmyL?= =?us-ascii?Q?arGiWknXFvLYIHXhlRxL+qIzwVRrNe3V6flzr0ofjvVKA1GarpJCtBpP3QOn?= =?us-ascii?Q?3+MmMpmf9Sh2muPKI0eX0T1cNl29ug4=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4b5397a-407e-4e96-f20d-08dea9ba436b X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:50:59.4743 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Mx5QL587agm1z5Xc5W4DJFLL8iQGshX7LnujQU2vrQLYXEtOLZSowOlHiMo8AzrxLNUvxoKYDfi5wjqsYHh5RkioBeii0xjvVQS4jaegv/U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" On MUEx50, break signaling under RS485 requires a driver-specific sequence and cannot be handled correctly by the generic 8250 break implementation alone. Implement a mxpcie break_ctl callback that performs MUEx50-specific break handling when RS485 is enabled and fall back to the default 8250 break handling for other modes. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 94c3552b9798..5bf15ca78228 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -54,6 +54,7 @@ =20 /* Special Function Register (SFR) */ #define MOXA_PUART_SFR 0x07 +#define MOXA_PUART_SFR_FORCE_TX BIT(0) #define MOXA_PUART_SFR_950 BIT(5) =20 /* Enhanced Function Register (EFR) */ @@ -426,6 +427,56 @@ static int mxpcie8250_handle_irq(struct uart_port *por= t) return 1; } =20 +static void mxpcie8250_software_break_ctl(struct uart_port *port, int brea= k_state) +{ + struct uart_8250_port *up =3D up_to_u8250p(port); + struct tty_struct *tty =3D port->state->port.tty; + unsigned char tx_byte =3D 0x01; + unsigned int baud, quot; + unsigned long flags; + u8 sfr; + + uart_port_lock_irqsave(port, &flags); + + if (break_state =3D=3D -1) { + serial_out(up, UART_LCR, up->lcr | UART_LCR_DLAB); + serial_out(up, UART_DLL, 0); + serial_out(up, UART_DLM, 0); + serial_out(up, UART_LCR, up->lcr); + + serial_out(up, MOXA_PUART_TX_FIFO_MEM, tx_byte); + + sfr =3D serial_in(up, MOXA_PUART_SFR); + serial_out(up, MOXA_PUART_SFR, sfr | MOXA_PUART_SFR_FORCE_TX); + + up->lcr |=3D UART_LCR_SBC; + serial_out(up, UART_LCR, up->lcr); + } else { + up->lcr &=3D ~UART_LCR_SBC; + serial_out(up, UART_LCR, up->lcr); + + sfr =3D serial_in(up, MOXA_PUART_SFR); + serial_out(up, MOXA_PUART_SFR, sfr &=3D ~MOXA_PUART_SFR_FORCE_TX); + + serial_out(up, UART_FCR, UART_FCR_CLEAR_XMIT); + + baud =3D tty_get_baud_rate(tty); + quot =3D uart_get_divisor(port, baud); + serial8250_do_set_divisor(port, baud, quot); + serial_out(up, UART_LCR, up->lcr); + } + uart_port_unlock_irqrestore(port, flags); +} + +static void mxpcie8250_break_ctl(struct uart_port *port, int break_state) +{ + if (port->rs485.flags & SER_RS485_ENABLED && + !(port->rs485.flags & SER_RS485_MODE_RS422)) + mxpcie8250_software_break_ctl(port, break_state); + else + serial8250_do_break_ctl(port, break_state); +} + static void mxpcie8250_work_handler(struct work_struct *work) { struct mxpcie8250_port *priv_port =3D container_of(work, struct mxpcie825= 0_port, work); @@ -539,6 +590,7 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id up.port.throttle =3D mxpcie8250_throttle; up.port.unthrottle =3D mxpcie8250_unthrottle; up.port.handle_irq =3D mxpcie8250_handle_irq; + up.port.break_ctl =3D mxpcie8250_break_ctl; =20 for (i =3D 0; i < num_ports; i++) { mxpcie8250_setup_port(pdev, priv, &up, i); --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013071.outbound.protection.outlook.com [40.107.44.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 771C4347FD7; Mon, 4 May 2026 08:51:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884669; cv=fail; b=CCL3ztT1ZZS8dCV1oewldWxmqhTRs63rWezve5G7JpnUolgQCTJjIEam6/lrZcA3dENusIort+vfIUv73Y8wY9wuelB8oeo9Nc6VvW7QQFMmaUqkgj5qbOIcqnARW4QHsWfJ27QATQri64pCx2kWzUlAqzoHvL8Ppu/fyHB0rIo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884669; c=relaxed/simple; bh=iwC2we07umoCEyfe3XnXxHT1DAmB1Ne5yI+a24eCyeQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Wk+TPkdf37rzzx7Lkb1TWS4rk1LHRPrhHT9iq1nrv4oIO5YpOjboMM3PLdCZaiTyK6InT8zLMjQGBjkNVXb0p4SKoamPR7You7OXRHQn2ZwLzfX87Gj2RNbd/acDhEVWh5iKCRBLy01Vw8zneECIY7QXrZGaEAPFoOdzLU+tajQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=g/PFcwzV; arc=fail smtp.client-ip=40.107.44.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="g/PFcwzV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k5NstC2qqccy02ncsOwtFkpu8NmhGnj7vKxgml3JkA//D0EDCAOJ079Qp7Kn+vVH9a63qzKbrmfftDvJ8y0HWDJebkFJWvtb5EgKt2bln91ywHXNZmqgxvHzj7cG9DwTn4wI0BgN5unvR9ors7CGZsrlBZIiI2u7ItouabKu2BK7fJxg86/Y+Ymn1vSHMkPmPRsERqbs2Jl79Yf0m5DAsxitYAJhkKDRJO1739AuOyDVgfOWkLPjN7yzlVzlOFMM89y4hFuQ32PHemDklS+T5tzEhl1RsBWuNljRaRr1wE6LJUiGdkxaJbyWIPfronbB1TU6Iursui9DwMcYvTuCrA== 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=umOW8CWkjUIaD7mFYAycK7dVoQDUmcgsmWy/Kh7J9I0=; b=dAyG0ajSdfff3epSfR/Df9KP8SOGxOHIap2WVNdi0vyUGIjm0FYTG9KC6NLnPWcSwWx/NbguI/FdRHmE410ypRFQN8gBuvDfqy7n46XHHECs0tr9FtSWfGGRHOwKO2ovyQJ3chdx73KYniIZlRdKIcvUlCFvGedHBU9qxIO00P5OiK98/MPm3qeN9N8vRTWIqB3jmqPFvpr4jTeJP+48Gq4GMc9i0JmiVTtU2vq9ZBwQzffYu9Fbsj64NpRUyU0AzQacZpKj+IGYEdsHvlgPz3rGhW2qET3YjYkjNDAYKmavE30KOFQ3tRBUFdOzktwe38roJ84P8wKI7PSZKKuvxA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=umOW8CWkjUIaD7mFYAycK7dVoQDUmcgsmWy/Kh7J9I0=; b=g/PFcwzVk2TKtbly7I4hEDy4iZqH8XCiBl5OoofpDDEdupAuSMZ3fHmjBghppokV3rajF5HUaMb9Kwo4hCV+EsJva4/PIHZeFqgy2rcRNDQwKKO2Mxa6q86JYP6kTA6m75JNCiscf87Q04XMsdeGqmC23Xt+vy0JaRlCsSfXJN4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by JH0PR01MB5516.apcprd01.prod.exchangelabs.com (2603:1096:990:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:51:05 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:51:05 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 14/15] serial: 8250: allow UART drivers to override rx_trig_bytes handling Date: Mon, 4 May 2026 16:48:59 +0800 Message-ID: <20260504084900.22380-15-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|JH0PR01MB5516:EE_ X-MS-Office365-Filtering-Correlation-Id: 78488d16-f8a3-4cfc-05c8-08dea9ba4726 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|52116014|22082099003|18002099003|56012099003|38350700014; X-Microsoft-Antispam-Message-Info: BaNkKVRgv3wNG3yulfMweGZvzX7HGy9fZZpwiPQsPiV25CnmVpg2RLcW0rJkxkCgH0Umfm6zIoltfy1uJqxxEQnWkv9hK2FRkegrWzPGDtG35jeY9GpCslh+a1QYNHWZTDw8yLL9PwvzxqvqF+MyegGkSt2vDD8vXqLywWeMKWrbx7HTG/tFVL/bLa1ILdEEZVtGuDFMiTx2zy/Z3uFaVUlirvcSRAc5XCy1QFM/yacbSDBolfTFgjzD9wPqMm25Z1/toFjO9AIK9igbmEZQiJPkYsk48TEIda7wBBeSHryo71mIIaBMcFZ7UUQTrKanVAdmgiqxPhyRBLPwBYDjXOzNw0S7AKwARIG8My/AldKjtHHRD6a5AF9D/3t2sfrwh0ftDD3O9xUxxwcYjxI+DXEUwFLKk124YpJbNCEGdl4mIGtdO1GiBwbhm37kDi4yU+hS7HL7nMvykHYdC9+8I0h7PzMRm/NgxiSnks5UKXfOOY/DB+EabrlfIj/RbMKKqxis0ZxDZ81m7cI8+qMoVhlojLZOaUPcd4sJZsOnCDPoWqh2Okt7vG2APO1n6UWOfg5+l7dog01r3vCzPLGr3PyvhXm4Pm4JwlQ2dcJr0uJLZUpYkRWv8LJpnwYy9LSNQFsOK6RnP+kqP8XsMOe2ECg24TRqBpWHr67l5jDll68TMHE8OMnjEYROxtfBTHQtJzhPgA4+f/UA9EQBDltNEtWyl9zNkADrGYQOC2ruX+iRbOgntp5LU/PROKMFPzy5 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(52116014)(22082099003)(18002099003)(56012099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UULQ5JLjnsoG4pkhWzxGLL1TlXVIHGle5Rw+h1ZNgvgh7VERIBXsO0Rptm5u?= =?us-ascii?Q?kPKqFqpwM6oeUWJPgg5b08BWD8djth3YZnVAwUV/NBmUI4ZxFkdcAd6+9Qlm?= =?us-ascii?Q?mC1HgLlDl1NBCmwX0B2aS+JiA8GRdR500zRTNhUjvphS4vqsvU+pRXomaL7J?= =?us-ascii?Q?bvzbzBBHHASTDfTLE+KnJ2szaZAZA99pX/8giunT7W+CFiojBQf/cJPELfxB?= =?us-ascii?Q?NDHqrfnwI7fiMGJ+b2FC0UN56rQqNucPPT9dwoWM9t/XUaEHoas556LoIz/o?= =?us-ascii?Q?Fdg+9fdINhMFhimAnsNQrYvuSreXvSmN/VFmyceDJ0ZbGqxT+/1FKDry1X5y?= =?us-ascii?Q?ZeSQsAWlPp3dFfWSL8U6Iki/7nB+P0Jq84gs0wtmqoh48ln6ixPcbliTEOky?= =?us-ascii?Q?hKISY+3pKIrxBDzsy6qlg7Pznm+tVTqRiAQwq6CFPFt94bmVa239VR5aVH3G?= =?us-ascii?Q?aWwqou+JNAjdzb5Cpv0FLR1lCFjPDxc7lBUFHH52V/zPI9FFx66b3GaTegJl?= =?us-ascii?Q?IVIY11agTnw3UHsp2qeIsT3btyc3SiBeyWOzbHERAPGnfSOLN/MFk6Up5n9o?= =?us-ascii?Q?VXPqo1kaewcZDXHbIT1sR0wN4NSTpcWQlxrKHIMZdlFeofB1ZJ4VuURVnm0g?= =?us-ascii?Q?XRCW9fdfRJXYNKex20g+koz8ATugLVvaATog6EQPFgiVoQeV6H0TxlVrrBhE?= =?us-ascii?Q?3cu1x/7PyaYXbz+3fn/s5IU+gAqeNuo7NuiPbS08mUsHcU9PVr0CAExQXkgG?= =?us-ascii?Q?lsEg7/U9/88KkZ2cR4fAu4OS/D/IVOuo8eqrfcIlM87EIuWfNGjKBZ8gB3Wu?= =?us-ascii?Q?dG+cXhxJfbn+ofCk03RqbQO4Z5tnHbGZ0ctKiH1xbiE4iQ4aGHWUnTLtPDsL?= =?us-ascii?Q?u0axzBjUr1TT2kxiDdZFu8ha/ZCKHse5CrjGWTI7WGisPOs3u6z1hYY5lAoX?= =?us-ascii?Q?TL7jid2a+DZ0024aSWQaNJKGOUzn6L8Ak+MGiWSN0Q5f73Ludm0ysx0iLWCv?= =?us-ascii?Q?lNZp6WU+NS63XMDBTazRtSSm2XtJIE26LJPQxVHC3dhXXgOBZvr11isxx/4e?= =?us-ascii?Q?Rc6c+9iuLsT4brP9m9UawFFyObklH5yGPPBGu40C51GbNcQZrYDbp7CjluhL?= =?us-ascii?Q?Bo7f8tnK+aWtYaUkjAZAM4klmJ/SVrdDkC+XjLzzGf1LaYdY6lgRiQWyjM6x?= =?us-ascii?Q?QSmMwuv6JMSdmVHnOggUFZfOdSc1AKDdpDbSfPcnkqvCIPPx8/hSwcnixyJi?= =?us-ascii?Q?MojFMxNR3IhU1LT92sBryYs/VMGocaxwSQ1vygIwuGAWAH/1BHnGrYYVYzEh?= =?us-ascii?Q?oXkHYyuskQhI4xd2HSTB4nNY4lYPTiaAWxg5N5iPl7O5xinA4PfClxGTXki0?= =?us-ascii?Q?fd7bRHEIDypFKYOTvfWsDaRvjQP2I389THWV0bA4ATF+hc5oDdJp2rI+0Qy3?= =?us-ascii?Q?UA37jb6qET8luhaJkdKVijWjWvg+QkvuSIqpIz/OP7cieeqySakaf1/eFWqK?= =?us-ascii?Q?8OEQlgPNeHfjo1qxnxbEpMpTy+sti8qvr25czdVJ6k50Ct4b7PtUESWHEGKC?= =?us-ascii?Q?TK7VIIuzNSUPw8GBhSEETv0t6dXdL33WxO1ZjwwKRRzZGvrw9wUveSClUSwS?= =?us-ascii?Q?v7jhVBgx1ciZ9N0B9/6QOmllUD4IXmpFEKmKj7WdfPkhJk2ohxqYx/zTO2u4?= =?us-ascii?Q?GG6t+aTa4Sc/xbFsEuAk/g8jzxC7ZeU4rvyio/X53R/1wI58xu2qFf2ok7Nd?= =?us-ascii?Q?weabcfu1IdQ2VSKVokfSKm2DOp9kKis=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 78488d16-f8a3-4cfc-05c8-08dea9ba4726 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:51:05.8053 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CvHFyis0NZK5ACz+XZWYTCjw0GQ3x+wXwg88FvPUdGlJ6lVsOwEdzsRfY9qS4bUntEwYUsuCPvphV/ud2waw1X2XlvDUzEk0Uh8lNF9AxI8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: JH0PR01MB5516 Content-Type: text/plain; charset="utf-8" The rx_trig_bytes sysfs attribute currently relies on 8250-internal helper functions and assumes a fixed mapping between trigger levels and FIFO behavior. Some UARTs provide hardware-specific RX trigger mechanisms that do not fit this model. Add optional uart_port callbacks for setting and getting the RX trigger level, and use them when provided, while preserving the existing 8250 helpers as the default fallback. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_core.c | 4 ++++ drivers/tty/serial/8250/8250_port.c | 14 ++++++++++++-- include/linux/serial_core.h | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/= 8250_core.c index 0a3355eb4bc3..a0a53b642d6c 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -802,6 +802,10 @@ int serial8250_register_8250_port(const struct uart_82= 50_port *up) uart->port.pm =3D up->port.pm; if (up->port.handle_break) uart->port.handle_break =3D up->port.handle_break; + if (up->port.set_rxtrig) + uart->port.set_rxtrig =3D up->port.set_rxtrig; + if (up->port.get_rxtrig) + uart->port.get_rxtrig =3D up->port.get_rxtrig; if (up->dl_read) uart->dl_read =3D up->dl_read; if (up->dl_write) diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/= 8250_port.c index 72ecc0112b8a..2ece8af5d149 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -2999,9 +2999,14 @@ static ssize_t rx_trig_bytes_show(struct device *dev, struct device_attribute *attr, char *buf) { struct tty_port *port =3D dev_get_drvdata(dev); + struct uart_state *state =3D container_of(port, struct uart_state, port); + struct uart_port *uport =3D state->uart_port; int rxtrig_bytes; =20 - rxtrig_bytes =3D do_serial8250_get_rxtrig(port); + if (uport->get_rxtrig) + rxtrig_bytes =3D uport->get_rxtrig(uport); + else + rxtrig_bytes =3D do_serial8250_get_rxtrig(port); if (rxtrig_bytes < 0) return rxtrig_bytes; =20 @@ -3044,6 +3049,8 @@ static ssize_t rx_trig_bytes_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct tty_port *port =3D dev_get_drvdata(dev); + struct uart_state *state =3D container_of(port, struct uart_state, port); + struct uart_port *uport =3D state->uart_port; unsigned char bytes; int ret; =20 @@ -3054,7 +3061,10 @@ static ssize_t rx_trig_bytes_store(struct device *de= v, if (ret < 0) return ret; =20 - ret =3D do_serial8250_set_rxtrig(port, bytes); + if (uport->set_rxtrig) + ret =3D uport->set_rxtrig(uport, bytes); + else + ret =3D do_serial8250_set_rxtrig(port, bytes); if (ret < 0) return ret; =20 diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index d9e5e3d02003..bba6223d7b12 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h @@ -468,6 +468,8 @@ struct uart_port { void (*pm)(struct uart_port *, unsigned int state, unsigned int old); void (*handle_break)(struct uart_port *); + int (*set_rxtrig)(struct uart_port *port, unsigned char bytes); + int (*get_rxtrig)(struct uart_port *port); int (*rs485_config)(struct uart_port *, struct ktermios *termios, struct serial_rs485 *rs485); --=20 2.43.0 From nobody Mon May 4 13:06:51 2026 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11013061.outbound.protection.outlook.com [52.101.127.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 68F3B347FD7; Mon, 4 May 2026 08:51:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884675; cv=fail; b=rGiqbpAkZq1hAHyOJolLegOTKgD8Qi6g0XtLnq5qZonZNwwXVOq59BBv/FzwWmzUN34WZWfb9EitQ5TADWCCX4GlDFrg/NGlIQZewgFjMcSStyHS/TzPRqiql02lC4wCJipF6jb62yMnQrcJUDc6LBR3j3vW5fPqQw3KYSi/WVI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777884675; c=relaxed/simple; bh=42RoFVsnDttgVf/A0/X5fKwKztD3f4fhqT+E4Fe/z+c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tO14tq4Zlce1Dwc0aSykqqc7IJ1fXKPIviwio8NxSoY+vNF0CAeCCPDHaxO52LwYUCPBsxNcAmq56iQBzynW8BqDIqsizTmJgcPSmVd5mcPmyX5jCK8O3hXV5Rocgxm6mx004UcptCk7phlUT6ZElxBzCvNbCKdI2Irel8qiocM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com; spf=pass smtp.mailfrom=moxa.com; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b=OFKKGYIi; arc=fail smtp.client-ip=52.101.127.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=moxa.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=moxa.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=moxa.com header.i=@moxa.com header.b="OFKKGYIi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p5QjYZkL+Y0g1HujYRNjslkLl6mdrrKDGaQ6YX+K7XHHOI28tBx+enZfDlJPciIlIcXu1C6nkqjoEm3DvTKQZZHZUnuSnYXxg3vzJGpqZm+poxTksNG8z8yeJRD6lBKkQC2/VVQWqV/gZASVGeLda+8sNIu0eZEaNHz9yV6OfWf3BVePw6JdPub05Ei1z8XNFADVFpDri34mtnt1ewAvsoeojWPDb0A6UNXTHzUiUI7w9zkrpiVioAwvvZNTE4Dfug9EL1xm04tb+Hat1Dx80buLhqv0AuxWY5xq4tcKMrXEEs6hnDB8TqY35xC0l6c8sBVc1eTIy1V7jFOFKH8xrQ== 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=R85jyQjRNxgp6RNhj1uj9en5fRweVeTVwGMg7E7DlvQ=; b=Lzwe/4QYv5fHSyvNlBHkOoXZxVugqhhL0WWxkmiVjwAZ4bxSQjehNFRwPsPCL/vmSQj9xKrfh3RhUpofbimuO8UhJ2ycyFwQ8mEwt8vSerLtIg8YCg43BDFbHzKrIF0ukP/dDBounesJJF00MNEW8Hgg52Riwzq6pTjJEDzmXKxU2WdXCCKEWHpQW6+K1FPrrqGsLfULWApRCClE8GRthDGdMHssepjdui4iQWigfKCvcRUn+ay8wZTCqIkf0pW4W+TPfsb7KfZyhDRyJJPE4oP3WK4eT2anoJ5Re2pZ3PPwtym+KeHtD3t/DDEr8FkTK1c1L8bhXN2zpyyWYFjvTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=moxa.com; dmarc=pass action=none header.from=moxa.com; dkim=pass header.d=moxa.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=moxa.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=R85jyQjRNxgp6RNhj1uj9en5fRweVeTVwGMg7E7DlvQ=; b=OFKKGYIiA0ddlEPnlwl8LgTJuwt3Z23ajdmG0H51f3TVfg1J+o93Uw5YlqYRV2yYwTRAsmyc3zsNvvUH2flv0oJwLsygLMMiemzKCLatPVbMHO3EiOg7Lmqx/CKlfwsjKVzHqx1oGwqAcMgtROA645iwvNIcrn89cvQ2zyaiUgY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=moxa.com; Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) by OSQPR01MB7823.apcprd01.prod.exchangelabs.com (2603:1096:604:425::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 08:51:12 +0000 Received: from PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717]) by PUZPR01MB5405.apcprd01.prod.exchangelabs.com ([fe80::ae38:e821:cf7d:3717%4]) with mapi id 15.20.9870.023; Mon, 4 May 2026 08:51:12 +0000 From: Crescent Hsieh To: gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, andy.shevchenko@gmail.com Cc: crescentcy.hsieh@moxa.com, fangpingfp.cheng@moxa.com, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [PATCH 15/15] serial: 8250_mxpcie: implement rx_trig_bytes callbacks via MUEx50 RTL Date: Mon, 4 May 2026 16:49:00 +0800 Message-ID: <20260504084900.22380-16-crescentcy.hsieh@moxa.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> References: <20260504084900.22380-1-crescentcy.hsieh@moxa.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TP0P295CA0040.TWNP295.PROD.OUTLOOK.COM (2603:1096:910:4::13) To PUZPR01MB5405.apcprd01.prod.exchangelabs.com (2603:1096:301:115::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR01MB5405:EE_|OSQPR01MB7823:EE_ X-MS-Office365-Filtering-Correlation-Id: 213db57f-9198-47e4-13d3-08dea9ba4b09 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|52116014|376014|56012099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: HRSETyUgwLV/JxxvrKaFjngfaEKSRwF7UhgSAzWWgA1iT4is6de4h0sbysL2ToPh0gWd/Xs/K+fgaWs9HYgclPNN2wqqk/TxLcawTe2xbhs+xRi/PJdFqxmOfVYh9XNY779FVzcAyzEEnJhZONhlpWiLV4t4TN8JV08NMRQHUNL6BaVAcBjVCugUmTpSPOs+mL17CnPibxKVuz2kycM2X+q/AHFehre0drk1ub2wmSAG8EKrMt0B/PZL1c7Vp266Sv+TtnrVg4iaIjTIB7Lcp0Qb8qbDwhjbLbmt3QZN8DFI8WlPMtW8sJY55HKpTh//RKi6nwDxG1SWgSMv6LDfxBoZd0TQgn8eh/w4DqFhF+fGX+jshYIH/qjGoQBmbRIPqbQDJZZN9d+k0jQuoaGvSikTWTLGHw+sLReic+RAxyYsjNsEIAFCExlum1yjG5KP3YIMuoNFk2zEY0fboIXKO4kxzjNtb0I+IN5l3LJH3pzQ2+31c4aCL0UuHbIF8BDbxgKBCQZsY53Nk8MOPbylm5iRst35d2y0k7y0hKd3x4gfPv2bVHYqq5mIPEPWALnTySbFjYiqIDgWDA7CH/GaBHWlzbq3jiDSUUn5JrYbnjYVeacvQdDHFCoGdTT7ZufwQ6inUdvYwNgXYldFlrRLT7scqYE2Nlxf6RR6JKB/GMPTrxog0BYLpbGG45TOcsGYK1gyq8nDehXm4dmEy6bB+v0m7qUcERYMBw6FeJ4eKO0hNXy64GLhgGyIp38WHdo4 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR01MB5405.apcprd01.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(52116014)(376014)(56012099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?AC6jpOUdlWS13GqradB3c0qnU9+dONfArYN+jshn9M3exC/N76uzA5OrseSa?= =?us-ascii?Q?kRUry8McPj/2P+EqMWa1WwZhStnRWufT3HOsfprnZdqLR9BaXXfk24uc/2DT?= =?us-ascii?Q?UUqV7UHx3X2iyzFdirCIWPB76MKBeVTis4h5VPMwHKglcRvG0R8S3pzvPMbT?= =?us-ascii?Q?keTh9d0ykpkn33NOsG972pz1ugIrBfX2RHyjC0f8jBtjWzS4F/y39iMQoT5o?= =?us-ascii?Q?7JxcqzUo/bF7GlLFWlKVeSS05O0H9HmeSnVf1A00kMa0VBmxbjM1tuXGXIYA?= =?us-ascii?Q?LvtCfdiR/lQFFG4RTlZ0aARyAC4AibWVVnBVooPjlsbRcAEB/hFygv/3BDHm?= =?us-ascii?Q?OcaqC8xC5T7J7qURerK2h+4wK/2sDEdbiWXbCMYRsPOPh2D5yyf0Z6XjKjnf?= =?us-ascii?Q?KQaskHTrc/4LZCESkvAiif5gbulpsMB3KxoiJ05CDQw2cVWVfiGsb1IoxfKf?= =?us-ascii?Q?+kmVeBt2oUfiputg4u6HbQ5IHF07IPUpL8HdwJUfVCRUz6HlN5mLvh3qI9jj?= =?us-ascii?Q?Xpd61M7euas0zgAjLWfMB5zHZHen+6NBwr5yJtD5yrhyK5VyUoDx47xHbv2g?= =?us-ascii?Q?Rq4jdFSW7yf3zj65MuqeKbZHzIGiyi3QWDwah1A+7vyk2mGGn3Bi59aNcE3g?= =?us-ascii?Q?s8vDOnHUt42Zgherh8dtN2s/nwMxzRJjtGemGXMHqTWanL+OulxgkeV0C0Uh?= =?us-ascii?Q?C1jtkYGB9JZZirVKEhcpJxY/E+bfHx8rF1eH9z1sglTrWYoiEZbFEseHSApK?= =?us-ascii?Q?ke31Hjcjk7TZ01fk0+KjU+/t95DxMd2O9LbP/W5+PzhDdGAsZggue1+j2qky?= =?us-ascii?Q?bu0UoZLuCKiQulgJZXIRS2pueerM2SdfDs/ubB49bEBlrzUsRDA5jwPrbefQ?= =?us-ascii?Q?dfda0h2ia2cMsiTYIbZSslkzTYpm8Mg1QeW7OZdkfoNmyP7u6XvMKLCF16nr?= =?us-ascii?Q?S6NBH2IlbjntXEMF5Gzz6M1v/4ZDfuoez48B9+ZRmsJ95/XpN5tjUSCqMwP9?= =?us-ascii?Q?FxOryB6vNQ78URqgVEz0+O2Zty3yHhTRu0l37zlojJa7aRwPTJ61i6goDyPx?= =?us-ascii?Q?j2y+NTc85uxRj8Jhis2HQJ8d3pq6gAIFEs8rNGYF6pnpNvpDPmSAFfLz9w59?= =?us-ascii?Q?TvevUQkx7fbsnHlBq3r+WulfiK9gTXlOq4c6M1PzuV2JeJ7VYajuOli1L8uY?= =?us-ascii?Q?zQexYK8mIdEmKAspeo5EOlGl7EHU+IpK6CD84r502CJvuLZAPT2R3BcfEC1j?= =?us-ascii?Q?YOZ8oATVkIr7NfgSINege9hUZGXuNABuZ+RSuhkEUDg5ayD7I13IO94ovILA?= =?us-ascii?Q?xmS/1QCWoYVEW8ipKobIv3RSLi1C05n5aFxtOQQk7m2Rx8vfYzELMfhVz6sP?= =?us-ascii?Q?vRyewTFBxYMywUu99bqxOwzteyUr17fIG4q5Z/h8Ee/GteU2N1xOm3S/9Slh?= =?us-ascii?Q?z4O4Lhi+D7KhVYxPGgTjShQ5qHKMU7WzKA9Y31I4W/MwM6OLoZNpwas9WwZI?= =?us-ascii?Q?mRT6fLtR6tL7w5WKw6VQZ6z6bB7PZNyPu8if7Amq/lg+SN1OZ3zY/j7hq/y8?= =?us-ascii?Q?28NVU9CBHh0QOQe/n+asceyBK7AAV3hXz0GAUqFLdVsgYb5HTj/tU6FBK6oI?= =?us-ascii?Q?jG973vZUYhJLD8BnC6/dDInsY/1sX42SlJ01HRbpK7QCToQrPFoSdJuCIBnI?= =?us-ascii?Q?fdqZs4CIVdRrkhVoNpwhf2S+ew4fQXNhF1GuYdfcIBE8JrNNR9FDSCpy540o?= =?us-ascii?Q?pAQIXOuTyhlSkX+kgtk0oEUWUOVlucU=3D?= X-OriginatorOrg: moxa.com X-MS-Exchange-CrossTenant-Network-Message-Id: 213db57f-9198-47e4-13d3-08dea9ba4b09 X-MS-Exchange-CrossTenant-AuthSource: PUZPR01MB5405.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 08:51:12.2877 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5571c7d4-286b-47f6-9dd5-0aa688773c8e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: e1++Dyp9JSvj2NRbR8EGNL661x7ZEJJGwF8P4oB/l3NetuxSps/OsWbwZtfUuRGg1aRTBlawNF+CVrxdZ/vQfewrm8H2jHPDwy9bFG7aCzg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSQPR01MB7823 Content-Type: text/plain; charset="utf-8" The MUEx50 UART exposes a programmable RX trigger level via the RTL register. Implement uart_port RX trigger set/get callbacks for the mxpcie driver and wire them up to the generic rx_trig_bytes sysfs interface. Store the configured trigger level in the per-port private data. Signed-off-by: Crescent Hsieh --- drivers/tty/serial/8250/8250_mxpcie.c | 28 ++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/825= 0/8250_mxpcie.c index 5bf15ca78228..cc317202b658 100644 --- a/drivers/tty/serial/8250/8250_mxpcie.c +++ b/drivers/tty/serial/8250/8250_mxpcie.c @@ -111,6 +111,7 @@ =20 struct mxpcie8250_port { int line; + u8 rx_trig_level; unsigned long event_flags; struct uart_port *port; struct work_struct work; @@ -262,6 +263,7 @@ static void mxpcie8250_set_termios(struct uart_port *po= rt, =20 static int mxpcie8250_startup(struct uart_port *port) { + struct mxpcie8250 *priv =3D dev_get_drvdata(port->dev); struct uart_8250_port *up =3D up_to_u8250p(port); unsigned int i; int ret; @@ -277,7 +279,7 @@ static int mxpcie8250_startup(struct uart_port *port) serial_out(up, MOXA_PUART_SFR, MOXA_PUART_SFR_950); =20 serial_out(up, MOXA_PUART_TTL, 0); - serial_out(up, MOXA_PUART_RTL, 96); + serial_out(up, MOXA_PUART_RTL, priv->port[port->port_id].rx_trig_level); serial_out(up, MOXA_PUART_FCL, 16); serial_out(up, MOXA_PUART_FCH, 110); =20 @@ -477,6 +479,27 @@ static void mxpcie8250_break_ctl(struct uart_port *por= t, int break_state) serial8250_do_break_ctl(port, break_state); } =20 +static int mxpcie8250_set_rxtrig(struct uart_port *port, unsigned char byt= es) +{ + struct mxpcie8250 *priv =3D dev_get_drvdata(port->dev); + struct uart_8250_port *up =3D up_to_u8250p(port); + + if (bytes > 128) + return -EINVAL; + + serial_out(up, MOXA_PUART_RTL, bytes); + priv->port[port->port_id].rx_trig_level =3D bytes; + + return 0; +} + +static int mxpcie8250_get_rxtrig(struct uart_port *port) +{ + struct uart_8250_port *up =3D up_to_u8250p(port); + + return serial_in(up, MOXA_PUART_RTL); +} + static void mxpcie8250_work_handler(struct work_struct *work) { struct mxpcie8250_port *priv_port =3D container_of(work, struct mxpcie825= 0_port, work); @@ -591,6 +614,8 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id up.port.unthrottle =3D mxpcie8250_unthrottle; up.port.handle_irq =3D mxpcie8250_handle_irq; up.port.break_ctl =3D mxpcie8250_break_ctl; + up.port.set_rxtrig =3D mxpcie8250_set_rxtrig; + up.port.get_rxtrig =3D mxpcie8250_get_rxtrig; =20 for (i =3D 0; i < num_ports; i++) { mxpcie8250_setup_port(pdev, priv, &up, i); @@ -608,6 +633,7 @@ static int mxpcie8250_probe(struct pci_dev *pdev, const= struct pci_device_id *id } new_port =3D serial8250_get_port(priv->port[i].line); =20 + priv->port[i].rx_trig_level =3D 96; priv->port[i].port =3D &new_port->port; =20 INIT_WORK(&priv->port[i].work, mxpcie8250_work_handler); --=20 2.43.0