diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2018-12-15 21:38:39 +0100 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-01-10 12:17:10 +0000 |
commit | f3e50fc68186fbfa93f77d05f182bf0435e745ab (patch) | |
tree | 12fd4e95d9ceab386dda329cb31f1f79786a77d0 | |
parent | 13f58e47ed995a73b2ae57c25b98afed84675783 (diff) |
mb/foxconn/g41s-k: Add g41m variant
Was tested with the following:
- 2 DIMM slots
- USB
- Ethernet NIC
- automatic fan control
- Libgfxinit with VGA, DVI (HDMI slot unpopulated)
- PS2 Keyboard
- SATA
- PEG
- S3 resume
What does not work:
- Using the second DIMM slot on a channel
G41 can only handle 2 ranks per channel and on this mainboard 1 rank
per DIMM slot. Supporting this would require too much raminit rework
and is not worth it (at least for me)
Change-Id: I67784038ef929f561b82365f00db70a69c024321
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/30242
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
15 files changed, 150 insertions, 5 deletions
diff --git a/src/mainboard/foxconn/g41s-k/Kconfig b/src/mainboard/foxconn/g41s-k/Kconfig index 4a534c4ab3..f74fcd6bf3 100644 --- a/src/mainboard/foxconn/g41s-k/Kconfig +++ b/src/mainboard/foxconn/g41s-k/Kconfig @@ -14,7 +14,7 @@ ## GNU General Public License for more details. ## -if BOARD_FOXCONN_G41S_K +if BOARD_FOXCONN_G41S_K || BOARD_FOXCONN_G41M config BOARD_SPECIFIC_OPTIONS def_bool y @@ -39,9 +39,18 @@ config MAINBOARD_DIR string default "foxconn/g41s-k" +config VARIANT_DIR + default "g41s-k" if BOARD_FOXCONN_G41S_K + default "g41m" if BOARD_FOXCONN_G41M + config MAINBOARD_PART_NUMBER string - default "G41S-K" + default "G41S-K" if BOARD_FOXCONN_G41S_K + default "G41M/G41M-S/G41M-V" if BOARD_FOXCONN_G41M + +config OVERRIDE_DEVICETREE + string + default "variants/$(CONFIG_VARIANT_DIR)/overridetree.cb" config MAX_CPUS int diff --git a/src/mainboard/foxconn/g41s-k/Kconfig.name b/src/mainboard/foxconn/g41s-k/Kconfig.name index 1c618e8a02..bb3352011c 100644 --- a/src/mainboard/foxconn/g41s-k/Kconfig.name +++ b/src/mainboard/foxconn/g41s-k/Kconfig.name @@ -1,2 +1,4 @@ config BOARD_FOXCONN_G41S_K bool "G41S-K" +config BOARD_FOXCONN_G41M + bool "G41M/G41M-S/G41M-V" diff --git a/src/mainboard/foxconn/g41s-k/Makefile.inc b/src/mainboard/foxconn/g41s-k/Makefile.inc index 0786d6fca5..ca8de4d597 100644 --- a/src/mainboard/foxconn/g41s-k/Makefile.inc +++ b/src/mainboard/foxconn/g41s-k/Makefile.inc @@ -1,4 +1,6 @@ ramstage-y += cstates.c romstage-y += gpio.c -ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads +ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += variants/$(VARIANT_DIR)/gma-mainboard.ads + +CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/ diff --git a/src/mainboard/foxconn/g41s-k/acpi/superio.asl b/src/mainboard/foxconn/g41s-k/acpi/superio.asl index 3811c2f1ad..9432aca833 100644 --- a/src/mainboard/foxconn/g41s-k/acpi/superio.asl +++ b/src/mainboard/foxconn/g41s-k/acpi/superio.asl @@ -26,10 +26,14 @@ #define SUPERIO_DEV SIO0 #define SUPERIO_PNP_BASE 0x2e #define IT8720F_SHOW_SP1 1 +#if IS_ENABLED(CONFIG_BOARD_FOXCONN_G41S_K) #define IT8720F_SHOW_SP2 1 +#endif #define IT8720F_SHOW_EC 1 #define IT8720F_SHOW_KBCK 1 #define IT8720F_SHOW_KBCM 1 #define IT8720F_SHOW_GPIO 1 +#if IS_ENABLED(CONFIG_BOARD_FOXCONN_G41S_K) #define IT8720F_SHOW_CIR 1 +#endif #include <superio/ite/it8720f/acpi/superio.asl> diff --git a/src/mainboard/foxconn/g41s-k/devicetree.cb b/src/mainboard/foxconn/g41s-k/devicetree.cb index 84cf353f7e..bf940b46aa 100644 --- a/src/mainboard/foxconn/g41s-k/devicetree.cb +++ b/src/mainboard/foxconn/g41s-k/devicetree.cb @@ -26,7 +26,6 @@ chip northbridge/intel/x4x # Northbridge end end device domain 0 on # PCI domain - subsystemid 0x105b 0x0dda inherit device pci 0.0 on end # Host Bridge device pci 1.0 on end # PEG device pci 2.0 on end # Integrated graphics controller diff --git a/src/mainboard/foxconn/g41s-k/hda_verb.c b/src/mainboard/foxconn/g41s-k/hda_verb.c index 45943b8c6c..9ac3c3be6e 100644 --- a/src/mainboard/foxconn/g41s-k/hda_verb.c +++ b/src/mainboard/foxconn/g41s-k/hda_verb.c @@ -17,6 +17,7 @@ #include <device/azalia_device.h> +#if IS_ENABLED(CONFIG_BOARD_FOXCONN_G41S_K) const u32 cim_verb_data[] = { /* coreboot specific header */ 0x10ec0888, /* Vendor ID */ @@ -40,6 +41,31 @@ const u32 cim_verb_data[] = { AZALIA_PIN_CFG(0, 0x1e, 0x01441130), AZALIA_PIN_CFG(0, 0x1f, 0x411111f0), }; +#else /* CONFIG_BOARD_FOXCONN_G41M */ +const u32 cim_verb_data[] = { + /* coreboot specific header */ + 0x10ec0888, /* Vendor ID */ + 0x105b0dc0, /* Subsystem ID */ + 0x0000000e, /* Number of entries */ + + /* Pin Widget Verb Table */ + + AZALIA_PIN_CFG(2, 0x11, 0x01441140), + AZALIA_PIN_CFG(2, 0x12, 0x411111f0), + AZALIA_PIN_CFG(2, 0x14, 0x01014410), + AZALIA_PIN_CFG(2, 0x15, 0x01011412), + AZALIA_PIN_CFG(2, 0x16, 0x01016411), + AZALIA_PIN_CFG(2, 0x17, 0x01012414), + AZALIA_PIN_CFG(2, 0x18, 0x01a19c50), + AZALIA_PIN_CFG(2, 0x19, 0x02a19c60), + AZALIA_PIN_CFG(2, 0x1a, 0x0181345f), + AZALIA_PIN_CFG(2, 0x1b, 0x02014c20), + AZALIA_PIN_CFG(2, 0x1c, 0x593301f0), + AZALIA_PIN_CFG(2, 0x1d, 0x4007f603), + AZALIA_PIN_CFG(2, 0x1e, 0x99430130), + AZALIA_PIN_CFG(2, 0x1f, 0x411111f0), +}; +#endif const u32 pc_beep_verbs[0] = {}; diff --git a/src/mainboard/foxconn/g41s-k/romstage.c b/src/mainboard/foxconn/g41s-k/romstage.c index 9ce9c65c5a..7c1402ac44 100644 --- a/src/mainboard/foxconn/g41s-k/romstage.c +++ b/src/mainboard/foxconn/g41s-k/romstage.c @@ -72,7 +72,7 @@ static void ich7_enable_lpc(void) { pci_write_config16(LPC_DEV, LPC_IO_DEC, 0x0010); pci_write_config16(LPC_DEV, LPC_EN, CNF1_LPC_EN | KBC_LPC_EN | - COMB_LPC_EN | COMA_LPC_EN); + FDD_LPC_EN | COMB_LPC_EN | COMA_LPC_EN); /* Decode 64 bytes at 0x0a00 to LPC for Super I/O EC and GPIO. */ pci_write_config32(LPC_DEV, GEN1_DEC, 0x003c0a01); @@ -81,7 +81,13 @@ static void ich7_enable_lpc(void) void mainboard_romstage_entry(unsigned long bist) { // ch0 ch1 +#if IS_ENABLED(CONFIG_BOARD_FOXCONN_G41S_K) const u8 spd_addrmap[4] = { 0x50, 0, 0, 0 }; +#else + /* TODO adapt raminit such that other slots can be used + * for single rank dimms */ + const u8 spd_addrmap[4] = { 0x50, 0, 0x52, 0 }; +#endif u8 boot_path = 0; u8 s3_resume; diff --git a/src/mainboard/foxconn/g41s-k/variants/g41m/acpi/ich7_pci_irqs.asl b/src/mainboard/foxconn/g41s-k/variants/g41m/acpi/ich7_pci_irqs.asl new file mode 100644 index 0000000000..f1f3462d49 --- /dev/null +++ b/src/mainboard/foxconn/g41s-k/variants/g41m/acpi/ich7_pci_irqs.asl @@ -0,0 +1,46 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2017 Arthur Heymans <arthur@aheymans.xyz> + * Copyright (C) 2017 Samuel Holland <samuel@sholland.org> + * + * 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. +m * + * 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. + */ + +/* + * This is board specific information: + * IRQ routing for the 0:1e.0 PCI bridge of the ICH7 + */ + +If (PICM) { + Return (Package() { + Package() { 0x0001ffff, 0, 0, 0x12}, + Package() { 0x0001ffff, 1, 0, 0x13}, + Package() { 0x0001ffff, 2, 0, 0x10}, + Package() { 0x0001ffff, 3, 0, 0x11}, + + Package() { 0x0002ffff, 0, 0, 0x11}, + Package() { 0x0002ffff, 1, 0, 0x12}, + Package() { 0x0002ffff, 2, 0, 0x13}, + Package() { 0x0002ffff, 3, 0, 0x10}, + }) +} Else { + Return (Package() { + Package() { 0x0001ffff, 0, \_SB.PCI0.LPCB.LNKB, 0}, + Package() { 0x0001ffff, 1, \_SB.PCI0.LPCB.LNKC, 0}, + Package() { 0x0001ffff, 2, \_SB.PCI0.LPCB.LNKD, 0}, + Package() { 0x0001ffff, 3, \_SB.PCI0.LPCB.LNKA, 0}, + + Package() { 0x0002ffff, 0, \_SB.PCI0.LPCB.LNKC, 0}, + Package() { 0x0002ffff, 1, \_SB.PCI0.LPCB.LNKD, 0}, + Package() { 0x0002ffff, 2, \_SB.PCI0.LPCB.LNKA, 0}, + Package() { 0x0002ffff, 3, \_SB.PCI0.LPCB.LNKB, 0}, + }) +} diff --git a/src/mainboard/foxconn/g41s-k/variants/g41m/data.vbt b/src/mainboard/foxconn/g41s-k/variants/g41m/data.vbt Binary files differnew file mode 100644 index 0000000000..fd02a149f9 --- /dev/null +++ b/src/mainboard/foxconn/g41s-k/variants/g41m/data.vbt diff --git a/src/mainboard/foxconn/g41s-k/variants/g41m/gma-mainboard.ads b/src/mainboard/foxconn/g41s-k/variants/g41m/gma-mainboard.ads new file mode 100644 index 0000000000..0bf1021b0a --- /dev/null +++ b/src/mainboard/foxconn/g41s-k/variants/g41m/gma-mainboard.ads @@ -0,0 +1,29 @@ +-- +-- This file is part of the coreboot project. +-- +-- 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. +-- + +with HW.GFX.GMA; +with HW.GFX.GMA.Display_Probing; + +use HW.GFX.GMA; +use HW.GFX.GMA.Display_Probing; + +private package GMA.Mainboard is + + ports : constant Port_List := + (Analog, + HDMI1, + HDMI2, + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/foxconn/g41s-k/variants/g41m/overridetree.cb b/src/mainboard/foxconn/g41s-k/variants/g41m/overridetree.cb new file mode 100644 index 0000000000..45ae89730e --- /dev/null +++ b/src/mainboard/foxconn/g41s-k/variants/g41m/overridetree.cb @@ -0,0 +1,17 @@ +chip northbridge/intel/x4x # Northbridge + device domain 0 on # PCI domain + subsystemid 0x105b 0x0dc0 inherit + chip southbridge/intel/i82801gx # Southbridge + device pci 1f.0 on # ISA bridge + device pnp 2e.0 on # Floppy + io 0x60 = 0x3f0 + irq 0x70 = 6 + drq 0x74 = 2 + end + device pnp 2e.2 off end # COM2 (IR) + device pnp 2e.a off end # CIR + end + device pci 1f.1 on end # PATA/IDE + end + end +end diff --git a/src/mainboard/foxconn/g41s-k/acpi/ich7_pci_irqs.asl b/src/mainboard/foxconn/g41s-k/variants/g41s-k/acpi/ich7_pci_irqs.asl index 9d10d81d69..9d10d81d69 100644 --- a/src/mainboard/foxconn/g41s-k/acpi/ich7_pci_irqs.asl +++ b/src/mainboard/foxconn/g41s-k/variants/g41s-k/acpi/ich7_pci_irqs.asl diff --git a/src/mainboard/foxconn/g41s-k/data.vbt b/src/mainboard/foxconn/g41s-k/variants/g41s-k/data.vbt Binary files differindex 103c0cb833..103c0cb833 100644 --- a/src/mainboard/foxconn/g41s-k/data.vbt +++ b/src/mainboard/foxconn/g41s-k/variants/g41s-k/data.vbt diff --git a/src/mainboard/foxconn/g41s-k/gma-mainboard.ads b/src/mainboard/foxconn/g41s-k/variants/g41s-k/gma-mainboard.ads index bd14b285a9..bd14b285a9 100644 --- a/src/mainboard/foxconn/g41s-k/gma-mainboard.ads +++ b/src/mainboard/foxconn/g41s-k/variants/g41s-k/gma-mainboard.ads diff --git a/src/mainboard/foxconn/g41s-k/variants/g41s-k/overridetree.cb b/src/mainboard/foxconn/g41s-k/variants/g41s-k/overridetree.cb new file mode 100644 index 0000000000..156a98165c --- /dev/null +++ b/src/mainboard/foxconn/g41s-k/variants/g41s-k/overridetree.cb @@ -0,0 +1,5 @@ +chip northbridge/intel/x4x # Northbridge + device domain 0 on # PCI domain + subsystemid 0x105b 0x0dda inherit + end +end |