[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC 0/1] Implement AVR WDT (watchdog timer)
From: |
Fred Konrad |
Subject: |
Re: [RFC 0/1] Implement AVR WDT (watchdog timer) |
Date: |
Mon, 3 May 2021 15:06:08 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 |
Hi Michael,
Le 5/2/21 à 10:10 PM, Michael Rolnik a écrit :
1. Initial implementation of AVR WDT
Nice!
There are two issues with this implementation so I need your help here
a. when I configure the WDT to fire an interrupt every 15ms it actually
happens every 6 instructions
Tested with the maximal prescaler: I've ~8 seconds which seems expected
according to the documentation, I don't know how much time it takes to run
through all the timers and go back in the execution loop, maybe 15ms is just too
low?
b. when I specify --icount shift=0 qemu stucks
For me it just crashes:
qemu-system-avr: Bad icount read
(gdb) bt
#0 icount_get_raw_locked () at ../src/softmmu/icount.c:117
#1 0x00000000004e1801 in icount_get_locked () at ../src/softmmu/icount.c:128
#2 0x00000000004e187a in icount_get () at ../src/softmmu/icount.c:154
#3 0x00000000004bc8ff in cpus_get_virtual_clock () at ../src/softmmu/cpus.c:217
#4 0x00000000006f5bd5 in qemu_clock_get_ns (type=QEMU_CLOCK_VIRTUAL) at
../src/util/qemu-timer.c:637
#5 0x00000000005422d7 in avr_wdt_reset_alarm (wdt=0xe14040) at
../src/hw/watchdog/avr_wdt.c:74
#6 0x0000000000542536 in avr_wdt_write (opaque=0xe14040, offset=0, val64=57,
size=1) at ../src/hw/watchdog/avr_wdt.c:134
#7 0x00000000004cdeaa in memory_region_write_accessor (mr=0xe14360, addr=0,
value=0x7fff76ae9378, size=1, shift=0, mask=255, attrs=...) at
../src/softmmu/memory.c:491
#8 0x00000000004ce0cd in access_with_adjusted_size (addr=0,
value=0x7fff76ae9378, size=1, access_size_min=1, access_size_max=1,
access_fn=0x4cddc7 <memory_region_write_accessor>, mr=0xe14360, attrs=...)
at ../src/softmmu/memory.c:552
if (cpu && cpu->running) {
if (!cpu->can_do_io) {
error_report("Bad icount read");
exit(1);
HERE.
}
I'm not sure icount is supported on avr? ie: I don't see any gen_io_start();
in target/avr?
Michael Rolnik (1):
Implement AVR watchdog timer
hw/avr/Kconfig | 1 +
hw/avr/atmega.c | 15 ++-
hw/avr/atmega.h | 2 +
hw/watchdog/Kconfig | 3 +
hw/watchdog/avr_wdt.c | 188 ++++++++++++++++++++++++++++++++++
hw/watchdog/meson.build | 2 +
hw/watchdog/trace-events | 5 +
include/hw/watchdog/avr_wdt.h | 47 +++++++++
target/avr/cpu.c | 3 +
target/avr/cpu.h | 1 +
target/avr/helper.c | 7 +-
11 files changed, 269 insertions(+), 5 deletions(-)
create mode 100644 hw/watchdog/avr_wdt.c
create mode 100644 include/hw/watchdog/avr_wdt.h