Index | Thread | Search

From:
James Hastings <moosetek4@gmail.com>
Subject:
com(4): support mediatek uart
To:
moosetek4@gmail.com,tech@openbsd.org
Date:
Mon, 29 Jan 2024 01:29:46 -0500

Download raw body.

Thread
Add support to com(4) for the UARTs found on MediaTek SoCs.

The "common compatible" on mainstream devicetree is "mediatek,mt6577-uart".
This supports most arm64 and armv7 MediaTek SoCs.

Datasheets claim 16550A compatibility so set sc_uarttype accordingly.

Serial output below from Banana Pi BPI-R64 (MT7622).

ok?

Index: dev/fdt/com_fdt.c
===================================================================
RCS file: /cvs/src/sys/dev/fdt/com_fdt.c,v
retrieving revision 1.8
diff -u -p -r1.8 com_fdt.c
--- dev/fdt/com_fdt.c	15 Aug 2023 07:56:27 -0000	1.8
+++ dev/fdt/com_fdt.c	23 Jan 2024 00:35:15 -0000
@@ -55,6 +55,7 @@ com_fdt_init_cons(void)
 
 	if ((node = fdt_find_cons("brcm,bcm2835-aux-uart")) == NULL &&
 	    (node = fdt_find_cons("marvell,armada-38x-uart")) == NULL &&
+	    (node = fdt_find_cons("mediatek,mt6577-uart")) == NULL &&
 	    (node = fdt_find_cons("ns16550a")) == NULL &&
 	    (node = fdt_find_cons("snps,dw-apb-uart")) == NULL &&
 	    (node = fdt_find_cons("ti,omap3-uart")) == NULL &&
@@ -96,6 +97,7 @@ com_fdt_match(struct device *parent, voi
 
 	return (OF_is_compatible(faa->fa_node, "brcm,bcm2835-aux-uart") ||
 	    OF_is_compatible(faa->fa_node, "marvell,armada-38x-uart") ||
+	    OF_is_compatible(faa->fa_node, "mediatek,mt6577-uart") ||
 	    OF_is_compatible(faa->fa_node, "ns16550a") ||
 	    OF_is_compatible(faa->fa_node, "snps,dw-apb-uart") ||
 	    OF_is_compatible(faa->fa_node, "ti,omap3-uart") ||
@@ -140,6 +142,9 @@ com_fdt_attach(struct device *parent, st
 
 	sc->sc_reg_width = OF_getpropint(faa->fa_node, "reg-io-width", width);
 	sc->sc_reg_shift = OF_getpropint(faa->fa_node, "reg-shift", shift);
+
+	if (OF_is_compatible(faa->fa_node, "mediatek,mt6577-uart"))
+		sc->sc_uarttype = COM_UART_16550A;
 
 	if (OF_is_compatible(faa->fa_node, "snps,dw-apb-uart") ||
 	    OF_is_compatible(faa->fa_node, "marvell,armada-38x-uart")) {



MT7622> dhcp BOOTAA64.EFI
MT7622> tftpboot 0x48800000 mt7622-bpi-r64.dtb
MT7622> bootefi 0x48000000 0x48800000
Booting /BOOTAA64.EFI
disks: sd0 sd1
>> OpenBSD/arm64 BOOTAA64 1.18
boot> bsd
booting tftp0a:bsd
[ using 2914592 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2024 OpenBSD. All rights reserved.  https://www.OpenBSD.org

OpenBSD 7.4-current (GENERIC.MP) #11: Sat Jan 20 21:28:19 EST 2024
    hastings@arm64.moose-tek.test:/usr/src/sys/arch/arm64/compile/GENERIC.MP
real mem  = 1072095232 (1022MB)
avail mem = 998666240 (952MB)
random: good seed from bootblocks
mainbus0 at root: Bananapi BPI-R64
psci0 at mainbus0: PSCI 1.1, SMCCC 1.4, SYSTEM_SUSPEND
efi0 at mainbus0: UEFI 2.10
efi0: Das U-Boot rev 0x20230700
smbios0 at efi0: SMBIOS 3.0
smbios0: vendor U-Boot version "2023.07.02-OpenWrt-r24627-3eca9ba53f" date 07/01/2023
smbios0: Unknown Unknown Product
cpu0 at mainbus0 mpidr 0: ARM Cortex-A53 r0p4
cpu0: 32KB 64b/line 2-way L1 VIPT I-cache, 32KB 64b/line 4-way L1 D-cache
cpu0: 256KB 64b/line 16-way L2 cache
cpu0: CRC32,SHA2,SHA1,AES+PMULL,ASID16
cpu1 at mainbus0 mpidr 1: ARM Cortex-A53 r0p4
cpu1: 32KB 64b/line 2-way L1 VIPT I-cache, 32KB 64b/line 4-way L1 D-cache
cpu1: 256KB 64b/line 16-way L2 cache
cpu1: CRC32,SHA2,SHA1,AES+PMULL,ASID16
"ramoops" at mainbus0 not configured
"secmon" at mainbus0 not configured
apm0 at mainbus0
syscon0 at mainbus0: "infracfg"
syscon1 at mainbus0: "pericfg"
syscon2 at mainbus0: "power-controller"
syscon3 at mainbus0: "apmixedsys"
syscon4 at mainbus0: "topckgen"
ampintc0 at mainbus0 nirq 288, ncpu 4 ipi: 0, 1, 2: "interrupt-controller"
syscon5 at mainbus0: "clock-controller"
syscon6 at mainbus0: "ssusbsys"
syscon7 at mainbus0: "pciesys"
syscon8 at mainbus0: "pciecfg"
syscon9 at mainbus0: "syscon"
syscon10 at mainbus0: "syscon"
syscon11 at mainbus0: "pcie-mirror"
syscon12 at mainbus0: "wed"
syscon13 at mainbus0: "wed"
syscon14 at mainbus0: "ethernet"
syscon15 at mainbus0: "sgmiisys"
"opp-table" at mainbus0 not configured
"dummy40m" at mainbus0 not configured
"oscillator" at mainbus0 not configured
"pmu" at mainbus0 not configured
agtimer0 at mainbus0: 12500 kHz
"pwrap" at mainbus0 not configured
"cir" at mainbus0 not configured
"interrupt-controller" at mainbus0 not configured
"efuse" at mainbus0 not configured
"rng" at mainbus0 not configured
"pinctrl" at mainbus0 not configured
"watchdog" at mainbus0 not configured
"rtc" at mainbus0 not configured
"cci" at mainbus0 not configured
"adc" at mainbus0 not configured
com0 at mainbus0: ns16550a, 16 byte fifo
com0: console
"pwm" at mainbus0 not configured
"i2c" at mainbus0 not configured
"i2c" at mainbus0 not configured
"spi" at mainbus0 not configured
"thermal" at mainbus0 not configured
"serial" at mainbus0 not configured
"spi" at mainbus0 not configured
"ecc" at mainbus0 not configured
"mmc" at mainbus0 not configured
"mmc" at mainbus0 not configured
"wmac" at mainbus0 not configured
"usb" at mainbus0 not configured
"t-phy" at mainbus0 not configured
"pcie" at mainbus0 not configured
"pcie" at mainbus0 not configured
"dma-controller" at mainbus0 not configured
gpiokeys0 at mainbus0: "factory", "wps"
gpioleds0 at mainbus0: "bpi-r64:pio:green", "bpi-r64:pio:red"
"regulator-1p8v" at mainbus0 not configured
"regulator-3p3v" at mainbus0 not configured
"regulator-5v" at mainbus0 not configured
vscsi0 at root
scsibus0 at vscsi0: 256 targets
softraid0 at root
scsibus1 at softraid0: 256 targets
root device: 
use one of: exit
root device: exit
syncing disks... done