// 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"
  ],
  bus_device: "tlul",
  regwidth: "32",
  param_list: [
  ],

  // 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 gescalation"},
             {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"]
    }
  ]
}
