SHARC+ Dual Core DSP with ARM Cortex-A5 a Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 ABOUT ADSP-SC582/583/584/587/589/ADSP-21583/584/587 SILICON ANOMALIES These anomalies represent the currently known differences between revisions of the SHARC®ADSP-SC582/583/584/587/589/ADSP21583/584/587 product(s) and the functionality specified in the ADSP-SC582/583/584/587/589/ADSP-21583/584/587 data sheet(s) and the Hardware Reference book(s). SILICON REVISIONS A silicon revision number with the form "-x.x" is branded on all parts. The REVID bits <31:28> of the TAPC0_IDCODE register can be used to differentiate the revisions as shown below. Silicon REVISION TAPC0_IDCODE.REVID 0.1 0x01 ANOMALY LIST REVISION HISTORY The following revision history lists the anomaly list revisions and major changes for each anomaly list revision. Date Anomaly List Revision Data Sheet Revision Additions and Changes 06/26/2015 A PrC Initial Version SHARC and the SHARC logo are registered trademarks of Analog Devices, Inc.; SHARC+ is a trademark of Analog Devices, Inc NR004444A Document Feedback Information furnished by Analog Devices is believed to be accurate and reliable. However, no responsibility is assumed by Analog Devices for its use, nor for any infringements of patents or other rights of third parties that may result from its use. Specifications subject to change without notice. No license is granted by implication or otherwise under any patent or patent rights of Analog Devices. Trademarks and registered trademarks are the property of their respective owners. One Technology Way, P.O.Box 9106, Norwood, MA 02062-9106 U.S.A. Tel: 781.329.4700 ©2015 Analog Devices, Inc. All rights reserved. Technical Support www.analog.com ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List SUMMARY OF SILICON ANOMALIES The following table provides a summary of ADSP-SC582/583/584/587/589/ADSP-21583/584/587 anomalies and the applicable silicon revision(s) for each anomaly. No. ID Description 0.1 1 20000002 Data forwarding from Rn/Sn(n = 0-15) to any DAG register may fail in presence of stalls for certain sequence of instructions x 2 20000003 Transacations to Certain SPU and SMPU MMR Regions Cause Erroneous Errors x 3 20000005 Loading I12 register with invalid instruction address may result in unpredictable behavior when BTB is enabled with software optimization x 4 20000006 DM-PM priority may not be honored for the second Type-1 instruction in case of consecutive Type-1 instructions having DM-write and PM-read from same L2 or external memory address x 5 20000007 Flush instruction may not work as expected under some conditions x 6 20000009 IDLE instruction in the vicinity of Cacheable data access instruction may lead to unexpected results x 7 20000010 DMA and Data cache access conflict may lead to unexpected results x 8 20000013 Instruction cache functioning gets affected by un-cached external data access x 9 20000016 Load of ASTATy to use in condition has more than 1 cycle effect latency x 10 20000017 Parity status remains stuck if immediately after instruction parity error there is change-of-flow to non-L1 location x 11 20000018 Speculative read accesses launched on pipeline flush may lead to system hang under some conditions x 12 20000019 Certain range in DMC VISA space is not accessible x 13 20000020 When L1 Cache is enabled, usage of Byte modifiers in a certain sequence of instructions may not work as expected x 14 20000021 Fast Interrupt mode in L1 Cache is not functional x 15 20000022 Determining the success of an Exclusive Access (load or store) instruction based on the AZ flag of ASTAT register is not reliable x 16 20000023 Short word SIMD data should be short word aligned in L2 and external memories x 17 20000024 Consecutive instructions having external memory access may lead to read data corruption under some conditions x 18 20000028 In L1 Data cache, full Cache write back functionality has an issue x 19 20000029 L1 Cache performance degrades under certain conditions x 20 20000030 Usage of Type 3C instruction in a certain sequence may not work as expected x 21 20000031 GP Timer Generates First Interrupt/Trigger One Edge Late in EXTCLK Mode x 22 20000032 Accessing SMMRs from L2 or external memory locations may not work as expected when L1 cache is enabled x 23 20000033 EMDMA transfer with modifier "1" may fail for certain SHARC L1 boundary locations x 24 20000034 The save state operation may not work as expected in the IIR Accelerator x 25 20000035 Spurious stalls are generated during certain instruction sequences involving F0 register x 26 20000036 Data Cache line fill may not work as expected if it is preceded by a misaligned through data cache access x 27 20000037 DMC read state machine may not be in correct state after DMC initialization x 28 20000038 Error Address in the Boot Config Struct is Incorrect x 29 20000039 OTP API does not report OTP errors x 30 20000040 DMC is not reset after the PLL frequency changes in boot ROM x 31 20000041 INDIRECT Mode is not functional in boot ROM x 32 20000042 CGU0_CLKOUTSEL is not set from the values in OTP x 33 20000043 Key unwrapping on the SHARC fails when using with ROM API x 34 20000044 Slave boot modes IGNORE block processing not functional with Page mode enabled in a non-secure boot situation x 35 20000045 SHARC+ core executing IDLE instruction fails to acknowledge with SIDIS, when a reset sequence is initiated by another core x NR004444A | Page 2 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 No. ID Description 0.1 36 20000046 TMU FAULT/ALERT Status does not get cleared by writing 1 to the corresponding status bits x 37 20000047 SPU Range Protection for MMR space gets violated if any write access is done to Reserved memory spaces aliased to these MMR space x 38 20000048 CGU0_STAT.LWERR Bit Gets Erroneously Set Under Certain Conditions x 39 20000049 SPI Transmit Collision Error may occasionally be missed x 40 20000050 SPORT May Drive Data Pins During Inactive Channels in Multichannel Mode x 41 20000051 Secure SPI Master Boot Only Supported From Memory-Mapped SPI Devices on SPI2 x 42 20000052 SPI Master Boot in Peripheral DMA mode fails for block size greater than 64KB x 43 20000053 Reading Certain PKTE Registers May Return Incorrect Data During Packet Processing x 44 20000054 SPDIF_RX_TDMCLK_O signal cannot be routed using SRU x 45 20000055 Incorrect parameter passed to callback routines x 46 20000061 SPI data pins are driven high in open drain mode x 47 20000062 The software selection of SPI Slave Enable Signal does not drive to the programmed value in the Slave Select Register x 48 20000063 Reads of SPU_SECCHK by Non-secure Masters Result in an Erroneous Violation Interrupt x 49 20000064 Misaligned data cache access may affect the functioning of L1 Parity x 50 20000065 L1 Cache Range Based Functionality has some issues x Key: x = anomaly exists in revision . = Not applicable NR004444A | Page 3 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List DETAILED LIST OF SILICON ANOMALIES The following list details all known silicon anomalies for the ADSP-SC582/583/584/587/589/ADSP-21583/584/587 including a description, workaround, and identification of applicable silicon revisions. 1. 20000002 - Data forwarding from Rn/Sn(n = 0-15) to any DAG register may fail in presence of stalls for certain sequence of instructions: DESCRIPTION: An instruction involving a DAG operation such as address generation or modify following a type5a instruction may fail under following conditions: 1. The source register of the DAG operation is has been updated in a previous type5a instruction. 2. The source of the register transfer in type5a instruction is same as the destination of the compute operation. 3. These two instructions are separated by five or fewer instructions. 4. The pipeline is stalled due to any reason such as data/control dependence or those arising out of L1 memory bank conflict. When the above conditions are met, the DAG operation may produce incorrect result due to value forwarding from first instruction to the DAG operation going wrong. The type5a instruction however, produces the expected result updating the DAG register correctly. Example: 1. 2. 3. 4. 5. 6. 7. r2 = r2 - r13, i4 = r2; //type 5a compute destination (r2) same as DAG //register (i4) update source if eq jump target1; //Condition set to use dependence;stalls the pipe nop; nop; nop; nop; i5=b2w(i4); //DAG operation using same DAG register (i4) as source; //separated from type5a by 5 instructions In the above case, i5 in instruction #7 gets updated with incorrect value even though i4 contains the correct value from instruction #1. WORKAROUND: 1. Split the type5a instruction which conforms to the use case described above. 2. Avoid using the relevant DAG register in a DAG operation within 6 instructions of type5a instruction of above description APPLIES TO REVISION(S): 0.1 2. 20000003 - Transacations to Certain SPU and SMPU MMR Regions Cause Erroneous Errors: DESCRIPTION: Non-secure reads or writes to the upper half of each SPU instance's MMR space will be erroneously blocked and cause a bus error when the SPU is set as non-secure slave. The same is true for each SMPU instance. The affected MMR address range can be calculated for each instance of the SPU and SMPU as follows: Lower bound = Instance Address Offset + 0x800 Upper bound = Instance Address Offset + 0xFFF WORKAROUND: None APPLIES TO REVISION(S): 0.1 NR004444A | Page 4 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 3. 20000005 - Loading I12 register with invalid instruction address may result in unpredictable behavior when BTB is enabled with software optimization: DESCRIPTION: When BTB is enabled with Software return optimization, branch target address is predicted by reading the value of I12 register, instead of the branch target buffer itself. Hence loading I12 register with an invalid instruction address will result in an unpredictable behavior of the core. WORKAROUND: Use I12 register only for instruction addressing purpose if software return optimization is enabled in BTB. APPLIES TO REVISION(S): 0.1 4. 20000006 - DM-PM priority may not be honored for the second Type-1 instruction in case of consecutive Type-1 instructions having DM-write and PM-read from same L2 or external memory address: DESCRIPTION: In case of type-1 instructions where parallel(PM and DM) data transfers happen, processor performs DM access first. But this DM-PM priority may be violated in the sequence which has Consecutive Type-1 instructions where: 1. DM access being write and PM access being read 2. Both Read and Write access happens from/to the same L2 or external memory address Eg: dm(addrA) = r0, r1 = pm(addrA); dm(addrB) = r2, r3 = pm(addrB); Here addrA and addrB are L2 or external memory addresses. The second type1 instruction may load r3 with old value of addrB instead of r2. WORKAROUND: Avoid codes having DM-PM sequence dependency in case of DM-write and PM-read to the same L2 or external memory address. APPLIES TO REVISION(S): 0.1 5. 20000007 - Flush instruction may not work as expected under some conditions: DESCRIPTION: The Flush instruction will not behave as expected, during L1 cache Range based Write back Invalidation is in process and any of the following conditions occur: 1. The operation is interrupted. 2. The instructions following the FLUSH instruction is dependent on the cache operation. WORKAROUND: 1. Interrupt should be disabled from range register setting to the loop end. To avoid long wait by interrupts,it is recommended to split entire range into smaller ranges. 2. Flush instruction should be padded with 5 unrelated instructions. 3. Use only Range register pair 0 for Write back invalidation. APPLIES TO REVISION(S): 0.1 NR004444A | Page 5 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 6. 20000009 - IDLE instruction in the vicinity of Cacheable data access instruction may lead to unexpected results: DESCRIPTION: When L1 Data Cache is enabled, the IDLE instruction has to be separated from cache-able data accesses for proper operation. WORKAROUND: 5 NOPs should be placed after cache-able data access till IDLE instruction. APPLIES TO REVISION(S): 0.1 7. 20000010 - DMA and Data cache access conflict may lead to unexpected results: DESCRIPTION: Data Cache(DM and PM) uses L1 Block 1 and block 2 respectively. When L1 data cache is enabled, DMA to L1 block 1 and block 2 may not work as expected when there is a conflict between the DMA and the Data cache access. WORKAROUND: When L1 Cache is enabled, avoid DMA and Cache-able data access conflict by restricting the DMA, not to use L1 Memory Block 1 and Block 2 addresses. APPLIES TO REVISION(S): 0.1 8. 20000013 - Instruction cache functioning gets affected by un-cached external data access: DESCRIPTION: In a scenario where only the Instruction cache is enabled, external data access(un-cached) may affect the working of the Instruction cache. WORKAROUND: 1. Avoid un-cached external data accesses with I-cache accesses by enabling the data cache and bringing the data to L1 Memory. 2. If only Instruction cache needs to be enabled, external data access has to be avoided. APPLIES TO REVISION(S): 0.1 9. 20000016 - Load of ASTATy to use in condition has more than 1 cycle effect latency: DESCRIPTION: When SIMD is enabled, loading ASTATy register in order to use it in a condition has more than 1 cycle effect latency. WORKAROUND: Separate ASTATy load from use with 5 unrelated instructions if SIMD is ON. APPLIES TO REVISION(S): 0.1 NR004444A | Page 6 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 10. 20000017 - Parity status remains stuck if immediately after instruction parity error there is change-offlow to non-L1 location: DESCRIPTION: When Instruction parity error occurs and there is a change-of-flow to non-L1 location(Eg. Interrupt service routine in external memory), the parity error will not get cleared even if zero is written into GPERR_STAT register. This results in the parity error interrupt to be generated continuously. WORKAROUND: A dummy or actual branch should be added to L1 Memory from the Parity ISR. APPLIES TO REVISION(S): 0.1 11. 20000018 - Speculative read accesses launched on pipeline flush may lead to system hang under some conditions: DESCRIPTION: Speculative accesses are the accesses which are launched ahead of their execute stage and hence they could be killed in case of pipe flush or any other abort like condition false. SHARC+ core launches all the non MMR reads speculatively based on the current values of index and modifier registers. Hence, in case of pipeline flush after a branch, loop etc., they could end-up launching extra accesses based on the further Ix = Ix+My or on the stale value of index registers. If they end up landing on a memory interface which is not functional (neither initialized nor blocked by SMPU) then such accesses could hang the system. WORKAROUND: The following conditions should be met to avoid the issue: 1. If DMC-0 ,DMC-1 or SMC is not used , it should be blocked by the SMPU 2. Both the SHARC Cores should be out of reset 3. If the SPI Flash memory is not used , then the following piece of code should be added in the application *pREG_SPI2_TXCTL = (BITM_SPI_TXCTL_TEN | BITM_SPI_TXCTL_TTI); *pREG_SPI2_RXCTL = (BITM_SPI_RXCTL_REN | BITM_SPI_RXCTL_RTI); *pREG_SPI2_CTL = (BITM_SPI_CTL_EN|BITM_SPI_CTL_MSTR| BITM_SPI_CTL_MMSE); APPLIES TO REVISION(S): 0.1 12. 20000019 - Certain range in DMC VISA space is not accessible: DESCRIPTION: One-third of the address in each of DMC VISA Execution space have not been mapped. Hence the memory range given below is not accessible. DMC-0 : DMC-1 : 0x0900-000 to 0x09ff-fff 0x0d00-000 to 0x0dff-fff WORKAROUND: None APPLIES TO REVISION(S): 0.1 NR004444A | Page 7 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 13. 20000020 - When L1 Cache is enabled, usage of Byte modifiers in a certain sequence of instructions may not work as expected: DESCRIPTION: When L1-cache is enabled, Byte modifier may not work as expected in the following instruction sequence: 1. Any DM-external access. //Instruction n 2. PM access with byte-word specifier. //Instruction n+1 Eg: dm(i0,m0) = r0; //I0 points to the external memory pm(i8,m8) = r1 (BW); WORKAROUND: One unrelated instruction should be used between DM(External)access and the PM access with Byte modifier. Eg: dm(i0,m0) = r0; //I0 points to the external memory NOP; pm(i8,m8) = r1 (BW); APPLIES TO REVISION(S): 0.1 14. 20000021 - Fast Interrupt mode in L1 Cache is not functional: DESCRIPTION: The Fast interrupt servicing mode in L1 Cache is not functional. Bit 24 FISREN of the Cache Configuration (CACFG) register cannot be used in the application. WORKAROUND: None APPLIES TO REVISION(S): 0.1 15. 20000022 - Determining the success of an Exclusive Access (load or store) instruction based on the AZ flag of ASTAT register is not reliable: DESCRIPTION: The expected behavior is that the success of the exclusive access (store or load) will set the AZ flag in ASTATx register (in ASTATy also if SIMD is enabled) while a failure will clear it. But this does not work as expected and hence checking the response of the Exclusive Load and Store Access based on AZ flag is not reliable. WORKAROUND: Do not check for any status following an Exclusive Read access. Ensure that access is targeted to one of the following spaces: 1 L2 memory 2 DMC-0 or DMC-1 memory and the DMC initialization is done 3 SMC After an exclusive write operation , check for the VALID bit of the SMPU_EXACSTATx register to determine the success of an Exclusive write operation.Valid bit = 1 indicates and success and valid bit = 0 indicates a failure. APPLIES TO REVISION(S): 0.1 NR004444A | Page 8 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 16. 20000023 - Short word SIMD data should be short word aligned in L2 and external memories: DESCRIPTION: When SIMD is enabled, all the short word data access from L2 and external memory locations should be short word aligned. Eg: For Load or store of DM/PM(Ix,My)(sw), where Ix points to L2 or external memory address , Ix should be short word aligned. WORKAROUND: None APPLIES TO REVISION(S): 0.1 17. 20000024 - Consecutive instructions having external memory access may lead to read data corruption under some conditions: DESCRIPTION: External memory read data can be corrupted, if there are more than 2 external reads and more than 2 external writes in a window of 4 instructions. The issue is not seen if there are just 2 external reads and 2 external writes in a window of 4 instructions. Consider the following sequence of instructions where I0,I8,I1 and I9 point to external memory address. Under some circumstances , the read data (R0 and R1) may get corrupted. R0 = dm(I0, M0), dm(I1, M0) = R0, R0 = dm(I0, M0), dm(I1, M0) = R0, R1 = pm(I8,M8); pm(I9,M8) = R1; R1 = pm(I8,M8); pm(I9,M8) = R1; WORKAROUND: Avoid having greater than 2 external reads and greater than 2 external writes in a window of four instructions. APPLIES TO REVISION(S): 0.1 NR004444A | Page 9 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 18. 20000028 - In L1 Data cache, full Cache write back functionality has an issue: DESCRIPTION: When full cache Write-back feature is used, last line of way1 is not written-back even though the line is dirty ,when the Write-back bit ( DMCAWB for DM Cache or PMCAWB for PM Cache) is set in the Cache Configuration register (CACFG). WORKAROUND: Before performing a full cache write-back, perform 12 dummy read access( 6 with DM and 6 with PM ) to the external memory address which falls in the last line of the cache A A A A A A = = = = = = dm(addr1) dm(addr2) dm(addr3) dm(addr4) dm(addr5) dm(addr6) A A A A A A = = = = = = pm(addr1) pm(addr2) pm(addr3) pm(addr4) pm(addr5) pm(addr6) Only 6 different addresses is enough and the dummy reads can happen to the same six addresses for both DM and PM accesses (The Tag field of the addresses should be different in each case). Also the addresses chosen have to be outside of the Range selected for noncacheability. The following 6 addresses can be chosen for the workaround 0x2008_FFC0 0x2009_FFC0 0x200a_FFC0 0x200b_FFC0 0x2018_FFC0 0x2019_FFC0 APPLIES TO REVISION(S): 0.1 19. 20000029 - L1 Cache performance degrades under certain conditions: DESCRIPTION: If the range based non-cacheability feature is selected, in addition to the one specified in the range register pair,certain other addresses which satisfies the below conditions will be non-cacheable: 1. External memory VISA addresses overlapping with the lower 24 bits of the addresses in the range register pair. 2. External memory Non-VISA addresses(multiplied by 3) overlapping with the lower 25 bits of the addresses in the range register. Any access to the non-cacheable range when Cache is enabled will take more cycles. WORKAROUND: Avoid code execution from external memory addresses where ever: 1. The lower 24 bits of the addresses in the range register pair overlaps with the VISA address. 2. The lower 25 bits of the addresses in the range register pair overlaps with the Non-VISA address multiplied by 3. APPLIES TO REVISION(S): 0.1 NR004444A | Page 10 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 20. 20000030 - Usage of Type 3C instruction in a certain sequence may not work as expected: DESCRIPTION: In VISA mode, Type 3C instructions should not be used for reads when there is a conditional write instruction preceding it. Eg : if eq, dm(i0,m0) = r5; R0 = dm(i4,m4);// Type 3C read Sequences such as above should be avoided. WORKAROUND: Any one of the following workarounds can be implemented. 1. Force the Type 3C instruction to uncompressed 48 bit instruction using the assembler directives. if eq, dm(i0,m0) = r5; .NOCOMPRESS; R0 = dm(i4,m4);// Type 3C read .FORCECOMPRESS; 2. Insert a NOP; instruction between the conditional write and the Type3C instruction. if eq, dm(i0,m0) = r5; NOP; R0 = dm(i4,m4);// Type 3C read APPLIES TO REVISION(S): 0.1 21. 20000031 - GP Timer Generates First Interrupt/Trigger One Edge Late in EXTCLK Mode: DESCRIPTION: When TIMER is configured in External Clock mode, after the TIMER_TMRn_CNT register reaches the value programmed in the TIMER_TMRn_PER register, the corresponding TIMER_DATA_ILAT bit should be set along with a trigger / interrupt being generated. However, TIMER_DATA_ILAT bit will be set after the TIMER_TMRn_CNT register rolls over to 1. Consider TIMER_TMRn_PER register to be configured to a value n. After the TIMER has started, the first interrupt/ trigger will occur after the TIMER receives n+1 edges externally and the subsequent ones after every n edges WORKAROUND: For interrupts/ triggers to occur at every n edges of the external clock the TIMER_TMRn_PER register should be configured to n-1 for the initial event and to n for subsequent ones. Pseudo code: TIMER_TMRn_PER = n-1; TIMER_RUN_SET = 1; TIMER_TMRn_PER = n; // Configure PERIOD register with n-1 // Run the timer // Configure PERIOD register with n APPLIES TO REVISION(S): 0.1 NR004444A | Page 11 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 22. 20000032 - Accessing SMMRs from L2 or external memory locations may not work as expected when L1 cache is enabled: DESCRIPTION: The SMMR accesses from L2 or external memories may not work as expected when L1 Cache is enabled. WORKAROUND: All the sMMR accesses has to be done from L1 Memory only when the L1 cache is enabled. APPLIES TO REVISION(S): 0.1 23. 20000033 - EMDMA transfer with modifier "1" may fail for certain SHARC L1 boundary locations: DESCRIPTION: EMDMA transfer with modifier (EMDMA_MOD0/EMDMA_MOD1) equal to "1" may fail if the DMA address range (EMDMA_INDX0/1 to EMDMA_INDX0/1+EMDMA_CNT0/1) crosses 4 K Byte boundary of the SHARC L1 memory. This anomaly is applicable for L1 memory of both the SHARC cores. EMDMA transfers with modifier other than "1" are not affected by this anomaly. For example, suppose an EMDMA is set to transfer 1024 bytes from L2 memory to SHARC core1 L1 such that the EMDMA_INDX0 register is set to 0x2C1FEC (close to 4 K Byte boundary location 0x2C2000) and the EMDMA_CNT0 register is set to 1024, some of the words might not get transferred correctly from L2 to L1. WORKAROUND: In case it is required to perform an EMDMA transfer to/from SHARC L1 memory with modifier equal to "1", both of the following conditions should be satisfied to work around this issue: 1. The start address corresponding to the SHARC L1 memory (EMDMA_INDX0/1) should be 32 bytes (i.e. eight 32 bit words) aligned. AND 2. The count corresponding to the SHARC L1 memory (EMDMA_CNT0/1) should be multiple of 8. APPLIES TO REVISION(S): 0.1 24. 20000034 - The save state operation may not work as expected in the IIR Accelerator: DESCRIPTION: The save state operation (enabled by the IIR_CTL1.SS bit) can be used to write back the biquad state values (DK1, DK2) to the coefficient buffer. This values can be reloaded back to the IIR Accelerator later for the next processing iteration. Because of this anomaly, the IIR Accelerator may write back wrong/duplicate DK1, DK2 values to the coefficient buffer. WORKAROUND: One way to work around this issue in software is to use the IIR accelerator in debug mode to explicitly read the DK1, DK2 values and write back these values to the coefficient buffer using core instead of using the automatic save state functionality (IIRCTL1.SS bit). More details on how to use debug mode to read the biquad state variables, please refer the ADSP-SC58x SHARC Processor Hardware Reference. APPLIES TO REVISION(S): 0.1 NR004444A | Page 12 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 25. 20000035 - Spurious stalls are generated during certain instruction sequences involving F0 register: DESCRIPTION: The following sequences results in spurious pipeline stalls: 1. Any compute instruction that updates F0, followed by an instruction that has null compute field. ex: F0 = F1 * F2; DM(I0,M0)=R4, R5=PM(I8,M8); //Type-1 instruction with null-compute 2. Any compute instruction that updates F0, followed by an instruction which has immediate field (data or address) in [22:16] bits. ex : F0 = F1 * F2; M11 = 0x82404fff; 3. In case of compressed instructions (VISA), any compute instruction that updates F0, followed by a compressed instruction. ex : F0 = F2 COPYSIGN F4; NOP; //16-bit instruction R1 = DM(I2,M4), R0 = PM(I8,M9); 4. Any floating-point compute instruction with a destination register F0, followed by a no-operand or single operand compute instruction, with unused source registers are coded as R0. ex : F0 = PASS F4; R10 = pass R11; //Y operand is not used, hence flushed to 0 in opcode by assembler WORKAROUND: Avoid the usage of F0 register in such sequence of instructions. APPLIES TO REVISION(S): 0.1 26. 20000036 - Data Cache line fill may not work as expected if it is preceded by a misaligned through data cache access: DESCRIPTION: Misaligned accesses are the accesses straddling to two cache lines (say line L1 and L2). The cache line fill (to either L1 or L2) may not work as expected in the below sequence: 1. Misaligned data cache through access (cache access is straddling to line L1 and L2, and there is no line fill as it is a through access) 2. Data cache access which results in Cache line fill to the same line (L1 or L2) Here the cache line fill may not work as expected. WORKAROUND: Misaligned accesses issue can be avoided by having the following restrictions on the data alignment: 1. All byte word data should be short word aligned. 2. All short word data should be normal word aligned. 3. All normal word data and long word data should be long word aligned. APPLIES TO REVISION(S): 0.1 NR004444A | Page 13 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 27. 20000037 - DMC read state machine may not be in correct state after DMC initialization: DESCRIPTION: Read accesses to the DMC require the DMC read state machine to be in the correct state. Because of this anomaly, the DMC read state machine may not be in a correct state after initializing the DMC and this may result in DMC read failures. WORKAROUND: To avoid the above anomaly, the following steps should be followed just after the DMC Initialization is over and before performing any DMC access: 1. Perform a dummy read to any DMC location. 2. Set bit 12(RESETDAT) of the DMCx_PHY_CTL0 register. 3. Clear bit 12(RESETDAT) of the DMCx_PHY_CTL0 register. For example, the following C code can be used to perform the above steps for DMC0: int dummy_read; int* pDMC_Address; pDMC_Address = (int *)0x80000000; dummy_read = *pDMC_Address; *pREG_DMC0_PHY_CTL0 |= 0x1000; *pREG_DMC0_PHY_CTL0 &= ~0x1000; APPLIES TO REVISION(S): 0.1 28. 20000038 - Error Address in the Boot Config Struct is Incorrect: DESCRIPTION: The 'errorReturn' field of the ADI_ROM_BOOT_CONFIG struct does not point to the location of the error inside boot ROM error handler. WORKAROUND: Use the stack to find the trace back to the failing function. APPLIES TO REVISION(S): 0.1 29. 20000039 - OTP API does not report OTP errors: DESCRIPTION: The errors in the OTP controller are masked when using the OTP API. WORKAROUND: Applications should check the OTP status register for errors according to the defined bits in the HRM. APPLIES TO REVISION(S): 0.1 30. 20000040 - DMC is not reset after the PLL frequency changes in boot ROM: DESCRIPTION: The DMC initialization using OTP does not work as expected, as the DMC driver in the boot rom does not reset the DLL after a change in the PLL frequency. As a result, DLL fails to lock to new frequency. WORKAROUND: None APPLIES TO REVISION(S): 0.1 NR004444A | Page 14 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 31. 20000041 - INDIRECT Mode is not functional in boot ROM: DESCRIPTION: The INDIRECT mode allows the booting of data via intermediate internal buffers. This is currently not functional and cannot be used. WORKAROUND: None APPLIES TO REVISION(S): 0.1 32. 20000042 - CGU0_CLKOUTSEL is not set from the values in OTP: DESCRIPTION: The CGU0_CLKOUTSEL value is not updated by boot rom, though it is configured in the OTP. WORKAROUND: None APPLIES TO REVISION(S): 0.1 33. 20000043 - Key unwrapping on the SHARC fails when using with ROM API: DESCRIPTION: ROM API call on SHARC for BLw(Key Unwrapping) Secure boot fails if stack space is mapped to L1 space. Key unwrap operation makes use of the PKTE DMA engine. This engine is configured to work with only L2 space in the boot ROM. WORKAROUND: ROM API application should setup the stack in L2 or L3 space. APPLIES TO REVISION(S): 0.1 34. 20000044 - Slave boot modes IGNORE block processing not functional with Page mode enabled in a nonsecure boot situation: DESCRIPTION: Page mode allows for boot transfer of larger blocks of data via an intermediate buffer. When ignore blocks are processed in slave boot modes with page mode enabled they should be transferred to the intermediate buffer. Instead the data is discarded resulting in the boot kernel failing to process data from the intermediate buffer incorrectly. Page mode is not enabled by default and can only be enabled when using the boot API or through initcodes and thus should not be used for the slave boot modes. WORKAROUND: None APPLIES TO REVISION(S): 0.1 NR004444A | Page 15 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 35. 20000045 - SHARC+ core executing IDLE instruction fails to acknowledge with SIDIS, when a reset sequence is initiated by another core: DESCRIPTION: When the SHARC+ core is executing an IDLE instruction and ARM or another SHARC+ core issues a reset sequence as shown below: 1. Clear the previous core Reset status bit on the CRSTAT register 2. Set the SIx bit correspond to the core on the SIDIS register 3. Wait for the acknowledgement from SHARC+ Core by polling for the SIx bit of the SISTAT register Due to the anomaly, SHARC+ does not send the ACK when it is executing IDLE instruction. The SIx bit in SISTAT register of the respective core is never set. WORKAROUND: None APPLIES TO REVISION(S): 0.1 36. 20000046 - TMU FAULT/ALERT Status does not get cleared by writing 1 to the corresponding status bits: DESCRIPTION: TMU module has two status bits FLTHI and ALRTHI on the TMU_STAT register which are set when the temperature goes beyond certain value. These bits are Write 1 to clear (W1C) but they do not work as expected. When FLTHI bit is set, writing to FLTHI bit of the TMU_STAT register does not clear the status. Similarly when ALRTHI bit is set, writing to ALRTHI bit does not clear the status. WORKAROUND: When either FLTHI bit or ALRTHI bit or both the bits are set, always write 1 to both the FLTHI and ALRTHI of the TMU_STAT register to clear the status. APPLIES TO REVISION(S): 0.1 37. 20000047 - SPU Range Protection for MMR space gets violated if any write access is done to Reserved memory spaces aliased to these MMR space: DESCRIPTION: The ADSP-SC58x processors have many reserved memory spaces in MMR address region. Some of these reserved memory are getting aliased to the valid MMR spaces. The below list has the MMRs which have aliased memory map: 1. 2. 3. 4. 5. 6. 7. LP DMA cluster - LP0 DDE and LP1 DDE WDT0,1 All SCLK0 DMA clusters - SPORT DDEs, UART DDEs, MDMA DDEs, HAE DDEs SCLK1 DMA cluster - SPI and PPI DDEs USB0,1 DAI0,1 EMDMA0 When the range protection is enabled from SPU, any write access to the MMR regions will not go through as they are protected. But the write accesses are not protected using SPU when the accesses are done using the reserved space. Hence the writes using the reserved address space updates the actual MMR region though the protection is enabled. WORKAROUND: None APPLIES TO REVISION(S): 0.1 NR004444A | Page 16 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 38. 20000048 - CGU0_STAT.LWERR Bit Gets Erroneously Set Under Certain Conditions: DESCRIPTION: The LWERR bit in the CGU0_STAT register will become erroneously set under the following conditions: 1. SPU_CTL.GLCK is enabled. 2. Any register within the CGU that can be locked has its lock bit set. 3. A write is made to a system MMR of another peripheral that shares that the same 12 LSBs as the locked CGU register. Although CGU0_STAT.LWERR becomes erroneously set under these conditions, a bus error does not occur as a result. A bus error only occurs under the conditions specified in the ADSP-SC58x/ADSP-2158x SHARC+ Processor Hardware Reference. WORKAROUND: There are two possible workarounds: 1. Change any one of the 3 conditions listed in the description. 2. When tracing the source of a bus error, check CGU0_STAT.LWERR after all of other possible sources of the error have been checked. This will prevent incorrect attribution of bus errors to the CGU. APPLIES TO REVISION(S): 0.1 39. 20000049 - SPI Transmit Collision Error may occasionally be missed: DESCRIPTION: SPI Transmit Collision Error is signalled when loading data to the transmit shift register happens near the first transmitting edge of SPI_CLK. This error is signalled only in slave mode. But due to incorrect timing of the first drive edge signal, it can occasionally cause a Transmit Collision Error to be unreported in the SPI_STAT register. WORKAROUND: None APPLIES TO REVISION(S): 0.1 40. 20000050 - SPORT May Drive Data Pins During Inactive Channels in Multichannel Mode: DESCRIPTION: When a SPORT is operating in multichannel mode, the transmitter tri-states the data pins during the inactive channels. When SPMUX functionality is enabled, under specific conditions, one SPORT half may continue to drive on the inactive channels. This happens when all the below conditions are true. 1. 2. 3. 4. 5. 6. 7. SPORT half "x" is configured as transmitter (SPORT_CTL_x.SPTRAN = 1). Imports Frame sync internally from the pairing half SPORT (SPORT_CTL2_x.FSMUXSEL = 1). Multichannel Frame Delay is zero (SPORT_MCTL_x.MFD = 0). Window Offset is zero (SPORT_MCTL_x.OFFSET = 0). Channel-0 of multichannel frame is enabled for transmission (SPORT_CS0_x.CH0 = 1). Frame sync is active low (SPORT_xCTL.LFS = 1). Frame Sync edge Detect bit is 0 (SPORT_CTL_x.FSED = 0). If any of these conditions is false, this anomaly does not occur. When this exact configuration is used, after completion of all the active channels, the SPORT half transmitter drives the first bit of next word to be transmitted once the number of channels specified in WSIZE expires. Therefore the SPORT half may drive on inactive channels which can cause contention when other transmitters configured to drive on these inactive channels. WORKAROUND: Avoid any one of the above conditions. For example: 1. Set the Frame Sync edge Detect bit (SPORT_CTL_x.FSED = 1). 2. Use Window Offset other than zero. 3. Use Multichannel Frame Delay other than zero. APPLIES TO REVISION(S): 0.1 NR004444A | Page 17 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 41. 20000051 - Secure SPI Master Boot Only Supported From Memory-Mapped SPI Devices on SPI2: DESCRIPTION: Secure SPI master boot can only be done in memory-mapped mode from SPI2. SPI0 and SPI1 do not support memory-mapped mode and therefore cannot support secure SPI master boot. The same restriction applies when calling the ROM API to boot. WORKAROUND: If secure SPI boot is needed, always configure dBootCommand to use SPI2 in XIP mode. When calling the ROM API, ensure that the lowest nibble (boot source device) of the boot command parameter is 0x7. The memory-mapped address where the boot needs to be started also needs to be passed as a start address parameter. For example, the below ROM API call boots from SPI flash which is mapped to 0x60000000 in XIP mode using SPI2: adi_rom_Boot(0x60000000,0,0,0,0x207); APPLIES TO REVISION(S): 0.1 42. 20000052 - SPI Master Boot in Peripheral DMA mode fails for block size greater than 64KB: DESCRIPTION: SPI Master Boot in Peripheral DMA mode fails using ROM API if the block size is greater than 64KB. WORKAROUND: Block size in the bootstream should be less than 64KB. APPLIES TO REVISION(S): 0.1 43. 20000053 - Reading Certain PKTE Registers May Return Incorrect Data During Packet Processing: DESCRIPTION: Reading out the PKTE_BUF_THRESH, PKTE_INBUF_CNT, or PKTE_OUTBUF_CNT register within one SCLK1 cycle of the Packet Engine starting to process a packet results in an incorrect value being read. This situation can happen when working in Direct Host Mode and starting to poll for the amount of data that can be transferred (input or output) shortly after starting packet processing by writing to the PKTE_SA_RDY register. For Autonomous Ring Mode there is no need to read the affected registers because the data will be automatically transferred out to specified host memory buffers. WORKAROUND: In all modes the anomaly can by avoided by not reading any of the affected registers after starting packet processing using the PKTE_SA_RDY register. Additionally, since Direct Host Mode is a manual sequential operation, the Data Output Buffer can be emptied before configuring and starting a new job to process another packet. It can then be assumed that the Data Input Buffer is empty when starting with a new packet. By skipping the first poll this anomaly can be avoided. Also, the maximum amount of data to transfer can be assumed to be equal to the Input Data Buffer size of 256 bytes so there is no need to check the threshold register to gauge this. For the output side it suffices not to start polling for the availability of data before input data has been transferred. APPLIES TO REVISION(S): 0.1 44. 20000054 - SPDIF_RX_TDMCLK_O signal cannot be routed using SRU: DESCRIPTION: The SPDIF_RX_TDMCLK_O signal is not connected to SRU internally. Hence this signal cannot be routed to other peripheral inputs and/or to DAI pins using SRU. WORKAROUND: None APPLIES TO REVISION(S): 0.1 NR004444A | Page 18 of 20 | June 2015 Silicon Anomaly List ADSP-SC582/583/584/587/589/ADSP-21583/584/587 45. 20000055 - Incorrect parameter passed to callback routines: DESCRIPTION: The boot kernel incorrectly passes the address of the buffer as the second argument to user callback routines instead of the address of the ADI_ROM_BOOT_BUFFER item. The ADI_ROM_BOOT_BUFFER item contains both the address and the size of the buffer that has just been processed. WORKAROUND: If user callbacks are required to be enabled and used, the size of the payload currently processed can be retrieved by analyzing contents of the boot structure for which the pointer is passed as the first parameter to the user callback. APPLIES TO REVISION(S): 0.1 46. 20000061 - SPI data pins are driven high in open drain mode: DESCRIPTION: SPI in open drain mode tri-states the output when data driven is logic high. But due to a race condition, the data pins will drive logic high for a small duration. WORKAROUND: None APPLIES TO REVISION(S): 0.1 47. 20000062 - The software selection of SPI Slave Enable Signal does not drive to the programmed value in the Slave Select Register: DESCRIPTION: The SPI Slave Enable signal can be selected via software by setting to the required value in the Slave Select Register. However, this value doesn't get driven on the SPI Slave Enable Signal. WORKAROUND: Perform two back to back writes to the Slave Select Register in order to drive the signal to the required level. APPLIES TO REVISION(S): 0.1 48. 20000063 - Reads of SPU_SECCHK by Non-secure Masters Result in an Erroneous Violation Interrupt: DESCRIPTION: Reads of SPU_SECCHK by non-secure masters result in an erroneous SPU violation interrupt. The erroneous interrupt will only be observed if the SPU violation interrupt is enabled. WORKAROUND: There are two possible workarounds: 1. Don't use SPU_SECCHK. 2. Ignore the erroneous SPU interrupt after SPU_SECCHK is read. APPLIES TO REVISION(S): 0.1 NR004444A | Page 19 of 20 | June 2015 ADSP-SC582/583/584/587/589/ADSP-21583/584/587 Silicon Anomaly List 49. 20000064 - Misaligned data cache access may affect the functioning of L1 Parity: DESCRIPTION: When both L1 Cache and L1 Parity is enabled, a spurious parity error interrupt may be generated if there is any misaligned data cache accesses. WORKAROUND: This issue can be averted if the Data cache misalignment is avoided by having the following restrictions on the data alignment: 1. All byte word data should be short word aligned 2. All short word data should be normal word aligned 3. All normal word data and long word data should be long word aligned APPLIES TO REVISION(S): 0.1 50. 20000065 - L1 Cache Range Based Functionality has some issues: DESCRIPTION: Due to some issues found with the Range based functionality of L1 Cache, only the following configurations are supported: 1. Write Back Invalidation Range (On Range Register pair 0) 2. Write Through Range (On Range Register pair 4 and 5) 3. Locking Range for Data (DM and PM) Cache (On Range Register pair 1,2 and 3) 4. Non-Cacheable Range for Data (DM and PM) Cache (On Range Register pair 2,3,4 and 5) WORKAROUND: None APPLIES TO REVISION(S): 0.1 ©2015 Analog Devices, Inc. All rights reserved. Trademarks and registered trademarks are the property of their respective owners. a NR004444A | Page 20 of 20 | June 2015 www.analog.com