summaryrefslogtreecommitdiff
path: root/sys/dev/uart/uart_cpu_sparc64.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/uart/uart_cpu_sparc64.c')
-rw-r--r--sys/dev/uart/uart_cpu_sparc64.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/dev/uart/uart_cpu_sparc64.c b/sys/dev/uart/uart_cpu_sparc64.c
index 5b8b1c62abc5..b99bc7101c28 100644
--- a/sys/dev/uart/uart_cpu_sparc64.c
+++ b/sys/dev/uart/uart_cpu_sparc64.c
@@ -55,7 +55,7 @@ uart_cpu_channel(char *dev)
if (len < 2 || alias[len - 2] != ':' || alias[len - 1] < 'a' ||
alias[len - 1] > 'b')
return (0);
- return (alias[len - 1] - 'a');
+ return (alias[len - 1] - 'a' + 1);
}
int
@@ -71,7 +71,7 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
char buf[32], dev[32], compat[32];
phandle_t input, options, output;
bus_addr_t addr;
- int baud, bits, ch, error, space, stop;
+ int baud, bits, error, space, stop;
char flag, par;
/*
@@ -123,20 +123,21 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
di->bas.rclk = 0;
if (!strcmp(buf, "se")) {
di->ops = uart_sab82532_ops;
- addr += 64 * uart_cpu_channel(dev);
+ di->bas.chan = uart_cpu_channel(dev);
+ addr += 64 * (di->bas.chan - 1);
} else if (!strcmp(buf, "zs")) {
di->ops = uart_z8530_ops;
+ di->bas.chan = uart_cpu_channel(dev);
di->bas.regshft = 1;
- ch = uart_cpu_channel(dev);
- addr += 4 - 4 * ch;
+ addr += 4 - 4 * (di->bas.chan - 1);
} else if (!strcmp(buf, "su") || !strcmp(buf, "su_pnp") ||
- !strcmp(compat, "su") || !strcmp(compat, "su16550"))
+ !strcmp(compat, "su") || !strcmp(compat, "su16550")) {
di->ops = uart_ns8250_ops;
- else
+ di->bas.chan = 0;
+ } else
return (ENXIO);
/* Fill in the device info. */
- di->bas.iobase = addr;
di->bas.bst = &bst_store[devtype];
di->bas.bsh = sparc64_fake_bustag(space, addr, di->bas.bst);