Martin Whitaker
9fca23105a
Don't search for the RDSP at bootparams.acpi_rsdp_addr.
...
This field is only used internally by the Linux kernel, so will always
be zero when bootparams is passed to us by a bootloader.
2022-02-28 22:05:21 +00:00
Martin Whitaker
da7829d4c3
Ensure the ACPI tables and local APIC are mapped into an accessible region.
...
We only map the first 4GB of physical address space, so if the ACPI tables
or local APIC are located above 4GB, or are overlaid when we remap something
else (e.g. the video frame buffer), we need to map them to somewhere we can
access. The ACPI tables are only used during startup, but the local APIC
will be needed when we are running tests if we are saving power by halting
idle CPU cores and using a NMI to wake them up.
2022-02-28 22:05:21 +00:00
Martin Whitaker
5211b67e6c
Add option to map_region to indicate we only use the region during startup.
...
This will avoid unnecessary remapping of the ACPI tables if they are
located in the third GB of memory.
2022-02-28 22:05:21 +00:00
Martin Whitaker
a65d6a795d
Rename map_device to map_region to better describe its use.
2022-02-28 22:05:21 +00:00
Martin Whitaker
604b22449a
Allow device mapping to reuse existing mapped regions when they fully overlap.
2022-02-28 22:05:21 +00:00
Martin Whitaker
e4ad2dfa1b
Don't use the top 0.5GB of the 32-bit address space for device mapping.
...
This region is commonly used by the BIOS for mapping hardware devices,
so we can avoid a lot of remapping if we don't use it.
2022-02-28 22:05:21 +00:00
Martin Whitaker
6b570cd779
Reduce the maximum mapped size of the linear frame buffer.
...
This is needed for subsequent changes. If we do ever get presented with
a frame buffer larger than 8192x8192 pixels, we'll need to think again
about how to manage it.
2022-02-28 22:05:21 +00:00
martinwhitaker
15b233cc89
Merge pull request #4 from memtest86plus/debrouxl_misc_improvements
...
Misc small improvements
2022-02-22 23:17:05 +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
f109a5814b
Implement EHCI handover to companion controllers.
...
Low/full speed USB devices attached directly to the root hub must be
rerouted to a companion controller. We can't rely on the BIOS to do
this for us. This requires us to initialise the EHCI device before
initialising any of its companions.
This also allows us to support keyboards attached via a high speed
hub on a system with EHCI plus companions.
2022-02-20 20:21:16 +00:00
Martin Whitaker
3245b6d916
Don't turn the cache off in test 0 when performing dummy runs.
...
This should fix the slow startup on multi-socket machines (issue #16 ).
2022-02-19 20:55:41 +00: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
0075375632
Import code from pcmemtest.
2022-02-19 17:58:09 +00:00
Martin Whitaker
3b183b0bef
Add preliminary (untested) code for supporting UHCI.
2022-02-19 16:24:47 +00:00
Martin Whitaker
76adad2fe6
Add ability to generate internal API documentation using Doxygen.
2022-02-19 16:17:40 +00:00
Martin Whitaker
d09c5ed7b4
Remove the power-saving delay loop from the usleep function.
...
Now we halt inactive CPU cores, this should no longer be needed.
2022-02-19 13:04:26 +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
f4a413cf6d
Translate non-usable EFI memory regions to E820_RESERVED, not E820_NONE.
...
This is more correct. Using E820_NONE may have been confusing the code
in pmem.c that sanitises the memory map.
2022-02-13 20:44:58 +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
d1382b7a53
Increase timeout delay for starting APs.
2022-02-13 20:25:11 +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
c23b129e55
Remove delay loop from spinlock wait.
...
Now we halt CPU cores that are going to be idle for a lengthy period,
we don't need to try to save power in other ways. And anyway, this was
not very effective.
2022-02-12 19:33:53 +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
de32bc5412
Ensure we only use 32-bit reads and writes when accessing APIC registers.
2022-02-12 09:39:18 +00:00
Martin Whitaker
99e258457b
Use je/jne instead of jz/jnz when testing boolean variables in startup code.
...
Just for readability - they are aliases for the same instructions.
2022-02-12 09:39:18 +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
Doc TB
c1bc395b4c
Initial commit
2022-02-12 01:48:34 +01:00
Martin Whitaker
111e619b10
Fix interrupt handling when long mode is enabled in a 32-bit binary (part 1).
...
If long mode is enabled, the interrupt handler always runs in 64-bit
mode, so we need to set up the interrupt dispatch table accordingly.
2022-02-08 23:35:00 +00:00
Martin Whitaker
e96fd7b99f
Fix a few minor issues in the 64-bit startup code...
...
- the calculation of the RSP value when an interrupt occurred was
out by 8 bytes
- in a few places a 32-bit pointer was used instead of a 64-bit one
- incorrect tabulation (white space)
2022-02-08 23:29:24 +00:00
Martin Whitaker
93343db711
Remove redundant barrier.
2022-02-07 18:50:22 +00:00
Martin Whitaker
3028cd31f9
Increase sleep time when polling for all other APs started.
...
Also fix warning about usleep not being defined.
2022-02-05 18:07:03 +00:00
Martin Whitaker
242bd77927
Remove unwanted debug code.
2022-02-05 18:04:38 +00:00
Martin Whitaker
7dd17c26c0
Check whether the BIOS has enabled x2APIC mode, and disable SMP if so.
2022-02-05 18:03:32 +00:00
Martin Whitaker
29b8bbece8
Rework AP startup based on how it's done in Linux.
2022-02-05 18:03:32 +00:00
Martin Whitaker
503aea321d
Remove redundant start_mutex.
...
The mutex is now implemented in the assembly language boot code.
2022-02-05 18:03:32 +00:00
Martin Whitaker
9769990679
Extend the use of the startup mutex to cover the entire startup code.
...
There is more in the startup code that isn't thread safe than just
the use of the temporary stack. So take the mutex for the whole time.
The code isn't that long, so it's not worth trying to cover just the
critical sections.
2022-02-05 18:03:32 +00:00
Martin Whitaker
13efd906f1
Guard against an AP starting more than once.
2022-02-03 19:48:27 +00:00
Martin Whitaker
e37fbbd429
Set stack alignment to 16 bytes.
...
This needs to be done in the ldscripts.
2022-02-02 18:23:23 +00:00
Martin Whitaker
1888f5c611
Add change to tests/test.c missed in commit dcac5270
.
2022-02-02 15:33:25 +00:00
Martin Whitaker
7acb81e302
Fix assembler warning about unsized bts instruction.
2022-02-02 12:52:44 +00:00
Martin Whitaker
dcac527068
Don't make assumptions about usable memory.
...
When using a legacy BIOS, the memory regions used by the BIOS are well
defined. This is not the case when using a UEFI BIOS. So include the
stack area in the BSS so the loader knows how much memory to allocate,
and check we have space to relocate the program to either low or high
memory.
There are still some assumptions in the USB driver code that need to
be fixed.
2022-02-02 12:20:39 +00:00
Martin Whitaker
fb0f1a7fe5
Don't start APs until after dummy runs have finished.
...
This should significantly improve startup time on machines with many
cores, as the barriers become no-ops during the dummy runs.
2022-02-01 23:50:49 +00:00
Martin Whitaker
fd141c59c7
Use "CPU core" in preference to "CPU" in comments.
2022-02-01 15:42:44 +00:00