Skip to content

Commit b28dd45

Browse files
committed
Improve unisoc vendor detection, re-enable neon dot on unknown chipsets
1 parent 735b2ac commit b28dd45

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

src/arm/linux/aarch32-isa.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,6 @@ void cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo(
149149
cpuinfo_log_warning("VDOT instructions disabled: cause occasional SIGILL on Unisoc T310");
150150
} else if (chipset->series == cpuinfo_arm_chipset_series_unisoc_ums && chipset->model == 312) {
151151
cpuinfo_log_warning("VDOT instructions disabled: cause occasional SIGILL on Unisoc UMS312");
152-
} else if (chipset->vendor == cpuinfo_arm_chipset_vendor_unknown) {
153-
cpuinfo_log_warning("VDOT instructions disabled: unknown chipset");
154152
} else {
155153
switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) {
156154
case UINT32_C(0x4100D0B0): /* Cortex-A76 */

src/arm/linux/chipset.c

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4068,10 +4068,19 @@ struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset(
40684068
} else if (vendor != decoded_vendor) {
40694069
/* Parsing different system properties produces
40704070
* different chipset vendors. This situation is
4071-
* rare. */
4072-
cpuinfo_log_error(
4073-
"chipset detection failed: different chipset vendors reported in different system properties");
4074-
goto finish;
4071+
* rare. Try to disambiguate for known cases,
4072+
* otherwise treat as unknown. */
4073+
4074+
cpuinfo_arm_chipset_vendor disambiguated_vendor =
4075+
disambiguate_chipset_vendor(vendor, decoded_vendor);
4076+
4077+
if (disambiguated_vendor != cpuinfo_arm_chipset_vendor_unknown) {
4078+
vendor = disambiguated_vendor;
4079+
} else {
4080+
cpuinfo_log_error(
4081+
"chipset detection failed: different chipset vendors reported in different system properties");
4082+
goto finish;
4083+
}
40754084
}
40764085
}
40774086
}
@@ -4291,4 +4300,18 @@ struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset(
42914300
return chipset;
42924301
}
42934302

4303+
static struct cpuinfo_arm_chipset_vendor disambiguate_chipset_vendor(
4304+
cpuinfo_arm_chipset_vendor vendor_a,
4305+
cpuinfo_arm_chipset_vendor vendor_b) {
4306+
/* Some UNISOC-based platforms reporting conflicting vendor names depending
4307+
* on the source. For phones that report both UNISOC and Spreadtrum, treat it
4308+
* as UNISOC. */
4309+
if (vendor_a == cpuinfo_arm_chipset_vendor_unisoc && vendor_b == cpuinfo_arm_chipset_vendor_spreadtrum ||
4310+
vendor_a == cpuinfo_arm_chipset_vendor_spreadtrum && vendor_b == cpuinfo_arm_chipset_vendor_unisoc) {
4311+
return cpuinfo_arm_chipset_vendor_unisoc;
4312+
}
4313+
4314+
return cpuinfo_arm_chipset_vendor_unknown;
4315+
}
4316+
42944317
#endif

0 commit comments

Comments
 (0)