// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// TODO: This module is only a draft implementation that covers most of the rstmgr
// functoinality but is incomplete

# RSTMGR register template
#
{
  name: "RSTMGR",
  clock_primary: "clk_i",
  other_clock_list: [
    "clk_main_i",
    "clk_io_i",
    "clk_usb_i",
    "clk_aon_i",
    "clk_io_div2_i",
  ],
  bus_device: "tlul",
  regwidth: "32",
  param_list: [
  ],
  scan: "true",       // Enable `scanmode_i` port
  scan_reset: "true", // Enable `test_rst_ni` port
  // Define rstmgr struct package
  inter_signal_list: [
    { struct:  "pwr_rst",    // pwr_rst_req_t, pwr_rst_rsp_t
      type:    "req_rsp",
      name:    "pwr",        // resets_o (req), resets_i (rsp)
      act:     "rsp",
    },

    { struct:  "rstmgr_out",
      type:    "uni",
      name:    "resets",
      act:     "req",
      package: "rstmgr_pkg", // Origin package (only needs for the req)
    },

    { struct:  "rstmgr_ast",
      type:    "uni",
      name:    "ast",
      act:     "rcv",
      package: "rstmgr_pkg", // Origin package (only needs for the req)
    },

    { struct:  "rstmgr_cpu",
      type:    "uni",
      name:    "cpu",
      act:     "rcv",
      package: "rstmgr_pkg", // Origin package (only needs for the req)
    },

    { struct:  "rstmgr_peri",
      type:    "uni",
      name:    "peri",
      act:     "rcv",
      package: "rstmgr_pkg", // Origin package (only needs for the req)
    },
  ],

  registers: [
    { name: "RESET_INFO",
      desc: '''
            Device reset reason.
            ''',
      swaccess: "rw1c",
      hwaccess: "hrw",
      hwext: "true",
      hwqe: "true",
      fields: [
        {
            bits: "4:0",
            name: "CAUSE",
            resval: 1,
            desc: '''Indicates reset cause.  The bits below are not mutually exclusive, and multiple
            bits can be set at the same time.'''
            enum: [
             {value: "0x1",  name: "por",              desc: "Indicates when a device has reset due to power up"},
             {value: "0x2",  name: "low_power_exit",   desc: "Indicates when a device has reset due low power exit"},
             {value: "0x4",  name: "watchdog",         desc: "Indicates when a device has reset due to watchdog"},
             {value: "0x8",  name: "escalation",       desc: "Indicates when a device has reset due to security escalation"},
             {value: "0x10", name: "Non-debug-module", desc: "Indicates when a device has reset due to non-debug-module request"},
            ]
        }
      ]
    },

    ########################
    # These registers below should be templatized and generated
    ########################

    { name: "SPI_DEVICE_REGEN",
      desc: '''
            Register write enable for spi_device reset.
            ''',
      swaccess: "rw1c",
      hwaccess: "none",
      fields: [
        {
            bits:   "0",
            desc: ''' When 1, rst_spi_device_n is software programmable.
            '''
            resval: 1,
        },
      ]
      tags: [// Don't reset other IPs as it will affect CSR access on these IPs
             "excl:CsrAllTests:CsrExclWrite"]
    },

    { name: "USB_REGEN",
      desc: '''
            Register write enable for usb reset.
            ''',
      swaccess: "rw1c",
      hwaccess: "none",
      fields: [
        {
            bits:   "0",
            desc: ''' When 1, rst_usb_n is software programmable.
            '''
            resval: 1,
        },
      ]
      tags: [// Don't reset other IPs as it will affect CSR access on these IPs
             "excl:CsrAllTests:CsrExclWrite"]
    },

    { name: "RST_SPI_DEVICE_N",
      regwen:  "SPI_DEVICE_REGEN",
      desc: '''
            Software reset control for spi device
            ''',
      swaccess: "rw",
      hwaccess: "hro",
      fields: [
        {
            bits:   "0",
            desc: ''' When set to 0, spi_device is held in reset.  This bit can only be
            programmed when spi_device_regen is 1.
            '''
            resval: 1,
        },
      ]
      tags: [// Don't reset other IPs as it will affect CSR access on these IPs
             "excl:CsrAllTests:CsrExclWrite"]
    },

    { name: "RST_USB_N",
      regwen:  "USB_REGEN",
      desc: '''
            Software reset control for usb
            ''',
      swaccess: "rw",
      hwaccess: "hro",
      fields: [
        {
            bits:   "0",
            desc: ''' When set to 0, usb is held in reset. This bit can only be
            programmed when usb_regen is 1.
            '''
            resval: 1,
        },
      ]
      tags: [// Don't reset other IPs as it will affect CSR access on these IPs
             "excl:CsrAllTests:CsrExclWrite"]
    }
  ]
}
