User Manual
BCM1250/BCM1125/BCM1125H
10/21/02
B r o a d c o m C o r p o r a t i o n
Document
1250_1125-UM100CB-R
Section 3: System Overview
Page
17
E
RROR
C
ONDITIONS
The system makes every effort to ensure that processing is never done based on erroneous data. Error
conditions are signalled in several ways, as well as being passed in a flag with the data. All the critical
structures where data corruption could occur are protected with ECC (allowing for correction of single bit
errors) or parity (in structures that never contain the only copy of the data). As a result of an error condition
being detected on data destined for the CPU, it will receive an exception (as required by the MIPS architecture)
and will be signalled interrupts from the source that detected the problem or the Bus Watcher (see
Section: “Bus Watcher” on page 64
) or from both source and Bus Watcher. If the error is detected on data
destined for a DMA engine, the DMA channel will stop and raise an interrupt to the CPU and the Bus Watcher
will report the error. (Note that reading the Bus Watcher status register will clear it and enable logging of future
errors, so it should be the last register read when the Bus Watcher information is dumped.)
C
ACHE
E
RROR
E
XCEPTIONS
The cache error exception is raised on the CPU both by error conditions detected in the internal caches and
by error returns that are flagged on the bus as having data errors (but valid addresses). This follows the MIPS
Architecture use of the exception. The practical upshot of this is that code diagnosing the exception should
examine the state of external error reporting registers in addition to the ones in the CPU. Note that when data
is returned to the data cache marked with an error code it will be written to the cache with an uncorrectable
ECC error (after ECC is calculated the bottom two bits of each double-word are inverted to force the error) to
ensure that it is not used on this processor and that the error is preserved if the line is evicted or snooped out
of the cache by another CPU or DMA engine.
The error registers within the CPU are in the CP0 set and are described in the “Error Reporting Registers” part
of Section 9 of the SB-1 User Manual. The error control register
ErrCtl
(register 26, select 0) indicates which
cache suffered the error (or was being filled if it is an error signalled over the bus). It also flags recoverable
errors from the data cache, these have been corrected and the exception can immediately return unless it
needs to gather error statistics. Depending on which cache saw the error either
CacheErr-I
(register 27, select
0) and
EPC
or the
CacheErr-D
(register 27, select 1) and
CacheErr-DPA
(register 27, select 3) contain
additional information. The external registers are in the Bus Watcher, the memory error counter
(
bus_mem_io_errors
) and L2 error counter (
bus_l2_errors
) indicate how many errors have happened and
the
bus_err_status
register will indicate the type of error and participants involved. Because instructions may
be issuing and probing the cache at the same time an external error is found on a fill it is possible that an
internal error is raised before the external one can be signalled, therefore it is normally useful for debugging if
the error reporting code always dumps the Bus Watcher errors even if it appears to be an internal problem.