Refactor microcode (#2099)
This commit is contained in:
parent
360a1b4f33
commit
9e3e4a5df5
|
|
@ -10,6 +10,32 @@ from .networking import list_interfaces, enrich_iface_types
|
|||
from .output import debug
|
||||
|
||||
|
||||
class CpuVendor(Enum):
|
||||
AuthenticAMD = 'amd'
|
||||
GenuineIntel = 'intel'
|
||||
_Unknown = 'unknown'
|
||||
|
||||
@classmethod
|
||||
def get_vendor(cls, name: str) -> 'CpuVendor':
|
||||
if vendor := getattr(cls, name, None):
|
||||
return vendor
|
||||
else:
|
||||
debug(f"Unknown CPU vendor '{name}' detected.")
|
||||
return cls._Unknown
|
||||
|
||||
def _has_microcode(self) -> bool:
|
||||
match self:
|
||||
case CpuVendor.AuthenticAMD | CpuVendor.GenuineIntel:
|
||||
return True
|
||||
case _:
|
||||
return False
|
||||
|
||||
def get_ucode(self) -> Optional[Path]:
|
||||
if self._has_microcode():
|
||||
return Path(self.value + '-ucode.img')
|
||||
return None
|
||||
|
||||
|
||||
class GfxPackage(Enum):
|
||||
IntelMediaDriver = 'intel-media-driver'
|
||||
LibvaIntelDriver = 'libva-intel-driver'
|
||||
|
|
@ -180,8 +206,10 @@ class SysInfo:
|
|||
return any('intel' in x.lower() for x in SysInfo._graphics_devices())
|
||||
|
||||
@staticmethod
|
||||
def cpu_vendor() -> Optional[str]:
|
||||
return _sys_info.cpu_info.get('vendor_id', None)
|
||||
def cpu_vendor() -> Optional[CpuVendor]:
|
||||
if vendor := _sys_info.cpu_info.get('vendor_id'):
|
||||
return CpuVendor.get_vendor(vendor)
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def cpu_model() -> Optional[str]:
|
||||
|
|
|
|||
|
|
@ -574,6 +574,12 @@ class Installer:
|
|||
log(error.worker._trace_log.decode())
|
||||
return False
|
||||
|
||||
def _get_microcode(self) -> Optional[Path]:
|
||||
if not SysInfo.is_vm():
|
||||
if vendor := SysInfo.cpu_vendor():
|
||||
return vendor.get_ucode()
|
||||
return None
|
||||
|
||||
def minimal_installation(
|
||||
self,
|
||||
testing: bool = False,
|
||||
|
|
@ -610,18 +616,11 @@ class Installer:
|
|||
if not SysInfo.has_uefi():
|
||||
self.base_packages.append('grub')
|
||||
|
||||
if not SysInfo.is_vm():
|
||||
vendor = SysInfo.cpu_vendor()
|
||||
if vendor == "AuthenticAMD":
|
||||
self.base_packages.append("amd-ucode")
|
||||
if (ucode := Path(f"{self.target}/boot/amd-ucode.img")).exists():
|
||||
ucode.unlink()
|
||||
elif vendor == "GenuineIntel":
|
||||
self.base_packages.append("intel-ucode")
|
||||
if (ucode := Path(f"{self.target}/boot/intel-ucode.img")).exists():
|
||||
ucode.unlink()
|
||||
else:
|
||||
debug(f"Unknown CPU vendor '{vendor}' detected. Archinstall won't install any ucode")
|
||||
if ucode := self._get_microcode():
|
||||
(self.target / 'boot' / ucode).unlink(missing_ok=True)
|
||||
self.base_packages.append(ucode.stem)
|
||||
else:
|
||||
debug('Archinstall will not install any ucode.')
|
||||
|
||||
# Determine whether to enable multilib/testing repositories before running pacstrap if testing flag is set.
|
||||
# This action takes place on the host system as pacstrap copies over package repository lists.
|
||||
|
|
@ -840,17 +839,10 @@ class Installer:
|
|||
|
||||
microcode = []
|
||||
|
||||
if not SysInfo.is_vm():
|
||||
vendor = SysInfo.cpu_vendor()
|
||||
if vendor == "AuthenticAMD":
|
||||
microcode.append('initrd /amd-ucode.img\n')
|
||||
elif vendor == "GenuineIntel":
|
||||
microcode.append('initrd /intel-ucode.img\n')
|
||||
else:
|
||||
debug(
|
||||
f"Unknown CPU vendor '{vendor}' detected.",
|
||||
"Archinstall won't add any ucode to systemd-boot config.",
|
||||
)
|
||||
if ucode := self._get_microcode():
|
||||
microcode.append(f'initrd /{ucode}\n')
|
||||
else:
|
||||
debug('Archinstall will not add any ucode to systemd-boot config.')
|
||||
|
||||
options = 'options ' + ' '.join(self._get_kernel_params(root_partition)) + '\n'
|
||||
|
||||
|
|
@ -1065,14 +1057,10 @@ TIMEOUT=5
|
|||
|
||||
microcode = []
|
||||
|
||||
if not SysInfo.is_vm():
|
||||
vendor = SysInfo.cpu_vendor()
|
||||
if vendor == "AuthenticAMD":
|
||||
microcode.append("initrd=\\amd-ucode.img")
|
||||
elif vendor == "GenuineIntel":
|
||||
microcode.append("initrd=\\intel-ucode.img")
|
||||
else:
|
||||
debug(f"Unknown CPU vendor '{vendor}' detected. Archinstall won't add any ucode to firmware boot entry.")
|
||||
if ucode := self._get_microcode():
|
||||
microcode.append(f'initrd=\\{ucode}')
|
||||
else:
|
||||
debug('Archinstall will not add any ucode to firmware boot entry.')
|
||||
|
||||
kernel_parameters = self._get_kernel_params(root_partition)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue