Timothy Pearson (tpearson(a)raptorengineeringinc.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13156
-gerrit
commit 7b9ad25e7c4eb2ee64de5c8cd504791dc9b042b7
Author: Timothy Pearson <tpearson(a)raptorengineeringinc.com>
Date: Tue Nov 24 14:11:57 2015 -0600
superio/winbond/w83667hg-a: Add support for W83667HG-A
The KGPE-D16 and KCMA-D8 use a Winbond W83667HG-A SuperIO. While
the Nuvoton NCT5572D is effectively the same core, and a close
enough match to get things working initially, the W83667HG-A
has a different LDN mapping and several extra features that
require a separate support driver.
Clone the Nuvoton NCT5572D and modify according to the W83667HG-A
datasheet, version 1.4.
Change-Id: I707ba2e40a22d41cd813003d84a82cb20304f55b
Signed-off-by: Timothy Pearson <tpearson(a)raptorengineeringinc.com>
---
src/superio/winbond/Kconfig | 4 +
src/superio/winbond/Makefile.inc | 1 +
src/superio/winbond/w83667hg-a/Makefile.inc | 19 +++++
src/superio/winbond/w83667hg-a/superio.c | 110 ++++++++++++++++++++++++++++
src/superio/winbond/w83667hg-a/w83667hg-a.h | 47 ++++++++++++
5 files changed, 181 insertions(+)
diff --git a/src/superio/winbond/Kconfig b/src/superio/winbond/Kconfig
index ba9f479..1731a7f 100644
--- a/src/superio/winbond/Kconfig
+++ b/src/superio/winbond/Kconfig
@@ -39,6 +39,10 @@ config SUPERIO_WINBOND_W83627UHG
bool
select SUPERIO_WINBOND_COMMON_ROMSTAGE
+config SUPERIO_WINBOND_W83667HG_A
+ bool
+ select SUPERIO_WINBOND_COMMON_ROMSTAGE
+
config SUPERIO_WINBOND_W83697HF
bool
select SUPERIO_WINBOND_COMMON_ROMSTAGE
diff --git a/src/superio/winbond/Makefile.inc b/src/superio/winbond/Makefile.inc
index 67927dc..ae4b283 100644
--- a/src/superio/winbond/Makefile.inc
+++ b/src/superio/winbond/Makefile.inc
@@ -21,6 +21,7 @@ subdirs-y += w83627ehg
subdirs-y += w83627hf
subdirs-y += w83627thg
subdirs-y += w83627uhg
+subdirs-y += w83667hg-a
subdirs-y += w83697hf
subdirs-y += w83977tf
subdirs-y += wpcd376i
diff --git a/src/superio/winbond/w83667hg-a/Makefile.inc b/src/superio/winbond/w83667hg-a/Makefile.inc
new file mode 100644
index 0000000..7665046
--- /dev/null
+++ b/src/superio/winbond/w83667hg-a/Makefile.inc
@@ -0,0 +1,19 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2011 - 2012 Advanced Micro Devices, Inc.
+## Copyright (C) 2014 Felix Held <felix-coreboot(a)felixheld.de>
+## Copyright (C) 2015 Raptor Engineering
+##
+## 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; either version 2 of the License, or
+## (at your option) any later version.
+##
+## 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.
+##
+
+ramstage-$(CONFIG_SUPERIO_WINBOND_W83667HG_A) += superio.c
diff --git a/src/superio/winbond/w83667hg-a/superio.c b/src/superio/winbond/w83667hg-a/superio.c
new file mode 100644
index 0000000..96eddd7
--- /dev/null
+++ b/src/superio/winbond/w83667hg-a/superio.c
@@ -0,0 +1,110 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2014 Felix Held <felix-coreboot(a)felixheld.de>
+ * Copyright (C) 2014 Edward O'Callaghan <eocallaghan(a)alterapraxis.com>
+ * Copyright (C) 2015 - 2016 Raptor Engineering
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.
+ */
+
+#include <console/console.h>
+#include <arch/io.h>
+#include <device/device.h>
+#include <device/pnp.h>
+#include <pc80/keyboard.h>
+#include <pc80/mc146818rtc.h>
+#include <stdlib.h>
+#include <superio/conf_mode.h>
+
+#include "w83667hg-a.h"
+
+#define MAINBOARD_POWER_OFF 0
+#define MAINBOARD_POWER_ON 1
+
+#ifndef CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL
+#define CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL MAINBOARD_POWER_ON
+#endif
+
+static void w83667hg_a_init(struct device *dev)
+{
+ uint8_t byte;
+ uint8_t power_status;
+
+ if (!dev->enabled)
+ return;
+
+ switch(dev->path.pnp.device) {
+ /* TODO: Might potentially need code for HWM or FDC etc. */
+ case W83667HG_A_KBC:
+ pc_keyboard_init();
+ break;
+ case W83667HG_A_ACPI:
+ /* Set power state after power fail */
+ power_status = CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL;
+ get_option(&power_status, "power_on_after_fail");
+ pnp_enter_conf_mode_8787(dev);
+ pnp_set_logical_device(dev);
+ byte = pnp_read_config(dev, 0xe4);
+ byte &= ~0x60;
+ if (power_status == 1)
+ byte |= (0x1 << 5); /* Force power on */
+ else if (power_status == 2)
+ byte |= (0x2 << 5); /* Use last power state */
+ pnp_write_config(dev, 0xe4, byte);
+ pnp_exit_conf_mode_aa(dev);
+ printk(BIOS_INFO, "set power %s after power fail\n", power_status ? "on" : "off");
+ break;
+ }
+}
+
+static struct device_operations ops = {
+ .read_resources = pnp_read_resources,
+ .set_resources = pnp_set_resources,
+ .enable_resources = pnp_enable_resources,
+ .enable = pnp_alt_enable,
+ .init = w83667hg_a_init,
+ .ops_pnp_mode = &pnp_conf_mode_8787_aa,
+};
+
+static struct pnp_info pnp_dev_info[] = {
+ { &ops, W83667HG_A_FDC, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, {0x0ff8, 0}, },
+ { &ops, W83667HG_A_PP, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, {0x0ff8, 0}, },
+ { &ops, W83667HG_A_SP1, PNP_IO0 | PNP_IRQ0, {0x0ff8, 0}, },
+ { &ops, W83667HG_A_SP2, PNP_IO0 | PNP_IRQ0, {0x0ff8, 0}, },
+ { &ops, W83667HG_A_KBC, PNP_IO0 | PNP_IO1 | PNP_IRQ0 | PNP_IRQ1, {0x0fff, 0}, {0x0fff, 4}, },
+ { &ops, W83667HG_A_SPI, PNP_IO1, {0x0ff8, 0}},
+ { &ops, W83667HG_A_WDT1},
+ { &ops, W83667HG_A_ACPI},
+ { &ops, W83667HG_A_HWM_TSI, PNP_IO0 | PNP_IRQ0, {0x0ffe, 0}, },
+ { &ops, W83667HG_A_PECI},
+ { &ops, W83667HG_A_VID_BUSSEL},
+ { &ops, W83667HG_A_GPIO_PP_OD},
+ { &ops, W83667HG_A_GPIO1},
+ { &ops, W83667HG_A_GPIO2},
+ { &ops, W83667HG_A_GPIO3},
+ { &ops, W83667HG_A_GPIO4},
+ { &ops, W83667HG_A_GPIO5},
+ { &ops, W83667HG_A_GPIO6},
+ { &ops, W83667HG_A_GPIO7},
+ { &ops, W83667HG_A_GPIO8},
+ { &ops, W83667HG_A_GPIO9},
+};
+
+static void enable_dev(struct device *dev)
+{
+ pnp_enable_devices(dev, &ops, ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
+}
+
+struct chip_operations superio_winbond_w83667hg_a_ops = {
+ CHIP_NAME("WINBOND W83667HG-A Super I/O")
+ .enable_dev = enable_dev,
+};
diff --git a/src/superio/winbond/w83667hg-a/w83667hg-a.h b/src/superio/winbond/w83667hg-a/w83667hg-a.h
new file mode 100644
index 0000000..efb77b8
--- /dev/null
+++ b/src/superio/winbond/w83667hg-a/w83667hg-a.h
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2014 Felix Held <felix-coreboot(a)felixheld.de>
+ * Copyright (C) 2015 Raptor Engineering
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.
+ */
+
+#ifndef SUPERIO_WINBOND_W83667HG_A
+#define SUPERIO_WINBOND_W83667HG_A
+
+/* Logical Device Numbers (LDN). */
+#define W83667HG_A_FDC 0x00
+#define W83667HG_A_PP 0x01
+#define W83667HG_A_SP1 0x02 /* Com1 */
+#define W83667HG_A_SP2 0x03 /* Com2 */
+#define W83667HG_A_KBC 0x05
+#define W83667HG_A_SPI 0x06
+#define W83667HG_A_GPIO6789_V 0x07
+#define W83667HG_A_WDT1 0x08
+#define W83667HG_A_GPIO2345_V 0x09
+#define W83667HG_A_ACPI 0x0A
+#define W83667HG_A_HWM_TSI 0x0B /* HW monitor/SB-TSI/deep S5 */
+#define W83667HG_A_PECI 0x0C
+#define W83667HG_A_VID_BUSSEL 0x0D /* VID and BUSSEL */
+#define W83667HG_A_GPIO_PP_OD 0x0F /* GPIO Push-Pull/Open drain select */
+
+/* virtual LDN for GPIO */
+#define W83667HG_A_GPIO2 ((0 << 8) | W83667HG_A_GPIO2345_V)
+#define W83667HG_A_GPIO3 ((1 << 8) | W83667HG_A_GPIO2345_V)
+#define W83667HG_A_GPIO4 ((2 << 8) | W83667HG_A_GPIO2345_V)
+#define W83667HG_A_GPIO5 ((3 << 8) | W83667HG_A_GPIO2345_V)
+#define W83667HG_A_GPIO6 ((1 << 8) | W83667HG_A_GPIO6789_V)
+#define W83667HG_A_GPIO7 ((2 << 8) | W83667HG_A_GPIO6789_V)
+#define W83667HG_A_GPIO8 ((3 << 8) | W83667HG_A_GPIO6789_V)
+#define W83667HG_A_GPIO9 ((4 << 8) | W83667HG_A_GPIO6789_V)
+
+#endif /* SUPERIO_WINBOND_W83667HG_A */
Timothy Pearson (tpearson(a)raptorengineeringinc.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13158
-gerrit
commit 0d760df309e101e033ed7ebea8393403557e3b6c
Author: Timothy Pearson <tpearson(a)raptorengineeringinc.com>
Date: Tue Nov 24 14:11:58 2015 -0600
cpu/amd/fam10h-15h: Fix Family 15h boot hang when BSP lift enabled
The existing code did not allow for the second core of the BSP to
reside on an APIC ID other than 1, leading to a boot hang on Family
15h processors when APIC_ID_OFFSET was set to anything other than 0.
Furthermore, insufficient AP stack space was allocated for AP start.
Change-Id: I4ded3cfb3736149e2265848014352d7622d5042a
Signed-off-by: Timothy Pearson <tpearson(a)raptorengineeringinc.com>
---
src/cpu/amd/family_10h-family_15h/Kconfig | 2 +-
src/cpu/amd/family_10h-family_15h/init_cpus.c | 8 +++++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/cpu/amd/family_10h-family_15h/Kconfig b/src/cpu/amd/family_10h-family_15h/Kconfig
index bfb6751..2f3dfc0 100644
--- a/src/cpu/amd/family_10h-family_15h/Kconfig
+++ b/src/cpu/amd/family_10h-family_15h/Kconfig
@@ -48,7 +48,7 @@ config DCACHE_BSP_STACK_SLUSH
config DCACHE_AP_STACK_SIZE
hex
- default 0x400
+ default 0x500
config UDELAY_IO
bool
diff --git a/src/cpu/amd/family_10h-family_15h/init_cpus.c b/src/cpu/amd/family_10h-family_15h/init_cpus.c
index 5a67601..e8e81d2 100644
--- a/src/cpu/amd/family_10h-family_15h/init_cpus.c
+++ b/src/cpu/amd/family_10h-family_15h/init_cpus.c
@@ -356,6 +356,7 @@ static u32 init_cpus(u32 cpu_init_detectedx, struct sys_info *sysinfo)
uint32_t dword;
uint8_t set_mtrrs;
uint8_t node_count;
+ uint8_t fam15_bsp_core1_apicid;
struct node_core_id id;
/* Please refer to the calculations and explaination in cache_as_ram.inc before modifying these values */
@@ -483,7 +484,12 @@ static u32 init_cpus(u32 cpu_init_detectedx, struct sys_info *sysinfo)
if (is_fam15h()) {
/* core 1 on node 0 is special; to avoid corrupting the
* BSP do not alter MTRRs on that core */
- if (apicid == 1)
+ if (IS_ENABLED(CONFIG_ENABLE_APIC_EXT_ID) && (CONFIG_APIC_ID_OFFSET > 0))
+ fam15_bsp_core1_apicid = CONFIG_APIC_ID_OFFSET + 1;
+ else
+ fam15_bsp_core1_apicid = 1;
+
+ if (apicid == fam15_bsp_core1_apicid)
set_mtrrs = 0;
else
set_mtrrs = !!(apicid & 0x1);
Timothy Pearson (tpearson(a)raptorengineeringinc.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13152
-gerrit
commit 5dc0dda0cd07ed2da7de314124a23889e04ee3ee
Author: Timothy Pearson <tpearson(a)raptorengineeringinc.com>
Date: Tue Nov 24 14:11:55 2015 -0600
mainboard/asus/kgpe-d16: Enable ASUS MIO audio option
The KGPE-D16 supports an optional MIO audio card, which connects
to the on-board HDA interface of the SP5100.
Enable the HDA interface for use with the MIO card.
Change-Id: Idfe069f4bce7b94a7460bc7fcdd378eb57e51fda
Signed-off-by: Timothy Pearson <tpearson(a)raptorengineeringinc.com>
---
src/mainboard/asus/kgpe-d16/devicetree.cb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/mainboard/asus/kgpe-d16/devicetree.cb b/src/mainboard/asus/kgpe-d16/devicetree.cb
index 014a35f..96372f9 100644
--- a/src/mainboard/asus/kgpe-d16/devicetree.cb
+++ b/src/mainboard/asus/kgpe-d16/devicetree.cb
@@ -175,7 +175,7 @@ chip northbridge/amd/amdfam10/root_complex # Root complex
end
end
device pci 14.1 on end # IDE 0x439c
- device pci 14.2 off end # HDA 0x4383 (KGPE-D16 omits audio option)
+ device pci 14.2 on end # HDA 0x4383 (ASUS MIO add-on card)
device pci 14.3 on # LPC 0x439d (SMBUS primary controller)
chip superio/nuvoton/nct5572d # Super I/O
device pnp 2e.0 off end # FDC; Not available on the KGPE-D16