git: a9fc9d6d15f0 - main - dev/uart: Support 8-byte register access
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 13 Feb 2024 11:51:54 UTC
The branch main has been updated by andrew:
URL: https://cgit.FreeBSD.org/src/commit/?id=a9fc9d6d15f006feb6d7ddb036e020d5f9d19fce
commit a9fc9d6d15f006feb6d7ddb036e020d5f9d19fce
Author: Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2024-01-09 13:29:47 +0000
Commit: Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2024-02-13 11:48:53 +0000
dev/uart: Support 8-byte register access
While we only support 4-byte registers in the uart code the physical
access may be to an 8-byte register. Support this as an option on
non-i386. On i386 we lack the needed 8-byte bus_space functions.
ACPI has an option for 8-byte register io width, and FDT can be given
any size. Support these sizes, even if we don't expect to see hardware
with an 8-byte io width.
Reviewed by: imp
Sponsored by: Arm Ltd
Differential Revision: https://reviews.freebsd.org/D43374
---
sys/dev/uart/uart.h | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/sys/dev/uart/uart.h b/sys/dev/uart/uart.h
index 987152283c81..4cdec00c9829 100644
--- a/sys/dev/uart/uart.h
+++ b/sys/dev/uart/uart.h
@@ -56,6 +56,11 @@ uart_getreg(struct uart_bas *bas, int reg)
uint32_t ret;
switch (uart_regiowidth(bas)) {
+#if !defined(__i386__)
+ case 8:
+ ret = bus_space_read_8(bas->bst, bas->bsh, uart_regofs(bas, reg));
+ break;
+#endif
case 4:
ret = bus_space_read_4(bas->bst, bas->bsh, uart_regofs(bas, reg));
break;
@@ -71,10 +76,15 @@ uart_getreg(struct uart_bas *bas, int reg)
}
static inline void
-uart_setreg(struct uart_bas *bas, int reg, int value)
+uart_setreg(struct uart_bas *bas, int reg, uint32_t value)
{
switch (uart_regiowidth(bas)) {
+#if !defined(__i386__)
+ case 8:
+ bus_space_write_8(bas->bst, bas->bsh, uart_regofs(bas, reg), value);
+ break;
+#endif
case 4:
bus_space_write_4(bas->bst, bas->bsh, uart_regofs(bas, reg), value);
break;