Skip to content

Commit 68d4e24

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

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

4011+
static enum cpuinfo_arm_chipset_vendor disambiguate_chipset_vendor(
4012+
enum cpuinfo_arm_chipset_vendor vendor_a,
4013+
enum cpuinfo_arm_chipset_vendor vendor_b) {
4014+
/* Some UNISOC-based platforms reporting conflicting vendor names depending
4015+
* on the source. For phones that report both UNISOC and Spreadtrum, treat it
4016+
* as UNISOC. */
4017+
if (vendor_a == cpuinfo_arm_chipset_vendor_unisoc && vendor_b == cpuinfo_arm_chipset_vendor_spreadtrum ||
4018+
vendor_a == cpuinfo_arm_chipset_vendor_spreadtrum && vendor_b == cpuinfo_arm_chipset_vendor_unisoc) {
4019+
return cpuinfo_arm_chipset_vendor_unisoc;
4020+
}
4021+
4022+
return cpuinfo_arm_chipset_vendor_unknown;
4023+
}
4024+
40114025
/*
40124026
* Decodes chipset name from Android system properties:
40134027
* - /proc/cpuinfo Hardware string
@@ -4068,10 +4082,19 @@ struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset(
40684082
} else if (vendor != decoded_vendor) {
40694083
/* Parsing different system properties produces
40704084
* 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;
4085+
* rare. Try to disambiguate for known cases,
4086+
* otherwise treat as unknown. */
4087+
4088+
enum cpuinfo_arm_chipset_vendor disambiguated_vendor =
4089+
disambiguate_chipset_vendor(vendor, decoded_vendor);
4090+
4091+
if (disambiguated_vendor != cpuinfo_arm_chipset_vendor_unknown) {
4092+
vendor = disambiguated_vendor;
4093+
} else {
4094+
cpuinfo_log_error(
4095+
"chipset detection failed: different chipset vendors reported in different system properties");
4096+
goto finish;
4097+
}
40754098
}
40764099
}
40774100
}

0 commit comments

Comments
 (0)