Philips Semiconductors
Cache Architecture
PRELIMINARY SPECIFICATION
5-5
‘
1
’
. Setting DC_LOCK_ENABLE to
‘
0
’
causes no action
except to allow the previously locked blocks to be re-
placement victims.
To program a new lock range, the following sequence of
operations is used:
1. Disable cache locking by writing
‘
0
’
to
DC_LOCK_ENABLE.
2. Define a new lock range by writing to
DC_LOCK_ADDR and DC_LOCK_SIZE.
3. Enable cache locking by writing
‘
1
’
to
DC_LOCK_ENABLE.
Dirty locked blocks can be written back to main memory
while locking is enabled by executing copyback opera-
tions in software.
Programmer’s note:
Software should not execute din-
valid operations on a locked block. If it does, the block
will be removed from the cache, creating a
‘
hole
’
in the
lock range (and the data cache) that cannot be reused
until locking is deactivated.
Cache locking is disabled by default when PNX1300 is
reset.
The RESERVED field in DC_LOCK_CTL should be ig-
nored on reads and written as all zeroes.
Locking should not be enabled by PCI accesses to the
MMIO registers.
5.3.8
Memory Hole and PCI Aperture
Disable
Bits 6 and 5 in DC_LOCK_CTL comprise the
APERTURE_CONTROL field. This field can be used to
change the memory map as seen by the DSPCPU. The
hardware RESET value of the field corresponds to the
memory map as described in
Section 3.4.1,
“
Memory
Map.
”
5.3.9
Non-cacheable Region
The data cache supports one non-cacheable address re-
gion within the DRAM address space aperture. The base
address of this region is determined by the value in the
DRAM_CACHEABLE_LIMIT MMIO register, which is
shown in
Figure 5-6
. Since uncached memory opera-
tions always incur many stall cycles, the non-cacheable
region should be used sparingly.
A memory operation is non-cacheable if its target ad-
dress satisfies:
[dram_cacheable_limit] <= address < [dram_limit]
Thus, the non-cacheable region is at the high end of the
DRAM
aperture.
The
DRAM_CACHEABLE_LIMIT register forces the size of
the non-cacheable region to be a multiple of 64 KB.
When PNX1300 is reset, DRAM_CACHEABLE_LIMIT is
set equal to DRAM_LIMIT, which results in a zero-length
non-cacheable region.
Programmer’s note:
When DRAM_CACHEABLE_LIMIT
is changed to enlarge the region that is non-cacheable,
software must ensure coherency. This is accomplished
by explicitly copying back dirty data (using dcb opera-
tions) and invalidating (using dinvalid operations) the
cache blocks in the previously unlocked region.
format
of
the
DC_LOCK_ADDR (r/w)
0x10 0014
DC_LOCK_ADDRESS
DC_LOCK_SIZE (r/w)
0x10 0018
DC_LOCK_SIZE
0 0 0 0 0 0
0
0 0 0 0 0
31
0 0 0 0 0 0
0
3
7
11
0 0 0 0 0
15
19
23
0 0 0 0 0 0
27
DC_LOCK_CTL (r/w)
0x10 0010
0 0 0 0 0 0
0 0
DC_LOCK_ENABLE
MMIO_BASE
offset:
0 0
0 0
0 0
0 0
0
0 0
0 0
0 0
0 0
0
0 0
0 0
0 0
0 0
0
APERTURE_CONTROL
reserved
6
5
Figure 5-5. Formats of the registers in charge of data-cache locking.
Table 5-6. Aperture control field
Value
Memory map properties
00 (RESET) Normal operation memory map (
Section 3.4.1
):
loads to 0..0xff always return 0 and cause no
PCI read (memory hole is enabled)
PCI aperture(s) are enabled
01
loads to address 0..0xff cause a PCI read, i.e.
the memory hole is disabled
PCI aperture(s) are enabled
10
PCI apertures are disabled for loads
loads return a 0 and cause no PCI read
11
RESERVED for future extensions
31
0
3
7
11
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19
23
27
DRAM_CACHEABLE_LIMIT
(r/w)
0x10 0008
DRAM_CACHEABLE_LIMIT_FIELD
MMIO_BASE
offset:
Figure 5-6 Formats of the DRAM_CACHEABLE_LIMIT register.