Skip to content

Commit 04b60b0

Browse files
coresight: add AP CSW register SPROT bit handling
1 parent 9461e11 commit 04b60b0

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

pyocd/coresight/ap.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,10 @@ def _init_hprot() -> None:
794794
LOG.debug("%s implemented HPROT=%x HNONSEC=%x", self.short_description, self._impl_hprot,
795795
self._impl_hnonsec)
796796

797+
if (self._flags & AP_SPROT):
798+
if (original_csw & CSW_SDEVICEEN) == 0:
799+
self._hnonsec = NONSECURE
800+
797801
# Update current HPROT and HNONSEC, and the current base CSW value.
798802
self.hprot = self._hprot & self._impl_hprot
799803
self.hnonsec = self._hnonsec & self._impl_hnonsec
@@ -1361,6 +1365,7 @@ def find_components(self) -> None:
13611365
AP_ALL_TX_SZ = 0x2 # The AP is known to support 8-, 16-, and 32-bit transfers, *unless* Large Data is implemented.
13621366
AP_MSTRTYPE = 0x4 # The AP is known to support the MSTRTYPE field.
13631367
AP_DBGSWEN = 0x8 # The AP is known to support the DBGSWEN flag.
1368+
AP_SPROT = 0x10 # The AP is known to support the SPROT field.
13641369

13651370
## Map from AP IDR fields to AccessPort subclass.
13661371
#
@@ -1386,20 +1391,20 @@ def find_components(self) -> None:
13861391
# |JEP106 |Class |Var|Type |Name |Class
13871392
(AP_JEP106_ARM, AP_CLASS_JTAG_AP, 0, 0): ("JTAG-AP", AccessPort, 0 ),
13881393
(AP_JEP106_ARM, AP_CLASS_COM_AP, 0, 0): ("SDC-600", AccessPort, 0 ),
1389-
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AHB): ("AHB-AP", AHB_AP, AP_ALL_TX_SZ ),
1394+
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AHB): ("AHB-AP", AHB_AP, AP_ALL_TX_SZ|AP_SPROT ),
13901395
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 1, AP_TYPE_AHB): ("AHB-AP", AHB_AP, AP_ALL_TX_SZ|AP_4K_WRAP|AP_MSTRTYPE ),
13911396
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 2, AP_TYPE_AHB): ("AHB-AP", AHB_AP, AP_ALL_TX_SZ ),
13921397
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 3, AP_TYPE_AHB): ("AHB-AP", AHB_AP, AP_ALL_TX_SZ ),
13931398
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 4, AP_TYPE_AHB): ("AHB-AP", AHB_AP, AP_ALL_TX_SZ ),
13941399
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_APB): ("APB-AP", MEM_AP, AP_DBGSWEN ),
13951400
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AXI): ("AXI-AP", MEM_AP, AP_ALL_TX_SZ ),
1396-
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AHB5): ("AHB5-AP", AHB_AP, AP_ALL_TX_SZ ),
1401+
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AHB5): ("AHB5-AP", AHB_AP, AP_ALL_TX_SZ|AP_SPROT ),
13971402
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 1, AP_TYPE_AHB5): ("AHB5-AP", AHB_AP, AP_ALL_TX_SZ ),
13981403
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 2, AP_TYPE_AHB5): ("AHB5-AP", AHB_AP, AP_ALL_TX_SZ ),
13991404
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_APB4): ("APB4-AP", MEM_AP, 0 ),
14001405
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AXI5): ("AXI5-AP", MEM_AP, AP_ALL_TX_SZ ),
14011406
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 1, AP_TYPE_AXI5): ("AXI5-AP", MEM_AP, AP_ALL_TX_SZ ),
1402-
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AHB5_HPROT): ("AHB5-AP", MEM_AP, AP_ALL_TX_SZ ),
1407+
(AP_JEP106_ARM, AP_CLASS_MEM_AP, 0, AP_TYPE_AHB5_HPROT): ("AHB5-AP", MEM_AP, AP_ALL_TX_SZ|AP_SPROT ),
14031408
(AP_JEP106_ARM_CHINA,
14041409
AP_CLASS_MEM_AP, 1, AP_TYPE_AHB5): ("AHB5-AP", AHB_AP, AP_ALL_TX_SZ ),
14051410
}

0 commit comments

Comments
 (0)