Index: sys/arm/at91/uart_bus_at91usart.c =================================================================== --- sys/arm/at91/uart_bus_at91usart.c +++ sys/arm/at91/uart_bus_at91usart.c @@ -104,7 +104,7 @@ sc->sc_class = &at91_usart_class; if (sc->sc_class->uc_rclk == 0) sc->sc_class->uc_rclk = at91_master_clock; - return (uart_bus_probe(dev, 0, 0, 0, device_get_unit(dev))); + return (uart_bus_probe(dev, 0, 0, 0, 0, device_get_unit(dev))); } Index: sys/arm/cavium/cns11xx/uart_bus_ec.c =================================================================== --- sys/arm/cavium/cns11xx/uart_bus_ec.c +++ sys/arm/cavium/cns11xx/uart_bus_ec.c @@ -69,7 +69,7 @@ sc = device_get_softc(dev); sc->sc_class = &uart_ns8250_class; - status = uart_bus_probe(dev, EC_UART_REGSHIFT, EC_UART_CLOCK, 0, 0); + status = uart_bus_probe(dev, EC_UART_REGSHIFT, 0, EC_UART_CLOCK, 0, 0); return (status); } Index: sys/arm/nvidia/tegra_uart.c =================================================================== --- sys/arm/nvidia/tegra_uart.c +++ sys/arm/nvidia/tegra_uart.c @@ -216,7 +216,7 @@ device_printf(dev, "Cannot enable UART clock: %d\n", rv); return (ENXIO); } - return (uart_bus_probe(dev, shift, (int)freq, 0, 0)); + return (uart_bus_probe(dev, shift, 0, (int)freq, 0, 0)); } static int Index: sys/arm/xscale/i8134x/uart_bus_i81342.c =================================================================== --- sys/arm/xscale/i8134x/uart_bus_i81342.c +++ sys/arm/xscale/i8134x/uart_bus_i81342.c @@ -83,7 +83,7 @@ 0x40 | 0x10); bus_release_resource(dev, sc->sc_rtype, sc->sc_rrid, sc->sc_rres); - err = uart_bus_probe(dev, 2, 33334000, 0, device_get_unit(dev)); + err = uart_bus_probe(dev, 2, 0, 33334000, 0, device_get_unit(dev)); sc->sc_rxfifosz = sc->sc_txfifosz = 1; return (err); } Index: sys/arm/xscale/ixp425/uart_bus_ixp425.c =================================================================== --- sys/arm/xscale/ixp425/uart_bus_ixp425.c +++ sys/arm/xscale/ixp425/uart_bus_ixp425.c @@ -78,5 +78,5 @@ if (bootverbose) device_printf(dev, "rclk %u\n", rclk); - return uart_bus_probe(dev, 0, rclk, 0, 0); + return uart_bus_probe(dev, 0, 0, rclk, 0, 0); } Index: sys/arm/xscale/pxa/uart_bus_pxa.c =================================================================== --- sys/arm/xscale/pxa/uart_bus_pxa.c +++ sys/arm/xscale/pxa/uart_bus_pxa.c @@ -97,7 +97,7 @@ sc = device_get_softc(dev); sc->sc_class = &uart_ns8250_class; - return(uart_bus_probe(dev, 2, PXA2X0_COM_FREQ, 0, 0)); + return(uart_bus_probe(dev, 2, 0, PXA2X0_COM_FREQ, 0, 0)); } DRIVER_MODULE(uart, pxa, uart_pxa_driver, uart_devclass, 0, 0); Index: sys/dev/uart/uart.h =================================================================== --- sys/dev/uart/uart.h +++ sys/dev/uart/uart.h @@ -41,14 +41,48 @@ u_int chan; u_int rclk; u_int regshft; + u_int regiowidth; }; #define uart_regofs(bas, reg) ((reg) << (bas)->regshft) +#define uart_regiowidth(bas) ((bas)->regiowidth) -#define uart_getreg(bas, reg) \ - bus_space_read_1((bas)->bst, (bas)->bsh, uart_regofs(bas, reg)) -#define uart_setreg(bas, reg, value) \ - bus_space_write_1((bas)->bst, (bas)->bsh, uart_regofs(bas, reg), value) +static inline uint32_t +uart_getreg(struct uart_bas *bas, int reg) +{ + uint32_t ret; + + switch (uart_regiowidth(bas)) { + case 4: + ret = bus_space_read_4(bas->bst, bas->bsh, uart_regofs(bas, reg)); + break; + case 2: + ret = bus_space_read_2(bas->bst, bas->bsh, uart_regofs(bas, reg)); + break; + default: + ret = bus_space_read_1(bas->bst, bas->bsh, uart_regofs(bas, reg)); + break; + } + + return (ret); +} + +static inline void +uart_setreg(struct uart_bas *bas, int reg, int value) +{ + + switch (uart_regiowidth(bas)) { + case 4: + bus_space_write_4(bas->bst, bas->bsh, uart_regofs(bas, reg), value); + break; + case 2: + bus_space_write_2(bas->bst, bas->bsh, uart_regofs(bas, reg), value); + break; + default: + bus_space_write_1(bas->bst, bas->bsh, uart_regofs(bas, reg), value); + break; + } +} /* * XXX we don't know the length of the bus space address range in use by Index: sys/dev/uart/uart_bus.h =================================================================== --- sys/dev/uart/uart_bus.h +++ sys/dev/uart/uart_bus.h @@ -63,6 +63,7 @@ u_int uc_range; /* Bus space address range. */ u_int uc_rclk; /* Default rclk for this device. */ u_int uc_rshift; /* Default regshift for this device. */ + u_int uc_riowidth; /* Default reg io width for this device. */ }; struct uart_softc { @@ -137,7 +138,7 @@ int uart_bus_resume(device_t dev); serdev_intr_t *uart_bus_ihand(device_t dev, int ipend); int uart_bus_ipend(device_t dev); -int uart_bus_probe(device_t dev, int regshft, int rclk, int rid, int chan); +int uart_bus_probe(device_t dev, int regshft, int regiowidth, int rclk, int rid, int chan); int uart_bus_sysdev(device_t dev); void uart_sched_softih(struct uart_softc *, uint32_t); Index: sys/dev/uart/uart_bus_acpi.c =================================================================== --- sys/dev/uart/uart_bus_acpi.c +++ sys/dev/uart/uart_bus_acpi.c @@ -109,13 +109,13 @@ #if defined(__i386__) || defined(__amd64__) if (!ISA_PNP_PROBE(parent, dev, acpi_ns8250_ids)) { sc->sc_class = &uart_ns8250_class; - return (uart_bus_probe(dev, 0, 0, 0, 0)); + return (uart_bus_probe(dev, 0, 0, 0, 0, 0)); } /* Add checks for non-ns8250 IDs here. */ #elif defined(__aarch64__) if ((sc->sc_class = uart_acpi_find_device(dev)) != NULL) - return (uart_bus_probe(dev, 2, 0, 0, 0)); + return (uart_bus_probe(dev, 2, 0, 0, 0, 0)); #endif return (ENXIO); Index: sys/dev/uart/uart_bus_ebus.c =================================================================== --- sys/dev/uart/uart_bus_ebus.c +++ sys/dev/uart/uart_bus_ebus.c @@ -97,7 +97,7 @@ return (ENXIO); } sc->sc_class = &uart_ns8250_class; - return (uart_bus_probe(dev, 0, 0, 0, 0)); + return (uart_bus_probe(dev, 0, 0, 0, 0, 0)); } return (ENXIO); Index: sys/dev/uart/uart_bus_fdt.c =================================================================== --- sys/dev/uart/uart_bus_fdt.c +++ sys/dev/uart/uart_bus_fdt.c @@ -90,6 +90,15 @@ return (0); } +int +uart_fdt_get_io_width(phandle_t node, pcell_t *cell) +{ + + if ((OF_getencprop(node, "reg-io-width", cell, sizeof(*cell))) <= 0) + return (-1); + return (0); +} + static uintptr_t uart_fdt_find_device(device_t dev) { @@ -154,14 +163,15 @@ int uart_cpu_fdt_probe(struct uart_class **classp, bus_space_tag_t *bst, - bus_space_handle_t *bsh, int *baud, u_int *rclk, u_int *shiftp) + bus_space_handle_t *bsh, int *baud, u_int *rclk, u_int *shiftp, + u_int *iowidthp) { const char *propnames[] = {"stdout-path", "linux,stdout-path", "stdout", "stdin-path", "stdin", NULL}; const char **name; struct uart_class *class; phandle_t node, chosen; - pcell_t br, clk, shift; + pcell_t br, clk, shift, iowidth; char *cp; int err; @@ -212,6 +222,9 @@ if (uart_fdt_get_shift(node, &shift) != 0) shift = uart_getregshift(class); + if (uart_fdt_get_io_width(node, &iowidth) != 0) + iowidth = uart_getregiowidth(class); + if (OF_getencprop(node, "current-speed", &br, sizeof(br)) <= 0) br = 0; @@ -223,6 +236,7 @@ *baud = br; *rclk = clk; *shiftp = shift; + *iowidthp = iowidth; return (0); } @@ -232,7 +246,7 @@ { struct uart_softc *sc; phandle_t node; - pcell_t clock, shift; + pcell_t clock, shift, iowidth; int err; sc = device_get_softc(dev); @@ -250,8 +264,10 @@ return (err); if (uart_fdt_get_shift(node, &shift) != 0) shift = uart_getregshift(sc->sc_class); + if (uart_fdt_get_io_width(node, &iowidth) != 0) + iowidth = uart_getregiowidth(sc->sc_class); - return (uart_bus_probe(dev, (int)shift, (int)clock, 0, 0)); + return (uart_bus_probe(dev, (int)shift, (int)iowidth, (int)clock, 0, 0)); } DRIVER_MODULE(uart, simplebus, uart_fdt_driver, uart_devclass, 0, 0); Index: sys/dev/uart/uart_bus_isa.c =================================================================== --- sys/dev/uart/uart_bus_isa.c +++ sys/dev/uart/uart_bus_isa.c @@ -165,7 +165,7 @@ /* Probe PnP _and_ non-PnP ns8250 here. */ sc->sc_class = &uart_ns8250_class; - return (uart_bus_probe(dev, 0, 0, 0, 0)); + return (uart_bus_probe(dev, 0, 0, 0, 0, 0)); } DRIVER_MODULE(uart, isa, uart_isa_driver, uart_devclass, 0, 0); Index: sys/dev/uart/uart_bus_pccard.c =================================================================== --- sys/dev/uart/uart_bus_pccard.c +++ sys/dev/uart/uart_bus_pccard.c @@ -93,7 +93,7 @@ sc = device_get_softc(dev); sc->sc_class = &uart_ns8250_class; - error = uart_bus_probe(dev, 0, 0, 0, 0); + error = uart_bus_probe(dev, 0, 0, 0, 0, 0); if (error > 0) return (error); return (uart_bus_attach(dev)); Index: sys/dev/uart/uart_bus_pci.c =================================================================== --- sys/dev/uart/uart_bus_pci.c +++ sys/dev/uart/uart_bus_pci.c @@ -201,7 +201,7 @@ return (ENXIO); match: - result = uart_bus_probe(dev, id->regshft, id->rclk, id->rid, 0); + result = uart_bus_probe(dev, id->regshft, 0, id->rclk, id->rid, 0); /* Bail out on error. */ if (result > 0) return (result); Index: sys/dev/uart/uart_bus_puc.c =================================================================== --- sys/dev/uart/uart_bus_puc.c +++ sys/dev/uart/uart_bus_puc.c @@ -81,7 +81,7 @@ if (BUS_READ_IVAR(parent, dev, PUC_IVAR_CLOCK, &rclk)) rclk = 0; - return (uart_bus_probe(dev, 0, rclk, 0, 0)); + return (uart_bus_probe(dev, 0, 0, rclk, 0, 0)); } DRIVER_MODULE(uart, puc, uart_puc_driver, uart_devclass, 0, 0); Index: sys/dev/uart/uart_bus_scc.c =================================================================== --- sys/dev/uart/uart_bus_scc.c +++ sys/dev/uart/uart_bus_scc.c @@ -112,7 +112,7 @@ BUS_READ_IVAR(parent, dev, SCC_IVAR_REGSHFT, &rs)) return (ENXIO); - return (uart_bus_probe(dev, rs, cl, 0, ch)); + return (uart_bus_probe(dev, rs, 0, cl, 0, ch)); } DRIVER_MODULE(uart, scc, uart_scc_driver, uart_devclass, 0, 0); Index: sys/dev/uart/uart_core.c =================================================================== --- sys/dev/uart/uart_core.c +++ sys/dev/uart/uart_core.c @@ -256,6 +256,12 @@ return ((uc != NULL) ? uc->uc_rshift : 0); } +u_int +uart_getregiowidth(struct uart_class *uc) +{ + return ((uc != NULL) ? uc->uc_riowidth : 0); +} + /* * Schedule a soft interrupt. We do this on the 0 to !0 transition * of the TTY pending interrupt status. @@ -485,7 +491,7 @@ } int -uart_bus_probe(device_t dev, int regshft, int rclk, int rid, int chan) +uart_bus_probe(device_t dev, int regshft, int regiowidth, int rclk, int rid, int chan) { struct uart_softc *sc; struct uart_devinfo *sysdev; @@ -543,6 +549,7 @@ sc->sc_bas.bst = rman_get_bustag(sc->sc_rres); sc->sc_bas.chan = chan; sc->sc_bas.regshft = regshft; + sc->sc_bas.regiowidth = regiowidth; sc->sc_bas.rclk = (rclk == 0) ? sc->sc_class->uc_rclk : rclk; SLIST_FOREACH(sysdev, &uart_sysdevs, next) { Index: sys/dev/uart/uart_cpu.h =================================================================== --- sys/dev/uart/uart_cpu.h +++ sys/dev/uart/uart_cpu.h @@ -80,6 +80,7 @@ struct uart_ops *uart_getops(struct uart_class *); int uart_getrange(struct uart_class *); u_int uart_getregshift(struct uart_class *); +u_int uart_getregiowidth(struct uart_class *); void uart_add_sysdev(struct uart_devinfo *); Index: sys/dev/uart/uart_cpu_arm64.c =================================================================== --- sys/dev/uart/uart_cpu_arm64.c +++ sys/dev/uart/uart_cpu_arm64.c @@ -155,7 +155,7 @@ struct uart_class *class; bus_space_handle_t bsh; bus_space_tag_t bst; - u_int rclk, shift; + u_int rclk, shift, iowidth; int br, err; /* Allow overriding the FDT using the environment. */ @@ -174,7 +174,7 @@ #ifdef FDT if (err != 0) { err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, - &shift); + &shift, &iowidth); } #endif if (err != 0) @@ -185,6 +185,7 @@ */ di->bas.chan = 0; di->bas.regshft = shift; + di->bas.regiowidth = iowidth; di->baudrate = br; di->bas.rclk = rclk; di->ops = uart_getops(class); Index: sys/dev/uart/uart_cpu_fdt.h =================================================================== --- sys/dev/uart/uart_cpu_fdt.h +++ sys/dev/uart/uart_cpu_fdt.h @@ -51,8 +51,9 @@ DATA_SET(uart_fdt_class_set, data) int uart_cpu_fdt_probe(struct uart_class **, bus_space_tag_t *, - bus_space_handle_t *, int *, u_int *, u_int *); + bus_space_handle_t *, int *, u_int *, u_int *, u_int *); int uart_fdt_get_clock(phandle_t node, pcell_t *cell); int uart_fdt_get_shift(phandle_t node, pcell_t *cell); +int uart_fdt_get_io_width(phandle_t node, pcell_t *cell); #endif /* _DEV_UART_CPU_FDT_H_ */ Index: sys/dev/uart/uart_cpu_fdt.c =================================================================== --- sys/dev/uart/uart_cpu_fdt.c +++ sys/dev/uart/uart_cpu_fdt.c @@ -76,7 +76,7 @@ struct uart_class *class; bus_space_tag_t bst; bus_space_handle_t bsh; - u_int shift, rclk; + u_int shift, iowidth, rclk; int br, err; /* Allow overriding the FDT using the environment. */ @@ -88,7 +88,7 @@ if (devtype != UART_DEV_CONSOLE) return (ENXIO); - err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, &shift); + err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, &shift, &iowidth); if (err != 0) return (err); @@ -97,6 +97,7 @@ */ di->bas.chan = 0; di->bas.regshft = shift; + di->bas.regiowidth = iowidth; di->baudrate = br; di->bas.rclk = rclk; di->ops = uart_getops(class); Index: sys/dev/uart/uart_dev_snps.c =================================================================== --- sys/dev/uart/uart_dev_snps.c +++ sys/dev/uart/uart_dev_snps.c @@ -136,7 +136,7 @@ struct snps_softc *sc; struct uart_class *uart_class; phandle_t node; - uint32_t shift, clock; + uint32_t shift, iowidth, clock; uint64_t freq; int error; #ifdef EXT_RESOURCES @@ -159,6 +159,8 @@ node = ofw_bus_get_node(dev); if (OF_getencprop(node, "reg-shift", &shift, sizeof(shift)) <= 0) shift = 0; + if (OF_getencprop(node, "reg-io-width", &iowidth, sizeof(iowidth)) <= 0) + iowidth = 1; if (OF_getencprop(node, "clock-frequency", &clock, sizeof(clock)) <= 0) clock = 0; @@ -200,7 +202,7 @@ if (bootverbose && clock == 0) device_printf(dev, "could not determine frequency\n"); - error = uart_bus_probe(dev, (int)shift, (int)clock, 0, 0); + error = uart_bus_probe(dev, (int)shift, (int)iowidth, (int)clock, 0, 0); if (error != 0) return (error); Index: sys/mips/adm5120/uart_bus_adm5120.c =================================================================== --- sys/mips/adm5120/uart_bus_adm5120.c +++ sys/mips/adm5120/uart_bus_adm5120.c @@ -87,7 +87,7 @@ sc->sc_class = &uart_adm5120_uart_class; bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas)); - return (uart_bus_probe(dev, 0, 0, 0, 0)); + return (uart_bus_probe(dev, 0, 0, 0, 0, 0)); } DRIVER_MODULE(uart, obio, uart_adm5120_driver, uart_devclass, 0, 0); Index: sys/mips/alchemy/uart_bus_alchemy.c =================================================================== --- sys/mips/alchemy/uart_bus_alchemy.c +++ sys/mips/alchemy/uart_bus_alchemy.c @@ -81,7 +81,7 @@ sc->sc_class = &uart_ns8250_class; bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas)); - return (uart_bus_probe(dev, 0, 0, 0, 0)); + return (uart_bus_probe(dev, 0, 0, 0, 0, 0)); } DRIVER_MODULE(uart, obio, uart_alchemy_driver, uart_devclass, 0, 0); Index: sys/mips/atheros/ar531x/uart_bus_ar5315.c =================================================================== --- sys/mips/atheros/ar531x/uart_bus_ar5315.c +++ sys/mips/atheros/ar531x/uart_bus_ar5315.c @@ -83,7 +83,7 @@ sc->sc_bas.bst = mips_bus_space_generic; sc->sc_bas.bsh = ar531x_uart_addr() + 3; - return (uart_bus_probe(dev, 2, freq, 0, 0)); + return (uart_bus_probe(dev, 2, 0, freq, 0, 0)); } DRIVER_MODULE(uart, apb, uart_ar5315_driver, uart_devclass, 0, 0); Index: sys/mips/atheros/uart_bus_ar71xx.c =================================================================== --- sys/mips/atheros/uart_bus_ar71xx.c +++ sys/mips/atheros/uart_bus_ar71xx.c @@ -83,7 +83,7 @@ sc->sc_bas.bst = mips_bus_space_generic; sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(AR71XX_UART_ADDR) + 3; - return (uart_bus_probe(dev, 2, freq, 0, 0)); + return (uart_bus_probe(dev, 2, 0, freq, 0, 0)); } #ifdef EARLY_PRINTF Index: sys/mips/atheros/uart_bus_ar933x.c =================================================================== --- sys/mips/atheros/uart_bus_ar933x.c +++ sys/mips/atheros/uart_bus_ar933x.c @@ -88,7 +88,7 @@ sc->sc_bas.bst = mips_bus_space_generic; sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(AR71XX_UART_ADDR); - return (uart_bus_probe(dev, 2, freq, 0, 0)); + return (uart_bus_probe(dev, 2, 0, freq, 0, 0)); } /* Index: sys/mips/broadcom/uart_bus_chipc.c =================================================================== --- sys/mips/broadcom/uart_bus_chipc.c +++ sys/mips/broadcom/uart_bus_chipc.c @@ -61,7 +61,7 @@ sc->sc_class = &uart_ns8250_class; rclk = bcm_get_uart_rclk(bcm_get_platform()); - return (uart_bus_probe(dev, 0, rclk, 0, 0)); + return (uart_bus_probe(dev, 0, 0, rclk, 0, 0)); } static device_method_t uart_chipc_methods[] = { Index: sys/mips/cavium/uart_bus_octeonusart.c =================================================================== --- sys/mips/cavium/uart_bus_octeonusart.c +++ sys/mips/cavium/uart_bus_octeonusart.c @@ -105,7 +105,7 @@ if (bus_space_map(sc->sc_bas.bst, CVMX_MIO_UARTX_RBR(0), uart_getrange(sc->sc_class), 0, &sc->sc_bas.bsh) != 0) return (ENXIO); - return (uart_bus_probe(dev, sc->sc_bas.regshft, 0, 0, unit)); + return (uart_bus_probe(dev, sc->sc_bas.regshft, 0, 0, 0, unit)); } DRIVER_MODULE(uart, obio, uart_octeon_driver, uart_devclass, 0, 0); Index: sys/mips/idt/uart_bus_rc32434.c =================================================================== --- sys/mips/idt/uart_bus_rc32434.c +++ sys/mips/idt/uart_bus_rc32434.c @@ -94,7 +94,7 @@ sc->sc_bas.bst = mips_bus_space_generic; sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(IDT_BASE_UART0); - return (uart_bus_probe(dev, 2, 330000000UL/2, 0, 0)); + return (uart_bus_probe(dev, 2, 0, 330000000UL/2, 0, 0)); } DRIVER_MODULE(uart, obio, uart_rc32434_driver, uart_devclass, 0, 0); Index: sys/mips/ingenic/jz4780_uart.c =================================================================== --- sys/mips/ingenic/jz4780_uart.c +++ sys/mips/ingenic/jz4780_uart.c @@ -179,7 +179,7 @@ device_printf(dev, "got UART clock: %lld\n", freq); sc->ns8250_base.base.sc_class = (struct uart_class *)cd->ocd_data; shift = jz4780_uart_get_shift(dev); - return (uart_bus_probe(dev, shift, (int)freq, 0, 0)); + return (uart_bus_probe(dev, shift, 0, (int)freq, 0, 0)); } static int Index: sys/mips/malta/uart_bus_maltausart.c =================================================================== --- sys/mips/malta/uart_bus_maltausart.c +++ sys/mips/malta/uart_bus_maltausart.c @@ -85,7 +85,7 @@ sc->sc_sysdev->bas.bsh = MIPS_PHYS_TO_KSEG1(MALTA_UART0ADR); sc->sc_bas.bst = mips_bus_space_generic; sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(MALTA_UART0ADR); - return(uart_bus_probe(dev, 0, 0, 0, 0)); + return(uart_bus_probe(dev, 0, 0, 0, 0, 0)); } DRIVER_MODULE(uart, obio, uart_malta_driver, uart_devclass, 0, 0); Index: sys/mips/rmi/uart_bus_xlr_iodi.c =================================================================== --- sys/mips/rmi/uart_bus_xlr_iodi.c +++ sys/mips/rmi/uart_bus_xlr_iodi.c @@ -74,7 +74,7 @@ sc->sc_bas.bst = rmi_bus_space; sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(XLR_UART0ADDR); /* regshft = 2, rclk = 66000000, rid = 0, chan = 0 */ - return (uart_bus_probe(dev, 2, 66000000, 0, 0)); + return (uart_bus_probe(dev, 2, 0, 66000000, 0, 0)); } DRIVER_MODULE(uart, iodi, uart_iodi_driver, uart_devclass, 0, 0); Index: sys/mips/rt305x/uart_bus_rt305x.c =================================================================== --- sys/mips/rt305x/uart_bus_rt305x.c +++ sys/mips/rt305x/uart_bus_rt305x.c @@ -87,7 +87,7 @@ sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(device_get_unit(dev)?UARTLITE_BASE:UART_BASE); - return (uart_bus_probe(dev, 2, SYSTEM_CLOCK, 0, 0)); + return (uart_bus_probe(dev, 2, 0, SYSTEM_CLOCK, 0, 0)); } DRIVER_MODULE(uart, obio, uart_rt305x_driver, uart_devclass, 0, 0); Index: sys/powerpc/psim/uart_iobus.c =================================================================== --- sys/powerpc/psim/uart_iobus.c +++ sys/powerpc/psim/uart_iobus.c @@ -81,7 +81,7 @@ sc->sc_class = &uart_ns8250_class; device_set_desc(dev, "PSIM serial port"); - return (uart_bus_probe(dev, 0, 0, 0, 0)); + return (uart_bus_probe(dev, 0, 0, 0, 0, 0)); } DRIVER_MODULE(uart, iobus, uart_iobus_driver, uart_devclass, 0, 0); Index: sys/sparc64/pci/sbbc.c =================================================================== --- sys/sparc64/pci/sbbc.c +++ sys/sparc64/pci/sbbc.c @@ -618,7 +618,7 @@ sc = device_get_softc(dev); sc->sc_class = &uart_sbbc_class; device_set_desc(dev, "Serengeti console"); - return (uart_bus_probe(dev, 0, 0, SBBC_PCI_BAR, 0)); + return (uart_bus_probe(dev, 0, 0, 0, SBBC_PCI_BAR, 0)); } /*