|
From: | Jiaxun Yang |
Subject: | Re: [PATCH] hw/intc: Fix incorrect calculation of core in liointc_read() and liointc_write() |
Date: | Tue, 3 Nov 2020 17:53:11 +0800 |
User-agent: | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 |
在 2020/11/3 17:32, AlexChen 写道:
According to the loongson spec (http://www.loongson.cn/uploadfile/cpu/3B1500/Loongson_3B1500_cpu_user_1.pdf) and the macro definition(#define R_PERCORE_ISR(x) (0x40 + 0x8 * x)), we know that the ISR size of per CORE is 8, so here we need to divide (addr - R_PERCORE_ISR(0)) by 8, not 4.
Hi Alex Thanks! That was my fault.. Per Core ISA is rarely used by kernel.. Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Reported-by: Euler Robot <euler.robot@huawei.com>
Btw: How can you discover this by robot? Huawei owns real artifical intelligence technology lol :-) - Jiaxun
Signed-off-by: Alex Chen <alex.chen@huawei.com> --- hw/intc/loongson_liointc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/intc/loongson_liointc.c b/hw/intc/loongson_liointc.c index 30fb375b72..fbbfb57ee9 100644 --- a/hw/intc/loongson_liointc.c +++ b/hw/intc/loongson_liointc.c @@ -130,7 +130,7 @@ liointc_read(void *opaque, hwaddr addr, unsigned int size) if (addr >= R_PERCORE_ISR(0) && addr < R_PERCORE_ISR(NUM_CORES)) { - int core = (addr - R_PERCORE_ISR(0)) / 4; + int core = (addr - R_PERCORE_ISR(0)) / 8; r = p->per_core_isr[core]; goto out; } @@ -173,7 +173,7 @@ liointc_write(void *opaque, hwaddr addr, if (addr >= R_PERCORE_ISR(0) && addr < R_PERCORE_ISR(NUM_CORES)) { - int core = (addr - R_PERCORE_ISR(0)) / 4; + int core = (addr - R_PERCORE_ISR(0)) / 8; p->per_core_isr[core] = value; goto out; }
[Prev in Thread] | Current Thread | [Next in Thread] |