From 3b1a9944aa58f781a7a6e9c86ed9bde56fa8074e Mon Sep 17 00:00:00 2001 From: Bill XIE Date: Fri, 25 Jun 2021 21:29:24 +0800 Subject: [PATCH] mb/asus/p8x7x-series: Add P8C WS as a variant of P8X7X series Mainboard information can be found in the included documentation. Signed-off-by: Bill XIE Change-Id: Idb696193e5a67c42adf45e54d455d2dff7681ca7 Reviewed-on: https://review.coreboot.org/c/coreboot/+/55850 Tested-by: build bot (Jenkins) Reviewed-by: Angel Pons --- Documentation/mainboard/asus/p8c_ws.jpg | Bin 0 -> 20687 bytes Documentation/mainboard/asus/p8c_ws.md | 94 +++++++++ Documentation/mainboard/index.md | 1 + src/mainboard/asus/p8x7x-series/Kconfig | 2 + src/mainboard/asus/p8x7x-series/Kconfig.name | 8 + src/mainboard/asus/p8x7x-series/dsdt.asl | 3 + .../variants/p8c_ws/board_info.txt | 7 + .../p8x7x-series/variants/p8c_ws/cmos.default | 6 + .../p8x7x-series/variants/p8c_ws/cmos.layout | 86 ++++++++ .../p8x7x-series/variants/p8c_ws/data.vbt | Bin 0 -> 3902 bytes .../p8x7x-series/variants/p8c_ws/early_init.c | 62 ++++++ .../variants/p8c_ws/gma-mainboard.ads | 16 ++ .../asus/p8x7x-series/variants/p8c_ws/gpio.c | 183 ++++++++++++++++++ .../p8x7x-series/variants/p8c_ws/hda_verb.c | 29 +++ .../variants/p8c_ws/overridetree.cb | 87 +++++++++ .../asus/p8x7x-series/variants/p8c_ws/pci.asl | 29 +++ 16 files changed, 613 insertions(+) create mode 100644 Documentation/mainboard/asus/p8c_ws.jpg create mode 100644 Documentation/mainboard/asus/p8c_ws.md create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/board_info.txt create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.default create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.layout create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/data.vbt create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/early_init.c create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/gma-mainboard.ads create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/gpio.c create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/hda_verb.c create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/overridetree.cb create mode 100644 src/mainboard/asus/p8x7x-series/variants/p8c_ws/pci.asl diff --git a/Documentation/mainboard/asus/p8c_ws.jpg b/Documentation/mainboard/asus/p8c_ws.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06bb8b8cb56f6251ed8fb6f7f1b8127270dda32e GIT binary patch literal 20687 zcmb4qbyyv})9B(32Y08qTXA=X;!ujaON$nFcXyZK+Tu{$U5jgh;$FC?eSh-(aliXK zcQz+GC$^hpCNr7LzAn9P0w6glSt$Sl42%$r0Py+(V2V4N8M&I7l6|srwIq|4RaAN1 zhOCtp7yqE5rYt3^APFuF0FZgMCU!2+tN>tV@9L~3Ek>rTqe}+22fzaO04hKPkQ$k| zIEt#MC;v%AGq=Vz)dWj z?Z9O?!DXmS?d-wrLu&tnoBqMQ|KN7EZs2$O3x9fuY-X?V4t%Eq|A+u-Ko(F0Q~)x- z7;pou09(KnU;^Lm!6`0)8aQ9+aPK&=5lxBY+XJLCZX&kZ;| z?!ReNxd4C`1OUzb|4lPa1%Q@N0Ki*zG;%ij`y4263~6o-0GFizfT9Bcm{S0NsQ1sf zf%E?41BHtKpbj1@g>e8#&j0{w3vk=||4YB&!4>{9ZvW3R{~Ev7RX`j7At9q8BZ5#- zP%+R!n0T}VcsMwCY?N<^Y56z=1$a4l-ipZRD~U*GNxtP#u~XIhU~FM&A*AT!;b`iv zZ)Rcgrx6Hr3=BMMJQe~1785ZZF_Zsqcs#HEBa3l)hHvo`Yng@P9dfM}kk*g9g zi$OUBiP+K7Gg7fjpg_`5fa^1Jm$H2+N01IzyknP)T|_r-zpRS$bcABkwm!ajFR&nC&5f_u&jsS zLQ;1VJTN6QW>YUoe7|U{q5^}F1c^8!+Y)N$(S%(C=3mr{e)OV4d{hrgog!n%gvPn% zQgjh&S1D8CC_xglssIQ-KUjeE%G1@t9kE*k;P~n&GGh)Jr@l%zEP$DA4@->!U<>-Q zVI<%GX&>BC0D=7AtXOhS0st%=x6wKA{ZPzzQcc4}6b`Er3Zu#ltr!U`=vqFN4m81w zfQw@xkMG@_r8JaiWjmgTK=BRIB8`UOfgg}+x)+aCdq``pgZ_GYBNVP97N`$!e*OO7~h#FBM6jcq`a}j-`VH`?$n>JqlUBwuGnk^Y7+u_5c zXAkbxDP2ieVJY3XGC%UVJ3PKXt~58FrVX?FA_PVqp^TQuWTr*}J8|Pg`$&=ug60uz zC1pY$Kuq!R9llNB$wQ5H3$d&7FZ)jz^06%$FFyKT96bfB2V4YvrP^J^nHiZdY&hcH zV^{6(@75(}{M2`0Oqf9D=fl`mgnJ_b@Nvrw!ERVgc#f|<&R1C-ERnnL7Mm8!rq)0P zX74;=?-bxW8Nx3l1=O-*MWrv2x!3|oF;R_4S?73u8zxa7SK@y4rX=Ns0DvFrmjyIo z&xSnHfq+6|wXbp_{&6S+LA~DwAnE88`<2A%0AhY>!-$_2l>=2GU^W3%WN}lM?LYbX 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 CAnbtv literal 0 HcmV?d00001 diff --git a/Documentation/mainboard/asus/p8c_ws.md b/Documentation/mainboard/asus/p8c_ws.md new file mode 100644 index 0000000000..a9aa58974f --- /dev/null +++ b/Documentation/mainboard/asus/p8c_ws.md @@ -0,0 +1,94 @@ +# ASUS P8C WS + +This page describes how to run coreboot on the [ASUS P8H77-V]. + +## Flashing coreboot + +```eval_rst ++---------------------+----------------+ +| Type | Value | ++=====================+================+ +| Socketed flash | yes | ++---------------------+----------------+ +| Model | W25Q64FVA1Q | ++---------------------+----------------+ +| Size | 8 MiB | ++---------------------+----------------+ +| Package | DIP-8 | ++---------------------+----------------+ +| Write protection | no | ++---------------------+----------------+ +| Dual BIOS feature | no | ++---------------------+----------------+ +| Internal flashing | yes | ++---------------------+----------------+ +``` + +The flash IC is located beside the SATA ports (circled): +![](p8c_ws.jpg) + +### How to flash + +Unlike ordinary desktop boards, the BIOS version 3202 of ASUS P8C WS does not +apply any write protection, so the main SPI flash can be accessed using +[flashrom], and the whole flash is writable. + +The following command may be used to flash coreboot. (To do so, linux kernel +should be started with `iomem=relaxed`) + +``` +# flashrom -p internal -w coreboot.rom +``` + +The flash chip is a socketed DIP-8 SPI flash, so it's also easy to remove and +flash externally. + +## Working +- Intel Xeon E3-1225 V2 with 4 M391B1G73BH0-YK0 UDIMMs, ECC confirmed active +- PS/2 keyboard with SeaBIOS 1.14.0 and Debian GNU/Linux with kernel 5.10.40 +- Both Onboard NIC +- S3 Suspend to RAM +- USB2 on rear and front panel connectors +- USB3 +- Integrated SATA +- CPU Temp sensors (tested PSensor on GNU/Linux) +- LPC TPM on TPM-header (tested tpm-tools with TPM 1.2 Infineon SLB9635TT12) +- Native raminit +- Integrated graphics with libgfxinit (both analog and digital output from DVI-I) +- Nvidia Quadro 600 in all PCIe-16x slots +- Compex WLM200NX (Qualcomm Atheros AR9220) in PCI slot +- Onboard IEEE1394 controller under PCI bus +- Debug output from serial port + +## Untested + +- EHCI debugging +- S/PDIF audio +- PS/2 mouse +- LPT port + +## Technology + +```eval_rst ++------------------+--------------------------------------------------+ +| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` | ++------------------+--------------------------------------------------+ +| Southbridge | bd82x6x | ++------------------+--------------------------------------------------+ +| CPU | model_206ax | ++------------------+--------------------------------------------------+ +| Super I/O | Nuvoton NCT6776F | ++------------------+--------------------------------------------------+ +| EC | None | ++------------------+--------------------------------------------------+ +| Coprocessor | Intel Management Engine | ++------------------+--------------------------------------------------+ +``` + +## Extra resources + +- [Flash chip datasheet][W25Q64FVA1Q] + +[ASUS P8C WS]: https://www.asus.com/supportonly/p8c_ws/helpdesk_knowledge/ +[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 2e2ba204c9..2e1d2941fc 100644 --- a/Documentation/mainboard/index.md +++ b/Documentation/mainboard/index.md @@ -19,6 +19,7 @@ This section contains documentation about coreboot on specific mainboards. - [A88XM-E](asus/a88xm-e.md) - [F2A85-M](asus/f2a85-m.md) - [P5Q](asus/p5q.md) +- [P8C WS](asus/p8c_ws.md) - [P8H61-M LX](asus/p8h61-m_lx.md) - [P8H61-M Pro](asus/p8h61-m_pro.md) - [P8H77-V](asus/p8h77-v.md) diff --git a/src/mainboard/asus/p8x7x-series/Kconfig b/src/mainboard/asus/p8x7x-series/Kconfig index 4f4f31b3f0..bc246e7d8d 100644 --- a/src/mainboard/asus/p8x7x-series/Kconfig +++ b/src/mainboard/asus/p8x7x-series/Kconfig @@ -21,6 +21,7 @@ config MAINBOARD_DIR config VARIANT_DIR string + default "p8c_ws" if BOARD_ASUS_P8C_WS default "p8h77-v" if BOARD_ASUS_P8H77_V default "p8z77-m_pro" if BOARD_ASUS_P8Z77_M_PRO default "p8z77-v_lx2" if BOARD_ASUS_P8Z77_V_LX2 @@ -28,6 +29,7 @@ config VARIANT_DIR config MAINBOARD_PART_NUMBER string + default "P8C WS" if BOARD_ASUS_P8C_WS default "P8H77-V" if BOARD_ASUS_P8H77_V default "P8Z77-M PRO" if BOARD_ASUS_P8Z77_M_PRO default "P8Z77-V LX2" if BOARD_ASUS_P8Z77_V_LX2 diff --git a/src/mainboard/asus/p8x7x-series/Kconfig.name b/src/mainboard/asus/p8x7x-series/Kconfig.name index 3509eead02..b4d89481c2 100644 --- a/src/mainboard/asus/p8x7x-series/Kconfig.name +++ b/src/mainboard/asus/p8x7x-series/Kconfig.name @@ -1,3 +1,11 @@ +config BOARD_ASUS_P8C_WS + bool "P8C_WS" + select BOARD_ASUS_P8X7X_SERIES + select BOARD_ROMSIZE_KB_8192 + select MAINBOARD_HAS_LPC_TPM + select SUPERIO_NUVOTON_NCT6776 + select USE_NATIVE_RAMINIT + config BOARD_ASUS_P8H77_V bool "P8H77-V" select BOARD_ASUS_P8X7X_SERIES diff --git a/src/mainboard/asus/p8x7x-series/dsdt.asl b/src/mainboard/asus/p8x7x-series/dsdt.asl index e8e2b3a3e5..e93fe97c53 100644 --- a/src/mainboard/asus/p8x7x-series/dsdt.asl +++ b/src/mainboard/asus/p8x7x-series/dsdt.asl @@ -22,5 +22,8 @@ DefinitionBlock( { #include #include + #if CONFIG(BOARD_ASUS_P8C_WS) + #include "variants/p8c_ws/pci.asl" + #endif } } diff --git a/src/mainboard/asus/p8x7x-series/variants/p8c_ws/board_info.txt b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/board_info.txt new file mode 100644 index 0000000000..44dcf5b0ba --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/board_info.txt @@ -0,0 +1,7 @@ +Category: desktop +Board URL: https://www.asus.com/supportonly/p8c_ws/helpdesk_knowledge/ +ROM package: DIP-8 +ROM protocol: SPI +ROM socketed: y +Flashrom support: y +Release year: 2013 diff --git a/src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.default b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.default new file mode 100644 index 0000000000..c7aa6208f4 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.default @@ -0,0 +1,6 @@ +boot_option=Fallback +debug_level=Debug +nmi=Disable +power_on_after_fail=Disable +sata_mode=AHCI +gfx_uma_size=64M diff --git a/src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.layout b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.layout new file mode 100644 index 0000000000..0f9de5ed18 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/cmos.layout @@ -0,0 +1,86 @@ +## SPDX-License-Identifier: GPL-2.0-only + +# ----------------------------------------------------------------- +entries + +# ----------------------------------------------------------------- +0 120 r 0 reserved_memory + +# ----------------------------------------------------------------- +# RTC_BOOT_BYTE (coreboot hardcoded) +384 1 e 2 boot_option +388 4 h 0 reboot_counter + +# ----------------------------------------------------------------- +# coreboot config options: console +395 4 e 3 debug_level + +# coreboot config options: southbridge +408 1 e 1 nmi + +409 2 e 4 power_on_after_fail +411 2 e 5 sata_mode + +# coreboot config options: northbridge +416 5 e 6 gfx_uma_size + +# coreboot config options: check sums +984 16 h 0 check_sum + +# ----------------------------------------------------------------- + +enumerations +#ID value text + +# Generic on/off enum +1 0 Disable +1 1 Enable + +# boot_option +2 0 Fallback +2 1 Normal + +# debug_level +3 0 Emergency +3 1 Alert +3 2 Critical +3 3 Error +3 4 Warning +3 5 Notice +3 6 Info +3 7 Debug +3 8 Spew + +# power_on_after_fail +4 0 Disable +4 1 Enable +4 2 Keep + +# sata_mode +5 0 AHCI +5 1 Compatible +5 2 Legacy + +# gfx_uma_size (Intel IGP Video RAM size) +6 0 32M +6 1 64M +6 2 96M +6 3 128M +6 4 160M +6 5 192M +6 6 224M +6 7 256M +6 8 288M +6 9 320M +6 10 352M +6 11 384M +6 12 416M +6 13 448M +6 14 480M +6 15 512M +6 16 1024M + +# ----------------------------------------------------------------- +checksums + +checksum 392 423 984 diff --git a/src/mainboard/asus/p8x7x-series/variants/p8c_ws/data.vbt b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/data.vbt new file mode 100644 index 0000000000000000000000000000000000000000..fce6b676453c29794c8c30ffc1b7e6880dcb750d GIT binary patch literal 3902 zcmdT{U1%It6h5;vvp;uclFcNxn>AfdYH2rVekR)xLWnxM*~DzRO*Yx>vKFzMcDFx} zrs?*F7OdH7uoXd8ky>k&MNw*>N}mLM=#vB$2}MN2hf;iyQlt+>u+*++W@nSqXtRpN zdWY|xbI+Xl_TF>Pxih;i8A@P$G}IYMhT6k}@y&^`SOzqBs@6yS@)nAW#kYrpiQx87 zbZlTVegvzaruOc2fDCYTN}wyy9hp9qo$^n#V0>~qb8JU$Z)SJ4GjhbzFg6gu;Le@d zscdfYP&R|{h9Rojo77ib_F^ET2~j+t-kK= zzD?Z<3l9#AZHYyq!9-+i6vrko9Ek_x@xd*j=(8A`7#og+B8kDU!px-%?4LQ7+q-+u zA@mQlU_jHfc9YPYG7jv|&2(UJY6>R|pMyA&J($fM$!0nfW)NHkr@(Q*iBNk2IM?q1 za5*{IDGWPxzY|4H2y%KehhafiIAM?zGJ+oA^cD`Ig1%0`HUZsWQ#hLd(0os1(a_1p zTQ+k{hAU}syKQgR0~z$MH~?`&nmXW+bgQ}D!Y8H!fYT%aupx)G%6)_3Gs}Va?S|c8 zsQgyN4=c)F$%o}2G=UcA?&NV32zYIC7dT*B79Exg77`z8sP@vR{}U0 zFhT>tNAME@gnq&hAx79n$PlIp_QP1$`u{tdKjS- zfp_-L$>vjA0ZJ!pT)@32ZiC;%cBp*~T;(%vk@eqHT;ktit6SQ9RW`G)@_57hVE2{> zj{b`Ae)(VCS+$vRfH#ZTX_SrGw7D99=um8XY;rm~H9EO3TjgN&Fk~7*55juQbE>CI z=FwW=%s6PeHd9}=_|A78y*ln)ucyvbEW=Oh+K!6>UB6thc>K^a%a?;G_soi59`dAd z1v5QKvm37w0J+f*jc}W;MksIyuTecG_S$(_}8#NC*gwQ7I&)t(bSA}Ro6rEkVyUOM3 zC_gC+oH?0xF=dlYd5d$C6l*uoJ7f9sDRHc1LOx|%nW0#V(3NUJf4;#AY0s?9N6%B5oD{2xmp{Lj`LuJQT@-dFawqs)@r39fe}r>(e!~ zP9 zBiU=_!-H$n)|dAj=xx_i?Mr*XLv48uPOz_B7cDxZ^H865yX%(b0B)0^$~V>j#%<#P pu#dPmK +#include +#include +#include +#include +#include + +#define GLOBAL_DEV PNP_DEV(0x2e, 0) +#define SERIAL_DEV PNP_DEV(0x2e, NCT6776_SP1) +#define ACPI_DEV PNP_DEV(0x2e, NCT6776_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, 0xc8); + pnp_write_config(GLOBAL_DEV, 0x1b, 0x0e); + pnp_write_config(GLOBAL_DEV, 0x1c, 0x83); + pnp_write_config(GLOBAL_DEV, 0x24, 0x20); + pnp_write_config(GLOBAL_DEV, 0x27, 0x10); + pnp_write_config(GLOBAL_DEV, 0x2a, 0x68); + pnp_write_config(GLOBAL_DEV, 0x2c, 0x00); + + /* Power RAM in S3 */ + pnp_set_logical_device(ACPI_DEV); + pnp_write_config(ACPI_DEV, 0xe4, 0x10); + + pnp_set_logical_device(SERIAL_DEV); + + 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/p8c_ws/gma-mainboard.ads b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/gma-mainboard.ads new file mode 100644 index 0000000000..c9e4326924 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/gma-mainboard.ads @@ -0,0 +1,16 @@ +-- 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 := + (HDMI1, + Analog, + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/asus/p8x7x-series/variants/p8c_ws/gpio.c b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/gpio.c new file mode 100644 index 0000000000..a93ad6aa1a --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/gpio.c @@ -0,0 +1,183 @@ +/* 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_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_NATIVE, + .gpio22 = GPIO_MODE_GPIO, + .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_INPUT, + .gpio12 = GPIO_DIR_OUTPUT, + .gpio13 = GPIO_DIR_INPUT, + .gpio15 = GPIO_DIR_OUTPUT, + .gpio16 = GPIO_DIR_INPUT, + .gpio17 = GPIO_DIR_INPUT, + .gpio22 = 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 = { + .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 = { + .gpio6 = 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_GPIO, + .gpio39 = GPIO_MODE_GPIO, + .gpio40 = GPIO_MODE_NATIVE, + .gpio41 = GPIO_MODE_NATIVE, + .gpio42 = GPIO_MODE_NATIVE, + .gpio43 = GPIO_MODE_NATIVE, + .gpio44 = GPIO_MODE_NATIVE, + .gpio45 = GPIO_MODE_NATIVE, + .gpio46 = GPIO_MODE_NATIVE, + .gpio47 = GPIO_MODE_NATIVE, + .gpio48 = GPIO_MODE_GPIO, + .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, + .gpio38 = GPIO_DIR_INPUT, + .gpio39 = GPIO_DIR_INPUT, + .gpio48 = GPIO_DIR_OUTPUT, + .gpio49 = GPIO_DIR_INPUT, + .gpio57 = GPIO_DIR_INPUT, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_level = { + .gpio32 = GPIO_LEVEL_HIGH, + .gpio33 = GPIO_LEVEL_HIGH, + .gpio48 = 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_OUTPUT, +}; + +static const struct pch_gpio_set3 pch_gpio_set3_level = { + .gpio72 = GPIO_LEVEL_LOW, +}; + +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/p8c_ws/hda_verb.c b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/hda_verb.c new file mode 100644 index 0000000000..574da72fe0 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/hda_verb.c @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +const u32 cim_verb_data[] = { + 0x10ec0892, /* Codec Vendor / Device ID: Realtek ALC892 */ + 0x104384fb, /* Subsystem ID */ + 15, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(0, 0x104384fb), + AZALIA_PIN_CFG(0, 0x11, 0x99430140), + AZALIA_PIN_CFG(0, 0x12, 0x411111f0), + AZALIA_PIN_CFG(0, 0x14, 0x01014010), + AZALIA_PIN_CFG(0, 0x15, 0x01011012), + AZALIA_PIN_CFG(0, 0x16, 0x01016011), + AZALIA_PIN_CFG(0, 0x17, 0x01012014), + AZALIA_PIN_CFG(0, 0x18, 0x01a19850), + AZALIA_PIN_CFG(0, 0x19, 0x02a19c60), + AZALIA_PIN_CFG(0, 0x1a, 0x0181305f), + AZALIA_PIN_CFG(0, 0x1b, 0x02214c20), + AZALIA_PIN_CFG(0, 0x1c, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1d, 0x4005e601), + AZALIA_PIN_CFG(0, 0x1e, 0x014b6130), + AZALIA_PIN_CFG(0, 0x1f, 0x411111f0), + +}; + +const u32 pc_beep_verbs[0] = {}; + +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/asus/p8x7x-series/variants/p8c_ws/overridetree.cb b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/overridetree.cb new file mode 100644 index 0000000000..4de539b1e2 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/overridetree.cb @@ -0,0 +1,87 @@ +## SPDX-License-Identifier: GPL-2.0-only + +chip northbridge/intel/sandybridge + device domain 0 on + device pci 01.1 on end # PCIEX16_2 (electrical x8) + device pci 06.0 on end # PCIEX16_3 (electrical x4) + subsystemid 0x1043 0x84ca inherit + chip southbridge/intel/bd82x6x + register "gen1_dec" = "0x000c0291" + device pci 1c.0 on end # RP #1: PCIEX16_4 (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: PCIEX1_1 + device pci 1c.5 on end # RP #6: 82574 GbE #1 + device pci 1c.6 on end # RP #7: 82574 GbE #2 + device pci 1c.7 off end # RP #8: + device pci 1e.0 on end # PCI bridge + device pci 1f.0 on # LPC bridge + chip superio/nuvoton/nct6776 + device pnp 2e.0 off end # Floppy + device pnp 2e.1 on # Parallel + io 0x60 = 0x0378 + irq 0x70 = 5 + drq 0x74 = 4 # No DMA + irq 0xf0 = 0x3c # Printer mode + end + device pnp 2e.2 on # UART A + io 0x60 = 0x03f8 + irq 0x70 = 4 + end + device pnp 2e.3 off end # UART B, IR + device pnp 2e.5 on # PS/2 KBC + io 0x60 = 0x0060 + io 0x62 = 0x0064 + irq 0x70 = 1 # Keyboard + irq 0x72 = 12 # Mouse + end + device pnp 2e.6 off end # CIR + device pnp 2e.7 off end # GPIO8 + device pnp 2e.107 off end # GPIO9 + device pnp 2e.8 off end # WDT + device pnp 2e.108 off end # GPIO0 + device pnp 2e.208 off end # GPIOA + device pnp 2e.308 off end # GPIO base + device pnp 2e.109 off # GPIO1 + irq 0xf0 = 0xfb + irq 0xf1 = 0x0 + irq 0xf5 = 0xff + irq 0xf7 = 0xff + end + device pnp 2e.209 on # GPIO2 + irq 0xe0 = 0xef + end + device pnp 2e.309 on # GPIO3 + irq 0xea = 0xff + end + 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 # ACPI + irq 0xe6 = 0x0c + irq 0xe7 = 0x11 + irq 0xf2 = 0x5d + end + device pnp 2e.b on # HWM, LED + io 0x60 = 0x0290 + io 0x62 = 0x0000 + end + device pnp 2e.d off end # VID + device pnp 2e.e off end # CIR wake-up + device pnp 2e.f off # GPIO PP/OD + # Enable i2c slave to 0x1d + irq 0xf0 = 0x9d + end + device pnp 2e.14 off end # SVID + device pnp 2e.16 off end # Deep sleep + device pnp 2e.17 off end # GPIOA + end + chip drivers/pc80/tpm + device pnp c31.0 on end # TPM + end + end + end + end +end diff --git a/src/mainboard/asus/p8x7x-series/variants/p8c_ws/pci.asl b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/pci.asl new file mode 100644 index 0000000000..76af84ca04 --- /dev/null +++ b/src/mainboard/asus/p8x7x-series/variants/p8c_ws/pci.asl @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +// Intel PCI to PCI bridge 0:1e.0 + +Device (PCIB) +{ + Name (_ADR, 0x001E0000) // _ADR: Address + Name (_PRW, Package(){ 13, 4 }) // Power Resources for Wake + + Method (_PRT) // _PRT: PCI Interrupt Routing Table + { + If (PICM) { + Return (Package() { + Package() { 0x0000ffff, 0, 0, 0x10 }, + Package() { 0x0000ffff, 1, 0, 0x11 }, + Package() { 0x0000ffff, 2, 0, 0x12 }, + Package() { 0x0000ffff, 3, 0, 0x13 }, + Package() { 0x0003ffff, 0, 0, 0x13 }, + }) + } + Return (Package() { + Package() { 0x0000ffff, 0, \_SB.PCI0.LPCB.LNKA, 0 }, + Package() { 0x0000ffff, 1, \_SB.PCI0.LPCB.LNKB, 0 }, + Package() { 0x0000ffff, 2, \_SB.PCI0.LPCB.LNKC, 0 }, + Package() { 0x0000ffff, 3, \_SB.PCI0.LPCB.LNKD, 0 }, + Package() { 0x0003ffff, 0, \_SB.PCI0.LPCB.LNKD, 0 }, + }) + } +}