beautypg.com

1 global clean and invalidate operation, Section 3.6.3.3.1 – Intel NETWORK PROCESSOR IXP2800 User Manual

Page 104

background image

104

Hardware Reference Manual

Intel

®

IXP2800 Network Processor

Intel XScale

®

Core

3.6.3.3.1

Global Clean and Invalidate Operation

A simple software routine is used to globally clean the data cache. It takes advantage of the line-

allocate data cache operation, which allocates a line into the data cache. This allocation evicts any

cache dirty data back to external memory.

Example 22

shows how data cache can be cleaned.

The line-allocate operation does not require physical memory to exist at the virtual address

specified by the instruction, since it does not generate a load/fill request to external memory. Also,

the line-allocate operation does not set the 32 bytes of data associated with the line to any known
value. Reading this data will produce unpredictable results.

The line-allocate command will not operate on the mini Data Cache, so system software must clean

this cache by reading two Kbytes of contiguous unused data into it. This data must be unused and

reserved for this purpose so that it will not already be in the cache. It must reside in a page that is
marked as mini Data Cache cacheable.

The time it takes to execute a global clean operation depends on the number of dirty lines in cache.

Example 22. Global Clean Operation

; Global Clean/Invalidate THE DATA CACHE
; R1 contains the virtual address of a region of cacheable memory reserved for
; this clean operation
; R0 is the loop count; Iterate 1024 times which is the number of lines in the
; data cache

;; Macro ALLOCATE performs the line-allocation cache operation on the
;; address specified in register Rx.
;;

MACRO ALLOCATE Rx

MCR P15, 0, Rx, C7, C2, 5

ENDM

MOV R0, #1024

LOOP1:

ALLOCATE R1

; Allocate a line at the virtual address

; specified by R1.

ADD R1, R1, #32

; Increment the address in R1 to the next cache line

SUBS R0, R0, #1

; Decrement loop count

BNE LOOP1

;

;Clean the Mini-data Cache

; Can’t use line-allocate command, so cycle 2KB of unused data through.

; R2 contains the virtual address of a region of cacheable memory reserved for
; cleaning the Mini-data Cache

; R0 is the loop count; Iterate 64 times which is the number of lines in the
; Mini-data Cache.

MOV R0, #64

LOOP2:

LDR R3,[R2],#32 ; Load and increment to next cache line

SUBS R0, R0, #1

; Decrement loop count

BNE LOOP2

;

; Invalidate the data cache and mini-data cache

MCR P15, 0, R0, C7, C6, 0

;