Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/uart/uart_cpu_arm64.c
Show First 20 Lines • Show All 88 Lines • ▼ Show 20 Lines | uart_cpu_getdev(int devtype, struct uart_devinfo *di) | ||||
int br, err; | int br, err; | ||||
/* Allow overriding the FDT using the environment. */ | /* Allow overriding the FDT using the environment. */ | ||||
class = &uart_ns8250_class; | class = &uart_ns8250_class; | ||||
err = uart_getenv(devtype, di, class); | err = uart_getenv(devtype, di, class); | ||||
if (err == 0) | if (err == 0) | ||||
return (0); | return (0); | ||||
err = ENXIO; | |||||
#ifdef DEV_ACPI | #ifdef DEV_ACPI | ||||
/* Check if SPCR can tell us what console to use. */ | /* Check if SPCR can tell us what console to use. */ | ||||
if (uart_cpu_acpi_spcr(devtype, di) == 0) | if (uart_cpu_acpi_spcr(devtype, di) == 0) | ||||
return (0); | return (0); | ||||
#endif | #ifndef FDT | ||||
err = ENXIO; | /* | ||||
* In an ideal world, we'd just fall through and bail out because FDT | |||||
* isn't defined, thus `err` doesn't get reassigned and we immediately | |||||
* return. As of clang 14, later uses of `shift`, et al., raise | |||||
* warnings because it can't deduce that we're about to return. | |||||
*/ | |||||
else | |||||
return (ENXIO); | |||||
#endif /* !FDT */ | |||||
#endif /* DEV_ACPI */ | |||||
#ifdef FDT | #ifdef FDT | ||||
if (err != 0) { | if (err != 0) { | ||||
err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, | err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, | ||||
&shift, &iowidth, devtype); | &shift, &iowidth, devtype); | ||||
} | } | ||||
#endif | #endif /* FDT */ | ||||
if (err != 0) | if (err != 0) | ||||
return (err); | return (err); | ||||
/* | /* | ||||
* Finalize configuration. | * Finalize configuration. | ||||
*/ | */ | ||||
di->bas.chan = 0; | di->bas.chan = 0; | ||||
di->bas.regshft = shift; | di->bas.regshft = shift; | ||||
Show All 14 Lines |