Skip to content

Commit f858c30

Browse files
authored
Improve unisoc vendor detection, re-enable neon dot on unknown chipsets (#342)
1 parent 1d1dbb4 commit f858c30

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
@@ -4010,6 +4010,20 @@ static inline struct cpuinfo_arm_chipset disambiguate_spreadtrum_chipset(
40104010
return *ro_board_platform_chipset;
40114011
}
40124012

4013+
static enum cpuinfo_arm_chipset_vendor disambiguate_chipset_vendor(
4014+
enum cpuinfo_arm_chipset_vendor vendor_a,
4015+
enum cpuinfo_arm_chipset_vendor vendor_b) {
4016+
/* Some UNISOC-based platforms reporting conflicting vendor names depending
4017+
* on the source. For phones that report both UNISOC and Spreadtrum, treat it
4018+
* as UNISOC. */
4019+
if (vendor_a == cpuinfo_arm_chipset_vendor_unisoc && vendor_b == cpuinfo_arm_chipset_vendor_spreadtrum ||
4020+
vendor_a == cpuinfo_arm_chipset_vendor_spreadtrum && vendor_b == cpuinfo_arm_chipset_vendor_unisoc) {
4021+
return cpuinfo_arm_chipset_vendor_unisoc;
4022+
}
4023+
4024+
return cpuinfo_arm_chipset_vendor_unknown;
4025+
}
4026+
40134027
/*
40144028
* Decodes chipset name from Android system properties:
40154029
* - /proc/cpuinfo Hardware string
@@ -4070,10 +4084,19 @@ struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset(
40704084
} else if (vendor != decoded_vendor) {
40714085
/* Parsing different system properties produces
40724086
* different chipset vendors. This situation is
4073-
* rare. */
4074-
cpuinfo_log_error(
4075-
"chipset detection failed: different chipset vendors reported in different system properties");
4076-
goto finish;
4087+
* rare. Try to disambiguate for known cases,
4088+
* otherwise treat as unknown. */
4089+
4090+
enum cpuinfo_arm_chipset_vendor disambiguated_vendor =
4091+
disambiguate_chipset_vendor(vendor, decoded_vendor);
4092+
4093+
if (disambiguated_vendor != cpuinfo_arm_chipset_vendor_unknown) {
4094+
vendor = disambiguated_vendor;
4095+
} else {
4096+
cpuinfo_log_error(
4097+
"chipset detection failed: different chipset vendors reported in different system properties");
4098+
goto finish;
4099+
}
40774100
}
40784101
}
40794102
}

0 commit comments

Comments
 (0)