[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] PL011: fix reverse logic for interrupt mask register
Sorry, I've gotten behind while traveling. I cleared a bunch of backlog this afternoon but didn't manage to get to this one. I hope I can review it tomorrow. Ian. (Sorry for top post, on my phone) Andre Przywara <andre.przywara@xxxxxxxxxx> wrote: >On 08/13/2013 05:12 PM, Andre Przywara wrote: > >Ian, > >what about this one? >This is a real showstopper on Midway. > >Thanks, >Andre. > >> The PL011 IMSC register description is somehow fuzzy in the >> documentation; by comparing it with the Linux implementation one can >> see that the logic is actually reversed to Xen's implementation: >> A "0" in field means interrupt disabled, a "1" enables it. >> Therefore we enabled all interrupts instead of disabling them in the >> beginning and later on masked the wrong interrupts. >> Unclear how this worked on the Versatile Express, but this fix is >> needed to get Calxeda Midway running (and works on VExpress, too). >> >> Signed-off-by: Andre Przywara <andre.przywara@xxxxxxxxxx> >> --- >> xen/drivers/char/pl011.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c >> index 05d034f..8e90520 100644 >> --- a/xen/drivers/char/pl011.c >> +++ b/xen/drivers/char/pl011.c >> @@ -87,7 +87,7 @@ static void __init pl011_init_preirq(struct serial_port >> *port) >> unsigned int divisor; >> >> /* No interrupts, please. */ >> - pl011_write(uart, IMSC, ALLI); >> + pl011_write(uart, IMSC, 0); >> >> /* Definitely no DMA */ >> pl011_write(uart, DMACR, 0x0); >> @@ -115,7 +115,7 @@ static void __init pl011_init_preirq(struct serial_port >> *port) >> pl011_write(uart, RSR, 0); >> >> /* Mask and clear the interrupts */ >> - pl011_write(uart, IMSC, ALLI); >> + pl011_write(uart, IMSC, 0); >> pl011_write(uart, ICR, ALLI); >> >> /* Enable the UART for RX and TX; no flow ctrl */ >> @@ -140,7 +140,7 @@ static void __init pl011_init_postirq(struct serial_port >> *port) >> pl011_write(uart, ICR, OEI|BEI|PEI|FEI); >> >> /* Unmask interrupts */ >> - pl011_write(uart, IMSC, RTI|DSRMI|DCDMI|CTSMI|RIMI); >> + pl011_write(uart, IMSC, OEI|BEI|PEI|FEI|TXI|RXI); >> } >> >> static void pl011_suspend(struct serial_port *port) >> > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |