coreboot/src/lib
Patrick Rudolph 159afbc5d5 lib/lzmadecode: Increase decoding speed by 30%
When CONFIG_SSE is enabled use the "prefetchnta" instruction to load
the next chunk of data into the CPU cache. This only works when the
input stream is covered by an MTRR. In case the input stream is read
from the SPI ROM MMIO area it allows to keep the SPI controller
busy fetching new data, which is automatically placed into the CPU
cache, resulting in less I/O wait on the CPU side and faster
decompression.

When the input stream is not cachable the prefetch instruction has no
effect.

The SPI interfaces on the tested device runs at 100Mbit/s and the
Sandy Bridge mobile CPU has quite some work to do decompressing the
LZMA stream.
That gives the SPI controller enough time to preload data into the
cache.

The payload of 1100213 bytes is now read in 164msec, resulting in an
input bandwidth of 53MBit/s.

TEST=Booted on Lenovo X220 and used cbmem -t:
Before:
  16:finished LZMA decompress (ignore for x86)   1,218,418 (210,054)
After:
  16:finished LZMA decompress (ignore for x86)   1,170,949 (164,868)

Boots 46msec faster than before or 30% faster than before.

Change-Id: I3b2ed7fe0883f271553ecd1ab4191e4848ad0299
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/88813
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
2025-09-09 14:40:45 +00:00
..
gnat lib,console,sbom: Rename Makefiles from .inc to .mk 2024-01-24 10:12:57 +00:00
asan.c Allow to build romstage sources inside the bootblock 2023-11-09 13:20:18 +00:00
b64_decode.c
bmp_logo.c {lib, drivers/intel}: Add splash screen footer 2025-06-23 02:04:26 +00:00
boot_device.c
bootblock.c timestamps: Rename timestamps to make names more consistent 2022-03-08 16:06:33 +00:00
bootmem.c drivers/efi/uefi_capsules.c: coalesce and store UEFI capsules 2024-08-30 15:48:25 +00:00
bootmode.c lib/bootmode: Enforce display init requirement for vboot 2025-04-12 17:34:09 +00:00
bootsplash.c lib/jpeg: return string (not int) error messages 2024-09-18 21:51:40 +00:00
cb.ads lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
cbfs.c cbfs: Add a function to wait for all CBFS preload operations to complete 2025-07-21 13:45:12 +00:00
cbfs_master_header.c treewide: Assume FMAP_SECTION_FLASH_START = 0 2025-04-18 14:57:05 +00:00
cbmem_common.c src/lib/cbmem_common: Delete a space(' ') in the source code 2025-08-28 20:13:34 +00:00
cbmem_console.c lib/cbmem_console.c: Use C99 flexible arrays 2023-07-30 09:59:46 +00:00
cbmem_stage_cache.c src/lib: Add memory/time saving special case for ramstage caching 2023-12-18 08:13:12 +00:00
coreboot_table.c lib: Add boot mode information to coreboot tables 2025-09-05 04:22:21 +00:00
crc_byte.c
decompressor.c timestamps: Rename timestamps to make names more consistent 2022-03-08 16:06:33 +00:00
delay.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
dimm_info_util.c lib/dimm_info_util.c: Add newlines to log messages 2023-06-03 16:12:54 +00:00
dp_aux.c Use the fallthrough statement in switch loops 2022-02-16 21:29:53 +00:00
edid.c lib/edid: Support DisplayID 2.0 extension 2025-03-12 12:45:39 +00:00
edid_displayid.h lib/edid: Support DisplayID 2.0 extension 2025-03-12 12:45:39 +00:00
edid_fill_fb.c drivers/intel/gma: Fix mismatching types for fb_add_framebuffer_info 2024-09-02 09:33:59 +00:00
espi_debug.c lib/espi_debug: Add espi_show_slave_peripheral_channel_configuration 2021-04-23 21:20:26 +00:00
ext_stage_cache.c ext_stage_cache: Make sure variables are initialized 2024-08-30 07:35:10 +00:00
fallback_boot.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
fit.c include/device_tree.h: Fix function name fdt_node_name 2024-06-28 12:29:13 +00:00
fit_payload.c cbmem.h: Change return type of cbmem_get_region 2024-08-29 13:58:21 +00:00
fmap.c region: Introduce region_create() functions 2024-08-11 17:07:32 +00:00
fw_config.c src/lib: use RO CBFS file as fw_config source 2025-03-26 16:37:25 +00:00
gcc.c
gcov-glue.c tree: Use __func__ instead of hard-coded names 2023-02-17 16:08:04 +00:00
gcov-io.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
gcov-io.h lib/gcov-io.h: Use C99 flexible arrays 2023-08-01 13:34:27 +00:00
gcov-iov.h lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
gpio.c
halt.c treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
hardwaremain.c {commonlib, lib}: Add timestamp for early chip initialization 2025-04-08 07:50:18 +00:00
hexdump.c lib/hexdump: remove hexdump32 and use hexdump instead 2021-05-27 15:41:15 +00:00
hexstrtobin.c
hw-time-timer.adb
identity.c lib/version: Move board identification strings 2023-04-22 16:20:49 +00:00
imd.c lib: Remove unused <stdlib.h> and use <types.h> when appropriate 2022-04-24 17:43:57 +00:00
imd_cbmem.c cbmem.h: Change return type of cbmem_get_region 2024-08-29 13:58:21 +00:00
io.c soc/amd/common/psp_verstage: Remove arch/io.h 2025-04-02 16:03:34 +00:00
jpeg.c lib/jpeg: return string (not int) error messages 2024-09-18 21:51:40 +00:00
jpeg.h lib/jpeg: return string (not int) error messages 2024-09-18 21:51:40 +00:00
Kconfig {lib, drivers/intel}: Add splash screen footer 2025-06-23 02:04:26 +00:00
Kconfig.cbfs_verification Kconfig.cbfs_verification: Update TOCTOU_SAFETY combination with VBOOT 2023-11-07 22:30:20 +00:00
libgcc.c
libgcov.c treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
lzma.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
lzmadecode.c lib/lzmadecode: Increase decoding speed by 30% 2025-09-09 14:40:45 +00:00
lzmadecode.h lib/lzmadecode: Allow for 8 byte reads on 64bit 2024-02-21 16:19:05 +00:00
Makefile.mk {lib, drivers/intel}: Move BMP rendering logic out of SoC code 2025-07-23 17:11:10 +00:00
malloc.c malloc/memalign: Return NULL if the request is too large 2024-01-29 19:12:43 +00:00
master_header_pointer.c treewide: Assume FMAP_SECTION_FLASH_START = 0 2025-04-18 14:57:05 +00:00
memchr.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memcmp.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memcpy.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memmove.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memrange.c tree: Remove blank lines before '}' and after '{' 2024-04-11 19:19:08 +00:00
memset.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
metadata_hash.c cbfs/vboot: Adapt to new vb2_digest API 2022-09-02 23:51:29 +00:00
nhlt.c lib/nhlt, soc/intel/skl: Update NHLT to program feedback config 2022-12-21 13:57:48 +00:00
primitive_memtest.c
prog_loaders.c cbmem_top: Change the return value to uintptr_t 2024-07-10 12:55:46 +00:00
prog_ops.c lib/prog_ops.c: Add <types.h> 2022-10-06 18:13:19 +00:00
program.ld drivers/option: Add forms in cbtables 2024-12-18 18:16:51 +00:00
ramdetect.c riscv/mb/qemu: fix DRAM probing 2024-03-04 23:43:46 +00:00
ramtest.c commonlib/console/post_code.h: Change post code prefix to POSTCODE 2023-06-23 15:06:04 +00:00
reg_script.c tree: Drop duplicated <device/{path,resource}.h> 2024-04-12 04:24:20 +00:00
region_file.c tree: Remove blank lines before '}' and after '{' 2024-04-11 19:19:08 +00:00
render_bmp.c lib: Correct logo bottom margin handling for all panel orientations 2025-08-23 03:12:43 +00:00
render_bmp.h {lib, drivers/intel}: Move BMP rendering logic out of SoC code 2025-07-23 17:11:10 +00:00
reset.c
rmodule.c payloads,src: Replace ALIGN(x, a) by ALIGN_UP(x, a) for clarity 2022-10-13 19:14:57 +00:00
rmodule.ld lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
romstage_handoff.c ACPI S3: Replace stashed acpi_slp_typ value 2021-01-23 20:19:47 +00:00
rtc.c lib/rtc: Fix off-by-one error in February day count in leap year 2024-02-29 13:07:02 +00:00
selfboot.c /: Remove extra space after comma 2022-11-30 03:07:23 +00:00
smbios.c lib/smbios: Improve Type9 2024-10-28 22:06:01 +00:00
smbios_defaults.c Kconfig: Rework SYSTEM_TYPE_XX to better map to SMBIOS 2025-02-19 16:45:42 +00:00
spd_bin.c spd_bin.h: Deduplicate SPD definitions 2025-03-16 05:25:07 +00:00
spd_cache.c soc/common/smbus: Support reading SPD5 hubs for DDR5 2025-08-02 01:47:44 +00:00
stack.c tree: Remove blank lines before '}' and after '{' 2024-04-11 19:19:08 +00:00
string.c commonlib/bsd: Add strlen() and strnlen() functions 2024-08-14 03:09:03 +00:00
thread.c tree: Fix cast an object of type 'nullptr_t' to 'uintptr_t' error 2024-10-29 01:41:41 +00:00
timer.c
timer_queue.c lib/timer_queue.c: Fix function signature 2022-09-23 17:34:30 +00:00
timestamp.c lib/timestamp: Init TSC frequency early on x86 2025-09-02 19:12:10 +00:00
ubsan.c lib: Replace 'unsigned long int' by 'unsigned long' 2025-01-12 04:51:51 +00:00
uuid.c
ux_locales.c lib: Add low battery UX locale message 2025-02-15 18:58:48 +00:00
version.c lib/version: Move board identification strings 2023-04-22 16:20:49 +00:00
wrdd.c
xxhash.c lib/xxhash.c: Add new hash functions 2022-09-07 22:24:51 +00:00