Skip to content

Commit e9fe231

Browse files
committed
deploy: f8ea634
1 parent 10bda69 commit e9fe231

90 files changed

Lines changed: 30257 additions & 5004 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.buildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Sphinx build info version 1
22
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
3-
config: 63627bd573fa8d05f077ba4a9a9b417a
3+
config: 11337e8a4ab00341a4c66bf5e454d76e
44
tags: 645f666f9bcd5a90fca523b33c5a78b7

_images/flow_active_fsm.png

52.4 KB
Loading

_images/hc_top_level_arch.png

102 KB
Loading

_sources/axi_recovery_flow.md.txt

Lines changed: 277 additions & 54 deletions
Large diffs are not rendered by default.

_sources/ccc.md.txt

Lines changed: 89 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,21 @@ The following Broadcast CCCs are currently supported by the core (all required B
1212
* DISEC (R) - Disable Events Command
1313
* SETMWL (R) - Set Max Write Length
1414
* SETMRL (R) - Set Max Read Length
15-
* SETAASA (O) - Set All Addresses to Static Adresses
15+
* SETAASA (O) - Set All Addresses to Static Addresses
1616
* ENTDAA (R) - Enter Dynamic Address Assignment
17-
* RSTDAA (R) - Direct Reset Dynamic Address Assignment - this direct CCC is deprecated, the core NACKs this command as per the spec
17+
* RSTDAA (R) - Reset Dynamic Address Assignment
1818
* RSTACT (R) - Target Reset Action
1919
* Broadcast (Format 1) supports defining bytes 0x0, 0x1 and 0x2
2020

21+
The following Broadcast CCCs are recognized but not actively handled (the core ACKs or NACKs as appropriate per the specification):
22+
23+
* ENTAS0-ENTAS3 - Enter Activity State (acknowledged, no behavioral change)
24+
* ENTHDR0-ENTHDR7 - Enter HDR Mode (triggers HDR mode entry; HDR data transfer is not supported)
25+
* ENDXFER - Data Transfer Ending Procedure Control
26+
* SETBUSCON - Set Bus Context
27+
* DEFGRPA / RSTGRPA - Group Address (not supported, NACKed)
28+
* MLANE - Multi-Lane (not supported, NACKed)
29+
2130
## Direct CCCs
2231

2332
The following Direct CCCs are currently supported by the core (all required Direct CCCs, plus several optional/conditional ones):
@@ -30,14 +39,89 @@ The following Direct CCCs are currently supported by the core (all required Dire
3039
* SETMWL (R) - Set Max Write Length
3140
* SETMRL (R) - Set Max Read Length
3241
* GETMWL (R) - Get Max Write Length
33-
* GETMRL (R) - Set Max Read Length
42+
* GETMRL (R) - Get Max Read Length
3443
* GETPID (C) - Get Provisioned ID
3544
* GETBCR (C) - Get Bus Characteristics Register
3645
* GETDCR (C) - Get Device Characteristics Register
3746
* GETSTATUS (R) - Get Device Status
3847
* The two-byte format (Format 1)
3948
* GETCAPS (R) - Get Optional Feature Capabilities
40-
* Without defining byte ( Format 1)
49+
* Without defining byte (Format 1)
50+
* With defining byte 0x93
4151
* RSTACT (R) - Target Reset Action
4252
* Direct Write (Format 2) supports defining bytes 0x0, 0x1 and 0x2
43-
* Direct Read (Format 3) supports defining bytes 0x81 and 0x82 and returns the 0xFF as recovery timing
53+
* Direct Read (Format 3) supports defining bytes 0x81, 0x82, and 0x84 and returns 0xFF as recovery timing
54+
* ENDXFER - Data Transfer Ending Procedure Control
55+
56+
## CCCs That Update Registers Without Firmware Notification
57+
58+
The following CCCs autonomously update internal registers without generating an
59+
interrupt to notify firmware. Firmware should poll these registers if current
60+
values are needed:
61+
62+
| CCC | Register Updated | Notes |
63+
|-----|-----------------|-------|
64+
| SETDASA | `STBY_CR_DEVICE_ADDR.DYNAMIC_ADDR` / `DYNAMIC_ADDR_VALID` | Sets dynamic address (main or virtual) |
65+
| SETNEWDA | `STBY_CR_DEVICE_ADDR.DYNAMIC_ADDR` / `DYNAMIC_ADDR_VALID` | Assigns a new dynamic address (main or virtual) |
66+
| SETAASA | `STBY_CR_DEVICE_ADDR.DYNAMIC_ADDR` / `DYNAMIC_ADDR_VALID` | Copies static address to dynamic address (main and/or virtual) |
67+
| RSTDAA | `STBY_CR_DEVICE_ADDR.DYNAMIC_ADDR` / `DYNAMIC_ADDR_VALID` | Clears dynamic address and valid bit (main and virtual) |
68+
| SETMRL (Broadcast/Direct) | `STBY_CR_MRL.MRL` | Max Read Length; not enforced in hardware |
69+
| SETMRL (with IBI length) | `STBY_CR_MRL.IBIL` | IBI data length |
70+
| SETMWL (Broadcast/Direct) | `STBY_CR_MWL.MWL` | Max Write Length; not enforced in hardware |
71+
| RSTACT | `STBY_CR_CCC_CONFIG_RSTACT_PARAMS.RST_ACTION` | Reset action level (defaults to 0x1 when no RSTACT is active) |
72+
| ENEC | `TTI.CONTROL.IBI_EN`, `CRR_EN`, `HJ_EN` | Enables the corresponding event |
73+
| DISEC | `TTI.CONTROL.IBI_EN`, `CRR_EN`, `HJ_EN` | Disables the corresponding event |
74+
75+
```{note}
76+
MRL and MWL values are informational only. The hardware does not enforce these
77+
limits on Private Read or Private Write transfers. See {doc}`firmware_guide` for
78+
details on firmware responsibilities.
79+
```
80+
81+
## Multi-Byte CCC Register Atomicity
82+
83+
Several Direct GET CCCs return multi-byte values. The CCC state machine
84+
transmits these byte-by-byte, selecting each byte from the source signal
85+
combinationally as it is needed. There is no snapshot or shadow register;
86+
the source is re-read on every byte. If the underlying CSR is modified
87+
mid-transfer, remaining bytes will reflect the new value while
88+
already-transmitted bytes retain the old value.
89+
90+
| CCC | Bytes | Source | Updated By |
91+
|-----|-------|--------|------------|
92+
| GETBCR | 1 | `STBY_CR_DEVICE_CHAR.BCR_*` | FW |
93+
| GETDCR | 1 | `STBY_CR_DEVICE_CHAR.DCR` | FW |
94+
| GETSTATUS | 2 | `TTI.INTERRUPT_STATUS`, `TTI.STATUS` | HW |
95+
| GETMWL | 2 | Internal flop | SETMWL CCC |
96+
| GETMRL | 3 | Internal flop | SETMRL CCC |
97+
| GETPID | 6 | `STBY_CR_DEVICE_CHAR.PID_HI` + `STBY_CR_DEVICE_PID_LO.PID_LO` | FW |
98+
99+
**GETPID**: The 48-bit PID is assembled combinationally from two CSR
100+
registers (`STBY_CR_DEVICE_CHAR` and `STBY_CR_DEVICE_PID_LO`). If firmware
101+
writes either register while a GETPID CCC is in progress, the byte being
102+
transmitted in that cycle and all subsequent bytes will use the new register
103+
value. Firmware should write both PID registers before the Target receives
104+
a dynamic address (before ENTDAA / SETDASA / SETAASA), since GETPID is
105+
only issued after address assignment.
106+
107+
**GETMWL / GETMRL**: These read internal flops that are only written by the
108+
SETMWL / SETMRL CCC handler. Since only one CCC can be active on the bus at
109+
a time, GET and SET cannot overlap. These registers are read-only to firmware
110+
(`sw = r`).
111+
112+
For SET CCCs, **SETMRL** commits MRL (bytes 0-1) and IBIL (byte 2) to
113+
`STBY_CR_MRL` on separate clock cycles. A firmware read of `STBY_CR_MRL`
114+
between those two updates sees the new MRL with the stale IBIL. **SETMWL**
115+
commits both MWL bytes to `STBY_CR_MWL` in a single cycle.
116+
117+
## CCC Error Handling
118+
119+
The core detects errors during CCC processing:
120+
121+
* **TE1**: CCC command code parity error
122+
* **TE5**: Wrong R/W direction for a Direct CCC (e.g., SET command with Read)
123+
* **Framing Error**: SETDASA/SETNEWDA padding bit error (Bit[0] != 0)
124+
125+
These errors are reported through the `TTI.TARGET_ERR_INTR_STATUS` register
126+
and the `TTI.STATUS.PROTOCOL_ERROR` bit (readable via GETSTATUS CCC).
127+
See {doc}`error_handling` for full details.

0 commit comments

Comments
 (0)