blob: bbf64a2963ca5b4dd4186b5136fb93847cb60abc [file] [log] [blame]
// THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT
/**
* Copyright (c) 2024 Raspberry Pi Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
// =============================================================================
// Register block : RISCV_DM
// Version : 1
// Bus type : apb
// Description : RISC-V Debug module registers (Hazard3 subset only). Read-
// only information fields (such as dmstatus.version) are
// listed here with the values they have on the RP2350
// instantiation of Hazard3.
// =============================================================================
#ifndef _HARDWARE_REGS_RISCV_DM_H
#define _HARDWARE_REGS_RISCV_DM_H
// =============================================================================
// Register : RISCV_DM_DATA0
// Description : data0 through data11 are basic read/write registers that may be
// read or changed by abstract commands. abstractcs.datacount
// indicates how many of them are implemented, starting at data0,
// counting up.
//
// Accessing these registers while an abstract command is
// executing causes abstractcs.cmderr to be set to 1 (busy) if it
// is 0.
//
// Attempts to write them while abstractcs.busy is set does not
// change their value.
//
// The values in these registers may not be preserved after an
// abstract command is executed. The only guarantees on their
// contents are the ones offered by the command in question. If
// the command fails, no assumptions can be made about the
// contents of these registers.
//
// (Note: Hazard3 implements data0 only.)
#define RISCV_DM_DATA0_OFFSET _u(0x00000010)
#define RISCV_DM_DATA0_BITS _u(0xffffffff)
#define RISCV_DM_DATA0_RESET _u(0x00000000)
#define RISCV_DM_DATA0_MSB _u(31)
#define RISCV_DM_DATA0_LSB _u(0)
#define RISCV_DM_DATA0_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_DMCONTROL
// Description : This register controls the overall Debug Module as well as the
// currently selected harts, as defined in hasel.
#define RISCV_DM_DMCONTROL_OFFSET _u(0x00000040)
#define RISCV_DM_DMCONTROL_BITS _u(0xf7ffffcf)
#define RISCV_DM_DMCONTROL_RESET _u(0x00000000)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_HALTREQ
// Description : Writing 0 clears the halt request bit for all currently
// selected harts. This may cancel outstanding halt requests for
// those harts.
//
// Writing 1 sets the halt request bit for all currently selected
// harts. Running harts will halt whenever their halt request bit
// is set.
//
// Writes apply to the new value of hartsel and hasel.
#define RISCV_DM_DMCONTROL_HALTREQ_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_HALTREQ_BITS _u(0x80000000)
#define RISCV_DM_DMCONTROL_HALTREQ_MSB _u(31)
#define RISCV_DM_DMCONTROL_HALTREQ_LSB _u(31)
#define RISCV_DM_DMCONTROL_HALTREQ_ACCESS "WO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_RESUMEREQ
// Description : Writing 1 causes the currently selected harts to resume once,
// if they are halted when the write occurs. It also clears the
// resume ack bit for those harts.
//
// resumereq is ignored if haltreq is set.
//
// Writes apply to the new value of hartsel and hasel.
#define RISCV_DM_DMCONTROL_RESUMEREQ_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_RESUMEREQ_BITS _u(0x40000000)
#define RISCV_DM_DMCONTROL_RESUMEREQ_MSB _u(30)
#define RISCV_DM_DMCONTROL_RESUMEREQ_LSB _u(30)
#define RISCV_DM_DMCONTROL_RESUMEREQ_ACCESS "SC"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_HARTRESET
// Description : This optional field writes the reset bit for all the currently
// selected harts. To perform a reset the debugger writes 1, and
// then writes 0 to deassert the reset signal.
//
// While this bit is 1, the debugger must not change which harts
// are selected.
//
// Writes apply to the new value of hartsel and hasel.
//
// (The exact behaviour of this field is implementation-defined:
// on RP2350 it (triggers a local reset of the selected core(s)
// only.)
#define RISCV_DM_DMCONTROL_HARTRESET_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_HARTRESET_BITS _u(0x20000000)
#define RISCV_DM_DMCONTROL_HARTRESET_MSB _u(29)
#define RISCV_DM_DMCONTROL_HARTRESET_LSB _u(29)
#define RISCV_DM_DMCONTROL_HARTRESET_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_ACKHAVERESET
// Description : 0: No effect.
//
// 1: Clears havereset for any selected harts.
//
// Writes apply to the new value of hartsel and hasel.
#define RISCV_DM_DMCONTROL_ACKHAVERESET_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_ACKHAVERESET_BITS _u(0x10000000)
#define RISCV_DM_DMCONTROL_ACKHAVERESET_MSB _u(28)
#define RISCV_DM_DMCONTROL_ACKHAVERESET_LSB _u(28)
#define RISCV_DM_DMCONTROL_ACKHAVERESET_ACCESS "SC"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_HASEL
// Description : Selects the definition of currently selected harts.
//
// 0: There is a single currently selected hart, that is selected
// by hartsel.
//
// 1: There may be multiple currently selected harts – the hart
// selected by hartsel, plus those selected by the hart array mask
// register.
//
// Hazard3 does support the hart array mask.
#define RISCV_DM_DMCONTROL_HASEL_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_HASEL_BITS _u(0x04000000)
#define RISCV_DM_DMCONTROL_HASEL_MSB _u(26)
#define RISCV_DM_DMCONTROL_HASEL_LSB _u(26)
#define RISCV_DM_DMCONTROL_HASEL_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_HARTSELLO
// Description : The low 10 bits of hartsel: the DM-specific index of the hart
// to select. This hart is always part of the currently selected
// harts.
//
// On RP2350, since there are only two cores (with one hart each),
// only the least-significant bit is writable. The others are tied
// to 0.
#define RISCV_DM_DMCONTROL_HARTSELLO_RESET _u(0x000)
#define RISCV_DM_DMCONTROL_HARTSELLO_BITS _u(0x03ff0000)
#define RISCV_DM_DMCONTROL_HARTSELLO_MSB _u(25)
#define RISCV_DM_DMCONTROL_HARTSELLO_LSB _u(16)
#define RISCV_DM_DMCONTROL_HARTSELLO_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_HARTSELHI
// Description : The high 10 bits of hartsel: the DM-specific index of the hart
// to select. This hart is always part of the currently selected
// harts.
//
// On Hazard3 this field is always tied to all-zeroes.
#define RISCV_DM_DMCONTROL_HARTSELHI_RESET _u(0x000)
#define RISCV_DM_DMCONTROL_HARTSELHI_BITS _u(0x0000ffc0)
#define RISCV_DM_DMCONTROL_HARTSELHI_MSB _u(15)
#define RISCV_DM_DMCONTROL_HARTSELHI_LSB _u(6)
#define RISCV_DM_DMCONTROL_HARTSELHI_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_SETRESETHALTREQ
// Description : This optional field writes the halt-on-reset request bit for
// all currently selected harts, unless clrresethaltreq is
// simultaneously set to 1.
//
// When set to 1, each selected hart will halt upon the next
// deassertion of its reset. The halt-on-reset request bit is not
// automatically cleared. The debugger must write to
// clrresethaltreq to clear it.
//
// Writes apply to the new value of hartsel and hasel.
#define RISCV_DM_DMCONTROL_SETRESETHALTREQ_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_SETRESETHALTREQ_BITS _u(0x00000008)
#define RISCV_DM_DMCONTROL_SETRESETHALTREQ_MSB _u(3)
#define RISCV_DM_DMCONTROL_SETRESETHALTREQ_LSB _u(3)
#define RISCV_DM_DMCONTROL_SETRESETHALTREQ_ACCESS "SC"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_CLRRESETHALTREQ
// Description : This optional field clears the halt-on-reset request bit for
// all currently selected harts.
//
// Writes apply to the new value of hartsel and hasel.
#define RISCV_DM_DMCONTROL_CLRRESETHALTREQ_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_CLRRESETHALTREQ_BITS _u(0x00000004)
#define RISCV_DM_DMCONTROL_CLRRESETHALTREQ_MSB _u(2)
#define RISCV_DM_DMCONTROL_CLRRESETHALTREQ_LSB _u(2)
#define RISCV_DM_DMCONTROL_CLRRESETHALTREQ_ACCESS "SC"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_NDMRESET
// Description : This bit controls the reset signal from the DM to the rest of
// the system. The signal should reset every part of the system,
// including every hart, except for the DM and any logic required
// to access the DM. To perform a system reset the debugger writes
// 1, and then writes 0 to deassert the reset.
//
// On RP2350 this performs a cold reset, the equivalent of a
// watchdog reset with all WDSEL bits set. This includes both
// cores and all peripherals.
#define RISCV_DM_DMCONTROL_NDMRESET_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_NDMRESET_BITS _u(0x00000002)
#define RISCV_DM_DMCONTROL_NDMRESET_MSB _u(1)
#define RISCV_DM_DMCONTROL_NDMRESET_LSB _u(1)
#define RISCV_DM_DMCONTROL_NDMRESET_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMCONTROL_DMACTIVE
// Description : This bit serves as a reset signal for the Debug Module itself.
//
// 0: The module’s state, including authentication mechanism,
// takes its reset values (the dmactive bit is the only bit which
// can be written to something other than its reset value).
//
// 1: The module functions normally.
//
// No other mechanism should exist that may result in resetting
// the Debug Module after power up, with the possible (but not
// recommended) exception of a global reset signal that resets the
// entire platform.
//
// (On RP2350, the Debug Module is reset by a power-on reset, a
// brownout reset, the RUN pin, and a rescue reset.)
//
// A debugger may pulse this bit low to get the Debug Module into
// a known state.
#define RISCV_DM_DMCONTROL_DMACTIVE_RESET _u(0x0)
#define RISCV_DM_DMCONTROL_DMACTIVE_BITS _u(0x00000001)
#define RISCV_DM_DMCONTROL_DMACTIVE_MSB _u(0)
#define RISCV_DM_DMCONTROL_DMACTIVE_LSB _u(0)
#define RISCV_DM_DMCONTROL_DMACTIVE_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_DMSTATUS
// Description : This register reports status for the overall Debug Module as
// well as the currently selected harts, as defined in hasel. Its
// address will not change in the future, because it contains
// version.
//
// This entire register is read-only.
#define RISCV_DM_DMSTATUS_OFFSET _u(0x00000044)
#define RISCV_DM_DMSTATUS_BITS _u(0x004fffff)
#define RISCV_DM_DMSTATUS_RESET _u(0x004000a2)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_IMPEBREAK
// Description : If 1, then there is an implicit ebreak instruction at the non-
// existent word immediately after the Program Buffer. This saves
// the debugger from having to write the ebreak itself, and allows
// the Program Buffer to be one word smaller.
#define RISCV_DM_DMSTATUS_IMPEBREAK_RESET _u(0x1)
#define RISCV_DM_DMSTATUS_IMPEBREAK_BITS _u(0x00400000)
#define RISCV_DM_DMSTATUS_IMPEBREAK_MSB _u(22)
#define RISCV_DM_DMSTATUS_IMPEBREAK_LSB _u(22)
#define RISCV_DM_DMSTATUS_IMPEBREAK_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ALLHAVERESET
// Description : This field is 1 when all currently selected harts have been
// reset and reset has not been acknowledged for any of them.
#define RISCV_DM_DMSTATUS_ALLHAVERESET_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ALLHAVERESET_BITS _u(0x00080000)
#define RISCV_DM_DMSTATUS_ALLHAVERESET_MSB _u(19)
#define RISCV_DM_DMSTATUS_ALLHAVERESET_LSB _u(19)
#define RISCV_DM_DMSTATUS_ALLHAVERESET_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ANYHAVERESET
// Description : This field is 1 when at least one currently selected hart has
// been reset and reset has not been acknowledged for that hart.
#define RISCV_DM_DMSTATUS_ANYHAVERESET_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ANYHAVERESET_BITS _u(0x00040000)
#define RISCV_DM_DMSTATUS_ANYHAVERESET_MSB _u(18)
#define RISCV_DM_DMSTATUS_ANYHAVERESET_LSB _u(18)
#define RISCV_DM_DMSTATUS_ANYHAVERESET_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ALLRESUMEACK
// Description : This field is 1 when all currently selected harts have
// acknowledged their last resume request.
#define RISCV_DM_DMSTATUS_ALLRESUMEACK_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ALLRESUMEACK_BITS _u(0x00020000)
#define RISCV_DM_DMSTATUS_ALLRESUMEACK_MSB _u(17)
#define RISCV_DM_DMSTATUS_ALLRESUMEACK_LSB _u(17)
#define RISCV_DM_DMSTATUS_ALLRESUMEACK_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ANYRESUMEACK
// Description : This field is 1 when any currently selected hart has
// acknowledged its last resume request.
#define RISCV_DM_DMSTATUS_ANYRESUMEACK_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ANYRESUMEACK_BITS _u(0x00010000)
#define RISCV_DM_DMSTATUS_ANYRESUMEACK_MSB _u(16)
#define RISCV_DM_DMSTATUS_ANYRESUMEACK_LSB _u(16)
#define RISCV_DM_DMSTATUS_ANYRESUMEACK_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ALLNONEXISTENT
// Description : This field is 1 when all currently selected harts do not exist
// on this platform.
#define RISCV_DM_DMSTATUS_ALLNONEXISTENT_RESET "-"
#define RISCV_DM_DMSTATUS_ALLNONEXISTENT_BITS _u(0x00008000)
#define RISCV_DM_DMSTATUS_ALLNONEXISTENT_MSB _u(15)
#define RISCV_DM_DMSTATUS_ALLNONEXISTENT_LSB _u(15)
#define RISCV_DM_DMSTATUS_ALLNONEXISTENT_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ANYNONEXISTENT
// Description : This field is 1 when any currently selected hart does not exist
// in this platform.
#define RISCV_DM_DMSTATUS_ANYNONEXISTENT_RESET "-"
#define RISCV_DM_DMSTATUS_ANYNONEXISTENT_BITS _u(0x00004000)
#define RISCV_DM_DMSTATUS_ANYNONEXISTENT_MSB _u(14)
#define RISCV_DM_DMSTATUS_ANYNONEXISTENT_LSB _u(14)
#define RISCV_DM_DMSTATUS_ANYNONEXISTENT_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ALLUNAVAIL
// Description : This field is 1 when all currently selected harts are
// unavailable.
#define RISCV_DM_DMSTATUS_ALLUNAVAIL_RESET "-"
#define RISCV_DM_DMSTATUS_ALLUNAVAIL_BITS _u(0x00002000)
#define RISCV_DM_DMSTATUS_ALLUNAVAIL_MSB _u(13)
#define RISCV_DM_DMSTATUS_ALLUNAVAIL_LSB _u(13)
#define RISCV_DM_DMSTATUS_ALLUNAVAIL_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ANYUNAVAIL
// Description : This field is 1 when any currently selected hart is
// unavailable.
#define RISCV_DM_DMSTATUS_ANYUNAVAIL_RESET "-"
#define RISCV_DM_DMSTATUS_ANYUNAVAIL_BITS _u(0x00001000)
#define RISCV_DM_DMSTATUS_ANYUNAVAIL_MSB _u(12)
#define RISCV_DM_DMSTATUS_ANYUNAVAIL_LSB _u(12)
#define RISCV_DM_DMSTATUS_ANYUNAVAIL_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ALLRUNNING
// Description : This field is 1 when all currently selected harts are running.
#define RISCV_DM_DMSTATUS_ALLRUNNING_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ALLRUNNING_BITS _u(0x00000800)
#define RISCV_DM_DMSTATUS_ALLRUNNING_MSB _u(11)
#define RISCV_DM_DMSTATUS_ALLRUNNING_LSB _u(11)
#define RISCV_DM_DMSTATUS_ALLRUNNING_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ANYRUNNING
// Description : This field is 1 when any currently selected hart is running.
#define RISCV_DM_DMSTATUS_ANYRUNNING_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ANYRUNNING_BITS _u(0x00000400)
#define RISCV_DM_DMSTATUS_ANYRUNNING_MSB _u(10)
#define RISCV_DM_DMSTATUS_ANYRUNNING_LSB _u(10)
#define RISCV_DM_DMSTATUS_ANYRUNNING_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ALLHALTED
// Description : This field is 1 when all currently selected harts are halted.
#define RISCV_DM_DMSTATUS_ALLHALTED_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ALLHALTED_BITS _u(0x00000200)
#define RISCV_DM_DMSTATUS_ALLHALTED_MSB _u(9)
#define RISCV_DM_DMSTATUS_ALLHALTED_LSB _u(9)
#define RISCV_DM_DMSTATUS_ALLHALTED_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_ANYHALTED
// Description : This field is 1 when any currently selected hart is halted.
#define RISCV_DM_DMSTATUS_ANYHALTED_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_ANYHALTED_BITS _u(0x00000100)
#define RISCV_DM_DMSTATUS_ANYHALTED_MSB _u(8)
#define RISCV_DM_DMSTATUS_ANYHALTED_LSB _u(8)
#define RISCV_DM_DMSTATUS_ANYHALTED_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_AUTHENTICATED
// Description : 0: Authentication is required before using the DM.
//
// 1: The authentication check has passed.
//
// On components that don’t implement authentication, this bit
// must be preset as 1. (Note: the version of Hazard3 on RP2350
// does not implement authentication.)
#define RISCV_DM_DMSTATUS_AUTHENTICATED_RESET _u(0x1)
#define RISCV_DM_DMSTATUS_AUTHENTICATED_BITS _u(0x00000080)
#define RISCV_DM_DMSTATUS_AUTHENTICATED_MSB _u(7)
#define RISCV_DM_DMSTATUS_AUTHENTICATED_LSB _u(7)
#define RISCV_DM_DMSTATUS_AUTHENTICATED_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_AUTHBUSY
// Description : 0: The authentication module is ready to process the next
// read/write to authdata.
//
// 1: The authentication module is busy. Accessing authdata
// results in unspecified behavior. authbusy only becomes set in
// immediate response to an access to authdata.
#define RISCV_DM_DMSTATUS_AUTHBUSY_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_AUTHBUSY_BITS _u(0x00000040)
#define RISCV_DM_DMSTATUS_AUTHBUSY_MSB _u(6)
#define RISCV_DM_DMSTATUS_AUTHBUSY_LSB _u(6)
#define RISCV_DM_DMSTATUS_AUTHBUSY_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_HASRESETHALTREQ
// Description : 1 if this Debug Module supports halt-on-reset functionality
// controllable by the setresethaltreq and clrresethaltreq bits. 0
// otherwise.
#define RISCV_DM_DMSTATUS_HASRESETHALTREQ_RESET _u(0x1)
#define RISCV_DM_DMSTATUS_HASRESETHALTREQ_BITS _u(0x00000020)
#define RISCV_DM_DMSTATUS_HASRESETHALTREQ_MSB _u(5)
#define RISCV_DM_DMSTATUS_HASRESETHALTREQ_LSB _u(5)
#define RISCV_DM_DMSTATUS_HASRESETHALTREQ_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_CONFSTPTRVALID
// Description : 0: confstrptr0–confstrptr3 hold information which is not
// relevant to the configuration string.
//
// 1: confstrptr0–confstrptr3 hold the address of the
// configuration string.
#define RISCV_DM_DMSTATUS_CONFSTPTRVALID_RESET _u(0x0)
#define RISCV_DM_DMSTATUS_CONFSTPTRVALID_BITS _u(0x00000010)
#define RISCV_DM_DMSTATUS_CONFSTPTRVALID_MSB _u(4)
#define RISCV_DM_DMSTATUS_CONFSTPTRVALID_LSB _u(4)
#define RISCV_DM_DMSTATUS_CONFSTPTRVALID_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_DMSTATUS_VERSION
// Description : 0: There is no Debug Module present. 1: There is a Debug Module
// and it conforms to version 0.11 of the RISC-V debug
// specification.
//
// 2: There is a Debug Module and it conforms to version 0.13 of
// the RISC-V debug specification.
//
// 15: There is a Debug Module but it does not con- form to any
// available version of the RISC-V debug spec.
#define RISCV_DM_DMSTATUS_VERSION_RESET _u(0x2)
#define RISCV_DM_DMSTATUS_VERSION_BITS _u(0x0000000f)
#define RISCV_DM_DMSTATUS_VERSION_MSB _u(3)
#define RISCV_DM_DMSTATUS_VERSION_LSB _u(0)
#define RISCV_DM_DMSTATUS_VERSION_ACCESS "RO"
// =============================================================================
// Register : RISCV_DM_HARTINFO
// Description : This register gives information about the hart currently
// selected by hartsel.
//
// This entire register is read-only.
#define RISCV_DM_HARTINFO_OFFSET _u(0x00000048)
#define RISCV_DM_HARTINFO_BITS _u(0x00f1ffff)
#define RISCV_DM_HARTINFO_RESET _u(0x00001bff)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_HARTINFO_NSCRATCH
// Description : Number of dscratch registers available for the debugger to use
// during program buffer execution, starting from dscratch0. The
// debugger can make no assumptions about the contents of these
// registers between commands.
#define RISCV_DM_HARTINFO_NSCRATCH_RESET _u(0x0)
#define RISCV_DM_HARTINFO_NSCRATCH_BITS _u(0x00f00000)
#define RISCV_DM_HARTINFO_NSCRATCH_MSB _u(23)
#define RISCV_DM_HARTINFO_NSCRATCH_LSB _u(20)
#define RISCV_DM_HARTINFO_NSCRATCH_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_HARTINFO_DATAACCESS
// Description : 0: The data registers are shadowed in the hart by CSRs. Each
// CSR is DXLEN bits in size, and corresponds to a single
// argument.
//
// 1: The data registers are shadowed in the hart’s memory map.
// Each register takes up 4 bytes in the memory map.
#define RISCV_DM_HARTINFO_DATAACCESS_RESET _u(0x0)
#define RISCV_DM_HARTINFO_DATAACCESS_BITS _u(0x00010000)
#define RISCV_DM_HARTINFO_DATAACCESS_MSB _u(16)
#define RISCV_DM_HARTINFO_DATAACCESS_LSB _u(16)
#define RISCV_DM_HARTINFO_DATAACCESS_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_HARTINFO_DATASIZE
// Description : If dataaccess is 0: Number of CSRs dedicated to shadowing the
// data registers.
//
// If dataaccess is 1: Number of 32-bit words in the memory map
// dedicated to shadowing the data registers.
#define RISCV_DM_HARTINFO_DATASIZE_RESET _u(0x1)
#define RISCV_DM_HARTINFO_DATASIZE_BITS _u(0x0000f000)
#define RISCV_DM_HARTINFO_DATASIZE_MSB _u(15)
#define RISCV_DM_HARTINFO_DATASIZE_LSB _u(12)
#define RISCV_DM_HARTINFO_DATASIZE_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_HARTINFO_DATAADDR
// Description : If dataaccess is 0: The number of the first CSR dedicated to
// shadowing the data registers.
//
// If dataaccess is 1: Signed address of RAM where the data
// registers are shadowed, to be used to access relative to zero
//
// On Hazard3 this indicates the single data register mapped as
// dmdata0. There is actually only a single shared register,
// internal to the Debug Module, and mirrored in each core's CSR
// space.
#define RISCV_DM_HARTINFO_DATAADDR_RESET _u(0xbff)
#define RISCV_DM_HARTINFO_DATAADDR_BITS _u(0x00000fff)
#define RISCV_DM_HARTINFO_DATAADDR_MSB _u(11)
#define RISCV_DM_HARTINFO_DATAADDR_LSB _u(0)
#define RISCV_DM_HARTINFO_DATAADDR_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_HALTSUM1
// Description : Each bit in this read-only register indicates whether any of a
// group of harts is halted or not. Unavailable/nonexistent harts
// are not considered to be halted.
//
// Each bit in haltsum1 is an OR reduction of 32 bits' worth of
// haltsum0. On RP2350, only the LSB is implemented.
#define RISCV_DM_HALTSUM1_OFFSET _u(0x0000004c)
#define RISCV_DM_HALTSUM1_BITS _u(0x00000001)
#define RISCV_DM_HALTSUM1_RESET _u(0x00000000)
#define RISCV_DM_HALTSUM1_MSB _u(0)
#define RISCV_DM_HALTSUM1_LSB _u(0)
#define RISCV_DM_HALTSUM1_ACCESS "RO"
// =============================================================================
// Register : RISCV_DM_HAWINDOWSEL
// Description : This register selects which of the 32-bit portion of the hart
// array mask register is accessible in hawindow.
#define RISCV_DM_HAWINDOWSEL_OFFSET _u(0x00000050)
#define RISCV_DM_HAWINDOWSEL_BITS _u(0x00007fff)
#define RISCV_DM_HAWINDOWSEL_RESET _u(0x00000000)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_HAWINDOWSEL_HAWINDOWSEL
// Description : On Hazard3 this register is entirely hardwired to 0.
#define RISCV_DM_HAWINDOWSEL_HAWINDOWSEL_RESET _u(0x0000)
#define RISCV_DM_HAWINDOWSEL_HAWINDOWSEL_BITS _u(0x00007fff)
#define RISCV_DM_HAWINDOWSEL_HAWINDOWSEL_MSB _u(14)
#define RISCV_DM_HAWINDOWSEL_HAWINDOWSEL_LSB _u(0)
#define RISCV_DM_HAWINDOWSEL_HAWINDOWSEL_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_HAWINDOW
// Description : This register provides R/W access to a 32-bit portion of the
// hart array mask register. The position of the window is
// determined by hawindowsel. I.e. bit 0 refers to hart
// hawindowsel ∗ 32, while bit 31 refers to hart hawindowsel ∗ 32
// + 31.
//
// On RP2350 only the two least-significant bits of this register
// are implemented, since there are only two cores. This is still
// useful to run/halt/reset both cores exactly simultaneously.
#define RISCV_DM_HAWINDOW_OFFSET _u(0x00000054)
#define RISCV_DM_HAWINDOW_BITS _u(0x00000003)
#define RISCV_DM_HAWINDOW_RESET _u(0x00000000)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_HAWINDOW_MASKDATA
#define RISCV_DM_HAWINDOW_MASKDATA_RESET _u(0x0)
#define RISCV_DM_HAWINDOW_MASKDATA_BITS _u(0x00000003)
#define RISCV_DM_HAWINDOW_MASKDATA_MSB _u(1)
#define RISCV_DM_HAWINDOW_MASKDATA_LSB _u(0)
#define RISCV_DM_HAWINDOW_MASKDATA_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_ABSTRACTS
// Description : Abstract Control and Status. Writing this register while an
// abstract command is executing causes cmderr to be set to 1
// (busy) if it is 0.
#define RISCV_DM_ABSTRACTS_OFFSET _u(0x00000058)
#define RISCV_DM_ABSTRACTS_BITS _u(0x1f00170f)
#define RISCV_DM_ABSTRACTS_RESET _u(0x02000001)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_ABSTRACTS_PROGBUFSIZE
// Description : Size of the Program Buffer, in 32-bit words.
#define RISCV_DM_ABSTRACTS_PROGBUFSIZE_RESET _u(0x02)
#define RISCV_DM_ABSTRACTS_PROGBUFSIZE_BITS _u(0x1f000000)
#define RISCV_DM_ABSTRACTS_PROGBUFSIZE_MSB _u(28)
#define RISCV_DM_ABSTRACTS_PROGBUFSIZE_LSB _u(24)
#define RISCV_DM_ABSTRACTS_PROGBUFSIZE_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_ABSTRACTS_BUSY
// Description : 1: An abstract command is currently being executed.
//
// This bit is set as soon as command is written, and is not
// cleared until that command has completed.
#define RISCV_DM_ABSTRACTS_BUSY_RESET _u(0x0)
#define RISCV_DM_ABSTRACTS_BUSY_BITS _u(0x00001000)
#define RISCV_DM_ABSTRACTS_BUSY_MSB _u(12)
#define RISCV_DM_ABSTRACTS_BUSY_LSB _u(12)
#define RISCV_DM_ABSTRACTS_BUSY_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_ABSTRACTS_CMDERR
// Description : Gets set if an abstract command fails. The bits in this field
// remain set until they are cleared by writing 1 to them. No
// abstract command is started until the value is reset to 0.
//
// This field only contains a valid value if busy is 0.
//
// 0 (none): No error.
//
// 1 (busy): An abstract command was executing while command,
// abstractcs, or abstractauto was written, or when one of the
// data or progbuf registers was read or written. This status is
// only written if cmderr contains 0.
//
// 2 (not supported): The requested command is not supported,
// regardless of whether the hart is running or not.
//
// 3 (exception): An exception occurred while executing the
// command (e.g. while executing the Program Buffer).
//
// 4 (halt/resume): The abstract command couldn’t execute because
// the hart wasn’t in the required state (running/halted), or
// unavailable.
//
// 5 (bus): The abstract command failed due to a bus error (e.g.
// alignment, access size, or timeout).
//
// 7 (other): The command failed for another reason.
//
// Note: Hazard3 does not set values 5 or 7. Load/store
// instructions in the program buffer raise an exception when they
// encounter a bus fault, setting cmderr=3.
#define RISCV_DM_ABSTRACTS_CMDERR_RESET _u(0x0)
#define RISCV_DM_ABSTRACTS_CMDERR_BITS _u(0x00000700)
#define RISCV_DM_ABSTRACTS_CMDERR_MSB _u(10)
#define RISCV_DM_ABSTRACTS_CMDERR_LSB _u(8)
#define RISCV_DM_ABSTRACTS_CMDERR_ACCESS "WC"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_ABSTRACTS_DATACOUNT
// Description : Number of data registers that are implemented as part of the
// abstract command interface.
#define RISCV_DM_ABSTRACTS_DATACOUNT_RESET _u(0x1)
#define RISCV_DM_ABSTRACTS_DATACOUNT_BITS _u(0x0000000f)
#define RISCV_DM_ABSTRACTS_DATACOUNT_MSB _u(3)
#define RISCV_DM_ABSTRACTS_DATACOUNT_LSB _u(0)
#define RISCV_DM_ABSTRACTS_DATACOUNT_ACCESS "RO"
// =============================================================================
// Register : RISCV_DM_COMMAND
// Description : Writes to this register cause the corresponding abstract
// command to be executed.
//
// Writing this register while an abstract command is executing
// causes cmderr to be set to 1 (busy) if it is 0.
//
// If cmderr is non-zero, writes to this register are ignored.
#define RISCV_DM_COMMAND_OFFSET _u(0x0000005c)
#define RISCV_DM_COMMAND_BITS _u(0xff7fffff)
#define RISCV_DM_COMMAND_RESET _u(0x00000000)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_COMMAND_CMDTYPE
// Description : On Hazard3 this field must be 0 (Access Register)
#define RISCV_DM_COMMAND_CMDTYPE_RESET _u(0x00)
#define RISCV_DM_COMMAND_CMDTYPE_BITS _u(0xff000000)
#define RISCV_DM_COMMAND_CMDTYPE_MSB _u(31)
#define RISCV_DM_COMMAND_CMDTYPE_LSB _u(24)
#define RISCV_DM_COMMAND_CMDTYPE_ACCESS "WO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_COMMAND_AARSIZE
// Description : On Hazard3 this field must be 2 (32-bit register access)
#define RISCV_DM_COMMAND_AARSIZE_RESET _u(0x0)
#define RISCV_DM_COMMAND_AARSIZE_BITS _u(0x00700000)
#define RISCV_DM_COMMAND_AARSIZE_MSB _u(22)
#define RISCV_DM_COMMAND_AARSIZE_LSB _u(20)
#define RISCV_DM_COMMAND_AARSIZE_ACCESS "WO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_COMMAND_AARPOSTINCREMENT
// Description : On Hazard3 this field must be 0 (no post-increment of regno)
#define RISCV_DM_COMMAND_AARPOSTINCREMENT_RESET _u(0x0)
#define RISCV_DM_COMMAND_AARPOSTINCREMENT_BITS _u(0x00080000)
#define RISCV_DM_COMMAND_AARPOSTINCREMENT_MSB _u(19)
#define RISCV_DM_COMMAND_AARPOSTINCREMENT_LSB _u(19)
#define RISCV_DM_COMMAND_AARPOSTINCREMENT_ACCESS "WO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_COMMAND_POSTEXEC
// Description : 0: No effect.
//
// 1: Execute the program in the Program Buffer exactly once after
// performing the transfer, if any.
#define RISCV_DM_COMMAND_POSTEXEC_RESET _u(0x0)
#define RISCV_DM_COMMAND_POSTEXEC_BITS _u(0x00040000)
#define RISCV_DM_COMMAND_POSTEXEC_MSB _u(18)
#define RISCV_DM_COMMAND_POSTEXEC_LSB _u(18)
#define RISCV_DM_COMMAND_POSTEXEC_ACCESS "WO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_COMMAND_TRANSFER
// Description : 0: Don’t do the operation specified by write.
//
// 1: Do the operation specified by write.
//
// This bit can be used to just execute the Program Buffer without
// having to worry about placing valid values into aarsize or
// regno.
#define RISCV_DM_COMMAND_TRANSFER_RESET _u(0x0)
#define RISCV_DM_COMMAND_TRANSFER_BITS _u(0x00020000)
#define RISCV_DM_COMMAND_TRANSFER_MSB _u(17)
#define RISCV_DM_COMMAND_TRANSFER_LSB _u(17)
#define RISCV_DM_COMMAND_TRANSFER_ACCESS "WO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_COMMAND_WRITE
// Description : When transfer is set:
//
// 0: Copy data from the specified register into data0.
//
// 1: Copy data from data0 into the specified register.
#define RISCV_DM_COMMAND_WRITE_RESET _u(0x0)
#define RISCV_DM_COMMAND_WRITE_BITS _u(0x00010000)
#define RISCV_DM_COMMAND_WRITE_MSB _u(16)
#define RISCV_DM_COMMAND_WRITE_LSB _u(16)
#define RISCV_DM_COMMAND_WRITE_ACCESS "WO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_COMMAND_REGNO
// Description : Number of the register to access.
//
// On Hazard3 this must be in the range 0x1000 through 0x101f
// inclusive, referring to GPRs x0 through x31.
#define RISCV_DM_COMMAND_REGNO_RESET _u(0x0000)
#define RISCV_DM_COMMAND_REGNO_BITS _u(0x0000ffff)
#define RISCV_DM_COMMAND_REGNO_MSB _u(15)
#define RISCV_DM_COMMAND_REGNO_LSB _u(0)
#define RISCV_DM_COMMAND_REGNO_ACCESS "WO"
// =============================================================================
// Register : RISCV_DM_ABSTRACTAUTO
// Description : Abstract Command Autoexec. Writing this register while an
// abstract command is executing causes cmderr to be set to 1
// (busy) if it is 0.
#define RISCV_DM_ABSTRACTAUTO_OFFSET _u(0x00000060)
#define RISCV_DM_ABSTRACTAUTO_BITS _u(0xffff8fff)
#define RISCV_DM_ABSTRACTAUTO_RESET _u(0x00000000)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_ABSTRACTAUTO_AUTOEXECPROGBUF
// Description : When a bit in this field is 1, read or write accesses to the
// corresponding progbuf word cause the command in command to be
// executed again.
//
// Hazard3 implements only the two least-significant bits of this
// field (for the two-entry progbuf)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXECPROGBUF_RESET _u(0x00000)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXECPROGBUF_BITS _u(0xffff8000)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXECPROGBUF_MSB _u(31)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXECPROGBUF_LSB _u(15)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXECPROGBUF_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_ABSTRACTAUTO_AUTOEXEDDATA
// Description : When a bit in this field is 1, read or write accesses to the
// corresponding data word cause the command in command to be
// executed again.
//
// Hazard3 implements only the least-significant bit of this
// field.
#define RISCV_DM_ABSTRACTAUTO_AUTOEXEDDATA_RESET _u(0x000)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXEDDATA_BITS _u(0x00000fff)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXEDDATA_MSB _u(11)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXEDDATA_LSB _u(0)
#define RISCV_DM_ABSTRACTAUTO_AUTOEXEDDATA_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_NEXTDM
// Description : If there is more than one DM accessible on this DMI, this
// register contains the base address of thenext one in the chain,
// or 0 if this is the last one in the chain.
#define RISCV_DM_NEXTDM_OFFSET _u(0x00000074)
#define RISCV_DM_NEXTDM_BITS _u(0xffffffff)
#define RISCV_DM_NEXTDM_RESET _u(0x00000000)
#define RISCV_DM_NEXTDM_MSB _u(31)
#define RISCV_DM_NEXTDM_LSB _u(0)
#define RISCV_DM_NEXTDM_ACCESS "RO"
// =============================================================================
// Register : RISCV_DM_PROGBUF0
// Description : progbuf0 through progbuf15 provide read/write access to the
// program buffer. abstractcs.progbufsize indicates how many of
// them are implemented starting at progbuf0, counting up.
//
// (Hazard3 implements a 2-word program buffer.)
#define RISCV_DM_PROGBUF0_OFFSET _u(0x00000080)
#define RISCV_DM_PROGBUF0_BITS _u(0xffffffff)
#define RISCV_DM_PROGBUF0_RESET _u(0x00000000)
#define RISCV_DM_PROGBUF0_MSB _u(31)
#define RISCV_DM_PROGBUF0_LSB _u(0)
#define RISCV_DM_PROGBUF0_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_PROGBUF1
// Description : progbuf0 through progbuf15 provide read/write access to the
// program buffer. abstractcs.progbufsize indicates how many of
// them are implemented starting at progbuf0, counting up.
//
// (Hazard3 implements a 2-word program buffer.)
#define RISCV_DM_PROGBUF1_OFFSET _u(0x00000084)
#define RISCV_DM_PROGBUF1_BITS _u(0xffffffff)
#define RISCV_DM_PROGBUF1_RESET _u(0x00000000)
#define RISCV_DM_PROGBUF1_MSB _u(31)
#define RISCV_DM_PROGBUF1_LSB _u(0)
#define RISCV_DM_PROGBUF1_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_SBCS
// Description : System Bus Access Control and Status
#define RISCV_DM_SBCS_OFFSET _u(0x000000e0)
#define RISCV_DM_SBCS_BITS _u(0xe07fffff)
#define RISCV_DM_SBCS_RESET _u(0x20000407)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBVERSION
// Description : 1: The System Bus interface conforms to version 0.13.2 of the
// RISC-V debug spec.
#define RISCV_DM_SBCS_SBVERSION_RESET _u(0x1)
#define RISCV_DM_SBCS_SBVERSION_BITS _u(0xe0000000)
#define RISCV_DM_SBCS_SBVERSION_MSB _u(31)
#define RISCV_DM_SBCS_SBVERSION_LSB _u(29)
#define RISCV_DM_SBCS_SBVERSION_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBBUSYERROR
// Description : Set when the debugger attempts to read data while a read is in
// progress, or when the debugger initiates a new access while one
// is already in progress (while sbbusy is set). It remains set
// until it’s explicitly cleared by the debugger.
//
// While this field is set, no more system bus accesses can be
// initiated by the Debug Module.
#define RISCV_DM_SBCS_SBBUSYERROR_RESET _u(0x0)
#define RISCV_DM_SBCS_SBBUSYERROR_BITS _u(0x00400000)
#define RISCV_DM_SBCS_SBBUSYERROR_MSB _u(22)
#define RISCV_DM_SBCS_SBBUSYERROR_LSB _u(22)
#define RISCV_DM_SBCS_SBBUSYERROR_ACCESS "WC"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBBUSY
// Description : When 1, indicates the system bus master is busy. (Whether the
// system bus itself is busy is related, but not the same thing.)
// This bit goes high immediately when a read or write is
// requested for any reason, and does not go low until the access
// is fully completed.
//
// Writes to sbcs while sbbusy is high result in undefined
// behavior. A debugger must not write to sbcs until it reads
// sbbusy as 0.
#define RISCV_DM_SBCS_SBBUSY_RESET _u(0x0)
#define RISCV_DM_SBCS_SBBUSY_BITS _u(0x00200000)
#define RISCV_DM_SBCS_SBBUSY_MSB _u(21)
#define RISCV_DM_SBCS_SBBUSY_LSB _u(21)
#define RISCV_DM_SBCS_SBBUSY_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBREADONADDR
// Description : When 1, every write to sbaddress0 automatically triggers a
// system bus read at the new address.
#define RISCV_DM_SBCS_SBREADONADDR_RESET _u(0x0)
#define RISCV_DM_SBCS_SBREADONADDR_BITS _u(0x00100000)
#define RISCV_DM_SBCS_SBREADONADDR_MSB _u(20)
#define RISCV_DM_SBCS_SBREADONADDR_LSB _u(20)
#define RISCV_DM_SBCS_SBREADONADDR_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBACCESS
// Description : Select the access size to use for system bus accesses.
//
// 0: 8-bit
//
// 1: 16-bit
//
// 2: 32-bit
//
// 3: 64-bit
//
// 4: 128-bit
//
// If sbaccess has an unsupported value when the DM starts a bus
// access, the access is not per formed and sberror is set to 4.
// (On Hazard3 the supported values are 8-bit, 16-bit and 32-bit.)
#define RISCV_DM_SBCS_SBACCESS_RESET _u(0x0)
#define RISCV_DM_SBCS_SBACCESS_BITS _u(0x000e0000)
#define RISCV_DM_SBCS_SBACCESS_MSB _u(19)
#define RISCV_DM_SBCS_SBACCESS_LSB _u(17)
#define RISCV_DM_SBCS_SBACCESS_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBAUTOINCREMENT
// Description : When 1, sbaddress is incremented by the access size (in bytes)
// selected in sbaccess after every system bus access.
#define RISCV_DM_SBCS_SBAUTOINCREMENT_RESET _u(0x0)
#define RISCV_DM_SBCS_SBAUTOINCREMENT_BITS _u(0x00010000)
#define RISCV_DM_SBCS_SBAUTOINCREMENT_MSB _u(16)
#define RISCV_DM_SBCS_SBAUTOINCREMENT_LSB _u(16)
#define RISCV_DM_SBCS_SBAUTOINCREMENT_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBREADONDATA
// Description : When 1, every read from sbdata0 automatically triggers a system
// bus read at the (possibly auto- incremented) address.
#define RISCV_DM_SBCS_SBREADONDATA_RESET _u(0x0)
#define RISCV_DM_SBCS_SBREADONDATA_BITS _u(0x00008000)
#define RISCV_DM_SBCS_SBREADONDATA_MSB _u(15)
#define RISCV_DM_SBCS_SBREADONDATA_LSB _u(15)
#define RISCV_DM_SBCS_SBREADONDATA_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBERROR
// Description : When the Debug Module’s system bus master encounters an error,
// this field gets set. The bits in this field remain set until
// they are cleared by writing 1 to them. While this field is non-
// zero, no more system bus accesses can be initiated by the Debug
// Module.
//
// An implementation may report “Other” (7) for any error
// condition. (Hazard3 does not use this value for any errors.)
//
// 0: There was no bus error.
//
// 1: There was a timeout.
//
// 2: A bad address was accessed.
//
// 3: There was an alignment error.
//
// 4: An access of unsupported size was requested.
//
// 7: Other.
//
// Hazard3 raises an alignment error for any non-naturally-aligned
// bus transfer which would otherwise be a valid transfer.
#define RISCV_DM_SBCS_SBERROR_RESET _u(0x0)
#define RISCV_DM_SBCS_SBERROR_BITS _u(0x00007000)
#define RISCV_DM_SBCS_SBERROR_MSB _u(14)
#define RISCV_DM_SBCS_SBERROR_LSB _u(12)
#define RISCV_DM_SBCS_SBERROR_ACCESS "WC"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBASIZE
// Description : Width of system bus addresses in bits. (0 indicates there is no
// bus access support.)
#define RISCV_DM_SBCS_SBASIZE_RESET _u(0x20)
#define RISCV_DM_SBCS_SBASIZE_BITS _u(0x00000fe0)
#define RISCV_DM_SBCS_SBASIZE_MSB _u(11)
#define RISCV_DM_SBCS_SBASIZE_LSB _u(5)
#define RISCV_DM_SBCS_SBASIZE_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBACCESS128
// Description : 1 when 128-bit system bus accesses are supported.
#define RISCV_DM_SBCS_SBACCESS128_RESET _u(0x0)
#define RISCV_DM_SBCS_SBACCESS128_BITS _u(0x00000010)
#define RISCV_DM_SBCS_SBACCESS128_MSB _u(4)
#define RISCV_DM_SBCS_SBACCESS128_LSB _u(4)
#define RISCV_DM_SBCS_SBACCESS128_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBACCESS64
// Description : 1 when 64-bit system bus accesses are supported.
#define RISCV_DM_SBCS_SBACCESS64_RESET _u(0x0)
#define RISCV_DM_SBCS_SBACCESS64_BITS _u(0x00000008)
#define RISCV_DM_SBCS_SBACCESS64_MSB _u(3)
#define RISCV_DM_SBCS_SBACCESS64_LSB _u(3)
#define RISCV_DM_SBCS_SBACCESS64_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBACCESS32
// Description : 1 when 32-bit system bus accesses are supported.
#define RISCV_DM_SBCS_SBACCESS32_RESET _u(0x1)
#define RISCV_DM_SBCS_SBACCESS32_BITS _u(0x00000004)
#define RISCV_DM_SBCS_SBACCESS32_MSB _u(2)
#define RISCV_DM_SBCS_SBACCESS32_LSB _u(2)
#define RISCV_DM_SBCS_SBACCESS32_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBACCESS16
// Description : 1 when 16-bit system bus accesses are supported.
#define RISCV_DM_SBCS_SBACCESS16_RESET _u(0x1)
#define RISCV_DM_SBCS_SBACCESS16_BITS _u(0x00000002)
#define RISCV_DM_SBCS_SBACCESS16_MSB _u(1)
#define RISCV_DM_SBCS_SBACCESS16_LSB _u(1)
#define RISCV_DM_SBCS_SBACCESS16_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBCS_SBACCESS8
// Description : 1 when 8-bit system bus accesses are supported.
#define RISCV_DM_SBCS_SBACCESS8_RESET _u(0x1)
#define RISCV_DM_SBCS_SBACCESS8_BITS _u(0x00000001)
#define RISCV_DM_SBCS_SBACCESS8_MSB _u(0)
#define RISCV_DM_SBCS_SBACCESS8_LSB _u(0)
#define RISCV_DM_SBCS_SBACCESS8_ACCESS "RO"
// =============================================================================
// Register : RISCV_DM_SBADDRESS0
// Description : System Bus Address 31:0
//
// When the system bus master is busy, writes to this register
// will set sbbusyerror and don’t do anything else.
//
// If sberror is 0, sbbusyerror is 0, and sbreadonaddr is set then
// writes to this register start the following:
//
// 1. Set sbbusy.
//
// 2. Perform a bus read from the new value of sbaddress.
//
// 3. If the read succeeded and sbautoincrement is set, increment
// sbaddress.
//
// 4. Clear sbbusy.
#define RISCV_DM_SBADDRESS0_OFFSET _u(0x000000e4)
#define RISCV_DM_SBADDRESS0_BITS _u(0xffffffff)
#define RISCV_DM_SBADDRESS0_RESET _u(0x00000000)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBADDRESS0_ADDRESS
// Description : Accesses bits 31:0 of the physical address in sbaddress.
#define RISCV_DM_SBADDRESS0_ADDRESS_RESET _u(0x00000000)
#define RISCV_DM_SBADDRESS0_ADDRESS_BITS _u(0xffffffff)
#define RISCV_DM_SBADDRESS0_ADDRESS_MSB _u(31)
#define RISCV_DM_SBADDRESS0_ADDRESS_LSB _u(0)
#define RISCV_DM_SBADDRESS0_ADDRESS_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_SBDATA0
// Description : System Bus Data 31:0
//
// Any successful system bus read updates sbdata. If the width of
// the read access is less than the width of sbdata, the contents
// of the remaining high bits may take on any value.
//
// If sberror or sbbusyerror both aren’t 0 then accesses do
// nothing.
//
// If the bus master is busy then accesses set sbbusyerror, and
// don’t do anything else. Writes to this register start the
// following:
//
// 1. Set sbbusy.
//
// 2. Perform a bus write of the new value of sbdata to sbaddress.
//
// 3. If the write succeeded and sbautoincrement is set, increment
// sbaddress.
//
// 4. Clear sbbusy.
//
// Reads from this register start the following:
//
// 1. “Return” the data.
//
// 2. Set sbbusy.
//
// 3. If sbreadondata is set, perform a system bus read from the
// address contained in sbaddress, placing the result in sbdata.
//
// 4. If the read was successful, and sbautoincrement is set,
// increment sbaddress.
//
// 5. Clear sbbusy.
#define RISCV_DM_SBDATA0_OFFSET _u(0x000000f0)
#define RISCV_DM_SBDATA0_BITS _u(0xffffffff)
#define RISCV_DM_SBDATA0_RESET _u(0x00000000)
// -----------------------------------------------------------------------------
// Field : RISCV_DM_SBDATA0_DATA
#define RISCV_DM_SBDATA0_DATA_RESET _u(0x00000000)
#define RISCV_DM_SBDATA0_DATA_BITS _u(0xffffffff)
#define RISCV_DM_SBDATA0_DATA_MSB _u(31)
#define RISCV_DM_SBDATA0_DATA_LSB _u(0)
#define RISCV_DM_SBDATA0_DATA_ACCESS "RW"
// =============================================================================
// Register : RISCV_DM_HALTSUM0
// Description : Each bit in this read-only register indicates whether one
// specific hart is halted or not. Unavailable/nonexistent harts
// are not considered to be halted.
//
// On RP2350, only the two LSBs of this register are implemented,
// one for each core/hart.
//
// This entire register is read-only.
#define RISCV_DM_HALTSUM0_OFFSET _u(0x00000100)
#define RISCV_DM_HALTSUM0_BITS _u(0xffffffff)
#define RISCV_DM_HALTSUM0_RESET _u(0x00000000)
#define RISCV_DM_HALTSUM0_MSB _u(31)
#define RISCV_DM_HALTSUM0_LSB _u(0)
#define RISCV_DM_HALTSUM0_ACCESS "RO"
// =============================================================================
#endif // _HARDWARE_REGS_RISCV_DM_H