blob: d0cabdf5b67cff8e17d823c23be12a7c4f412004 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
assembly: 0.966
debug: 0.947
peripherals: 0.845
graphic: 0.763
device: 0.739
performance: 0.675
architecture: 0.668
risc-v: 0.662
PID: 0.627
ppc: 0.621
socket: 0.587
permissions: 0.578
semantic: 0.570
vnc: 0.566
network: 0.501
kernel: 0.492
x86: 0.485
user-level: 0.483
arm: 0.432
mistranslation: 0.395
i386: 0.383
boot: 0.358
virtual: 0.302
register: 0.249
files: 0.203
VMM: 0.200
hypervisor: 0.198
TCG: 0.161
KVM: 0.081
riscv virt pflash0 writes not supported
Description of problem:
I am using GDB to debug some Firmware related stuff. At some point in the execution my BIOS/Firmware writes into some global variable (at 0x2000525C) inside the .bss section which is linked to be inside the memory mapped pflash0. But when I step forward with GDB to the exact location where the store instruction (sw) is executed, QEMU prints the following:
```
pflash_write: Unimplemented flash cmd sequence (offset 000000000000525c, wcycle 0x0 cmd 0x0 value 0x1)
```
According to the top of `hw/block/pflash_cfi01.c` Flash writes are supported. I was also under the impression that the flash is memory mapped, but maybe that is not true? I am probably missing something here so it would be nice if someone could point me in the right direction. I would also gladly contribute if there is something missing in the riscv virt target.
I made a simple program to more easily reproduce this:
```
.section .text
.global _start
_start:
lui a5, 0x20000
li a4, 5
sw a4, 24(a5)
```
results in QEMU error msg:
```
pflash_write: Unimplemented flash cmd sequence (offset 0000000000000018, wcycle 0x0 cmd 0x0 value 0x5)
```
Steps to reproduce:
1. compile above assembly program like this:
```
riscv64-unknown-elf-gcc -nostdlib -O0 bios.S
riscv64-unknown-elf-objcopy -O binary a.out
truncate -s 33554432 a.out
```
2. start QEMU like this:
```
qemu-system-riscv64 -M virt -bios none -drive if=pflash,format=raw,unit=0,file=a.out -nographic -d unimp
```
3. notice the error message printed by QEMU
|