qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]