42 lines
1.4 KiB
Diff
42 lines
1.4 KiB
Diff
|
|
From f995e8b5e5c14f83a16433f192440ec5c82c87fa Mon Sep 17 00:00:00 2001
|
||
|
|
From: Ying Fang <fangying1@huawei.com>
|
||
|
|
Date: Mon, 29 Jul 2019 16:16:35 +0800
|
||
|
|
Subject: [PATCH] pl011: reset read FIFO when UARTTIMSC=0 & UARTICR=0xffff
|
||
|
|
|
||
|
|
We can enable ACPI when AArch64 Linux is booted with QEMU and UEFI (AAVMF).
|
||
|
|
When VM is booting and the SBSA driver has not initialized, writting data
|
||
|
|
that exceds 32 bytes will cause the read FIFO full and proceeding data will
|
||
|
|
be lost. The searil port appears to be stuck in this abnormal situation.
|
||
|
|
|
||
|
|
A hack to reset read FIFO when UARTTIMSC=0 & UARTICR=0xffff appears to
|
||
|
|
resolve the issue.
|
||
|
|
|
||
|
|
The question is fully discussed at
|
||
|
|
https://www.spinics.net/lists/linux-serial/msg23163.html
|
||
|
|
|
||
|
|
Signed-off-by: Haibin Wang <wanghaibin.wang@huawei.com>
|
||
|
|
Reviewed-by: Shannon Zhao <shannon.zhaosl@gmail.com>
|
||
|
|
Reviewed-by: Ying Fang <fangying1@huawei.com>
|
||
|
|
---
|
||
|
|
hw/char/pl011.c | 4 ++++
|
||
|
|
1 file changed, 4 insertions(+)
|
||
|
|
|
||
|
|
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
|
||
|
|
index e5dd448f..899745ef 100644
|
||
|
|
--- a/hw/char/pl011.c
|
||
|
|
+++ b/hw/char/pl011.c
|
||
|
|
@@ -223,6 +223,10 @@ static void pl011_write(void *opaque, hwaddr offset,
|
||
|
|
case 17: /* UARTICR */
|
||
|
|
s->int_level &= ~value;
|
||
|
|
pl011_update(s);
|
||
|
|
+ if (!s->int_enabled && !s->int_level) {
|
||
|
|
+ s->read_count = 0;
|
||
|
|
+ s->read_pos = 0;
|
||
|
|
+ }
|
||
|
|
break;
|
||
|
|
case 18: /* UARTDMACR */
|
||
|
|
s->dmacr = value;
|
||
|
|
--
|
||
|
|
2.19.1
|
||
|
|
|