13.07.2015 Views

Intel 80200 Processor based on Intel XScale Microarchitecture

Intel 80200 Processor based on Intel XScale Microarchitecture

Intel 80200 Processor based on Intel XScale Microarchitecture

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong><str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong>Specificati<strong>on</strong> UpdateJanuary 22, 2003Notice: The <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor may c<strong>on</strong>tain design defects or errors known as errata.Characterized errata that may cause the product’s behavior to deviate from publishedspecificati<strong>on</strong>s are documented in this specificati<strong>on</strong> update.Order Number: 273415-011


Informati<strong>on</strong> in this document is provided in c<strong>on</strong>necti<strong>on</strong> with <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® products. No license, express or implied, by estoppel or otherwise, to any intellectualproperty rights is granted by this document. Except as provided in <str<strong>on</strong>g>Intel</str<strong>on</strong>g>'s Terms and C<strong>on</strong>diti<strong>on</strong>s of Sale for such products, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> assumes no liabilitywhatsoever, and <str<strong>on</strong>g>Intel</str<strong>on</strong>g> disclaims any express or implied warranty, relating to sale and/or use of <str<strong>on</strong>g>Intel</str<strong>on</strong>g> products including liability or warranties relating tofitness for a particular purpose, merchantability, or infringement of any patent, copyright or other intellectual property right. <str<strong>on</strong>g>Intel</str<strong>on</strong>g> products are notintended for use in medical, life saving, or life sustaining applicati<strong>on</strong>s.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> may make changes to specificati<strong>on</strong>s and product descripti<strong>on</strong>s at any time, without notice.Designers must not rely <strong>on</strong> the absence or characteristics of any features or instructi<strong>on</strong>s marked "reserved" or "undefined." <str<strong>on</strong>g>Intel</str<strong>on</strong>g> reserves these forfuture definiti<strong>on</strong> and shall have no resp<strong>on</strong>sibility whatsoever for c<strong>on</strong>flicts or incompatibilities arising from future changes to them.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® internal code names are subject to change.C<strong>on</strong>tact your local <str<strong>on</strong>g>Intel</str<strong>on</strong>g> sales office or your distributor to obtain the latest specificati<strong>on</strong>s and before placing your product order.Copies of documents which have an ordering number and are referenced in this document, or other <str<strong>on</strong>g>Intel</str<strong>on</strong>g> literature may be obtained by calling1-800-548-4725 or by visiting <str<strong>on</strong>g>Intel</str<strong>on</strong>g>'s website at http://www.intel.com.Copyright © <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Corporati<strong>on</strong>, 2003AlertVIEW, i960, AnyPoint, AppChoice, BoardWatch, BunnyPeople, CablePort, Celer<strong>on</strong>, Chips, Commerce Cart, CT C<strong>on</strong>nect, CT Media, Dialogic,DM3, EtherExpress, ETOX, FlashFile, GatherRound, i386, i486, iCat, iCOMP, Insight960, InstantIP, <str<strong>on</strong>g>Intel</str<strong>on</strong>g>, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> logo, <str<strong>on</strong>g>Intel</str<strong>on</strong>g>386, <str<strong>on</strong>g>Intel</str<strong>on</strong>g>486, <str<strong>on</strong>g>Intel</str<strong>on</strong>g>740,<str<strong>on</strong>g>Intel</str<strong>on</strong>g>DX2, <str<strong>on</strong>g>Intel</str<strong>on</strong>g>DX4, <str<strong>on</strong>g>Intel</str<strong>on</strong>g>SX2, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ChatPad, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Create&Share, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Dot.Stati<strong>on</strong>, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> GigaBlade, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> InBusiness, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Inside, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Inside logo, <str<strong>on</strong>g>Intel</str<strong>on</strong>g>NetBurst, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> NetStructure, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Play, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Play logo, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Pocket C<strong>on</strong>cert, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> SingleDriver, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> SpeedStep, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> StrataFlash, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> TeamStati<strong>on</strong>,<str<strong>on</strong>g>Intel</str<strong>on</strong>g> WebOutfitter, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Xe<strong>on</strong>, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> <strong>XScale</strong>, Itanium, JobAnalyst, LANDesk, LanRover, MCS, MMX, MMX logo, NetPort, NetportExpress, Optimizerlogo, OverDrive, Parag<strong>on</strong>, PC Dads, PC Parents, Pentium, Pentium II Xe<strong>on</strong>, Pentium III Xe<strong>on</strong>, Performance at Your Command, ProShare,RemoteExpress, Screamline, Shiva, SmartDie, Soluti<strong>on</strong>s960, Sound Mark, StorageExpress, The Computer Inside, The Journey Inside, This Way In,TokenExpress, Trillium, Viv<strong>on</strong>ic, and VTune are trademarks or registered trademarks of <str<strong>on</strong>g>Intel</str<strong>on</strong>g> Corporati<strong>on</strong> or its subsidiaries in the United States andother countries.*Other names and brands may be claimed as the property of others.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


C<strong>on</strong>tentsRevisi<strong>on</strong> History ......................................................................................... 5Preface....................................................................................................... 6Summary Table of Changes....................................................................... 7Identificati<strong>on</strong> Informati<strong>on</strong>...........................................................................11Errata ....................................................................................................... 13Specificati<strong>on</strong> Changes ............................................................................. 36Specificati<strong>on</strong> Clarificati<strong>on</strong>s ....................................................................... 39Documentati<strong>on</strong> Changes ......................................................................... 40<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 3


This Page Intenti<strong>on</strong>ally Left Blank4 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Revisi<strong>on</strong> HistoryscDate Versi<strong>on</strong> Descripti<strong>on</strong>1/22/2003 0118/05/2002 0104/2/2002 00912/20/01 00809/24/01 007Added Specificati<strong>on</strong> Changes 4 and 5.Added Documentati<strong>on</strong> Change 15.Added errata 47 through 49.Revised and moved Specificati<strong>on</strong> Change 1 to Specificati<strong>on</strong> Clarificati<strong>on</strong> 2.Added Specificati<strong>on</strong> Clarificati<strong>on</strong> 3.Added Documentati<strong>on</strong> Changes 13 and 14.Added Errata 43 through 46.Added Document Changes 11 and 12.Added Errata 40, 41 and 42. Updated errata 5 and 34.Added Specificati<strong>on</strong> Change 3.Added Document Changes 9 and 10.Added Errata 38 and 39.Added Specificati<strong>on</strong> Change 2.Added Document Change 8.Added Device ID’s for C-0 Stepping.07/10/01 006Added Errata 34 through 37.Added C-0 Stepping column to Errata, Specificati<strong>on</strong> Changes and Specificati<strong>on</strong>Clarificati<strong>on</strong>s.Added Document Changes 6 and 7.Removed “MALAY” from Topside Markings.Added JTAG Device IDs to Device ID Registers.Corrected page number in Document Change 2 heading.Added Affected Document to Document Changes 2 through 5.05/05/01 005 Corrected JTAG ID in Document Change1.04/04/01 004Added Errata 28 through 33.Added Specificati<strong>on</strong> Clarificati<strong>on</strong> 1.Added Document Changes 2 through 5.12/08/00 003Added Errata 20 through 27.Added Step A-1 column to Errata.Added Specificati<strong>on</strong> Change 2.Added Document Change 1.Added A-1 Stepping row to Device ID Registers09/29/00 002 Added errata 17, 18 and 19.09/25/00 001This is the new Specificati<strong>on</strong> Update document. It c<strong>on</strong>tains all identified erratapublished prior to this date.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 5


PrefacePrefaceThis document is an update to the specificati<strong>on</strong>s c<strong>on</strong>tained in the Affected Documents/RelatedDocuments table below. This document is a compilati<strong>on</strong> of device and documentati<strong>on</strong> errata,specificati<strong>on</strong> clarificati<strong>on</strong>s and changes. It is intended for hardware system manufacturers andsoftware developers of applicati<strong>on</strong>s, operating systems, or tools.Informati<strong>on</strong> types defined in Nomenclature are c<strong>on</strong>solidated into the specificati<strong>on</strong> update and areno l<strong>on</strong>ger published in other documents.This document may also c<strong>on</strong>tain informati<strong>on</strong> that was not previously published.Affected Documents/Related DocumentsTitle Order #<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual 273411<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Datasheet 273414<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80310 I/O <str<strong>on</strong>g>Processor</str<strong>on</strong>g> Chipset with <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Design Guide 273354<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80312 I/O Compani<strong>on</strong> Chip Developer’s Manual 273410<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80312 I/O Compani<strong>on</strong> Chip Specificati<strong>on</strong> Update 273416NomenclatureErrata are design defects or errors. These may cause the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80303 I/O <str<strong>on</strong>g>Processor</str<strong>on</strong>g>’s behavior todeviate from published specificati<strong>on</strong>s. Hardware and software designed to be used with any givenstepping must assume that all errata documented for that stepping are present <strong>on</strong> all devices.Specificati<strong>on</strong> Changes are modificati<strong>on</strong>s to the current published specificati<strong>on</strong>s. These changeswill be incorporated in any new release of the specificati<strong>on</strong>.Specificati<strong>on</strong> Clarificati<strong>on</strong>s describe a specificati<strong>on</strong> in greater detail or further highlight aspecificati<strong>on</strong>’s impact to a complex design situati<strong>on</strong>. These clarificati<strong>on</strong>s will be incorporated inany new release of the specificati<strong>on</strong>.Documentati<strong>on</strong> Changes include typos, errors, or omissi<strong>on</strong>s from the current publishedspecificati<strong>on</strong>s. These will be incorporated in any new release of the specificati<strong>on</strong>.Note:Errata remain in the specificati<strong>on</strong> update throughout the product’s lifecycle, or until a particularstepping is no l<strong>on</strong>ger commercially available. Under these circumstances, errata removed from thespecificati<strong>on</strong> update are archived and available up<strong>on</strong> request. Specificati<strong>on</strong> changes, specificati<strong>on</strong>clarificati<strong>on</strong>s and documentati<strong>on</strong> changes are removed from the specificati<strong>on</strong> update when theappropriate changes are made to the appropriate product specificati<strong>on</strong> or user documentati<strong>on</strong>(datasheets, manuals, etc.).6 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Summary Table of ChangesSummary Table of ChangesThe following table indicates the errata, specificati<strong>on</strong> changes, specificati<strong>on</strong> clarificati<strong>on</strong>s, ordocumentati<strong>on</strong> changes which apply to the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80303 I/O <str<strong>on</strong>g>Processor</str<strong>on</strong>g> product. <str<strong>on</strong>g>Intel</str<strong>on</strong>g> may fix someof the errata in a future stepping of the comp<strong>on</strong>ent, and account for the other outstanding issuesthrough documentati<strong>on</strong> or specificati<strong>on</strong> changes as noted. This table uses the following notati<strong>on</strong>s:Codes Used in Summary TableSteppingPageX: Errata exists in the stepping indicated. Specificati<strong>on</strong> Change orClarificati<strong>on</strong> that applies to this stepping.(No mark)or (Blank box): This erratum is fixed in listed stepping or specificati<strong>on</strong> change does notapply to listed stepping.(Page):Page locati<strong>on</strong> of item in this document.StatusDoc:PlanFix:Fixed:NoFix:Document change or update will be implemented.This erratum may be fixed in a future stepping of the product.This erratum has been previously fixed.There are no plans to fix this erratum.RowChange bar to left of table row indicates this erratum is either new ormodified from the previous versi<strong>on</strong> of the document.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 7


Summary Table of ChangesErrata (Sheet 1 of 2)No.SteppingsA-0 A-1 B-0 C-0 D-0Page Status Errata1 X X 13 FixedBranch and Link instructi<strong>on</strong> does not branch after BranchTarget Buffer (BTB) invalidate2 X X X X X 13 NoFix Multiple ECC errors reported <strong>on</strong> a single transacti<strong>on</strong>3 X X 13 FixedPerformance M<strong>on</strong>itor C<strong>on</strong>trol Register (PMCR) needs anextra write <strong>on</strong> initial enable of branch count4 X X 13 FixedInvalidates and cleans of the Translati<strong>on</strong> Look-aside Buffer(TLB) and cache, will PIDify the address5 X X X X X 14 NoFix External abort is missed when lock command is outstanding6 X X 14 Fixed Data Cache generates imprecise aborts <strong>on</strong> Preload (PLD)7 X X X X X 14 NoFix Dynamic steering of interrupts results in recursive interrupts8 X X 14 Fixed Back to back aborts <strong>on</strong> store requests cause incorrect data9 X X X X X 15 NoFix10 X X 15 Fixed11 X X 15 Fixed12 X X 15 FixedLast abort is missed <strong>on</strong> read/write/write sequence withexternal abortsClock Counter (CCNT) needs to be reset before using64-divide modeIncorrect interacti<strong>on</strong> between RX ready flag and writing to theTX registerThe overflow bit in the Performance M<strong>on</strong>itor Unit (PMU) isset at 0xffffffff in 64-divide mode instead of 013 X X 15 FixedPerformance M<strong>on</strong>itor Unit overflow err<strong>on</strong>eously clearsprevious overflow flag14 X X 16 Fixed Preload instructi<strong>on</strong> may stall for up to three cycles15 X X 16 Fixed16 X X 16 Fixed17 X X X X X 17 NoFix18 X 18 FixedDebug overflow flag not set when debugger writes RX atsame time as handler reads RXInstructi<strong>on</strong> executes multiple times under certain codesequencesBoundary scan is not fully compliant to the IEEE 1149.1specificati<strong>on</strong>Store of less than a word length, corrupts data of a previousaborting store19 X X 18 FixedBack to back I/O transacti<strong>on</strong>s are not synchr<strong>on</strong>ized asspecified20 X X X X X 19 NoFix Drain is not flushed correctly when stalled in the pipeline21 X X X X X 19 NoFixUndefined data processing-'like' instructi<strong>on</strong>s are interpretedas an MSR instructi<strong>on</strong>22 X X X X X 20 NoFix Debug unit synchr<strong>on</strong>izati<strong>on</strong> with the TXRXCTRL register23 X X X X X 20 NoFixSynchr<strong>on</strong>izati<strong>on</strong> Request is not asserted when the DataCache Unit pipe is empty24 X X 20 Fixed Data Cache parity evicti<strong>on</strong>25 X X 21 FixedDirty bits are not cleared <strong>on</strong> invalidate by address to DataCache Unit26 X X 21 Fixed Vector trap is lost in the presence of a stall27 X X X X X 21 NoFix Extra circuitry is not JTAG boundary scan compliant28 X X X X X 22 NoFixIncorrect decode of Unindexed Mode, using AddressingMode 5, can corrupt protected registers8 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Summary Table of ChangesErrata (Sheet 2 of 2)No.SteppingsA-0 A-1 B-0 C-0 D-0Page Status Errata29 X X X X X 22 NoFix Load immediately following a DMM flush entry is also flushed30 X X X X X 22 NoFix Trace Buffer does not operate below 1.3 V31 X X 23 FixedThumb branch with the Branch Target Buffer enabled, can goto the wr<strong>on</strong>g address32 X X X X X 23 NoFix Back to back external aborts can cause a hang33 X X X X X 23 NoFix Data Cache Unit can stall for a single cycle34 X X X X X 24 NoFixAborted Store that Hits the Data Cache May MarkWrite-Back Data as Dirty35 X X X 24 FixedData Cache Unit Signals Incorrect Number of Misses orMemory Operati<strong>on</strong>s to the Performance M<strong>on</strong>itoring Unit36 X X X 25 Fixed Incorrect ECC Attribute Used <strong>on</strong> Instructi<strong>on</strong> Fetch37 X X X 25 Fixed Performance M<strong>on</strong>itoring Unit May Miscount SWI/UNDEFs38 X X X 26 Fixed39 X X X 27 Fixed40 X X X X 28 Fixed41 X X 31 Fixed42 X X 31 Fixed43 X X X X X 32 NoFix44 X X X X X 32 NoFix45 X X X X 33 Fixed46 X X 34 Fixed47 X X X X X 34 NoFix48 X X X X X 35 NoFix49 X X X X X 35 NoFixTLB Lookup in Special Debug State May Use Incorrect PageAttribute Bit Values <strong>on</strong> Subsequent Code FetchesCP15 Data Cache Unlock Command Can Cause Unlock inUser Mode or when Flushed from the Pipe in SupervisorModeStore to cacheable memory, interrupted by an excepti<strong>on</strong>,may inadvertently write to memoryData cache dirty bits may be corrupted if a line invalidate isfollowed immediately by a storeData cache dirty bits may be corrupted if a bus error <strong>on</strong> acache line fill is followed immediately by a storePerformance M<strong>on</strong>itor Unit event 0x1 can be incrementederr<strong>on</strong>eously by unrelated eventsIn Special Debug State, back-to-back memory operati<strong>on</strong>s —where the first instructi<strong>on</strong> aborts — may cause a hangInstructi<strong>on</strong> Memory Management Unit address translati<strong>on</strong> isturned off for the first fetch after exiting Special Debug StateData cache dirty bits may be corrupted if a store to cacheablememory occurs during a tag replacement for a differentcache lineAccesses to the CP15 ID register with opcode2 > 0b001returns unpredictable valuesDisabling and re-enabling the MMU can hang the core orcause it to execute the wr<strong>on</strong>g codeUpdating the JTAG parallel registers requires an extra TCKrising edge<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 9


Summary Table of ChangesSpecificati<strong>on</strong> ChangesNo.SteppingsA-0 A-1 B-0 C-0 D-0Page Status Specificati<strong>on</strong> Changes1 X X X X X 39 Doc Revised and moved to Specificati<strong>on</strong> Clarificati<strong>on</strong> 2.2 X X X X X 36 Doc Drowsy Mode has been De-Specified3 X X 36 New ECC Disable Bit Available <strong>on</strong> the C-0 and D-0 Step4 X 36 200MHz <str<strong>on</strong>g>Processor</str<strong>on</strong>g> Available5 X 37 Extended Temperature Products AvailableSpecificati<strong>on</strong> Clarificati<strong>on</strong>sNo.SteppingsA-0 A-1 B-0 C-0 D-0Page Status Specificati<strong>on</strong> Clarificati<strong>on</strong>s1 X X X X X 39 Doc TRST# Usage2 X X X X X 39 Doc STRD and LDRD Instructi<strong>on</strong>s3 X X X X X 39 Doc Write Coalescing with the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80312 I/O Compani<strong>on</strong> ChipDocumentati<strong>on</strong> ChangesNo. Document Revisi<strong>on</strong> Page Status Documentati<strong>on</strong> Changes1 273411-002 40 Doc Secti<strong>on</strong> C.2.4.1, Table C-42 273411-002 40 Doc Example 6-3 <strong>on</strong> page 6-12 may not work properly3 273411-002 41 DocFigure 13-12 <strong>on</strong> page 13-39 and Figure 13-13 <strong>on</strong> page 13-41 show incorrectsignal states4 273411-002 41 Doc Secti<strong>on</strong> A.2 <strong>on</strong> page A-2 has incorrect text5 273411-002 41 Doc Secti<strong>on</strong> B.2.3.1 <strong>on</strong> page B-6 has incorrect text6 273411-002 41 Doc Table 7-3 <strong>on</strong> page 7-4 shows incorrect register access7 273411-002 41 Doc Table 7-15 <strong>on</strong> page 7-13 shows incorrect register access8 273411-002 42 DocAll References to Drowsy Mode should be Removed from the <str<strong>on</strong>g>80200</str<strong>on</strong>g>Developer’s Manual9 273411-002 42 Doc Table 11-6 <strong>on</strong> page 11-10 has a new bit functi<strong>on</strong> for ECTST.3110 273411-002 42 Doc Figure C-2 <strong>on</strong> page C-7 shows an incorrect state11 273411-002 42 Doc Example code is incorrect <strong>on</strong> page 13-1512 273411-002 42 Doc Example code is incorrect <strong>on</strong> page 13-4513 273411-002 42 Doc Number of clocks is incorrect <strong>on</strong> page 8-214 273411-002 43 Doc Figure 10-12 <strong>on</strong> page 10-22 shows incorrect BE# value15 273411-002 43 Doc Example code is incorrect <strong>on</strong> page 7-1710 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Identificati<strong>on</strong> Informati<strong>on</strong>Identificati<strong>on</strong> Informati<strong>on</strong>MarkingsTopside MarkingsFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>Mxxx{FPO#}SLxxxINTEL © ‘2000M<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g>Die Details (Sheet 1 of 2)Part NumberSteppingQDF/Specificati<strong>on</strong>NumberVoltage(V)<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ®<str<strong>on</strong>g>80200</str<strong>on</strong>g><str<strong>on</strong>g>Processor</str<strong>on</strong>g>Speed(MHz)NotesFW<str<strong>on</strong>g>80200</str<strong>on</strong>g> A-0 Q198 1.3 333-733 Samples - limited testingFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M400FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M600FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733A-1A-1A-1A-1SL589SL58BSL58CQ2891.31.51.51.5up to 400up to 600up to 733up to 733Limited Producti<strong>on</strong>Limited Producti<strong>on</strong>Limited Producti<strong>on</strong>General SamplesFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M400FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M600FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733B-0B-0B-0SL58DSL58ESL58F1.31.51.5up to 400up to 600up to 733Not Producti<strong>on</strong> MaterialNot Producti<strong>on</strong> MaterialNot Producti<strong>on</strong> MaterialFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M600FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M400FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M600FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733C-0C-0C-0C-0C-0Q308Q309SL5YHSL5YJSL5YK1.51.51.31.51.5up to 600up to 733up to 400up to 600up to 733General SamplesGeneral SamplesProducti<strong>on</strong> MaterialProducti<strong>on</strong> MaterialProducti<strong>on</strong> Material<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 11


Identificati<strong>on</strong> Informati<strong>on</strong>Die Details (Sheet 2 of 2)Part NumberSteppingQDF/Specificati<strong>on</strong>NumberVoltage(V)<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ®<str<strong>on</strong>g>80200</str<strong>on</strong>g><str<strong>on</strong>g>Processor</str<strong>on</strong>g>Speed(MHz)NotesFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M600FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M200FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M400FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M600FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733FW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M200TFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M400TFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M600TFW<str<strong>on</strong>g>80200</str<strong>on</strong>g>M733TD-0D-0D-0D-0D-0D-0D-0D-0D-0D-0Q367Q368SL6WLSL676SL677SL678SL6WMSL6WNSL6WPSL6WQ1.51.51.11.31.51.51.11.31.51.5up to 600up to 733up to 200up to 400up to 600up to 733up to 200up to 400up to 600up to 733General SamplesGeneral SamplesProducti<strong>on</strong> MaterialProducti<strong>on</strong> MaterialProducti<strong>on</strong> MaterialProducti<strong>on</strong> MaterialExt Temp. Prod. MaterialExt Temp. Prod. MaterialExt Temp. Prod. MaterialExt Temp. Prod. MaterialDevice ID RegistersDevice andStepping<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong>(ARM* architecture compliant)Device ID (CP15, Register0 - opcode_2=0)JTAG Device IDA-0 0x69052000 0x09263013A-1 0x69052001 0x19263013B-0 0x69052002 0x29263013C-0 0x69052003 0x39263013D-0 0x69052004 0x4926301312 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


ErrataErrata1. Branch and Link instructi<strong>on</strong> does not branch after Branch Target Buffer(BTB) invalidateProblem:A branch and link (BL) instructi<strong>on</strong> after a BTB invalidate can branch to the wr<strong>on</strong>g address. Thiscould result in incorrect software operati<strong>on</strong>. The BTB invalidate can happen with a CP15 register 7functi<strong>on</strong>, a write to the Process ID register, or when the instructi<strong>on</strong> cache is invalidated via CP15register 7 functi<strong>on</strong>.Workaround: Flush the executi<strong>on</strong> pipeline after code that invalidates the BTB. For example, the followinginstructi<strong>on</strong> does this:SUB PC, PC, #4 ;flush the pipeStatus: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.2. Multiple ECC errors reported <strong>on</strong> a single transacti<strong>on</strong>Problem:Workaround:A multi-bit ECC error is logged <strong>on</strong> more than <strong>on</strong>e 64-bit bus cycle of a cache line fill. In somesituati<strong>on</strong>s (specifically when a store is issued so<strong>on</strong> after the cache line fill), the bus c<strong>on</strong>trolleridentifies an extra error back to the core. The effect is that multiple data aborts are taken. The extraabort occurs so<strong>on</strong> after the real abort (before the link register of the first abort is saved off). Theeffect is to lose the original link register. This can be identified by detecting when the link registerpoints to the beginning of the data abort handler and that <strong>on</strong>ly <strong>on</strong>e error is logged in the busc<strong>on</strong>troller registers.Software can detect the situati<strong>on</strong> if it occurs, but recovery may be impossible. Systems have littlealternative other than logging the error and returning back to a stable state, which may entail asystem restart.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.3. Performance M<strong>on</strong>itor C<strong>on</strong>trol Register (PMCR) needs an extra write <strong>on</strong>initial enable of branch countProblem:Workaround:When first enabling the counting of event 0x5, branch instructi<strong>on</strong> executed, the PerformanceM<strong>on</strong>itoring Unit can incorrectly count a branch that never occurs.Write the PMCR register twice. The first time the Counter Rest bit is set and the Enable bit is a“d<strong>on</strong>’t care”. The sec<strong>on</strong>d time, both the Counter Reset and Enable bits must be set.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.4. Invalidates and cleans of the Translati<strong>on</strong> Look-aside Buffer (TLB) andcache, will PIDify the addressProblem:Workaround:When invalidating of cleaning a TLB or cache entry, the address is getting ORed by the ProcessID. This issue <strong>on</strong>ly occurs when the first 7 bits of the address are zero and the Process ID is ineffect.Always supply a Modified Virtual Address (MVA) to these functi<strong>on</strong>s, or disable the PID byzeroing it before performing these operati<strong>on</strong>.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 13


Errata5. External abort is missed when lock command is outstandingProblem:A bus abort occurs <strong>on</strong> a code fetch while an instructi<strong>on</strong> TLB or I-Cache lock MCR, Move toCoprocessor from ARM Register, command is outstanding. The <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> fails toabort, instead executing the instructi<strong>on</strong> returned <strong>on</strong> the aborting transacti<strong>on</strong>. Parity errors are notaffected. The bus abort may be due to either an ABORT pin asserti<strong>on</strong> or a multi-bit ECC error.Workaround: Branch flush after every I-TLB or I-Cache lock. For example, the following instructi<strong>on</strong> does this:SUB PC, PC #4 ;flush the pipeStatus: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.6. Data Cache generates imprecise aborts <strong>on</strong> Preload (PLD)Problem:Workaround:Even though all excepti<strong>on</strong>s generated by PLD are supposed to be ignored, excepti<strong>on</strong>s caused byparity, ECC, and bus aborts are not currently ignored. These errors can be generated either by thedata being pre-loaded or the data being evicted. Errors due to the evicted data should not be maskedsince these errors can not be safely ignored.Systems may be able to avoid external aborts by ensuring that the page table prohibits access tothese areas of memory. Parity errors and multi-bit ECC errors are not predictable and could in rarecases generate excepti<strong>on</strong>s.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.7. Dynamic steering of interrupts results in recursive interruptsProblem:Workaround:If the Performance M<strong>on</strong>itoring Unit (PMU) or Bus C<strong>on</strong>troller Unit (BCU) interrupts are unmaskedwhen steering is changed via INTSTR, then any previously captured interrupt is not cleared. Thisresults in multiple interrupt excepti<strong>on</strong>s.Mask interrupts in INTCTL before changing the PMU steering.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.8. Back to back aborts <strong>on</strong> store requests cause incorrect dataProblem:Workaround:When two back to back burst store requests get aborted, external bus ABORT pin <strong>on</strong>ly, then the<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> sends incorrect data <strong>on</strong> the external bus for the next request.Systems that use the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® 80312 I/O compani<strong>on</strong> chip do not encounter this problem, since it doesnot support multiple outstanding memory requests. For a pipelined memory accessimplementati<strong>on</strong>, there is no way to avoid the possibility of a corrupted store. The <strong>on</strong>ly suggesti<strong>on</strong>is, to avoid having that store being the <strong>on</strong>e that is necessary for your data abort handler to report outdebugging and failure informati<strong>on</strong>. Because <strong>on</strong>ly the first store after the pair of aborts is affected, adummy store to n<strong>on</strong>-cacheable memory at the beginning of the data abort handler guarantees thatlater necessary stores in the handler are not corrupted.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.14 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata9. Last abort is missed <strong>on</strong> read/write/write sequence with external abortsProblem:Workaround:This errata occurs when a read/write/write sequence occurs <strong>on</strong> the external bus with all three beingaborted by asserti<strong>on</strong> of the external ABORT pin. The first two aborts are separated by <strong>on</strong>ly therequired single dead cycle and global ECC enable is <strong>on</strong>. If there is a write that does not abort afterthe read/write pair, this errata does not occur.Systems that use the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® 80312 I/O compani<strong>on</strong> chip do not encounter this problem, since it doesnot support multiple outstanding memory request. With other chipsets, this scenario is unlikely tooccur. If the sec<strong>on</strong>d store that aborts is already in the pipeline when the first abort occurs, then themachine state is exactly as expected (multiple aborts reported and the BCU registers have tworecorded aborts and the overflow bit is set). If the sec<strong>on</strong>d store is a store issued in the data aborthandler and then aborts, the abort is not reported. However, if you are getting aborted stores in thedata abort handler, something is seriously wr<strong>on</strong>g. If there was a valid reas<strong>on</strong> for getting an externalabort <strong>on</strong> a store in the data abort handler, doing a dummy n<strong>on</strong>-cacheable store at the beginning ofthe data abort handler fixes the state machine.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.10. Clock Counter (CCNT) needs to be reset before using 64-divide modeProblem:Workaround:If the clock counter register (CCNT) in the Performance M<strong>on</strong>itor Unit is not reset before setting theClock Counter Dived bit (PMNC.3) to count evert 64 th processor clock cycles, then the CCNTregister fails to increment.Reset the CCNT register before programming the clock counter divider bit in the PMNC.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.11. Incorrect interacti<strong>on</strong> between RX ready flag and writing to the TX registerProblem:Workaround:This problem <strong>on</strong>ly affects debug handlers or m<strong>on</strong>itors that use the TX/RX registers to read andwrite through the JTAG interface. The TR (TX ready) bit synchr<strong>on</strong>izes the writes to the TXregister. If the TR bit is clear, then software should be able to safely write to the TX register. Butwith this problem, even if the TR (TX ready) bit is clear, then software writes to the TX registermight not update the TX register.Debug handler workaround exists.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.12. The overflow bit in the Performance M<strong>on</strong>itor Unit (PMU) is set at 0xffffffff in64-divide mode instead of 0Problem:Workaround:In the Performance M<strong>on</strong>itoring Unit 64-divide mode, the overflow bit is set when CCNT reaches0xffffffff instead of when CCNT rolls over to 0.No workaround.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.13. Performance M<strong>on</strong>itor Unit overflow err<strong>on</strong>eously clears previous overflowflagProblem:Workaround:In the Performance M<strong>on</strong>itoring Unit, if <strong>on</strong>e of the overflow flags is set, PMNC[10:8], and anotheroverflow occurs, then the first overflow bit in PMNC[10:8] gets cleared.No workaround.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 15


Errata14. Preload instructi<strong>on</strong> may stall for up to three cyclesProblem:Workaround:A Preload (PLD) instructi<strong>on</strong> may stall if <strong>on</strong>e of the three operati<strong>on</strong>s before it is a memoryoperati<strong>on</strong>. The stall may be for up to three cycles even if these instructi<strong>on</strong>s are in the cache.Make sure the three instructi<strong>on</strong>s before a PLD instructi<strong>on</strong> are not memory operati<strong>on</strong>s.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.15. Debug overflow flag not set when debugger writes RX at same time ashandler reads RXProblem:Workaround:Typically the software debugger and the handler never access the RX register at the same timebecause of the RX handshaking via the RR bit in TXRXCTRL. However, during high-speeddownload, the debugger and handler bypass part of this handshaking. The debugger skips the checkto see whether the handler has read the previous data because ideally the handler is waiting for thenew data by the time the debugger does an Update_DR.The problem occurs because the debugger skips this check. In the test, the handler reads the firstdata word and stalls during the store. During this time the debugger scans in the sec<strong>on</strong>d word andstarts scanning in the third word. Then the handler unstalls and sees that the data is valid in RX. Soas it reads the data, at the same time the debugger completes scanning in the third word. It turns outthat the handler see this third word, not the sec<strong>on</strong>d word, which is OK since this is just an overflowc<strong>on</strong>diti<strong>on</strong>. But the problem is that the overflow flag is not set. So the handler c<strong>on</strong>tinues and storesthis data out, but it lost the sec<strong>on</strong>d word.So this is a problem for the debugger because the code and data it just downloaded is corrupted.The high-speed download is a feature for enhancing debugger performance during code download.A debugger can work around this for now by either not using it or restricting usage to memoryregi<strong>on</strong>s which are guaranteed to be fast enough not to run into this problem. The alternative routineis the normal write_mem functi<strong>on</strong>, which does the normal handshaking, although it can be muchslower depending <strong>on</strong> how the debugger implements the handshaking.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.16. Instructi<strong>on</strong> executes multiple times under certain code sequencesProblem:Workaround:If the following sequence of instructi<strong>on</strong>s executes:MCR invalidate TLBMCR any IFU (instructi<strong>on</strong> fetch unit) or IMMU commandCISC any instructi<strong>on</strong> that requires multiple issue cyclesInstructi<strong>on</strong>s nInstructi<strong>on</strong> n+1Then instructi<strong>on</strong> n+1 executes multiple timesBreak the MCR (Move to Coprocessor from ARM Register) sequence above with any instructi<strong>on</strong>,such as the CPWAIT routine described in secti<strong>on</strong> 2.3.3 of the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong><str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual, an ARM architecture compliantdocument.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.16 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata17. Boundary scan is not fully compliant to the IEEE 1149.1 specificati<strong>on</strong>Problem:Workaround:The IEEE Standard 1149.1 specifies the boundary scan logic to support two main goals:a. To allow the interc<strong>on</strong>necti<strong>on</strong>s between the various comp<strong>on</strong>ents to be tested, test data canbe shifted into all the boundary-scan register cells associated with comp<strong>on</strong>ent output pinsand loaded in parallel through the comp<strong>on</strong>ent interc<strong>on</strong>necti<strong>on</strong>s into those cells associatedwith inputs pins; andb. To allow the comp<strong>on</strong>ents <strong>on</strong> the board to be tested, the boundary-scan register can beused as a means of isolating <strong>on</strong>-chip system logic from stimuli received from surroundingcomp<strong>on</strong>ents while an internal self-test is performed. Alternatively, if the boundary-scanregister is suitably designed, it can permit a limited slow-speed static test of the <strong>on</strong>-chipsystem logic since it allows delivery of test data to the comp<strong>on</strong>ent and examinati<strong>on</strong> of thetest results. (IEEE std. 1149.1-1990, page 1-5)The <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor does not support the sec<strong>on</strong>d goal, because it does not support theopti<strong>on</strong>al INTEST or RUBIST instructi<strong>on</strong>s. The <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor is not required to providethese instructi<strong>on</strong>s, however, since it doesn't, this makes the following statement practically invalid.The IEEE std. 1149.1 descripti<strong>on</strong> of the SAMPLE/PRELOAD instructi<strong>on</strong> states that “When theSAMPLE/PRELOAD instructi<strong>on</strong> is selected, the state of all signals flowing through system pins(input or output) shall be loaded into the boundary scan register <strong>on</strong> the rising edge of the TCK inthe Capture-DR c<strong>on</strong>troller state.” (Page 7-8).The boundary scan cells of the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor bidirecti<strong>on</strong>al pads do not capture the datadriven from the <strong>on</strong>-chip system logic to the pins when these pads are acting as outputs. This would<strong>on</strong>ly be useful if a customer was trying to capture the data driven from the <strong>on</strong>-chip logic duringnormal operati<strong>on</strong> of the assembled board. However, the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor does not allowsingle stepping of its clocks. Thus, even if the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor did provide the compliantboundary scan cell, it would be extremely difficult (or impossible) to synch the boundary scanlogic with the state of the <strong>on</strong>-chip logic. Therefore, this feature of the boundary scan cells is notuseful. This has NO effect <strong>on</strong> the customer's ability to determine the integrity of theinterc<strong>on</strong>necti<strong>on</strong>s <strong>on</strong> their boards which is what the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor boundary scan logicwas designed to support.No workaround.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 17


Errata18. Store of less than a word length, corrupts data of a previous aborting storeProblem:If there is a store instructi<strong>on</strong> that hits the cache but receives a data TLB abort, and the nextinstructi<strong>on</strong> was another store with a different byte footprint within an aligned 32 bit word (seebelow), the cache data may be modified in some or all of the bytes that would have been written bythe store.The abort will be taken, but the aborted store may partially modify the cache data.This means that a user process may be able to modify up to three bytes of <strong>on</strong>e word in a protectedmemory regi<strong>on</strong> before going to the abort handler.If the abort handler removes the cause of the abort and re-executes the aborting instructi<strong>on</strong> withouta fault, the memory locati<strong>on</strong> will now be correct with the stored value.If the aborting store is not re-executed:If the aborting store was to a write-through regi<strong>on</strong>, <strong>on</strong>ly the cached copy of line will be updated.This modified data will never be evicted to external memory. If the abort handler invalidates thatcache line in the cache, memory will now be correct. Invalidating that line is safe because externalmemory has a coherent copy of that data at all times.If the memory regi<strong>on</strong> is not write-through, the cache line can be invalidated, but any other data inthat line that has been modified but not updated in external memory will be lost. There is no cleanway for the abort handler to recover the data that was modified by the aborting store.Footprint Cases:Aborting Instructi<strong>on</strong> Next Instructi<strong>on</strong> Resultstr strb, strh failstr str passstrh (efa(1) = 0) strb, strh (efa(1) = 1) failstrh (efa(1) = 0) str, strh (efa(1) = 0) passstrh (efa(1) = 1) strb, strh (efa(1) = 0) failstrh (efa(1) = 1) str, strh (efa(1) = 1) passstrbstrbstrb (different efa(1:0)),strh (different efa(1))str, strh (same efa(1),strb (same efa(1:0))failpassWorkaround:If data aborts are rare in the system and indicate broken user code to be fixed, you may not beaffected by the problem.If you are affected, <strong>on</strong>e workaround is to use write-through memory, and in the data abort handlerfor any store, invalidate the data cache line at the address of the store.Status: Fixed. Fixed <strong>on</strong> A-1 stepping. See the Table “Summary Table of Changes” <strong>on</strong> page 7.18 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata19. Back to back I/O transacti<strong>on</strong>s are not synchr<strong>on</strong>ized as specifiedProblem:Loads or stores to memory with the page table attributes X=0, C=0, B=0 (I/O memory) should goout to the bus <strong>on</strong>e at a time. Instructi<strong>on</strong> executi<strong>on</strong> should cease so<strong>on</strong> after the memory instructi<strong>on</strong> isissued until any imprecise data aborts generated by the memory instructi<strong>on</strong> are reported. Becauseseveral more instructi<strong>on</strong>s may execute after the memory instructi<strong>on</strong> before the core stalls, theimprecise data aborts are not guaranteed to be precise (reported <strong>on</strong> the memory instructi<strong>on</strong>generating the fault), but will be reported within three instructi<strong>on</strong>s of the instructi<strong>on</strong> triggering theabort.On the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor, the above specificati<strong>on</strong> breaks for back to back memory requests toI/O memory. If two or more memory requests to I/O memory space are within three instructi<strong>on</strong>s ofeach other, the core will stall correctly for the first instructi<strong>on</strong> <strong>on</strong>ly. Instructi<strong>on</strong> executi<strong>on</strong> willresume before the subsequent I/O transacti<strong>on</strong>s have completed.The executi<strong>on</strong> of these instructi<strong>on</strong>s works correctly. The problem is that any imprecise data aborts<strong>on</strong> the affected memory instructi<strong>on</strong>s may be reported much later than the three- instructi<strong>on</strong> windowin the specificati<strong>on</strong>.Workaround:I/O memory transacti<strong>on</strong>s will correctly go <strong>on</strong> the <str<strong>on</strong>g>Intel</str<strong>on</strong>g>® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor bus <strong>on</strong>e at a time (each<strong>on</strong>e finishing completely before any subsequent memory transacti<strong>on</strong>s are issued).If the customer is not using I/O memory to guarantee that imprecise data aborts (external bus abortsor ECC memory aborts) are reported <strong>on</strong> an instructi<strong>on</strong> close to the issuing instructi<strong>on</strong>, there is noproblem and the customer will not be affected by this errata.For customers that are using I/O memory to guarantee that imprecise data aborts are reported <strong>on</strong> aninstructi<strong>on</strong> close to the issuing instructi<strong>on</strong>. Follow these I/O memory requests with twoinstructi<strong>on</strong>s, that are not memory transacti<strong>on</strong>s to I/O memory.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.20. Drain is not flushed correctly when stalled in the pipelineProblem:Implicati<strong>on</strong>:Workaround:In a load followed by a drain scenario, the load table walks and then gets a precise data abort. The<str<strong>on</strong>g>Intel</str<strong>on</strong>g> <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor fetches the address for the abort handler, but in the same cycle does not flushthe drain.Not a functi<strong>on</strong>al problem, but may effect performance.No workaround.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.21. Undefined data processing-'like' instructi<strong>on</strong>s are interpreted as an MSRinstructi<strong>on</strong>Problem:Workaround:The instructi<strong>on</strong> decoder allows undefined opcodes, which look similar to the MSR (Move to Statusregister from an ARM* register) instructi<strong>on</strong>, to be interpreted as an MSR instructi<strong>on</strong>. Themis-decoded MSR instructi<strong>on</strong> also adds a SUBNV PC, 0x4 to the instructi<strong>on</strong> flow.Do not use undefined opcodes of this form:31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0- - - - 0 0 0 1 0 - 1 0 - - - - - - - - - - - - 0 0 1 0 - - - -- - - - 0 0 0 1 0 - 1 0 - - - - - - - - - - - - 0 1 0 0 - - - -- - - - 0 0 0 1 0 - 1 0 - - - - - - - - - - - - 0 1 1 0 - - - -Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 19


Errata22. Debug unit synchr<strong>on</strong>izati<strong>on</strong> with the TXRXCTRL registerProblem:Workaround:The RX bit in the TXRXCTRL (TX/RX C<strong>on</strong>trol) register comes from the JTAG clock domain tothe core clock domain, and several cycles are needed for the register in the core clock domain toupdate. During this time, a debugger which is running a fast JTAG clock, relative to the core clock,may read the bit before it updates in the register, thus reading the old value.The JTAG clock should be slower than the core clock.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.23. Synchr<strong>on</strong>izati<strong>on</strong> Request is not asserted when the Data Cache Unit pipe isemptyProblem:Workaround:When the 'Drain Write Buffer' command is issued, the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> should drain anymemory transacti<strong>on</strong>s in its own pipe and issue a synchr<strong>on</strong>izati<strong>on</strong> request <strong>on</strong> the external bus. If thedrain command is issued when there are no memory transacti<strong>on</strong>s in the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g>, thecommand does nothing. The <str<strong>on</strong>g>Intel</str<strong>on</strong>g> <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> recognizes that it is drained and assumes noacti<strong>on</strong> is necessary, therefore no synchr<strong>on</strong>izati<strong>on</strong> requests are driven <strong>on</strong> the external bus.See items #1 and #2 below:1. When a store needs to be drained, perform a load back from that locati<strong>on</strong> and introduce adependency.Example: str r2,[r1] ; r1 = memory mapped register, etc.ldr r2,[r1]mov r2,r2 ; nop with dependencyThis stalls the core correctly, but has some performance hit over the drain soluti<strong>on</strong>.2. Do any I/O transacti<strong>on</strong> (a memory request to a page with attributes X=C=B=0). The dummyI/O transacti<strong>on</strong> stalls the core until the I/O transacti<strong>on</strong> and all previous transacti<strong>on</strong>s havefinished.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.24. Data Cache parity evicti<strong>on</strong>Problem:If a line is evicted from the data cache (most likely by replacement, but possibly by an explicit datacache clean line command), depending <strong>on</strong> the timing of data returning from the bus, the parity errormay not be reported. The corrupted data may be written to external memory without any abortbeing triggered.This is seen if the following is true:1. There is a parity error in the data cache.2. It is in the first two words of an eight word aligned cache line.3. It is to write back memory.4. The data is dirty (not updated in external memory yet).If there are no parity errors introduced into the array, no problem is seen.Workaround: No workaround.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.20 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata25. Dirty bits are not cleared <strong>on</strong> invalidate by address to Data Cache UnitProblem:In write back memory (c=b=1, x=0 or x=1), if there is dirty data in the data cache and an 'invalidatedata cache line' operati<strong>on</strong> is performed <strong>on</strong> that cache line, then the dirty bits are not cleared in thecache array.At a later time, that modified data could be evicted from the cache to external memory. After aninvalidate by address of this line, that should never happen.Global cache invalidate is not affected by this.Workaround: Always do a 'clean D-cache line' to an address before doing a 'invalidate D-cache line'.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.26. Vector trap is lost in the presence of a stallProblem:Workaround:If a vector trap occurs at the same time as certain types of stalls <strong>on</strong> the core, it will cause the vectortrap to be lost.The specific types of stalls that cause this problem include:1. DTLB (Data Translati<strong>on</strong> Look-aside Buffer) miss.2. Buffer not available for valid memory operati<strong>on</strong>s in D2.3. Fill buffer complete (last word written to the fill buffer from external memory).This problem applies to all vector traps (except reset).The following sequence describes how to recreate the problem:• The SWI vector has a vector trap set <strong>on</strong> it.• An external memory access occurs before the SWI executes.• The SWI occurs.• Before going to the SWI handler, a vector trap should occur.• The memory stalls, caused by a DTLB miss (due to the memory accesses), and causes thevector trap to be ignored by the processor.• The vector at address 0x8 executes and c<strong>on</strong>tinues executi<strong>on</strong> from there (in Supervisor mode).The behavior is the same as if there was no vector trap.No workaround.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.27. Extra circuitry is not JTAG boundary scan compliantProblem:Workaround:The IEEE 1149.1 (JTAG) specificati<strong>on</strong> states that “when the HIGHZ instructi<strong>on</strong> is selected, allsystem logic outputs .... shall immediately be placed in an inactive drive state”. The JTAG unit <strong>on</strong>the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor creates an internal ‘float’ signal which is driven to the I/O pads. Thissignal is derived from the HIGHZ instructi<strong>on</strong>; however, the HIGHZ instructi<strong>on</strong> gets flopped by arising edge of TCK first before it’s able to ‘float’ the pads. This is in violati<strong>on</strong> of the JTAGspecificati<strong>on</strong>, specifically the term “immediately”. It is possible for TCK to stop after the HIGHZinstructi<strong>on</strong> is loaded and thus the pads may never ‘float’.Do not stop the JTAG clock (TCK).Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 21


Errata28. Incorrect decode of Unindexed Mode, using Addressing Mode 5, cancorrupt protected registersProblem:Workaround:The instructi<strong>on</strong> decoder incorrectly decodes the valid combinati<strong>on</strong> of P=0, U=1 and W=0, whenusing unindexed mode in addressing mode 5 (load and store coprocessor). In this case, the LDC orSTC should produce c<strong>on</strong>secutive address loads or stores, with no base update until the coprocessorsignals that it has received enough data. Instead, the instructi<strong>on</strong> gets separated into an LDR/STRand a CP access.The LDR/STR gets decoded as a post-index address, updating the base register. Due to thedecoding as post-index, the ‘opti<strong>on</strong>’ bits, normally reserved for the coprocessor in unindexedmode, will become the 8 bit offset value used in the base register update calculati<strong>on</strong>.The implicati<strong>on</strong> is that protected registers can be corrupted. This errata can cause the corrupti<strong>on</strong> ofFIQ registers, R13-R14, in user and system modes when the LDC instructi<strong>on</strong> is executed usingunindexed addressing mode. It can also cause the corrupti<strong>on</strong> of FIQ registers, R8-R12, in any modewhen the LDC instructi<strong>on</strong> is executed using unindexed addressing. The R13 register in debugmode may also be corrupted during an LDC in any mode. In the case of STC, <strong>on</strong>ly Rn is corrupted.Unexpected memory accesses can also occur. In the case of an LDC, any memory locati<strong>on</strong> may beaccessed, since the FIQ registers may be improperly used as the base register. In the case of anSTC, the memory word located at Rn+4 will be corrupted. This is the memory locati<strong>on</strong>immediately following the locati<strong>on</strong>s which should be modified by STC unindexed.Do not use unindexed addressing in addressing mode 5 - Load and Store Coprocessor.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.29. Load immediately following a DMM flush entry is also flushedProblem:Workaround:A load that immediately follows a data memory management (DMM) flush entry command, thatalso hits the data TLB, is also flushed. Therefore, the instructi<strong>on</strong> immediately following the flush isalso flushed from the data TLB.All flush entry commands to the data TLB must be followed by 2 nops. The first ensures that theerrata is not encountered, and the sec<strong>on</strong>d ensures that the speed path is not hit.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.30. Trace Buffer does not operate below 1.3 VProblem:Workaround:The trace buffer within the debug unit is not guaranteed to operate, due to voltage sensitivity, whenthe Vcc voltage supply is below 1.3 V.Make sure the voltage is above 1.3 V during debug.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.22 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata31. Thumb branch with the Branch Target Buffer enabled, can go to the wr<strong>on</strong>gaddressProblem:Workaround:A mispredicted 'not taken' thumb branch, with the branch target buffer (BTB) enabled, can causeincorrect program flow.C<strong>on</strong>diti<strong>on</strong>s to cause the problem:1. BTB must be enabled2. Thumb mode3. C<strong>on</strong>diti<strong>on</strong>al branch at address XXXX X1FC4. The branch must be predicted as taken, but then is not taken.Branch flush occurs but executi<strong>on</strong> c<strong>on</strong>tinues from the wr<strong>on</strong>g address, rather than just 'fallingthrough'.D<strong>on</strong>'t run thumb code with the BTB enabled.Status: Fixed. Fixed <strong>on</strong> B-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.32. Back to back external aborts can cause a hangProblem:Workaround:The following causes a bus hang:1.


Errata34. Aborted Store that Hits the Data Cache May Mark Write-Back Data as DirtyProblem:Workaround:When there is an aborted store that hits clean data in the data cache (data in an aligned four wordrange that has not been modified from the core since it was last loaded in from memory or cleaned),the data in the array is not modified (the store is blocked), but the dirty bit is set.When the line is then aged out of the data cache or explicitly cleaned, the data in that four wordrange is evicted to external memory, even though it has never been changed. In normal operati<strong>on</strong>this is nothing more than an extra store <strong>on</strong> the bus that writes the same data to memory that isalready there.Here is the boundary c<strong>on</strong>diti<strong>on</strong> where this might be visible:1. A cache line is loaded into the cache at address A.2. Another master externally modifies address A.3. A core store instructi<strong>on</strong> attempts to modify A, hits the cache, aborts because of MMUpermissi<strong>on</strong>s, and is backed out of the cache. That line normally is not marked dirty, butbecause of this errata is marked as dirty.4. The cache line at A then ages out or is explicitly cleaned. The original data from locati<strong>on</strong> Awill be evicted to external memory, overwriting the data written by the external master.This <strong>on</strong>ly happens when software is allowing an external master to modify memory that is,write-back or write-allocate in the <str<strong>on</strong>g>80200</str<strong>on</strong>g> page tables, and depending <strong>on</strong> the fact that the data is not'dirty' in the <str<strong>on</strong>g>80200</str<strong>on</strong>g> cache, to preclude the cached versi<strong>on</strong> from overwriting the external memoryversi<strong>on</strong>. When there are any semaphores or any other handshaking to prevent collisi<strong>on</strong>s <strong>on</strong> sharedmemory, this is not a problem.For this shared memory regi<strong>on</strong>, mark it as write-through memory in the <str<strong>on</strong>g>80200</str<strong>on</strong>g> page table. Thisprevents the data from ever being written out as dirty.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.35. Data Cache Unit Signals Incorrect Number of Misses or Memory Operati<strong>on</strong>sto the Performance M<strong>on</strong>itoring UnitProblem:Workaround:Under certain c<strong>on</strong>diti<strong>on</strong>s inside the Data Cache Unit pipeline, the DCU can allow an operati<strong>on</strong> tomove from the D2 pipe stage to the D3 pipe stage without the deasserti<strong>on</strong> of D2 stall. The operati<strong>on</strong>that does this is not properly signaled to the Performance M<strong>on</strong>itoring Unit and therefore the PMUcount of cache misses and memory operati<strong>on</strong>s can be lower than expected.No workaround.Status: Fixed. Fixed <strong>on</strong> C-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.24 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata36. Incorrect ECC Attribute Used <strong>on</strong> Instructi<strong>on</strong> FetchProblem:Workaround:On rare occasi<strong>on</strong>s an instructi<strong>on</strong> fetch uses the wr<strong>on</strong>g ECC attribute. This <strong>on</strong>ly occurs when ainstructi<strong>on</strong> fetch return from the external bus lines up with a invalidate of the BTB. BTBinvalidates are caused by PID changes, or MCR commands which invalidate the instructi<strong>on</strong> cacheor BTB. When this occurs a new fetch may get the ECC attribute of the returning fetch instead ofthe requested line. This can cause <strong>on</strong>e of two things to happen:1. A fetch, that should be checked for ECC errors, is not checked.2. A fetch, that should not be checked for ECC errors, generates an ECC prefetch abort in an<strong>on</strong>-ECC memory regi<strong>on</strong>. When this happens, the prefetch abort handler can usually safelyreturn to the aborting instructi<strong>on</strong>. When however, the processor was already in abort mode asthis occurred, r14 is modified, and the link to the original process may be lost.This errata is rare because it requires the processor to be executing from an ECC protected regi<strong>on</strong>,a branch to a n<strong>on</strong>-ECC regi<strong>on</strong> followed by a BTB invalidate all lined up appropriately with twoseparate instructi<strong>on</strong> cache misses.Software workarounds include:1. Do not use ECC. This errata does not apply when all page table entries are marked asn<strong>on</strong>-ECC regi<strong>on</strong>s.2. Do not flush the BTB or change the PID while in abort mode until the link register and SPSRhas been saved. When an ECC prefetch abort is generated for a n<strong>on</strong>-ECC regi<strong>on</strong>, simply retrythe offending instructi<strong>on</strong>.3. Drain the fill buffers before causing a BTB invalidate. Make sure the drain command and theinvalidate have the same memory ECC attributes.Status: Fixed. Fixed <strong>on</strong> C-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.37. Performance M<strong>on</strong>itoring Unit May Miscount SWI/UNDEFsProblem:Workaround:In some cases, depending <strong>on</strong> data cache activity, the signal coming from the debug unit indicatingto the Performance M<strong>on</strong>itoring Unit that a software interrupt or an undefined opcode event hasoccurred may be ignored. This leads to fewer than the actual number of software interrupts orundefined opcodes executed being reported in the PMU count.No workaround.Status: Fixed. Fixed <strong>on</strong> C-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 25


Errata38. TLB Lookup in Special Debug State May Use Incorrect Page Attribute BitValues <strong>on</strong> Subsequent Code FetchesProblem:Workaround:In Special Debug State (SDS) the Instructi<strong>on</strong> Translati<strong>on</strong> Look-aside Buffer (ITLB) is supposed toact like it is disabled. But both the cacheability and P-bit are not effected by the SDS bit. Therefore,they could be incorrect up<strong>on</strong> entering SDS and stay incorrect <strong>on</strong> subsequent code fetches in SDS.The potentially incorrect values for the cacheability bit and the P-bit are always logical <strong>on</strong>e, incases where logical zero was the appropriate value.Because <strong>on</strong>ly the instructi<strong>on</strong> TLB fetches are affected, the incorrect cacheability bit is not likely tobe noticed outside of a minor performance change (i.e., code which should be n<strong>on</strong>-cacheable maybe cached).In the <str<strong>on</strong>g>80200</str<strong>on</strong>g>, the P-bit is used for ECC protecti<strong>on</strong>. When the P-bit is incorrectly set and the busc<strong>on</strong>troller is c<strong>on</strong>figured for ECC protecti<strong>on</strong>, then n<strong>on</strong>-ECC memory may be interpreted as ECCmemory <strong>on</strong> code fetches. When the bus c<strong>on</strong>troller attempts to ‘correct’ code due to a perceivedsingle-bit ECC error, code corrupti<strong>on</strong> results. When a multi-bit error is detected err<strong>on</strong>eously, thecore hangs because the resulting abort does not be taken in SDS. This scenario can <strong>on</strong>ly occur in an<str<strong>on</strong>g>80200</str<strong>on</strong>g> system with code located in both ECC and n<strong>on</strong>-ECC protected memory.No workaround is available for the cacheability issue. When the system can be debuggedeffectively with ECC off, then ECC can be turned off globally in the BCU to prevent the P-bit codecorrupti<strong>on</strong>/hang problem.Status: Fixed. Fixed <strong>on</strong> C-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.26 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata39. CP15 Data Cache Unlock Command Can Cause Unlock in User Mode orwhen Flushed from the Pipe in Supervisor ModeProblem:Correct behavior for the “unlock data cache” command (mcr p15, 0, Rd, c9, c2, 1) issued in usermode, is to generate an invalid instructi<strong>on</strong> excepti<strong>on</strong> and not affect the state of the cache. Instead,the excepti<strong>on</strong> is generated, but the cache is unlocked anyway. In this case, the illegal instructi<strong>on</strong>event is generated. When the OS does not attempt to recover from illegal instructi<strong>on</strong>s, this erratumshould not be an issue.Workaround:A sec<strong>on</strong>dary effect of this erratum is, that even in a privileged mode, when an instructi<strong>on</strong> shouldexecute, the data cache unlock hardware activity can occur while the actual mcr instructi<strong>on</strong> is stillin the executi<strong>on</strong> pipeline. When an interrupt or some other event causes the instructi<strong>on</strong> to beflushed from the pipe, the hardware activity may still occur. It is likely that the instructi<strong>on</strong> executesshortly after returning from the handler, so unlocking the cache early probably would not be anissue, unless the event handler code makes an assumpti<strong>on</strong> about data cache locking.When user mode code is well c<strong>on</strong>trolled, the OS can detect that user code did the illegal operati<strong>on</strong>and report the error for software debugging purposes. Then re-code the user applicati<strong>on</strong> and tryagain.When code deliberately trying to crash the machine is a c<strong>on</strong>cern, here are possible ways to recoverif the cache is unlocked in user mode:1. When data cache locking is used with the knowledge of the OS to keep local copies of externaldata for performance, it is possible, but not graceful, for the OS to fix things. The OS woulddetect that the invalid instructi<strong>on</strong> fault was caused by a coprocessor 15 operati<strong>on</strong>, clean out thecache, and relock the data that was supposed to be locked. The offending user applicati<strong>on</strong>should be terminated.2. When data cache locking is used as part of the data cache as SRAM (allocated with theallocate data cache line operati<strong>on</strong>, rather than loading in existing memory), it becomes difficultfor the machine to recover. When any of the SRAM locati<strong>on</strong>s are evicted, external memory ata random locati<strong>on</strong> could be corrupted. One soluti<strong>on</strong> is, to immediately turn off the data cacheat the beginning of the invalid instructi<strong>on</strong> event handler, to avoid evicti<strong>on</strong>s in the cache. TheSRAM c<strong>on</strong>tents could then be copied to scratch memory, the cache cleaned and invalidated,and the SRAM reallocated and locked. At that point, the c<strong>on</strong>tents could be copied back in andoperati<strong>on</strong> could c<strong>on</strong>tinue.When early unlocking of the data cache in privileged modes is a c<strong>on</strong>cern, the following softwareworkarounds exist:1. Disable interrupts before unlocking the data cache, and ensure that no abort c<strong>on</strong>diti<strong>on</strong>s existaround the unlock code. Imprecise external data aborts and parity errors are still potentialissues, when software attempts to recover from these situati<strong>on</strong>s.2. Do not make assumpti<strong>on</strong>s about data cache lock state in the event handlers. When the eventhandler code does not require access to locked data cache regi<strong>on</strong>s, the early unlock istransparent, as the unlock mcr is executed <strong>on</strong>ce the handler is finished.Status: Fixed. Fixed <strong>on</strong> C-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 27


Errata40. Store to cacheable memory, interrupted by an excepti<strong>on</strong>, may inadvertentlywrite to memoryProblem:In some cases, if a store to a cacheable regi<strong>on</strong> of memory occurs simultaneously with an excepti<strong>on</strong>,the store will not be properly cancelled and may update memory. This may occur even if the storedid not have permissi<strong>on</strong> to write to that memory regi<strong>on</strong>, and no data abort will be recorded at thetime memory is incorrectly modified. It is important that developers review this erratum and assessthe impact to their specific applicati<strong>on</strong> to ensure that no potential exists for data corrupti<strong>on</strong>.This combinati<strong>on</strong> of events is required for the erratum to occur:1. A memory operati<strong>on</strong> occurs that requires a cache line fill, which in turn causes a cache lineevicti<strong>on</strong>. For example, a load or prefetch.2. A few cycles later, an excepti<strong>on</strong> event occurs. The following excepti<strong>on</strong> events will cause theerratum: interrupt, prefetch abort, instructi<strong>on</strong> breakpoint, invalid opcode fault, and imprecisedata abort. A precise data abort may not cause the erratum.3. The instructi<strong>on</strong> which is being flushed by the excepti<strong>on</strong> event is a store to write-back memory,and the store address coincides with the cache line that is being evicted to make room for thecache line fill.4. Returning data <strong>on</strong> the bus causes a data cache stall at a specific cycle.Result:The store writes to memory when it should not. If the store is to write-back memory, the cache lineis evicted and external memory is incorrectly updated as if that store had occurred. The excepti<strong>on</strong>return points to the store instructi<strong>on</strong>.If the store is to write-through memory, the store instructi<strong>on</strong> is properly flushed and externalmemory is not updated.Memory access permissi<strong>on</strong>s are not checked before the store updates the cache. This means thestore may change memory without permissi<strong>on</strong> and without taking an abort.If the store did a pre- or post-index update <strong>on</strong> its address, the register file correctly flushes theupdate. This means that if the store is executed <strong>on</strong> return from the excepti<strong>on</strong>, correct data will bestored into memory at the correct address.Example Manifestati<strong>on</strong>s:The following examples explain how the erratum may manifest itself. The examples are intendedto help developers assess the impact up<strong>on</strong> their applicati<strong>on</strong>s. Note that this is not an exhaustive list,there may be other examples depending up<strong>on</strong> how specific applicati<strong>on</strong> code is architected.a.) Copy <strong>on</strong> Write -In a multi-tasking OS, a process has read access to a shared memory regi<strong>on</strong>, but not write access.Up<strong>on</strong> a write, the data abort handler will create a physical copy of that regi<strong>on</strong> and allow writeaccess to that new regi<strong>on</strong>.In the failing case, the shared read-<strong>on</strong>ly regi<strong>on</strong> could be updated incorrectly and without a dataabort. Eventually, when the original process is returned to, a data abort will happen, but theproblem is that the memory has already been corrupted. Linux supports Copy <strong>on</strong> Write and ifactivated, could experience the erratum. Other OSes may also be affected.b.) Flags to memory shared with interrupt handler -28 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


ErrataIf there is a flag used to communicate between a process and the interrupt handler, and the store toset the flag is being set by the store that is interrupted, the interrupt handler may see the flag set, dothe required work, and clear the flag. Up<strong>on</strong> return to the interrupted process, the store instructi<strong>on</strong>would be executed and the flag set. The interrupted process would incorrectly assume that theinterrupt handler had not yet seen that flag and serviced it. This flag error could also occur betweentwo task switched processes.c.) Debug -Workaround:Instructi<strong>on</strong> breakpoints and prefetch aborts <strong>on</strong> a store can cause the erratum. If a user is singlestepping through code, stops with an instructi<strong>on</strong> breakpoint <strong>on</strong> a store, and then checks externalmemory for the pre-store value of the address the store is about to write to, the debugger may seethe post store value.The global workaround for the erratum would be to disable write-back cache within theapplicati<strong>on</strong>. This will ensure the erratum does not manifest itself. However, it is understood thatthis could be cumbersome in performance-sensitive applicati<strong>on</strong>s. As an alternative, developersmay simply prevent the c<strong>on</strong>diti<strong>on</strong>s from occurring simultaneously which would cause the erratumto be manifested. By preventing these c<strong>on</strong>diti<strong>on</strong>s, <strong>on</strong>e effectively has implemented a workaround.1. Disable write-back cache. This could apply to Linux-<str<strong>on</strong>g>based</str<strong>on</strong>g> applicati<strong>on</strong>s due to the fact thatLinux utilizes copy-<strong>on</strong>-write.2. Enable write-back cache and insure the code does not allow the simultaneous occurrence ofthe c<strong>on</strong>diti<strong>on</strong>s required to manifest the erratum.Here are some workaround opti<strong>on</strong>s for the specific examples listed above:a.) Copy <strong>on</strong> Write -This secti<strong>on</strong> is c<strong>on</strong>cerned with permissi<strong>on</strong>s as applied to first Linux and then to an embeddedreal-time c<strong>on</strong>troller. In Linux, Copy <strong>on</strong> Write, is a memory allocati<strong>on</strong> technique used to provide aperformance boost. The erratum can be avoided by setting the caching policy for a copy-<strong>on</strong>-writeread-protected page to write-through. There will be no memory access penalties because thememory is read-<strong>on</strong>ly. When a write occurs and a write-able copy is made, that memory cachepolicy should be set to write-back. Without this change, errors may occur.When c<strong>on</strong>cerned with a real-time c<strong>on</strong>troller, the purpose for using permissi<strong>on</strong>s usually is to detecta misbehaving pointer or for quickly detecting runaway code. This erratum <strong>on</strong>ly applies to themisbehaving pointer problem, which if missed <strong>on</strong> <strong>on</strong>e misuse will most likely be found <strong>on</strong> the next,resulting in the software problem being found and fixed.b.) Flags to memory shared with interrupt handler -The impact of this problem will most likely <strong>on</strong>ly involve a handful of sensitive variables for anembedded c<strong>on</strong>troller. That is because most variables are used within a task. Only some variables,which need to be passed from <strong>on</strong>e task to another task, will be affected. A classic example variablewould be a semaphore flag. These variables can be protected in <strong>on</strong>e of three ways:1. Locate the variable in locked cache or n<strong>on</strong>-evicting mini-cache. This is the ideal soluti<strong>on</strong> fortime critical variables such as those passed between an interrupt handler and a backgroundprocessing task. A n<strong>on</strong>-evicting mini-cache regi<strong>on</strong> can be created by setting up a mini-cachememory regi<strong>on</strong> and then limiting all access to that regi<strong>on</strong> to a 2K aligned address range.Because accesses are not outside the cache boundary, an evicti<strong>on</strong> does not occur and thememory behaves as if it were <strong>on</strong>-board RAM.2. Surround the write of these variables with interrupt disable/enable commands. This is oftenalready d<strong>on</strong>e because manipulati<strong>on</strong> of these variables exists in 'critical code' regi<strong>on</strong>s where an<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 29


Erratainterrupt between any of the instructi<strong>on</strong>s in the critical code regi<strong>on</strong> may cause an errorc<strong>on</strong>diti<strong>on</strong>. Modifying a semaphore is a typical critical code example.3. Use the atomic instructi<strong>on</strong>s, SWP or SWPB. Therefore, limiting the manipulati<strong>on</strong> of sensitivevariables to these instructi<strong>on</strong>s will avoid the erratum.c.) Debug / Breakpoints -Most debug handlers flush the cache when a break occurs, which reduces the potential for a cacheevicti<strong>on</strong> and reduces the potential for a system to be affected by the erratum. So there are few timesthis erratum should be seen in a debug sessi<strong>on</strong>, and misinterpreting an apparent bug may beavoided by knowing where this erratum might occur.Status: Fixed. Fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.30 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata41. Data cache dirty bits may be corrupted if a line invalidate is followedimmediately by a storeProblem: The dirty bits in the data cache can be corrupted by an Invalidate Data Cache Line command toaddress “A” immediately followed by any store to address “B” where address “B” and address “A”are to the same cache set (bits 9:5 of the two addresses are the same).This can lead to clean or invalid data being marked dirty in the cache, or dirty data in the cachebeing marked clean. Possible outcomes:1. Invalid data being marked dirty can lead to unpredictable four word stores to an unpredictableaddress in memory.2. Valid, but clean write-back data, being marked dirty can lead to unnecessary evicti<strong>on</strong>s toexternal memory.3. Valid dirty data being marked clean can lead to data corrupti<strong>on</strong>. External memory will not beupdated up<strong>on</strong> cache line replacement.Workaround: Do not perform a store operati<strong>on</strong> immediately following an Invalidate Data Cache Line command.Invalidate Data Cache Line is a supervisor mode instructi<strong>on</strong>. Placing a NOP between these twooperati<strong>on</strong>s will avoid the erratum.Status: Fixed. Fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.42. Data cache dirty bits may be corrupted if a bus error <strong>on</strong> a cache line fill isfollowed immediately by a storeProblem: This erratum is very similar to erratum #41. The problem is the same, but the root cause isdifferent. If certain types of bus errors occur, and a store to the cache occurs near the time when theerror is reported, the dirty bits in the array in the same set as the store may be corrupted. The buserrors that can cause this erratum are a multi-bit ECC error <strong>on</strong> a returning cache line fill orasserti<strong>on</strong> of the external ABORT pin <strong>on</strong> a returning cache line fill.This can lead to clean or invalid data being marked dirty in the cache, or dirty data in the cachebeing marked clean. Possible outcomes:1. Invalid data being marked dirty can lead to unpredictable four word stores to an unpredictableaddress in memory.2. Valid, but clean write-back data, being marked dirty can lead to unnecessary evicti<strong>on</strong>s toexternal memory.3. Valid dirty write-back data being marked clean can lead to data corrupti<strong>on</strong>. External memorywill not be updated up<strong>on</strong> cache line replacement.Bus errors reported <strong>on</strong> any store, or <strong>on</strong> loads that are smaller than 32 bytes will not cause this bug.Workaround: Set up the page tables such that unimplemented regi<strong>on</strong>s of memory do not have valid page tableentries. A precise data abort will occur <strong>on</strong> accesses to those regi<strong>on</strong>s and no bus error will be seen.Any regi<strong>on</strong> of memory that has valid memory locati<strong>on</strong>s and unimplemented memory locati<strong>on</strong>swithin <strong>on</strong>e page should be marked n<strong>on</strong>-cacheable to avoid cache line fills. This will preclude theerratum. An example of this might be a memory mapped register regi<strong>on</strong>.Any regi<strong>on</strong> of memory that may generate bus aborts that cannot be prevented by appropriate pagetable entries should be marked n<strong>on</strong>-cacheable.If there is some reas<strong>on</strong> that code must do a cache line fill that will have a chance of creating a busabort, then avoid store instructi<strong>on</strong>s in supervisor mode while potentially aborting cache line fillsare pending. The drain write buffer CP15 command issued right after the cache line fill can be usedto stall the core during these transacti<strong>on</strong>s.For any triggering abort that cannot be avoided by page table permissi<strong>on</strong>s or cacheability (such asmulti-bit ECC error <strong>on</strong> a cache line fill), there is no known workaround. Bus aborts should, ingeneral, be avoided during normal operati<strong>on</strong>.Status: Fixed. Fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 31


Errata43. Performance M<strong>on</strong>itor Unit event 0x1 can be incremented err<strong>on</strong>eously byunrelated eventsProblem:Event 0x1 in the performance m<strong>on</strong>itor unit (PMU) can be used to count cycles in which theinstructi<strong>on</strong> cache cannot deliver an instructi<strong>on</strong>. The <strong>on</strong>ly cycles counted should be those due to aninstructi<strong>on</strong> cache miss or an instructi<strong>on</strong> TLB miss. The following unrelated events in the core, willalso cause the corresp<strong>on</strong>ding count to increment when event number 0x1 is being m<strong>on</strong>itored:• Any architectural event (e.g. IRQ, data abort)• MSR instructi<strong>on</strong>s which alter the CPSR c<strong>on</strong>trol bits• Some branch instructi<strong>on</strong>s, including indirect branches and those mispredicted by the BTB• CP15 MCR instructi<strong>on</strong>s to registers 7, 8, 9, or 10 which involve the instructi<strong>on</strong> cache or theinstructi<strong>on</strong> TLBEach of the preceding items may cause the performance m<strong>on</strong>itoring count to increment severaltimes. The resulting performance m<strong>on</strong>itoring count may be higher than expected, if the precedingitems occur, but should never be lower than expected.Workaround:There is no way to obtain the correct number of cycles stalled due to instructi<strong>on</strong> cache misses andinstructi<strong>on</strong> TLB misses. Extra counts, due to branch instructi<strong>on</strong>s mispredicted by the BTB, may be<strong>on</strong>e comp<strong>on</strong>ent of the unwanted count that can be filtered out.The number of mispredicted branches also can be m<strong>on</strong>itored using performance m<strong>on</strong>itoring event0x6 during the same time period as event 0x1. The mispredicted branch number then can besubtracted from the instructi<strong>on</strong> cache stall number generated by the performance m<strong>on</strong>itor to get avalue closer to the correct <strong>on</strong>e. This workaround <strong>on</strong>ly addresses counts c<strong>on</strong>tributed by branchesthat the BTB is able to predict.All the items in the preceding bulleted list still affect the count. Depending <strong>on</strong> the nature of thecode being m<strong>on</strong>itored, this workaround may have limited value.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.44. In Special Debug State, back-to-back memory operati<strong>on</strong>s — where the firstinstructi<strong>on</strong> aborts — may cause a hangProblem:If back-to-back memory operati<strong>on</strong>s occur in the Special Debug State (SDS, used by ICE andDebug vendors) and the first memory operati<strong>on</strong> gets a precise data abort, the first memoryoperati<strong>on</strong> is correctly cancelled and no abort occurs. Depending <strong>on</strong> the timing, however, the sec<strong>on</strong>dmemory operati<strong>on</strong> may not work correctly. The data cache may internally cancel the sec<strong>on</strong>doperati<strong>on</strong>, but the register file may have scoreboarded registers for that sec<strong>on</strong>d memory operati<strong>on</strong>.The effect is that the core may hang (due to a permanently scoreboarded register) or that a storeoperati<strong>on</strong> may be incorrectly cancelled.Workaround:In Special Debug State, any memory operati<strong>on</strong> that may cause a precise data abort should befollowed by a write-buffer drain operati<strong>on</strong>. This will preclude further memory operati<strong>on</strong>s frombeing in the pipe when the abort occurs. Load Multiple/Store Multiple that may cause precise dataaborts should not be used.Status: NoFix. Will not be fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.32 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata45. Instructi<strong>on</strong> Memory Management Unit address translati<strong>on</strong> is turned off forthe first fetch after exiting Special Debug StateProblem:When the processor enters SDS (Special Debug State), the Instructi<strong>on</strong> Memory Management Unitis disabled. This means that the instructi<strong>on</strong> TLB is no l<strong>on</strong>ger accessed and physical-to-virtualaddress translati<strong>on</strong> no l<strong>on</strong>ger occurs. The first code executed after exiting SDS mode should causean instructi<strong>on</strong> TLB access and execute from the physical memory specified in the appropriate pagetable entry.In certain timing cases, this may not occur. The physical address of the code that executes next willbe the same as the virtual address, without regard to the page tables. This can cause the wr<strong>on</strong>g codeto execute.Workaround:Depending <strong>on</strong> the nature of the special debug routines, <strong>on</strong>e of the following code sequences may beused to avoid this issue. These routines occur just before the CPSR restore instructi<strong>on</strong> used to exitSDS.• SDS code is cacheable (external or in mini-icache):.align 5mov r13, addr@ Invalidate I-cache line, causes stall until all inst fetches completemcr p15, 0, r13, c7, c5, 1CPSR restore• SDS code is n<strong>on</strong>-cacheable (external or mini-icache):.align 5b next_cache_lineprevious_cache_line:CPSR restore.align 5next_cache_line:bprevious_cache_line• SDS code is either n<strong>on</strong>-cacheable or cacheable (but cannot be located in mini-icache):This workaround assumes that code is in a regi<strong>on</strong> mapped 1-to-1. This ensures the data access doesnot actually get remapped to another regi<strong>on</strong> of memory which may be faster than the regi<strong>on</strong>c<strong>on</strong>taining the debug handler. Note that the clean data cache line command used below is notnecessary if the locati<strong>on</strong> “addr” is not used to hold some state for the use of the debug handler.mov rx, addr @ use some addr that is within the dbg hdlr@ clean and invalidate D-cache line, make sure that addr is not in D-cachemcr p15, 0, rx, c7, c6, 1mcr p15, 0, rx, c7, c10, 1bnext_cache_line.align 5@ make sure we start fetching next cache line@ before loading from it.next_cache_line:ldr rx, [rx] @ load from addrmov rx, rx @ data dependency, waits for load to completeCPSR restoreStatus: Fixed. Fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 33


Errata46. Data cache dirty bits may be corrupted if a store to cacheable memoryoccurs during a tag replacement for a different cache lineProblem:Workaround:The dirty bits in the data cache may become corrupted if a store to cacheable memory hits anoutstanding cache line fill and is presented to the cache during a tag replacement for a differentcache line. There is no reas<strong>on</strong>able way to avoid these events lining up in normal code. This erratumis caused by a circuit race c<strong>on</strong>diti<strong>on</strong>, and may be sensitive to voltage, temperature, or noise.This can lead to clean or invalid data being marked dirty in the cache, or dirty data in the cachebeing marked clean. Possible outcomes include:• Invalid data being marked dirty can lead to unpredictable four-word stores to an unpredictableaddress in memory.• Valid, but clean write-back data being marked dirty can lead to unnecessary evicti<strong>on</strong>s toexternal memory.• Valid dirty data being marked clean can lead to data corrupti<strong>on</strong>. External memory will not beupdated up<strong>on</strong> cache line replacement.Example 1. Scenario of Data-Cache Dirty Bit Becoming Corrupted1. A store, of 0xaaaa to address 0x1000, hits write-back memory in the cache and marks it dirty.2. Clean and invalidate commands are issued to address 0x1000, correctly pushing the data out ofthe cache to memory.At this point a clean invalid copy of the 0xaaaa data exists in the cache.3. A store, of 0xbbbb to address 0x1000, is cleaned and invalidated and memory is updated correctly.4. The erratum occurs and the original, 0xaaaa copy of the data is incorrectly marked “dirty.” It isthen evicted, overwriting the 0xbbbb data in memory.In an applicati<strong>on</strong>, this may appear to be general memory corrupti<strong>on</strong>. It also may seem that the sec<strong>on</strong>dstore did not occur correctly, when in fact the sec<strong>on</strong>d store worked and old data overwrote it.The <strong>on</strong>ly software workaround is to disable write-back cache. For cacheable memory regi<strong>on</strong>s, <strong>on</strong>lyuse write-through mode. Write-through cacheable regi<strong>on</strong>s ignore the dirty bits and therefore are notaffected. This erratum is <strong>on</strong>ly <strong>on</strong> the B and C stepping of the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g>.Status: Fixed. Fixed <strong>on</strong> D-step. See the Table “Summary Table of Changes” <strong>on</strong> page 7.47. Accesses to the CP15 ID register with opcode2 > 0b001 returnsunpredictable valuesProblem:The ARM Architecture Reference Manual (ARM DDI 0100E) states the following in chapter B-2,secti<strong>on</strong> 2.3:If an value corresp<strong>on</strong>ding to an unimplemented or reserved ID register isencountered, the System C<strong>on</strong>trol processor returns the value of the main ID register.ID registers other than the main ID register are defined so that when implemented, their valuecannot be equal to that of the main ID register. Software can therefore determine whetherthey exist by reading both the main ID register and the desired register and comparing theirvalues. If the two values are not equal, the desired register exists.The <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> core does not implement any CP15 ID code registers other than the Main IDregister (opcode2 = 0b000) and the Cache Type register (opcode2 = 0b001). When any of theunimplemented registers are accessed by software (e.g., mrc p15, 0, r3, c15, c15, 2), the value ofthe Main ID register was to be returned. Instead, an unpredictable value is returned.Workaround:No workaround.Status: NoFix. See the Table “Summary Table of Changes” <strong>on</strong> page 7.34 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Errata48. Disabling and re-enabling the MMU can hang the core or cause it to executethe wr<strong>on</strong>g codeProblem:Workaround:When the MMU is disabled via the CP15 c<strong>on</strong>trol register (CP15, CR1, opcode_2 = 0, bit 0) afterbeing enabled, certain timing cases can cause the processor to hang. In additi<strong>on</strong> to this, re-enablingthe MMU after disabling it can cause the processor to fetch and execute code from the wr<strong>on</strong>gphysical address. To avoid these issues, the code sequence below must be used whenever disablingthe MMU or re-enabling it afterwards.The following code sequence can be used to disable and/or re-enable the MMU safely. Thealignment of the mcr instructi<strong>on</strong> that disables or re-enables the MMU must be c<strong>on</strong>trolled carefully,so that it resides in the first word of an instructi<strong>on</strong> cache line.@ The following code sequence takes r0 as a parameter. The value of r0 will be@ written to the CP15 c<strong>on</strong>trol register to either enable or disable the MMU.mcr p15, 0, r0, c10, c4, 1 @ unlock I-TLBmcr p15, 0, r0, c8, c5, 0 @ invalidate I-TLBmrc p15, 0, r0, c2, c0, 0 @ CPWAITmov r0, r0sub pc, pc, #4b 1f @ branch to aligned code.align 51:mcr p15, 0, r0, c1, c0, 0 @ enable/disable MMU, cachesmrc p15, 0, r0, c2, c0, 0mov r0, r0sub pc, pc, #4@ CPWAITStatus: NoFix. See the Table “Summary Table of Changes” <strong>on</strong> page 7.49. Updating the JTAG parallel registers requires an extra TCK rising edgeProblem:Workaround:The IEEE 1149.1 spec states that the effects of updating all parallel JTAG registers should be seen<strong>on</strong> the falling edge of TCK in the Update-DR state. The <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> core parallel JTAGregisters, incorrectly require an extra TCK rising edge to make the update visible. Therefore,operati<strong>on</strong>s like hold-reset, JTAG break, and vector traps require either an extra TCK cycle bygoing to Run-Test-Idle or by cycling through the state machine again in order to trigger theexpected hardware behavior.When the JTAG interface is polled c<strong>on</strong>tinuously, this erratum has no effect. When not, an extraTCK cycle can be caused by going to Run-Test-Idle after writing a parallel JTAG register.Status: NoFix. See the Table “Summary Table of Changes” <strong>on</strong> page 7.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 35


Specificati<strong>on</strong> ChangesSpecificati<strong>on</strong> Changes1. Revised and moved to Specificati<strong>on</strong> Clarificati<strong>on</strong> 2.2. Drowsy Mode has been De-SpecifiedIssue: Drowsy mode is no l<strong>on</strong>ger a low power mode that is supported <strong>on</strong> the <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor. Use idlemode or sleep mode instead. For drowsy mode references in the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong><str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual, see documentati<strong>on</strong> change #8. Writing a‘2’ to the PWRMODE register in CP14, register 7, is c<strong>on</strong>sidered a ‘reserved’ mode and should notbe used.3. New ECC Disable Bit Available <strong>on</strong> the C-0 and D-0 StepIssue: When using the 80312 compani<strong>on</strong> chip with the <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor, both devices will generate ECCbits for sub-64 bit stores (writes) to SDRAM. Therefore, the <str<strong>on</strong>g>80200</str<strong>on</strong>g> does not need to performRead-Modify-Writes (RMWs) for sub-64 bit stores as this is handled by the 80312 and will impactperformance.A new bit has been defined for the <str<strong>on</strong>g>80200</str<strong>on</strong>g> C-0 and D-0, which disables the RMWs for sub-64 bitstores. Bit 31 in ECTST (register 8, CP13) is now defined as the Disable Write ECC (DWE) bit. IfDWE is written as a '1', even if ECC is enabled, then the <str<strong>on</strong>g>80200</str<strong>on</strong>g> will not perform the usual ECCacti<strong>on</strong>s when writing data. In other words, if DWE = '1' and a write is performed to ECC-protectedmemory, the Bus C<strong>on</strong>troller Unit (BCU) will not perform a RMW. The value <strong>on</strong> the ECC bus(DCB[7:0] signals) in this case will be unpredictable but will be c<strong>on</strong>sistent with whatever is beingdriven <strong>on</strong> D[63:0]. For example, in the case of a n<strong>on</strong>-cacheable DWORD write, D[31:0] is definedby the store instructi<strong>on</strong> and D[63:32] is unpredictable. However, DCB[7:0] is still c<strong>on</strong>sistent withwhat is driven out <strong>on</strong> D[63:0].DWE resets to '0' and is write-<strong>on</strong>ly. Reads of DWE result in an unpredictable value. The acti<strong>on</strong>sthat the <str<strong>on</strong>g>80200</str<strong>on</strong>g> perform when reading data are unaffected by the setting of DWE.When DWE is written, it must be d<strong>on</strong>e while ECC is disabled in the BCU (BCUCTL.3 = '0').Software should <strong>on</strong>ly change the value of DWE <strong>on</strong>ce, typically at initializati<strong>on</strong>/reset time.Changing the value of DWE in other circumstances results in unpredictable behavior.The <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor is still resp<strong>on</strong>sible for validating ECC <strong>on</strong> reads, and therefore is required tohave ECC enabled when being used with the 80312 I/O compani<strong>on</strong> chip. This new bit eliminatesthe ECC redundancy <strong>on</strong> writes.4. 200MHz <str<strong>on</strong>g>Processor</str<strong>on</strong>g> AvailableIssue: On November 12, 2002, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> announced a 200MHz versi<strong>on</strong> of the <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor. This productis <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> the D-0 stepping and is <strong>on</strong>ly guaranteed to operate at 200MHz with a voltage of 1.1v+/-5%.At a core frequency of 200MHz, the MCLK is restricted to 66MHz or less. CLK and MCLK areasynchr<strong>on</strong>ous clocks, but the internal core frequency must be at least 3x faster than MCLK (seesecti<strong>on</strong> 8.1 in the <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> Manual). For example, if the core clock is 200MHz, MCLK isrestricted to 66MHz or less. Therefore, the 80312 I/O compani<strong>on</strong> chip cannot be used with the200MHz processor because it provides an MCLK of 100MHz.The <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor can initialize and operate at 200MHz when CLK = 33MHz, PLLCFG = 1(initial clock multiplier of 6) and MCLK is < or = 66MHz.36 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Specificati<strong>on</strong> Changes5. Extended Temperature Products AvailableIssue:On November 12, 2002, <str<strong>on</strong>g>Intel</str<strong>on</strong>g> announced the <str<strong>on</strong>g>80200</str<strong>on</strong>g>T, an extended temperature versi<strong>on</strong> of the<str<strong>on</strong>g>80200</str<strong>on</strong>g> processor. The <str<strong>on</strong>g>80200</str<strong>on</strong>g>T is <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> the D-0 stepping and is available at 733MHz, 600MHz,400MHz and 200MHz. It is functi<strong>on</strong>ally identical to the commercial temperature <str<strong>on</strong>g>80200</str<strong>on</strong>g> processorbut is tested to operate at an extended temperature range of -40C to +85C. The <str<strong>on</strong>g>80200</str<strong>on</strong>g> processormanual and datasheet should be used when designing with the <str<strong>on</strong>g>80200</str<strong>on</strong>g>T processor.To provide a reference point for <str<strong>on</strong>g>80200</str<strong>on</strong>g>T thermal c<strong>on</strong>siderati<strong>on</strong>s, the following simulati<strong>on</strong> resultsare listed below.Here are the parameters used in the model:• Tjuncti<strong>on</strong> max = 110C• Tcase_ext max = 105C• Tambient max = 85C• Typical power for 733MHz processor = 1.2W• Board size = 5" x 6"• Board layers:— 4 layers = signal, power, ground, signal— 6 layers = signal, power, signal, signal, ground, signal— 8 layers = signal, ground, signal, power, ground, signal, power, signal• No heat sink.• Theta ja target is < 20.83 C/W.— Based <strong>on</strong> the following equati<strong>on</strong>: Tjuncti<strong>on</strong> - Tambient / P (w)110c - 85c / 1.2w = 20.83Thermal Simulati<strong>on</strong> ResultsTheta ja< 20.83 C/WHeat Dissipatedthrough PCBHeat Dissipatedthrough TopHeat Dissipatedthrough Sides4 layer,no airflow6 layer,no airflow8 layer,no airflow4 layer,50 lfm airflow6 layer,50 lfm airflow8 layer,50 lfm airflow21.01 1.11w, 92% 0.06W, 5% 0.03W, 3%19.31 1.12w, 93% 0.05w, 5% 0.03w, 2%18.01 1.13w, 94% 0.05w, 4% 0.02w, 2%20.19 1.07w, 89% 0.10w, 8% 0.04W, 3%18.61 1.08w, 90% 0.08w, 7% 0.03w, 3%17.41 1.10w, 91% 0.08W, 7% 0.03w, 2%This data shows that the most important factor in heat dissipati<strong>on</strong> with the <str<strong>on</strong>g>80200</str<strong>on</strong>g> package is theboard design (i.e., the number of layers, the size, other comp<strong>on</strong>ents dumping heat into the board,and so <strong>on</strong>.). With this package, adding a heat sink may have some affect, but this was not includedin the model.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 37


Specificati<strong>on</strong> ChangesThe four layer, no airflow c<strong>on</strong>figurati<strong>on</strong> shows a theta ja of 21.01, which is higher than the target of20.83. Even in this scenario the <str<strong>on</strong>g>80200</str<strong>on</strong>g> should be fine, <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> the fluctuati<strong>on</strong> of the power.Note:This informati<strong>on</strong> is given as a reference point <strong>on</strong>ly. Customers need to perform thorough thermalsimulati<strong>on</strong>s <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> their specific applicati<strong>on</strong>. The easiest method is to measure the casetemperature <strong>on</strong> top of the package to verify that Tcase is below the 105C limit.38 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Specificati<strong>on</strong> Clarificati<strong>on</strong>sSpecificati<strong>on</strong> Clarificati<strong>on</strong>s1. TRST# UsageProblem:Here are three different opti<strong>on</strong>s for TRST# <strong>on</strong> the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor:1. Tie TRST# to ground, if the JTAG port is never be used.2. Tie TRST# to RESET#. TRST# doesn't need to be asserted every time RESET# is asserted,but TRST# does need to be asserted <strong>on</strong> power-up or else the TAP c<strong>on</strong>troller is in an unknownstate. The issue with this opti<strong>on</strong> is with an ICE c<strong>on</strong>nected to the JTAG port, it needs to be ableto c<strong>on</strong>trol TRST# independently of RESET# or it looses debug functi<strong>on</strong>ality.3. Assert TRST# <strong>on</strong> power-up and when instructed by an external JTAG/debug c<strong>on</strong>troller. Thisgives full debug functi<strong>on</strong>ality. See the ‘Recommended JTAG Circuitry for Debug’ applicati<strong>on</strong>note located at: developer.intel.com/design/iio/applnots/273538.htm, or see your debugger'sdocumentati<strong>on</strong> for special requirements.2. STRD and LDRD Instructi<strong>on</strong>sProblem: STRD (store double-word) and LDRD (load double-word) are new instructi<strong>on</strong>s in the ARMArchitecture Specificati<strong>on</strong>, v5TE. These load and store instructi<strong>on</strong>s can be used to transfer twoadjacent words of memory to or from any of the register pairs.The instructi<strong>on</strong> decoder <strong>on</strong> the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processorr divides the STRD instructi<strong>on</strong> into two STRinstructi<strong>on</strong>s. This is because the internal (core) data width is 32 bits. When coalescing is turned 'off'(CP15, R1, bit 0 = 1), the core always emits two 32-bit transacti<strong>on</strong>s. When coalescing is turned '<strong>on</strong>'(CP15, R1, bit 0 = 0), the write buffer may combine them into <strong>on</strong>e 64-bit request.3. Write Coalescing with the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80312 I/O Compani<strong>on</strong> ChipProblem: The write coalescing feature in the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> processor (<str<strong>on</strong>g>80200</str<strong>on</strong>g>) can be used with the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ®80312 I/O Compani<strong>on</strong> Chip (80312) to deliver higher memory throughput <strong>on</strong> core writes to localmemory. Enabling write coalescing may also significantly increase overall applicati<strong>on</strong>performance. Write coalescing is globally enabled by CP15, CR1, opcode_2=1, bit 0 = 0, andindividually enabled by the MMU page table descriptors using the C, B and X bits.For write coalescing to local memory to work correctly, ECC must be enabled in the <str<strong>on</strong>g>80200</str<strong>on</strong>g> for allpage descriptors that have coalescing enabled. When ECC is enabled, the <str<strong>on</strong>g>80200</str<strong>on</strong>g> always generates64-bit memory writes due to the ECC mechanism for handling partial writes of less than 64-bits tomemory regi<strong>on</strong>s. For sub 64-bit writes, the <str<strong>on</strong>g>80200</str<strong>on</strong>g> always generates read-modify-write (RMW) bustransacti<strong>on</strong>s, in order to update ECC by merging in the byte lanes from main memory beforewriting the data back out.For steppings of the <str<strong>on</strong>g>80200</str<strong>on</strong>g> that have the Disable Write ECC feature (see Specificati<strong>on</strong> Change 3),write coalescing and the enabling of the DWE bit are mutually exclusive when used with the80312. Setting the DWE bit disables the RMW mechanism that allows coalesced writes tocomplete correctly. The disable write ECC feature (DWE bit) should not be used with writecoalescing enabled.With coalescing enabled, writes may occur out of program order to external memory. When theorder of the writes is important, then use fences, since anything that is coalesced can be transferredout of order (see secti<strong>on</strong> 3.2.2.6 in the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual).<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 39


Documentati<strong>on</strong> ChangesDocumentati<strong>on</strong> Changes1. Secti<strong>on</strong> C.2.4.1, Table C-4Issue: Table should include A-1 stepping showing JTAG ID of 0x19263013.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.2. Example 6-3 <strong>on</strong> page 6-12 may not work properlyIssue:Workaround:The data cache code locking example has some side effects when using the PLD instructi<strong>on</strong> toperform the cache fill operati<strong>on</strong>. When the address generated by the PLD forces a table walk, thePLD instructi<strong>on</strong> is silently ignored. This means that when a page boundary is crossed into a pagethat is not in the TLB, then the PLD never causes a fill and the cache line (and probably the entirepage) does not get locked. Using loads is the <strong>on</strong>ly way to guarantee a fill (and a page lock) occurs.A register rotati<strong>on</strong> scheme should be used to provide the best performance in locking the cache.Replace Example 6-3 with the following example.; c<strong>on</strong>figured with C=1 and B=1; R0 is the number of 32-byte lines to lock into the data cache. In this; example 16 lines of data are locked into the cache.; MMU and data cache are enabled prior to this code..macroCPWAITMRC P15, 0, R0, C2, C0, 0MOV R0, R0SUB PC, PC, #4.endm.macroDRAINMCR P15, 0, R0, C7, C10, 4 ; drain pending loads and stores.endm.macroLOCKLINE, Rx, Ry; Write back the line if it's dirty in the cacheMCR P15, 0, \Rx, C7, C10, 1; Flush/Invalidate the line from the cacheMCR P15, 0, \Rx, C7, C6, 1; Load and lock 32 bytes of data located at [R1]; into the data cache. Post-increment the address; in R1 to the next cache line.LDR \Ry, [\Rx], #32.endm; LockLines(int cache_lines, void *start_address).global LockLinesLockLines:STMFDSP!, {R4-R6, LR}MOV R6, R0DRAINMOV R2, #0x1MCR P15, 0, R2, C9, C2, 0 ; Put the data cache in lock modeCPWAIT40 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Documentati<strong>on</strong> ChangesLOOP1:LOCKLINE R1, R2SUBSR6, R6, #1; Decrement loop countBEQ DONELOCKLINE R1, R3SUBSR6, R6, #1; Decrement loop countBEQ DONELOCKLINE R1, R4SUBSR6, R6, #1; Decrement loop countBEQ DONELOCKLINE R1, R5SUBSR6, R6, #1; Decrement loop countBNE LOOP1; Turn off data cache lockingDONE:DRAINMOV R2, #0x0MCR P15, 0, R2, C9, C2, 0 ; Take the data cache out of lock mode.CPWAITLDMFDSP!, {R4-R6, PC}Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.3. Figure 13-12 <strong>on</strong> page 13-39 and Figure 13-13 <strong>on</strong> page 13-41 show incorrectsignal statesIssue:Both RESET# and TRST# are active low, so these signals, as shown in figures, change polarity.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.4. Secti<strong>on</strong> A.2 <strong>on</strong> page A-2 has incorrect textIssue:The third bullet under Instructi<strong>on</strong> Cache, needs to be changed from 'Fill Buffer' to 'Fetch Buffer'.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.5. Secti<strong>on</strong> B.2.3.1 <strong>on</strong> page B-6 has incorrect textIssue:The last sentence in this secti<strong>on</strong> needs to be changed from 'Fill Buffer' to 'Fetch Buffer'.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.6. Table 7-3 <strong>on</strong> page 7-4 shows incorrect register accessIssue:The access column for CR9 needs to be changed from ‘Read/Write’ to ‘Read-unpredictable/Write’.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.7. Table 7-15 <strong>on</strong> page 7-13 shows incorrect register accessIssue:The access column for the Data Cache Lock register needs to be changed from ‘Read/Write’ to‘Read-unpredictable/Write’.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 41


Documentati<strong>on</strong> Changes8. All References to Drowsy Mode should be Removed from the <str<strong>on</strong>g>80200</str<strong>on</strong>g>Developer’s ManualIssue: Drowsy Mode has been de-specified (See specificati<strong>on</strong> change #2).The following Drowsy Mode references in the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manuall should be removed:• Figure 1-1 <strong>on</strong> page 1-2• Secti<strong>on</strong> 1.1.2.6 <strong>on</strong> page 1-4• Table 7-23 <strong>on</strong> page 7-19 (2 = ‘reserved’)• Table 7-24 <strong>on</strong> page 7-19• Introducti<strong>on</strong> secti<strong>on</strong> of page 8-1• All secti<strong>on</strong>s and figures <strong>on</strong> pages 8-5 and 8-6.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.9. Table 11-6 <strong>on</strong> page 11-10 has a new bit functi<strong>on</strong> for ECTST.31Issue:Bit 31 in the ECTST register is no l<strong>on</strong>ger Reserved. ECTST.31 is now defined as Disable WriteECC (DWE). See specificati<strong>on</strong> change 3 for more details.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.10. Figure C-2 <strong>on</strong> page C-7 shows an incorrect stateIssue:The initial TRST# state does not bel<strong>on</strong>g in this state diagram. It should be shown instead as'TRST# = 0'. A correct versi<strong>on</strong> can be seen in Figure 14-2 of the <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® 80312 I/O Compani<strong>on</strong> ChipDeveloper’s Manual.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual.11. Example code is incorrect <strong>on</strong> page 13-15Issue:The first instructi<strong>on</strong> in the example code, at the bottom of page 13-15, should be changed from‘mcr’ to ‘mrc’ (loop: mrc p14, 0, r15, c14, c0, 0).Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual(273411).12. Example code is incorrect <strong>on</strong> page 13-45Issue: The third instructi<strong>on</strong> in the loop routine should change ‘c8’ to ‘c9’ (mrc p14, 0, r0, c9, c0, 0).Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual(273411).13. Number of clocks is incorrect <strong>on</strong> page 8-2Problem: On page 8-2, the last sentence of the sec<strong>on</strong>d paragraph, change ‘approximately <strong>on</strong>e thousand CLKcycles’ to ‘approximately two thousand CLK cycles’.It should read as: “If there are no external bus transacti<strong>on</strong>s, this procedure takes approximately twothousand CLK cycles, the same time it takes to transiti<strong>on</strong> out of reset.”Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual(273411).42 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update


Documentati<strong>on</strong> Changes14. Figure 10-12 <strong>on</strong> page 10-22 shows incorrect BE# valueProblem:The BE# value in Figure 10-12 is incorrect. Change from ‘0x00’ to ‘0xF0’ to indicate 4 bytes, asused in the example.Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual(273411).15. Example code is incorrect <strong>on</strong> page 7-17Problem: Example 7-1 <strong>on</strong> pg 7-17 reads:LDR R0, =0x3FFE ; bit 0 is clearIt should read:LDR R0, =0x0000 ; bit 0 is clearorMOV R0, #0x00 ; bit 0 is clearThis c<strong>on</strong>flicts with the statement made at the bottom of table 7-20, "Setting any of bits 12:1 has anundefined effect."Affected Docs: <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Developer’s Manual(273411).<str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update 43


Documentati<strong>on</strong> ChangesThis Page Intenti<strong>on</strong>ally Left Blank44 <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <str<strong>on</strong>g>80200</str<strong>on</strong>g> <str<strong>on</strong>g>Processor</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong> <str<strong>on</strong>g>Intel</str<strong>on</strong>g> ® <strong>XScale</strong> <strong>Microarchitecture</strong> Specificati<strong>on</strong> Update

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!