Lee Leahy (leroy.p.leahy(a)intel.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17985
-gerrit
commit 6d76fbf896e15e2f55d8ce03e5dcabcfe93bd54d
Author: Lee Leahy <leroy.p.leahy(a)intel.com>
Date: Wed Dec 28 11:43:10 2016 -0800
soc/intel/quark: Add early debugging code
Add Kconfig values and early debugging code to better segment and debug
the early code in bootblock by using the SD LED as an indicator. Update
the help text for the debug Kconfig values to point to the various
failure locations.
TEST=Build and run on Galileo Gen2
Change-Id: I1cd62eba3e9547cb1dd7f547aaec5d4827e14633
Signed-off-by: Lee Leahy <leroy.p.leahy(a)intel.com>
---
src/soc/intel/quark/Kconfig | 43 ++++++++++++++++++++++++++----
src/soc/intel/quark/bootblock/bootblock.c | 14 ++++++++++
src/soc/intel/quark/bootblock/esram_init.S | 23 ++++++++++------
src/soc/intel/quark/romstage/fsp1_1.c | 4 +++
4 files changed, 71 insertions(+), 13 deletions(-)
diff --git a/src/soc/intel/quark/Kconfig b/src/soc/intel/quark/Kconfig
index 5a48847..c5efd4a 100644
--- a/src/soc/intel/quark/Kconfig
+++ b/src/soc/intel/quark/Kconfig
@@ -109,21 +109,54 @@ config ENABLE_DEBUG_LED_ESRAM
default n
select ENABLE_DEBUG_LED
help
- Indicate that ESRAM has been successfully initialized.
+ Indicate that ESRAM has been successfully initialized. If the SD LED
+ does not light then the ESRAM initialization needs to be debugged.
config ENABLE_DEBUG_LED_FINDFSP
bool "SD LED indicates fsp.bin file was found"
+ depends on PLATFORM_USES_FSP1_1
+ default n
+ select ENABLE_DEBUG_LED
+ help
+ Indicate that fsp.bin was found. If the SD LED does not light then
+ the code between ESRAM initialization through find_fsp needs to
+ debugged. Start by verifying that the correct fsp.bin is in the
+ image.
+
+config ENABLE_DEBUG_LED_BOOTBLOCK_ENTRY
+ bool "SD LED indicates bootblock.c successfully entered"
+ default n
+ select ENABLE_DEBUG_LED
+ help
+ Indicate that bootblock_c_entry was entered. If the SD LED does not
+ light then debug the code between ESRAM and bootblock_c_entry. For
+ FSP 1.1, use ENABLE_DEBUG_LED_FINDFSP to split this code.
+
+config ENABLE_DEBUG_LED_SOC_EARLY_INIT_ENTRY
+ bool "SD LED indicates bootblock_soc_early_init successfully entered"
+ default n
+ select ENABLE_DEBUG_LED
+ help
+ Indicate that bootblock_soc_early_init was entered. If the SD LED
+ does not light then debug the code in bootblock_main_with_timestamp.
+
+config ENABLE_DEBUG_LED_SOC_EARLY_INIT_EXIT
+ bool "SD LED indicates bootblock_soc_early_init successfully exited"
default n
select ENABLE_DEBUG_LED
help
- Indicate that fsp.bin was found.
+ Indicate that bootblock_soc_early_init exited. If the SD LED does not
+ light then debug the scripts in bootblock_soc_early_init.
-config ENABLE_DEBUG_LED_TEMPRAMINIT
- bool "SD LED indicates TempRamInit was successful"
+config ENABLE_DEBUG_LED_SOC_INIT_ENTRY
+ bool "SD LED indicates bootblock_soc_init successfully entered"
default n
select ENABLE_DEBUG_LED
help
- Indicate that TempRamInit was successful.
+ Indicate that bootblock_soc_init was entered. If the SD LED does not
+ light then debug the code in bootblock_mainboard_early_init and
+ console_init. If the SD LED does light but there is no serial then
+ debug the serial port configuration and initialization.
#####
# ESRAM layout
diff --git a/src/soc/intel/quark/bootblock/bootblock.c b/src/soc/intel/quark/bootblock/bootblock.c
index 3c90de9..c974cb1 100644
--- a/src/soc/intel/quark/bootblock/bootblock.c
+++ b/src/soc/intel/quark/bootblock/bootblock.c
@@ -22,6 +22,8 @@
#include <soc/pci_devs.h>
#include <soc/reg_access.h>
+extern void asmlinkage light_sd_led(void);
+
static const struct reg_script legacy_gpio_init[] = {
/* Temporarily enable the legacy GPIO controller */
REG_PCI_WRITE32(R_QNC_LPC_GBA_BASE, IO_ADDRESS_VALID
@@ -77,11 +79,17 @@ static const struct reg_script mtrr_init[] = {
void asmlinkage bootblock_c_entry(uint64_t base_timestamp)
{
+ if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_BOOTBLOCK_ENTRY))
+ light_sd_led();
+
bootblock_main_with_timestamp(base_timestamp);
}
void bootblock_soc_early_init(void)
{
+ if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_SOC_EARLY_INIT_ENTRY))
+ light_sd_led();
+
/* Initialize the MTRRs */
reg_script_run(mtrr_init);
@@ -94,10 +102,16 @@ void bootblock_soc_early_init(void)
reg_script_run_on_dev(HSUART0_BDF, hsuart_init);
if (IS_ENABLED(CONFIG_ENABLE_BUILTIN_HSUART1))
reg_script_run_on_dev(HSUART1_BDF, hsuart_init);
+
+ if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_SOC_EARLY_INIT_EXIT))
+ light_sd_led();
}
void bootblock_soc_init(void)
{
+ if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_SOC_INIT_ENTRY))
+ light_sd_led();
+
/* Display the MTRRs */
soc_display_mtrrs();
}
diff --git a/src/soc/intel/quark/bootblock/esram_init.S b/src/soc/intel/quark/bootblock/esram_init.S
index d982cdd..f173f5c 100644
--- a/src/soc/intel/quark/bootblock/esram_init.S
+++ b/src/soc/intel/quark/bootblock/esram_init.S
@@ -507,14 +507,7 @@ L43:
L44:
#if IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_ESRAM)
- /* Turn on SD LED to indicate ESRAM successfully initialized */
- movl $SD_HOST_CTRL, %ebx
- movb 0(%ebx), %al
- orb $1, %al
- movb %al, 0(%ebx)
-
- /* Loop forever */
- jmp .
+ jmp light_sd_led
#endif /* CONFIG_ENABLE_DEBUG_LED_ESRAM */
#endif /* CONFIG_ENABLE_DEBUG_LED */
@@ -537,3 +530,17 @@ before_carstage:
call bootblock_c_entry
/* Never reached */
+
+ .global light_sd_led
+
+light_sd_led:
+ /* Turn on SD LED to indicate ESRAM successfully initialized */
+ movl $SD_HOST_CTRL, %ebx
+ movb 0(%ebx), %al
+ orb $1, %al
+ movb %al, 0(%ebx)
+
+ /* Loop forever */
+die:
+ hlt
+ jmp die
diff --git a/src/soc/intel/quark/romstage/fsp1_1.c b/src/soc/intel/quark/romstage/fsp1_1.c
index d7f19a7..e93e688 100644
--- a/src/soc/intel/quark/romstage/fsp1_1.c
+++ b/src/soc/intel/quark/romstage/fsp1_1.c
@@ -26,6 +26,8 @@
#include <soc/romstage.h>
#include <string.h>
+extern void asmlinkage light_sd_led(void);
+
asmlinkage void *car_stage_c_entry(void)
{
FSP_INFO_HEADER *fih;
@@ -40,6 +42,8 @@ asmlinkage void *car_stage_c_entry(void)
/* Locate the FSP header in ESRAM */
fih = find_fsp(CONFIG_FSP_ESRAM_LOC);
+ if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_FINDFSP))
+ light_sd_led();
/* Start the early verstage/romstage code */
post_code(0x2A);
Lee Leahy (leroy.p.leahy(a)intel.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17984
-gerrit
commit 70efb582ae3b6df1c8b754b4d7e5f61614aa3800
Author: Lee Leahy <leroy.p.leahy(a)intel.com>
Date: Wed Dec 28 12:53:37 2016 -0800
soc/intel/quark: Fix serial port configuration
Fix serial port configuration broken by how PCI configuration space was
referenced introduced by change 3d15e10a (MMCONF_SUPPORT: Flip default
to enabled).
TEST=Build and run on Galileo Gen2
Change-Id: I2ab52cf598795e94f1f16977f8d12b7fdd95e146
Signed-off-by: Lee Leahy <leroy.p.leahy(a)intel.com>
---
src/soc/intel/quark/Kconfig | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/soc/intel/quark/Kconfig b/src/soc/intel/quark/Kconfig
index 33b3cf8..5a48847 100644
--- a/src/soc/intel/quark/Kconfig
+++ b/src/soc/intel/quark/Kconfig
@@ -29,6 +29,7 @@ config CPU_SPECIFIC_OPTIONS
select BOOTBLOCK_SAVE_BIST_AND_TIMESTAMP
select C_ENVIRONMENT_BOOTBLOCK
select HAVE_HARD_RESET
+ select NO_MMCONF_SUPPORT
select REG_SCRIPT
select RELOCATABLE_RAMSTAGE
select SOC_INTEL_COMMON
@@ -40,6 +41,10 @@ config CPU_SPECIFIC_OPTIONS
select UNCOMPRESSED_RAMSTAGE
select USE_MARCH_586
+config MMCOMF_SUPPORT_DEFAULT
+ bool
+ default n
+
#####
# Debug serial output
# The following options configure the debug serial port
Martin Roth (martinroth(a)google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/18001
-gerrit
commit 228d060aae90a0a9f6d0820df9764709b6976958
Author: Martin Roth <gaumless(a)gmail.com>
Date: Fri Dec 30 17:00:19 2016 -0700
util/docker: Update dockerfiles & build method
All files:
- Previously, various things were hardcoded into the docker containers
that made it necessary to update the Dockerfile files for each new
version of the sdk. Turn those into 'Variables" that are updated during
the build step. Because the makefile is piping the dockerfile through
the sed command and back into the docker build command, the normal
docker "COPY" keyword doesn't work.
coreboot-jenkins-node changes:
- Run ssh-keygen -A to explicitly generate the ssh keys. This fixes an
error: Could not load host key: /etc/ssh/ssh_host_dsa_key
coreboot-sdk changes:
- Remove apt-get upgrade command - The Dockerfile guide recommends
not to run this.
- Change libssl-dev to libssl1.0-dev. libssl-dev's header files won't
build the Chrome-EC codebase.
- Add libisl-dev, needed to build the riscv toolchain.
- Build the toolchain using the -b option
- Add environment variables containing the version and commit that the
coreboot-sdk was built from.
Makefile:
- Update targets to use the version and commit variables
Change-Id: I2c1376fe4b791da2a62fca11bc92c4774cbef1c8
Signed-off-by: Martin Roth <gaumless(a)gmail.com>
---
util/docker/Makefile | 29 +++++++++++++++++++++------
util/docker/coreboot-jenkins-node/Dockerfile | 30 ++++++++++++++++++++++------
util/docker/coreboot-sdk/Dockerfile | 27 +++++++++++++++++++------
3 files changed, 68 insertions(+), 18 deletions(-)
diff --git a/util/docker/Makefile b/util/docker/Makefile
index f669b93..756dac0 100644
--- a/util/docker/Makefile
+++ b/util/docker/Makefile
@@ -16,6 +16,12 @@ export top=$(abspath $(CURDIR)/../..)
export crossgcc_version=$(shell $(top)/util/crossgcc/buildgcc --version | grep 'cross toolchain' | sed 's/^.*\sv//' | sed 's/\s.*$$//')
export DOCKER:=$(shell env sh -c "command -v docker")
+# Version of the jenkins / sdk container
+export COREBOOT_CONTAINER_VERSION?=$(crossgcc_version)
+
+# Commit id to build from
+export DOCKER_COMMIT?=$(shell git log -n 1 --pretty=%h)
+
test-docker:
$(if $(DOCKER),,\
$(warning Docker command not found. Please install docker) \
@@ -28,16 +34,23 @@ test-docker-login: test-docker
$(error Docker authentication file not found. Run 'docker login'))
coreboot-sdk: test-docker
- $(DOCKER) build -t coreboot/coreboot-sdk:$(crossgcc_version) coreboot-sdk
+ @echo "Building coreboot SDK $(crossgcc_version) from commit $(DOCKER_COMMIT)"
+ cat coreboot-sdk/Dockerfile | \
+ sed "s/{{DOCKER_COMMIT}}/$(DOCKER_COMMIT)/" | \
+ sed "s/{{SDK_VERSION}}/$(COREBOOT_CONTAINER_VERSION)/" | \
+ $(DOCKER) build -t coreboot/coreboot-sdk:$(COREBOOT_CONTAINER_VERSION) -
upload-coreboot-sdk: test-docker-login
- $(DOCKER) push coreboot/coreboot-sdk:$(crossgcc_version)
+ $(DOCKER) push coreboot/coreboot-sdk:$(COREBOOT_CONTAINER_VERSION)
coreboot-jenkins-node: test-docker
- $(DOCKER) build -t coreboot/coreboot-jenkins-node:$(crossgcc_version) coreboot-jenkins-node
+ cat coreboot-jenkins-node/Dockerfile | \
+ sed "s/{{SDK_VERSION}}/$(COREBOOT_CONTAINER_VERSION)/" | \
+ sed "s|{{SSH_KEY}}|$$(cat coreboot-jenkins-node/authorized_keys)|" | \
+ $(DOCKER) build -t coreboot/coreboot-jenkins-node:$(COREBOOT_CONTAINER_VERSION) -
upload-coreboot-jenkins-node: test-docker-login
- $(DOCKER) push coreboot/coreboot-jenkins-node:$(crossgcc_version)
+ $(DOCKER) push coreboot/coreboot-jenkins-node:$(COREBOOT_CONTAINER_VERSION)
docker-killall: test-docker
@if [ -n "$$($(DOCKER) ps | grep 'coreboot')" ]; then \
@@ -52,7 +65,7 @@ clean-coreboot-images: docker-killall
docker-build-coreboot: test-docker
$(DOCKER) run -u root -it -v $(top):/home/coreboot/coreboot \
- --rm coreboot/coreboot-sdk:$(crossgcc_version) \
+ --rm coreboot/coreboot-sdk:$(COREBOOT_CONTAINER_VERSION) \
/bin/bash -c "cd /home/coreboot/coreboot && \
make clean && \
make $(BUILD_CMD)"
@@ -62,7 +75,7 @@ docker-build-coreboot: test-docker
docker-abuild: test-docker
$(DOCKER) run -u root -it -v $(top):/home/coreboot/coreboot \
- --rm coreboot/coreboot-sdk:$(crossgcc_version) \
+ --rm coreboot/coreboot-sdk:$(COREBOOT_CONTAINER_VERSION) \
/bin/bash -c "cd /home/coreboot/coreboot && \
make clean && \
util/abuild/abuild $(ABUILD_ARGS)"
@@ -82,6 +95,10 @@ help:
@echo "Commands for using docker images"
@echo " docker-build-coreboot <BUILD_CMD=target> - Build coreboot under coreboot-sdk"
@echo " docker-abuild <ABUILD_ARGS='-a -B'> - Run abuild under coreboot-sdk"
+ @echo
+ @echo "Variables:"
+ @echo " COREBOOT_CONTAINER_VERSION = $(COREBOOT_CONTAINER_VERSION)"
+ @echo " DOCKER_COMMIT = $(DOCKER_COMMIT)"
.PHONY: test-docker test-docker-login
.PHONY: coreboot-jenkins-node upload-coreboot-jenkins-node
diff --git a/util/docker/coreboot-jenkins-node/Dockerfile b/util/docker/coreboot-jenkins-node/Dockerfile
index b60466d..230842c 100644
--- a/util/docker/coreboot-jenkins-node/Dockerfile
+++ b/util/docker/coreboot-jenkins-node/Dockerfile
@@ -1,5 +1,20 @@
-FROM coreboot/coreboot-sdk:1.42
-MAINTAINER Martin Roth <gaumless(a)gmail.com>
+# This dockerfile is not meant to be used directly by docker. The
+# {{}} varibles are replaced with values by the makefile. Please generate
+# the docker image for this file by running:
+#
+# make coreboot-jenkins-node
+#
+# Variables can be updated on the make command line or left blank to use
+# the default values set by the makefile.
+#
+# SDK_VERSION is used to name the version of the coreboot sdk to use.
+# Typically, this corresponds to the toolchain version.
+# SSH_KEY is the contents of the file coreboot-jenkins-node/authorized_keys
+# Because we're piping the contents of the dockerfile into the
+# docker build command, the 'COPY' keyword isn't valid.
+
+FROM coreboot/coreboot-sdk:{{SDK_VERSION}}
+MAINTAINER Martin Roth <martin(a)coreboot.org>
USER root
# Check to make sure /dev is a tmpfs file system
@@ -10,13 +25,17 @@ RUN apt-get -y update && \
lua5.3 liblua5.3-dev openjdk-8-jre-headless openssh-server && \
apt-get clean
-COPY authorized_keys /home/coreboot/.ssh/authorized_keys
-RUN chown -R coreboot /home/coreboot/.ssh && \
+# Because of the way that the variables are being replaced, docker's 'COPY'
+# command does not work
+RUN mkdir -p /home/coreboot/.ssh && \
+ echo "{{SSH_KEY}}" > /home/coreboot/.ssh/authorized_keys && \
+ chown -R coreboot:coreboot /home/coreboot/.ssh && \
chmod 0700 /home/coreboot/.ssh && \
chmod 0600 /home/coreboot/.ssh/authorized_keys
RUN mkdir /var/run/sshd && \
- chmod 0755 /var/run/sshd
+ chmod 0755 /var/run/sshd && \
+ /usr/bin/ssh-keygen -A
# Build encapsulate tool
ADD https://raw.githubusercontent.com/pgeorgi/encapsulate/master/encapsulate.c /tmp/encapsulate.c
@@ -24,7 +43,6 @@ RUN gcc -o /usr/sbin/encapsulate /tmp/encapsulate.c && \
chown root /usr/sbin/encapsulate && \
chmod +s /usr/sbin/encapsulate
-
VOLUME /data/cache
ENTRYPOINT mkdir /dev/cb-build && chown coreboot /dev/cb-build && /usr/sbin/sshd -p 49151 -D
EXPOSE 49151
diff --git a/util/docker/coreboot-sdk/Dockerfile b/util/docker/coreboot-sdk/Dockerfile
index cb0023c..feaf843 100644
--- a/util/docker/coreboot-sdk/Dockerfile
+++ b/util/docker/coreboot-sdk/Dockerfile
@@ -1,26 +1,39 @@
+# This dockerfile is not meant to be used directly by docker. The
+# {{}} varibles are replaced with values by the makefile. Please generate
+# the docker image for this file by running:
+#
+# make coreboot-sdk
+#
+# Variables can be updated on the make command line or left blank to use
+# the default values set by the makefile.
+#
+# SDK_VERSION is used to name the version of the coreboot sdk to use.
+# Typically, this corresponds to the toolchain version. This
+# is used to identify this docker image.
+# DOCKER_COMMIT is the coreboot Commit-ID to build the toolchain from.
+
FROM debian:sid
-MAINTAINER Martin Roth <gaumless(a)gmail.com>
+MAINTAINER Martin Roth <martin(a)coreboot.org>
RUN \
useradd -p locked -m coreboot && \
apt-get -qq update && \
- apt-get -qq upgrade && \
apt-get -qqy install gcc g++ make patch python diffutils bison flex \
git doxygen ccache subversion p7zip-full unrar-free \
m4 wget curl bzip2 vim-common cmake xz-utils pkg-config \
dh-autoreconf unifont \
- libssl-dev libgmp-dev zlib1g-dev libpci-dev liblzma-dev \
+ libssl1.0-dev libgmp-dev zlib1g-dev libpci-dev liblzma-dev \
libyaml-dev libncurses5-dev uuid-dev libusb-dev libftdi-dev \
libusb-1.0-0-dev libreadline-dev libglib2.0-dev libgmp-dev \
- libelf-dev libxml2-dev libfreetype6-dev && \
+ libelf-dev libxml2-dev libfreetype6-dev libisl-dev && \
apt-get clean
RUN \
cd /root && \
git clone http://review.coreboot.org/coreboot && \
cd coreboot/util/crossgcc && \
- git checkout 589ef9de8fa && \
- make all_without_gdb CPUS=$(nproc) DEST=/opt/xgcc && \
+ git checkout {{DOCKER_COMMIT}} && \
+ make all_without_gdb CPUS=$(nproc) DEST=/opt/xgcc BUILDGCC_OPTIONS=-b && \
cd /root && \
rm -rf coreboot
@@ -31,4 +44,6 @@ RUN mkdir /home/coreboot/.ccache && \
VOLUME /home/coreboot/.ccache
ENV PATH $PATH:/opt/xgcc/bin
+ENV SDK_VERSION={{SDK_VERSION}}
+ENV SDK_COMMIT={{DOCKER_COMMIT}}
USER coreboot
Arthur Heymans (arthur(a)aheymans.xyz) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17659
-gerrit
commit 0e25c1064809021d57db41fdfccdc659d3f9f879
Author: Arthur Heymans <arthur(a)aheymans.xyz>
Date: Wed Nov 30 18:40:38 2016 +0100
nb/intel/x4x: Fix raminit unconditionally resetting
The raminit only succeeds when it starts from a cold boot.
To achieve this it unconditionally did a cold reset.
Now it detects whether it underwent a hot reset (bit 8 of
MCHBAR32(0xf14)) before issuing a cold reset to make raminit work.
It also adds a 2s delay before reset because some disk drives
expect a warm reboot when the OS wants to reboot and therefore are not
shut down properly / in time. If the drive is unexpectedly powered off
which happens during a cold reset, it can cause data loss. Giving the
drive 2 extra seconds can work around this issue.
A proper fix would be to fix the raminit such that it works on a hot reset.
Change-Id: I6063dd6aed908558155d2523f35d7241ff1f4fde
Signed-off-by: Arthur Heymans <arthur(a)aheymans.xyz>
---
src/northbridge/intel/x4x/raminit_ddr2.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/northbridge/intel/x4x/raminit_ddr2.c b/src/northbridge/intel/x4x/raminit_ddr2.c
index b3ee34a..de62517 100644
--- a/src/northbridge/intel/x4x/raminit_ddr2.c
+++ b/src/northbridge/intel/x4x/raminit_ddr2.c
@@ -258,10 +258,20 @@ static void checkreset_ddr2(struct sysinfo *s)
{
u8 pmcon2;
u8 reset = 0;
+ u32 pmir;
+ pmir = pci_read_config32(PCI_DEV(0, 0x1f, 0), 0xac);
pmcon2 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xa2);
- if (!(pmcon2 & 0x80)) {
- pmcon2 |= 0x80;
+
+ if ((MCHBAR32(0xf14) & (1 << 8))) {
+ printk(BIOS_DEBUG,
+ "Waiting two seconds for disks to timeout...\n");
+ mdelay(2000);
+ reset = 1;
+ }
+
+ if (pmcon2 & 0x80) {
+ pmcon2 &= ~0x80;
pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa2, pmcon2);
reset = 1;
@@ -273,10 +283,16 @@ static void checkreset_ddr2(struct sysinfo *s)
}
if (reset) {
printk(BIOS_DEBUG, "Reset...\n");
+ /* Do a global reset. only useful on ICH10 */
+ pmir |= (1 << 20);
+ pci_write_config32(PCI_DEV(0, 0x1f, 0), 0xac, pmir);
outb(0xe, 0xcf9);
asm ("hlt");
}
- pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa2, pmcon2 | 0x80);
+ pmir &= ~(1 << 20);
+ pmcon2 |= 0x80;
+ pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa2, pmcon2);
+ pci_write_config32(PCI_DEV(0, 0x1f, 0), 0xac, pmir);
}
static void setioclk_ddr2(struct sysinfo *s)