The UART disable code was causing a hang and was worked around with a
return that skipped the disable code. This patch removes the return and
fixes the UART disable code.
The problem was that the disable code was ORing bits into the Legacy_IO
MSR causing issues with the LPC SIOs init code that would manifest as a
hang because the IO would not be decoded correctly. ANDing to clear the
bits fixes the issue.
Signed-off-by: Marc Jones marc.jones@amd.com
--
Marc Jones
Senior Software Engineer
(970) 226-9684 Office
mailto:Marc.Jones@amd.com
http://www.amd.com/embeddedprocessors
Index: cs5536.c
===================================================================
--- cs5536.c (revision 2705)
+++ cs5536.c (working copy)
@@ -316,9 +316,6 @@
} else {
/* Reset and disable COM1 */
- printk_err("Not disabling COM1 due to a bug ...\n");
- /* for now, don't do this! */
- return;
msr = rdmsr(MDD_UART1_CONF);
msr.lo = 1; // reset
wrmsr(MDD_UART1_CONF, msr);
@@ -327,7 +324,7 @@
/* Disable the IRQ */
msr = rdmsr(MDD_LEG_IO);
- msr.lo |= ~(0xF << 16);
+ msr.lo &= ~(0xF << 16);
wrmsr(MDD_LEG_IO, msr);
}
@@ -391,7 +388,7 @@
/* Disable the IRQ */
msr = rdmsr(MDD_LEG_IO);
- msr.lo |= ~(0xF << 20);
+ msr.lo &= ~(0xF << 20);
wrmsr(MDD_LEG_IO, msr);
}
}