Commit Graph
269 Commits
Author SHA1 Message Date
Lionel Debroux d2c7cdfec9 Silence GCC 15+ warning on the GPT signature in a portable way, by using an array of bytes, like for the Basic Data Partition GUID. 2026-07-12 18:53:07 +02:00
Sam Demeulemeester d105c55e15 Normalize membw.c to LF and enforce LF endings via .gitattributes 2026-07-12 18:30:19 +02:00
Sam Demeulemeester 951cd58833 benchmark: account for RFO traffic in cached copies (fixes L3 speed too low) 2026-07-12 18:29:04 +02:00
Sam Demeulemeester fe06e5d641 Fix EPYC Temperature reporting (again) (#633)
Check CUR_TEMP_TJ_SEL for EPYC CPUs
2026-07-12 15:37:06 +02:00
Sam Demeulemeester 7fc312d5b0 Add support for aarch64 (ARM64) architecture (#626)
* Initial commit for ARM64 (header.S & startup.S)

* Add Aarch64 interrupt handler

* Adapt lib/ to Aarch64

* Small ASM addition for AArch64

* Rewrite Aarch64 system/
- cpuid.c/cpuinfo.c for CPU detection (Qualcomm, Apple, Nvidia, etc)
- Add ARM Power State Coordination Interface (PSCI) functions
- vmem.c for Virtual Memory MAnagement on ARM64
- Various functions placeholders

* Add pseudo-TSC correction for Aarch64

* Add pseudo-tsc measurement for Aarch64

* Add Aarch64 if/elif on basic IO/MMIO/MEM RW functions

* Add support for Surface 13 / Snapdragon X KB USB
Fix an issue with the XHCI.c drivers with packets > 8 bytes

* Add MMIO Serial support for ARM64

* Add ARM64 ASM for block_move & mov_inv_fixed. Fix VM start pointer

* Add ARM Serial MMIO configuration

* Revert previous commit & reintroduce ARM64 cache functions

* Add ACPI MCFG Table description & SMP parsing. This requires careful review/testing to avoid BC issues!

* Revert previous commmit and reintroduce relocation and heap change for ARM64

* ARM64 does not support CPU PNS. Use DMI type4 parsing instead. Add SMBIOS v3 support (ARM64 does not support v2)

* Fix typo in pci.h

* Move Aarch64 load-limit computation from main.c to pmem.c

* Add .arm64 to version string. Use PMU for clock computation display. Fix D5 Temp NULL not handled

* Add Makefile and linker scripts for aarch64. Set cross-compiler from x86 by default

* Attempt to add aarch64 to workflow

* Remove a remaining internal debug flag

* Correct typos

* Fix ARM64 SMP freeze
assign heap when RAM is one contiguous region, keep it below 3GB for DMA (RPi5), add DSB before SEV to avoid missed barrier wakeups
Sync I-cache with D-cache after program relocation to prevent stale instruction fetch

* Validate MADT entry lengths to avoid reading past the table (or looping forever) on malformed ACPI tables

* aarch64: add NEON kernels for the vector PRSG tests
Tests 3 (bus stress) and 5 (moving inversions, random) now dispatch to 128-bit NEON fill/scan instead of scalar.

* Fix ARM64 data abort from the per-second DMI check & fix unbounded strstr()

* Fix ARM64 data abort when saving results to USB after a relocation

* Update README.md with AArch64 (ARM64) support

* aarch64: shrink static string tables, harden MCFG/paging
 Replace pointer-based name tables with inline char arrays (saves ~1.5KB + relocs)
alidate MCFG length/bus ranges, and bound pm_map/vm_map fills against overflows

* Add NVIDIA & latest Apple ARM SoC to cpuid.c

* Fix stale pointers read by the report writer after a program relocation
cpu_model gets a static init (creates its reloc record)SPD type becomes an inline char array
2026-07-12 13:27:45 +02:00
Sam Demeulemeester 33a5eeeffa Add support for USB Mass Storage Devices (#607)
* Initial commit for USB Mass Storage Support

* Add support for SCSI_16 and various fixes by debrouxl

* Fix USB HCD registration to skip failed probes (when a mass storage device was already found)

* Fix xHCI bulk transfer completion matching & accept short packets for IN transfers

* Add USB BOT error recovery and match xHCI control events by slot/EP

* Add EHCI bulk timeout/size guard, fix per-controller MSD port handling, and make xHCI keyboard re-arm precise

* Harden FAT/GPT parsing (cluster validation & block-size check) and fix RTC read issue due to R/W race

* Fix report varargs on x86_64, truncate F6 drive label, and clean up failed FAT file writes

* Fix stale hub VID/PID read, refactor USB MSD detection to helper & tidy usbhcd/display/config layout

* Scan for USB drives on demand when saving a report
Keep EHCI/xHCI controllers registered when empty and rescan free root ports on F6.
Also fix xHCI keyboard re-arm losing a key release, dropping the next same-key press.
2026-07-11 11:49:41 +02:00
Sam Demeulemeester a557c9402c Display memory info from DMI when SPD is unavailable (#629)
* Display memory info from DMI when SPD is unavailable
* ARM64 does not support CPU PNS. Use DMI type4 parsing instead. Add SMBIOS v3 support (ARM64 does not support v2)
2026-07-11 11:24:23 +02:00
Sam Demeulemeester 13d15e95bf Hardened AP Stack Management (#631)
* Hardened AP Stack Management (see PR for details)

* Fix low-memory boot issues caused by the larger AP stack area
 Zero only _bss.._stacks at first boot (the full sweep wiped ACPI/SMBIOS anchors above 0xE0000 on writable-shadow platforms), verify relocation addresses against pm_map, and relocate before smp_start() when the enabled CPUs' stacks would extend beyond usable low RAM, setting up the AP trampoline at start time.
2026-07-11 11:23:26 +02:00
Sam Demeulemeester 72d08688ba Add rowhammer test (new test 11), disabled by default
Blacksmith-style non-uniform, REFRESH-synchronised many-sided hammering with DRAMA-lite row-stride discovery and a blind-stride fallback
x86 clflush(opt) engine with a coarse whole-cache-flush fallback for other targets. LA64 TBT
2026-07-11 11:22:01 +02:00
Sam Demeulemeester 4e76e517eb Add SIMD moving inversions test with random sequences (AVX2/SSE2)
Replace tests 5 & 8 with a single moving inversions test using per-lane
xorshift sequences and non-temporal stores. Kernels (inline asm) are picked
at runtime via the new system/simd module: AVX2, SSE2 or scalar, with the
tier shown in the test name.
Fix and enable the AVX/XCR0 startup code and decode the XSAVE/AVX/AVX2 CPUID flags.Suite shrinks from 11 to 10 tests.
2026-07-11 11:22:01 +02:00
Sam Demeulemeester badcf8a57c Add temperature quirks for AMD EPYCs (#616)
Closes #411
2026-05-25 20:57:38 +02:00
Sam Demeulemeester 997d4d2da2 Suppress GCC 12+ warnings from BIOS Direct Access 2026-05-22 15:34:56 +02:00
Nikolaos Barkas d3827673d7 Fix SiS 530 & ALi Aladdin IV/V motherboard cache detection
Adds external L2 cache size detection for Socket 7 boards with SiS 530
  northbridge, and extends the existing ALi quirk to also cover Aladdin IV
  (M1531) in addition to Aladdin V (M1541).

  Tested on: K6-II + SiS 530 with 512KB L2 cache.

  Closes #602
  Co-authored-by: Sam Demeulemeester <github@x86-secret.com>
2026-05-17 19:56:29 +02:00
Sam Demeulemeester 494689a7ac Add many JEDEC IDs for unknown DRAM manufacturers 2026-05-06 22:25:51 +02:00
Sam Demeulemeester eac97205ff Better Cache & DRAM Bandwidth measurement (+Enable SSE2 on x86_64) (#587)
* Enable SSE2 on x86_64 build

* Better Memory Bandwidth measurement
- Moved memory speed measurement to a dedicated file
- Use SSE2 on x86_64 for better DRAM BW measurements
- Add a lot of safeguards to avoid issue with very large L3 cache
- Add a more precise way to target a specific cache
- Change the iteration number from fixed to time-constrained so overall test time is always same
- Added many configuration parameters for fine-tuning

* Revert saving XMM registers to stack.
Instead, make sure to use only GPR for interrupt handling (so it won't touch SIMD regs)
2026-04-07 22:21:55 +02:00
Sam Demeulemeester f0ae889c7e Make Invalid Temperature Sentinel Agnostic
Do not display DDR5 Temperature when not available
2026-04-07 18:52:38 +02:00
Dongyan QianandSam Demeulemeester fb158cdc3e Better CPU temperature display & Fix LA64 temperature overflow (#593)
* system/loongarch: Decode CPU temperature as signed 8-bit

Interpret the low 8 bits of the CPU temperature register as a signed
value, apply the platform-specific offset, and reject readings when the
temperature-valid bit is clear.

At low temperatures the raw register value would otherwise be interpreted
as a large positive number, which breaks the displayed reading.

Reported-by: Mingcong Bai <jeffbai@aosc.io>
Signed-off-by: Dongyan Qian <qiandongyan@loongson.cn>

* Better display of CPU temp from -99°C to 999°C

* Add sentinel value for CPU_TEMP_INVALID to allow negative temperature

---------

Signed-off-by: Dongyan Qian <qiandongyan@loongson.cn>
Co-authored-by: Sam Demeulemeester <github@x86-secret.com>
2026-04-03 15:48:30 +02:00
Sam Demeulemeester 7eb2568dfe Add support for Intel Lunar Lake & Panther Lake CPUs 2026-03-23 17:52:55 +01:00
Sam Demeulemeester a90edd63ce Fix tRP measurement on Intel LPDDR5 laptop
Use tRPpb instead of tRPab
2026-03-23 17:52:02 +01:00
Sam Demeulemeester feeb7d2d01 Fix Core Topology Determination on some CPUs (eg: Intel PTL) 2026-03-17 00:15:46 +01:00
Sam Demeulemeester 4fa58699a9 Add support for x2APIC (#583)
* First commit to support x2APIC

* Keep apio_x2apic bool everywhere to avoid compilation issues on LA64.
x2APIC support on LA64 must be checked later (probably different MSRs)

* Various fixes
 - Fix flags in MADT x2APIC (CPU only has ENABLED, not ONLINE
 - Increased chunk index and related function from 8 to 16-bit
 - Increase MAX_APS and MAX_APIC_IDS to 512 (need an APs stack size evaluation to be sure we will not overflow)
2026-02-14 13:35:45 +01:00
Dongyan Qian 450961c81e system/loongarch: Fixes display issues for 2K3000/3B6000M (#589)
On LoongArch, PCIe MMIO space above 4 GiB must be mapped as uncached;
otherwise writes may not reach the device, so framebuffer updates are not visible.
Adjust the PCIe memory window layout according to the Loongson 2K series documentation.

Signed-off-by: Dongyan Qian <qiandongyan@loongson.cn>
2026-01-29 11:05:07 +01:00
Jonathan Teh d39efcdcda hwquirks: Detect cache on VIA VP/VPX (#576)
Extend the existing quirk for VP3/MVP3 to VP/VPX.
2026-01-19 01:09:58 +01:00
Yao Zi 1c075f8cd0 system: loongarch: cpuinfo: Unroll memspeed copy loop (#578)
Unlike x86_64 where rep movsl/movsq could be turned into efficient uOP
to achieve a good performance, on LoongArch a simple loop that copies
only 8 bytes per iteration couldn't fully feed the pipeline.

This makes calculated cache bandwidth suspcious: on my Loongson 3A5000
laptop, memtest86plus reports the same bandwidth for L1 and L2, which is
obviously incorrect.

Let's unroll memspeed loop to copy 64-bytes per iteration, which fits
in a cacheline and should fully feed the pipeline for even future
generations of Loongson cores.

Signed-off-by: Yao Zi <me@ziyao.cc>
2026-01-19 01:09:19 +01:00
martinwhitakerandSam Demeulemeester 3a7a058aed Recognise VT52/VT100/VT220 key escape sequences on serial console (#547)
* Recognise VT52/VT100/VT220 key escape sequences on serial console.

Map function keys to '0' to '9' and cursor keys to 'u', 'd', 'l',
'r', as is done for legacy and USB keyboards. Ignore all other
special key sequences.

* Make serial_echo_print() and tty_goto() static.

These are local to serial.c. Making them static saves a few bytes.

* Update keyboard.h to document cursor key mapping.

* Added some escape codes for terminals & VT100+
Change input order to check TTY first

* Replace comments about PF6-10

---------

Co-authored-by: Sam Demeulemeester <github@x86-secret.com>
2025-10-08 12:51:49 +02:00
Sam Demeulemeester ced9529bea DDR5 DIMM Temperature Reporting (#497)
* Initial commit for DDR5 Temperature report

* Change smbus.h to i2c_x86.h

* Change I2C includes defines name to avoid conflict

* Add dummy get_ram_temp() function on LA64

* Add menu option for RAM/DDR5 Temperature polling
2025-10-06 23:01:33 +02:00
David Corvaglia 2b51351ab7 added serial newline option (#528) 2025-10-05 16:53:19 +02:00
Sam Demeulemeester ae9e085035 Add support for AMD Zen5 Granite Ridge (GRG) ECC polling. (#545)
Fix an issue with Rembrandt ECC polling where only half of the channels where checked
2025-10-05 16:35:53 +02:00
Sam Demeulemeester 2350230351 Unhide SMBUS device to allow SPD reading on early Intel's ICH SB (#544)
* Add quirks for ICH0-5 (SMbus Unhide)

* Minor constant name changes & typo
2025-10-05 16:31:55 +02:00
Sam Demeulemeester ac7d092417 Added various DRAM manufacturers from JEP106 list
Manually reworked strings
2025-10-05 16:26:58 +02:00
Sam Demeulemeester 6888b1d5a0 Add support for Intel Arrow Lake-H (SOC)
Tested OK on NUC 15th Gen.
2025-10-05 16:02:07 +02:00
Lionel Debrouxand01e3 a935afd50a Avoid unnecessary Frame Buffer updates (#543)
Frame Buffer updates are expensive, let's instead uses these CPU cycles
for testing RAM...

Co-authored-by: 01e3 <01e3@ans.pl>
2025-09-14 21:36:34 +02:00
martinwhitaker 2a58a7cb53 Add USB hub quirk to support AMI virtual keyboard (issue #523) (#535)
* Add USB hub quirk to support AMI virtual keyboard (issue #523)

From testing it appears that the AMI virtual devices do not work
correctly if you disable one port on the virtual hub then reuse the
USB address for a device connected to another port on that hub. So
add a quirk to detect the virtual hub from its vendor/product ID
and leave all ports on that hub active when performing the scan for
USB keyboards. This will permanently reserve a bit more memory, but
not significantly so.

* Replace hard-coded USB vendor ID with macro definition.
2025-08-16 22:20:40 +02:00
Lionel DebrouxandSam Demeulemeester f19066d258 Update Intel i801 PCI device IDs list & Add support for MTL-P (#537)
* Update Intel i801 PCI device IDs list from the Linux driver.

* Add support for MTL-P (eg: NUC 14th Gen)

---------

Co-authored-by: Sam Demeulemeester <github@x86-secret.com>
2025-08-14 12:17:27 +02:00
Jonathan Teh 1b5065b494 imc: Enable support for AMD Cezanne (Zen 3 APU) (#525) 2025-07-06 13:06:38 +02:00
Martin Whitaker 106f9ee358 Add optional parameters to usbdebug boot option.
The usbdebug option may now be optionally followed by "=hub" or "=kbd",
which enables details of the configuration and endpoint descriptors to
be printed when scanning for hubs or keyboards respectively. This can
easily result in more than one screenful of information (and we can't
say "press any key to continue" before we've completed the scan and set
up the keyboard handler), so a 1 second delay is added after printing
each line of detailed information.
2025-07-04 18:04:09 +01:00
Sam Demeulemeester 2f9b165eec Add support for AMD Hawk Point FP7 (Phoenix) 2025-05-27 22:02:41 +02:00
Dongyan Qian 07d84f4f34 loongarch: Supports 2K2000/3B6000M (#512)
* loongarch: adjust 2K/3B6000M DDR rate factor
* loongarch: Supports fewer cache layers than L3

For example: 2K2000 chip does not have L3, but has L2.
If L2Cache is not flushed to memory, it will cause read and write data errors after cache_off.
2025-05-12 13:56:30 +02:00
Sam Demeulemeester a47b2bc053 Fix DDR5 SPD parsing issue for XMP 3.0 frequency
On DDR5, limit XMP profile parsing to 2 to avoid conflict between XMP and EXPO
Add a check to skip very low tCK values
2025-04-20 19:16:51 +02:00
Lionel Debroux a10664a251 Make paths more uniform across architectures; adjust the build system and Github workflows accordingly.
* move x86/x86-64-specific files to boot/x86, build/i586, build/x86_64, system/x86, system/imc/x86;
* move build64/la64 to build/loongarch64;
* rename system/imc/loongson to system/img/loongarch.
2025-02-24 20:25:29 +01:00
Sam Demeulemeester 97de11f9f5 Add support for color schemes and implement a dark mode (#496)
Color vs Colour. That is the question.
Closes #439
2025-02-10 23:33:48 +01:00
martinwhitaker e285fbb4b9 Ignore PS/2 mouse events (issue #456) (#484)
If a legacy BIOS has enabled PS/2 mouse input, the bytes received on
port 0x60 may come from either the keyboard or the mouse. Currently
we treat all bytes as keyboard input, which means mouse input will be
translated into arbitrary key codes. This may cause a memory test to
be interrupted or aborted. We should instead disable or ignore any
mouse input.

Although it should be possible to reconfigure the PS/2 controller to
disable mouse input, it's quite likely that there's some quirky H/W
out there that makes this more complicated than it seems. The simple
solution is to detect mouse input by checking whether bit 5 of the
received byte is set and discarding it if so.
2025-01-27 21:54:54 +01:00
Sam Demeulemeester b51c6e75f3 Add Thermaltake and SSTC Jedec IDs 2025-01-27 19:41:36 +01:00
Chao Li 422212b06a system/hwquirks: Optimization Loongson 7A2000 EHCI quirk (#473)
Currentilly, it only compares the root bus DID is 0x7A00 which sometimes
fails, a new logic was added to compare the 7A2000 EHCI DID to fix it.

Signed-off-by: Chao Li <lichao@loongson.cn>
2024-12-06 22:51:18 +01:00
Sam Demeulemeester 5a046291fa Add a few RAM manufacturers in JEDEC DB 2024-11-12 00:25:38 +01:00
Jonathan TehandSam Demeulemeester 51b78487f5 hwquirks: Detect cache on VIA VP3/MVP3 (#356)
Add quirk to detect motherboard cache on VIA VP3/MVP3.

Co-authored-by: Sam Demeulemeester <38105886+x86fr@users.noreply.github.com>
2024-11-12 00:10:40 +01:00
Lionel Debroux d2ecbac5fd Add PCI ID for the SMBus controller behind the VT8237S bridge. (#448)
00:11.0 ISA bridge [0601]: VIA Technologies, Inc. VT8237S PCI to ISA Bridge [1106:3372]
2024-11-11 23:57:36 +01:00
Jonathan Teh d551d92b45 temperature: Add support for AMD Excavator (#440)
Read current temperature from SMU via root complex.
2024-11-11 23:49:31 +01:00
Sam Demeulemeester 46e3b43859 Add support for latest AMD Zen5 CPU (Ryzen 9000)
Change DDR5 SPD Bank switch method on AMD according to feedbacks from betatesters
2024-11-10 23:45:49 +01:00
Chao Li 3ce7c3fb39 loongarch: Add 64-bit PCIe memory space mapping and change the stable timer as the main timer (#450)
* system/loongarch: Add 64-bit PCIe memory space mapping

Added the 64-bit PCIe memory space mapping. From 0x8000000000ULL to
0xFD00000000ULL are LoongArch 64-bit PCIe memory spaces and need to be
mapped.

Signed-off-by: Chao Li <lichao@loongson.cn>

* system/loongarch: Optimization timer on LoongArch

Since some LoongArch64 CPUs stop the performance counters when ilde, the
running time displayed on the screen is incorrect.

Using stable counter can solve this problem, so remove the performance
counters time, and add stable counter time.

Signed-off-by: Chao Li <lichao@loongson.cn>

---------

Signed-off-by: Chao Li <lichao@loongson.cn>
2024-10-24 19:28:00 +02:00