|
@@ -63,6 +63,28 @@ skip:
|
|
|
li v1, ~(7 << 7)
|
|
|
and v0, v0, v1
|
|
|
ori v0, v0, (6 << 7)
|
|
|
+
|
|
|
+ mfc0 v1, CP0_PRID_REG
|
|
|
+ and t1, v1, 0xfff8
|
|
|
+ xor t1, t1, 0x9000 # 63-P1
|
|
|
+ beqz t1, 4f
|
|
|
+ and t1, v1, 0xfff8
|
|
|
+ xor t1, t1, 0x9008 # 63-P2
|
|
|
+ beqz t1, 4f
|
|
|
+ and t1, v1, 0xfff8
|
|
|
+ xor t1, t1, 0x9100 # 68-P1
|
|
|
+ beqz t1, 4f
|
|
|
+ and t1, v1, 0xff00
|
|
|
+ xor t1, t1, 0x9200 # 66-PX
|
|
|
+ bnez t1, 5f # Skip WAR for others.
|
|
|
+ and t1, v1, 0x00ff
|
|
|
+ slti t1, t1, 2 # 66-P1.2 and later good.
|
|
|
+ beqz t1, 5f
|
|
|
+
|
|
|
+4: # core-16057 work around
|
|
|
+ or v0, v0, 0x2000 # Set IPREF bit.
|
|
|
+
|
|
|
+5: # No core-16057 work around
|
|
|
# Write the cavium control register
|
|
|
dmtc0 v0, CP0_CVMCTL_REG
|
|
|
sync
|