Restriction 40: scrubbing a single-bit error – Compaq 21264 User Manual
Page 318
D–20
PALcode Restrictions and Guidelines
Alpha 21264/EV67 Hardware Reference Manual
Restriction 40: Scrubbing a Single-Bit Error
hw_mtpr r31, EV6__DTB_IA
; (7,1L) flush dtb
lda r20, ^x3301(r31)
; set WE, RE
bis r31, r31, r31
bis r31, r31, r31
hw_mtpr r31,
; wait for retire
srl r4, #13, r6
; shift byte offset
sll r6, #EV6__DTB_PTE0__PFN__S, r6
; shift into position
bis r6, r20, r6
; produce pte
hw_mtpr r4, EV6__DTB_TAG0
; (2&6,0L) write tag0
hw_mtpr r4, EV6__DTB_TAG1
; (1&5,1L) write tag1
hw_mtpr r6, EV6__DTB_PTE0
; (0&4,0L) write pte0
hw_mtpr r6, EV6__DTB_PTE1
; (3&7,1L) write pte1
mb
; quiet before we start
bis r31, r31, r31
bis r31, r31, r31
bis r31, r31, r31
ldq r6, ^x00(r4)
; re-read the bad block QW #0
ldq r6, ^x08(r4)
; re-read the bad block QW #1
ldq r6, ^x10(r4)
; re-read the bad block QW #2
ldq r6, ^x18(r4)
; re-read the bad block QW #3
ldq r6, ^x20(r4)
; re-read the bad block QW #4
ldq r6, ^x28(r4)
; re-read the bad block QW #5
ldq r6, ^x30(r4)
; re-read the bad block QW #6
mb
; no other mem-ops till done
ldq_l r6, ^x38(r4)
; re-read the bad block QW #7
stq_c r6, ^x38(r4)
; now store it to force scrub
mb
and r6, r31, r6
; consumer of above
beq r6, sys__crd_scrub_done
; these 2 lines......
br r31, .-4
; .....stop pre-fetching
sys__crd_scrub_done:
bsr r7, sys__cbox
; clean the cbox error chain
bis r31, r31, r31
hw_mtpr r31, EV6__DTB_IA
; (7,1L) flush dtb
bis r31, r31, r31
bis r31, r31, r31
bis r31, r31, r31
hw_mtpr r31,
; wait for retire
bis r31, #1, r7
; get a 1
sll r7, #EV6__HW_INT_CLR__CR__S, r7 ; shift into position
hw_mtpr r7, EV6__HW_INT_CLR
; (4,0L) clear crd
lda r7, EV6__DC_STAT_W1C_CRD(r31)
; W1C bits
hw_mtpr r7, EV6__DC_STAT
; (6,0L)
bis r31, r31 ,r31
bis r31, r31 ,r31
hw_mtpr r31,
; stall till they retire