From 2bf6a301d39fcb49edf6eb5a18e6b384ed95205a Mon Sep 17 00:00:00 2001 From: Vlado Cibic Date: Sun, 9 Jun 2019 06:53:50 +0000 Subject: [PATCH] mainboard: Add support for ASUS P8Z77-M PRO desktop mainboard Add support for ASUS P8Z77-M PRO desktop mainboard Working: - Tianocore and SeaBIOS boot - PS/2 keyboard and mouse - Audio - S3 Suspend, shutdown and reboot - USB2 / USB3 - Gigabit Ethernet - SATA3, SATA2 and eSATA - NVME - CPU Temp sensors - TPM - Native raminit and also MRC - PCIe GPU in all PCIe slots (16x/8x/4x) (linux) - Integrated graphics with both libgfxinit and Intel Video OpROM (all connectors VGA/DVI-D/HDMI) Signed-off-by: Vlado Cibic Change-Id: I47d24ac8b236f929c3160f9a769b971d83710f9d Reviewed-on: https://review.coreboot.org/c/coreboot/+/33328 Reviewed-by: Angel Pons Reviewed-by: Patrick Rudolph Tested-by: build bot (Jenkins) --- Documentation/mainboard/asus/p8z77-m_pro.jpg | Bin 0 -> 97747 bytes Documentation/mainboard/asus/p8z77-m_pro.md | 168 +++++++++++++++ Documentation/mainboard/index.md | 1 + MAINTAINERS | 5 + src/mainboard/asus/p8z77-m_pro/Kconfig | 48 +++++ src/mainboard/asus/p8z77-m_pro/Kconfig.name | 17 ++ src/mainboard/asus/p8z77-m_pro/Makefile.inc | 19 ++ src/mainboard/asus/p8z77-m_pro/acpi/ec.asl | 1 + .../asus/p8z77-m_pro/acpi/platform.asl | 24 +++ .../asus/p8z77-m_pro/acpi/superio.asl | 17 ++ src/mainboard/asus/p8z77-m_pro/acpi_tables.c | 35 ++++ src/mainboard/asus/p8z77-m_pro/board_info.txt | 7 + src/mainboard/asus/p8z77-m_pro/cmos.default | 24 +++ src/mainboard/asus/p8z77-m_pro/cmos.layout | 185 ++++++++++++++++ src/mainboard/asus/p8z77-m_pro/data.vbt | Bin 0 -> 3902 bytes src/mainboard/asus/p8z77-m_pro/devicetree.cb | 109 ++++++++++ src/mainboard/asus/p8z77-m_pro/dsdt.asl | 43 ++++ .../asus/p8z77-m_pro/gma-mainboard.ads | 31 +++ src/mainboard/asus/p8z77-m_pro/gpio.c | 198 ++++++++++++++++++ src/mainboard/asus/p8z77-m_pro/hda_verb.c | 57 +++++ src/mainboard/asus/p8z77-m_pro/mainboard.c | 30 +++ src/mainboard/asus/p8z77-m_pro/romstage.c | 193 +++++++++++++++++ 22 files changed, 1212 insertions(+) create mode 100644 Documentation/mainboard/asus/p8z77-m_pro.jpg create mode 100644 Documentation/mainboard/asus/p8z77-m_pro.md create mode 100644 src/mainboard/asus/p8z77-m_pro/Kconfig create mode 100644 src/mainboard/asus/p8z77-m_pro/Kconfig.name create mode 100644 src/mainboard/asus/p8z77-m_pro/Makefile.inc create mode 100644 src/mainboard/asus/p8z77-m_pro/acpi/ec.asl create mode 100644 src/mainboard/asus/p8z77-m_pro/acpi/platform.asl create mode 100644 src/mainboard/asus/p8z77-m_pro/acpi/superio.asl create mode 100644 src/mainboard/asus/p8z77-m_pro/acpi_tables.c create mode 100644 src/mainboard/asus/p8z77-m_pro/board_info.txt create mode 100644 src/mainboard/asus/p8z77-m_pro/cmos.default create mode 100644 src/mainboard/asus/p8z77-m_pro/cmos.layout create mode 100644 src/mainboard/asus/p8z77-m_pro/data.vbt create mode 100644 src/mainboard/asus/p8z77-m_pro/devicetree.cb create mode 100644 src/mainboard/asus/p8z77-m_pro/dsdt.asl create mode 100644 src/mainboard/asus/p8z77-m_pro/gma-mainboard.ads create mode 100644 src/mainboard/asus/p8z77-m_pro/gpio.c create mode 100644 src/mainboard/asus/p8z77-m_pro/hda_verb.c create mode 100644 src/mainboard/asus/p8z77-m_pro/mainboard.c create mode 100644 src/mainboard/asus/p8z77-m_pro/romstage.c diff --git a/Documentation/mainboard/asus/p8z77-m_pro.jpg b/Documentation/mainboard/asus/p8z77-m_pro.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc6ef2894b9bddef175b0136036e8c401f41efe9 GIT binary patch literal 97747 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 literal 0 HcmV?d00001 diff --git a/Documentation/mainboard/asus/p8z77-m_pro.md b/Documentation/mainboard/asus/p8z77-m_pro.md new file mode 100644 index 0000000000..7c841499fc --- /dev/null +++ b/Documentation/mainboard/asus/p8z77-m_pro.md @@ -0,0 +1,168 @@ +# ASUS P8Z77-M Pro + +This page describes how to run coreboot on the [ASUS P8Z77-M Pro] + +## Flashing coreboot + +```eval_rst ++---------------------+----------------+ +| Type | Value | ++=====================+================+ +| Socketed flash | yes | ++---------------------+----------------+ +| Model | W25Q64FVA1Q | ++---------------------+----------------+ +| Size | 8 MiB | ++---------------------+----------------+ +| Package | DIP-8 | ++---------------------+----------------+ +| Write protection | yes | ++---------------------+----------------+ +| Dual BIOS feature | no | ++---------------------+----------------+ +| Internal flashing | yes | ++---------------------+----------------+ +``` + +The flash IC is located right next to one of the SATA ports: +![](p8z77-m_pro.jpg) + +### Internal programming + +The main SPI flash cannot be written because Asus disables BIOSWE and +enables BLE/SMM_BWP flags in BIOS_CNTL for their latest bioses. +An external programmer is required. You must flash standalone, +flashing in-circuit doesn't work. The flash chip is socketed, so it's +easy to remove and reflash. + +## Working + +- PS/2 keyboard with SeaBIOS & Tianocore (in Mint 18.3/19.1) + +- Rear/front headphones connector audio & mic + +- S3 Suspend to RAM (tested with OS installed in a HDD/SSD and also with a + Mint 18.3/19.1 LiveUSB pendrive connected to USB3/USB2), but please + see [Known issues] + +- USB2 on rear (tested mouse/keyboard plugged there. Also, booting with + a Mint 18./19.1 LiveUSB works ok) + +- USB3 (Z77's and Asmedia's works, but please see [Known issues]) + +- Gigabit Ethernet (RTL8111F) + +- SATA3, SATA2 and eSATA (tested on all ports, hot-swap and TCG OPAL working) + (Blue SATA2) (Blue SATA2) (White SATA3) (Red eSATA SATA3 rear) + port 3 port 5 port 1 port 8 + port 4 port 6 port 2 port 7 + +- NVME SSD boot on PCIe-x16/x8/4x slot using Tianocore + (tested with M.2-to-PCIe adapter and a M.2 Samsung EVO 970 SSD) + +- CPU Temp sensors (tested PSensor on linux + HWINFO64 on Win10) + +- TPM on TPM-header (tested tpm-tools with Asus TPM 1.2 Infineon SLB9635TT12) + +- Native raminit and also MRC.bin(systemagent-r6.bin) memory initialization + (please see [Native raminit compatibility] and [MRC memory compatibility]) + +- Integrated graphics with both libgfxinit and the Intel Video BIOS OpROM + (VGA/DVI-D/HDMI tested and working) + +- 1x PCIe GPU in PCIe-16x/8x/4x slots (tested using Zotac GeForce GTX + 750Ti and FirePro W5100 under Mint 18.3/19.1) + +## Known issues + +- The rear's USB3s on bottom (closest to the PCB) have problems booting or + being used before the OS loads. For better compatibility, please use + the Z77's ones above the Ethernet connector or the Asmedia's top one + +- After S3 suspend, some USB3 connectors on rear seem not to work + +- At the moment, the power led does not blink when entering S3 state + +- Currently, we have not setup the SuperIO's Hardware Monitor (HWM), + so only the CPU sensors are reported + +- If you use the MRC.bin, the NVRAM variable gfx_uma_size may be ignored + as IGP's UMA could be reconfigured by the blob + +- Using TianoCore + a PCIe GPU under Windows crashes with an + ACPI_BIOS_ERROR fatal code, not sure why. Using just the IGP + works perfectly + +- Under Windows 10, if you experiment problems with PS/2 devices, change + HKLM\SYSTEM\CurrentControlSet\Services\i8042prt->Start from '3' to '1' + +## Untested + +- EHCI debugging +- S/PDIF audio +- Wake-on-LAN +- Serial port + +## Not working + +- PS/2 keyboard in Win10 using Tianocore (please see [Known issues]) +- PS/2 mouse using Tianocore +- PCIe graphics card on Windows and Tianocore (throws critical ACPI_BIOS_ERROR) + +## Native raminit compatibility + +- GSkill F3-2133C10D-16GAB(XMP,1.60v) 2x8GB kit works at 1333Mhz instead + of XMP 2133Mhz + +- Team Xtreem TXD38G2133HC9NDC01(XMP,1.50v) 2x4GB kit works at 1600Mhz + instead of XMP 2133Mhz + +- Kingston KVR1066D3N7K2/4G(JEDEC,1.50v) 2x4GB kit works at 1066Mhz + but the board only detects half its RAM, because those DIMMs have + Double Sided(DS) chips and seems only Single Sided(SS) ones are + fully detected + +- GSkill F3-10666CL9T2-24GBRL(JEDEC,1.50v) 6x4GB kit (4 DIMMs used) + works perfectly at full speed (1333Mhz) + +## MRC memory compatibility + +- GSkill F3-2133C10D-16GAB(XMP,1.60v) 2x8GB kit works at 1333Mhz + instead of XMP 2133Mhz + +- Team Xtreem TXD38G2133HC9NDC01(XMP,1.50v) 2x4GB kit works at + 1600Mhz instead of XMP 2133Mhz + +- Kingston KVR1066D3N7K2/4G(JEDEC,1.50v) 2x4GB kit works at 1066Mhz + but the board only detects half its RAM, as those DIMMs have + Double Sided(DS) chips and seems only Single Sided(SS) ones are + fully detected + +- GSkill F3-10666CL9T2-24GBRL(JEDEC,1.50v) 6x4GB kit (4 DIMMs used) + works perfectly at full speed (1333Mhz) + +## Technology + +```eval_rst ++------------------+--------------------------------------------------+ +| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` | ++------------------+--------------------------------------------------+ +| Southbridge | bd82x6x | ++------------------+--------------------------------------------------+ +| CPU | model_206ax | ++------------------+--------------------------------------------------+ +| Super I/O | Nuvoton NCT6779D | ++------------------+--------------------------------------------------+ +| EC | None | ++------------------+--------------------------------------------------+ +| Coprocessor | Intel Management Engine | ++------------------+--------------------------------------------------+ +``` + +## Extra resources + +- [Flash chip datasheet][W25Q64FVA1Q] + +[ASUS P8Z88-M Pro]: https://www.asus.com/Motherboards/P8Z77M_PRO/ +[W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf +[flashrom]: https://flashrom.org/Flashrom diff --git a/Documentation/mainboard/index.md b/Documentation/mainboard/index.md index 77e84efb51..14c62edeb9 100644 --- a/Documentation/mainboard/index.md +++ b/Documentation/mainboard/index.md @@ -7,6 +7,7 @@ This section contains documentation about coreboot on specific mainboards. - [F2A85-M](asus/f2a85-m.md) - [P8H61-M LX](asus/p8h61-m_lx.md) - [P8H61-M Pro](asus/p8h61-m_pro.md) +- [P8Z77-M Pro](asus/p8z77-m_pro.md) ## ASRock diff --git a/MAINTAINERS b/MAINTAINERS index e7780a8d72..83ba5232b3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -364,6 +364,11 @@ M: Angel Pons S: Maintained F: src/mainboard/asus/p8h61-m_pro/ +ASUS P8Z77-M PRO MAINBOARD +M: Vlado Cibic +S: Maintained +F: src/mainboard/asus/p8z77-m_pro/ + PC ENGINES ALL MAINBOARDS M: Piotr Król M: Michał Żygowski diff --git a/src/mainboard/asus/p8z77-m_pro/Kconfig b/src/mainboard/asus/p8z77-m_pro/Kconfig new file mode 100644 index 0000000000..8d29a9bc21 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/Kconfig @@ -0,0 +1,48 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2019 Vlado Cibic +## +## 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. +## + +if BOARD_ASUS_P8Z77_M_PRO + +config BOARD_SPECIFIC_OPTIONS + def_bool y + select BOARD_ROMSIZE_KB_8192 + select HAVE_ACPI_RESUME + select HAVE_ACPI_TABLES + select INTEL_INT15 + select NORTHBRIDGE_INTEL_SANDYBRIDGE + select SERIRQ_CONTINUOUS_MODE + select SOUTHBRIDGE_INTEL_C216 + select MAINBOARD_HAS_LPC_TPM + select MAINBOARD_HAS_TPM1 + select HAVE_OPTION_TABLE + select HAVE_CMOS_DEFAULT + select MAINBOARD_HAS_LIBGFXINIT + select INTEL_GMA_HAVE_VBT + select SUPERIO_NUVOTON_NCT6779D + select DRIVERS_ASMEDIA_ASPM_BLACKLIST # for ASM1061 eSATA + +config MAINBOARD_DIR + string + default "asus/p8z77-m_pro" + +config MAINBOARD_PART_NUMBER + string + default "P8Z77-M PRO" + +config MAX_CPUS + int + default 8 + +endif # BOARD_ASUS_P8Z77_M_PRO diff --git a/src/mainboard/asus/p8z77-m_pro/Kconfig.name b/src/mainboard/asus/p8z77-m_pro/Kconfig.name new file mode 100644 index 0000000000..c492094508 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/Kconfig.name @@ -0,0 +1,17 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2019 Vlado Cibic +## +## 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. +## + +config BOARD_ASUS_P8Z77_M_PRO + bool "P8Z77-M PRO" diff --git a/src/mainboard/asus/p8z77-m_pro/Makefile.inc b/src/mainboard/asus/p8z77-m_pro/Makefile.inc new file mode 100644 index 0000000000..0cc398a5e7 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/Makefile.inc @@ -0,0 +1,19 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2019 Vlado Cibic +## +## 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. +## + +romstage-y += gpio.c + +ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads diff --git a/src/mainboard/asus/p8z77-m_pro/acpi/ec.asl b/src/mainboard/asus/p8z77-m_pro/acpi/ec.asl new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/acpi/ec.asl @@ -0,0 +1 @@ + diff --git a/src/mainboard/asus/p8z77-m_pro/acpi/platform.asl b/src/mainboard/asus/p8z77-m_pro/acpi/platform.asl new file mode 100644 index 0000000000..3a696211c1 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/acpi/platform.asl @@ -0,0 +1,24 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2019 Vlado Cibic + * + * 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. + */ + +Method(_WAK,1) +{ + Return(Package(){0,0}) +} + +Method(_PTS,1) +{ +} diff --git a/src/mainboard/asus/p8z77-m_pro/acpi/superio.asl b/src/mainboard/asus/p8z77-m_pro/acpi/superio.asl new file mode 100644 index 0000000000..7f1d04c9ba --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/acpi/superio.asl @@ -0,0 +1,17 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2019 Vlado Cibic + * + * 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 diff --git a/src/mainboard/asus/p8z77-m_pro/acpi_tables.c b/src/mainboard/asus/p8z77-m_pro/acpi_tables.c new file mode 100644 index 0000000000..2592c19a9e --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/acpi_tables.c @@ -0,0 +1,35 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2019 Vlado Cibic + * + * 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. + */ + +#include +#include + +void acpi_create_gnvs(global_nvs_t *gnvs) +{ + /* Turn off power for USB ports in S3 by default */ + gnvs->s3u0 = 0; + gnvs->s3u1 = 0; + + /* Turn off power for USB ports in S5 by default */ + gnvs->s5u0 = 0; + gnvs->s5u1 = 0; + + /* critical temp that will shutdown the pc == 95C degrees */ + gnvs->tcrt = 95; + + /* temp to start throttling the cpu == 85C */ + gnvs->tpsv = 85; +} diff --git a/src/mainboard/asus/p8z77-m_pro/board_info.txt b/src/mainboard/asus/p8z77-m_pro/board_info.txt new file mode 100644 index 0000000000..66e6f0d6f9 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/board_info.txt @@ -0,0 +1,7 @@ +Category: desktop +Board URL: https://www.asus.com/Motherboards/P8Z77M_PRO/ +ROM package: DIP-8 +ROM protocol: SPI +ROM socketed: y +Flashrom support: y +Release year: 2013 diff --git a/src/mainboard/asus/p8z77-m_pro/cmos.default b/src/mainboard/asus/p8z77-m_pro/cmos.default new file mode 100644 index 0000000000..725ab9851d --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/cmos.default @@ -0,0 +1,24 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2019 Vlado Cibic +## +## 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. +## + +boot_option=Fallback +debug_level=Debug +gfx_uma_size=224M +nmi=Enable +sata_mode=AHCI +#usb3_xxxx options are only used with MRC blob, ignored else +usb3_mode=Enable +usb3_drv=Enable +usb3_streams=Enable diff --git a/src/mainboard/asus/p8z77-m_pro/cmos.layout b/src/mainboard/asus/p8z77-m_pro/cmos.layout new file mode 100644 index 0000000000..da29d1c10e --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/cmos.layout @@ -0,0 +1,185 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2019 Vlado Cibic +## +## 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. +## + +# ----------------------------------------------------------------- +entries + +# ----------------------------------------------------------------- +# Status Register A +# ----------------------------------------------------------------- +# Status Register B +# ----------------------------------------------------------------- +# Status Register C +#96 4 r 0 status_c_rsvd +#100 1 r 0 uf_flag +#101 1 r 0 af_flag +#102 1 r 0 pf_flag +#103 1 r 0 irqf_flag +# ----------------------------------------------------------------- +# Status Register D +#104 7 r 0 status_d_rsvd +#111 1 r 0 valid_cmos_ram +# ----------------------------------------------------------------- +# Diagnostic Status Register +#112 8 r 0 diag_rsvd1 + +# ----------------------------------------------------------------- +0 120 r 0 reserved_memory +#120 264 r 0 unused + +# ----------------------------------------------------------------- +# RTC_BOOT_BYTE (coreboot hardcoded) +384 1 e 3 boot_option +388 4 h 0 reboot_counter + +# ----------------------------------------------------------------- +# coreboot config options: console +#392 3 r 0 unused +395 4 e 4 debug_level +#399 1 r 0 unused +#400 8 r 0 reserved for century byte + +# ----------------------------------------------------------------- +# coreboot config options: southbridge + +# Non Maskable Interrupt(NMI) support, which is an interrupt that may +# occur on a RAM or unrecoverable error. +408 1 e 1 nmi + +409 2 e 5 power_on_after_fail +411 1 e 6 sata_mode + +# ----------------------------------------------------------------- +# coreboot config options: northbridge + +# gfx_uma_size +# Quantity of shared video memory the IGP can use +# +416 5 e 7 gfx_uma_size + +# ----------------------------------------------------------------- +# coreboot config options: usb3 + +# usb3_mode +# Controls how the motherboard's USB3 ports act at boot time +421 2 e 8 usb3_mode + +# usb3_drv +# Load (or not) pre-OS xHCI USB3 bios driver +# +423 1 e 1 usb3_drv + +# usb3_streams +# Streams can provide more speed (as they can use 64Kb packets), +# but they might cause incompatibilities with some devices. +# +424 1 e 1 usb3_streams + +# ----------------------------------------------------------------- +# Sandy/Ivy Bridge MRC Scrambler Seed values +# note: MUST NOT be covered by checksum! +464 32 r 0 mrc_scrambler_seed +496 32 r 0 mrc_scrambler_seed_s3 +528 16 r 0 mrc_scrambler_seed_chk + +# ----------------------------------------------------------------- +# coreboot config options: check sums +544 16 h 0 check_sum + +# ----------------------------------------------------------------- + +enumerations +#ID value text + +# Generic on/off enum +1 0 Disable +1 1 Enable + +# boot_option +3 0 Fallback +3 1 Normal + +# debug_level +4 0 Emergency +4 1 Alert +4 2 Critical +4 3 Error +4 4 Warning +4 5 Notice +4 6 Info +4 7 Debug +4 8 Spew + +# power_on_after_fail +5 0 Disable +5 1 Enable +5 2 Keep + +# sata_mode +6 0 AHCI +6 1 Compatible + +# gfx_uma_size (Intel IGP Video RAM size) +7 0 32M +7 1 64M +7 2 96M +7 3 128M +7 4 160M +7 5 192M +7 6 224M +7 7 256M +7 8 288M +7 9 320M +7 10 352M +7 11 384M +7 12 416M +7 13 448M +7 14 480M +7 15 512M +7 16 544M +7 17 576M +7 18 608M +7 19 640M +7 20 672M +7 21 704M +7 22 736M +7 23 768M +7 24 800M +7 25 832M +7 26 864M +7 27 896M +7 28 928M +7 29 960M +7 30 992M + +# usb3_mode +# Disable = Use the port always as USB 2.0 for compatibility +# Enable = Use the port always as USB 3.0 for speed +# Auto = Initialize the port as USB 2.0, until the OS loads +# xHCI USB 3.0 driver +# SmartAuto = Same as Auto but, if the OS loads the xHCI USB 3.0 driver +# and the computer is reset, keep the USB 3.0 mode. +# +8 0 Disable +8 1 Enable +8 2 Auto +8 3 SmartAuto + +# ----------------------------------------------------------------- +# +# +checksums + +checksum 392 431 544 diff --git a/src/mainboard/asus/p8z77-m_pro/data.vbt b/src/mainboard/asus/p8z77-m_pro/data.vbt new file mode 100644 index 0000000000000000000000000000000000000000..34679b36a9fa8b9662bbb54e2ee6911d43347e1b GIT binary patch literal 3902 zcmdT{U1%It6h5;v`*&w1*-T=)S<`S+OS?()GrO%z2&>L+HZhxSlTCKJtVQgm-R%#g zX}bNP1#71oY(%%<#kx(F&f+qe_^r7fNu&umM?vaxOP z)cD{g`YEh{hQ_~y8r!j> zG+ioB9V``TCii@dGFq9$5AB&Q(y>E(x0lKTlyRXq4Q=e*u#r+V)EA2Mh1F0P_3*&c z>Oe@9Nn&Vld~-UPie;1IV|09yCX$(0CNs1-o_c|%C&x#U@nm)=AroUOgZpNWmiO%1 zeUJtRJ84)|)gB}aQDez;a9?@0m&T^2=_K3L!F!uX*YX-vsf7od{a1?a_jdkeox#hryX5*-XDb!;4(sDq4SKXoh zTjrSgF4G>BgU|+Qcw?l0AgaX^!y}`q^kg=d-}<6{;?>vY0&u4SxLJkU7TFvc-yS4B9P^)>KVJpy(0mA|bi)qA?DMRvn+8Sq3GQYevuGPE+9ES0EbUpb5 zJV^hTH}Ny*&~c4cHBh!(&N;h^$;GClcE5weS$?>~;>^18AVb~0D3^7Rnqd@g1l|*! zYcXbR0jQm9@B;Utb1VGe?19EN!E4@ei>&{q;rQdUci0Q&?@zYPVwv`Z1^n{`O}&-v$01Fa5%+eB&kGd+BYjA`!BJ&?r&H2+0%r z3Q;PAoF()!QLYg3GocPqX%R`gNE4!x6G=g&uZzkVk$f!Dc~SXEB)^E1NJ^VT)=D%b zDKAN6w?yBPl&VB7NOVC`u1VyEL={d4W@TlkOlD9CQ>b{2)70H|b`gx~)!BkLk!5{$WlU46@1Kq&9YOJpk1-U8zdyAe&{xfv;da z;u>^!zmX3QuT95*?%&_vqvd<J&f{0@Bk5}owC*S1jbRLC5(sR8H2$yK&7Fo{`M&`FihXhb literal 0 HcmV?d00001 diff --git a/src/mainboard/asus/p8z77-m_pro/devicetree.cb b/src/mainboard/asus/p8z77-m_pro/devicetree.cb new file mode 100644 index 0000000000..4f5e5bf9bb --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/devicetree.cb @@ -0,0 +1,109 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2019 Vlado Cibic +## +## 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. +## + +chip northbridge/intel/sandybridge + register "gfx.did" = "{ 0x80000100, 0x80000240, 0x80000410 }" + register "gfx.ndid" = "3" + device cpu_cluster 0x0 on + chip cpu/intel/model_206ax + register "c1_acpower" = "1" + register "c1_battery" = "1" + register "c2_acpower" = "3" + register "c2_battery" = "3" + register "c3_acpower" = "5" + register "c3_battery" = "5" + device lapic 0x0 on end + device lapic 0xacac off end + end + end + device domain 0x0 on + subsystemid 0x1043 0x84ca inherit + device pci 00.0 on end # Host bridge + device pci 01.0 on end # PCIe Bridge for discrete graphics + device pci 02.0 on end # Internal graphics VGA controller + chip southbridge/intel/bd82x6x # Intel Series 6 Cougar Point PCH + register "c2_latency" = "0x0065" + register "gen1_dec" = "0x000c0291" + register "gen4_dec" = "0x0000ff29" + register "pcie_port_coalesce" = "1" + register "sata_interface_speed_support" = "0x3" # 0x3=SATAIII + register "sata_port_map" = "0x3f" # Enable the six SATA ports + register "spi_lvscc" = "0x2005" + register "spi_uvscc" = "0x2005" + register "superspeed_capable_ports" = "0x0000000f" + register "xhci_overcurrent_mapping" = "0x00000c03" + register "xhci_switchable_ports" = "0x0000000f" # the 4 ports + device pci 14.0 on end # USB 3.0 Controller + device pci 16.0 on end # Management Engine Interface 1 + device pci 16.1 off end # Management Engine Interface 2 + device pci 16.2 off end # Management Engine IDE-R + device pci 16.3 off end # Management Engine KT + device pci 19.0 off end # Intel Gigabit Ethernet + device pci 1a.0 on end # USB2 EHCI 2 + device pci 1b.0 on end # High Definition Audio controller + device pci 1c.0 on end # PCIe Root Port 1 PCIEX_16_3 + device pci 1c.1 on end # PCIe Root Port 6 RTL8111F + device pci 1c.2 off end # PCIe Port 3 unused + device pci 1c.3 off end # PCIe Port 4 unused + device pci 1c.4 off end # PCIe Port 5 unused + device pci 1c.5 on end # PCIe Root Port 7 ASM1042 USB3 + device pci 1c.6 on end # PCIe Root Port 8 ASM1061 eSATA + device pci 1c.7 off end # PCIe Port 8 unused + device pci 1d.0 on end # USB2 EHCI 1 + device pci 1e.0 off end # PCI bridge + device pci 1f.0 on # LPC bridge + chip superio/nuvoton/nct6779d + device pnp 2e.1 off end # Parallel + device pnp 2e.2 off end # UART A + device pnp 2e.3 on # UART B, IR + io 0x60 = 0x2f8 # COM2 address + end + device pnp 2e.5 on # PS2 KBC + io 0x60 = 0x0060 # KBC1 base + io 0x62 = 0x0064 # KBC2 base + irq 0x70 = 1 # Keyboard IRQ + irq 0x72 = 12 # Mouse IRQ + + # KBC 12Mhz/A20 speed/sw KBRST + drq 0xf0 = 0x82 + end + device pnp 2e.6 off end # CIR + device pnp 2e.7 on end # GPIOs 6-8 + device pnp 2e.8 off end # WDT1 GPIO 0-1 + device pnp 2e.9 off end # GPIO 1-8 + device pnp 2e.a on # ACPI + drq 0xe4 = 0x10 # Enable 3VSBS to power RAM on S3 + drq 0xe7 = 0x10 # 0.5s S3 delay for compatibility + end + device pnp 2e.b off end # HWM, LED + device pnp 2e.d off end # WDT1 + device pnp 2e.e off end # CIR wake-up + device pnp 2e.f on # GPIO PP/OD + drq 0xe6 = 0x7f # GP7 PP + end + device pnp 2e.14 on end # Port 80 UART + device pnp 2e.16 off end # Deep sleep + end + chip drivers/pc80/tpm + device pnp 4e.0 on end # TPM module + end + end + device pci 1f.2 on end # SATA Controller 1 + device pci 1f.3 on end # SMBus + device pci 1f.5 off end # SATA Controller 2 + device pci 1f.6 off end # Thermal + end + end +end diff --git a/src/mainboard/asus/p8z77-m_pro/dsdt.asl b/src/mainboard/asus/p8z77-m_pro/dsdt.asl new file mode 100644 index 0000000000..89ad30c997 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/dsdt.asl @@ -0,0 +1,43 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2019 Vlado Cibic + * + * 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. + */ + +#define ACPI_VIDEO_DEVICE \_SB.PCI0.GFX0 + +#include +DefinitionBlock( + "dsdt.aml", + "DSDT", + 0x02, /* DSDT revision: ACPI 2.0 and up */ + OEM_ID, + ACPI_TABLE_CREATOR, + 0x20141018 /* OEM revision */ +) +{ + #include "acpi/platform.asl" + #include "acpi/superio.asl" + #include + #include + + #include + #include + + Device (\_SB.PCI0) + { + #include + #include + #include + } +} diff --git a/src/mainboard/asus/p8z77-m_pro/gma-mainboard.ads b/src/mainboard/asus/p8z77-m_pro/gma-mainboard.ads new file mode 100644 index 0000000000..f9dd430d24 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/gma-mainboard.ads @@ -0,0 +1,31 @@ +-- +-- This file is part of the coreboot project. +-- +-- Copyright (C) 2019 Vlado Cibic +-- +-- 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 := + (HDMI1, -- DVI-D port on rear + HDMI3, -- real HDMI port on rear + Analog, -- VGA port on rear + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/asus/p8z77-m_pro/gpio.c b/src/mainboard/asus/p8z77-m_pro/gpio.c new file mode 100644 index 0000000000..c8842159d3 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/gpio.c @@ -0,0 +1,198 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2008-2009 coresystems GmbH + * Copyright (C) 2014 Vladimir Serbinenko + * Copyright (C) 2019 Vlado Cibic + * + * 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. + */ + +#include + +static const struct pch_gpio_set1 pch_gpio_set1_mode = { + .gpio0 = GPIO_MODE_GPIO, + .gpio1 = GPIO_MODE_GPIO, + .gpio2 = GPIO_MODE_NATIVE, + .gpio3 = GPIO_MODE_NATIVE, + .gpio4 = GPIO_MODE_NATIVE, + .gpio5 = GPIO_MODE_NATIVE, + .gpio6 = GPIO_MODE_GPIO, + .gpio7 = GPIO_MODE_GPIO, + .gpio8 = GPIO_MODE_GPIO, + .gpio9 = GPIO_MODE_NATIVE, + .gpio10 = GPIO_MODE_NATIVE, + .gpio11 = GPIO_MODE_NATIVE, + .gpio12 = GPIO_MODE_GPIO, + .gpio13 = GPIO_MODE_GPIO, + .gpio14 = GPIO_MODE_NATIVE, + .gpio15 = GPIO_MODE_GPIO, + .gpio16 = GPIO_MODE_GPIO, + .gpio17 = GPIO_MODE_GPIO, + .gpio18 = GPIO_MODE_NATIVE, + .gpio19 = GPIO_MODE_NATIVE, + .gpio20 = GPIO_MODE_NATIVE, + .gpio21 = GPIO_MODE_GPIO, + .gpio22 = GPIO_MODE_NATIVE, + .gpio23 = GPIO_MODE_NATIVE, + .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, + .gpio6 = GPIO_DIR_INPUT, + .gpio7 = GPIO_DIR_INPUT, + .gpio8 = GPIO_DIR_OUTPUT, + .gpio12 = GPIO_DIR_OUTPUT, + .gpio13 = GPIO_DIR_INPUT, + .gpio15 = GPIO_DIR_OUTPUT, + .gpio16 = GPIO_DIR_INPUT, + .gpio17 = GPIO_DIR_INPUT, + .gpio21 = GPIO_DIR_INPUT, + .gpio24 = GPIO_DIR_OUTPUT, + .gpio27 = GPIO_DIR_INPUT, + .gpio28 = GPIO_DIR_OUTPUT, + .gpio29 = GPIO_DIR_OUTPUT, + .gpio31 = GPIO_DIR_OUTPUT, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_level = { + .gpio8 = GPIO_LEVEL_HIGH, + .gpio12 = GPIO_LEVEL_LOW, + .gpio15 = GPIO_LEVEL_LOW, + .gpio24 = GPIO_LEVEL_LOW, + .gpio28 = GPIO_LEVEL_LOW, + .gpio29 = GPIO_LEVEL_HIGH, + .gpio31 = GPIO_LEVEL_HIGH, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_reset = { +}; + +static const struct pch_gpio_set1 pch_gpio_set1_invert = { + .gpio1 = GPIO_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_NATIVE, + .gpio36 = GPIO_MODE_NATIVE, + .gpio37 = GPIO_MODE_NATIVE, + .gpio38 = GPIO_MODE_NATIVE, + .gpio39 = GPIO_MODE_NATIVE, + .gpio40 = GPIO_MODE_NATIVE, + .gpio41 = GPIO_MODE_NATIVE, + .gpio42 = GPIO_MODE_NATIVE, + .gpio43 = GPIO_MODE_NATIVE, + .gpio44 = GPIO_MODE_NATIVE, + .gpio45 = GPIO_MODE_GPIO, + .gpio46 = GPIO_MODE_GPIO, + .gpio47 = GPIO_MODE_NATIVE, + .gpio48 = GPIO_MODE_NATIVE, + .gpio49 = GPIO_MODE_GPIO, + .gpio50 = GPIO_MODE_NATIVE, + .gpio51 = GPIO_MODE_NATIVE, + .gpio52 = GPIO_MODE_NATIVE, + .gpio53 = GPIO_MODE_NATIVE, + .gpio54 = GPIO_MODE_NATIVE, + .gpio55 = GPIO_MODE_NATIVE, + .gpio56 = GPIO_MODE_NATIVE, + .gpio57 = GPIO_MODE_GPIO, + .gpio58 = GPIO_MODE_NATIVE, + .gpio59 = GPIO_MODE_NATIVE, + .gpio60 = GPIO_MODE_NATIVE, + .gpio61 = GPIO_MODE_NATIVE, + .gpio62 = GPIO_MODE_NATIVE, + .gpio63 = GPIO_MODE_NATIVE, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_direction = { + .gpio32 = GPIO_DIR_OUTPUT, + .gpio33 = GPIO_DIR_OUTPUT, + .gpio34 = GPIO_DIR_INPUT, + .gpio45 = GPIO_DIR_INPUT, + .gpio46 = GPIO_DIR_INPUT, + .gpio49 = GPIO_DIR_INPUT, + .gpio57 = GPIO_DIR_OUTPUT, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_level = { + .gpio32 = GPIO_LEVEL_HIGH, + .gpio33 = GPIO_LEVEL_HIGH, + .gpio57 = GPIO_LEVEL_LOW, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_reset = { +}; + +static const struct pch_gpio_set3 pch_gpio_set3_mode = { + .gpio64 = GPIO_MODE_NATIVE, + .gpio65 = GPIO_MODE_NATIVE, + .gpio66 = GPIO_MODE_NATIVE, + .gpio67 = GPIO_MODE_NATIVE, + .gpio68 = GPIO_MODE_GPIO, + .gpio69 = GPIO_MODE_GPIO, + .gpio70 = GPIO_MODE_NATIVE, + .gpio71 = GPIO_MODE_NATIVE, + .gpio72 = GPIO_MODE_GPIO, + .gpio73 = GPIO_MODE_NATIVE, + .gpio74 = GPIO_MODE_NATIVE, + .gpio75 = GPIO_MODE_NATIVE, +}; + +static const struct pch_gpio_set3 pch_gpio_set3_direction = { + .gpio68 = GPIO_DIR_INPUT, + .gpio69 = GPIO_DIR_INPUT, + .gpio72 = 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/p8z77-m_pro/hda_verb.c b/src/mainboard/asus/p8z77-m_pro/hda_verb.c new file mode 100644 index 0000000000..4fd3fcc5e3 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/hda_verb.c @@ -0,0 +1,57 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2008-2009 coresystems GmbH + * Copyright (C) 2014 Vladimir Serbinenko + * Copyright (C) 2019 Vlado Cibic + * + * 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. + */ + +#include + +const u32 cim_verb_data[] = { + 0x10ec0892, /* Codec Vendor / Device ID: Realtek */ + 0x10438436, /* Subsystem ID */ + + 0x0000000f, /* Number of 4 dword sets */ + /* Subsystem ID */ + AZALIA_SUBVENDOR(0x0, 0x10438436), + + AZALIA_PIN_CFG(0x0, 0x11, 0x99430140), + AZALIA_PIN_CFG(0x0, 0x12, 0x411111f0), + AZALIA_PIN_CFG(0x0, 0x14, 0x01014010), + AZALIA_PIN_CFG(0x0, 0x15, 0x01011012), + AZALIA_PIN_CFG(0x0, 0x16, 0x01016011), + AZALIA_PIN_CFG(0x0, 0x17, 0x01012014), + AZALIA_PIN_CFG(0x0, 0x18, 0x01a19850), + AZALIA_PIN_CFG(0x0, 0x19, 0x02a19c60), + AZALIA_PIN_CFG(0x0, 0x1a, 0x0181305f), + AZALIA_PIN_CFG(0x0, 0x1b, 0x02214c20), + AZALIA_PIN_CFG(0x0, 0x1c, 0x411111f0), + AZALIA_PIN_CFG(0x0, 0x1d, 0x4005e601), + AZALIA_PIN_CFG(0x0, 0x1e, 0x01456130), + AZALIA_PIN_CFG(0x0, 0x1f, 0x411111f0), + 0x80862806, /* Codec Vendor / Device ID: Intel */ + 0x80860101, /* Subsystem ID */ + + 0x00000004, /* Number of 4 dword sets */ + /* Subsystem ID */ + AZALIA_SUBVENDOR(0x3, 0x80860101), + + AZALIA_PIN_CFG(0x3, 0x05, 0x58560010), + AZALIA_PIN_CFG(0x3, 0x06, 0x58560020), + AZALIA_PIN_CFG(0x3, 0x07, 0x18560030), +}; + +const u32 pc_beep_verbs[0] = {}; + +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/asus/p8z77-m_pro/mainboard.c b/src/mainboard/asus/p8z77-m_pro/mainboard.c new file mode 100644 index 0000000000..6cb41cc738 --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/mainboard.c @@ -0,0 +1,30 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2019 Vlado Cibic + * + * 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. + */ + +#include +#include + +static void mainboard_enable(struct device *dev) +{ + install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_NONE, + GMA_INT15_PANEL_FIT_DEFAULT, + GMA_INT15_BOOT_DISPLAY_DEFAULT, + 0); +} + +struct chip_operations mainboard_ops = { + .enable_dev = mainboard_enable +}; diff --git a/src/mainboard/asus/p8z77-m_pro/romstage.c b/src/mainboard/asus/p8z77-m_pro/romstage.c new file mode 100644 index 0000000000..b5593ec23c --- /dev/null +++ b/src/mainboard/asus/p8z77-m_pro/romstage.c @@ -0,0 +1,193 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2019 Vlado Cibic + * + * 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. + */ +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +#define GLOBAL_DEV PNP_DEV(0x2e, 0) +#define SERIAL_DEV PNP_DEV(0x2e, NCT6779D_SP2) + +void pch_enable_lpc(void) +{ + pci_write_config16(PCH_LPC_DEV, LPC_EN, + CNF1_LPC_EN | CNF2_LPC_EN | + KBC_LPC_EN | COMB_LPC_EN); + + /* Set COMB/COM2 IO range to 2F8h-2FFh */ + pci_write_config16(PCH_LPC_DEV, LPC_IO_DEC, 0x10); +} + +void mainboard_rcba_config(void) +{ +} + +const struct southbridge_usb_port mainboard_usb_ports[] = { + /* {enable, current, oc_pin} */ + { 1, 2, 0 }, /* Port 0: USB3 front internal header, top */ + { 1, 2, 0 }, /* Port 1: USB3 front internal header, bottom */ + { 1, 2, 1 }, /* Port 2: USB3 rear, ETH top */ + { 1, 2, 1 }, /* Port 3: USB3 rear, ETH bottom */ + { 1, 2, 2 }, /* Port 4: USB2 rear, PS2 top */ + { 1, 2, 2 }, /* Port 5: USB2 rear, PS2 bottom */ + { 1, 2, 3 }, /* Port 6: USB2 internal header USB78, top */ + { 1, 2, 3 }, /* Port 7: USB2 internal header USB78, bottom */ + { 1, 2, 4 }, /* Port 8: USB2 internal header USB910, top */ + { 1, 2, 4 }, /* Port 9: USB2 internal header USB910, bottom */ + { 1, 2, 6 }, /* Port 10: USB2 internal header USB1112, top */ + { 1, 2, 5 }, /* Port 11: USB2 internal header USB1112, bottom */ + { 0, 2, 5 }, /* Port 12: Unused. Asus propietary DEBUG_PORT ??? */ + { 0, 2, 6 } /* Port 13: Unused. Asus propietary DEBUG_PORT ??? */ +}; + +void mainboard_early_init(int s3resume) +{ +} + +void mainboard_config_superio(void) +{ + /* Setup COM/UART */ + nuvoton_pnp_enter_conf_state(GLOBAL_DEV); + + /* TODO / FIXME: Setup Multifuncion/SIO pins for COM */ + + pnp_set_logical_device(SERIAL_DEV); + nuvoton_pnp_exit_conf_state(GLOBAL_DEV); + 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); +} + +int mainboard_should_reset_usb(int s3resume) +{ + return !s3resume; +} + +void mainboard_fill_pei_data(struct pei_data *pei_data) +{ + /* + * USB3 mode: + * 0 = Disable: work always as USB 2.0(ehci) + * 1 = Enable: work always as USB 3.0(xhci) + * 2 = Auto: work as USB2.0(ehci) until OS loads USB3 xhci driver + * 3 = Smart Auto : same than Auto, but if OS loads USB3 driver + * and reboots, it will keep the USB3.0 speed + */ + int usb3_mode = 1; + get_option(&usb3_mode, "usb3_mode"); + usb3_mode &= 0x3; /* ensure it's 0/1/2/3 only */ + + /* Load USB3 pre-OS xHCI driver */ + int usb3_drv = 1; + get_option(&usb3_drv, "usb3_drv"); + usb3_drv &= 0x1; /* ensure it's 0/1 only */ + + /* Use USB3 xHCI streams */ + int usb3_streams = 1; + get_option(&usb3_streams, "usb3_streams"); + usb3_streams &= 0x1; /* ensure it's 0/1 only */ + + struct pei_data pd = { + .pei_version = PEI_VERSION, + .mchbar = (uintptr_t)DEFAULT_MCHBAR, + .dmibar = (uintptr_t)DEFAULT_DMIBAR, + .epbar = DEFAULT_EPBAR, + .pciexbar = CONFIG_MMCONF_BASE_ADDRESS, + .smbusbar = SMBUS_IO_BASE, + .wdbbar = 0x4000000, + .wdbsize = 0x1000, + .hpet_address = CONFIG_HPET_ADDRESS, + .rcba = (uintptr_t)DEFAULT_RCBABASE, + .pmbase = DEFAULT_PMBASE, + .gpiobase = DEFAULT_GPIOBASE, + .thermalbase = 0xfed08000, + .system_type = 1, /* 0=Mobile, 1=Desktop/Server */ + .tseg_size = CONFIG_SMM_TSEG_SIZE, + .spd_addresses = { 0xa0, 0xa2, 0xa4, 0xa6 }, /* SMBus mul 2 */ + .ts_addresses = { 0x00, 0x00, 0x00, 0x00 }, + .ec_present = 0, /* Asus 2203 bios shows XUECA016, but no EC */ + .gbe_enable = 0, /* Board uses no Intel GbE but a RTL8111F */ + .dimm_channel0_disabled = 0, /* Both DIMM enabled */ + .dimm_channel1_disabled = 0, /* Both DIMM enabled */ + .max_ddr3_freq = 1600, /* 1333=Sandy; 1600=Ivy */ + .usb_port_config = { + /* {enabled, oc_pin, cable len 0x0080=<8inches/20cm} */ + { 1, 0, 0x0080 }, /* USB3 front internal header */ + { 1, 0, 0x0080 }, /* USB3 front internal header */ + { 1, 1, 0x0080 }, /* USB3 ETH top connector */ + { 1, 1, 0x0080 }, /* USB3 ETH botton connector */ + { 1, 2, 0x0080 }, /* USB2 PS2 top connector */ + { 1, 2, 0x0080 }, /* USB2 PS2 botton connector */ + { 1, 3, 0x0080 }, /* USB2 internal header (USB78) */ + { 1, 3, 0x0080 }, /* USB2 internal header (USB78) */ + { 1, 4, 0x0080 }, /* USB2 internal header (USB910) */ + { 1, 4, 0x0080 }, /* USB2 internal header (USB910) */ + { 1, 6, 0x0080 }, /* USB2 internal header (USB1112) */ + { 1, 5, 0x0080 }, /* USB2 internal header (USB1112) */ + { 0, 5, 0x0080 }, /* Unused. Asus DEBUG_PORT ??? */ + { 0, 6, 0x0080 } /* Unused. Asus DEBUG_PORT ??? */ + }, + .usb3 = { + /* 0=Disable; 1=Enable (start at USB3 speed) + * 2=Auto (start as USB2 speed until OS loads) + * 3=Smart Auto (like Auto but keep speed on reboot) + */ + usb3_mode, + /* 4 bit switch mask. 0=not switchable, 1=switchable + * Means once it's loaded the OS, it can swap ports + * from/to EHCI/xHCI. Z77 has four USB3 ports, so 0xf + */ + 0xf, + usb3_drv, /* 1=Load xHCI pre-OS drv */ + /* 0=Don't use xHCI streams for better compatibility + * 1=use xHCI streams for better speed + */ + usb3_streams + }, + /* ASUS P8Z77-M Pro manual says 1.35v DIMMs are supported */ + .ddr3lv_support = 1, + /* PCIe 3.0 support. As we use Ivy Bridge, let's enable it, + * but might cause some system inestability ! + */ + .pcie_init = 1, + /* Command Rate. 0=Auto; 1=1N; 2=2N. + * Leave it always at Auto for compatibility & stability + */ + .nmode = 0, + /* DDR refresh rate. 0=Auto based on DRAM's temperature; + * 1=Normal rate for speed; 2=Double rate for stability + */ + .ddr_refresh_rate_config = 0 + }; + + /* copy the data to output PEI */ + *pei_data = pd; +}