From 17441a3ac5a114fc8386e8da50ef802e159c97b7 Mon Sep 17 00:00:00 2001 From: Sean Rhodes Date: Mon, 5 Jul 2021 16:03:15 +0100 Subject: [PATCH] mainboard/starlabs: Add StarBook Mk V Tested using MrChromeBox's `uefipayload_202107` branch: * Windows 10 * Ubuntu 20.04 * MX Linux 19.4 * Manjaro 21 No known issues. https://starlabs.systems/pages/starbook-specification Signed-off-by: Sean Rhodes Change-Id: I090971a9e8d2be5b08be886d00d304607304b645 Reviewed-on: https://review.coreboot.org/c/coreboot/+/56088 Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- Documentation/distributions.md | 7 + Documentation/mainboard/index.md | 4 + Documentation/mainboard/starlabs/BiosLock.jpg | Bin 0 -> 62289 bytes .../mainboard/starlabs/SwitchBranch.png | Bin 0 -> 25645 bytes .../mainboard/starlabs/fwupdVersion.png | Bin 0 -> 28206 bytes .../mainboard/starlabs/starbook_tgl.md | 154 +++++++++++ MAINTAINERS | 12 + src/mainboard/starlabs/Kconfig | 15 ++ src/mainboard/starlabs/Kconfig.name | 2 + src/mainboard/starlabs/labtop/Kconfig | 92 +++++++ src/mainboard/starlabs/labtop/Kconfig.name | 4 + src/mainboard/starlabs/labtop/Makefile.inc | 11 + .../starlabs/labtop/acpi/mainboard.asl | 34 +++ src/mainboard/starlabs/labtop/acpi/sleep.asl | 15 ++ src/mainboard/starlabs/labtop/board_info.txt | 6 + src/mainboard/starlabs/labtop/bootblock.c | 15 ++ src/mainboard/starlabs/labtop/cmos.default | 21 ++ src/mainboard/starlabs/labtop/cmos.layout | 107 ++++++++ src/mainboard/starlabs/labtop/dsdt.asl | 46 ++++ src/mainboard/starlabs/labtop/hda_verb.c | 27 ++ .../starlabs/labtop/include/variants.h | 17 ++ src/mainboard/starlabs/labtop/mainboard.c | 47 ++++ src/mainboard/starlabs/labtop/ramstage.c | 21 ++ .../starlabs/labtop/variants/tgl/Makefile.inc | 9 + .../starlabs/labtop/variants/tgl/board.fmd | 18 ++ .../starlabs/labtop/variants/tgl/data.vbt | Bin 0 -> 8704 bytes .../labtop/variants/tgl/devicetree.cb | 240 ++++++++++++++++++ .../starlabs/labtop/variants/tgl/devtree.c | 53 ++++ .../starlabs/labtop/variants/tgl/gpio.c | 224 ++++++++++++++++ .../starlabs/labtop/variants/tgl/hda_verb.c | 211 +++++++++++++++ .../starlabs/labtop/variants/tgl/romstage.c | 36 +++ 31 files changed, 1448 insertions(+) create mode 100644 Documentation/mainboard/starlabs/BiosLock.jpg create mode 100644 Documentation/mainboard/starlabs/SwitchBranch.png create mode 100644 Documentation/mainboard/starlabs/fwupdVersion.png create mode 100644 Documentation/mainboard/starlabs/starbook_tgl.md create mode 100644 src/mainboard/starlabs/Kconfig create mode 100644 src/mainboard/starlabs/Kconfig.name create mode 100644 src/mainboard/starlabs/labtop/Kconfig create mode 100644 src/mainboard/starlabs/labtop/Kconfig.name create mode 100644 src/mainboard/starlabs/labtop/Makefile.inc create mode 100644 src/mainboard/starlabs/labtop/acpi/mainboard.asl create mode 100644 src/mainboard/starlabs/labtop/acpi/sleep.asl create mode 100644 src/mainboard/starlabs/labtop/board_info.txt create mode 100644 src/mainboard/starlabs/labtop/bootblock.c create mode 100644 src/mainboard/starlabs/labtop/cmos.default create mode 100644 src/mainboard/starlabs/labtop/cmos.layout create mode 100644 src/mainboard/starlabs/labtop/dsdt.asl create mode 100644 src/mainboard/starlabs/labtop/hda_verb.c create mode 100644 src/mainboard/starlabs/labtop/include/variants.h create mode 100644 src/mainboard/starlabs/labtop/mainboard.c create mode 100644 src/mainboard/starlabs/labtop/ramstage.c create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/Makefile.inc create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/board.fmd create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/data.vbt create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/devicetree.cb create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/devtree.c create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/gpio.c create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/hda_verb.c create mode 100644 src/mainboard/starlabs/labtop/variants/tgl/romstage.c diff --git a/Documentation/distributions.md b/Documentation/distributions.md index efdcf1b9c7..4d69fcc9d3 100644 --- a/Documentation/distributions.md +++ b/Documentation/distributions.md @@ -24,6 +24,13 @@ ships with coreboot and support upstream maintenance for the devices through a third party, [3mdeb](https://3mdeb.com). They provide current and tested firmware binaries on [GitHub](https://pcengines.github.io). +### Star Labs + +[Star Labs](https://starlabs.systems/) offers a range of laptops designed and +built specifically for Linux that are available with coreboot firmware. They +use Tianocore as the payload and include an NVRAM option to disable the +Intel Management Engine. + ### System76 [System76](https://system76.com/) manufactures Linux laptops, desktops, and diff --git a/Documentation/mainboard/index.md b/Documentation/mainboard/index.md index 9b8220ed8e..0d5ec5f542 100644 --- a/Documentation/mainboard/index.md +++ b/Documentation/mainboard/index.md @@ -172,6 +172,10 @@ The boards in this section are not real mainboards, but emulators. - [SiFive HiFive Unleashed](sifive/hifive-unleashed.md) +## Star Labs Systems + +- [StarBook Mk V](starlabs/starbook_tgl.md) + ## Supermicro - [X10SLM+-F](supermicro/x10slm-f.md) diff --git a/Documentation/mainboard/starlabs/BiosLock.jpg b/Documentation/mainboard/starlabs/BiosLock.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a37d5756e26d5289c78a8a589cc80baf42f05af6 GIT binary patch literal 62289 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 literal 0 HcmV?d00001 diff --git a/Documentation/mainboard/starlabs/SwitchBranch.png b/Documentation/mainboard/starlabs/SwitchBranch.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7bff00bb9259ce5f323c8968093187f806e170 GIT binary patch literal 25645 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 literal 0 HcmV?d00001 diff --git a/Documentation/mainboard/starlabs/fwupdVersion.png b/Documentation/mainboard/starlabs/fwupdVersion.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd6d186f438b47880b65d11f38646cfdf63651a GIT binary patch literal 28206 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಑ZD@rk zlo+Osh}(GxO;&W~s%;brI3+uuI4lZGcCJn9Zzj zyb}=NUR|ziszX0r1i*-v12&Uflp@;T#ACBBho0blHye8Tiup0-bT6$?Lu`|yAHVLlj2bFa9ttrDA)3zc%EMjd<|s)2BxO(-f`rc+T373&02Y2~>GuZ#IONd~9eP z1pH%lGkjiHuwR+@A@m?X=2|==-ZcTu&E(*q6frvtQ1&qKHJGtEc2ZvDX3~X)i=zFU zBsydy02o$*6b1;ouV+0FA?lO_!@!uwM2R0}0OTidH2b|6=@=~2$>8`7mBkZJ zPtKmD+6d_);s#d>rWv+|&s&Cva}@UY!-?L?PnpM~whu6}H8B8k);irPSc)P|k)=pU zpOluAhUcHiKbbGtVPj*DknZ?;El;o}$!z^+NZwcL9dgCc_c5*N7T}FiqUDWJ8czMu zQgCK{B0qkBQlRKMa;hP=z0}m4C%z?}e56goSUDK3iH*m$r@H7Sb;urL zE2k+CozTou382U+3HFDIJ0r|S24~92N609@qD)O=f?NbYrQn%-DPOwQGluov90ctwn2V7 z#y2Pl;&gZgd4_F$c;tyXrva*^elVD17!DtfA<-4F4!&YWA%mODI=S`P1LX<1+0J(} z0tv3lS=ai>qz6`@$1@wgo_1!yix?lg_>BiDITc*LdJ^PZZy!#|@ET~9Bor5RUe}DT zXi2X-m#Mx1F!z1{LT3PQB1?MS$VKg$^=`QDXcn34dup5~Ez(K;S|}EiaSy45VJv(p zBkRj3I&+M3V9Xj~-trrk-|9ySgDw-+ZjpWBXc5iy9DId4Dxu3xkjr!D$tbbbaSTm| zMYV{H>-ZQN3)O;~gyS!lyz9J|W1AP8rS(YXGL8t;^B*A|%RjQ^5&(Fm*~RNGWPFPq zur`Z3*}Zj=0N2p2)5JI;@vNy(fX2o4`+=eK-l!2vQpNX5~cTzeTPAz2y5- z=AwXz;sc=}*F4Rihfgu1QC;>a$K*!eZ67M|MdaYHwWad?&ogz@Om*g@x(~iM(BiYU zj?Z|B0y<%XC0MwAIu&n`;S{~yFfaD?9!KMV>qZ8NnG$-f+q)TyY?tU!gL?=A%X!JK z*-6TTdtmDb4!<`uQ=SKeYsJ$NX@u6|`#$-G?d_%V*rH5bHRG;>7$5X>C47bJ?j4i; zy`$BAiQm!KXDa&)^(a}_k6E8pHa!9`|7~vu0}NH`$e#Ri<=7D}%q2lwVE=}hP}20e zOieR~yW(^P%5XkY3vZZ~c^31Q8*}3V*0c{+rO~n(1IdiAM8sfP`Lt=b&2^)J>MnXh z<{DfU*4HPr-%Y98Y(A4;3*Z*V2^>uNkn46fWjo2D?K~vkGRdgctd9+xmYCXkDiD!V z8zY%Pi}3j7#cbwXSPb$abusf2r00rC1;x*0nk#nt;a16yP?*TFCKT_)n3)iD*A!BLv)(Chsp4u zx-oKidJhUhEDzMn6CH36;t$-p^c`8^=m>(I_7Qh8b$unwuY<#`48ZLfmYasa!YV1IllhLrX!!sv`jtUSrfE|A@J@Z}4Z$SWb(uPI8zY_3#_p`? zJw}N_D}RH?gV*JRo#GlFu!X&V)>xL&Bxja zc&F#ZFTf{V7B^7j&aS0t#mo65;FY;}4y7*X20opC{J?^&pJLvD4pgL_D!0DhR^imwoUrcgQ;P7A=N!9C-s}d&b!HLr${};k3HZG6 zO>}iWT|Zdmuy>?036RY}kK)gm1&;@t@x?kO;CYe*uB-kN&KBJ4d#_^|n;!1i6bsucDR65=*Y z*J!Q^gWmwXze}#Xl&W+bSJlhYMrXM6`uFMk1^*5%iJ{}TtX4!u+HJ(Z8x4M>Ux>>G zr0V`Vkx&D%>GIE3d5-7dhZv-?`WiLW$jb{o`N^~cJH|$xMNYc`oZTq|R z7hiK`}Koi#3t!)G%^ly+0Lu!sAj8J-2OK`{!<(P literal 0 HcmV?d00001 diff --git a/Documentation/mainboard/starlabs/starbook_tgl.md b/Documentation/mainboard/starlabs/starbook_tgl.md new file mode 100644 index 0000000000..b69073c2e8 --- /dev/null +++ b/Documentation/mainboard/starlabs/starbook_tgl.md @@ -0,0 +1,154 @@ +# StarBook Mk V + +## Specs + +- CPU (full processor specs available at https://ark.intel.com) + - Intel i7-1165G7 (Tiger Lake) + - Intel i3-1110G4 (Tiger Lake) +- EC + - ITE IT5570E + - Backlit Keyboard, with standard PS/2 keycodes and SCI hotkeys + - Battery + - Charger, using AC adapter or USB-C PD + - Suspend / resume +- GPU + - IntelĀ® IrisĀ® Xe Graphics + - GOP driver is recommended, VBT is provided + - eDP 14-inch 1920x1080 LCD + - HDMI video + - USB-C DisplayPort video +- Memory + - 2 x DDR4 SODIMM +- Networking + - AX201 2230 WiFi / Bluetooth +- Sound + - Realtek ALC256 + - Internal speakers + - Internal microphone + - Combined headphone / microphone 3.5-mm jack + - HDMI audio + - USB-C DisplayPort audio +- Storage + - M.2 PCIe SSD + - RTS5129 MicroSD card reader +- USB + - 1280x720 CCD camera + - Thunderbolt 4.0 (left) + - USB 3.1 Gen 2 Type-A (left) + - USB 3.1 Gen 1 Type-A (right) + - USB 2.0 Type-A (right) + +## Building coreboot + +### Preliminaries + +Prior to building coreboot the following files are required: +* Intel Flash Descriptor file (descriptor.bin) +* Intel Management Engine firmware (me.bin) +* ITE Embedded Controller firmware (ec.bin) + +The files listed below are optional: +- Splash screen image in Windows 3.1 BMP format (Logo.bmp) + +These files exist in the correct location in the StarLabsLtd/blobs repo on GitHub which is used in place of the standard 3rdparty/blobs repo. + +### Build + +The following commands will build a working image: + +```bash +make distclean +make defconfig KBUILD_DEFCONFIG=configs/config.starlabs_starbook_tgl +make +``` + +## Flashing coreboot + +```eval_rst ++---------------------+------------+ +| Type | Value | ++=====================+============+ +| Socketed flash | no | ++---------------------+------------+ +| Vendor | Winbond | ++---------------------+------------+ +| Model | 25Q128JVSQ | ++---------------------+------------+ +| Size | 16 MiB | ++---------------------+------------+ +| Package | SOIC-8 | ++---------------------+------------+ +| Internal flashing | yes | ++---------------------+------------+ +| External flashing | yes | ++---------------------+------------+ + +#### **Requirements:** + +* fwupd version 1.5.6 or later +* The battery must be charged to at least 30% +* The charger must be connected (either USB-C or DC Jack) +* BIOS Lock must be disabled +* Supported Linux distribution (Ubuntu 20.04 +, Linux Mint 20.1 + elementaryOS 6 +, Manjaro 21+) + +**fwupd 1.5.6 or later** +To check the version of **fwupd** you have installed, open a terminal window and enter the below command: + +``` +fwupdmgr --version +``` + +This will show the version number. **1.5.6** or greater will work. +![fwupd version](fwupdVersion.png) +On Ubuntu 20.04, Ubuntu 20.10, Linux Mint 20.1 and elementaryOS 6, fwupd 1.5.6 can be installed from our PPA with the below terminal commands: + +``` +sudo add-apt-repository ppa:starlabs/ppa +sudo apt update +sudo apt install fwupd +``` + +On Manjaro: + +``` +sudo pacman -Sy fwupd-git flashrom-starlabs +``` + +Instructions for other distributions will be added once fwupd 1.5.6 is available. If you are not using one of the distributions listed above, it is possible to install coreboot using a Live USB. + +**Disable BIOS Lock** +BIOS Lock must be disabled when switching from the standard AMI (American Megatrends Inc.) firmware to coreboot. To disable BIOS Lock: + +1\. Start with your LabTop turned off\. Turn it on whilst holding the **F2** key to access the BIOS settings. +2\. When the BIOS settings load, use the arrow keys to navigate to the **Advanced** tab\. Here you will see **BIOS Lock**\. +3\. Press `Enter` to change this setting from **Enabled** to **Disabled** + +![Disable BIOS Lock](BiosLock.jpg) + +4\. Next, press the `F10` key to **Save & Exit** and then `Enter` to confirm. + +#### **Switching Branch** + +Switching branch refers to changing from AMI firmware to coreboot, or vice versa. + +First, check for new firmware files with the below terminal command: + +``` +fwupdmgr refresh --force +``` + +Then, to change branch, enter the below terminal command: + +``` +fwupdmgr switch-branch +``` + +You can then select which branch you would like to use, by typing in the corresponding number: +![Switch Branch](SwitchBranch.png) +You will be prompted to confirm, press `y` to continue or `n` to cancel. + +Once the switch has been completed, you will be prompted to restart. + +The next reboot can take up to **5 minutes,** do not interrupt this process or disconnect the charger. Once the reboot is complete, that's it - you'll continue to receive updates for whichever branch you are using. + +You can switch branch at any time. diff --git a/MAINTAINERS b/MAINTAINERS index 84e855c4d5..0dcfca1257 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -451,6 +451,13 @@ F: src/mainboard/siemens/mc_apl1/ +STAR LABS MAINBOARDS +M: Sean Rhodes +S: Maintained +F: src/mainboard/starlabs/ + + + SYSTEM76 MAINBOARDS M: Jeremy Soller M: Tim Crawford @@ -523,6 +530,11 @@ M: Alexander Couzens S: Maintained F: src/ec/lenovo/ +STARLABS EC +M: Sean Rhodes +S: Maintained +F: src/ec/starlabs/ + SYSTEM76 EC M: Jeremy Soller M: Tim Crawford diff --git a/src/mainboard/starlabs/Kconfig b/src/mainboard/starlabs/Kconfig new file mode 100644 index 0000000000..4df05881d1 --- /dev/null +++ b/src/mainboard/starlabs/Kconfig @@ -0,0 +1,15 @@ +if VENDOR_STARLABS + +choice + prompt "Mainboard model" + +source "src/mainboard/starlabs/*/Kconfig.name" + +endchoice + +source "src/mainboard/starlabs/*/Kconfig" + +config MAINBOARD_VENDOR + default "Star Labs" + +endif # VENDOR_STARLABS diff --git a/src/mainboard/starlabs/Kconfig.name b/src/mainboard/starlabs/Kconfig.name new file mode 100644 index 0000000000..7aab0da2b9 --- /dev/null +++ b/src/mainboard/starlabs/Kconfig.name @@ -0,0 +1,2 @@ +config VENDOR_STARLABS + bool "Star Labs" diff --git a/src/mainboard/starlabs/labtop/Kconfig b/src/mainboard/starlabs/labtop/Kconfig new file mode 100644 index 0000000000..9d74d2b934 --- /dev/null +++ b/src/mainboard/starlabs/labtop/Kconfig @@ -0,0 +1,92 @@ +config BOARD_STARLABS_LABTOP_SERIES + def_bool n + select DRIVERS_I2C_HID + select EC_STARLABS_ITE + select EC_STARLABS_FAN + select HAVE_ACPI_RESUME + select HAVE_ACPI_TABLES + select HAVE_CMOS_DEFAULT + select HAVE_OPTION_TABLE + select INTEL_GMA_HAVE_VBT + select INTEL_LPSS_UART_FOR_CONSOLE + select NO_UART_ON_SUPERIO + select SOC_INTEL_COMMON_BLOCK_HDA_VERB + select SYSTEM_TYPE_LAPTOP + +config BOARD_STARLABS_STARBOOK_TGL + select BOARD_ROMSIZE_KB_16384 + select BOARD_STARLABS_LABTOP_SERIES + select DRIVERS_INTEL_USB4_RETIMER + select EC_STARLABS_KBL_LEVELS + select EC_STARLABS_FAN + select EC_STARLABS_NEED_ITE_BIN + select MAINBOARD_HAS_LPC_TPM + select MAINBOARD_HAS_TPM2 + select PCIEXP_HOTPLUG_PREFETCH_MEM_BELOW_4G + select SOC_INTEL_COMMON_BLOCK_TCSS + select SOC_INTEL_ENABLE_USB4_PCIE_RESOURCES + select SOC_INTEL_TIGERLAKE + select SOC_INTEL_TIGERLAKE_S3 + select SPI_FLASH_WINBOND + +if BOARD_STARLABS_LABTOP_SERIES + +config DEVICETREE + default "variants/\$(CONFIG_VARIANT_DIR)/devicetree.cb" + +config DIMM_SPD_SIZE + default 512 + +config DRIVER_TPM_SPI_CHIP + default 2 + +config EC_STARLABS_ADD_ITE_BIN + default y + +config EC_STARLABS_ITE_BIN_PATH + string + depends on EC_STARLABS_NEED_ITE_BIN + default "3rdparty/blobs/mainboard/\$(MAINBOARDDIR)/\$(CONFIG_VARIANT_DIR)/ec.bin" + +config EC_VARIANT_DIR + default "tgl" if !EC_STARLABS_MERLIN + +config FMDFILE + default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/variants/\$(CONFIG_VARIANT_DIR)/board.fmd" + +config IFD_BIN_PATH + string + default "3rdparty/blobs/mainboard/\$(MAINBOARDDIR)/\$(CONFIG_VARIANT_DIR)/flashdescriptor.bin" + +config MAINBOARD_DIR + default "starlabs/labtop" + +config MAINBOARD_FAMILY + string + default "B5" + +config MAINBOARD_PART_NUMBER + default "StarBook Mk V" + +config MAINBOARD_SMBIOS_PRODUCT_NAME + default "StarBook" + +config ME_BIN_PATH + string + default "3rdparty/blobs/mainboard/\$(MAINBOARDDIR)/\$(CONFIG_VARIANT_DIR)/intel_me.bin" + +config TIANOCORE_BOOTSPLASH_FILE + string + depends on TIANOCORE_BOOTSPLASH_IMAGE + default "3rdparty/blobs/mainboard/starlabs/Logo.bmp" + +config UART_FOR_CONSOLE + default 2 + +config USE_PM_ACPI_TIMER + default n + +config VARIANT_DIR + default "tgl" + +endif diff --git a/src/mainboard/starlabs/labtop/Kconfig.name b/src/mainboard/starlabs/labtop/Kconfig.name new file mode 100644 index 0000000000..b3a5742eb1 --- /dev/null +++ b/src/mainboard/starlabs/labtop/Kconfig.name @@ -0,0 +1,4 @@ +comment "Star Labs LabTop Series" + +config BOARD_STARLABS_STARBOOK_TGL + bool "Star Labs StarBook Mk V (i3-1115G4 and i7-1165G7)" diff --git a/src/mainboard/starlabs/labtop/Makefile.inc b/src/mainboard/starlabs/labtop/Makefile.inc new file mode 100644 index 0000000000..cb72a089ec --- /dev/null +++ b/src/mainboard/starlabs/labtop/Makefile.inc @@ -0,0 +1,11 @@ +## SPDX-License-Identifier: GPL-2.0-only + +CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include +subdirs-y += variants/$(VARIANT_DIR) + +bootblock-y += bootblock.c + +ramstage-y += hda_verb.c +ramstage-y += mainboard.c +ramstage-y += ramstage.c +ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += variants/$(VARIANT_DIR)/gma-mainboard.ads diff --git a/src/mainboard/starlabs/labtop/acpi/mainboard.asl b/src/mainboard/starlabs/labtop/acpi/mainboard.asl new file mode 100644 index 0000000000..5bdde36bb7 --- /dev/null +++ b/src/mainboard/starlabs/labtop/acpi/mainboard.asl @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +Scope (\_SB) { + #include "sleep.asl" +} + +/* + * This platform doesn't support SoundWire but there + * is a kernel bug in some 5.10.x releases. + * + * Debian testing live CD (at 4th Feb 2021) uses 5.10.9-1. More + * details can be found at https://bit.ly/3ttdffG but it appears to + * be triggered by missing SoundWire ACPI entries. + * + * Add the minimal set to make it work again. + */ +Scope (_SB.PCI0.HDAS) +{ + Device (SNDW) + { + Name (_ADR, 0x40000000) + + Name (_CID, Package (0x02) + { + "PRP0001", + "PNP0A05" + }) + + Method (_STA, 0, NotSerialized) + { + Return (0x0B) + } + } +} diff --git a/src/mainboard/starlabs/labtop/acpi/sleep.asl b/src/mainboard/starlabs/labtop/acpi/sleep.asl new file mode 100644 index 0000000000..9dc818d04d --- /dev/null +++ b/src/mainboard/starlabs/labtop/acpi/sleep.asl @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +Method (MPTS, 1, NotSerialized) +{ + If (Arg0) + { + RPTS (Arg0) + } +} + +Method (MWAK, 1, NotSerialized) +{ + RWAK (Arg0) + Return (0x00) +} diff --git a/src/mainboard/starlabs/labtop/board_info.txt b/src/mainboard/starlabs/labtop/board_info.txt new file mode 100644 index 0000000000..9e70dba3d6 --- /dev/null +++ b/src/mainboard/starlabs/labtop/board_info.txt @@ -0,0 +1,6 @@ +Vendor name: Star Labs +Board name: LabTop +Category: laptop +ROM protocol: SPI +ROM socketed: n +Flashrom support: y diff --git a/src/mainboard/starlabs/labtop/bootblock.c b/src/mainboard/starlabs/labtop/bootblock.c new file mode 100644 index 0000000000..5349207eeb --- /dev/null +++ b/src/mainboard/starlabs/labtop/bootblock.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include + +void bootblock_mainboard_init(void) +{ + const struct pad_config *pads; + size_t num; + + pads = variant_early_gpio_table(&num); + gpio_configure_pads(pads, num); +} diff --git a/src/mainboard/starlabs/labtop/cmos.default b/src/mainboard/starlabs/labtop/cmos.default new file mode 100644 index 0000000000..b4b2d2600b --- /dev/null +++ b/src/mainboard/starlabs/labtop/cmos.default @@ -0,0 +1,21 @@ +# hardcoded +boot_option=Fallback +# console +debug_level=Debug +# cpu +hyper_threading=Enable +vtd=Enable +power_profile=Balanced +me_state=Disable +smi_handler=Enable +# Devices +wireless=Enable +webcam=Enable +microphone=Enable +legacy_8254_timer=Enable +usb_always_on=Disable +# EC +kbl_timeout=30 seconds +fn_ctrl_swap=Disable +# southbridge +power_on_after_fail=Disable diff --git a/src/mainboard/starlabs/labtop/cmos.layout b/src/mainboard/starlabs/labtop/cmos.layout new file mode 100644 index 0000000000..2601e9818a --- /dev/null +++ b/src/mainboard/starlabs/labtop/cmos.layout @@ -0,0 +1,107 @@ +# SPDX-License-Identifier: GPL-2.0-only + +# ----------------------------------------------------------------- +entries + +# Bank: 1 +# ----------------------------------------------------------------- +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: cpu +#400 8 r 0 reserved for century byte +408 1 e 1 hyper_threading +416 1 e 1 vtd +424 2 e 7 power_profile +432 1 e 5 me_state +440 4 h 0 me_state_counter +448 1 e 1 smi_handler + +# coreboot config options: Devices +504 1 e 1 wireless +512 1 e 1 webcam +520 1 e 1 microphone +528 1 e 1 legacy_8254_timer +536 1 e 1 usb_always_on + +# coreboot config options: EC +600 3 e 4 kbl_timeout +608 1 e 1 fn_ctrl_swap +616 2 e 8 max_charge +624 2 e 9 fan_mode + +# coreboot config options: southbridge +800 2 e 6 power_on_after_fail + +# coreboot config options: check sums +984 16 h 0 check_sum + +# Bank: 2 +# embedded controller settings (outside the checksummed area) +1024 8 h 1 fn_lock_state +1032 8 h 1 trackpad_state +1040 8 h 10 kbl_brightness +1048 8 h 1 kbl_state + +# ----------------------------------------------------------------- + +enumerations + +#ID value text +1 0 Disable +1 1 Enable + +2 0 Fallback +2 1 Normal + +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 + +4 0 30 seconds +4 1 1 minute +4 2 3 minutes +4 3 5 minutes +4 4 Never + +5 0 Enable +5 1 Disable + +6 0 Disable +6 1 Enable +6 2 Keep + +7 0 Power Saver +7 1 Balanced +7 2 Performance + +8 0 100% +8 1 80% +8 2 60% + +9 0 Normal +9 1 Aggressive +9 2 Quiet + +10 0 Off +10 1 Low +10 2 High +10 3 On + +# ----------------------------------------------------------------- +checksums + +checksum 392 983 984 diff --git a/src/mainboard/starlabs/labtop/dsdt.asl b/src/mainboard/starlabs/labtop/dsdt.asl new file mode 100644 index 0000000000..ebb3de37b5 --- /dev/null +++ b/src/mainboard/starlabs/labtop/dsdt.asl @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#define EC_GPE_SCI 0x6e + +#include +DefinitionBlock( + "dsdt.aml", + "DSDT", + ACPI_DSDT_REV_2, + OEM_ID, + ACPI_TABLE_CREATOR, + 0x20110725 +) +{ + #include + #include + #include + #include + + Device (\_SB.PCI0) + { + /* Tiger Lake */ + #include + #include + #include + + /* PS/2 Keyboard */ + #include + } + + #include + + /* Star Labs EC */ + #include + + Scope (\_SB) + { + /* HID Driver */ + #include + + /* Suspend Methods */ + #include + } + + #include "acpi/mainboard.asl" +} diff --git a/src/mainboard/starlabs/labtop/hda_verb.c b/src/mainboard/starlabs/labtop/hda_verb.c new file mode 100644 index 0000000000..371ab5d5f7 --- /dev/null +++ b/src/mainboard/starlabs/labtop/hda_verb.c @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include + +#define AZALIA_CODEC_ALC256 0x10ec0256 +#define AZALIA_CODEC_ALC269 0x10ec0269 + +static const u32 override_verb[] = { + AZALIA_PIN_CFG(0, 0x12, 0x411111f0), +}; + +static void disable_microphone(u8 *base) +{ + azalia_program_verb_table(base, override_verb, ARRAY_SIZE(override_verb)); +} + +void mainboard_azalia_program_runtime_verbs(u8 *base, u32 viddid) +{ + if (viddid == AZALIA_CODEC_ALC256 || viddid == AZALIA_CODEC_ALC269) { + printk(BIOS_DEBUG, "CMOS: viddid = %08x\n", viddid); + if (get_uint_option("microphone", 1) == 0) + disable_microphone(base); + } +} diff --git a/src/mainboard/starlabs/labtop/include/variants.h b/src/mainboard/starlabs/labtop/include/variants.h new file mode 100644 index 0000000000..c95d15bd72 --- /dev/null +++ b/src/mainboard/starlabs/labtop/include/variants.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef _BASEBOARD_VARIANTS_H_ +#define _BASEBOARD_VARIANTS_H_ + +#include + +/* + * The next set of functions return the gpio table and fill in the number of + * entries for each table. + */ +const struct pad_config *variant_gpio_table(size_t *num); +const struct pad_config *variant_early_gpio_table(size_t *num); + +void devtree_update(void); + +#endif /* _BASEBOARD_VARIANTS_H_ */ diff --git a/src/mainboard/starlabs/labtop/mainboard.c b/src/mainboard/starlabs/labtop/mainboard.c new file mode 100644 index 0000000000..8babae3943 --- /dev/null +++ b/src/mainboard/starlabs/labtop/mainboard.c @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char *smbios_mainboard_bios_version(void) +{ + return "8"; +} + +/* Get the Embedded Controller firmware version */ +void smbios_ec_revision(uint8_t *ec_major_revision, uint8_t *ec_minor_revision) +{ + u16 ec_version = it_get_version(); + + *ec_major_revision = ec_version >> 8; + *ec_minor_revision = ec_version & 0xff; +} + +const char *smbios_system_sku(void) +{ + return CONFIG_MAINBOARD_FAMILY; +} + +u8 smbios_mainboard_feature_flags(void) +{ + return SMBIOS_FEATURE_FLAGS_HOSTING_BOARD | SMBIOS_FEATURE_FLAGS_REPLACEABLE; +} + +const char *smbios_chassis_version(void) +{ + return smbios_mainboard_version(); +} + +const char *smbios_chassis_serial_number(void) +{ + return smbios_mainboard_serial_number(); +} diff --git a/src/mainboard/starlabs/labtop/ramstage.c b/src/mainboard/starlabs/labtop/ramstage.c new file mode 100644 index 0000000000..60e65ee8c4 --- /dev/null +++ b/src/mainboard/starlabs/labtop/ramstage.c @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include + +static void init_mainboard(void *chip_info) +{ + const struct pad_config *pads; + size_t num; + + pads = variant_gpio_table(&num); + gpio_configure_pads(pads, num); + + devtree_update(); +} + +struct chip_operations mainboard_ops = { + .init = init_mainboard, +}; diff --git a/src/mainboard/starlabs/labtop/variants/tgl/Makefile.inc b/src/mainboard/starlabs/labtop/variants/tgl/Makefile.inc new file mode 100644 index 0000000000..2a505c35c7 --- /dev/null +++ b/src/mainboard/starlabs/labtop/variants/tgl/Makefile.inc @@ -0,0 +1,9 @@ +## SPDX-License-Identifier: GPL-2.0-only + +bootblock-y += gpio.c + +romstage-y += romstage.c + +ramstage-y += devtree.c +ramstage-y += gpio.c +ramstage-y += hda_verb.c diff --git a/src/mainboard/starlabs/labtop/variants/tgl/board.fmd b/src/mainboard/starlabs/labtop/variants/tgl/board.fmd new file mode 100644 index 0000000000..932739e1e4 --- /dev/null +++ b/src/mainboard/starlabs/labtop/variants/tgl/board.fmd @@ -0,0 +1,18 @@ +# +# Manually defined FMD in order to ensure that space is reserved for the EC +# at the top of the BIOS region. +# +FLASH@0xff000000 0x1000000 { + SI_ALL@0x0 0x500000 { + SI_DESC@0x0 0x1000 + SI_ME@0x1000 + } + SI_BIOS@0x500000 0xB00000 { + EC@0x0 0x20000 + RW_MRC_CACHE@0x20000 0x10000 + SMMSTORE@0x30000 0x40000 + CONSOLE@0x70000 0x20000 + FMAP@0x90000 0x800 + COREBOOT(CBFS) + } +} diff --git a/src/mainboard/starlabs/labtop/variants/tgl/data.vbt b/src/mainboard/starlabs/labtop/variants/tgl/data.vbt new file mode 100644 index 0000000000000000000000000000000000000000..67dc497090904203697801f9b4c4c1520098992d GIT binary patch literal 8704 zcmeHMO-vg{6n^8Mwd0!N$S84WLWd+Gh6Y$Wgc4*aYs^oa@M8m^j#LRl?4~FVP#_hp zD&a~T=xwD+6{%Xqs#LY&M9)2xOC_XUP!3V0_P{ZUdguYEm!$4Dv;L_;Nt~#(q4Hb3 z-Pw6>-@NzD|Lp0pu2DW3?&}%u4_@ivk`koS-TKG4@1?Hr(8zdqa5OmH)jt%v!hfeD zG+qDaL!ty@$DBS@^@XPwk}2(`U1I9~=!24f3I3-W?tZj*RpSboF23k>R0B;jZv#Pj{80B!tk+><4pGH{M;~-cTd= zqnu`GSGvqYGjp>oJeW%HVWBh6hm-Tkx%ZQamMVuZv_W=o4PF9&0{#^ICHNcgci`{AKY|Y>V96w_ ze!uQ(AjeNsXzkf--uZ)?a=Pg~;NF~U_Hd5&$|^Y(1fGq6_ax@D`4T-bYzZo6HjP@- zwhl}B@T+nHw9h%wYhos+eC{w8p4RF!l+E5hl-Bw7370(%vx4f{mzXicJGnV#dbWj3 zH78%}IQOP&3Kopa^t3@A}u1E`-vR;M{mo94R zv9?G;q%7KR&@EK8o85Om%#@!VI2e? zG^HF1YLm7ZUrwl=sB8n$2Q!+Zu<(LyQu-iQPiT|8j3^$~QYONWs!lZ|$~An@(H|v} z<@8NcXWH{#N3#}dF4l#a9<}egt4r?igjFq&a%(wff1C0F6;a`8A zlY_P4L|Z$iO&$GR4t=|7DVx0rgo(r;E4Am}|tg5L78y!XR%IwEy`QCN_lPT5&&rs#r6nDMeDpJt~}(l*$kA z+l66=B3DrdIEISr6$B~>R1l~jP(h%AKm~yc0{<}ronM)b)7z6oX_JmasW@%36S=>1 z;#V(`_5~3)6Z2Ak58uK&D?aQQBt6)-9(HyYc%_$SfH~8S55{&>dPfpM*_g zk1b>(22I%{4@Dspr#eP?LiQwFgzR*cz$Jq%J-jg=#aBgKYPy9l9>m^E9hT-2KR^H2 dgd=qPsK!N#8@?EubYb&p_4j{}A;kTqzW|sLW-b5# literal 0 HcmV?d00001 diff --git a/src/mainboard/starlabs/labtop/variants/tgl/devicetree.cb b/src/mainboard/starlabs/labtop/variants/tgl/devicetree.cb new file mode 100644 index 0000000000..5c55dce396 --- /dev/null +++ b/src/mainboard/starlabs/labtop/variants/tgl/devicetree.cb @@ -0,0 +1,240 @@ +chip soc/intel/tigerlake +# CPU + # Enable Enhanced Intel SpeedStep + register "eist_enable" = "1" + + # Graphics + # IGD Displays + register "gfx" = "GMA_STATIC_DISPLAYS(0)" + # Not used but timings left for reference + # register "panel_cfg" = "{ + # .up_delay_ms = 0, // T3 + # .backlight_on_delay_ms = 0, // T7 + # .backlight_off_delay_ms = 50, // T9 + # .down_delay_ms = 0, // T10 + # .cycle_delay_ms = 500, // T12 + # .backlight_pwm_hz = 200, // PWM + # }" + + # FSP Memory + register "CnviBtCore" = "true" + register "CnviBtAudioOffload" = "1" + register "enable_c6dram" = "1" + register "HeciEnabled" = "1" + register "SaGv" = "SaGv_Enabled" + register "TcssD3ColdDisable" = "1" + + # FSP Silicon + # Serial I/O + register "SerialIoI2cMode" = "{ + [PchSerialIoIndexI2C0] = PchSerialIoPci, + }" + + register "SerialIoUartMode" = "{ + [PchSerialIoIndexUART2] = PchSerialIoSkipInit, + }" + + # Power + register "PchPmSlpS3MinAssert" = "2" # 50ms + register "PchPmSlpS4MinAssert" = "3" # 1s + register "PchPmSlpSusMinAssert" = "3" # 500ms + register "PchPmSlpAMinAssert" = "3" # 2s + + # Thermal + register "tcc_offset" = "10" + + # PM Util + # GPE configuration + # Note that GPE events called out in ASL code rely on this + # route. i.e. If this route changes then the affected GPE + # offset bits also need to be changed. + # sudo devmem2 0xfe001920 (pmc_bar + GPIO_GPE_CFG) + register "pmc_gpe0_dw0" = "GPP_B" + register "pmc_gpe0_dw1" = "GPP_C" + register "pmc_gpe0_dw2" = "GPP_E" + + # Enable the correct decode ranges on the LPC bus. + register "lpc_ioe" = "LPC_IOE_EC_4E_4F | + LPC_IOE_SUPERIO_2E_2F | + LPC_IOE_KBC_60_64 | + LPC_IOE_EC_62_66 | + LPC_IOE_LGE_200" + + # PCIe Clock + register "PcieClkSrcClkReq[0]" = "PCIE_CLK_NOTUSED" + register "PcieClkSrcClkReq[1]" = "PCIE_CLK_NOTUSED" + register "PcieClkSrcClkReq[2]" = "PCIE_CLK_NOTUSED" + register "PcieClkSrcClkReq[4]" = "PCIE_CLK_NOTUSED" + register "PcieClkSrcClkReq[5]" = "PCIE_CLK_NOTUSED" + register "PcieClkSrcClkReq[6]" = "PCIE_CLK_NOTUSED" + +# Actual device tree. + device cpu_cluster 0 on + device lapic 0 on end + end + + device domain 0 on + device pci 00.0 on end # Host Bridge + device pci 02.0 on end # Integrated Graphics Device + device pci 04.0 on # SA Thermal Device + register "Device4Enable" = "1" + end + device pci 05.0 off end # IPU + device pci 06.0 off end # PEG60 + device pci 07.0 on end # TBT_PCIe0 + device pci 07.1 off end # TBT_PCIe1 + device pci 07.2 off end # TBT_PCIe2 + device pci 07.3 off end # TBT_PCIe3 + device pci 08.0 on end # Gaussian Mixture Model + device pci 09.0 off end # NPK + device pci 0a.0 off end # Crash-log SRAM + device pci 0d.0 on # USB xHCI + register "UsbTcPortEn" = "1" + register "TcssXhciEn" = "1" + register "TcssAuxOri" = "0" + end + device pci 0d.1 off end # USB xDCI (OTG) + device pci 0d.2 on # TBT DMA0 + chip drivers/intel/usb4/retimer + register "dfp[0].power_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_A23)" + use tcss_usb3_port1 as dfp[0].typec_port + device generic 0 on end + end + end + device pci 0d.3 off end # TBT + device pci 0e.0 off end # VMD + device pci 10.6 off end + device pci 10.7 off end + device pci 12.0 off end # Thermal Subsystem + device pci 12.6 off end # GSPI #2 + device pci 14.0 on # USB xHCI + ### USB 2.0 Devices + # Motherboard USB Type C + register "usb2_ports[0]" = "USB2_PORT_TYPE_C(OC_SKIP)" + # Motherboard USB 3.0 + register "usb2_ports[1]" = "USB2_PORT_MID(OC_SKIP)" + # Daughterboard USB 3.0 + register "usb2_ports[2]" = "USB2_PORT_MID(OC_SKIP)" + # Internal Webcam + register "usb2_ports[3]" = "USB2_PORT_MID(OC_SKIP)" + # Daughterboard SD Card + register "usb2_ports[5]" = "USB2_PORT_MID(OC_SKIP)" + # Internal Bluetooth + register "usb2_ports[9]" = "USB2_PORT_MID(OC_SKIP)" + + ### USB 3.0 Devices + # Motherboard USB Type C + register "usb3_ports[0]" = "USB3_PORT_DEFAULT(OC_SKIP)" + # Motherboard USB 3.0 + register "usb3_ports[1]" = "USB3_PORT_DEFAULT(OC_SKIP)" + # Daughterboard USB 3.0 + register "usb3_ports[2]" = "USB3_PORT_DEFAULT(OC_SKIP)" + + ### Thunderbolt 4.0 Devices + # Motherboard Thunderbolt 4.0 + register "tcss_ports[0]" = "TCSS_PORT_DEFAULT(OC_SKIP)" + end + device pci 14.1 off end # USB xDCI (OTG) + device pci 14.2 on end # USB xDCI (OTG) + device pci 14.3 on # CNVi + chip drivers/wifi/generic + register "wake" = "GPE0_PME_B0" + device generic 0 on end + end + end + device pci 15.0 on # I2C0 + chip drivers/i2c/hid + register "generic.hid" = ""STAR0001"" + register "generic.desc" = ""Touchpad"" + register "generic.irq" = "ACPI_IRQ_LEVEL_LOW(GPP_C8_IRQ)" + register "generic.probed" = "1" + register "hid_desc_reg_offset" = "0x20" + device i2c 2c on end + end + end + device pci 15.1 off end # I2C1 + device pci 15.2 off end # I2C2 + device pci 15.3 off end # I2C3 + 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 Redirection + device pci 16.4 off end # Management Engine Interface 3 + device pci 16.5 off end # Management Engine Interface 4 + device pci 17.0 on # SATA + register "SataSalpSupport" = "1" + # Port 1 + register "SataPortsEnable[1]" = "1" + register "SataPortsDevSlp[1]" = "1" + end + device pci 19.0 off end # I2C4 + device pci 19.1 off end # I2C5 + device pci 19.2 on end # UART #2 + device pci 1c.0 off end # PCI Express Port 1 + device pci 1c.1 off end # PCI Express Port 2 + device pci 1c.2 off end # PCI Express Port 3 + device pci 1c.3 off end # PCI Express Port 4 + device pci 1c.4 off end # PCI Express Port 5 + device pci 1c.5 off end # PCI Express Port 6 + device pci 1c.6 off end # PCI Express Port 7 + device pci 1c.7 off end # PCI Express Port 8 + device pci 1d.0 on # PCI Express Port 9 (SSD x4) + register "HybridStorageMode" = "0" + register "PcieRpEnable[8]" = "1" + register "PcieRpLtrEnable[8]" = "1" + register "PcieClkSrcUsage[3]" = "0x08" + register "PcieClkSrcClkReq[3]" = "3" + smbios_slot_desc "SlotTypeM2Socket3" "SlotLengthOther" "M.2/M 2280" "SlotDataBusWidth4X" + end + device pci 1d.1 off end # PCI Express Port 10 + device pci 1d.2 off end # PCI Express Port 11 + device pci 1d.3 off end # PCI Express Port 12 + device pci 1e.0 off end # UART #0 + device pci 1e.1 off end # UART #1 + device pci 1e.2 off end # GSPI #0 + device pci 1e.3 on end # GSPI #1 + device pci 1f.0 on # LPC Interface + register "gen1_dec" = "0x000c1641" + register "gen2_dec" = "0x000c0681" + register "gen3_dec" = "0x000c0081" + + chip drivers/pc80/tpm + device pnp 0c31.0 on end + end + + chip ec/starlabs/merlin + # Port pair 4Eh/4Fh + device pnp 4e.00 on end # IO Interface + device pnp 4e.01 off end # Com 1 + device pnp 4e.02 off end # Com 2 + device pnp 4e.04 off end # System Wake-Up + device pnp 4e.05 off end # PS/2 Mouse + device pnp 4e.06 on # PS/2 Keyboard + io 0x60 = 0x0060 + io 0x62 = 0x0064 + irq 0x70 = 1 + end + device pnp 4e.0a off end # Consumer IR + device pnp 4e.0f off end # Shared Memory/Flash Interface + device pnp 4e.10 off end # RTC-like Timer + device pnp 4e.11 off end # Power Management Channel 1 + device pnp 4e.12 off end # Power Management Channel 2 + device pnp 4e.13 off end # Serial Peripheral Interface + device pnp 4e.14 off end # Platform EC Interface + device pnp 4e.17 off end # Power Management Channel 3 + device pnp 4e.18 off end # Power Management Channel 4 + device pnp 4e.19 off end # Power Management Channel 5 + end + end + device pci 1f.1 off end # P2SB + device pci 1f.2 hidden end # Power Management Controller + device pci 1f.3 on # Intel HDA + subsystemid 0x10ec 0x1200 + register "PchHdaAudioLinkHdaEnable" = "1" + end + device pci 1f.4 on end # SMBus + device pci 1f.5 on end # PCH SPI + device pci 1f.6 off end # GbE + device pci 1f.7 off end # TH + end +end diff --git a/src/mainboard/starlabs/labtop/variants/tgl/devtree.c b/src/mainboard/starlabs/labtop/variants/tgl/devtree.c new file mode 100644 index 0000000000..034877c66e --- /dev/null +++ b/src/mainboard/starlabs/labtop/variants/tgl/devtree.c @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include +#include +#include + +void devtree_update(void) +{ + config_t *cfg = config_of_soc(); + + struct soc_power_limits_config *soc_conf_2core = + &cfg->power_limits_config[POWER_LIMITS_U_2_CORE]; + + struct soc_power_limits_config *soc_conf_4core = + &cfg->power_limits_config[POWER_LIMITS_U_4_CORE]; + + struct device *nic_dev = pcidev_on_root(0x14, 3); + + /* Update PL1 & PL2 based on CMOS settings */ + switch (get_uint_option("power_profile", 0)) { + case 1: + soc_conf_2core->tdp_pl1_override = 15; + soc_conf_4core->tdp_pl1_override = 15; + soc_conf_2core->tdp_pl2_override = 25; + soc_conf_4core->tdp_pl2_override = 25; + break; + case 2: + soc_conf_2core->tdp_pl1_override = 28; + soc_conf_4core->tdp_pl1_override = 28; + soc_conf_2core->tdp_pl2_override = 40; + soc_conf_4core->tdp_pl2_override = 40; + break; + default: + disable_turbo(); + soc_conf_2core->tdp_pl1_override = 15; + soc_conf_4core->tdp_pl1_override = 15; + soc_conf_2core->tdp_pl2_override = 15; + soc_conf_4core->tdp_pl2_override = 15; + break; + } + + /* Enable/Disable Wireless based on CMOS settings */ + if (get_uint_option("wireless", 1) == 0) + nic_dev->enabled = 0; + + /* Enable/Disable Webcam based on CMOS settings */ + if (get_uint_option("webcam", 1) == 0) + cfg->usb2_ports[3].enable = 0; +} diff --git a/src/mainboard/starlabs/labtop/variants/tgl/gpio.c b/src/mainboard/starlabs/labtop/variants/tgl/gpio.c new file mode 100644 index 0000000000..a541c0724b --- /dev/null +++ b/src/mainboard/starlabs/labtop/variants/tgl/gpio.c @@ -0,0 +1,224 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +/* + * All definitions are taken from a comparison of the output of "inteltool -a" + * using the stock BIOS and with coreboot. + */ + +/* Early pad configuration in romstage. */ +const struct pad_config early_gpio_table[] = { + PAD_CFG_NF(GPP_C20, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_C21, NONE, DEEP, NF1), +}; + +const struct pad_config *variant_early_gpio_table(size_t *num) +{ + *num = ARRAY_SIZE(early_gpio_table); + return early_gpio_table; +} + +/* Pad configuration in ramstage.c */ +const struct pad_config gpio_table[] = { + PAD_CFG_NF(GPD0, UP_20K, PWROK, NF1), + PAD_CFG_NF(GPD1, NATIVE, PWROK, NF1), + PAD_CFG_NF(GPD2, NATIVE, PWROK, NF1), + PAD_CFG_NF(GPD3, UP_20K, PWROK, NF1), + PAD_CFG_NF(GPD4, NONE, PWROK, NF1), + PAD_CFG_NF(GPD5, NONE, PWROK, NF1), + PAD_CFG_NF(GPD6, NONE, PWROK, NF1), + PAD_CFG_GPO(GPD7, 0, PWROK), + PAD_CFG_NF(GPD8, NONE, PWROK, NF1), + PAD_CFG_NF(GPD9, NONE, PWROK, NF1), + PAD_CFG_NF(GPD10, NONE, PWROK, NF1), + PAD_CFG_GPO(GPD11, 0, PWROK), + PAD_CFG_NF(GPP_A0, UP_20K, DEEP, NF1), + PAD_CFG_NF(GPP_A1, UP_20K, DEEP, NF1), + PAD_CFG_NF(GPP_A2, UP_20K, DEEP, NF1), + PAD_CFG_NF(GPP_A3, UP_20K, DEEP, NF1), + PAD_CFG_NF(GPP_A4, UP_20K, DEEP, NF1), + PAD_CFG_NF(GPP_A5, DN_20K, DEEP, NF1), + PAD_CFG_NF(GPP_A6, NONE, DEEP, NF1), + PAD_NC(GPP_A7, NONE), + PAD_CFG_NF(GPP_A8, NONE, DEEP, NF2), + PAD_CFG_NF(GPP_A9, NONE, DEEP, NF3), + PAD_NC(GPP_A10, NONE), + PAD_CFG_GPO(GPP_A11, 1, PLTRST), + PAD_CFG_NF(GPP_A12, UP_20K, DEEP, NF1), + PAD_NC(GPP_A13, NONE), + PAD_CFG_GPO(GPP_A14, 0, PLTRST), + PAD_NC(GPP_A15, NONE), + PAD_CFG_NF(GPP_A16, NONE, DEEP, NF1), + PAD_NC(GPP_A17, NONE), + PAD_CFG_NF(GPP_A18, NONE, DEEP, NF1), + PAD_NC(GPP_A19, NONE), + PAD_NC(GPP_A20, NONE), + PAD_NC(GPP_A21, NONE), + PAD_NC(GPP_A22, NONE), + PAD_CFG_GPO(GPP_A23, 0, PLTRST), + PAD_CFG_NF(GPP_B0, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_B1, NONE, DEEP, NF1), + PAD_NC(GPP_B2, NONE), + PAD_NC(GPP_B3, NONE), + PAD_NC(GPP_B4, NONE), + PAD_NC(GPP_B5, NONE), + PAD_NC(GPP_B6, NONE), + PAD_NC(GPP_B7, NONE), + PAD_NC(GPP_B8, NONE), + PAD_CFG_NF(GPP_B9, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_B10, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_B11, NONE, PWROK, NF1), + PAD_CFG_NF(GPP_B12, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_B13, NONE, DEEP, NF1), + PAD_CFG_GPO(GPP_B14, 1, PLTRST), + PAD_NC(GPP_B15, NONE), + PAD_NC(GPP_B16, NONE), + PAD_CFG_GPO(GPP_B17, 0, PWROK), + PAD_CFG_GPO(GPP_B18, 0, DEEP), + PAD_NC(GPP_B19, NONE), + PAD_NC(GPP_B20, NONE), + PAD_NC(GPP_B21, NONE), + PAD_CFG_GPO(GPP_B22, 0, DEEP), + PAD_CFG_GPO(GPP_B23, 0, DEEP), + PAD_CFG_NF(GPP_C0, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_C1, NONE, DEEP, NF1), + PAD_CFG_GPO(GPP_C2, 0, DEEP), + PAD_CFG_NF(GPP_C3, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_C4, NONE, DEEP, NF1), + PAD_CFG_GPO(GPP_C5, 0, DEEP), + PAD_CFG_NF(GPP_C6, NONE, PWROK, NF1), + PAD_CFG_NF(GPP_C7, NONE, PWROK, NF1), + PAD_CFG_NF(GPP_C8, NONE, DEEP, NF1), + PAD_NC(GPP_C9, NONE), + PAD_CFG_GPO(GPP_C10, 0, PWROK), + PAD_CFG_GPO(GPP_C11, 0, PWROK), + PAD_CFG_NF(GPP_C12, NONE, DEEP, NF1), + PAD_CFG_GPO(GPP_C13, 1, PLTRST), + PAD_NC(GPP_C14, NONE), + PAD_NC(GPP_C15, NONE), + PAD_CFG_NF(GPP_C16, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_C17, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_C18, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_C19, NONE, DEEP, NF1), + PAD_NC(GPP_C22, NONE), + PAD_NC(GPP_C23, NONE), + PAD_NC(GPP_D0, NONE), + PAD_NC(GPP_D1, NONE), + PAD_CFG_GPI(GPP_D2, NONE, DEEP), + PAD_CFG_GPI(GPP_D3, NONE, DEEP), + PAD_NC(GPP_D4, NONE), + PAD_CFG_NF(GPP_D5, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_D6, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_D7, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_D8, NONE, DEEP, NF1), + PAD_NC(GPP_D9, NATIVE), + PAD_NC(GPP_D10, NATIVE), + PAD_NC(GPP_D11, NATIVE), + PAD_NC(GPP_D12, NATIVE), + PAD_NC(GPP_D13, NONE), + PAD_NC(GPP_D14, NONE), + PAD_NC(GPP_D15, NONE), + PAD_CFG_GPO(GPP_D16, 1, PLTRST), + PAD_CFG_GPI(GPP_D17, NONE, DEEP), + PAD_CFG_GPI(GPP_D18, NONE, DEEP), + PAD_CFG_TERM_GPO(GPP_D19, 1, UP_20K, DEEP), + PAD_NC(GPP_E0, NONE), + PAD_NC(GPP_E1, NONE), + PAD_NC(GPP_E2, NONE), + PAD_CFG_NF(GPP_E3, NONE, DEEP, NF1), + PAD_NC(GPP_E4, NONE), + PAD_NC(GPP_E5, NONE), + PAD_NC(GPP_E6, NONE), + PAD_NC(GPP_E7, NONE), + PAD_NC(GPP_E8, NONE), + PAD_CFG_NF(GPP_E9, NONE, DEEP, NF1), + PAD_NC(GPP_E10, NONE), + PAD_NC(GPP_E11, NONE), + PAD_NC(GPP_E12, NONE), + PAD_NC(GPP_E13, NONE), + PAD_CFG_NF(GPP_E14, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_E15, NONE, DEEP, NF2), + PAD_CFG_NF(GPP_E16, NONE, DEEP, NF2), + PAD_NC(GPP_E17, NONE), + PAD_NC(GPP_E18, NATIVE), + PAD_NC(GPP_E19, NATIVE), + PAD_NC(GPP_E20, NATIVE), + PAD_NC(GPP_E21, NATIVE), + PAD_CFG_NF(GPP_E22, DN_20K, DEEP, NF2), + PAD_CFG_GPO(GPP_E23, 0, DEEP), + PAD_CFG_NF(GPP_F0, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_F1, UP_20K, DEEP, NF1), + PAD_CFG_NF(GPP_F2, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_F3, UP_20K, DEEP, NF1), + PAD_CFG_NF(GPP_F4, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_F5, NONE, DEEP, NF2), + PAD_NC(GPP_F6, NONE), + PAD_CFG_GPO(GPP_F7, 1, PLTRST), + PAD_NC(GPP_F8, NONE), + PAD_CFG_GPO(GPP_F9, 1, PLTRST), + PAD_CFG_GPO(GPP_F10, 0, DEEP), + PAD_NC(GPP_F11, NONE), + PAD_NC(GPP_F12, NONE), + PAD_NC(GPP_F13, NONE), + PAD_NC(GPP_F14, NONE), + PAD_NC(GPP_F15, NONE), + PAD_NC(GPP_F16, NONE), + PAD_NC(GPP_F17, NONE), + PAD_NC(GPP_F18, NONE), + PAD_NC(GPP_F19, NONE), + PAD_CFG_NF(GPP_F20, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_F21, NONE, DEEP, NF1), + PAD_NC(GPP_F22, NONE), + PAD_NC(GPP_F23, NONE), + PAD_CFG_GPO(GPP_H0, 0, DEEP), + PAD_CFG_GPO(GPP_H1, 0, DEEP), + PAD_CFG_GPO(GPP_H2, 0, DEEP), + PAD_NC(GPP_H3, NONE), + PAD_CFG_NF(GPP_H4, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_H5, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_H6, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_H7, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_H8, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_H9, NONE, DEEP, NF1), + PAD_NC(GPP_H10, NONE), + PAD_NC(GPP_H11, NONE), + PAD_NC(GPP_H12, NONE), + PAD_NC(GPP_H13, NONE), + PAD_CFG_GPO(GPP_H14, 1, PLTRST), + PAD_NC(GPP_H15, NONE), + PAD_CFG_NF(GPP_H16, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_H17, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_H18, NONE, DEEP, NF1), + PAD_NC(GPP_H19, NONE), + PAD_NC(GPP_H20, NONE), + PAD_NC(GPP_H21, NONE), + PAD_NC(GPP_H22, NONE), + PAD_CFG_GPO(GPP_H23, 0, DEEP), + PAD_CFG_NF(GPP_R0, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_R1, NATIVE, DEEP, NF1), + PAD_CFG_NF(GPP_R2, NATIVE, DEEP, NF1), + PAD_CFG_NF(GPP_R3, NATIVE, DEEP, NF1), + PAD_CFG_NF(GPP_R4, NONE, DEEP, NF1), + PAD_CFG_GPO(GPP_R5, 0, PLTRST), + PAD_CFG_GPO(GPP_R6, 1, PLTRST), + PAD_NC(GPP_R7, NONE), + PAD_NC(GPP_S0, NONE), + PAD_NC(GPP_S1, NONE), + PAD_NC(GPP_S2, NONE), + PAD_NC(GPP_S3, NONE), + PAD_NC(GPP_S4, NONE), + PAD_NC(GPP_S5, NONE), + PAD_NC(GPP_S6, NONE), + PAD_NC(GPP_S7, NONE), + PAD_CFG_NF(GPP_T2, DN_20K, DEEP, NF2), + PAD_CFG_NF(GPP_T3, DN_20K, DEEP, NF2), + PAD_NC(GPP_U4, NONE), + PAD_NC(GPP_U5, NONE), +}; + +const struct pad_config *variant_gpio_table(size_t *num) +{ + *num = ARRAY_SIZE(gpio_table); + return gpio_table; +} diff --git a/src/mainboard/starlabs/labtop/variants/tgl/hda_verb.c b/src/mainboard/starlabs/labtop/variants/tgl/hda_verb.c new file mode 100644 index 0000000000..7903d96259 --- /dev/null +++ b/src/mainboard/starlabs/labtop/variants/tgl/hda_verb.c @@ -0,0 +1,211 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +const u32 cim_verb_data[] = { + /* coreboot specific header */ + 0x10ec0256, /* Codec Vendor / Device ID: Realtek ALC256 */ + 0x10ec1200, /* Subsystem ID */ + 38, /* Number of jacks (NID entries) */ + + /* Reset Codec First */ + AZALIA_RESET(0x1), + + /* HDA Codec Subsystem ID: 0x10EC1200 */ + AZALIA_SUBVENDOR(0, 0x10ec1200), + + /* Pin Widget Verb-table */ + AZALIA_PIN_CFG(0, 0x01, 0x00000000), + AZALIA_PIN_CFG(0, 0x12, 0x90a61120), + AZALIA_PIN_CFG(0, 0x13, 0x40000000), + AZALIA_PIN_CFG(0, 0x14, 0x90171110), + AZALIA_PIN_CFG(0, 0x18, 0x411111f0), + AZALIA_PIN_CFG(0, 0x19, 0x04ab1020), + AZALIA_PIN_CFG(0, 0x1a, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1b, 0x40700001), + AZALIA_PIN_CFG(0, 0x1d, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1e, 0x411111f0), + AZALIA_PIN_CFG(0, 0x21, 0x042b1010), + + /* Reset to D0 */ + 0x00170500, + 0x00170500, + 0x00170500, + 0x00170500, + + /* Reset Register */ + 0x0205001A, + 0x02048003, + 0x0205001A, + 0x0204C003, + + /* ALC256 Default 1 */ + 0x0205003C, + 0x02040354, + 0x0205003C, + 0x02040314, + + /* ALC256 Default 2 */ + 0x02050040, + 0x02049800, + 0x02050034, + 0x0204023C, + + /* ALC256 Default 3 */ + 0x05750003, + 0x05740DA3, + 0x02050046, + 0x02040004, + + /* ALC256 Default 4 */ + 0x0205001B, + 0x02040A4B, + 0x02050008, + 0x02046A6C, + + /* Jack Detection */ + 0x02050009, + 0x0204E003, + 0x0205000A, + 0x02047770, + + /* Combo Jack TRS setting */ + 0x02050038, + 0x02047901, + + /* Disable Microphone Security */ + 0x0205000D, + 0x0204A020, + + /* Enable ADC clock */ + 0x02050005, + 0x02040700, + + /* Speaker Enable */ + 0x0205000C, + 0x020401EF, + + /* + * Equalizer: + * + * AGC + * Threshold: - 6.00 dB + * Front Boost: + 6.00 dB + * Post Boost: + 6.00 dB + * + * Low Pass Filter + * Boost Gain: Enabled + * BW: 200Hz + * Gain: + 4.00 dB + * + * Band Pass Filter 1 + * Fc: 240Hz + * BW: 400Hz + * Gain: - 4.00 dB + * + * Band Pass Filter 2 + * Fc: 16000Hz + * BW: 1000Hz + * Gain: + 12.00 dB + * + * High Pass Filter + * Boost Gain: Enabled + * BW: 200Hz + * Gain: - 4.00 dB + * + * Class D Amp + * Power: 2.5W + * Resistance: 4ohms + * + * EQ Output + * Left: + 0.00 dB + * Right: + 0.00 dB + * + * VARQ + * Q: 0.707 + */ + + 0x05350000, + 0x053404DA, + 0x0535001d, + 0x05340800, + + 0x0535001e, + 0x05340800, + 0x05350003, + 0x05341F7A, + + 0x05350004, + 0x0534FA18, + 0x0535000F, + 0x0534C295, + + 0x05350010, + 0x05341D73, + 0x05350011, + 0x0534FA18, + + 0x05350012, + 0x05341E08, + 0x05350013, + 0x05341C10, + + 0x05350014, + 0x05342FB2, + 0x0535001B, + 0x05341F2C, + + 0x0535001C, + 0x0534095C, + 0x05450000, + 0x05440000, + + 0x0545001d, + 0x05440800, + 0x0545001e, + 0x05440800, + + 0x05450003, + 0x05441F7A, + 0x05450004, + 0x0544FA18, + + 0x0545000F, + 0x0544C295, + 0x05450010, + 0x05441D73, + + 0x05450011, + 0x0544FA18, + 0x05450012, + 0x05441E08, + + 0x05450013, + 0x05441C10, + 0x05450014, + 0x05442FB2, + + 0x0545001B, + 0x05441F2C, + 0x0545001C, + 0x0544095C, + + 0x05350000, + 0x0534C4DA, + 0x02050038, + 0x02044901, + + 0x02050013, + 0x0204422F, + 0x02050016, + 0x02044E50, + + 0x02050012, + 0x0204EBC4, + 0x02050020, + 0x020451FF, +}; + +const u32 pc_beep_verbs[] = {}; + +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/starlabs/labtop/variants/tgl/romstage.c b/src/mainboard/starlabs/labtop/variants/tgl/romstage.c new file mode 100644 index 0000000000..dae2142a91 --- /dev/null +++ b/src/mainboard/starlabs/labtop/variants/tgl/romstage.c @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include + +void mainboard_memory_init_params(FSPM_UPD *mupd) +{ + const struct mb_cfg mem_config = { + .type = MEM_TYPE_DDR4, + }; + + const bool half_populated = false; + + const struct mem_spd ddr4_spd_info = { + .topo = MEM_TOPO_DIMM_MODULE, + .smbus = { + [0] = { + .addr_dimm[0] = 0x50, + }, + [1] = { + .addr_dimm[0] = 0x52, + }, + }, + }; + + memcfg_init(&mupd->FspmConfig, &mem_config, &ddr4_spd_info, half_populated); + + const uint8_t vtd = get_uint_option("vtd", 1); + mupd->FspmConfig.VtdDisable = !vtd; + + const uint8_t ht = get_uint_option("hyper_threading", + mupd->FspmConfig.HyperThreading); + mupd->FspmConfig.HyperThreading = ht; +};