/*
 * ARM CMSDK APB watchdog emulation
 *
 * Copyright (c) 2018 Linaro Limited
 * Written by Peter Maydell
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 or
 *  (at your option) any later version.
 */

/*
 * This is a model of the "APB watchdog" which is part of the Cortex-M
 * System Design Kit (CMSDK) and documented in the Cortex-M System
 * Design Kit Technical Reference Manual (ARM DDI0479C):
 * https://developer.arm.com/products/system-design/system-design-kits/cortex-m-system-design-kit
 *
 * QEMU interface:
 *  + QOM property "wdogclk-frq": frequency at which the watchdog is clocked
 *  + sysbus MMIO region 0: the register bank
 *  + sysbus IRQ 0: watchdog interrupt
 *
 * In real hardware the watchdog's reset output is just a GPIO line
 * which can then be masked by the board or treated as a simple interrupt.
 * (For instance the IoTKit does this with the non-secure watchdog, so that
 * secure code can control whether non-secure code can perform a system
 * reset via its watchdog.) In QEMU, we just wire up the watchdog reset
 * to watchdog_perform_action(), at least for the moment.
 */

#ifndef CMSDK_APB_WATCHDOG_H
#define CMSDK_APB_WATCHDOG_H

#include "hw/sysbus.h"
#include "hw/ptimer.h"
#include "qom/object.h"

#define TYPE_CMSDK_APB_WATCHDOG "cmsdk-apb-watchdog"
OBJECT_DECLARE_SIMPLE_TYPE(CMSDKAPBWatchdog, CMSDK_APB_WATCHDOG)

/*
 * This shares the same struct (and cast macro) as the base
 * cmsdk-apb-watchdog device.
 */
#define TYPE_LUMINARY_WATCHDOG "luminary-watchdog"

struct CMSDKAPBWatchdog {
    /*< private >*/
    SysBusDevice parent_obj;

    /*< public >*/
    MemoryRegion iomem;
    qemu_irq wdogint;
    uint32_t wdogclk_frq;
    bool is_luminary;
    struct ptimer_state *timer;

    uint32_t control;
    uint32_t intstatus;
    uint32_t lock;
    uint32_t itcr;
    uint32_t itop;
    uint32_t resetstatus;
    const uint32_t *id;
};

#endif
