jtag: linuxgpiod: drop extra parenthesis
[openocd.git] / src / target / arm_adi_v5.h
index 90d28bcf235457190cfe43a0d76819f37785d6f5..92c3dbc3a666610322831bd9ffbaea134ad78d0f 100644 (file)
 
 #define DP_DLPIDR_PROTVSN      1u
 
-#define DP_SELECT_APSEL 0xFF000000
-#define DP_SELECT_APBANK 0x000000F0
-#define DP_SELECT_DPBANK 0x0000000F
-#define DP_SELECT_INVALID 0x00FFFF00 /* Reserved bits one */
+#define ADIV5_DP_SELECT_APSEL  0xFF000000
+#define ADIV5_DP_SELECT_APBANK 0x000000F0
+#define DP_SELECT_DPBANK               0x0000000F
+/*
+ * Mask of AP ADDR in select cache, concatenating DP SELECT and DP_SELECT1.
+ * In case of ADIv5, the mask contains both APSEL and APBANKSEL fields.
+ */
+#define SELECT_AP_MASK                 (~(uint64_t)DP_SELECT_DPBANK)
 
-#define DP_APSEL_MAX        (255) /* for ADIv5 only */
-#define DP_APSEL_INVALID    0xF00 /* more than DP_APSEL_MAX and not ADIv6 aligned 4k */
+#define DP_APSEL_MAX                   (255) /* Strict limit for ADIv5, number of AP buffers for ADIv6 */
+#define DP_APSEL_INVALID               0xF00 /* more than DP_APSEL_MAX and not ADIv6 aligned 4k */
 
-#define DP_TARGETSEL_INVALID 0xFFFFFFFFU
-#define DP_TARGETSEL_DPID_MASK 0x0FFFFFFFU
+#define DP_TARGETSEL_INVALID   0xFFFFFFFFU
+#define DP_TARGETSEL_DPID_MASK 0x0FFFFFFFU
 #define DP_TARGETSEL_INSTANCEID_MASK 0xF0000000U
 #define DP_TARGETSEL_INSTANCEID_SHIFT 28
 
 #define CSW_8BIT               0
 #define CSW_16BIT              1
 #define CSW_32BIT              2
+#define CSW_64BIT              3
+#define CSW_128BIT             4
+#define CSW_256BIT             5
 #define CSW_ADDRINC_MASK    (3UL << 4)
 #define CSW_ADDRINC_OFF     0UL
 #define CSW_ADDRINC_SINGLE  (1UL << 4)
@@ -265,6 +272,26 @@ struct adiv5_ap {
         */
        uint32_t csw_value;
 
+       /**
+        * Save the supported CSW.Size data types for the MEM-AP.
+        * Each bit corresponds to a data type.
+        * 0b1 = Supported data size. 0b0 = Not supported.
+        * Bit 0 = Byte (8-bits)
+        * Bit 1 = Halfword (16-bits)
+        * Bit 2 = Word (32-bits) - always supported by spec.
+        * Bit 3 = Doubleword (64-bits)
+        * Bit 4 = 128-bits
+        * Bit 5 = 256-bits
+        */
+       uint32_t csw_size_supported_mask;
+       /**
+        * Probed CSW.Size data types for the MEM-AP.
+        * Each bit corresponds to a data type.
+        * 0b1 = Data size has been probed. 0b0 = Not yet probed.
+        * Bits assigned to sizes same way as above.
+        */
+       uint32_t csw_size_probed_mask;
+
        /**
         * Cache for (MEM-AP) AP_REG_TAR register value This is written to
         * configure the address being read or written
@@ -282,7 +309,8 @@ struct adiv5_ap {
        uint32_t tar_autoincr_block;
 
        /* true if packed transfers are supported by the MEM-AP */
-       bool packed_transfers;
+       bool packed_transfers_supported;
+       bool packed_transfers_probed;
 
        /* true if unaligned memory access is not supported by the MEM-AP */
        bool unaligned_access_bad;
@@ -338,11 +366,21 @@ struct adiv5_dap {
        /* The current manually selected AP by the "dap apsel" command */
        uint64_t apsel;
 
+       /** Cache for DP SELECT and SELECT1 (ADIv6) register. */
+       uint64_t select;
+       /** Validity of DP SELECT cache. false will force register rewrite */
+       bool select_valid;
+       bool select1_valid;     /* ADIv6 only */
        /**
-        * Cache for DP_SELECT register. A value of DP_SELECT_INVALID
-        * indicates no cached value and forces rewrite of the register.
+        * Partial DPBANKSEL validity for SWD only.
+        * ADIv6 line reset sets DP SELECT DPBANKSEL to zero,
+        * ADIv5 does not.
+        * We can rely on it for the banked DP register 0 also on ADIv5
+        * as ADIv5 has no mapping for DP reg 0 - it is always DPIDR.
+        * It is important to avoid setting DP SELECT in connection
+        * reset state before reading DPIDR.
         */
-       uint64_t select;
+       bool select_dpbanksel_valid;
 
        /* information about current pending SWjDP-AHBAP transaction */
        uint8_t  ack;
@@ -406,6 +444,9 @@ struct adiv5_dap {
  * available until run().
  */
 struct dap_ops {
+       /** Optional; called once on the first enabled dap before connecting */
+       int (*pre_connect_init)(struct adiv5_dap *dap);
+
        /** connect operation for SWD */
        int (*connect)(struct adiv5_dap *dap);
 
@@ -747,6 +788,15 @@ struct adiv5_private_config {
 };
 
 extern int adiv5_verify_config(struct adiv5_private_config *pc);
+
+enum adiv5_configure_dap_optional {
+       ADI_CONFIGURE_DAP_COMPULSORY = false,
+       ADI_CONFIGURE_DAP_OPTIONAL = true
+};
+
+extern int adiv5_jim_configure_ext(struct target *target, struct jim_getopt_info *goi,
+                                                                  struct adiv5_private_config *pc,
+                                                                  enum adiv5_configure_dap_optional optional);
 extern int adiv5_jim_configure(struct target *target, struct jim_getopt_info *goi);
 
 struct adiv5_mem_ap_spot {

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)