[coreboot-gerrit] Patch set updated for coreboot: ee94d65 hp/dl145_g1: Adding FID/VID and Powernow ACPI

Oskar Enoksson (enok@lysator.liu.se) gerrit at coreboot.org
Tue Feb 11 23:22:21 CET 2014


Oskar Enoksson (enok at lysator.liu.se) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5186

-gerrit

commit ee94d6533955d629fafac154032f3060386ea933
Author: Oskar Enoksson <enok at lysator.liu.se>
Date:   Tue Feb 11 22:51:03 2014 +0100

    hp/dl145_g1: Adding FID/VID and Powernow ACPI
    
    Add cool-n-quiet functionality which allows the OS to dynamic
    alter CPU voltage and frequency change in order to save power
    e.g. when the CPU load is low.
    
    Change-Id: I4c895a56bcf571d4276af192aeef87d120143063
    Signed-off-by: Oskar Enoksson <enok at lysator.liu.se>
---
 src/mainboard/hp/dl145_g1/Kconfig       |  2 ++
 src/mainboard/hp/dl145_g1/acpi_tables.c |  5 +++++
 src/mainboard/hp/dl145_g1/romstage.c    | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 40 insertions(+)

diff --git a/src/mainboard/hp/dl145_g1/Kconfig b/src/mainboard/hp/dl145_g1/Kconfig
index 72f8d09..a169b88 100644
--- a/src/mainboard/hp/dl145_g1/Kconfig
+++ b/src/mainboard/hp/dl145_g1/Kconfig
@@ -13,6 +13,8 @@ config BOARD_SPECIFIC_OPTIONS # dummy
 	select HAVE_PIRQ_TABLE
 	select HAVE_MP_TABLE
 	select BOARD_ROMSIZE_KB_512
+	select SET_FIDVID
+	select SET_FIDVID_DEBUG
 	select RAMINIT_SYSINFO
 #	select SB_HT_CHAIN_UNITID_OFFSET_ONLY
 	select QRANK_DIMM_SUPPORT
diff --git a/src/mainboard/hp/dl145_g1/acpi_tables.c b/src/mainboard/hp/dl145_g1/acpi_tables.c
index dd96318..c94688e 100644
--- a/src/mainboard/hp/dl145_g1/acpi_tables.c
+++ b/src/mainboard/hp/dl145_g1/acpi_tables.c
@@ -21,6 +21,7 @@
 #include <cpu/amd/amdk8_sysconf.h>
 #include "northbridge/amd/amdk8/acpi.h"
 #include "mb_sysconf.h"
+#include <cpu/amd/model_fxx_powernow.h>
 
 #define DUMP_ACPI_TABLES 0
 
@@ -163,6 +164,10 @@ unsigned long acpi_fill_madt(unsigned long current)
 
 unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_table_id) {
 	k8acpi_write_vars();
+#if CONFIG_SET_FIDVID
+	amd_model_fxx_generate_powernow(pm_base + 0x10, 6, 1);
+	acpigen_write_mainboard_resources("\\_SB.PCI0.MBRS", "_CRS");
+#endif
 	return (unsigned long) (acpigen_get_current());
 }
 
diff --git a/src/mainboard/hp/dl145_g1/romstage.c b/src/mainboard/hp/dl145_g1/romstage.c
index 3cb6761..a5df58d 100644
--- a/src/mainboard/hp/dl145_g1/romstage.c
+++ b/src/mainboard/hp/dl145_g1/romstage.c
@@ -86,6 +86,9 @@ static inline int spd_read_byte(unsigned device, unsigned address)
 #include "cpu/amd/dualcore/dualcore.c"
 #include <spd.h>
 #include "cpu/amd/model_fxx/init_cpus.c"
+#if CONFIG_SET_FIDVID
+#include "cpu/amd/model_fxx/fidvid.c"
+#endif
 
 #define RC0 ((1<<1)<<8)
 #define RC1 ((1<<2)<<8)
@@ -130,6 +133,33 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
 #endif
 
 	ht_setup_chains_x(sysinfo);
+#if CONFIG_SET_FIDVID
+	/* Check to see if processor is capable of changing FIDVID */
+	/* otherwise it will throw a GP# when reading FIDVID_STATUS */
+	struct cpuid_result cpuid1 = cpuid(0x80000007);
+	if ((cpuid1.edx & 0x6) == 0x6) {
+		{
+		/* Read FIDVID_STATUS */
+			msr_t msr;
+			msr=rdmsr(0xc0010042);
+			print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\n");
+		}
+
+		enable_fid_change();
+		enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+		init_fidvid_bsp(bsp_apicid);
+
+		// show final fid and vid
+		{
+			msr_t msr;
+			msr=rdmsr(0xc0010042);
+			print_debug("end msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\n");
+		}
+
+	} else {
+		print_debug("Changing FIDVID not supported\n");
+	}
+#endif
 
 	needs_reset |= optimize_link_coherent_ht();
 	needs_reset |= optimize_link_incoherent_ht(sysinfo);
@@ -159,6 +189,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
 	fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
 
 	memreset_setup();
+#if CONFIG_SET_FIDVID
+	init_timer(); // Need to use TMICT to synchronize FID/VID
+#endif
 	sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
 
 	//dump_pci_devices();



More information about the coreboot-gerrit mailing list