Commit Graph
90 Commits
Author SHA1 Message Date
Martin Whitaker ef3f0bc1e5 Call cpuid_init() before the first call to map_region().
map_region() uses the long mode flag, so that must be initialised first.
2022-05-09 18:17:19 +01:00
Martin Whitaker af54067228 Execute smp_init() before keyboard_init() in case ACPI tables are overwritten.
When USB keyboard detection is enabled, physical memory pages are reserved
for use by the USB drivers. The physical memory map exposed by pmem.h does
not indicate where the ACPI tables reside, so we may end up using pages
that contain ACPI tables (or for that matter, the boot parameters and boot
command line). So rather than introduce a more complicated memory allocation
scheme, make sure we have finished with all the data passed to us by the
BIOS and/or boot loader before we start probing for USB devices.

The only downside to this is that it is no longer possible to interactively
disable parsing of the ACPI tables - that can now only be done by using the
"nosmp" boot option.
2022-05-04 22:42:31 +01:00
Martin Whitaker 7b41830c40 Change "smp" boot option to "nosmp".
SMP is now enabled by default, so we need an option to disable it.
2022-05-04 22:16:14 +01:00
martinwhitakerandMartin Whitaker 93c9c8ded5 Rework memory mapping to allow for larger program size (#54)
* Improve abstraction in vmem.h and limit memory benchmarking to first 2GB.

The third GB may get used for remapping memory regions that are only
accessed during startup, so it's not safe to use it for the memory
speed tests.

* Fix calculation of end limit for locating memory benchmark workspace.

* Document vmem.h.

* Use window number, not current start address, to detect first window.

* Increase the program low-load range from 1MB to 4MB and make more robust.

If the BIOS has reserved some parts of low memory, there may not be
enough contiguous space left to load the program there (issue #49).
So increase the low-load range to include the first 3MB of high
memory. Also guard against the program being initially loaded
straddling the new boundary.

Co-authored-by: Martin Whitaker <memtest@martin-whitaker.me.uk>
2022-04-28 23:04:01 +02:00
Martin Whitaker aa40bfb738 Accept up to 4 digits when reading CPU numbers in config menu (issue #50). 2022-04-23 16:06:53 +01:00
Martin Whitaker e0c0cd55c6 Tidy up code for performing reset via the EFI runtime sevices.
Make this entirely local to hwctrl.c.
2022-04-23 13:25:33 +01:00
Martin Whitaker 66c6dfa357 Reduce pause at start delay to 3 seconds. 2022-04-17 22:53:39 +01:00
Martin Whitaker 644a13c730 Add usbdebug command line option and conditionally pause at end of USB scan.
If the usbdebug option is present, pause at the end of the USB scan until
a key is pressed. Otherwise, if the keyboard=usb option is present and no
USB keyboards were discovered, pause for 10 seconds. Otherwise don't pause.
2022-04-17 22:46:17 +01:00
Sam Demeulemeester 7b2964dd21 Fix display of Paging Mode (PAE/LM/*NONE*) on 32bit binary 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 2a994e7ff5 Various code cleanup following PR review 2022-04-16 13:31:28 +02:00
Sam Demeulemeester bd5d3e865f Move various function in display.h. Finalize wording on CPU Topology 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 96a9021c93 Increase right block on line 7/8 by 1 char. 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 6fca9bedc9 Rework Line 9. Add DDR1->DDR5 Timing Detection to display on this line 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 979b85548d Rework Line #7 left block. Add preliminary CPUID function to detect CPU Topology 2022-04-16 13:31:28 +02:00
Sam Demeulemeester fac6e2a973 Rework the right block of lines 8/9 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 1afcd08951 Realign cache/memory size & bandwidth on line 3-6 for better readability. Add a new flag in printf to add a space between number in unit in %k mode 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 5580f7562d Add tracking & display for maximum CPU Temperature. Make the enable_temperature flag working as expected 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 272f1ce4f6 Rework line 2. Add placeholder for a dual temperature display (Actual/Max). Paging mode will move to line 7 2022-04-16 13:31:28 +02:00
Sam Demeulemeester 5f92ff1a64 Rework first line, add build number based on git hash, move 32/64b info to build number, add githash.h to git ignore. A better implementation of Makefile is needed (check if git is present and avoid rebuild (APP)*.c if hash is the same 2022-04-16 13:31:28 +02:00
Sam Demeulemeester faa0252e9c Final title color for maximum readability and to avoid confusion with the commercial Memtest86 2022-04-16 13:31:28 +02:00
Martin Whitaker ae2c010610 uhci: fix device speed setting when constructing a transfer descriptor. 2022-04-10 11:53:01 +01:00
Martin Whitaker f14d1fed52 Really add the noehci boot command line option.
(file missed in last commit)
2022-04-06 17:31:47 +01:00
Sam Demeulemeester 2e048a7c61 Add support for Serial/TTY (#32)
* Add preliminary support for TTY Serial/UART (#15)

* Use shadow_buffer instead of VGA buffer to get a framebuffer-agnostic TTY supprot

* Added menu browsing & inputs from Serial TTY (#15)

* Add fix for degree symbol on TTY. Correct serial.c & serial.h file created with CRLF (#15)

* Move tty_error_redraw() to insure correct redraw when a error occurs

* Many reindent / cleanup

* Various optimization from @martinwhitaker comments
2022-04-04 18:31:54 +02:00
Sam Demeulemeester ee80684c4f Separate benchmark from smbus/smbios and add a separate flag to enable/disable it 2022-04-01 20:34:52 +02:00
Sam Demeulemeester b4bab4f829 Add decoding of DMI structure 17 as helper for SPD decoding. Move DMI display function to disaply.h 2022-03-24 21:49:56 +01:00
Sam Demeulemeester bd5e6f3c6b Bring back the cache & memory benchmark feature (preliminary) 2022-03-24 21:49:56 +01:00
Sam DEMEULEMEESTER 2266151fe6 Early SMBUS functions (#2) & EFI Reset (#17) 2022-03-24 21:49:56 +01:00
Sam DEMEULEMEESTER 63904403b2 Added preliminary BIOS/EFI SMBIOS table parsing & basic printing (#1) 2022-03-24 21:49:56 +01:00
Martin Whitaker f6da06b117 Work around the halt/wakeup race in barrier_halt_wait() (issue #13)
There is an unavoidable race between one core halting after decrementing
the barrier count and another core sending it the wakeup NMI. This can
only occur if the core sending the wakeup is running at many times the
speed of the core halting, but it has been observed on an Intel Icelake
mobile processor.
2022-03-08 23:25:16 +00:00
Martin Whitaker ed0fd7830f Use IP instead of PC in interrupt display.
It's better to use the x86 terminology here.
2022-03-08 23:25:16 +00:00
Martin Whitaker 4078b7760e Faster barrier implementation.
The old barrier implementation was very slow when running on a multi-socket
machine (pcmemtest issue 16).

The new implementation provides two options:

  - when blocked, spin on a thread-local flag
  - when blocked, execute a HLT instruction and wait for a NMI

The first option might be faster, but we need to measure it to find out. A
new boot command line option is provided to select between the two, with a
third setting that uses a mixture of the two.
2022-02-28 22:05:21 +00:00
Martin Whitaker 631cd553aa Make sure the cache is enabled on all CPU cores, not just the BSP. 2022-02-28 22:05:21 +00:00
Martin Whitaker 06d670e9a8 Make sure the boot command line is accessible during startup.
If we remap other regions, it's possible it could get overlaid.
2022-02-28 22:05:21 +00:00
Martin Whitaker 03464dce85 Make sure the bootparams structure remains accessible during startup.
Once we start remapping other regions, it's possible it could get overlaid.
2022-02-28 22:05:21 +00:00
Lionel Debroux 3ed9276eb0 Optimize the interrupt handler a bit by using compile-time string concatenation. 2022-02-22 11:00:02 +01:00
Lionel Debroux 7b6855f608 Add CLI arguments for enabling trace. 2022-02-22 10:59:58 +01:00
Martin Whitaker f8b82eb0bd Exclude copyright notices from Doxygen file descriptions. 2022-02-19 19:56:55 +00:00
Martin Whitaker d04ec9f681 Rename to Memtest86+ v6.0. 2022-02-19 19:44:58 +00:00
Martin Whitaker 76adad2fe6 Add ability to generate internal API documentation using Doxygen. 2022-02-19 16:17:40 +00:00
Martin Whitaker 0e61b1605e Remove volatile qualifier from testword pointers.
Now we use the atomic read/write functions, these are redundant.
2022-02-19 13:01:42 +00:00
Martin Whitaker 02bcec2418 Remove unnecessary volatile qualifiers from test state variables.
Thread safety is ensured by the barriers.
2022-02-19 12:44:14 +00:00
Martin Whitaker e032df50d2 Minor code improvement for efficiency. 2022-02-19 11:52:42 +00:00
Martin Whitaker e99a7aedb3 Revert to starting APs before doing the dummy runs.
That optimisation occasionally caused a hang if the CPU sequencing
mode was reconfigured after testing had started. It didn't make a
significant difference to the startup delay, so just drop it.
2022-02-18 20:35:36 +00:00
Martin Whitaker cadad583d7 Eliminate the spinlock used when halting inactive CPU cores.
This is a more efficient implementation.
2022-02-18 20:08:24 +00:00
Martin Whitaker 807c4153c1 Add tracing for AP startup.
Also comment out tracing of memory window starts to reduce verbosity.
2022-02-13 20:25:58 +00:00
Martin Whitaker 16b066c3e3 Exit config menu immediately when "skip test" is selected. 2022-02-13 12:38:38 +00:00
Martin Whitaker efc9a9c16a Don't attempt to start the APs when restarting after a config change.
Leave the APs running whilst the BSP repeats the dummy runs. This means
we need to bypass the barriers during a dummy run. The APs will wait at
the first barrier until the BSP starts the first real run.
2022-02-12 19:37:58 +00:00
Martin Whitaker 2bf1623733 Halt CPU cores that are not active in a test.
This saves a lot of power when performing sequential tests.
2022-02-12 19:30:14 +00:00
Martin Whitaker 39d5715224 Fix interrupt handling when long mode is enabled in a 32-bit binary (part 2).
Handle passing the processor state to the application interrupt handler.
Update the 64-bit code to match the new trap state structure definition.
2022-02-12 09:39:09 +00:00
Martin Whitaker 93343db711 Remove redundant barrier. 2022-02-07 18:50:22 +00:00