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.

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

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

Saved successfully!

Ooh no, something went wrong!