Silicon Anomaly List for Blackfin ADSP-BF700/701

Blackfin
Embedded Processor
a
Silicon Anomaly List
ADSP-BF700/701/702/703/704/705/706/707
ABOUT ADSP-BF700/701/702/703/704/705/706/707 SILICON ANOMALIES
These anomalies represent the currently known differences between revisions of the Blackfin®ADSP-BF700/701/702/703/704/705/706/707
product(s) and the functionality specified in the ADSP-BF700/701/702/703/704/705/706/707 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 implementation field bits <15:8> of the DSPID core MMR
register can be used to differentiate the revisions as shown below.
Silicon REVISION
DSPID<15:8>
0.0
0x00
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
07/03/2014
B
PrC
Added Anomalies: 19000013, 19000021, 19000022, 19000023,
19000024, 19000025, 19000026, 19000027, 19000028, 19000029,
19000031, 19000032, 19000034, 19000035, 19000036, 19000038
Revised Anomalies: 19000009, 19000012
04/03/2014
A
PrB
Initial Version
Blackfin and the Blackfin logo are registered trademarks of Analog Devices, Inc.
NR004345B
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
www.analog.com
Fax: 781.461.3113
©2014 Analog Devices, Inc. All rights reserved.
ADSP-BF700/701/702/703/704/705/706/707
Silicon Anomaly List
SUMMARY OF SILICON ANOMALIES
The following table provides a summary of ADSP-BF700/701/702/703/704/705/706/707 anomalies and the applicable silicon revision(s) for
each anomaly.
No.
ID
Description
0.0
1
19000002
Disabling Posted MMR Writes While Writes Are Outstanding May Cause Unpredictable Results
x
2
19000003
Invalid Opcode Does Not Cause Exception
x
3
19000004
SEQSTAT Parity Bits Can't be Cleared
x
4
19000005
Parity Error Status Registers May Capture the Incorrect Error Address
x
5
19000007
Reads of SPU_SECCHK by Non-secure Masters Result in an Erroneous Violation Interrupt
x
6
19000008
GPIO Slave Trigger Cannot Be Used on the Same Port as GPIO Outputs
x
7
19000009
CRC Look-Up Table Generation Doesn't Work as Expected
x
8
19000010
STI Directly Before CLI Does Not Enable Interrupts
x
9
19000011
The WRDO Bit in WDOG_CTL is Erroneously Cleared Under Certain Conditions
x
10
19000012
MSI 4-bit Read Operation Does Not Work as Expected
x
11
19000013
SPIHP Erroneously Drives SPI_MISO While Receiving Commands
x
12
19000015
TESTSET to a Write-Protected Bank of L2 Causes the Bank to Remain Locked
x
13
19000016
PKTE Hash Result Corruption in the Case of Data Output Buffer Full
x
14
19000017
Reading Certain PKTE Registers May Return Incorrect Data During Packet Processing
x
15
19000018
L1 Parity Checking Detects Spurious Parity Errors
x
16
19000019
Misaligned Accesses to L2 or L3 Memory Return Incorrect Data
x
17
19000020
L1 Cache and Parity Error Detection Are Disabled During Boot
x
18
19000021
CGU0_STAT.LWERR Bit Gets Erroneously Set Under Certain Conditions
x
19
19000022
Fill Blocks Not Functional During Secure Boot
x
20
19000023
adi_rom_sysControl Forces DMC_PADRESTORE Flag To True
x
21
19000024
Boot Mode Disable Feature is Not Functional
x
22
19000025
RCU_BCODE Cannot be Restored Upon Returning From Hibernate Mode
x
23
19000026
Secure SPI Master Boot Only Supported From Memory-Mapped SPI Devices on SPI2
x
24
19000027
RCU_MSG Register Incorrectly Reports HALTONINIT Emulation Exception
x
25
19000028
The adi_rom_Boot API Only Allows Booting From SPI Flash Address 0x0
x
26
19000029
Error Address in the Boot Config Struct is Incorrect
x
27
19000031
CGU and DMC Settings Cannot be Restored From the DPM Upon Wake from Hibernate
x
28
19000032
Transactions to Certain SPU and SMPU MMR Regions Cause Erroneous Errors
x
29
19000034
The JUMPCCEN Enable Bit in the BP_CFG Register Defaults to b#0 Instead of b#1
x
30
19000035
SYS_RESOUT Fails to Drive Low During Hardware Reset and Hibernate
x
31
19000036
System Reset Causes Emulator to Lose Connectivity
x
32
19000038
Writes to the SPI_SLVSEL Register Do Not Take Effect
x
Key: x = anomaly exists in revision
. = Not applicable
NR004345B | Page 2 of 14 | July 2014
Silicon Anomaly List
ADSP-BF700/701/702/703/704/705/706/707
DETAILED LIST OF SILICON ANOMALIES
The following list details all known silicon anomalies for the ADSP-BF700/701/702/703/704/705/706/707 including a description,
workaround, and identification of applicable silicon revisions.
1. 19000002 - Disabling Posted MMR Writes While Writes Are Outstanding May Cause Unpredictable Results:
DESCRIPTION:
Disabling posted MMR writes using the SYSCFG.MPWEN bit while MMR writes are outstanding may cause unpredictable results.
WORKAROUND:
Always place an SSYNC after setting SYSCFG.MPWEN = b#0.
APPLIES TO REVISION(S):
0.0
2. 19000003 - Invalid Opcode Does Not Cause Exception:
DESCRIPTION:
The opcode 0xEC81D373 is invalid and should cause an exception if executed, but it does not.
WORKAROUND:
None
APPLIES TO REVISION(S):
0.0
3. 19000004 - SEQSTAT Parity Bits Can't be Cleared:
DESCRIPTION:
The parity bits in SEQSTAT can't be cleared.
WORKAROUND:
Use the BYTELOC bits in L1IM_IPERR_STAT and L1DM_DPERR_STAT to clear parity errors. The SEQSTAT parity bits will not update to show
that the parity erorr(s) have been cleared unless a core or system reset is applied.
APPLIES TO REVISION(S):
0.0
4. 19000005 - Parity Error Status Registers May Capture the Incorrect Error Address:
DESCRIPTION:
In the rare case of two consecutive parity errors the L1IM_IPERR_STAT or L1DM_DPERR_STAT registers may capture the second error
address location instead of the first. For this condition to occur both of the following events must occur:
1. Two consecutive DAG0 reads have parity errors
2. The return of the first read data is delayed by the core
WORKAROUND:
None
APPLIES TO REVISION(S):
0.0
NR004345B | Page 3 of 14 | July 2014
ADSP-BF700/701/702/703/704/705/706/707
Silicon Anomaly List
5. 19000007 - 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.0
6. 19000008 - GPIO Slave Trigger Cannot Be Used on the Same Port as GPIO Outputs:
DESCRIPTION:
If a GPIO trigger slave asserts at the same time as a register write to change the output state of a signal on the same port, neither
transaction will complete. For instance, if PA_10 and PA_13 are set to toggle after a Port A slave trigger, any register writes to
PORTA_DATA, PORTA_DATA_SET, PORTA_DATA_CLR, or PORTA_DATA_TGL occurring at the same time as a Port A slave trigger will not
successfully complete.
WORKAROUND:
Don't use trigger toggle functionality on a port where writes to PORT_DATA, PORT_DATA_SET, PORT_DATA_CLR, or PORT_DATA_TGL will
occur.
APPLIES TO REVISION(S):
0.0
NR004345B | Page 4 of 14 | July 2014
Silicon Anomaly List
ADSP-BF700/701/702/703/704/705/706/707
7. 19000009 - CRC Look-Up Table Generation Doesn't Work as Expected:
DESCRIPTION:
The CRC Look-Up Table (LUT) generation by writing to the CRC_POLY register works as expected only once after system reset. The boot
code uses the CRC to initialize memory, so any subsequent writes to the CRC_POLY register after the LUT is generated may lead to
unexpected CRC results.
WORKAROUND:
To work around this issue, the following steps should be followed while writing the CRC_POLY register with the polynomial value:
1. Write the polynomial value into the CRC_POLY register.
2. Wait for the look up table to get generated automatically by polling the CRC_STAT_LUTDONE bit.
3. Enable access to the CRC_LUT registers by first writing the internal register (address: 0x20005010) with the values 0x1E7B1C96 and
0xDFF0C3B2 one by one respectively and then setting bit 31 of the CRC_CTL register.
4. Calculate the CRC_LUT table values in software and write these values into the CRC_LUT registers (as mentioned in the code below).
5. Disable access to the CRC_LUT registers by first clearing bit 31 of the CRC_CTL register and then writing the internal
register(address:0x20005010) with the values 0x1E7B1C96 and 0xDFF0C3B2 one by one respectively.
The following C code can be used for a workaround :
//Initialize the CRC_POLYNOMIAL to be used here
#define CRC_POLYNOMIAL 0x82608EDB
//1. Write the polynomial value into the CRC_POLY register
*pREG_CRC0_POLY = CRC_POLYNOMIAL;
//2. Wait for the look up table to get generated automatically by polling the
//CRC_STAT_LUTDONE bit
while((*pREG_CRC0_STAT&BITM_CRC_STAT_LUTDONE==0));
//Internal register definition to be used only for this workaround
#define pINT_REG (volatile int*)0x20005010
//Uncomment this line when using the workaround for CRC0
#define USE_CRC0
//Uncomment this line when using the workaround for CRC1
//#define USE_CRC1
//Internal definition to be used only for this workaround (start address of the
//CRC_LUT registers)
#ifdef USE_CRC0
#define CRC_LUT_OFFSET 0x200B0080
#endif
#ifdef USE_CRC1
#define CRC_LUT_OFFSET 0x200B1080
#endif
uint32_t lutdat = 0x80000000;
uint32_t gx = CRC_POLYNOMIAL;
uint32_t lut[32];
uint32_t* pointer;
//3. Enable access to the CRC_LUT registers by first writing the internal
//register (address: 0x20005010) with the values 0x1E7B1C96 and 0xDFF0C3B2 one
//by one respectively and then setting bit 31 of the CRC_CTL register
*pINT_REG = 0x1E7B1C96;
*pINT_REG = 0xDFF0C3B2;
*pREG_CRC0_CTL|=0x80000000;
//4. Calculate the CRC LUT table
for (i=0; i<32; i++)
{
contents in software
NR004345B | Page 5 of 14 | July 2014
ADSP-BF700/701/702/703/704/705/706/707
Silicon Anomaly List
lutdat=((lutdat&0x80000000)==0x80000000)?((lutdat<<1) ^ gx) : lutdat << 1;
lut[i] = lutdat;
}
//4. Write the LUT registers
for(i=1;i<32;i++)
{
pointer = CRC_LUT_OFFSET+i*4;
*pointer=lut[i];
}
//5. Disable access to the CRC_LUT registers by first clearing bit 31 of the
//CRC_CTL register and then writing the internal register (address: 0x20005010)
//with the values 0x1E7B1C96 and 0xDFF0C3B2 one by one respectively
*pREG_CRC0_CTL&=~0x80000000;
*pINT_REG = 0x1E7B1C96;
*pINT_REG = 0xDFF0C3B2;
The only time this workaround does not need to be run is if the boot code memory initialization has been disabled and it is the first time
the CRC_POLY register is being written.
APPLIES TO REVISION(S):
0.0
8. 19000010 - STI Directly Before CLI Does Not Enable Interrupts:
DESCRIPTION:
If a CLI instruction follows an STI instruction immediately like the following example, interrupts will not be enabled. Even pending
interrupts will not be taken:
STI;
CLI;
WORKAROUND:
Make sure there are two or more instructions between STI and CLI. NOP instructions can be used.
APPLIES TO REVISION(S):
0.0
9. 19000011 - The WRDO Bit in WDOG_CTL is Erroneously Cleared Under Certain Conditions:
DESCRIPTION:
For this anomaly to occur, the following sequence must happen:
1. The watchdog must be enabled and then subsequently expire, causing the WRDO bit in WDOG_CTL to be set.
2. Disable the watchdog using WDOG_CTL.
3. Re-enable the watchdog WDOG_CTL without clearing WRDO
In this case the WRDO bit will be erroneously cleared and the watchdog will begin to count down from 0xFFFFFFFF.
WORKAROUND:
The write that disables the watchdog after expiry should always be followed by a write that clears WRDO and keeps WDOG disabled to
avoid the watchdog counting from 0xFFFFFFFF.
Pseudo code:
WDOG0_CTL=0x0AD0;
// disable Watchdog timer
WDOG0_CTL=0x8AD0;
// Clear the WRDO bit with watchdog disabled
// Re-enable the watchdog timer here
APPLIES TO REVISION(S):
0.0
NR004345B | Page 6 of 14 | July 2014
Silicon Anomaly List
ADSP-BF700/701/702/703/704/705/706/707
10. 19000012 - MSI 4-bit Read Operation Does Not Work as Expected:
DESCRIPTION:
In case of a data read operation in 4-bit mode with MSI configured for 4-bit bus width, the controller samples the data well before the
actual start bit is driven by the card. As a result, the controller samples the initial data as 0xFF until the point when the card starts driving
out actual data on the bus. The number of 0xFFs sampled depends on the card used and MSI bus frequency. The problem occurs when
the PORTC_MUX/FER registers are configured for four MSI Data lines( MSI_D0 - MSI_D3). The problem is observed for SD/SDIO as well as
eMMC/MMC cards.
WORKAROUND:
For ADSP-BF700/702/704/706 the following configuration will set up an internal loopback that will prevent the issue, though PC10 cannot
subsequently be used for any other purpose:
1. Configure PC10, PC11, PC12, and PC13 as GPIO in PORTC_FER.
2. Set PC10, PC11, PC12, and PC13 as outputs in PORTC_DIR_SET.
3. Set PC10, PC11, PC12, and PC13 to output b#1 by setting the appropriate bits in PORTC_DATA.
4. Program PORTC_PC10, PC11, PC12, and PC13 as inputs by setting the appropriate bits in PORTC_INEN.
For ADSP-BF701/703/705/707 the following options are available:
1. Use 8-bit MSI mode.
2. Use the same workaround shown for ADSP-BF702/BF704/BF706. If this workaround is implemented, PC10, PC11, PC12, and PC13
cannot be used for any other purpose.
APPLIES TO REVISION(S):
0.0
11. 19000013 - SPIHP Erroneously Drives SPI_MISO While Receiving Commands:
DESCRIPTION:
The SPIHP erroneously drives the SPI_MISO signal of the selected SPI peripheral (SPI0, SPI1, or SPI2) during the receipt of commands or
addresses from the SPI master device. The SPI_MISO signal should be in the high impedance state while the SPIHP is receiving commands
or addresses.
WORKAROUND:
The SPI master must ignore the SPI_MISO input during the command and address phase of transactions. If SPI_MISO cannot be ignored or
another slave is transmitting on the master's SPI_MISO input during the command/address phase, external logic such as a multiplexer can
be used to gate the transmission from the BF70x.
APPLIES TO REVISION(S):
0.0
12. 19000015 - TESTSET to a Write-Protected Bank of L2 Causes the Bank to Remain Locked:
DESCRIPTION:
A TESTSET instruction to an L2 bank that has been locked by setting the L2CTL_ACTL_SYS register will cause the bank to lock out all
masters other than the core for subsequent transactions. This includes all read and write accesses by any DMA channel or by the SPIHP.
Any such accesses will stall until the workaround is performed.
WORKAROUND:
To avoid this issue, clear the L2CTL_ACTL_SYS bit of an L2 bank before performing a TESTSET to that bank. Write protection can be reenabled after the TESTSET completes.
If the anomaly conditions have already occurred and DMA is stalled, the following steps may be used to release the stall:
1. Clear the corresponding bank's disable bit in the L2CTL_ACTL_SYS register.
2. Perform a TESTSET instruction to the same bank in L2 memory that the original TESTSET went to.
3. Set the corresponding bit back to 1 in L2CTL_ACTL_SYS.
The above workaround can be used to recover from a problem scenario.
APPLIES TO REVISION(S):
0.0
NR004345B | Page 7 of 14 | July 2014
ADSP-BF700/701/702/703/704/705/706/707
Silicon Anomaly List
13. 19000016 - PKTE Hash Result Corruption in the Case of Data Output Buffer Full:
DESCRIPTION:
When processing a packet where a hash result is appended after packet data ("Copy Digest" option specified, PKTE_SA_CMD1.CPYGST=1),
the last hash result word may become corrupted when the 256-byte Data Output Buffer starting at PKTE_DATAIO_BUF is full at the time
that the last hash result word is added to the Data Output Buffer. For situations where data is written into the Data Output Buffer at a
faster rate than it can be written out, this problem may be more apparent.
WORKAROUND:
Do not allow the output buffer to become full. This can be accomplished by setting the Output Buffer Threshold value in the
PKTE_BUF_THRESH.OUTBUF register well below the maximum value. This will allow data to start moving out of the Data Output Buffer
before it fills. This is sufficient for preventing the issue for regular hash/encrypt operations, including protocol operations, provided that
the data is not delayed in going through the SCBs to its destination.
For cases where large amounts of data are forwarded directly from the Input Data Buffer to the Output Data Buffer, (e.g. when doing a
hash operation where also the "Copy Payload" option specified), the workaround specified may be ineffective because the Packet Engine
forwards this data immediately and it prioritizes fetching inputs over writing outputs. In this situation the Packet Engine may still have
unforwarded input data available that is passed to the Output Data Buffer before the Packet Engine is able to write out the contents of
the Output Data Buffer. This unforwarded data may have filled up the Output Data Buffer in such a way that the hash result cannot be
stored completely in the Output Data Buffer, which then results in an incorrect hash result value.
APPLIES TO REVISION(S):
0.0
14. 19000017 - 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.0
NR004345B | Page 8 of 14 | July 2014
Silicon Anomaly List
ADSP-BF700/701/702/703/704/705/706/707
15. 19000018 - L1 Parity Checking Detects Spurious Parity Errors:
DESCRIPTION:
L1 data and instruction memory may detect spurious parity errors when DMA or other non-core writes are performed to L1 memory.
WORKAROUND:
Before writing to L1 memory using DMA all L1 locations must be read using extended access mode as shown in this code example:
#define LOADIMM32REG(R,VAL) R = VAL;
// Enable the extended data access functionality from the L1 space
LOADIMM32REG(p4, REG_L1DM_DCTL)
LOADIMM32REG(r0, 0x00010000)
[p4] = r0;
ssync;
// Pointer to base of L1 space and the increment to reach the next subbank
LOADIMM32REG(p0, 0x11A00000)
LOADIMM32REG(p1, 0x1000 - 4)
p2 = 16;
lsetup (_l1_im_init.a, _l1_im_init.b) lc0 = p2;
_l1_im_init.a:
r0 = [p0++];
// read from sub-bank column 0
_l1_im_init.b:
r1 = [p0 ++ p1];
// read from sub-bank column 1
LOADIMM32REG(p0, 0x11800000)
LOADIMM32REG(p1, 0x1000 - 4)
p2 = 8;
lsetup (_l1_dm_a_init.a, _l1_dm_a_init.b) lc0 = p2;
_l1_dm_a_init.a:
r0 = [p0++];
// read from sub-bank column 0
_l1_dm_a_init.b:
r1 = [p0 ++ p1 ]; // read from sub-bank column 1
LOADIMM32REG(p0, 0x11900000)
LOADIMM32REG(p1, 0x1000 - 4)
p2 = 8;
lsetup (_l1_dm_b_init.a, _l1_dm_b_init.b) lc0 = p2;
_l1_dm_b_init.a:
r0 = [p0++];
// read from sub-bank column 0
_l1_dm_b_init.b: r1 = [p0 ++ p1 ];
// read from sub-bank column 1
LOADIMM32REG(p0, 0x11B00000)
r0 = [p0++];
// read from sub-bank column 0
r0 = [p0++];
// Disable extended data access functionality
r0 = 0;
[p4] = r0;
ssync;
This workaround may be built into the development tool chain and/or into the operating system source code. For tool chains and
operating systems supported by Analog Devices, please consult the "Silicon Anomaly Tools Support" help page in the applicable
documentation and release notes for details.
For all other tool chains and operating systems, see the appropriate supporting documentation for details.
APPLIES TO REVISION(S):
0.0
NR004345B | Page 9 of 14 | July 2014
ADSP-BF700/701/702/703/704/705/706/707
Silicon Anomaly List
16. 19000019 - Misaligned Accesses to L2 or L3 Memory Return Incorrect Data:
DESCRIPTION:
Misaligned accesses (accesses not on a 32-bit boundary) to L2 or L3 memory will return incorrect data.
WORKAROUND:
Avoid misaligned accesses to L2 and L3 memory.
This workaround may be built into the development tool chain and/or into the operating system source code. For tool chains and
operating systems supported by Analog Devices, please consult the "Silicon Anomaly Tools Support" help page in the applicable
documentation and release notes for details.
For all other tool chains and operating systems, see the appropriate supporting documentation for details.
APPLIES TO REVISION(S):
0.0
17. 19000020 - L1 Cache and Parity Error Detection Are Disabled During Boot:
DESCRIPTION:
Cache and parity error detection are disabled during boot since the cache disable bit (cacheDis) in OTP memory is pre-programmed.
Consequently, the boot code execution will take longer to complete and parity errors that occur during boot will not be detected.
WORKAROUND:
If cache or parity is desired in the application, ensure that it is enabled after boot.
This workaround may be built into the development tool chain and/or into the operating system source code. For tool chains and
operating systems supported by Analog Devices, please consult the "Silicon Anomaly Tools Support" help page in the applicable
documentation and release notes for details.
For all other tool chains and operating systems, see the appropriate supporting documentation for details.
APPLIES TO REVISION(S):
0.0
18. 19000021 - 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-BF70x Blackfin+ 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.0
NR004345B | Page 10 of 14 | July 2014
Silicon Anomaly List
ADSP-BF700/701/702/703/704/705/706/707
19. 19000022 - Fill Blocks Not Functional During Secure Boot:
DESCRIPTION:
The use of fill blocks in the boot stream when secure boot is enabled may cause either a boot error or data to be copied to the incorrect
memory space. Non-secure boot is not affected.
WORKAROUND:
Ensure that the loader stream does not use fill blocks utilizing secure boot.
This workaround may be built into the development tool chain and/or into the operating system source code. For tool chains and
operating systems supported by Analog Devices, please consult the "Silicon Anomaly Tools Support" help page in the applicable
documentation and release notes for details.
For all other tool chains and operating systems, see the appropriate supporting documentation for details.
APPLIES TO REVISION(S):
0.0
20. 19000023 - adi_rom_sysControl Forces DMC_PADRESTORE Flag To True:
DESCRIPTION:
When utilizing the adi_rom_sysControl API, and having the actionFlags set to read from the DMC (BITM_ROM_SYSCTRL_DMC_READ) or to
write to the DPM (BITM_ROM_SYSCTRL_WUA_DPMWRITE & BITM_ROM_SYSCTRL_WUA_DMC & !BITM_ROM_SYSCTRL_WUA_OVERRIDE),
the ulWUA_Flags bit BITM_ROM_WUA_DMC_PADRESTORE is always treated as b#1 rather than evaluating whether it has been set to b#0
or b#1. This affects boot ROM code DMC initialization from both the DPM restore registers and from OTP memory, causing DMC settings
to unnecessarily be restored.
WORKAROUND:
None
APPLIES TO REVISION(S):
0.0
21. 19000024 - Boot Mode Disable Feature is Not Functional:
DESCRIPTION:
The OTP field bootModeDisable does not disable boot modes.
WORKAROUND:
None
APPLIES TO REVISION(S):
0.0
22. 19000025 - RCU_BCODE Cannot be Restored Upon Returning From Hibernate Mode:
DESCRIPTION:
The WUA_BCODE bit in the DPM_RESTORE0 register is not functional. Therefore, the RCU_BCODE register cannot be restored when
waking from hibernate mode.
WORKAROUND:
None
APPLIES TO REVISION(S):
0.0
NR004345B | Page 11 of 14 | July 2014
ADSP-BF700/701/702/703/704/705/706/707
Silicon Anomaly List
23. 19000026 - 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
0x40000000 in XIP mode using SPI2:
adi_rom_Boot(0x40000000,0,0,0,0x207);
APPLIES TO REVISION(S):
0.0
24. 19000027 - RCU_MSG Register Incorrectly Reports HALTONINIT Emulation Exception:
DESCRIPTION:
When an initcode routine is called the boot code stored in ROM should set the RCU_MSG.HALTONINIT bit, but instead it sets the
RCU_MSG.HALTONCALL bit.
WORKAROUND:
Trap HALTONCALL emulation exceptions rather than HALTONINIT exceptions when attempting to halt on an initcode call.
APPLIES TO REVISION(S):
0.0
25. 19000028 - The adi_rom_Boot API Only Allows Booting From SPI Flash Address 0x0:
DESCRIPTION:
The adi_rom_Boot API only allows booting to begin from address 0x0 of SPI flash memory when using SPI Master boot mode.
WORKAROUND:
None
APPLIES TO REVISION(S):
0.0
26. 19000029 - Error Address in the Boot Config Struct is Incorrect:
DESCRIPTION:
After entering the boot ROM error handler, the errorReturn field of the ADI_ROM_BOOT_CONFIG struct will always point to 0x40025AC,
which is not the location of the error.
WORKAROUND:
Either workaround may be used:
1. Set a breakpoint at 0x40025AC and read the RETS register once the breakpoint is reached. RETS will contain the location of the failure.
2. Use the stack to find the trace back to the failing function.
APPLIES TO REVISION(S):
0.0
NR004345B | Page 12 of 14 | July 2014
Silicon Anomaly List
ADSP-BF700/701/702/703/704/705/706/707
27. 19000031 - CGU and DMC Settings Cannot be Restored From the DPM Upon Wake from Hibernate:
DESCRIPTION:
adi_rom_sysControl does not correctly restore CGU and DMC settings from the DPM_RESTORE registers after wake from hibernate.
WORKAROUND:
If the CGU and/or the DMC need to be initialized after wake from hibernate the required values should be programmed in the appropriate
OTP memory locations.
APPLIES TO REVISION(S):
0.0
28. 19000032 - Transactions 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.0
29. 19000034 - The JUMPCCEN Enable Bit in the BP_CFG Register Defaults to b#0 Instead of b#1:
DESCRIPTION:
The branch predictor does not come out of reset with optimal settings for most general-purpose programs. The JUMPCCEN bit in BP_CFG
should be b#1 rather than b#0.
WORKAROUND:
Set BP_CFG.JUMPCCEN to b#1 as early as possible in a program.
This workaround may be built into the development tool chain and/or into the operating system source code. For tool chains and
operating systems supported by Analog Devices, please consult the "Silicon Anomaly Tools Support" help page in the applicable
documentation and release notes for details.
For all other tool chains and operating systems, see the appropriate supporting documentation for details.
APPLIES TO REVISION(S):
0.0
30. 19000035 - SYS_RESOUT Fails to Drive Low During Hardware Reset and Hibernate:
DESCRIPTION:
The SYS_RESOUT output should drive low while the SYS_HWRST input is asserted and during the hibernate state. Instead, SYS_RESOUT
remains in a high impedance state any time SYS_HWRST is asserted or the hibernate state is entered.
WORKAROUND:
None
APPLIES TO REVISION(S):
0.0
NR004345B | Page 13 of 14 | July 2014
ADSP-BF700/701/702/703/704/705/706/707
Silicon Anomaly List
31. 19000036 - System Reset Causes Emulator to Lose Connectivity:
DESCRIPTION:
Performing a system reset through the RCU (regardless of the source) causes the emulator to lose connectivity.
WORKAROUND:
There are two possible workarounds for this issue:
1. Re-connect the emulator if emulation is required after the system reset.
2. To maintain emulator connectivity a core-only reset can be performed instead of a system reset. In this case each peripheral and
infrastructure block that needs to be reset for the particular application will have to be individually reset as well.
APPLIES TO REVISION(S):
0.0
32. 19000038 - Writes to the SPI_SLVSEL Register Do Not Take Effect:
DESCRIPTION:
A single write to the SPI_SLVSEL register should change the state of the register and cause the modified software-controlled SPI slave
selects to assert or de-assert. Instead, a single write to SPI_SLVSEL has no effect.
WORKAROUND:
Any write to SPI_SLVSEL should be done twice (back-to-back) with the same value in order for the change to take effect.
APPLIES TO REVISION(S):
0.0
©2014 Analog Devices, Inc. All rights reserved. Trademarks and
registered trademarks are the property of their respective owners.
a
NR004345B | Page 14 of 14 | July 2014
www.analog.com