target: add Espressif ESP32-S2 basic support
[fw/openocd] / src / target / xtensa / xtensa_regs.h
diff --git a/src/target/xtensa/xtensa_regs.h b/src/target/xtensa/xtensa_regs.h
new file mode 100644 (file)
index 0000000..7602131
--- /dev/null
@@ -0,0 +1,278 @@
+/***************************************************************************
+ *   Generic Xtensa target API for OpenOCD                                 *
+ *   Copyright (C) 2016-2019 Espressif Systems Ltd.                        *
+ *   Author: Angus Gratton gus@projectgus.com                              *
+ *   Author: Jeroen Domburg <jeroen@espressif.com>                         *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
+ ***************************************************************************/
+#ifndef OPENOCD_TARGET_XTENSA_REGS_H
+#define OPENOCD_TARGET_XTENSA_REGS_H
+
+struct reg_arch_type;
+
+enum xtensa_reg_id {
+       XT_REG_IDX_PC = 0,
+       XT_REG_IDX_AR0,
+       XT_REG_IDX_AR1,
+       XT_REG_IDX_AR2,
+       XT_REG_IDX_AR3,
+       XT_REG_IDX_AR4,
+       XT_REG_IDX_AR5,
+       XT_REG_IDX_AR6,
+       XT_REG_IDX_AR7,
+       XT_REG_IDX_AR8,
+       XT_REG_IDX_AR9,
+       XT_REG_IDX_AR10,
+       XT_REG_IDX_AR11,
+       XT_REG_IDX_AR12,
+       XT_REG_IDX_AR13,
+       XT_REG_IDX_AR14,
+       XT_REG_IDX_AR15,
+       XT_REG_IDX_AR16,
+       XT_REG_IDX_AR17,
+       XT_REG_IDX_AR18,
+       XT_REG_IDX_AR19,
+       XT_REG_IDX_AR20,
+       XT_REG_IDX_AR21,
+       XT_REG_IDX_AR22,
+       XT_REG_IDX_AR23,
+       XT_REG_IDX_AR24,
+       XT_REG_IDX_AR25,
+       XT_REG_IDX_AR26,
+       XT_REG_IDX_AR27,
+       XT_REG_IDX_AR28,
+       XT_REG_IDX_AR29,
+       XT_REG_IDX_AR30,
+       XT_REG_IDX_AR31,
+       XT_REG_IDX_AR32,
+       XT_REG_IDX_AR33,
+       XT_REG_IDX_AR34,
+       XT_REG_IDX_AR35,
+       XT_REG_IDX_AR36,
+       XT_REG_IDX_AR37,
+       XT_REG_IDX_AR38,
+       XT_REG_IDX_AR39,
+       XT_REG_IDX_AR40,
+       XT_REG_IDX_AR41,
+       XT_REG_IDX_AR42,
+       XT_REG_IDX_AR43,
+       XT_REG_IDX_AR44,
+       XT_REG_IDX_AR45,
+       XT_REG_IDX_AR46,
+       XT_REG_IDX_AR47,
+       XT_REG_IDX_AR48,
+       XT_REG_IDX_AR49,
+       XT_REG_IDX_AR50,
+       XT_REG_IDX_AR51,
+       XT_REG_IDX_AR52,
+       XT_REG_IDX_AR53,
+       XT_REG_IDX_AR54,
+       XT_REG_IDX_AR55,
+       XT_REG_IDX_AR56,
+       XT_REG_IDX_AR57,
+       XT_REG_IDX_AR58,
+       XT_REG_IDX_AR59,
+       XT_REG_IDX_AR60,
+       XT_REG_IDX_AR61,
+       XT_REG_IDX_AR62,
+       XT_REG_IDX_AR63,
+       XT_REG_IDX_LBEG,
+       XT_REG_IDX_LEND,
+       XT_REG_IDX_LCOUNT,
+       XT_REG_IDX_SAR,
+       XT_REG_IDX_WINDOWBASE,
+       XT_REG_IDX_WINDOWSTART,
+       XT_REG_IDX_CONFIGID0,
+       XT_REG_IDX_CONFIGID1,
+       XT_REG_IDX_PS,
+       XT_REG_IDX_THREADPTR,
+       XT_REG_IDX_BR,
+       XT_REG_IDX_SCOMPARE1,
+       XT_REG_IDX_ACCLO,
+       XT_REG_IDX_ACCHI,
+       XT_REG_IDX_M0,
+       XT_REG_IDX_M1,
+       XT_REG_IDX_M2,
+       XT_REG_IDX_M3,
+       XT_REG_IDX_F0,
+       XT_REG_IDX_F1,
+       XT_REG_IDX_F2,
+       XT_REG_IDX_F3,
+       XT_REG_IDX_F4,
+       XT_REG_IDX_F5,
+       XT_REG_IDX_F6,
+       XT_REG_IDX_F7,
+       XT_REG_IDX_F8,
+       XT_REG_IDX_F9,
+       XT_REG_IDX_F10,
+       XT_REG_IDX_F11,
+       XT_REG_IDX_F12,
+       XT_REG_IDX_F13,
+       XT_REG_IDX_F14,
+       XT_REG_IDX_F15,
+       XT_REG_IDX_FCR,
+       XT_REG_IDX_FSR,
+       XT_REG_IDX_MMID,
+       XT_REG_IDX_IBREAKENABLE,
+       XT_REG_IDX_MEMCTL,
+       XT_REG_IDX_ATOMCTL,
+       XT_REG_IDX_IBREAKA0,
+       XT_REG_IDX_IBREAKA1,
+       XT_REG_IDX_DBREAKA0,
+       XT_REG_IDX_DBREAKA1,
+       XT_REG_IDX_DBREAKC0,
+       XT_REG_IDX_DBREAKC1,
+       XT_REG_IDX_EPC1,
+       XT_REG_IDX_EPC2,
+       XT_REG_IDX_EPC3,
+       XT_REG_IDX_EPC4,
+       XT_REG_IDX_EPC5,
+       XT_REG_IDX_EPC6,
+       XT_REG_IDX_EPC7,
+       XT_REG_IDX_DEPC,
+       XT_REG_IDX_EPS2,
+       XT_REG_IDX_EPS3,
+       XT_REG_IDX_EPS4,
+       XT_REG_IDX_EPS5,
+       XT_REG_IDX_EPS6,
+       XT_REG_IDX_EPS7,
+       XT_REG_IDX_EXCSAVE1,
+       XT_REG_IDX_EXCSAVE2,
+       XT_REG_IDX_EXCSAVE3,
+       XT_REG_IDX_EXCSAVE4,
+       XT_REG_IDX_EXCSAVE5,
+       XT_REG_IDX_EXCSAVE6,
+       XT_REG_IDX_EXCSAVE7,
+       XT_REG_IDX_CPENABLE,
+       XT_REG_IDX_INTERRUPT,
+       XT_REG_IDX_INTSET,
+       XT_REG_IDX_INTCLEAR,
+       XT_REG_IDX_INTENABLE,
+       XT_REG_IDX_VECBASE,
+       XT_REG_IDX_EXCCAUSE,
+       XT_REG_IDX_DEBUGCAUSE,
+       XT_REG_IDX_CCOUNT,
+       XT_REG_IDX_PRID,
+       XT_REG_IDX_ICOUNT,
+       XT_REG_IDX_ICOUNTLEVEL,
+       XT_REG_IDX_EXCVADDR,
+       XT_REG_IDX_CCOMPARE0,
+       XT_REG_IDX_CCOMPARE1,
+       XT_REG_IDX_CCOMPARE2,
+       XT_REG_IDX_MISC0,
+       XT_REG_IDX_MISC1,
+       XT_REG_IDX_MISC2,
+       XT_REG_IDX_MISC3,
+       XT_REG_IDX_LITBASE,
+       XT_REG_IDX_PTEVADDR,
+       XT_REG_IDX_RASID,
+       XT_REG_IDX_ITLBCFG,
+       XT_REG_IDX_DTLBCFG,
+       XT_REG_IDX_MEPC,
+       XT_REG_IDX_MEPS,
+       XT_REG_IDX_MESAVE,
+       XT_REG_IDX_MESR,
+       XT_REG_IDX_MECR,
+       XT_REG_IDX_MEVADDR,
+       XT_REG_IDX_A0,
+       XT_REG_IDX_A1,
+       XT_REG_IDX_A2,
+       XT_REG_IDX_A3,
+       XT_REG_IDX_A4,
+       XT_REG_IDX_A5,
+       XT_REG_IDX_A6,
+       XT_REG_IDX_A7,
+       XT_REG_IDX_A8,
+       XT_REG_IDX_A9,
+       XT_REG_IDX_A10,
+       XT_REG_IDX_A11,
+       XT_REG_IDX_A12,
+       XT_REG_IDX_A13,
+       XT_REG_IDX_A14,
+       XT_REG_IDX_A15,
+       XT_REG_IDX_PWRCTL,
+       XT_REG_IDX_PWRSTAT,
+       XT_REG_IDX_ERISTAT,
+       XT_REG_IDX_CS_ITCTRL,
+       XT_REG_IDX_CS_CLAIMSET,
+       XT_REG_IDX_CS_CLAIMCLR,
+       XT_REG_IDX_CS_LOCKACCESS,
+       XT_REG_IDX_CS_LOCKSTATUS,
+       XT_REG_IDX_CS_AUTHSTATUS,
+       XT_REG_IDX_FAULT_INFO,
+       XT_REG_IDX_TRAX_ID,
+       XT_REG_IDX_TRAX_CTRL,
+       XT_REG_IDX_TRAX_STAT,
+       XT_REG_IDX_TRAX_DATA,
+       XT_REG_IDX_TRAX_ADDR,
+       XT_REG_IDX_TRAX_PCTRIGGER,
+       XT_REG_IDX_TRAX_PCMATCH,
+       XT_REG_IDX_TRAX_DELAY,
+       XT_REG_IDX_TRAX_MEMSTART,
+       XT_REG_IDX_TRAX_MEMEND,
+       XT_REG_IDX_PMG,
+       XT_REG_IDX_PMPC,
+       XT_REG_IDX_PM0,
+       XT_REG_IDX_PM1,
+       XT_REG_IDX_PMCTRL0,
+       XT_REG_IDX_PMCTRL1,
+       XT_REG_IDX_PMSTAT0,
+       XT_REG_IDX_PMSTAT1,
+       XT_REG_IDX_OCD_ID,
+       XT_REG_IDX_OCD_DCRCLR,
+       XT_REG_IDX_OCD_DCRSET,
+       XT_REG_IDX_OCD_DSR,
+       XT_REG_IDX_OCD_DDR,
+       XT_NUM_REGS,
+       /* chip-specific user registers go after ISA-defined ones */
+       XT_USR_REG_START = XT_NUM_REGS
+};
+
+typedef uint32_t xtensa_reg_val_t;
+
+enum xtensa_reg_type {
+       XT_REG_GENERAL = 0,             /* General-purpose register; part of the windowed register set */
+       XT_REG_USER = 1,                /* User register, needs RUR to read */
+       XT_REG_SPECIAL = 2,             /* Special register, needs RSR to read */
+       XT_REG_DEBUG = 3,               /* Register used for the debug interface. Don't mess with this. */
+       XT_REG_RELGEN = 4,              /* Relative general address. Points to the absolute addresses plus the window
+                                        *index */
+       XT_REG_FR = 5,                  /* Floating-point register */
+};
+
+enum xtensa_reg_flags {
+       XT_REGF_NOREAD = 0x01,  /* Register is write-only */
+       XT_REGF_COPROC0 = 0x02  /* Can't be read if coproc0 isn't enabled */
+};
+
+struct xtensa_reg_desc {
+       const char *name;
+       unsigned int reg_num;                   /* ISA register num (meaning depends on register type) */
+       enum xtensa_reg_type type;
+       enum xtensa_reg_flags flags;
+};
+
+struct xtensa_user_reg_desc {
+       const char *name;
+       /* ISA register num (meaning depends on register type) */
+       unsigned int reg_num;
+       enum xtensa_reg_flags flags;
+       uint32_t size;
+       const struct reg_arch_type *type;
+};
+
+extern const struct xtensa_reg_desc xtensa_regs[XT_NUM_REGS];
+
+#endif /* OPENOCD_TARGET_XTENSA_REGS_H */