From nobody Mon Sep 02 09:12:35 2024 X-Original-To: dev-commits-src-all@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 4Wy31b52mHz5MqlQ; Mon, 02 Sep 2024 09:12:35 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Wy31b2XnQz4C97; Mon, 2 Sep 2024 09:12:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1725268355; 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=pbJeV7QQL+rZGXA/RCMjdW6OjCvLQU9ZnNtlt49iqCE=; b=I0E8yVCdRsFwqmtyGgkjujPMD8UD9rMafWJEtnQkP4WRrieP9b1NrkgeNBAxlyDZKtGbB5 nZaGdLAB1U0jnbdoSznnTZTbB5hMtxRsR4X0ieDnaOL09Y5GgUYSMuv/LIlebuJ9/HEet4 48mFsFXXapOrcVh8XMcupkpDkBQEhz8GG6PktWjflOGF79k8CXa/IISPsyyYsdxpeXb66o YzgFB+Sspek1YCy/Cpr3QrTWkGxtgVYEYKfP7YGsqko0kxp4ZvSAMCROMFfGt4BQN6gPdm UFeKFnVwIPSdwRDUry8eyScXTnrVwg2KSGUNuzW3bIeC7UHBXZm14Awp8D/uSQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1725268355; a=rsa-sha256; cv=none; b=xFQXFseKyRIenkZoV3BQAMkskP4H8R3/MfpKSJDicCkzz/lfR6UyEheZTU2n/s90vOuGqY YEkvWbrMQxPNw0d7pTmkeDGC8trrXlEF1/ER9QS4U7TEJNvlOlufbUUK9l4rkY4/zy4+Ur q2G2gOsosTO3YrogKvM/PgNKRLgq0U9TFTfyv1OEl5EJiOsWGI5AM+CgmUcWuzemmYlToS ijDkXMtIijMknlOGgWRFtRS8bTSKVDN1zAl5Z2VGUVNQfc02sx9P2ucXEQ8YkFOa7/qMcQ fnOEucZa0OIe1ab1lz1yQgVmdFvcvAs9+Lp1aA4DEFmbXsfH+E/bIVacMPHDEA== 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=1725268355; 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=pbJeV7QQL+rZGXA/RCMjdW6OjCvLQU9ZnNtlt49iqCE=; b=o+NnIfH7p+BUz91uPBmTwUBNTLH8VlKXpQcuECrrod7HoAzwepOI+k7/XtBMqzcBM4g6EF c/9s/UYjFFTOUYCX0FjiSIFrLl6BnCPvqXHTORU1vRkZt1HLSS5vvxCCCR07NyqOTQO8kL 4J4wDqR1I3u2aHY7EoF8xa2lSr5Jg7PXh8LBCQgl1CCAmgrGaZYDlDwHrfO8iNzy55lQMq /wt1xJGOjKu8vgV/sJg8oSZ1KySqED6Hv/P3h78v2sFTJRW34yj7afwwOxvdcC3aIk4T6y AdPvBgjbgistJ/3lz9nrNswTjLPeUp9weX5jx/ZeoWoXzwmjT5A+TyI8+TSGZw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Wy31b1s1Jz167v; Mon, 2 Sep 2024 09:12:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 4829CZ6J049440; Mon, 2 Sep 2024 09:12:35 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 4829CZgP049437; Mon, 2 Sep 2024 09:12:35 GMT (envelope-from git) Date: Mon, 2 Sep 2024 09:12:35 GMT Message-Id: <202409020912.4829CZgP049437@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Andrew Turner Subject: git: e4f74109173e - stable/13 - uart: Split out initilisation of the acpi devinfo List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: e4f74109173e64be6eaf2e24d0e6ef16da38b25c Auto-Submitted: auto-generated The branch stable/13 has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=e4f74109173e64be6eaf2e24d0e6ef16da38b25c commit e4f74109173e64be6eaf2e24d0e6ef16da38b25c Author: Andrew Turner AuthorDate: 2024-03-12 18:06:18 +0000 Commit: Andrew Turner CommitDate: 2024-09-02 09:11:57 +0000 uart: Split out initilisation of the acpi devinfo Split out the common parts of building the uart devinfo from ACPI tables from the SPCR parser. This will be used when we support the DBG2 table to find the debug uart to be used by the kernel gdb stub. Reviewed by: imp Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D44357 (cherry picked from commit 473c0b44ae8c51b2aebc51887714b2ed14de50bf) --- sys/dev/uart/uart_cpu_acpi.c | 86 +++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/sys/dev/uart/uart_cpu_acpi.c b/sys/dev/uart/uart_cpu_acpi.c index a0534c7af230..6805d187cb99 100644 --- a/sys/dev/uart/uart_cpu_acpi.c +++ b/sys/dev/uart/uart_cpu_acpi.c @@ -70,35 +70,10 @@ uart_cpu_acpi_scan(uint8_t interface_type) return (NULL); } -int -uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di) +static int +uart_cpu_acpi_init_devinfo(struct uart_devinfo *di, struct uart_class *class, + ACPI_GENERIC_ADDRESS *addr) { - vm_paddr_t spcr_physaddr; - ACPI_TABLE_SPCR *spcr; - struct acpi_uart_compat_data *cd; - struct uart_class *class; - int error = ENXIO; - - /* SPCR only tells us about consoles. */ - if (devtype != UART_DEV_CONSOLE) - return (error); - - /* Look for the SPCR table. */ - spcr_physaddr = acpi_find_table(ACPI_SIG_SPCR); - if (spcr_physaddr == 0) - return (error); - spcr = acpi_map_table(spcr_physaddr, ACPI_SIG_SPCR); - if (spcr == NULL) { - printf("Unable to map the SPCR table!\n"); - return (error); - } - - /* Search for information about this SPCR interface type. */ - cd = uart_cpu_acpi_scan(spcr->InterfaceType); - if (cd == NULL) - goto out; - class = cd->cd_class; - /* Fill in some fixed details. */ di->bas.chan = 0; di->bas.rclk = 0; @@ -108,7 +83,7 @@ uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di) di->ops = uart_getops(class); /* Fill in details from SPCR table. */ - switch (spcr->SerialPort.SpaceId) { + switch (addr->SpaceId) { case 0: di->bas.bst = uart_bus_space_mem; break; @@ -117,10 +92,10 @@ uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di) break; default: printf("UART in unrecognized address space: %d!\n", - (int)spcr->SerialPort.SpaceId); - goto out; + (int)addr->SpaceId); + return (ENXIO); } - switch (spcr->SerialPort.AccessWidth) { + switch (addr->AccessWidth) { case 0: /* EFI_ACPI_6_0_UNDEFINED */ /* FALLTHROUGH */ case 1: /* EFI_ACPI_6_0_BYTE */ @@ -137,10 +112,10 @@ uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di) break; default: printf("UART unsupported access width: %d!\n", - (int)spcr->SerialPort.AccessWidth); - goto out; + (int)addr->AccessWidth); + return (ENXIO); } - switch (spcr->SerialPort.BitWidth) { + switch (addr->BitWidth) { case 0: /* FALLTHROUGH */ case 8: @@ -157,9 +132,46 @@ uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di) break; default: printf("UART unsupported bit width: %d!\n", - (int)spcr->SerialPort.BitWidth); - goto out; + (int)addr->BitWidth); + return (ENXIO); } + + return (0); +} + +int +uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di) +{ + vm_paddr_t spcr_physaddr; + ACPI_TABLE_SPCR *spcr; + struct acpi_uart_compat_data *cd; + struct uart_class *class; + int error = ENXIO; + + /* SPCR only tells us about consoles. */ + if (devtype != UART_DEV_CONSOLE) + return (error); + + /* Look for the SPCR table. */ + spcr_physaddr = acpi_find_table(ACPI_SIG_SPCR); + if (spcr_physaddr == 0) + return (error); + spcr = acpi_map_table(spcr_physaddr, ACPI_SIG_SPCR); + if (spcr == NULL) { + printf("Unable to map the SPCR table!\n"); + return (error); + } + + /* Search for information about this SPCR interface type. */ + cd = uart_cpu_acpi_scan(spcr->InterfaceType); + if (cd == NULL) + goto out; + class = cd->cd_class; + + error = uart_cpu_acpi_init_devinfo(di, class, &spcr->SerialPort); + if (error != 0) + goto out; + switch (spcr->BaudRate) { case 0: /* Special value; means "keep current value unchanged". */