summaryrefslogtreecommitdiffstats
path: root/sys/dev/uart
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2011-05-26 17:02:56 +0000
committermarcel <marcel@FreeBSD.org>2011-05-26 17:02:56 +0000
commitd7214daa609442aa65fdbb054db56a3ffc1ee75a (patch)
tree1e0e4004e17f8019f4afe4aec0cd979070995bab /sys/dev/uart
parentd59ac47d9eb23e6ffcb7f5d652fa72fe8632f98c (diff)
downloadFreeBSD-src-d7214daa609442aa65fdbb054db56a3ffc1ee75a.zip
FreeBSD-src-d7214daa609442aa65fdbb054db56a3ffc1ee75a.tar.gz
Ignore MCR[6] during the probe to fix a false negative. Bit 6 of the
MCR register on the Sunix Sun1699 chip tends to be set but doesn't seem to have a function. That is, FreeBSD just works (provided the correct RCLK is used) regardless. PR: kern/129663 Diagnostics: Eygene Ryabinkin <rea-fbsd at codelabs.ru> MFC after: 3 days
Diffstat (limited to 'sys/dev/uart')
-rw-r--r--sys/dev/uart/uart_dev_ns8250.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/dev/uart/uart_dev_ns8250.c b/sys/dev/uart/uart_dev_ns8250.c
index 3cdd5ad..489be29 100644
--- a/sys/dev/uart/uart_dev_ns8250.c
+++ b/sys/dev/uart/uart_dev_ns8250.c
@@ -242,8 +242,14 @@ ns8250_probe(struct uart_bas *bas)
val = uart_getreg(bas, REG_IIR);
if (val & 0x30)
return (ENXIO);
+ /*
+ * Bit 6 of the MCR (= 0x40) appears to be 1 for the Sun1699
+ * chip, but otherwise doesn't seem to have a function. In
+ * other words, uart(4) works regardless. Ignore that bit so
+ * the probe succeeds.
+ */
val = uart_getreg(bas, REG_MCR);
- if (val & 0xe0)
+ if (val & 0xa0)
return (ENXIO);
return (0);
OpenPOWER on IntegriCloud