SPRAC21A June 2016 – June 2019 OMAP-L132 , OMAP-L138 , TDA2E , TDA2EG-17 , TDA2HF , TDA2HG , TDA2HV , TDA2LF , TDA2P-ABZ , TDA2P-ACD , TDA2SA , TDA2SG , TDA2SX , TDA3LA , TDA3LX , TDA3MA , TDA3MD , TDA3MV
The programming sequence to use the OCMC RAM ECC feature is:
Bits | Field Name | Description | Type | Reset |
---|---|---|---|---|
31:6 | RESERVED | Reserved | R | 0x0 |
5 | CFG_ECC_OPT_NON_ECC_READ | Optimize read latency for non-ECC read. Returns the data one cycle faster, if the read access is from a non-ECC enabled space. | RW | 0x0 |
4 | CFG_ECC_ERR_SRESP_EN | ECC non-correctable error SRESP enable. Enables ERR return on L3 OCP SRESP when a non-correctable data (DED) or address error is detected. | RW | 0x0 |
3 | CFG_ECC_SEC_AUTO_CORRECT | SEC error auto correction mode. Enables the OCMC_ECC to automatically update the error data word with the corrected word. | RW | 0x0 |
2:0 | CFG_OCMC_MODE | OCM Controller memory access modes. | RW | 0x0 |
000: Non-ECC mode (data access) | ||||
001: Non-ECC mode (code access) | ||||
010: Full ECC enabled mode | ||||
011: Block ECC enabled mode | ||||
1xx: Reserved (internally defaults to 000 mode) |
OCMC Memory | 0 | 4 | 8 | C | ECC |
---|---|---|---|---|---|
0x40300000 | 32-bit word | 32-bit word | 32-bit word | 32-bit word | 9-bit Parity |
0x40300010 | Initialized | Initialized | Initialized | Initialized | Initialized |
0x40300020 | Initialized | Un-Initialized | Un-Initialized | Un-Initialized | Partially Initialized |
When using an EDMA to initialize the memory, the EDMA would access OCMC using a 128-bit access and thus initialize the whole 128 bits in one OCP write command. Care should be taken to ensure the start address and end address is 128-bit aligned when initializing.
NOTE
When un-cached CPU memset is used to initialize the memory, care should be taken to clear the error counts by writing to the CFG_OCMC_ECC_CLEAR_HIST register in the OCM subsystem, as shown in Table 71, as the NC errors may get set when initializing the memory word by word or byte by byte (sub 128 bit) as shown in the previous example.
NOTE
When cache policy of Write Back (WB)/ Write Allocate (WA) is enabled on the CPU, care should be taken to not have the cache lines being read from uninitialized ECC memory. Typically when the CPU cache is enabled in WB-WA mode and the CPU is trying to initialize the OCMC ECC enabled memory, the cache line would be first read into the cache leading to the ECC controller to start reporting ECC errors. Additionally, the initialization would reside in cache unless explicitly flushed to memory. The way to avoid errors from the ECC controller when using cache is to always initialize the ECC enabled memory before performing any read or write to cached ECC enabled memory region.
Bits | Field Name | Description | Type | Reset |
---|---|---|---|---|
31:4 | RESERVED | Reserved | R | 0x0 |
3 | CLEAR_SEC_BIT_DISTR | Clear stored SEC bit distribution history. Write of 1 causes the STATUS_SEC_ERROR_DISTR registers to be cleared. Reads return 0. | R/W1C | 0x0 |
2 | CLEAR_ADDR_ERR_CNT | Clear stored ADDR error history. Write of 1 causes the ADDR_ERROR_CNT bit and ADDR_ERROR_ADDRESS_TRACE FIFO to be cleared. Reads return 0. | R/W1C | 0x0 |
1 | CLEAR_DED_ERR_CNT | Clear stored DED error history. Write of 1 causes the DED_ERROR_CNT bit and DED_ERROR_ADDRESS_TRACE FIFO to be cleared. Reads return 0. | R/W1C | 0x0 |
0 | CLEAR_SEC_ERR_CNT | Clear stored SEC error history. Write of 1 causes the SEC_ERROR_CNT bit and SEC_ERROR_ADDRESS_TRACE FIFO to be cleared. Reads return 0. | R/W1C | 0x0 |
Bits | Field Name | Description | Type | Reset |
---|---|---|---|---|
31:25 | RESERVED | Reserved | R | 0x0 |
24 | CFG_DISCARD_DUP_ADDR | Do not save duplicate error address. | R/W | 0x0 |
0: Save the duplicated addresses. | ||||
1: Save only the unique addresses. | ||||
23:20 | CFG_ADDR_ERR_CNT_MAX | Number of ADDR errors to trigger an interrupt (The value must be > 0 to generate an interrupt). | R/W | 0x1 |
19:16 | CFG_DED_CNT_MAX | Number of DED errors to trigger an interrupt (The value must be > 0 to generate an interrupt). | R/W | 0x1 |
15:0 | CFG_SEC_CNT_MAX | Number of SEC error to trigger an interrupt (The value must be > 0 to generate an interrupt). | R/W | 0x1 |
Bits | Field Name | Type | Reset |
---|---|---|---|
31:15 | RESERVED | R | 0x0 |
14 | CBUF_SHORT_FRAME_DETECT_FOUND | R/W | 0x0 |
13 | CBUF_UNDERFLOW_ERR_FOUND | R/W | 0x0 |
12 | CBUF_OVERFLOW_WRAP_ERR_FOUND | R/W | 0x0 |
11 | CBUF_OVERFLOW_MID_ERR_FOUND | R/W | 0x0 |
10 | CBUF_READ_SEQUENCE_ERR_FOUND | R/W | 0x0 |
9 | CBUF_VBUF_READ_START_ERR_FOUND | R/W | 0x0 |
8 | CBUF_READ_OUT_OF_RANGE_ERR_FOUND | R/W | 0x0 |
7 | CBUF_WRITE_SEQUENCE_ERR_FOUND | R/W | 0x0 |
6 | CBUF_VBUF_WRITE_START_ERR_FOUND | R/W | 0x0 |
5 | CBUF_WR_OUT_OF_RANGE_ERR_FOUND | R/W | 0x0 |
4 | CBUF_VIRTUAL_ADDR_ERR_FOUND | R/W | 0x0 |
3 | OUT_OF_RANGE_ERR_FOUND | R/W | 0x0 |
2 | ADDR_ERR_FOUND | R/W | 0x0 |
1 | DED_ERR_FOUND | R/W | 0x0 |
0 | SEC_ERR_FOUND | R/W | 0x0 |