|
|
@@ -196,13 +196,29 @@ static void read_arc_build_cfg_regs(void)
|
|
|
cpu->bpu.num_pred = 2048 << bpu.pte;
|
|
|
|
|
|
if (cpu->core.family >= 0x54) {
|
|
|
- unsigned int exec_ctrl;
|
|
|
|
|
|
- READ_BCR(AUX_EXEC_CTRL, exec_ctrl);
|
|
|
- cpu->extn.dual_enb = !(exec_ctrl & 1);
|
|
|
+ struct bcr_uarch_build_arcv2 uarch;
|
|
|
|
|
|
- /* dual issue always present for this core */
|
|
|
- cpu->extn.dual = 1;
|
|
|
+ /*
|
|
|
+ * The first 0x54 core (uarch maj:min 0:1 or 0:2) was
|
|
|
+ * dual issue only (HS4x). But next uarch rev (1:0)
|
|
|
+ * allows it be configured for single issue (HS3x)
|
|
|
+ * Ensure we fiddle with dual issue only on HS4x
|
|
|
+ */
|
|
|
+ READ_BCR(ARC_REG_MICRO_ARCH_BCR, uarch);
|
|
|
+
|
|
|
+ if (uarch.prod == 4) {
|
|
|
+ unsigned int exec_ctrl;
|
|
|
+
|
|
|
+ /* dual issue hardware always present */
|
|
|
+ cpu->extn.dual = 1;
|
|
|
+
|
|
|
+ READ_BCR(AUX_EXEC_CTRL, exec_ctrl);
|
|
|
+
|
|
|
+ /* dual issue hardware enabled ? */
|
|
|
+ cpu->extn.dual_enb = !(exec_ctrl & 1);
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|