Isaac Christensen (isaac.christensen(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6969
-gerrit
commit aa0f62b8eadbc3b9892a2e3903301c987bfa32c6
Author: Isaac Christensen <isaac.christensen(a)se-eng.com>
Date: Wed Sep 24 14:59:32 2014 -0600
x86: fixup MTRR setup
This is a follow up to:
7756fe7 x86: Minimize work done with the caches disabled in mtrr functions.
Fix some typo's and enable the MTRR's before enabling caching.
Change-Id: If751b815f9dab781fc38c898cf692f0940c57695
Signed-off-by: Isaac Christensen <isaac.christensen(a)se-eng.com>
---
src/cpu/x86/mtrr/mtrr.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/cpu/x86/mtrr/mtrr.c b/src/cpu/x86/mtrr/mtrr.c
index e0392f7..69cd2d2 100644
--- a/src/cpu/x86/mtrr/mtrr.c
+++ b/src/cpu/x86/mtrr/mtrr.c
@@ -51,8 +51,8 @@
#define OS_MTRRS 2
#define MTRRS (BIOS_MTRRS + OS_MTRRS)
/*
- * Static storage size for variable MTRRs. Its sized sufficiently large to
- * handle different types of CPUs. Empiricially, 16 variable MTRRs has not
+ * Static storage size for variable MTRRs. It's sized sufficiently large to
+ * handle different types of CPUs. Empirically, 16 variable MTRRs has not
* yet been observed.
*/
#define NUM_MTRR_STATIC_STORAGE 16
@@ -769,7 +769,7 @@ static void commit_var_mtrrs(const struct var_mtrr_solution *sol)
{
int i;
- /* Write out the variable MTTRs. */
+ /* Write out the variable MTRRs. */
disable_cache();
for (i = 0; i < sol->num_used; i++) {
wrmsr(MTRRphysBase_MSR(i), sol->regs[i].base);
@@ -778,6 +778,7 @@ static void commit_var_mtrrs(const struct var_mtrr_solution *sol)
/* Clear the ones that are unused. */
for (; i < total_mtrrs; i++)
clear_var_mtrr(i);
+ enable_var_mtrr(sol->mtrr_default_type);
enable_cache();
}
@@ -800,7 +801,6 @@ void x86_setup_var_mtrrs(unsigned int address_bits, unsigned int above4gb)
}
commit_var_mtrrs(sol);
- enable_var_mtrr(sol->mtrr_default_type);
}
void x86_setup_mtrrs(void)
Isaac Christensen (isaac.christensen(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6968
-gerrit
commit b16af3165bcd3eee77b4564b6c4a8bc56d6550de
Author: Duncan Laurie <dlaurie(a)chromium.org>
Date: Tue Apr 22 10:48:29 2014 -0700
baytrail: Move HDA verb table to Intel SOC common directory
This is common code for Intel SOC that can be shared.
Change-Id: Ic703f36f56a8238d5cc1248b353d8c3a49827a9a
Signed-off-by: Duncan Laurie <dlaurie(a)chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/196264
Reviewed-by: Aaron Durbin <adurbin(a)chromium.org>
(cherry picked from commit 3a9057b9616c54a8404eee55511743d2492dbc28)
Signed-off-by: Isaac Christensen <isaac.christensen(a)se-eng.com>
---
src/soc/intel/baytrail/Makefile.inc | 1 -
src/soc/intel/baytrail/baytrail/hda_verb.h | 39 -----
src/soc/intel/baytrail/hda.c | 2 +-
src/soc/intel/baytrail/hda_verb.c | 253 -----------------------------
src/soc/intel/common/Makefile.inc | 1 +
src/soc/intel/common/hda_verb.c | 253 +++++++++++++++++++++++++++++
src/soc/intel/common/hda_verb.h | 39 +++++
7 files changed, 294 insertions(+), 294 deletions(-)
diff --git a/src/soc/intel/baytrail/Makefile.inc b/src/soc/intel/baytrail/Makefile.inc
index f5c4c9f..94f3241 100644
--- a/src/soc/intel/baytrail/Makefile.inc
+++ b/src/soc/intel/baytrail/Makefile.inc
@@ -48,7 +48,6 @@ ramstage-y += stage_cache.c
romstage-y += stage_cache.c
ramstage-$(CONFIG_ELOG) += elog.c
ramstage-y += hda.c
-ramstage-y += hda_verb.c
# Remove as ramstage gets fleshed out
ramstage-y += placeholders.c
diff --git a/src/soc/intel/baytrail/baytrail/hda_verb.h b/src/soc/intel/baytrail/baytrail/hda_verb.h
deleted file mode 100644
index 9c505d6..0000000
--- a/src/soc/intel/baytrail/baytrail/hda_verb.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2013 Google Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef BAYTRAIL_HDA_VERB_H
-#define BAYTRAIL_HDA_VERB_H
-
-#include <stdint.h>
-
-#define HDA_GCAP_REG 0x00
-#define HDA_GCTL_REG 0x08
-#define HDA_GCTL_CRST (1 << 0)
-#define HDA_STATESTS_REG 0x0e
-#define HDA_IC_REG 0x60
-#define HDA_IR_REG 0x64
-#define HDA_ICII_REG 0x68
-#define HDA_ICII_BUSY (1 << 0)
-#define HDA_ICII_VALID (1 << 1)
-
-int hda_codec_detect(u32 base);
-int hda_codec_write(u32 base, u32 size, const u32 *data);
-int hda_codec_init(u32 base, int addr, int verb_size, const u32 *verb_data);
-
-#endif
diff --git a/src/soc/intel/baytrail/hda.c b/src/soc/intel/baytrail/hda.c
index a99e743..c5de654 100644
--- a/src/soc/intel/baytrail/hda.c
+++ b/src/soc/intel/baytrail/hda.c
@@ -24,7 +24,7 @@
#include <device/pci_ids.h>
#include <reg_script.h>
-#include <baytrail/hda_verb.h>
+#include <soc/intel/common/hda_verb.h>
#include <baytrail/iomap.h>
#include <baytrail/iosf.h>
#include <baytrail/pci_devs.h>
diff --git a/src/soc/intel/baytrail/hda_verb.c b/src/soc/intel/baytrail/hda_verb.c
deleted file mode 100644
index ae71b89..0000000
--- a/src/soc/intel/baytrail/hda_verb.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- * Copyright (C) 2008-2009 coresystems GmbH
- * Copyright (C) 2011 Google Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <console/console.h>
-#include <arch/io.h>
-#include <delay.h>
-#include <baytrail/hda_verb.h>
-
-/**
- * Set bits in a register and wait for status
- */
-static int set_bits(u32 port, u32 mask, u32 val)
-{
- u32 reg32;
- int count;
-
- /* Write (val & mask) to port */
- val &= mask;
- reg32 = read32(port);
- reg32 &= ~mask;
- reg32 |= val;
- write32(port, reg32);
-
- /* Wait for readback of register to
- * match what was just written to it
- */
- count = 50;
- do {
- /* Wait 1ms based on BKDG wait time */
- mdelay(1);
- reg32 = read32(port);
- reg32 &= mask;
- } while ((reg32 != val) && --count);
-
- /* Timeout occurred */
- if (!count)
- return -1;
- return 0;
-}
-
-/**
- * Probe for supported codecs
- */
-int hda_codec_detect(u32 base)
-{
- u8 reg8;
-
- /* Set Bit 0 to 1 to exit reset state (BAR + 0x8)[0] */
- if (set_bits(base + HDA_GCTL_REG, HDA_GCTL_CRST, HDA_GCTL_CRST) < 0)
- goto no_codec;
-
- /* Write back the value once reset bit is set. */
- write16(base + HDA_GCAP_REG, read16(base + HDA_GCAP_REG));
-
- /* Read in Codec location (BAR + 0xe)[2..0]*/
- reg8 = read8(base + HDA_STATESTS_REG);
- reg8 &= 0x0f;
- if (!reg8)
- goto no_codec;
-
- return reg8;
-
-no_codec:
- /* Codec Not found */
- /* Put HDA back in reset (BAR + 0x8) [0] */
- set_bits(base + HDA_GCTL_REG, HDA_GCTL_CRST, 0);
- printk(BIOS_DEBUG, "HDA: No codec!\n");
- return 0;
-}
-
-/**
- * Wait 50usec for the codec to indicate it is ready
- * no response would imply that the codec is non-operative
- */
-static int hda_wait_for_ready(u32 base)
-{
- /* Use a 50 usec timeout - the Linux kernel uses the
- * same duration */
-
- int timeout = 50;
-
- while(timeout--) {
- u32 reg32 = read32(base + HDA_ICII_REG);
- if (!(reg32 & HDA_ICII_BUSY))
- return 0;
- udelay(1);
- }
-
- return -1;
-}
-
-/**
- * Wait 50usec for the codec to indicate that it accepted
- * the previous command. No response would imply that the code
- * is non-operative
- */
-static int hda_wait_for_valid(u32 base)
-{
- u32 reg32;
-
- /* Send the verb to the codec */
- reg32 = read32(base + HDA_ICII_REG);
- reg32 |= HDA_ICII_BUSY | HDA_ICII_VALID;
- write32(base + HDA_ICII_REG, reg32);
-
- /* Use a 50 usec timeout - the Linux kernel uses the
- * same duration */
-
- int timeout = 50;
- while(timeout--) {
- reg32 = read32(base + HDA_ICII_REG);
- if ((reg32 & (HDA_ICII_VALID | HDA_ICII_BUSY)) ==
- HDA_ICII_VALID)
- return 0;
- udelay(1);
- }
-
- return -1;
-}
-
-/**
- * Find a specific entry within a verb table
- *
- * @verb_table_bytes: verb table size in bytes
- * @verb_table_data: verb table data
- * @viddid: vendor/device to search for
- * @verb_out: pointer to entry within table
- *
- * Returns size of the entry within the verb table,
- * Returns 0 if the entry is not found
- *
- * The HDA verb table is composed of dwords. A set of 4 dwords is
- * grouped together to form a "jack" descriptor.
- * Bits 31:28 - Codec Address
- * Bits 27:20 - NID
- * Bits 19:8 - Verb ID
- * Bits 7:0 - Payload
- *
- * coreboot groups different codec verb tables into a single table
- * and prefixes each with a specific header consisting of 3
- * dword entries:
- * 1 - Codec Vendor/Device ID
- * 2 - Subsystem ID
- * 3 - Number of jacks (groups of 4 dwords) for this codec
- */
-static u32 hda_find_verb(u32 verb_table_bytes,
- const u32 *verb_table_data,
- u32 viddid, const u32 ** verb)
-{
- int idx=0;
-
- while (idx < (verb_table_bytes / sizeof(u32))) {
- u32 verb_size = 4 * verb_table_data[idx+2]; // in u32
- if (verb_table_data[idx] != viddid) {
- idx += verb_size + 3; // skip verb + header
- continue;
- }
- *verb = &verb_table_data[idx+3];
- return verb_size;
- }
-
- /* Not all codecs need to load another verb */
- return 0;
-}
-
-/**
- * Write a supplied verb table
- */
-int hda_codec_write(u32 base, u32 size, const u32 *data)
-{
- int i;
-
- for (i = 0; i < size; i++) {
- if (hda_wait_for_ready(base) < 0)
- return -1;
-
- write32(base + HDA_IC_REG, data[i]);
-
- if (hda_wait_for_valid(base) < 0)
- return -1;
- }
-
- return 0;
-}
-
-/**
- * Initialize codec, then find the verb table and write it
- */
-int hda_codec_init(u32 base, int addr, int verb_size, const u32 *verb_data)
-{
- const u32 *verb;
- u32 reg32, size;
- int rc;
-
- printk(BIOS_DEBUG, "HDA: Initializing codec #%d\n", addr);
-
- if (!verb_size || !verb_data) {
- printk(BIOS_DEBUG, "HDA: No verb list!\n");
- return -1;
- }
-
- /* 1 */
- if (hda_wait_for_ready(base) < 0) {
- printk(BIOS_DEBUG, " codec not ready.\n");
- return -1;
- }
-
- reg32 = (addr << 28) | 0x000f0000;
- write32(base + HDA_IC_REG, reg32);
-
- if (hda_wait_for_valid(base) < 0) {
- printk(BIOS_DEBUG, " codec not valid.\n");
- return -1;
- }
-
- /* 2 */
- reg32 = read32(base + HDA_IR_REG);
- printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32);
-
- size = hda_find_verb(verb_size, verb_data, reg32, &verb);
- if (!size) {
- printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
- return -1;
- }
-
- /* 3 */
- rc = hda_codec_write(base, size, verb);
-
- if (rc < 0)
- printk(BIOS_DEBUG, "HDA: verb not loaded\n");
- else
- printk(BIOS_DEBUG, "HDA: verb loaded.\n");
-
- return rc;
-}
diff --git a/src/soc/intel/common/Makefile.inc b/src/soc/intel/common/Makefile.inc
index b32255a..0c39d80 100644
--- a/src/soc/intel/common/Makefile.inc
+++ b/src/soc/intel/common/Makefile.inc
@@ -1,3 +1,4 @@
+ramstage-y += hda_verb.c
ramstage-$(CONFIG_CACHE_MRC_SETTINGS) += nvm.c
ramstage-$(CONFIG_CACHE_MRC_SETTINGS) += mrc_cache.c
romstage-$(CONFIG_CACHE_MRC_SETTINGS) += mrc_cache.c
diff --git a/src/soc/intel/common/hda_verb.c b/src/soc/intel/common/hda_verb.c
new file mode 100644
index 0000000..6404ee2
--- /dev/null
+++ b/src/soc/intel/common/hda_verb.c
@@ -0,0 +1,253 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ * Copyright (C) 2008-2009 coresystems GmbH
+ * Copyright (C) 2011 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <console/console.h>
+#include <arch/io.h>
+#include <delay.h>
+#include "hda_verb.h"
+
+/**
+ * Set bits in a register and wait for status
+ */
+static int set_bits(u32 port, u32 mask, u32 val)
+{
+ u32 reg32;
+ int count;
+
+ /* Write (val & mask) to port */
+ val &= mask;
+ reg32 = read32(port);
+ reg32 &= ~mask;
+ reg32 |= val;
+ write32(port, reg32);
+
+ /* Wait for readback of register to
+ * match what was just written to it
+ */
+ count = 50;
+ do {
+ /* Wait 1ms based on BKDG wait time */
+ mdelay(1);
+ reg32 = read32(port);
+ reg32 &= mask;
+ } while ((reg32 != val) && --count);
+
+ /* Timeout occurred */
+ if (!count)
+ return -1;
+ return 0;
+}
+
+/**
+ * Probe for supported codecs
+ */
+int hda_codec_detect(u32 base)
+{
+ u8 reg8;
+
+ /* Set Bit 0 to 1 to exit reset state (BAR + 0x8)[0] */
+ if (set_bits(base + HDA_GCTL_REG, HDA_GCTL_CRST, HDA_GCTL_CRST) < 0)
+ goto no_codec;
+
+ /* Write back the value once reset bit is set. */
+ write16(base + HDA_GCAP_REG, read16(base + HDA_GCAP_REG));
+
+ /* Read in Codec location (BAR + 0xe)[2..0]*/
+ reg8 = read8(base + HDA_STATESTS_REG);
+ reg8 &= 0x0f;
+ if (!reg8)
+ goto no_codec;
+
+ return reg8;
+
+no_codec:
+ /* Codec Not found */
+ /* Put HDA back in reset (BAR + 0x8) [0] */
+ set_bits(base + HDA_GCTL_REG, HDA_GCTL_CRST, 0);
+ printk(BIOS_DEBUG, "HDA: No codec!\n");
+ return 0;
+}
+
+/**
+ * Wait 50usec for the codec to indicate it is ready
+ * no response would imply that the codec is non-operative
+ */
+static int hda_wait_for_ready(u32 base)
+{
+ /* Use a 50 usec timeout - the Linux kernel uses the
+ * same duration */
+
+ int timeout = 50;
+
+ while(timeout--) {
+ u32 reg32 = read32(base + HDA_ICII_REG);
+ if (!(reg32 & HDA_ICII_BUSY))
+ return 0;
+ udelay(1);
+ }
+
+ return -1;
+}
+
+/**
+ * Wait 50usec for the codec to indicate that it accepted
+ * the previous command. No response would imply that the code
+ * is non-operative
+ */
+static int hda_wait_for_valid(u32 base)
+{
+ u32 reg32;
+
+ /* Send the verb to the codec */
+ reg32 = read32(base + HDA_ICII_REG);
+ reg32 |= HDA_ICII_BUSY | HDA_ICII_VALID;
+ write32(base + HDA_ICII_REG, reg32);
+
+ /* Use a 50 usec timeout - the Linux kernel uses the
+ * same duration */
+
+ int timeout = 50;
+ while(timeout--) {
+ reg32 = read32(base + HDA_ICII_REG);
+ if ((reg32 & (HDA_ICII_VALID | HDA_ICII_BUSY)) ==
+ HDA_ICII_VALID)
+ return 0;
+ udelay(1);
+ }
+
+ return -1;
+}
+
+/**
+ * Find a specific entry within a verb table
+ *
+ * @verb_table_bytes: verb table size in bytes
+ * @verb_table_data: verb table data
+ * @viddid: vendor/device to search for
+ * @verb_out: pointer to entry within table
+ *
+ * Returns size of the entry within the verb table,
+ * Returns 0 if the entry is not found
+ *
+ * The HDA verb table is composed of dwords. A set of 4 dwords is
+ * grouped together to form a "jack" descriptor.
+ * Bits 31:28 - Codec Address
+ * Bits 27:20 - NID
+ * Bits 19:8 - Verb ID
+ * Bits 7:0 - Payload
+ *
+ * coreboot groups different codec verb tables into a single table
+ * and prefixes each with a specific header consisting of 3
+ * dword entries:
+ * 1 - Codec Vendor/Device ID
+ * 2 - Subsystem ID
+ * 3 - Number of jacks (groups of 4 dwords) for this codec
+ */
+static u32 hda_find_verb(u32 verb_table_bytes,
+ const u32 *verb_table_data,
+ u32 viddid, const u32 ** verb)
+{
+ int idx=0;
+
+ while (idx < (verb_table_bytes / sizeof(u32))) {
+ u32 verb_size = 4 * verb_table_data[idx+2]; // in u32
+ if (verb_table_data[idx] != viddid) {
+ idx += verb_size + 3; // skip verb + header
+ continue;
+ }
+ *verb = &verb_table_data[idx+3];
+ return verb_size;
+ }
+
+ /* Not all codecs need to load another verb */
+ return 0;
+}
+
+/**
+ * Write a supplied verb table
+ */
+int hda_codec_write(u32 base, u32 size, const u32 *data)
+{
+ int i;
+
+ for (i = 0; i < size; i++) {
+ if (hda_wait_for_ready(base) < 0)
+ return -1;
+
+ write32(base + HDA_IC_REG, data[i]);
+
+ if (hda_wait_for_valid(base) < 0)
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * Initialize codec, then find the verb table and write it
+ */
+int hda_codec_init(u32 base, int addr, int verb_size, const u32 *verb_data)
+{
+ const u32 *verb;
+ u32 reg32, size;
+ int rc;
+
+ printk(BIOS_DEBUG, "HDA: Initializing codec #%d\n", addr);
+
+ if (!verb_size || !verb_data) {
+ printk(BIOS_DEBUG, "HDA: No verb list!\n");
+ return -1;
+ }
+
+ /* 1 */
+ if (hda_wait_for_ready(base) < 0) {
+ printk(BIOS_DEBUG, " codec not ready.\n");
+ return -1;
+ }
+
+ reg32 = (addr << 28) | 0x000f0000;
+ write32(base + HDA_IC_REG, reg32);
+
+ if (hda_wait_for_valid(base) < 0) {
+ printk(BIOS_DEBUG, " codec not valid.\n");
+ return -1;
+ }
+
+ /* 2 */
+ reg32 = read32(base + HDA_IR_REG);
+ printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32);
+
+ size = hda_find_verb(verb_size, verb_data, reg32, &verb);
+ if (!size) {
+ printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
+ return -1;
+ }
+
+ /* 3 */
+ rc = hda_codec_write(base, size, verb);
+
+ if (rc < 0)
+ printk(BIOS_DEBUG, "HDA: verb not loaded\n");
+ else
+ printk(BIOS_DEBUG, "HDA: verb loaded.\n");
+
+ return rc;
+}
diff --git a/src/soc/intel/common/hda_verb.h b/src/soc/intel/common/hda_verb.h
new file mode 100644
index 0000000..a9c93c6
--- /dev/null
+++ b/src/soc/intel/common/hda_verb.h
@@ -0,0 +1,39 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2014 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef _COMMON_HDA_VERB_H_
+#define _COMMON_HDA_VERB_H_
+
+#include <stdint.h>
+
+#define HDA_GCAP_REG 0x00
+#define HDA_GCTL_REG 0x08
+#define HDA_GCTL_CRST (1 << 0)
+#define HDA_STATESTS_REG 0x0e
+#define HDA_IC_REG 0x60
+#define HDA_IR_REG 0x64
+#define HDA_ICII_REG 0x68
+#define HDA_ICII_BUSY (1 << 0)
+#define HDA_ICII_VALID (1 << 1)
+
+int hda_codec_detect(u32 base);
+int hda_codec_write(u32 base, u32 size, const u32 *data);
+int hda_codec_init(u32 base, int addr, int verb_size, const u32 *verb_data);
+
+#endif /* _COMMON_HDA_VERB_H_ */
the following patch was just integrated into master:
commit 7756fe70eb568e1429e244306be9401357cefa43
Author: Gabe Black <gabeblack(a)google.com>
Date: Tue Feb 25 01:40:34 2014 -0800
x86: Minimize work done with the caches disabled in mtrr functions.
The code in src/cpu/x86/mtrr/mtrr.c disables caching in a few places when
changing mtrr settings. While I can't find anything that says that's actually
required, I can believe it's necessary. With that said, other code around the
wrmsr instructions which actually modify the settings should be able to run
with caching enabled with no ill effects.
This is particularly true for two calls to printk, one in the fixed mtrr code
and one in the variable, which could result in an arbitrary amount of work
being done without caching. When changing the implementation of the cbmem
console, these two printks caused a significant regression in boot performance
on link of about 70ms which is about 10% of total firmware boot time. When the
window where the cache is disabled is minimized, both this and the new
implementation were about 30ms faster than the original boot time.
For the variable MTRRs, we now store what we want to set the MSRs to and then
write them all at once at the end of commit_var_mtrrs(). This way we don't
have some set and some not, but we still minimize the time we spend with the
caches disabled.
Change-Id: I5139b262bd2d13f79afd88e2e2c0f514fb3e27c9
Signed-off-by: Gabe Black <gabeblack(a)google.com>
Reviewed-on: https://chromium-review.googlesource.com/187811
Reviewed-by: Ronald Minnich <rminnich(a)chromium.org>
Reviewed-by: Aaron Durbin <adurbin(a)chromium.org>
Commit-Queue: Gabe Black <gabeblack(a)chromium.org>
Tested-by: Gabe Black <gabeblack(a)chromium.org>
(cherry picked from commit 31529d6d965676c6cedeb62137eabc26819956fc)
Signed-off-by: Isaac Christensen <isaac.christensen(a)se-eng.com>
Reviewed-on: http://review.coreboot.org/6952
Tested-by: build bot (Jenkins)
Reviewed-by: Edward O'Callaghan <eocallaghan(a)alterapraxis.com>
See http://review.coreboot.org/6952 for details.
-gerrit
Isaac Christensen (isaac.christensen(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6963
-gerrit
commit 166aab60c37bacf4827df467ed212f2297ace795
Author: Furquan Shaikh <furquan(a)google.com>
Date: Wed Mar 19 14:29:48 2014 -0700
ipq806x: Add generic support skeleton for ipq806x
Skeleton for soc ipq806x
Old-Change-Id: I92a8d592d762f59665e15d1a7fc6cc73dc74c296
Signed-off-by: Furquan Shaikh <furquan(a)google.com>
Reviewed-on: https://chromium-review.googlesource.com/190723
Reviewed-by: Vadim Bendebury <vbendeb(a)chromium.org>
Commit-Queue: Furquan Shaikh <furquan(a)chromium.org>
Tested-by: Furquan Shaikh <furquan(a)chromium.org>
(cherry picked from commit e71d45733d86e77717fd2f592ef06113246db911)
soc/ipq806x: Disable LPAE mode.
LPAE (large physical address extension) is not available on this SOC
core, do not enable it.
Old-Change-Id: I9e9ad1aeaf613f04987c0c306a574085042d0e7b
Signed-off-by: Deepa Dinamani <deepad(a)codeaurora.com>
Signed-off-by: Vadim Bendebury <vbendeb(a)chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/198023
Reviewed-by: deepa dinamani <deepad(a)quicinc.com>
(cherry picked from commit e6e12c39efd54e4fcbd444134bf30e211948a71b)
Squashed 2 commits for the Qualcomm ipq806x SOC.
Change-Id: I14521d3b2844ddd68112882de81453ce8d19fc16
Signed-off-by: Isaac Christensen <isaac.christensen(a)se-eng.com>
---
src/soc/Kconfig | 3 ++-
src/soc/Makefile.inc | 1 +
src/soc/qualcomm/Kconfig | 1 +
src/soc/qualcomm/Makefile.inc | 1 +
src/soc/qualcomm/ipq806x/Kconfig | 22 ++++++++++++++++++++++
src/soc/qualcomm/ipq806x/Makefile.inc | 8 ++++++++
src/soc/qualcomm/ipq806x/cbfs.c | 26 ++++++++++++++++++++++++++
src/soc/qualcomm/ipq806x/timer.c | 28 ++++++++++++++++++++++++++++
8 files changed, 89 insertions(+), 1 deletion(-)
diff --git a/src/soc/Kconfig b/src/soc/Kconfig
index 5903a57..53d7b90 100644
--- a/src/soc/Kconfig
+++ b/src/soc/Kconfig
@@ -1,3 +1,4 @@
source src/soc/intel/Kconfig
source src/soc/nvidia/Kconfig
-source src/soc/samsung/Kconfig
\ No newline at end of file
+source src/soc/qualcomm/Kconfig
+source src/soc/samsung/Kconfig
diff --git a/src/soc/Makefile.inc b/src/soc/Makefile.inc
index b36d5be..6939346 100644
--- a/src/soc/Makefile.inc
+++ b/src/soc/Makefile.inc
@@ -3,4 +3,5 @@
################################################################################
subdirs-y += intel
subdirs-y += nvidia
+subdirs-y += qualcomm
subdirs-y += samsung
diff --git a/src/soc/qualcomm/Kconfig b/src/soc/qualcomm/Kconfig
new file mode 100644
index 0000000..b7a12d4
--- /dev/null
+++ b/src/soc/qualcomm/Kconfig
@@ -0,0 +1 @@
+source src/soc/qualcomm/ipq806x/Kconfig
diff --git a/src/soc/qualcomm/Makefile.inc b/src/soc/qualcomm/Makefile.inc
new file mode 100644
index 0000000..06b2f2f
--- /dev/null
+++ b/src/soc/qualcomm/Makefile.inc
@@ -0,0 +1 @@
+subdirs-$(CONFIG_SOC_QC_IPQ806X) += ipq806x
diff --git a/src/soc/qualcomm/ipq806x/Kconfig b/src/soc/qualcomm/ipq806x/Kconfig
new file mode 100644
index 0000000..fcf8ccd
--- /dev/null
+++ b/src/soc/qualcomm/ipq806x/Kconfig
@@ -0,0 +1,22 @@
+config SOC_QC_IPQ806X
+ select ARCH_BOOTBLOCK_ARMV4
+ select ARCH_ROMSTAGE_ARMV7
+ select ARCH_RAMSTAGE_ARMV7
+ bool
+ default n
+
+if SOC_QC_IPQ806X
+
+config BOOTBLOCK_ROM_OFFSET
+ hex
+ default 0x0
+
+config CBFS_HEADER_ROM_OFFSET
+ hex "offset of master CBFS header in ROM"
+ default 0x18000
+
+config CBFS_ROM_OFFSET
+ hex "offset of CBFS data in ROM"
+ default 0x18080
+
+endif
diff --git a/src/soc/qualcomm/ipq806x/Makefile.inc b/src/soc/qualcomm/ipq806x/Makefile.inc
new file mode 100644
index 0000000..be37581
--- /dev/null
+++ b/src/soc/qualcomm/ipq806x/Makefile.inc
@@ -0,0 +1,8 @@
+bootblock-y += cbfs.c
+bootblock-y += timer.c
+
+romstage-y += cbfs.c
+romstage-y += timer.c
+
+ramstage-y += cbfs.c
+ramstage-y += timer.c
diff --git a/src/soc/qualcomm/ipq806x/cbfs.c b/src/soc/qualcomm/ipq806x/cbfs.c
new file mode 100644
index 0000000..97ae548
--- /dev/null
+++ b/src/soc/qualcomm/ipq806x/cbfs.c
@@ -0,0 +1,26 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+#include <cbfs.h> /* This driver serves as a CBFS media source. */
+
+int init_default_cbfs_media(struct cbfs_media *media)
+{
+ return 0;
+}
diff --git a/src/soc/qualcomm/ipq806x/timer.c b/src/soc/qualcomm/ipq806x/timer.c
new file mode 100644
index 0000000..c4e250e
--- /dev/null
+++ b/src/soc/qualcomm/ipq806x/timer.c
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <console/console.h>
+#include <timer.h>
+#include <delay.h>
+#include <thread.h>
+
+void init_timer(void)
+{
+}
+
Isaac Christensen (isaac.christensen(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6962
-gerrit
commit 84378b19a334ae81e49e103d1721477275066da4
Author: Stefan Reinauer <reinauer(a)chromium.org>
Date: Mon Mar 3 15:08:10 2014 -0800
google/panther: Be safe about invalid thermal readings
In case we get an invalid thermal reading, let's run the fan
at full speed rather than at low speed. This might impact the
user experiance slightly in cases where the bad reading does
not happen while the system is hot, but it will increase stability
in the cases where the system is actually overheating.
Also, set the critical temperature below tjmax, because otherwise
thermal shutdown by the OS will never be triggered.
Signed-off-by: Stefan Reinauer <reinauer(a)google.com>
Change-Id: Iab262f1f17a5dff875c596d9e8d50e4e50ee90f9
Reviewed-on: https://chromium-review.googlesource.com/188556
Reviewed-by: Shawn Nematbakhsh <shawnn(a)chromium.org>
Commit-Queue: Stefan Reinauer <reinauer(a)chromium.org>
Tested-by: Stefan Reinauer <reinauer(a)chromium.org>
(cherry picked from commit 721fc2361ea9c6fea75409be57726294ce840f03)
Signed-off-by: Isaac Christensen <isaac.christensen(a)se-eng.com>
---
src/mainboard/google/panther/acpi/thermal.asl | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/mainboard/google/panther/acpi/thermal.asl b/src/mainboard/google/panther/acpi/thermal.asl
index 72b4ad8..3a1f7be 100644
--- a/src/mainboard/google/panther/acpi/thermal.asl
+++ b/src/mainboard/google/panther/acpi/thermal.asl
@@ -76,12 +76,12 @@ Scope (\_TZ)
// Check for "no reading available"
If (LEqual (Local0, 0x80)) {
- Return (CTOK (\F2ON))
+ Return (CTOK (\F0ON))
}
// Check for invalid readings
If (LOr (LEqual (Local0, 255), LEqual (Local0, 0))) {
- Return (CTOK (\F2ON))
+ Return (CTOK (\F0ON))
}
// PECI raw value is an offset from Tj_max