mirror of
https://github.com/linuxboot/heads.git
synced 2024-12-18 20:47:55 +00:00
Merge remote-tracking branch 'osresearch/master' into HEAD
This commit is contained in:
commit
250a144d67
@ -491,6 +491,13 @@ workflows:
|
|||||||
requires:
|
requires:
|
||||||
- librem_14
|
- librem_14
|
||||||
|
|
||||||
|
- build:
|
||||||
|
name: librem_11
|
||||||
|
target: librem_11
|
||||||
|
subcommand: ""
|
||||||
|
requires:
|
||||||
|
- librem_14
|
||||||
|
|
||||||
# dasharo release
|
# dasharo release
|
||||||
- build:
|
- build:
|
||||||
name: nitropad-ns50
|
name: nitropad-ns50
|
||||||
|
64
bin/seed_package_mirror.sh
Executable file
64
bin/seed_package_mirror.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat >&2 <<USAGE_END
|
||||||
|
$0 <mirror-directory>
|
||||||
|
|
||||||
|
Downloads all current package artifacts needed to build Heads and copies them
|
||||||
|
to a mirror directory, for seeding a package mirror.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
<mirror-directory>: Path to a directory where the packages are placed.
|
||||||
|
Created if it does not already exist.
|
||||||
|
USAGE_END
|
||||||
|
}
|
||||||
|
|
||||||
|
ARGS_DONE=
|
||||||
|
while [[ $# -ge 1 ]] && [ -z "$ARGS_DONE" ]; do
|
||||||
|
case "$1" in
|
||||||
|
--)
|
||||||
|
ARGS_DONE=y
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--*)
|
||||||
|
echo "unknown parameter: $1" >&2
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ARGS_DONE=y
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ $# -ne 1 ]]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ARG_MIRROR_DIR="$(realpath "$1")"
|
||||||
|
|
||||||
|
cd "$(dirname "${BASH_SOURCE[0]}")/.."
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Cleaning build to download all packages..."
|
||||||
|
# fetch packages for representative boards
|
||||||
|
rm -rf build/x86 build/ppc64
|
||||||
|
rm -rf packages/x86 packages/ppc64
|
||||||
|
echo
|
||||||
|
echo "Downloading packages..."
|
||||||
|
make packages BOARD=qemu-coreboot-fbwhiptail-tpm1-hotp
|
||||||
|
make packages BOARD=talos-2 # newt, PPC
|
||||||
|
make packages BOARD=librem_l1um_v2 # TPM2
|
||||||
|
make packages BOARD=librem_l1um # coreboot 4.11
|
||||||
|
make packages BOARD=x230-maximized # io386
|
||||||
|
echo
|
||||||
|
echo "Copying to mirror directory..."
|
||||||
|
mkdir -p "$ARG_MIRROR_DIR"
|
||||||
|
cp packages/x86/* packages/ppc64/* "$ARG_MIRROR_DIR/"
|
@ -3,6 +3,9 @@
|
|||||||
# coreboot configuration
|
# coreboot configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Viking HCL
|
||||||
|
# https://wiki.vikings.net/hardware:kgpe-d16
|
||||||
|
|
||||||
#
|
#
|
||||||
# General setup
|
# General setup
|
||||||
#
|
#
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
# coreboot configuration
|
# coreboot configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Viking HCL
|
||||||
|
# https://wiki.vikings.net/hardware:kgpe-d16
|
||||||
|
|
||||||
#
|
#
|
||||||
# General setup
|
# General setup
|
||||||
#
|
#
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
# coreboot configuration
|
# coreboot configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Viking HCL
|
||||||
|
# https://wiki.vikings.net/hardware:kgpe-d16
|
||||||
|
|
||||||
#
|
#
|
||||||
# General setup
|
# General setup
|
||||||
#
|
#
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
# coreboot configuration
|
# coreboot configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Viking HCL
|
||||||
|
# https://wiki.vikings.net/hardware:kgpe-d16
|
||||||
|
|
||||||
#
|
#
|
||||||
# General setup
|
# General setup
|
||||||
#
|
#
|
||||||
|
@ -140,7 +140,7 @@ CONFIG_DCACHE_BSP_STACK_SIZE=0x30400
|
|||||||
CONFIG_MAX_ACPI_TABLE_SIZE_KB=144
|
CONFIG_MAX_ACPI_TABLE_SIZE_KB=144
|
||||||
CONFIG_HAVE_INTEL_FIRMWARE=y
|
CONFIG_HAVE_INTEL_FIRMWARE=y
|
||||||
CONFIG_MRC_SETTINGS_CACHE_SIZE=0x10000
|
CONFIG_MRC_SETTINGS_CACHE_SIZE=0x10000
|
||||||
# CONFIG_DRIVERS_INTEL_WIFI is not set
|
CONFIG_DRIVERS_INTEL_WIFI=y
|
||||||
CONFIG_IFD_BIN_PATH="3rdparty/purism-blobs/mainboard/purism/librem_jsl/librem_11/flashdescriptor.bin"
|
CONFIG_IFD_BIN_PATH="3rdparty/purism-blobs/mainboard/purism/librem_jsl/librem_11/flashdescriptor.bin"
|
||||||
CONFIG_ME_BIN_PATH="3rdparty/purism-blobs/mainboard/purism/librem_jsl/librem_11/me.bin"
|
CONFIG_ME_BIN_PATH="3rdparty/purism-blobs/mainboard/purism/librem_jsl/librem_11/me.bin"
|
||||||
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x20000
|
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x20000
|
||||||
@ -563,6 +563,7 @@ CONFIG_USE_PC_CMOS_ALTCENTURY=y
|
|||||||
CONFIG_PC_CMOS_BASE_PORT_BANK0=0x70
|
CONFIG_PC_CMOS_BASE_PORT_BANK0=0x70
|
||||||
# CONFIG_DRIVERS_SIL_3114 is not set
|
# CONFIG_DRIVERS_SIL_3114 is not set
|
||||||
CONFIG_DRIVERS_USB_ACPI=y
|
CONFIG_DRIVERS_USB_ACPI=y
|
||||||
|
CONFIG_DRIVERS_WIFI_GENERIC=y
|
||||||
# CONFIG_DRIVERS_MTK_WIFI is not set
|
# CONFIG_DRIVERS_MTK_WIFI is not set
|
||||||
CONFIG_MP_SERVICES_PPI=y
|
CONFIG_MP_SERVICES_PPI=y
|
||||||
CONFIG_MP_SERVICES_PPI_V1=y
|
CONFIG_MP_SERVICES_PPI_V1=y
|
||||||
|
@ -363,7 +363,7 @@ check_gpg_key()
|
|||||||
option=$(cat /tmp/whiptail)
|
option=$(cat /tmp/whiptail)
|
||||||
case "$option" in
|
case "$option" in
|
||||||
g )
|
g )
|
||||||
gpg-gui.sh && BG_COLOR_MAIN_MENU="normnal"
|
gpg-gui.sh && BG_COLOR_MAIN_MENU="normal"
|
||||||
;;
|
;;
|
||||||
i )
|
i )
|
||||||
skip_to_menu="true"
|
skip_to_menu="true"
|
||||||
|
@ -1,19 +1,35 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e -o pipefail
|
set -e -o pipefail
|
||||||
. /etc/functions
|
. /etc/functions
|
||||||
|
. /etc/gui_functions
|
||||||
|
|
||||||
TRACE_FUNC
|
TRACE_FUNC
|
||||||
|
|
||||||
# Post processing of keys
|
# Post processing of keys
|
||||||
|
|
||||||
# Import user's keys
|
# Good system clock is required for GPG to work properly.
|
||||||
gpg --import /.gnupg/keys/*.key /.gnupg/keys/*.asc 2>/dev/null || true
|
# if system year is less then 2024, prompt user to set correct time
|
||||||
|
if [ "$(date +%Y)" -lt 2024 ]; then
|
||||||
|
if whiptail_warning --title "System Time Incorrect" \
|
||||||
|
--yesno "The system time is incorrect. Please set the correct time." \
|
||||||
|
0 80 --yes-button Continue --no-button Skip --clear; then
|
||||||
|
change-time.sh
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Import user's keys if they exist
|
||||||
|
if [ -d /.gnupg/keys ]; then
|
||||||
|
# This is legacy location for user's keys. cbfs-init takes for granted that keyring and trustdb are in /.gnupg
|
||||||
|
# oem-factory-reset generates keyring and trustdb which cbfs-init dumps to /.gnupg
|
||||||
|
# TODO: Remove individual key imports. This is still valid for distro keys only below.
|
||||||
|
gpg --import /.gnupg/keys/*.key /.gnupg/keys/*.asc 2>/dev/null || warn "Importing user's keys failed"
|
||||||
|
fi
|
||||||
|
|
||||||
# Import trusted distro keys allowed for ISO signing
|
# Import trusted distro keys allowed for ISO signing
|
||||||
gpg --homedir=/etc/distro/ --import /etc/distro/keys/* 2>/dev/null || true
|
gpg --homedir=/etc/distro/ --import /etc/distro/keys/* 2>/dev/null || warn "Importing distro keys failed"
|
||||||
#Set distro keys trust level to ultimate (trust anything that was signed with these keys)
|
#Set distro keys trust level to ultimate (trust anything that was signed with these keys)
|
||||||
gpg --homedir=/etc/distro/ --list-keys --fingerprint --with-colons|sed -E -n -e 's/^fpr:::::::::([0-9A-F]+):$/\1:6:/p' |gpg --homedir=/etc/distro/ --import-ownertrust 2>/dev/null || true
|
gpg --homedir=/etc/distro/ --list-keys --fingerprint --with-colons|sed -E -n -e 's/^fpr:::::::::([0-9A-F]+):$/\1:6:/p' |gpg --homedir=/etc/distro/ --import-ownertrust 2>/dev/null || warn "Setting distro keys ultimate trust failed"
|
||||||
gpg --homedir=/etc/distro/ --update-trust 2>/dev/null || true
|
gpg --homedir=/etc/distro/ --update-trust 2>/dev/null || warn "Updating distro keys trust failed"
|
||||||
|
|
||||||
# Add user's keys to the list of trusted keys for ISO signing
|
# Add user's keys to the list of trusted keys for ISO signing
|
||||||
gpg --export | gpg --homedir=/etc/distro/ --import 2>/dev/null || true
|
gpg --export | gpg --homedir=/etc/distro/ --import 2>/dev/null || warn "Adding user's keys to distro keys failed"
|
||||||
|
@ -62,7 +62,7 @@ die() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
whiptail_error() {
|
local_whiptail_error() {
|
||||||
local msg=$1
|
local msg=$1
|
||||||
if [ "$msg" = "" ]; then
|
if [ "$msg" = "" ]; then
|
||||||
die "whiptail error: An error msg is required"
|
die "whiptail error: An error msg is required"
|
||||||
@ -71,7 +71,7 @@ whiptail_error() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
whiptail_error_die() {
|
whiptail_error_die() {
|
||||||
whiptail_error "$@"
|
local_whiptail_error "$@"
|
||||||
die
|
die
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1111,7 +1111,7 @@ if [ "$GPG_GEN_KEY_IN_MEMORY" = "n" -o "$GPG_GEN_KEY_IN_MEMORY_COPY_TO_SMARTCARD
|
|||||||
echo -e "\nChecking for USB Security Dongle...\n"
|
echo -e "\nChecking for USB Security Dongle...\n"
|
||||||
enable_usb
|
enable_usb
|
||||||
if ! gpg --card-status >/dev/null 2>&1; then
|
if ! gpg --card-status >/dev/null 2>&1; then
|
||||||
whiptail_error "Can't access USB Security Dongle; \nPlease remove and reinsert, then press Enter."
|
local_whiptail_error "Can't access USB Security Dongle; \nPlease remove and reinsert, then press Enter."
|
||||||
if ! gpg --card-status >/dev/null 2>/tmp/error; then
|
if ! gpg --card-status >/dev/null 2>/tmp/error; then
|
||||||
ERROR=$(tail -n 1 /tmp/error | fold -s)
|
ERROR=$(tail -n 1 /tmp/error | fold -s)
|
||||||
whiptail_error_die "Unable to detect USB Security Dongle:\n\n${ERROR}"
|
whiptail_error_die "Unable to detect USB Security Dongle:\n\n${ERROR}"
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
# continue with automatic boot, nonzero if user interrupted.
|
# continue with automatic boot, nonzero if user interrupted.
|
||||||
pause_automatic_boot()
|
pause_automatic_boot()
|
||||||
{
|
{
|
||||||
if IFS= read -t "$CONFIG_AUTO_BOOT_TIMEOUT" -s -n 1 -p \
|
if IFS= read -t "$CONFIG_AUTO_BOOT_TIMEOUT" -s -n 1 -r -p \
|
||||||
"Automatic boot in $CONFIG_AUTO_BOOT_TIMEOUT seconds unless interrupted by keypress... "; then
|
$'Automatic boot in '"$CONFIG_AUTO_BOOT_TIMEOUT"$' seconds unless interrupted by keypress...\n'; then
|
||||||
return 1 # Interrupt automatic boot
|
return 1 # Interrupt automatic boot
|
||||||
fi
|
fi
|
||||||
return 0 # Continue with automatic boot
|
return 0 # Continue with automatic boot
|
||||||
|
10
initrd/init
10
initrd/init
@ -140,8 +140,14 @@ fi
|
|||||||
#
|
#
|
||||||
# Values in user config have higher priority during combining thus effectively
|
# Values in user config have higher priority during combining thus effectively
|
||||||
# changing the value for the rest of the scripts which source /tmp/config.
|
# changing the value for the rest of the scripts which source /tmp/config.
|
||||||
echo "export CONFIG_TPM=\"$CONFIG_TPM\"" >> /etc/config.user
|
|
||||||
echo "export CONFIG_TPM2_TOOLS=\"$CONFIG_TPM2_TOOLS\"" >> /etc/config.user
|
#Only set CONFIG_TPM and CONFIG_TPM2_TOOLS if they are not already set in /etc/config.user
|
||||||
|
if ! grep -q 'CONFIG_TPM=' /etc/config.user; then
|
||||||
|
echo "export CONFIG_TPM=\"$CONFIG_TPM\"" >> /etc/config.user
|
||||||
|
fi
|
||||||
|
if ! grep -q 'CONFIG_TPM2_TOOLS=' /etc/config.user; then
|
||||||
|
echo "export CONFIG_TPM2_TOOLS=\"$CONFIG_TPM2_TOOLS\"" >> /etc/config.user
|
||||||
|
fi
|
||||||
|
|
||||||
# CONFIG_BASIC was previously CONFIG_PUREBOOT_BASIC in the PureBoot distribution.
|
# CONFIG_BASIC was previously CONFIG_PUREBOOT_BASIC in the PureBoot distribution.
|
||||||
# Substitute it in config.user if present for backward compatibility.
|
# Substitute it in config.user if present for backward compatibility.
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
From f6c818898b3f978bd22ed2829a881322e0eadaf9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mike Rothfuss <6182328+mrothfuss@users.noreply.github.com>
|
||||||
|
Date: Fri, 23 Aug 2024 19:54:54 -0600
|
||||||
|
Subject: [PATCH 1/2] northbridge/amd: Fixed errors in fam15h DQS timing
|
||||||
|
|
||||||
|
Fixed two errors in determining whether valid values were
|
||||||
|
found for read DQS delays in raminit.
|
||||||
|
---
|
||||||
|
src/northbridge/amd/amdmct/mct_ddr3/mctdqs_d.c | 17 ++++++-----------
|
||||||
|
1 file changed, 6 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/northbridge/amd/amdmct/mct_ddr3/mctdqs_d.c b/src/northbridge/amd/amdmct/mct_ddr3/mctdqs_d.c
|
||||||
|
index d34b2dc2ba..6cf67afa4f 100644
|
||||||
|
--- a/src/northbridge/amd/amdmct/mct_ddr3/mctdqs_d.c
|
||||||
|
+++ b/src/northbridge/amd/amdmct/mct_ddr3/mctdqs_d.c
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
#include <arch/cpu.h>
|
||||||
|
#include <cpu/amd/msr.h>
|
||||||
|
#include <cpu/amd/mtrr.h>
|
||||||
|
+#include <southbridge/amd/common/reset.h>
|
||||||
|
#include "mct_d.h"
|
||||||
|
#include "mct_d_gcc.h"
|
||||||
|
|
||||||
|
@@ -1287,6 +1288,7 @@ static uint8_t TrainDQSRdWrPos_D_Fam15(struct MCTStatStruc *pMCTstat,
|
||||||
|
uint8_t cur_count = 0;
|
||||||
|
uint8_t best_pos = 0;
|
||||||
|
uint8_t best_count = 0;
|
||||||
|
+ uint16_t region_center;
|
||||||
|
|
||||||
|
uint32_t index_reg = 0x98;
|
||||||
|
uint32_t dev = pDCTstat->dev_dct;
|
||||||
|
@@ -1455,23 +1457,16 @@ static uint8_t TrainDQSRdWrPos_D_Fam15(struct MCTStatStruc *pMCTstat,
|
||||||
|
last_pos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (best_count > 2) {
|
||||||
|
- uint16_t region_center = (best_pos + (best_count / 2));
|
||||||
|
-
|
||||||
|
- if (region_center < 16) {
|
||||||
|
- printk(BIOS_WARNING, "TrainDQSRdWrPos: negative DQS recovery delay detected!"
|
||||||
|
- " Attempting to continue but your system may be unstable...\n");
|
||||||
|
- region_center = 0;
|
||||||
|
- } else {
|
||||||
|
- region_center -= 16;
|
||||||
|
- }
|
||||||
|
+ region_center = (best_pos + (best_count / 2));
|
||||||
|
+ if ((best_count > 2) && (region_center >= 16)) {
|
||||||
|
+ region_center -= 16;
|
||||||
|
|
||||||
|
/* Restore current settings of other (previously trained) lanes to the active array */
|
||||||
|
memcpy(current_read_dqs_delay, initial_read_dqs_delay, sizeof(current_read_dqs_delay));
|
||||||
|
|
||||||
|
/* Program the Read DQS Timing Control register with the center of the passing window */
|
||||||
|
current_read_dqs_delay[lane] = region_center;
|
||||||
|
- passing_dqs_delay_found[lane] = 1;
|
||||||
|
+ passing_read_dqs_delay_found = 1;
|
||||||
|
|
||||||
|
/* Commit the current Read DQS Timing Control settings to the hardware registers */
|
||||||
|
write_dqs_read_data_timing_registers(current_read_dqs_delay, dev, dct, dimm, index_reg);
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
@ -0,0 +1,68 @@
|
|||||||
|
From ce1c7a35fa11b46d0478e97c4a4001179ab9d1bf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mike Rothfuss <6182328+mrothfuss@users.noreply.github.com>
|
||||||
|
Date: Fri, 23 Aug 2024 19:59:09 -0600
|
||||||
|
Subject: [PATCH 2/2] northbridge/amd: Added resets for ram training failures
|
||||||
|
|
||||||
|
Instead of booting into an unstable state (and crashing), the board
|
||||||
|
resets to re-attempt raminit.
|
||||||
|
---
|
||||||
|
src/northbridge/amd/amdmct/mct_ddr3/mcthwl.c | 7 +++++--
|
||||||
|
src/northbridge/amd/amdmct/mct_ddr3/mctsrc.c | 7 +++++--
|
||||||
|
2 files changed, 10 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/northbridge/amd/amdmct/mct_ddr3/mcthwl.c b/src/northbridge/amd/amdmct/mct_ddr3/mcthwl.c
|
||||||
|
index 1ee10608b9..9a53bd352d 100644
|
||||||
|
--- a/src/northbridge/amd/amdmct/mct_ddr3/mcthwl.c
|
||||||
|
+++ b/src/northbridge/amd/amdmct/mct_ddr3/mcthwl.c
|
||||||
|
@@ -18,6 +18,7 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <string.h>
|
||||||
|
+#include <southbridge/amd/common/reset.h>
|
||||||
|
#include "mct_d.h"
|
||||||
|
#include "mct_d_gcc.h"
|
||||||
|
|
||||||
|
@@ -265,11 +266,13 @@ static void WriteLevelization_HW(struct MCTStatStruc *pMCTstat,
|
||||||
|
|
||||||
|
pDCTstat->TargetFreq = final_target_freq;
|
||||||
|
|
||||||
|
- if (global_phy_training_status)
|
||||||
|
+ if (global_phy_training_status) {
|
||||||
|
printk(BIOS_WARNING,
|
||||||
|
"%s: Uncorrectable invalid value(s) detected in second phase of write levelling; "
|
||||||
|
- "continuing but system may be unstable!\n",
|
||||||
|
+ "Restarting system\n",
|
||||||
|
__func__);
|
||||||
|
+ soft_reset();
|
||||||
|
+ }
|
||||||
|
|
||||||
|
uint8_t dct;
|
||||||
|
for (dct = 0; dct < 2; dct++) {
|
||||||
|
diff --git a/src/northbridge/amd/amdmct/mct_ddr3/mctsrc.c b/src/northbridge/amd/amdmct/mct_ddr3/mctsrc.c
|
||||||
|
index dbb989fe3d..c4cb53442d 100644
|
||||||
|
--- a/src/northbridge/amd/amdmct/mct_ddr3/mctsrc.c
|
||||||
|
+++ b/src/northbridge/amd/amdmct/mct_ddr3/mctsrc.c
|
||||||
|
@@ -26,6 +26,7 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <cpu/x86/msr.h>
|
||||||
|
#include <cpu/amd/msr.h>
|
||||||
|
+#include <southbridge/amd/common/reset.h>
|
||||||
|
#include "mct_d.h"
|
||||||
|
#include "mct_d_gcc.h"
|
||||||
|
|
||||||
|
@@ -1698,8 +1699,10 @@ void dqsTrainMaxRdLatency_SW_Fam15(struct MCTStatStruc *pMCTstat,
|
||||||
|
Set_NB32_index_wait_DCT(dev, Channel, index_reg, 0x00000050, 0x13131313);
|
||||||
|
}
|
||||||
|
dword = Get_NB32_DCT(dev, Channel, 0x268) & 0x3ffff;
|
||||||
|
- if (dword)
|
||||||
|
- printk(BIOS_ERR, "WARNING: MaxRdLatency training FAILED! Attempting to continue but your system may be unstable...\n");
|
||||||
|
+ if (dword) {
|
||||||
|
+ printk(BIOS_ERR, "WARNING: MaxRdLatency training FAILED! Restarting system\n");
|
||||||
|
+ soft_reset();
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* 2.10.5.8.5.1.5 */
|
||||||
|
nb_pstate = 0;
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
Loading…
Reference in New Issue
Block a user