You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

149 lines
6.4 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2006 by Magnus Lundin *
  3. * lundin@mlu.mine.nu *
  4. * *
  5. * Copyright (C) 2008 by Spencer Oliver *
  6. * spen@spen-soft.co.uk *
  7. * *
  8. * This program is free software; you can redistribute it and/or modify *
  9. * it under the terms of the GNU General Public License as published by *
  10. * the Free Software Foundation; either version 2 of the License, or *
  11. * (at your option) any later version. *
  12. * *
  13. * This program is distributed in the hope that it will be useful, *
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  16. * GNU General Public License for more details. *
  17. * *
  18. * You should have received a copy of the GNU General Public License *
  19. * along with this program; if not, write to the *
  20. * Free Software Foundation, Inc., *
  21. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  22. ***************************************************************************/
  23. #ifndef ARM_ADI_V5_H
  24. #define ARM_ADI_V5_H
  25. #include "target.h"
  26. #include "register.h"
  27. #include "arm_jtag.h"
  28. #define DAP_IR_DPACC 0xA
  29. #define DAP_IR_APACC 0xB
  30. #define DPAP_WRITE 0
  31. #define DPAP_READ 1
  32. #define DP_ZERO 0
  33. #define DP_CTRL_STAT 0x4
  34. #define DP_SELECT 0x8
  35. #define DP_RDBUFF 0xC
  36. #define CORUNDETECT (1<<0)
  37. #define SSTICKYORUN (1<<1)
  38. #define SSTICKYERR (1<<5)
  39. #define CDBGRSTREQ (1<<26)
  40. #define CDBGRSTACK (1<<27)
  41. #define CDBGPWRUPREQ (1<<28)
  42. #define CDBGPWRUPACK (1<<29)
  43. #define CSYSPWRUPREQ (1<<30)
  44. #define CSYSPWRUPACK (1<<31)
  45. #define AP_REG_CSW 0x00
  46. #define AP_REG_TAR 0x04
  47. #define AP_REG_DRW 0x0C
  48. #define AP_REG_BD0 0x10
  49. #define AP_REG_BD1 0x14
  50. #define AP_REG_BD2 0x18
  51. #define AP_REG_BD3 0x1C
  52. #define AP_REG_DBGROMA 0xF8
  53. #define AP_REG_IDR 0xFC
  54. #define CSW_8BIT 0
  55. #define CSW_16BIT 1
  56. #define CSW_32BIT 2
  57. #define CSW_ADDRINC_MASK (3<<4)
  58. #define CSW_ADDRINC_OFF 0
  59. #define CSW_ADDRINC_SINGLE (1<<4)
  60. #define CSW_ADDRINC_PACKED (2<<4)
  61. #define CSW_HPROT (1<<25)
  62. #define CSW_MASTER_DEBUG (1<<29)
  63. #define CSW_DBGSWENABLE (1<<31)
  64. /* transaction mode */
  65. #define TRANS_MODE_NONE 0
  66. /* Transaction waits for previous to complete */
  67. #define TRANS_MODE_ATOMIC 1
  68. /* Freerunning transactions with delays and overrun checking */
  69. #define TRANS_MODE_COMPOSITE 2
  70. typedef struct swjdp_reg_s
  71. {
  72. int addr;
  73. arm_jtag_t *jtag_info;
  74. } swjdp_reg_t;
  75. typedef struct swjdp_common_s
  76. {
  77. arm_jtag_t *jtag_info;
  78. /* Control config */
  79. u32 dp_ctrl_stat;
  80. /* Support for several AP's in one DAP */
  81. u32 apsel;
  82. /* Register select cache */
  83. u32 dp_select_value;
  84. u32 ap_csw_value;
  85. u32 ap_tar_value;
  86. /* information about current pending SWjDP-AHBAP transaction */
  87. u8 trans_mode;
  88. u8 trans_rw;
  89. u8 ack;
  90. /* extra tck clocks for memory bus access */
  91. u32 memaccess_tck;
  92. } swjdp_common_t;
  93. /* Internal functions used in the module, partial transactions, use with caution */
  94. extern int dap_dp_write_reg(swjdp_common_t *swjdp, u32 value, u8 reg_addr);
  95. /* extern int swjdp_write_apacc(swjdp_common_t *swjdp, u32 value, u8 reg_addr); */
  96. extern int dap_dp_read_reg(swjdp_common_t *swjdp, u32 *value, u8 reg_addr);
  97. /* extern int swjdp_read_apacc(swjdp_common_t *swjdp, u32 *value, u8 reg_addr); */
  98. extern int dap_setup_accessport(swjdp_common_t *swjdp, u32 csw, u32 tar);
  99. extern int dap_ap_select(swjdp_common_t *swjdp,u8 apsel);
  100. extern int dap_ap_write_reg(swjdp_common_t *swjdp, u32 reg_addr, u8* out_value_buf);
  101. extern int dap_ap_write_reg_u32(swjdp_common_t *swjdp, u32 reg_addr, u32 value);
  102. extern int dap_ap_read_reg(swjdp_common_t *swjdp, u32 reg_addr, u8 *in_value_buf);
  103. extern int dap_ap_read_reg_u32(swjdp_common_t *swjdp, u32 reg_addr, u32 *value);
  104. /* External interface, partial operations must be completed with swjdp_transaction_endcheck() */
  105. extern int swjdp_transaction_endcheck(swjdp_common_t *swjdp);
  106. /* MEM-AP memory mapped bus single u32 register transfers, without endcheck */
  107. extern int mem_ap_read_u32(swjdp_common_t *swjdp, u32 address, u32 *value);
  108. extern int mem_ap_write_u32(swjdp_common_t *swjdp, u32 address, u32 value);
  109. /* MEM-AP memory mapped bus transfers, single registers, complete transactions */
  110. extern int mem_ap_read_atomic_u32(swjdp_common_t *swjdp, u32 address, u32 *value);
  111. extern int mem_ap_write_atomic_u32(swjdp_common_t *swjdp, u32 address, u32 value);
  112. /* MEM-AP memory mapped bus block transfers */
  113. extern int mem_ap_read_buf_u8(swjdp_common_t *swjdp, u8 *buffer, int count, u32 address);
  114. extern int mem_ap_read_buf_u16(swjdp_common_t *swjdp, u8 *buffer, int count, u32 address);
  115. extern int mem_ap_read_buf_u32(swjdp_common_t *swjdp, u8 *buffer, int count, u32 address);
  116. extern int mem_ap_write_buf_u8(swjdp_common_t *swjdp, u8 *buffer, int count, u32 address);
  117. extern int mem_ap_write_buf_u16(swjdp_common_t *swjdp, u8 *buffer, int count, u32 address);
  118. extern int mem_ap_write_buf_u32(swjdp_common_t *swjdp, u8 *buffer, int count, u32 address);
  119. /* Initialisation of the debug system, power domains and registers */
  120. extern int ahbap_debugport_init(swjdp_common_t *swjdp);
  121. extern int dap_info_command(struct command_context_s *cmd_ctx, swjdp_common_t *swjdp, int apsel);
  122. /* Commands for user dap access */
  123. /* Currently implemented in armv7m, needs armv7m target structure to find jtag and swjdp structures */
  124. extern int handle_dap_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
  125. extern int handle_dap_apsel_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
  126. extern int handle_dap_apid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
  127. extern int handle_dap_baseaddr_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
  128. extern int handle_dap_memaccess_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
  129. #endif