From nobody Sun Feb 22 21:21:15 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fJxk32nZTz6S4Mr for ; Sun, 22 Feb 2026 21:21:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fJxk31t4Qz3V8r for ; Sun, 22 Feb 2026 21:21:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771795275; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jiuUQ15aYdAXyaSE/W4xyjfvA9FWMBF8c6W8a4X89K0=; b=UQX2nNvrCfS040hlz58Z8IP3nlaegTrpLqzZefNoWID21Nfmh3v8hum5W/PEj62S+wMbmE dNnaTL00aE3fV/iy7IZ1CZ3jjuVpAQ+6fcLcI1Z+UAX5nDfwTcm70m8pv+UZNVTzL9Fo6T UFtv14BQlfJrcJEdpiK+3iZ9vyz8ZoeLqemO46SKHlwyl8dngh3QIrQAKSc1Pub/+INhS6 70wXBRHt6g1/R3GEoci0lFdbvarT44WHlF93GKv9HMBa11PEpzhAPPPpDFAmgDP69e0+tg vFMNxLM4Hr2EvnISOB9eaUdlNo0JEQYbh9Mx+aLTQgdp6BkHl6ccRZ2eTyDebA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1771795275; a=rsa-sha256; cv=none; b=gHEZ2CGbN2VmIxaFwSC33TGo4608Z8nFiwUf52zxb1hMN6mFL3H8V4ls4VWs9MvnwgNyfc mvn1Tz3vV5yLXrLcfIWSFS51EQdfv0EyBJOCAI1fGdsmw4mRB+UZg/8cXqPcMH01dTT5Dl l+djcv61zfBlyct4wy5c+kj3qDnRxGS3wnaNgByINXJU5w4xl5cZLktit8jmnJEQ4JsRtw k6h7GsdJelMK0vLi7SdJxYjuZUFD9iCsCtRiwWB5oCpC2ypOQvbL3uc2YLw7Aoqb3hMols ZjNJqFYYG6DjM7pLlrWY90FEKGGhIPYAbaMXpCm78JkVgnJXk+Ej8M3arVeCOg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771795275; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jiuUQ15aYdAXyaSE/W4xyjfvA9FWMBF8c6W8a4X89K0=; b=bvXBM1VUWWH2ipzWdL2zK8tbL7o5ZI2lVk+p7TQ7MioadCBiEIBIK02nB3tflXwo0BRPRV 31V+a9yyH9tVm8meg7Ii96Dna9so0X0Y/SRok7lD9WDICIFREU5U5SZEvC9PIqPQL1N5VB 5KKYExFszkoPtq5G+gM/bfMyvmsbL7YPCFOLD2/VNWsnjtk3UNCZRscepmzmhECuf2wqKt ZLI1ZiBfnzfPkcqFJF34RWgtaC/o4YyUy7Jth0lqq2Fb+g0fH1kygfe6ZtANbeA8b1+D0K rfl/q5LzVmbHbRYuC6DRqK5lCminqAihVxx/71otTWjpNdV/Dyv47nshgoYgiw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fJxk31Sttz11fN for ; Sun, 22 Feb 2026 21:21:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1f972 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 22 Feb 2026 21:21:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Michal Meloun Subject: git: d2dea8b46a8a - main - arm: Add EARLY_PRINTF for ns8250 on arm/aarch64 platforms. List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mmel X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d2dea8b46a8a61359c5185f4af3cc1761139bcb4 Auto-Submitted: auto-generated Date: Sun, 22 Feb 2026 21:21:15 +0000 Message-Id: <699b734b.1f972.4e1fe548@gitrepo.freebsd.org> The branch main has been updated by mmel: URL: https://cgit.FreeBSD.org/src/commit/?id=d2dea8b46a8a61359c5185f4af3cc1761139bcb4 commit d2dea8b46a8a61359c5185f4af3cc1761139bcb4 Author: Michal Meloun AuthorDate: 2025-02-02 14:22:34 +0000 Commit: Michal Meloun CommitDate: 2026-02-22 21:13:33 +0000 arm: Add EARLY_PRINTF for ns8250 on arm/aarch64 platforms. Reviewed by: adrian (previous version) MFC after: 3 weeks --- sys/conf/options | 4 ++++ sys/dev/uart/uart_dev_ns8250.c | 42 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/sys/conf/options b/sys/conf/options index d5192db59181..4aeb15a489ea 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -1016,3 +1016,7 @@ PRESERVE_EARLY_KENV opt_global.h # Options for the Intel QuickAssist (QAT) driver QAT_DISABLE_SAFE_DC_MODE opt_qat.h + +# EARLY_PRINTF specific options fo NS8250 uart +UART_NS8250_EARLY_REG_IO_WIDTH opt_uart.h +UART_NS8250_EARLY_REG_SHIFT opt_uart.h diff --git a/sys/dev/uart/uart_dev_ns8250.c b/sys/dev/uart/uart_dev_ns8250.c index c38d50e54ad8..b0c7cd4b44e1 100644 --- a/sys/dev/uart/uart_dev_ns8250.c +++ b/sys/dev/uart/uart_dev_ns8250.c @@ -89,9 +89,7 @@ SYSCTL_INT(_hw, OID_AUTO, uart_noise_threshold, CTLFLAG_RWTUN, * options EARLY_PRINTF=ns8250 */ #if CHECK_EARLY_PRINTF(ns8250) -#if !(defined(__amd64__) || defined(__i386__)) -#error ns8250 early putc is x86 specific as it uses inb/outb -#endif +#if (defined(__amd64__) || defined(__i386__)) static void uart_ns8250_early_putc(int c) { @@ -103,7 +101,45 @@ uart_ns8250_early_putc(int c) continue; outb(tx, c); } +#elif (defined(__arm__) || defined(__aarch64__)) +#ifndef UART_NS8250_EARLY_REG_IO_WIDTH +#error Option 'UART_NS8250_EARLY_REG_IO_WIDTH' is missing. +#endif +#ifndef UART_NS8250_EARLY_REG_SHIFT +#error Option 'UART_NS8250_EARLY_REG_SHIFT' is missing. +#endif + +#if UART_NS8250_EARLY_REG_IO_WIDTH == 1 +#define T uint8_t +#elif UART_NS8250_EARLY_REG_IO_WIDTH == 2 +#define T uint16_t +#elif UART_NS8250_EARLY_REG_IO_WIDTH == 4 +#define T uint32_t + +#else +#error Invalid/unsupported UART_NS8250_EARLY_REG_IO_WIDTH value +#endif + +#include + +static void +uart_ns8250_early_putc(int c) +{ + volatile T *stat; + volatile T *tx; + + stat = (T *)(socdev_va + (REG_LSR << UART_NS8250_EARLY_REG_SHIFT)); + tx = (T *)(socdev_va + (REG_DATA << UART_NS8250_EARLY_REG_SHIFT)); + + while ((*stat & LSR_THRE) == 0) + continue; + *tx = c & 0xff; +} +#else +#error ns8250 early putc is not implemented for current architecture +#endif early_putc_t *early_putc = uart_ns8250_early_putc; +#undef DTYPE #endif /* EARLY_PRINTF */ /*