From 1109246cd1462dee38804a5a7092e6bf69bf14b5 Mon Sep 17 00:00:00 2001 From: Bill XIE Date: Tue, 1 Jun 2021 00:21:39 +0800 Subject: [PATCH] mb/asus/p8x7x-series: Add P8H77-V as a variant of P8X7X series Mainboard information can be found in the included documentation. Signed-off-by: Bill XIE Change-Id: Ic811e24bd72da84e5ca8f5b09f2eb65872153b72 Reviewed-on: https://review.coreboot.org/c/coreboot/+/55111 Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- Documentation/mainboard/asus/p8h77-v.jpg | Bin 0 -> 33978 bytes Documentation/mainboard/asus/p8h77-v.md | 81 +++++++ Documentation/mainboard/index.md | 1 + src/mainboard/asus/p8x7x-series/Kconfig | 2 + src/mainboard/asus/p8x7x-series/Kconfig.name | 7 + .../variants/p8h77-v/board_info.txt | 7 + .../variants/p8h77-v/cmos.default | 6 + .../p8x7x-series/variants/p8h77-v/cmos.layout | 86 ++++++++ .../p8x7x-series/variants/p8h77-v/data.vbt | Bin 0 -> 3902 bytes .../variants/p8h77-v/early_init.c | 60 +++++ .../variants/p8h77-v/gma-mainboard.ads | 19 ++ .../asus/p8x7x-series/variants/p8h77-v/gpio.c | 208 ++++++++++++++++++ .../p8x7x-series/variants/p8h77-v/hda_verb.c | 34 +++ .../variants/p8h77-v/overridetree.cb | 65 ++++++ 14 files changed, 576 insertions(+) create mode 100644 Documentation/mainboard/asus/p8h77-v.jpg create mode 100644 Documentation/mainboard/asus/p8h77-v.md create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/board_info.txt create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/cmos.default create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/cmos.layout create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/data.vbt create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/early_init.c create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/gma-mainboard.ads create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/gpio.c create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/hda_verb.c create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8h77-v/overridetree.cb diff --git a/Documentation/mainboard/asus/p8h77-v.jpg b/Documentation/mainboard/asus/p8h77-v.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44f3e145606e0877d6cdbf868abc45756962739f GIT binary patch literal 33978 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 +#include +#include +#include +#include +#include + +#define GLOBAL_DEV PNP_DEV(0x2e, 0) +#define SERIAL_DEV PNP_DEV(0x2e, NCT6779D_SP1) +#define ACPI_DEV PNP_DEV(0x2e, NCT6779D_ACPI) + +const struct southbridge_usb_port mainboard_usb_ports[] = { + { 1, 0, 0 }, + { 1, 0, 0 }, + { 1, 0, 1 }, + { 1, 0, 1 }, + { 1, 0, 2 }, + { 1, 0, 2 }, + { 1, 0, 3 }, + { 1, 0, 3 }, + { 1, 0, 4 }, + { 1, 0, 4 }, + { 1, 0, 6 }, + { 1, 0, 5 }, + { 1, 0, 5 }, + { 1, 0, 6 }, +}; + +void bootblock_mainboard_early_init(void) +{ + nuvoton_pnp_enter_conf_state(GLOBAL_DEV); + + /* Select SIO pin states */ + pnp_write_config(GLOBAL_DEV, 0x1a, 0x02); + pnp_write_config(GLOBAL_DEV, 0x1b, 0x70); + pnp_write_config(GLOBAL_DEV, 0x1c, 0x10); + pnp_write_config(GLOBAL_DEV, 0x1d, 0x0e); + pnp_write_config(GLOBAL_DEV, 0x22, 0xd7); + pnp_write_config(GLOBAL_DEV, 0x2a, 0x48); + pnp_write_config(GLOBAL_DEV, 0x2c, 0x00); + + /* Power RAM in S3 */ + pnp_set_logical_device(ACPI_DEV); + pnp_write_config(ACPI_DEV, 0xe4, 0x10); + + nuvoton_pnp_exit_conf_state(GLOBAL_DEV); + + /* Enable UART */ + nuvoton_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE); +} + +void mainboard_get_spd(spd_raw_data *spd, bool id_only) +{ + read_spd(&spd[0], 0x50, id_only); + read_spd(&spd[1], 0x51, id_only); + read_spd(&spd[2], 0x52, id_only); + read_spd(&spd[3], 0x53, id_only); +} diff --git a/src/mainboard/asus/p8x7x-series/variants/p8h77-v/gma-mainboard.ads b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/gma-mainboard.ads new file mode 100644 index 0000000000..e6b0407446 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/gma-mainboard.ads @@ -0,0 +1,19 @@ +-- SPDX-License-Identifier: GPL-2.0-or-later + +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 := + (DP1, + HDMI1, + HDMI2, + HDMI3, + Analog, + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/asus/p8x7x-series/variants/p8h77-v/gpio.c b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/gpio.c new file mode 100644 index 0000000000..e1809586ea --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/gpio.c @@ -0,0 +1,208 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +static const struct pch_gpio_set1 pch_gpio_set1_mode = { + .gpio0 = GPIO_MODE_GPIO, + .gpio1 = GPIO_MODE_GPIO, + .gpio2 = GPIO_MODE_GPIO, + .gpio3 = GPIO_MODE_GPIO, + .gpio4 = GPIO_MODE_GPIO, + .gpio5 = GPIO_MODE_GPIO, + .gpio6 = GPIO_MODE_GPIO, + .gpio7 = GPIO_MODE_GPIO, + .gpio8 = GPIO_MODE_GPIO, + .gpio9 = GPIO_MODE_NATIVE, + .gpio10 = GPIO_MODE_NATIVE, + .gpio11 = GPIO_MODE_GPIO, + .gpio12 = GPIO_MODE_GPIO, + .gpio13 = GPIO_MODE_GPIO, + .gpio14 = GPIO_MODE_GPIO, + .gpio15 = GPIO_MODE_GPIO, + .gpio16 = GPIO_MODE_GPIO, + .gpio17 = GPIO_MODE_GPIO, + .gpio18 = GPIO_MODE_NATIVE, + .gpio19 = GPIO_MODE_GPIO, + .gpio20 = GPIO_MODE_GPIO, + .gpio21 = GPIO_MODE_GPIO, + .gpio22 = GPIO_MODE_GPIO, + .gpio23 = GPIO_MODE_GPIO, + .gpio24 = GPIO_MODE_GPIO, + .gpio25 = GPIO_MODE_NATIVE, + .gpio26 = GPIO_MODE_NATIVE, + .gpio27 = GPIO_MODE_GPIO, + .gpio28 = GPIO_MODE_GPIO, + .gpio29 = GPIO_MODE_GPIO, + .gpio30 = GPIO_MODE_NATIVE, + .gpio31 = GPIO_MODE_GPIO, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_direction = { + .gpio0 = GPIO_DIR_INPUT, + .gpio1 = GPIO_DIR_INPUT, + .gpio2 = GPIO_DIR_INPUT, + .gpio3 = GPIO_DIR_INPUT, + .gpio4 = GPIO_DIR_INPUT, + .gpio5 = GPIO_DIR_INPUT, + .gpio6 = GPIO_DIR_INPUT, + .gpio7 = GPIO_DIR_INPUT, + .gpio8 = GPIO_DIR_OUTPUT, + .gpio11 = GPIO_DIR_INPUT, + .gpio12 = GPIO_DIR_INPUT, + .gpio13 = GPIO_DIR_INPUT, + .gpio14 = GPIO_DIR_INPUT, + .gpio15 = GPIO_DIR_INPUT, + .gpio16 = GPIO_DIR_INPUT, + .gpio17 = GPIO_DIR_INPUT, + .gpio19 = GPIO_DIR_INPUT, + .gpio20 = GPIO_DIR_INPUT, + .gpio21 = GPIO_DIR_INPUT, + .gpio22 = GPIO_DIR_INPUT, + .gpio23 = GPIO_DIR_INPUT, + .gpio24 = GPIO_DIR_INPUT, + .gpio27 = GPIO_DIR_INPUT, + .gpio28 = GPIO_DIR_OUTPUT, + .gpio29 = GPIO_DIR_INPUT, + .gpio31 = GPIO_DIR_INPUT, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_level = { + .gpio8 = GPIO_LEVEL_HIGH, + .gpio28 = GPIO_LEVEL_LOW, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_reset = { +}; + +static const struct pch_gpio_set1 pch_gpio_set1_invert = { + .gpio13 = GPIO_INVERT, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_blink = { +}; + +static const struct pch_gpio_set2 pch_gpio_set2_mode = { + .gpio32 = GPIO_MODE_GPIO, + .gpio33 = GPIO_MODE_GPIO, + .gpio34 = GPIO_MODE_GPIO, + .gpio35 = GPIO_MODE_GPIO, + .gpio36 = GPIO_MODE_GPIO, + .gpio37 = GPIO_MODE_GPIO, + .gpio38 = GPIO_MODE_GPIO, + .gpio39 = GPIO_MODE_GPIO, + .gpio40 = GPIO_MODE_NATIVE, + .gpio41 = GPIO_MODE_NATIVE, + .gpio42 = GPIO_MODE_NATIVE, + .gpio43 = GPIO_MODE_NATIVE, + .gpio44 = GPIO_MODE_GPIO, + .gpio45 = GPIO_MODE_GPIO, + .gpio46 = GPIO_MODE_GPIO, + .gpio47 = GPIO_MODE_NATIVE, + .gpio48 = GPIO_MODE_GPIO, + .gpio49 = GPIO_MODE_GPIO, + .gpio50 = GPIO_MODE_GPIO, + .gpio51 = GPIO_MODE_GPIO, + .gpio52 = GPIO_MODE_GPIO, + .gpio53 = GPIO_MODE_GPIO, + .gpio54 = GPIO_MODE_GPIO, + .gpio55 = GPIO_MODE_GPIO, + .gpio56 = GPIO_MODE_NATIVE, + .gpio57 = GPIO_MODE_GPIO, + .gpio58 = GPIO_MODE_GPIO, + .gpio59 = GPIO_MODE_NATIVE, + .gpio60 = GPIO_MODE_GPIO, + .gpio61 = GPIO_MODE_GPIO, + .gpio62 = GPIO_MODE_GPIO, + .gpio63 = GPIO_MODE_GPIO, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_direction = { + .gpio32 = GPIO_DIR_INPUT, + .gpio33 = GPIO_DIR_INPUT, + .gpio34 = GPIO_DIR_INPUT, + .gpio35 = GPIO_DIR_INPUT, + .gpio36 = GPIO_DIR_INPUT, + .gpio37 = GPIO_DIR_INPUT, + .gpio38 = GPIO_DIR_INPUT, + .gpio39 = GPIO_DIR_INPUT, + .gpio44 = GPIO_DIR_INPUT, + .gpio45 = GPIO_DIR_INPUT, + .gpio46 = GPIO_DIR_INPUT, + .gpio48 = GPIO_DIR_INPUT, + .gpio49 = GPIO_DIR_INPUT, + .gpio50 = GPIO_DIR_INPUT, + .gpio51 = GPIO_DIR_INPUT, + .gpio52 = GPIO_DIR_INPUT, + .gpio53 = GPIO_DIR_INPUT, + .gpio54 = GPIO_DIR_INPUT, + .gpio55 = GPIO_DIR_INPUT, + .gpio57 = GPIO_DIR_INPUT, + .gpio58 = GPIO_DIR_INPUT, + .gpio60 = GPIO_DIR_INPUT, + .gpio61 = GPIO_DIR_INPUT, + .gpio62 = GPIO_DIR_INPUT, + .gpio63 = GPIO_DIR_INPUT, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_level = { +}; + +static const struct pch_gpio_set2 pch_gpio_set2_reset = { +}; + +static const struct pch_gpio_set3 pch_gpio_set3_mode = { + .gpio64 = GPIO_MODE_GPIO, + .gpio65 = GPIO_MODE_GPIO, + .gpio66 = GPIO_MODE_GPIO, + .gpio67 = GPIO_MODE_NATIVE, + .gpio68 = GPIO_MODE_GPIO, + .gpio69 = GPIO_MODE_GPIO, + .gpio70 = GPIO_MODE_GPIO, + .gpio71 = GPIO_MODE_GPIO, + .gpio72 = GPIO_MODE_GPIO, + .gpio73 = GPIO_MODE_NATIVE, + .gpio74 = GPIO_MODE_GPIO, + .gpio75 = GPIO_MODE_GPIO, +}; + +static const struct pch_gpio_set3 pch_gpio_set3_direction = { + .gpio64 = GPIO_DIR_INPUT, + .gpio65 = GPIO_DIR_INPUT, + .gpio66 = GPIO_DIR_INPUT, + .gpio68 = GPIO_DIR_INPUT, + .gpio69 = GPIO_DIR_INPUT, + .gpio70 = GPIO_DIR_INPUT, + .gpio71 = GPIO_DIR_INPUT, + .gpio72 = GPIO_DIR_INPUT, + .gpio74 = GPIO_DIR_INPUT, + .gpio75 = GPIO_DIR_INPUT, +}; + +static const struct pch_gpio_set3 pch_gpio_set3_level = { +}; + +static const struct pch_gpio_set3 pch_gpio_set3_reset = { +}; + +const struct pch_gpio_map mainboard_gpio_map = { + .set1 = { + .mode = &pch_gpio_set1_mode, + .direction = &pch_gpio_set1_direction, + .level = &pch_gpio_set1_level, + .blink = &pch_gpio_set1_blink, + .invert = &pch_gpio_set1_invert, + .reset = &pch_gpio_set1_reset, + }, + .set2 = { + .mode = &pch_gpio_set2_mode, + .direction = &pch_gpio_set2_direction, + .level = &pch_gpio_set2_level, + .reset = &pch_gpio_set2_reset, + }, + .set3 = { + .mode = &pch_gpio_set3_mode, + .direction = &pch_gpio_set3_direction, + .level = &pch_gpio_set3_level, + .reset = &pch_gpio_set3_reset, + }, +}; diff --git a/src/mainboard/asus/p8x7x-series/variants/p8h77-v/hda_verb.c b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/hda_verb.c new file mode 100644 index 0000000000..f246af7018 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/hda_verb.c @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +const u32 cim_verb_data[] = { + 0x11060397, /* Codec Vendor / Device ID: VIA VT1708S */ + 0x1043836c, /* Subsystem ID */ + 12, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(0, 0x1043836c), + AZALIA_PIN_CFG(0, 0x19, 0x01011012), + AZALIA_PIN_CFG(0, 0x1a, 0x01a19036), + AZALIA_PIN_CFG(0, 0x1b, 0x0181303e), + AZALIA_PIN_CFG(0, 0x1c, 0x01014010), + AZALIA_PIN_CFG(0, 0x1d, 0x0221401f), + AZALIA_PIN_CFG(0, 0x1e, 0x02a19038), + AZALIA_PIN_CFG(0, 0x1f, 0x503701f0), + AZALIA_PIN_CFG(0, 0x20, 0x185600f0), + AZALIA_PIN_CFG(0, 0x21, 0x074521f0), + AZALIA_PIN_CFG(0, 0x22, 0x01016011), + AZALIA_PIN_CFG(0, 0x23, 0x01012014), + + 0x80862806, /* Codec Vendor / Device ID: Intel HDMI */ + 0x80860101, /* Subsystem ID */ + 4, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(3, 0x80860101), + AZALIA_PIN_CFG(3, 0x05, 0x18560010), + AZALIA_PIN_CFG(3, 0x06, 0x58560020), + AZALIA_PIN_CFG(3, 0x07, 0x18560030), + +}; + +const u32 pc_beep_verbs[0] = {}; + +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/asus/p8x7x-series/variants/p8h77-v/overridetree.cb b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/overridetree.cb new file mode 100644 index 0000000000..f20b49cb5d --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8h77-v/overridetree.cb @@ -0,0 +1,65 @@ +## SPDX-License-Identifier: GPL-2.0-only + +chip northbridge/intel/sandybridge + device domain 0 on + subsystemid 0x1043 0x84ca inherit + chip southbridge/intel/bd82x6x + register "gen1_dec" = "0x000c0291" + device pci 1c.0 on end # RP #1: PCIEX16_2 (electrical x4) + device pci 1c.1 off end # RP #2: + device pci 1c.2 off end # RP #3: + device pci 1c.3 off end # RP #4: + device pci 1c.4 on end # RP #5: AR8161 GbE NIC + device pci 1c.5 on end # RP #6: ASM1083 PCI Bridge + device pci 1c.6 on end # RP #7: PCIEX1_1 + device pci 1c.7 on end # RP #8: PCIEX1_2 + + device pci 1f.0 on # LPC bridge + chip superio/nuvoton/nct6779d + device pnp 2e.1 off end # Parallel + device pnp 2e.2 on # UART A + io 0x60 = 0x3f8 + irq 0x70 = 4 + end + device pnp 2e.3 off end # UART B, IR + device pnp 2e.5 on # Keyboard + io 0x60 = 0x0060 + io 0x62 = 0x0064 + irq 0x70 = 1 + irq 0x72 = 12 + + # KBC 12Mhz/A20 speed/sw KBRST + drq 0xf0 = 0x82 + end + device pnp 2e.6 off end # CIR + device pnp 2e.7 off end # GPIO6-8 + device pnp 2e.8 off end # WDT1, GPIO0, GPIO1 + device pnp 2e.108 on # GPIO0 + drq 0xe0 = 0x7f + drq 0xe1 = 0x80 + drq 0xf0 = 0xfe + end + device pnp 2e.9 off end # GPIO8 + device pnp 2e.109 on end # GPIO1 + device pnp 2e.209 off end # GPIO2 + device pnp 2e.309 off end # GPIO3 + device pnp 2e.409 on end # GPIO4 + device pnp 2e.509 on end # GPIO5 + device pnp 2e.609 on end # GPIO6 + device pnp 2e.709 off end # GPIO7 + device pnp 2e.a on end # ACPI + device pnp 2e.b on # H/W Monitor, FP LED + io 0x60 = 0x0290 + io 0x62 = 0 + irq 0x70 = 0 + end + device pnp 2e.d off end # WDT1 + device pnp 2e.e off end # CIR Wake-up + device pnp 2e.f off end # Push-pull/Open-drain + device pnp 2e.14 off end # Port 80 UART + device pnp 2e.16 off end # Deep Sleep + end + end + end + end +end