diff options
author | AlexChen <alex.chen@huawei.com> | 2020-11-03 17:32:01 +0800 |
---|---|---|
committer | Philippe Mathieu-Daudé <f4bug@amsat.org> | 2020-11-03 16:51:13 +0100 |
commit | a300c04f136a70c507e6f481b028363c879d16e5 (patch) | |
tree | c3a159050df7d1409ea5a4beca58116a728d1307 /hw | |
parent | 4a129ccdf25f920788a953df1ccc0e485f7b977c (diff) | |
download | qemu-a300c04f136a70c507e6f481b028363c879d16e5.zip qemu-a300c04f136a70c507e6f481b028363c879d16e5.tar.gz qemu-a300c04f136a70c507e6f481b028363c879d16e5.tar.bz2 |
hw/intc/loongson: Fix incorrect 'core' calculation in liointc_read/write
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 per CORE is 8, so here we need to divide
(addr - R_PERCORE_ISR(0)) by 8, not 4.
Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Alex Chen <alex.chen@huawei.com>
Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <5FA12391.8090400@huawei.com>
[PMD: Shortened subject]
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/intc/loongson_liointc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/hw/intc/loongson_liointc.c b/hw/intc/loongson_liointc.c index 30fb375..fbbfb57 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; } |