coreboot-gerrit
Threads by month
- ----- 2026 -----
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
June 2023
- 1 participants
- 5391 discussions
Change in coreboot[master]: mb/yanling: Add Yanling YL-KBR6L mainboard + doc
by Thomas (Code Review) June 8, 2024
by Thomas (Code Review) June 8, 2024
June 8, 2024
Thomas has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/48769 )
Change subject: mb/yanling: Add Yanling YL-KBR6L mainboard + doc
......................................................................
mb/yanling: Add Yanling YL-KBR6L mainboard + doc
The Yanling YL-KBR6L (aka Yanling N18) is a Protecli FW6 with a newer
CPUs (i5-8250U), different SuperIO chip (ITE IT8613F), slightly
different (newer?) flash memory chip (MX25L6436F) and support for a
mPCIe modem.
Working:
- USB 3.0 front ports (SeaBIOS, Linux and FreeBSD)
- 6 Ethernet ports
- HDMI port with libgfxinit and VGA Option ROM
- flashrom
- PCIe WiFi
- SATA and mSATA
- mPCIe Modem in mSATA slot (tested with Simcom SIM7100E mPCIe)
- Super I/O serial port 0 (RS232 via front RJ45 connector)
- SeaBIOS payload (version rel-1.14.0)
- Booting Ubuntu 20.04, FreeBSD 12.2
- 64GB RAM (tested with Crucial CT2K32G4SFD8266)
Untested (same as Protectli FW6):
- Internal USB 2.0 headers
- Boot with cleaned ME
Misc:
- Removed "ProbelessTrace" in devicetree as done for other boards by
coreboot.
Change-Id: Icbc18914670f87f0943b371400c509ff0eeacf6a
Signed-off-by: Thomas Kupper <thomas.kupper(a)gmail.com>
---
M Documentation/mainboard/index.md
A Documentation/mainboard/yanling/yl-kbr6l.md
A Documentation/mainboard/yanling/yl-kbr6l_front.jpg
A src/mainboard/yanling/Kconfig
A src/mainboard/yanling/Kconfig.name
A src/mainboard/yanling/yl_kbr6l/Kconfig
A src/mainboard/yanling/yl_kbr6l/Kconfig.name
A src/mainboard/yanling/yl_kbr6l/Makefile.inc
A src/mainboard/yanling/yl_kbr6l/acpi/ec.asl
A src/mainboard/yanling/yl_kbr6l/acpi/superio.asl
A src/mainboard/yanling/yl_kbr6l/board_info.txt
A src/mainboard/yanling/yl_kbr6l/bootblock.c
A src/mainboard/yanling/yl_kbr6l/data.vbt
A src/mainboard/yanling/yl_kbr6l/devicetree.cb
A src/mainboard/yanling/yl_kbr6l/dsdt.asl
A src/mainboard/yanling/yl_kbr6l/gma-mainboard.ads
A src/mainboard/yanling/yl_kbr6l/gpio.h
A src/mainboard/yanling/yl_kbr6l/ramstage.c
A src/mainboard/yanling/yl_kbr6l/romstage.c
19 files changed, 820 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/69/48769/1
diff --git a/Documentation/mainboard/index.md b/Documentation/mainboard/index.md
index 95efe55..2480069 100644
--- a/Documentation/mainboard/index.md
+++ b/Documentation/mainboard/index.md
@@ -179,3 +179,7 @@
## UP
- [Squared](up/squared/index.md)
+
+## Yanling
+
+- [YL-KBR6L](yanling/yl-kbr6l.md)
\ No newline at end of file
diff --git a/Documentation/mainboard/yanling/yl-kbr6l.md b/Documentation/mainboard/yanling/yl-kbr6l.md
new file mode 100644
index 0000000..28d1d56
--- /dev/null
+++ b/Documentation/mainboard/yanling/yl-kbr6l.md
@@ -0,0 +1,133 @@
+# Yanling YL-KBR6L
+
+This board and therefore its documentation is very, very similar to the Protectli FW6. This document is based on theirs, all praise to 3mdeb/Protectli.
+
+This page describes how to run coreboot on the [Yanling YL-KBR6L], or [Yanling N18] as it seems to be called officially (and its three CPU variants).
+
+
+
+## Required proprietary blobs
+
+To build a minimal working coreboot image some blobs are required (assuming
+only the BIOS region is being modified).
+
+```eval_rst
++-----------------+---------------------------------+---------------------+
+| Binary file | Apply | Required / Optional |
++=================+=================================+=====================+
+| FSP-M, FSP-S | Intel Firmware Support Package | Required |
++-----------------+---------------------------------+---------------------+
+| microcode | CPU microcode | Required |
++-----------------+---------------------------------+---------------------+
+| vgabios | VGA Option ROM | Optional |
++-----------------+---------------------------------+---------------------+
+```
+
+FSP-M and FSP-S are obtained after splitting the Kaby Lake FSP binary (done
+automatically by the coreboot build system and included into the image) from
+the `3rdparty/fsp` submodule.
+
+Microcode updates are automatically included into the coreboot image by build
+system from the `3rdparty/intel-microcode` submodule.
+
+VGA Option ROM is not required to boot, but if one needs graphics in pre-OS
+stage, it should be included (if not using libgfxinit).
+
+## Flashing coreboot
+
+### Internal programming
+
+The main SPI flash can be accessed using [flashrom]. The first version
+supporting the chipset is flashrom v1.1. Firmware an be easily flashed
+with internal programmer (either BIOS region or full image).
+
+### External programming
+
+The system has an internal flash chip which is a 8 MiB soldered SOIC-8 chip.
+This chip is located on the bottom side of the case (the radiator side). One
+has to remove all screws (in order): 4 top cover screws, 4 side cover screws
+(one side is enough), 4 mainboard screws, 4 CPU screws (under DIMMs). Lift up
+the mainboard and turn around it. The flash chip is near the SoC on the DIMM
+slots side. Use a clip (or solder the wires) to program the chip. Specifically,
+it's a Macronix MX25L6436F M2I-08Q (3V) - [datasheet][MX25L6436F].
+
+## Known issues
+
+- assume the same as for Protectli FW6:
+
+- After flashing with external programmer it is always required to reset RTC
+ with jumper or disconnect coin cell temporarily. Only then the platform will
+ boot after flashing.
+- FW6A does not always work reliably with all DIMMs. Linux happens to hang or
+ gives many panics. This issue was present also with vendor BIOS.
+- Sometimes FSPMemoryInit return errors or hangs (especially with 2 DIMMs
+ connected). A workaround is to power cycle the board (even a few times) or
+ temporarily disconnect DIMM when platform is powered off.
+- When using libgfxinit and SeaBIOS bootsplash, the red color is dim
+
+## Untested
+
+- assume the same as for Protectli FW6:
+
+Not all mainboard's peripherals and functions were tested because of lack of
+the cables or not being populated on the board case.
+
+- Internal USB 2.0 headers
+- Boot with cleaned ME
+
+## Working
+
+- USB 3.0 front ports (SeaBIOS and Linux)
+- 6 Ethernet ports
+- HDMI port with libgfxinit and VGA Option ROM
+- flashrom
+- PCIe WiFi
+- SATA and mSATA
+- mPCIe Modem in mSATA slot (tested with Simcom SIM7100E mPCIe)
+- Super I/O serial port 0 (RS232 via front RJ45 connector)
+- SeaBIOS payload (version rel-1.14)
+- Booting Ubuntu 20.04, FreeBSD 12.2
+- 64GB RAM (tested with Crucial CT2K32G4SFD8266)
+
+## Technology
+
+```eval_rst
++---------------------+-----------------------------------------------+
+| CPU | [Intel Core i5-8250U] |
++---------------------+-----------------------------------------------+
+| PCH | Kaby Lake U w/ iHDCP2.2 Premium |
++---------------------+-----------------------------------------------+
+| Super I/O, EC | ITE IT8613F |
++---------------------+-----------------------------------------------+
+| Coprocessor | Intel Management Engine |
++---------------------+-----------------------------------------------+
+| Ethernet Controller | 6x Intel I211AT |
++---------------------+-----------------------------------------------+
+```
+Information about the PCH can be found in [Intel 7th and 8th gen datasheet vol 1] and [Intel 7th and 8th gen datasheet vol 2].
+
+## Ports
+
+```eval_rst
++---------------------+-----------------------------------------------+
+| Ethernet | 6x 1GbE |
++---------------------+-----------------------------------------------+
+| USB | 4x USB 3.0 |
++---------------------+-----------------------------------------------+
+| Serial/COM | 1x RJ-45 serial port |
++---------------------+-----------------------------------------------+
+| SATA | 1x mSATA (port 0) + 1x SATA 3.0 (port 1) |
++---------------------+-----------------------------------------------+
+| Cellular Modem | 1x mPCIe, shared with mSATA slot, nano-SIM |
++---------------------+-----------------------------------------------+
+| Wifi/Bluetooth | 1x mPCIe slot, under mSATA/Modem, |
+| | supports half-size cards only |
++---------------------+-----------------------------------------------+
+```
+
+[flashrom]: https://flashrom.org/Flashrom
+[Intel 7th and 8th gen datasheet vol 1]: https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/7th…
+[Intel 7th and 8th gen datasheet vol 2]: https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/7th…
+[MX25L6436F]: https://www.mxic.com.tw/Lists/Datasheet/Attachments/7405/MX25L6436F,%203V,%…
+[Yanling YL-KBR6L]: https://www.aliexpress.com/item/1005001813291053.html
+[Yanling N18]:https://www.ylipc.com/product/network_server_network_server/N18_Firewa…
diff --git a/Documentation/mainboard/yanling/yl-kbr6l_front.jpg b/Documentation/mainboard/yanling/yl-kbr6l_front.jpg
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Documentation/mainboard/yanling/yl-kbr6l_front.jpg
diff --git a/src/mainboard/yanling/Kconfig b/src/mainboard/yanling/Kconfig
new file mode 100644
index 0000000..2972a38
--- /dev/null
+++ b/src/mainboard/yanling/Kconfig
@@ -0,0 +1,15 @@
+if VENDOR_YANLING
+
+choice
+ prompt "Mainboard model"
+
+source "src/mainboard/yanling/*/Kconfig.name"
+
+endchoice
+
+source "src/mainboard/yanling/*/Kconfig"
+
+config MAINBOARD_VENDOR
+ default "Yanling"
+
+endif # VENDOR_YANLING
diff --git a/src/mainboard/yanling/Kconfig.name b/src/mainboard/yanling/Kconfig.name
new file mode 100644
index 0000000..6cc7ef1
--- /dev/null
+++ b/src/mainboard/yanling/Kconfig.name
@@ -0,0 +1,2 @@
+config VENDOR_YANLING
+ bool "Yanling"
diff --git a/src/mainboard/yanling/yl_kbr6l/Kconfig b/src/mainboard/yanling/yl_kbr6l/Kconfig
new file mode 100644
index 0000000..838bc44
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/Kconfig
@@ -0,0 +1,57 @@
+if BOARD_YANLING_YLKBR6L
+
+config BOARD_SPECIFIC_OPTIONS
+ def_bool y
+ select BOARD_ROMSIZE_KB_8192
+ select HAVE_ACPI_RESUME
+ select HAVE_ACPI_TABLES
+ select INTEL_GMA_HAVE_VBT
+ select MAINBOARD_HAS_LIBGFXINIT
+ select SEABIOS_ADD_SERCON_PORT_FILE if PAYLOAD_SEABIOS
+ select SOC_INTEL_KABYLAKE
+ select SPI_FLASH_MACRONIX
+ select SUPERIO_ITE_IT8613E
+ select MAINBOARD_HAS_CRB_TPM
+ select HAVE_INTEL_PTT
+ select TPM2
+
+config IRQ_SLOT_COUNT
+ int
+ default 18
+
+config MAINBOARD_DIR
+ string
+ default "yanling/yl_kbr6l"
+
+config MAINBOARD_PART_NUMBER
+ string
+ default "YLKBR6L"
+
+config DIMM_MAX
+ int
+ default 2
+
+config DIMM_SPD_SIZE
+ int
+ default 512
+
+config MAX_CPUS
+ int
+ default 8
+
+config VGA_BIOS_ID
+ string
+ default "8086,5917"
+
+config PXE_ROM_ID
+ string
+ default "8086,1539"
+
+config CBFS_SIZE
+ hex
+ default 0x600000
+
+config USE_PM_ACPI_TIMER
+ default n
+
+endif
diff --git a/src/mainboard/yanling/yl_kbr6l/Kconfig.name b/src/mainboard/yanling/yl_kbr6l/Kconfig.name
new file mode 100644
index 0000000..8b039de
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/Kconfig.name
@@ -0,0 +1,2 @@
+config BOARD_YANLING_YLKBR6L
+ bool "YLKBR6L"
diff --git a/src/mainboard/yanling/yl_kbr6l/Makefile.inc b/src/mainboard/yanling/yl_kbr6l/Makefile.inc
new file mode 100644
index 0000000..4cd7aac
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/Makefile.inc
@@ -0,0 +1,7 @@
+## SPDX-License-Identifier: GPL-2.0-or-later
+
+bootblock-y += bootblock.c
+
+ramstage-y += ramstage.c
+
+ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads
diff --git a/src/mainboard/yanling/yl_kbr6l/acpi/ec.asl b/src/mainboard/yanling/yl_kbr6l/acpi/ec.asl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/acpi/ec.asl
diff --git a/src/mainboard/yanling/yl_kbr6l/acpi/superio.asl b/src/mainboard/yanling/yl_kbr6l/acpi/superio.asl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/acpi/superio.asl
diff --git a/src/mainboard/yanling/yl_kbr6l/board_info.txt b/src/mainboard/yanling/yl_kbr6l/board_info.txt
new file mode 100644
index 0000000..c12e388
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/board_info.txt
@@ -0,0 +1,6 @@
+Vendor name: Yanling
+Board name: YL-KBR6L
+Category: sbc
+ROM protocol: SPI
+ROM socketed: n
+Flashrom support: y
diff --git a/src/mainboard/yanling/yl_kbr6l/bootblock.c b/src/mainboard/yanling/yl_kbr6l/bootblock.c
new file mode 100644
index 0000000..e35a7cc
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/bootblock.c
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <bootblock_common.h>
+#include <superio/ite/it8613e/it8613e.h>
+#include <superio/ite/common/ite.h>
+
+#define GPIO_DEV PNP_DEV(0x2e, IT8613E_GPIO)
+#define UART_DEV PNP_DEV(0x2e, IT8613E_SP1)
+
+void bootblock_mainboard_early_init(void)
+{
+ ite_reg_write(GPIO_DEV, 0x2c, 0x41); /* disable K8 power seq */
+ ite_reg_write(GPIO_DEV, 0x2d, 0x02); /* PCICLK 25MHz */
+ ite_enable_serial(UART_DEV, CONFIG_TTYS0_BASE);
+}
diff --git a/src/mainboard/yanling/yl_kbr6l/data.vbt b/src/mainboard/yanling/yl_kbr6l/data.vbt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/data.vbt
diff --git a/src/mainboard/yanling/yl_kbr6l/devicetree.cb b/src/mainboard/yanling/yl_kbr6l/devicetree.cb
new file mode 100644
index 0000000..b57ab96
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/devicetree.cb
@@ -0,0 +1,278 @@
+chip soc/intel/skylake
+
+ # Enable deep Sx states
+ register "deep_s3_enable_ac" = "0"
+ register "deep_s3_enable_dc" = "0"
+ register "deep_s5_enable_ac" = "1"
+ register "deep_s5_enable_dc" = "1"
+ register "deep_sx_config" = "DSX_EN_WAKE_PIN | DSX_DIS_AC_PRESENT_PD"
+ register "s0ix_enable" = "1"
+
+ register "gpe0_dw0" = "GPP_B"
+ register "gpe0_dw1" = "GPP_D"
+ register "gpe0_dw2" = "GPP_E"
+
+ register "gen1_dec" = "0x00fc0201"
+ register "gen2_dec" = "0x007c0a01"
+ register "gen3_dec" = "0x000c03e1"
+ register "gen4_dec" = "0x001c02e1"
+
+ register "eist_enable" = "1"
+
+ # Disable DPTF
+ register "dptf_enable" = "0"
+
+ # Enable VT-d
+ register "ignore_vtd" = "0"
+
+ # Enable SERIRQ continuous
+ register "serirq_mode" = "SERIRQ_CONTINUOUS"
+
+ register "tcc_offset" = "5" # TCC of 95C
+
+ # FSP Configuration
+ register "SataSalpSupport" = "0"
+ register "SataMode" = "0"
+ register "DspEnable" = "0"
+ register "IoBufferOwnership" = "0"
+ register "SsicPortEnable" = "0"
+ register "ScsEmmcHs400Enabled" = "0"
+ register "SkipExtGfxScan" = "1"
+ register "HeciEnabled" = "1"
+ register "SaGv" = "SaGv_Enabled"
+ register "IslVrCmd" = "2"
+ register "PmConfigSlpS3MinAssert" = "2" # 50ms
+ register "PmConfigSlpS4MinAssert" = "4" # 4s
+ register "PmConfigSlpSusMinAssert" = "1" # 500ms
+ register "PmConfigSlpAMinAssert" = "3" # 2s
+
+ # VR Settings Configuration for 4 Domains
+ #+----------------+-------+-------+-------+-------+
+ #| Domain/Setting | SA | IA | GTUS | GTS |
+ #+----------------+-------+-------+-------+-------+
+ #| Psi1Threshold | 20A | 20A | 20A | 20A |
+ #| Psi2Threshold | 4A | 5A | 5A | 5A |
+ #| Psi3Threshold | 1A | 1A | 1A | 1A |
+ #| Psi3Enable | 1 | 1 | 1 | 1 |
+ #| Psi4Enable | 1 | 1 | 1 | 1 |
+ #| ImonSlope | 0 | 0 | 0 | 0 |
+ #| ImonOffset | 0 | 0 | 0 | 0 |
+ #| IccMax | 7A | 34A | 35A | 35A |
+ #| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V |
+ #| AcLoadline(ohm)| 10.3m | 2.4m | 3.1m | 3.1m |
+ #| DcLoadline(ohm)| 10.3m | 2.4m | 3.1m | 3.1m |
+ #+----------------+-------+-------+-------+-------+
+ #Note: IccMax settings are moved to SoC code
+ register "domain_vr_config[VR_SYSTEM_AGENT]" = "{
+ .vr_config_enable = 1,
+ .psi1threshold = VR_CFG_AMP(20),
+ .psi2threshold = VR_CFG_AMP(4),
+ .psi3threshold = VR_CFG_AMP(1),
+ .psi3enable = 1,
+ .psi4enable = 1,
+ .imon_slope = 0x0,
+ .imon_offset = 0x0,
+ .voltage_limit = 1520,
+ }"
+
+ register "domain_vr_config[VR_IA_CORE]" = "{
+ .vr_config_enable = 1,
+ .psi1threshold = VR_CFG_AMP(20),
+ .psi2threshold = VR_CFG_AMP(5),
+ .psi3threshold = VR_CFG_AMP(1),
+ .psi3enable = 1,
+ .psi4enable = 1,
+ .imon_slope = 0x0,
+ .imon_offset = 0x0,
+ .voltage_limit = 1520,
+ }"
+
+ register "domain_vr_config[VR_GT_UNSLICED]" = "{
+ .vr_config_enable = 1,
+ .psi1threshold = VR_CFG_AMP(20),
+ .psi2threshold = VR_CFG_AMP(5),
+ .psi3threshold = VR_CFG_AMP(1),
+ .psi3enable = 1,
+ .psi4enable = 1,
+ .imon_slope = 0x0,
+ .imon_offset = 0x0,
+ .voltage_limit = 1520,
+ }"
+
+ register "domain_vr_config[VR_GT_SLICED]" = "{
+ .vr_config_enable = 1,
+ .psi1threshold = VR_CFG_AMP(20),
+ .psi2threshold = VR_CFG_AMP(5),
+ .psi3threshold = VR_CFG_AMP(1),
+ .psi3enable = 1,
+ .psi4enable = 1,
+ .imon_slope = 0x0,
+ .imon_offset = 0x0,
+ .voltage_limit = 1520,
+ }"
+
+ # Send an extra VR mailbox command for the PS4 exit issue
+ register "SendVrMbxCmd" = "2"
+
+ # Enable SATA ports 1,2
+ register "SataPortsEnable[0]" = "1"
+ register "SataPortsEnable[1]" = "1"
+ register "SataPortsEnable[2]" = "0"
+ register "SataPortsDevSlp[0]" = "0"
+ register "SataPortsDevSlp[1]" = "0"
+
+ # Enable Root ports. 1-6 for LAN and Root Port 9
+ register "PcieRpEnable[0]" = "1"
+ register "PcieRpEnable[1]" = "1"
+ register "PcieRpEnable[2]" = "1"
+ register "PcieRpEnable[3]" = "1"
+ register "PcieRpEnable[4]" = "1"
+ register "PcieRpEnable[5]" = "1"
+ register "PcieRpEnable[8]" = "1" # mPCIe WiFi
+
+ # Enable Advanced Error Reporting for RP 1-6, 9
+ register "PcieRpAdvancedErrorReporting[0]" = "1"
+ register "PcieRpAdvancedErrorReporting[1]" = "1"
+ register "PcieRpAdvancedErrorReporting[2]" = "1"
+ register "PcieRpAdvancedErrorReporting[3]" = "1"
+ register "PcieRpAdvancedErrorReporting[4]" = "1"
+ register "PcieRpAdvancedErrorReporting[5]" = "1"
+ register "PcieRpAdvancedErrorReporting[8]" = "1"
+
+ # Enable Latency Tolerance Reporting Mechanism RP 1-6, 9
+ register "PcieRpLtrEnable[0]" = "1"
+ register "PcieRpLtrEnable[1]" = "1"
+ register "PcieRpLtrEnable[2]" = "1"
+ register "PcieRpLtrEnable[3]" = "1"
+ register "PcieRpLtrEnable[4]" = "1"
+ register "PcieRpLtrEnable[5]" = "1"
+ register "PcieRpLtrEnable[8]" = "1"
+
+ # TODO: Check why protectli used them and WiFi won't work
+ # for me if I set them -> err: lost pci device
+ # Enable RP 9 CLKREQ# support
+ #register "PcieRpClkReqSupport[8]" = "1"
+ # RP 9 uses CLKREQ0#
+ #register "PcieRpClkReqNumber[8]" = "0"
+
+ # Clocks 0-5 for RP 1-6
+ register "PcieRpClkSrcNumber[0]" = "0"
+ register "PcieRpClkSrcNumber[1]" = "1"
+ register "PcieRpClkSrcNumber[2]" = "2"
+ register "PcieRpClkSrcNumber[3]" = "3"
+ register "PcieRpClkSrcNumber[4]" = "4"
+ register "PcieRpClkSrcNumber[5]" = "5"
+ # RP 9 shares CLKSRC5# with RP 6
+ register "PcieRpClkSrcNumber[8]" = "5"
+
+
+ # USB 2.0 enable ports 1-8, disable ports 9-12
+ register "usb2_ports[0]" = "USB2_PORT_SHORT(OC_SKIP)" # TYPE-A Port
+ register "usb2_ports[1]" = "USB2_PORT_SHORT(OC_SKIP)" # TYPE-A Port
+ register "usb2_ports[2]" = "USB2_PORT_SHORT(OC_SKIP)" # TYPE-A Port
+ register "usb2_ports[3]" = "USB2_PORT_SHORT(OC_SKIP)" # TYPE-A Port
+ register "usb2_ports[4]" = "USB2_PORT_SHORT(OC_SKIP)" # Type-A Port
+ register "usb2_ports[5]" = "USB2_PORT_SHORT(OC_SKIP)" # TYPE-A Port
+ register "usb2_ports[6]" = "USB2_PORT_SHORT(OC_SKIP)" # TYPE-A Port
+ register "usb2_ports[7]" = "USB2_PORT_SHORT(OC_SKIP)" # mPCIe slot
+
+ # USB 3.0 enable ports 1-4, disable ports 5-6
+ register "usb3_ports[0]" = "USB3_PORT_DEFAULT(OC_SKIP)" # TYPE-A Port
+ register "usb3_ports[1]" = "USB3_PORT_DEFAULT(OC_SKIP)" # TYPE-A Port
+ register "usb3_ports[2]" = "USB3_PORT_DEFAULT(OC_SKIP)" # TYPE-A Port
+ register "usb3_ports[3]" = "USB3_PORT_DEFAULT(OC_SKIP)" # TYPE-A Port
+
+ register "SerialIoDevMode" = "{ \
+ [PchSerialIoIndexI2C0] = PchSerialIoDisabled, \
+ [PchSerialIoIndexI2C1] = PchSerialIoDisabled, \
+ [PchSerialIoIndexI2C2] = PchSerialIoDisabled, \
+ [PchSerialIoIndexI2C3] = PchSerialIoDisabled, \
+ [PchSerialIoIndexI2C4] = PchSerialIoDisabled, \
+ [PchSerialIoIndexI2C5] = PchSerialIoDisabled, \
+ [PchSerialIoIndexSpi0] = PchSerialIoDisabled, \
+ [PchSerialIoIndexSpi1] = PchSerialIoDisabled, \
+ [PchSerialIoIndexUart0] = PchSerialIoDisabled, \
+ [PchSerialIoIndexUart1] = PchSerialIoDisabled, \
+ [PchSerialIoIndexUart2] = PchSerialIoDisabled, \
+ }"
+
+ # Lock Down CHIPSET_LOCKDOWN_COREBOOT
+ register "common_soc_config" = "{
+ .chipset_lockdown = CHIPSET_LOCKDOWN_COREBOOT,
+ }"
+
+ device cpu_cluster 0 on
+ device lapic 0 on end
+ end
+ device domain 0 on
+ device pci 00.0 on end # 8086 5914 - Host Bridge
+ device pci 02.0 on end # 8086 5917 - Integrated Graphics Device
+ device pci 04.0 off end # 8086 ???? - SA thermal subsystem
+ device pci 05.0 off end # 8086 ???? - SA IMGU
+ device pci 08.0 off end # 8086 ???? - Gaussian Mixture Model
+ device pci 13.0 off end # 8086 9d35 - Integrated Sensor Hub
+ device pci 14.0 on end # 8086 9d2f - USB xHCI
+ device pci 14.1 off end # 8086 9d30 - USB xDCI (OTG)
+ device pci 14.2 off end # 8086 9d31 - Thermal Subsystem
+ device pci 14.3 off end # 8086 9d32 - Camera I/O Host Controller
+ device pci 15.0 off end # 8086 9d60 - I2C #0
+ device pci 15.1 off end # 8086 9d61 - I2C #1
+ device pci 15.2 off end # 8086 9d62 - I2C #2
+ device pci 15.3 off end # 8086 9d63 - I2C #3
+ device pci 16.0 on end # 8086 9d3a - Management Engine Interface 1
+ device pci 16.1 off end # 8086 9d3b - Management Engine Interface 2
+ device pci 16.2 off end # 8086 9d3c - Management Engine IDE-Redirection
+ device pci 16.3 off end # 8086 9d3d - Management Engine KT Redirection
+ device pci 16.4 off end # 8086 9d3e - Management Engine Interface 3
+ device pci 17.0 on end # 8086 9d03 - SATA
+ device pci 19.0 off end # 8086 9d66 - UART #2
+ device pci 19.1 off end # 8086 9d65 - I2C #5
+ device pci 19.2 off end # 8086 9d64 - I2C #4
+ device pci 1c.0 on end # 8086 9d10 - PCI Express Port 1
+ device pci 1c.1 on end # 8086 9d11 - PCI Express Port 2
+ device pci 1c.2 on end # 8086 9d12 - PCI Express Port 3
+ device pci 1c.3 on end # 8086 9d13 - PCI Express Port 4
+ device pci 1c.4 on end # 8086 9d14 - PCI Express Port 5
+ device pci 1c.5 on end # 8086 9d15 - PCI Express Port 6
+ device pci 1c.6 off end # 8086 9d16 - PCI Express Port 7
+ device pci 1c.7 off end # 8086 9d17 - PCI Express Port 8
+ device pci 1d.0 on # 8086 9d18 - PCI Express Port 9 - WiFi
+ smbios_slot_desc
+ "SlotTypePciExpressMini52pinWithoutBSKO"
+ "SlotLengthShort" "WIFI1" "SlotDataBusWidth1X"
+ end
+ device pci 1d.1 off end # 8086 9d19 - PCI Express Port 10
+ device pci 1d.2 off end # 8086 9d1a - PCI Express Port 11
+ device pci 1d.3 off end # 8086 9d1b - PCI Express Port 12
+ device pci 1e.0 off end # 8086 9d27 - UART #0
+ device pci 1e.1 off end # 8086 9d28 - UART #1
+ device pci 1e.2 off end # 8086 9d29 - GSPI #0
+ device pci 1e.3 off end # 8086 9d2a - GSPI #1
+ device pci 1e.4 off end # 8086 9d2b - eMMC
+ device pci 1e.5 off end # 8086 ???? - SDIO
+ device pci 1e.6 off end # 8086 9d2d = SDXC
+ device pci 1f.0 on # 8086 9d4e - LPC Controller
+ chip superio/ite/it8613e
+ device pnp 2e.0 off end
+ device pnp 2e.1 on # COM 1
+ io 0x60 = 0x3f8
+ irq 0x70 = 4
+ end
+ device pnp 2e.4 off end # Environment Controller
+ device pnp 2e.5 off end # Keyboard
+ device pnp 2e.6 off end # Mouse
+ device pnp 2e.7 off end # GPIO
+ device pnp 2e.a off end # CIR
+ end
+ end # LPC Interface
+ device pci 1f.1 on end # 8086 9d20 - P2SB
+ device pci 1f.2 on end # 8086 9d21 - Power Management Controller
+ device pci 1f.3 off end # 8086 9d71 - Intel HDA
+ device pci 1f.4 on end # 8086 9d23 - SMBus
+ device pci 1f.5 off end # 8086 9d24 - PCH SPI
+ device pci 1f.6 off end # 8086 9d25 - GbE
+ end
+ chip drivers/crb
+ device mmio 0xfed40000 on end
+ end
+end
diff --git a/src/mainboard/yanling/yl_kbr6l/dsdt.asl b/src/mainboard/yanling/yl_kbr6l/dsdt.asl
new file mode 100644
index 0000000..3de4e26
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/dsdt.asl
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <acpi/acpi.h>
+DefinitionBlock(
+ "dsdt.aml",
+ "DSDT",
+ ACPI_DSDT_REV_2,
+ OEM_ID,
+ ACPI_TABLE_CREATOR,
+ 0x20110725 /* OEM revision */
+)
+{
+ #include <soc/intel/common/block/acpi/acpi/platform.asl>
+ #include <soc/intel/skylake/acpi/globalnvs.asl>
+ #include <cpu/intel/common/acpi/cpu.asl>
+
+ Device (\_SB.PCI0)
+ {
+ #include <soc/intel/skylake/acpi/systemagent.asl>
+ #include <soc/intel/skylake/acpi/pch.asl>
+ }
+
+ #include <southbridge/intel/common/acpi/sleepstates.asl>
+}
diff --git a/src/mainboard/yanling/yl_kbr6l/gma-mainboard.ads b/src/mainboard/yanling/yl_kbr6l/gma-mainboard.ads
new file mode 100644
index 0000000..0e0f4f8
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/gma-mainboard.ads
@@ -0,0 +1,15 @@
+-- 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,
+ others => Disabled);
+
+end GMA.Mainboard;
diff --git a/src/mainboard/yanling/yl_kbr6l/gpio.h b/src/mainboard/yanling/yl_kbr6l/gpio.h
new file mode 100644
index 0000000..7ec5a8a
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/gpio.h
@@ -0,0 +1,179 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef _GPIOFW6B_H
+#define _GPIOFW6B_H
+
+#include <soc/gpe.h>
+#include <soc/gpio.h>
+
+#ifndef __ACPI__
+
+/* Pad configuration in ramstage. */
+static const struct pad_config gpio_table[] = {
+/* RCIN# */ PAD_CFG_NF(GPP_A0, NONE, DEEP, NF1),
+/* LPC_LAD_0 */ PAD_CFG_NF(GPP_A1, UP_20K, DEEP, NF1),
+/* LPC_LAD_1 */ PAD_CFG_NF(GPP_A2, UP_20K, DEEP, NF1),
+/* LPC_LAD_2 */ PAD_CFG_NF(GPP_A3, UP_20K, DEEP, NF1),
+/* LPC_LAD_3 */ PAD_CFG_NF(GPP_A4, UP_20K, DEEP, NF1),
+/* LPC_FRAME */ PAD_CFG_NF(GPP_A5, NONE, DEEP, NF1),
+/* LPC_SERIRQ */ PAD_CFG_NF(GPP_A6, NONE, DEEP, NF1),
+/* PIRQA_N*/ PAD_CFG_TERM_GPO(GPP_A7, 1, NONE, DEEP),
+/* LPC_CLKRUN */ PAD_CFG_NF(GPP_A8, NONE, DEEP, NF1),
+/* PCH_LPC_CLK0 */ PAD_CFG_NF(GPP_A9, DN_20K, DEEP, NF1),
+/* PCH_LPC_CLK1 */ PAD_CFG_NF(GPP_A10, DN_20K, DEEP, NF1),
+/* PME# */ PAD_CFG_NF(GPP_A11, UP_20K, DEEP, NF1),
+/* ISH_GP6 */ PAD_NC(GPP_A12, NONE),
+/* PCH_SUSPWRACB */ PAD_CFG_NF(GPP_A13, NONE, DEEP, NF1),
+/* PCH_SUSSTAT */ PAD_CFG_NF(GPP_A14, NONE, DEEP, NF1),
+/* PCH_SUSACK */ PAD_CFG_NF(GPP_A15, DN_20K, DEEP, NF1),
+/* SD_1P8_SEL */ PAD_NC(GPP_A16, NONE),
+/* SD_PWR_EN */ PAD_NC(GPP_A17, NONE),
+/* ISH_GP0 */ PAD_NC(GPP_A18, NONE),
+/* ISH_GP1 */ PAD_NC(GPP_A19, NONE),
+/* ISH_GP2 */ PAD_NC(GPP_A20, NONE),
+/* ISH_GP3 */ PAD_NC(GPP_A21, NONE),
+/* ISH_GP4 */ PAD_NC(GPP_A22, NONE),
+/* ISH_GP5 */ PAD_NC(GPP_A23, NONE),
+/* CORE_VID0 */ PAD_NC(GPP_B0, NONE),
+/* CORE_VID1 */ PAD_NC(GPP_B1, NONE),
+/* VRALERT_N */ PAD_CFG_NF(GPP_B2, NONE, DEEP, NF1),
+/* CPU_GP2 */ PAD_NC(GPP_B3, NONE),
+/* CPU_GP3 */ PAD_NC(GPP_B4, NONE),
+/* SRCCLKREQ0_N */ PAD_CFG_NF(GPP_B5, NONE, DEEP, NF1),
+/* SRCCLKREQ1_N*/ PAD_NC(GPP_B6, NONE),
+/* SRCCLKREQ2_N*/ PAD_NC(GPP_B7, NONE),
+/* SRCCLKREQ3_N*/ PAD_NC(GPP_B8, NONE),
+/* SRCCLKREQ4_N*/ PAD_NC(GPP_B9, NONE),
+/* SRCCLKREQ5_N*/ PAD_NC(GPP_B10, NONE),
+/* EXT_PWR_GATE_N */ PAD_CFG_NF(GPP_B11, NONE, DEEP, NF1),
+/* SLP_S0# */ PAD_CFG_NF(GPP_B12, NONE, DEEP, NF1),
+/* PCH_PLT_RST */ PAD_CFG_NF(GPP_B13, NONE, DEEP, NF1),
+/* SPKR */ PAD_CFG_NF(GPP_B14, DN_20K, PLTRST, NF1),
+/* GSPI0_CS_N */ PAD_NC(GPP_B15, NONE),
+/* GSPI0_CLK */ PAD_NC(GPP_B16, NONE),
+/* GSPI0_MISO */ PAD_NC(GPP_B17, NONE),
+/* GSPI0_MOSI */ PAD_NC(GPP_B18, NONE),
+/* GSPI1_CS_N */ PAD_NC(GPP_B19, NONE),
+/* GSPI1_CLK */ PAD_NC(GPP_B20, NONE),
+/* GSPI1_MISO */ PAD_NC(GPP_B21, NONE),
+/* GSPI1_MOSI */ PAD_NC(GPP_B22, NONE),
+/* SM1ALERT# */ PAD_NC(GPP_B23, NONE),
+/* SMB_CLK */ PAD_CFG_NF(GPP_C0, NONE, DEEP, NF1),
+/* SMB_DATA */ PAD_CFG_NF(GPP_C1, NONE, DEEP, NF1),
+/* SMBALERT# */ PAD_CFG_NF(GPP_C2, NONE, DEEP, NF1),
+/* SML0_CLK */ PAD_NC(GPP_C3, NONE),
+/* SML0DATA */ PAD_NC(GPP_C4, NONE),
+/* SML0ALERT# */ PAD_NC(GPP_C5, NONE),
+/* UART0_RXD */ PAD_NC(GPP_C8, NONE),
+/* UART0_TXD */ PAD_NC(GPP_C9, NONE),
+/* UART0_CTS_N */ PAD_NC(GPP_C10, NONE),
+/* UART0_RTS_N */ PAD_NC(GPP_C11, NONE),
+/* UART1_RXD */ PAD_NC(GPP_C12, NONE),
+/* UART1_TXD */ PAD_NC(GPP_C13, NONE),
+/* UART1_CTS_N */ PAD_NC(GPP_C14, NONE),
+/* UART1_RTS_N */ PAD_NC(GPP_C15, NONE),
+/* I2C0_SDA */ PAD_NC(GPP_C16, NONE),
+/* I2C0_SCL */ PAD_NC(GPP_C17, NONE),
+/* I2C1_SDA */ PAD_NC(GPP_C18, NONE),
+/* I2C1_SCL */ PAD_NC(GPP_C19, NONE),
+/* UART2_RXD */ PAD_NC(GPP_C20, NONE),
+/* UART2_TXD */ PAD_NC(GPP_C21, NONE),
+/* UART2_CTS_N */ PAD_NC(GPP_C22, NONE),
+/* UART2_RTS_N */ PAD_NC(GPP_C23, NONE),
+/* ITCH_SPI_CS */ PAD_NC(GPP_D0, NONE),
+/* ITCH_SPI_CLK */ PAD_NC(GPP_D1, NONE),
+/* ITCH_SPI_MISO_1 */ PAD_NC(GPP_D2, NONE),
+/* ITCH_SPI_MISO_0 */ PAD_NC(GPP_D3, NONE),
+/* FLASHTRIG */ PAD_NC(GPP_D4, NONE),
+/* ISH_I2C0_SDA */ PAD_NC(GPP_D5, NONE),
+/* ISH_I2C0_SCL */ PAD_NC(GPP_D6, NONE),
+/* ISH_I2C1_SDA */ PAD_NC(GPP_D7, NONE),
+/* ISH_I2C1_SCL */ PAD_NC(GPP_D8, NONE),
+/* GPP_D9 */ PAD_NC(GPP_D9, NONE),
+/* GPP_D10 */ PAD_NC(GPP_D10, NONE),
+/* GPP_D11 */ PAD_NC(GPP_D11, NONE),
+/* GPP_D12 */ PAD_NC(GPP_D12, NONE),
+/* ISH_UART0_RXD */ PAD_NC(GPP_D13, NONE),
+/* ISH_UART0_TXD */ PAD_NC(GPP_D14, NONE),
+/* ISH_UART0_RTS */ PAD_NC(GPP_D15, NONE),
+/* ISH_UART0_CTS */ PAD_NC(GPP_D16, NONE),
+/* DMIC_CLK_1 */ PAD_NC(GPP_D17, NONE),
+/* DMIC_DATA_1 */ PAD_NC(GPP_D18, NONE),
+/* DMIC_CLK_0 */ PAD_NC(GPP_D19, NONE),
+/* DMIC_DATA_0 */ PAD_NC(GPP_D20, NONE),
+/* ITCH_SPI_D2 */ PAD_NC(GPP_D21, NONE),
+/* ITCH_SPI_D3 */ PAD_NC(GPP_D22, NONE),
+/* I2S_MCLK */ PAD_NC(GPP_D23, NONE),
+/* SATAXPCIE0 (TP8) */ PAD_NC(GPP_E0, NONE),
+/* SATAXPCIE1 (TP9)*/ PAD_NC(GPP_E1, NONE),
+/* SATAXPCIE2 (TP10) */ PAD_NC(GPP_E2, NONE),
+/* CPU_GP0 */ PAD_NC(GPP_E3, NONE),
+/* SATA_DEVSLP0 */ PAD_NC(GPP_E4, NONE),
+/* SATA_DEVSLP1 */ PAD_NC(GPP_E5, NONE),
+/* SATA_DEVSLP2 */ PAD_NC(GPP_E6, NONE),
+/* CPU_GP1 */ PAD_NC(GPP_E7, NONE),
+/* SATA_LED */ PAD_CFG_NF(GPP_E8, NONE, DEEP, NF1),
+/* USB2_OC_0 */ PAD_NC(GPP_E9, NONE),
+/* USB2_OC_1 */ PAD_NC(GPP_E10, NONE),
+/* USB2_OC_2 */ PAD_NC(GPP_E11, NONE),
+/* USB2_OC_3 */ PAD_NC(GPP_E12, NONE),
+/* DDI1_HPD */ PAD_CFG_NF(GPP_E13, NONE, DEEP, NF1),
+/* DDI2_HPD */ PAD_NC(GPP_E14, NONE),
+/* DDI3_HPD */ PAD_NC(GPP_E15, NONE),
+/* DDI4_HPD */ PAD_NC(GPP_E16, NONE),
+/* EDP_HPD */ PAD_NC(GPP_E17, NONE),
+/* DDPB_CTRLCLK */ PAD_CFG_NF(GPP_E18, NONE, DEEP, NF1),
+/* DDPB_CTRLDATA */ PAD_CFG_NF(GPP_E19, DN_20K, DEEP, NF1),
+/* DDPC_CTRLCLK */ PAD_NC(GPP_E20, NONE),
+/* DDPC_CTRLDATA */ PAD_NC(GPP_E21, NONE),
+/* DDPD_CTRLCLK */ PAD_NC(GPP_E22, NONE),
+/* DDPD_CTRLDATA */ PAD_NC(GPP_E23, NONE),
+/* I2S2_SCLK */ PAD_NC(GPP_F0, NONE),
+/* I2S2_SFRM */ PAD_NC(GPP_F1, NONE),
+/* I2S2_TXD */ PAD_NC(GPP_F2, NONE),
+/* I2S2_RXD */ PAD_NC(GPP_F3, NONE),
+/* I2C2_SDA */ PAD_NC(GPP_F4, NONE),
+/* I2C2_SCL */ PAD_NC(GPP_F5, NONE),
+/* I2C3_SDA */ PAD_NC(GPP_F6, NONE),
+/* I2C3_SCL */ PAD_NC(GPP_F7, NONE),
+/* I2C4_SDA */ PAD_NC(GPP_F8, NONE),
+/* I2C4_SDA */ PAD_NC(GPP_F9, NONE),
+/* I2C5_SDA */ PAD_NC(GPP_F10, NONE),
+/* I2C5_SCL */ PAD_NC(GPP_F11, NONE),
+/* EMMC_CMD */ PAD_NC(GPP_F12, NONE),
+/* EMMC_DATA0 */ PAD_NC(GPP_F13, NONE),
+/* EMMC_DATA1 */ PAD_NC(GPP_F14, NONE),
+/* EMMC_DATA2 */ PAD_NC(GPP_F15, NONE),
+/* EMMC_DATA3 */ PAD_NC(GPP_F16, NONE),
+/* EMMC_DATA4 */ PAD_NC(GPP_F17, NONE),
+/* EMMC_DATA5 */ PAD_NC(GPP_F18, NONE),
+/* EMMC_DATA6 */ PAD_NC(GPP_F19, NONE),
+/* EMMC_DATA7 */ PAD_NC(GPP_F20, NONE),
+/* EMMC_RCLK */ PAD_NC(GPP_F21, NONE),
+/* EMMC_CLK */ PAD_NC(GPP_F22, NONE),
+/* GPP_F23 */ PAD_NC(GPP_F23, NONE),
+/* SD_CMD */ PAD_NC(GPP_G0, NONE),
+/* SD_DATA0 */ PAD_NC(GPP_G1, NONE),
+/* SD_DATA1 */ PAD_NC(GPP_G2, NONE),
+/* SD_DATA2 */ PAD_NC(GPP_G3, NONE),
+/* SD_DATA3 */ PAD_NC(GPP_G4, NONE),
+/* SD_CD# */ PAD_NC(GPP_G5, NONE),
+/* SD_CLK */ PAD_NC(GPP_G6, NONE),
+/* SD_WP */ PAD_NC(GPP_G7, NONE),
+/* PCH_BATLOW */ PAD_NC(GPD0, NONE),
+/* ACPRESENT */ PAD_CFG_NF(GPD1, NONE, DEEP, NF1),
+/* LAN_WAKE_N */ PAD_NC(GPD2, NONE),
+/* PWRBTN */ PAD_CFG_NF(GPD3, UP_20K, DEEP, NF1),
+/* PM_SLP_S3# */ PAD_CFG_NF(GPD4, NONE, DEEP, NF1),
+/* PM_SLP_S4# */ PAD_CFG_NF(GPD5, NONE, DEEP, NF1),
+/* PM_SLP_SA# (TP7) */ PAD_CFG_NF(GPD6, NONE, DEEP, NF1),
+/* GPD7_RSVD */ PAD_CFG_TERM_GPO(GPD7, 1, NONE, DEEP),
+/* PM_SUSCLK */ PAD_CFG_NF(GPD8, NONE, DEEP, NF1),
+/* SLP_WLAN# (TP6) */ PAD_NC(GPD9, NONE),
+/* SLP_S5# (TP3) */ PAD_CFG_NF(GPD10, NONE, DEEP, NF1),
+/* LANPHYC */ PAD_NC(GPD11, NONE),
+};
+
+#endif
+
+#endif
diff --git a/src/mainboard/yanling/yl_kbr6l/ramstage.c b/src/mainboard/yanling/yl_kbr6l/ramstage.c
new file mode 100644
index 0000000..9518b1d
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/ramstage.c
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <soc/ramstage.h>
+
+#include "gpio.h"
+
+void mainboard_silicon_init_params(FSP_SIL_UPD *params)
+{
+ /*
+ * Configure pads prior to SiliconInit() in case there's any
+ * dependencies during hardware initialization.
+ */
+ gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
+
+ params->TurboMode = 1;
+ params->PchPort61hEnable = 1;
+ params->CdClock = 3;
+}
diff --git a/src/mainboard/yanling/yl_kbr6l/romstage.c b/src/mainboard/yanling/yl_kbr6l/romstage.c
new file mode 100644
index 0000000..2b68e1a
--- /dev/null
+++ b/src/mainboard/yanling/yl_kbr6l/romstage.c
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <fsp/api.h>
+#include <soc/romstage.h>
+#include <spd_bin.h>
+#include <string.h>
+
+static void mainboard_fill_dq_map_data(void *dq_map_ch0, void *dq_map_ch1)
+{
+ const u8 dq_map[2][12] = {
+ { 0x0F, 0xF0, 0x00, 0xF0, 0x0F, 0xF0,
+ 0x0F, 0x00, 0xFF, 0x00, 0xFF, 0x00 },
+ { 0x33, 0xCC, 0x00, 0xCC, 0x33, 0xCC,
+ 0x33, 0x00, 0xFF, 0x00, 0xFF, 0x00 } };
+ memcpy(dq_map_ch0, dq_map[0], sizeof(dq_map[0]));
+ memcpy(dq_map_ch1, dq_map[1], sizeof(dq_map[1]));
+}
+
+static void mainboard_fill_dqs_map_data(void *dqs_map_ch0, void *dqs_map_ch1)
+{
+ const u8 dqs_map[2][8] = {
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 1, 0, 2, 3, 4, 5, 6, 7 } };
+ memcpy(dqs_map_ch0, dqs_map[0], sizeof(dqs_map[0]));
+ memcpy(dqs_map_ch1, dqs_map[1], sizeof(dqs_map[1]));
+}
+
+static void mainboard_fill_rcomp_res_data(void *rcomp_ptr)
+{
+ const u16 RcompResistor[3] = { 121, 81, 100 };
+ memcpy(rcomp_ptr, RcompResistor, sizeof(RcompResistor));
+}
+
+static void mainboard_fill_rcomp_strength_data(void *rcomp_strength_ptr)
+{
+ static const u16 RcompTarget[5] = { 100, 40, 20, 20, 26 };
+ memcpy(rcomp_strength_ptr, RcompTarget, sizeof(RcompTarget));
+}
+
+void mainboard_memory_init_params(FSPM_UPD *mupd)
+{
+ FSP_M_CONFIG *mem_cfg;
+ mem_cfg = &mupd->FspmConfig;
+
+ mainboard_fill_dq_map_data(&mem_cfg->DqByteMapCh0,
+ &mem_cfg->DqByteMapCh1);
+ mainboard_fill_dqs_map_data(&mem_cfg->DqsMapCpu2DramCh0,
+ &mem_cfg->DqsMapCpu2DramCh1);
+ mainboard_fill_rcomp_res_data(&mem_cfg->RcompResistor);
+ mainboard_fill_rcomp_strength_data(&mem_cfg->RcompTarget);
+
+ struct spd_block blk = {
+ .addr_map = { 0x50, 0x52, },
+ };
+
+ mem_cfg->DqPinsInterleaved = 1;
+ mem_cfg->CaVrefConfig = 2;
+
+ get_spd_smbus(&blk);
+ dump_spd_info(&blk);
+
+ mem_cfg->MemorySpdDataLen = blk.len;
+ mem_cfg->MemorySpdPtr00 = (uintptr_t)blk.spd_array[0];
+ mem_cfg->MemorySpdPtr10 = (uintptr_t)blk.spd_array[1];
+}
--
To view, visit https://review.coreboot.org/c/coreboot/+/48769
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Icbc18914670f87f0943b371400c509ff0eeacf6a
Gerrit-Change-Number: 48769
Gerrit-PatchSet: 1
Gerrit-Owner: Thomas
Gerrit-MessageType: newchange
5
12
Change in coreboot[master]: soc/intel/braswell: Increase dcache size
by Shelley Chen (Code Review) May 8, 2024
by Shelley Chen (Code Review) May 8, 2024
May 8, 2024
Shelley Chen has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/45827 )
Change subject: soc/intel/braswell: Increase dcache size
......................................................................
soc/intel/braswell: Increase dcache size
Need to increase the DRAM cache size for braswell as the was getting
the compilation error "Cache as RAM area is too full" when moving the
mrc_cache writeback to romstage. We need to increase this first
before landing the CL moving mrc_cache writeback to romstage.
BUG=b:150502246
BRANCH=None
TEST=Able to successfully compile braswell boards
Change-Id: I1538d504ddad8654c79a789e58ffe6b11b5d544c
Signed-off-by: Shelley Chen <shchen(a)google.com>
---
M src/soc/intel/braswell/Kconfig
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/27/45827/1
diff --git a/src/soc/intel/braswell/Kconfig b/src/soc/intel/braswell/Kconfig
index 5c9988c..077b5a1 100644
--- a/src/soc/intel/braswell/Kconfig
+++ b/src/soc/intel/braswell/Kconfig
@@ -96,7 +96,7 @@
config DCACHE_RAM_SIZE
hex
- default 0x4000
+ default 0x5000
help
The size of the cache-as-ram region required during bootblock
and/or romstage. Note DCACHE_RAM_SIZE and DCACHE_RAM_MRC_VAR_SIZE
--
To view, visit https://review.coreboot.org/c/coreboot/+/45827
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I1538d504ddad8654c79a789e58ffe6b11b5d544c
Gerrit-Change-Number: 45827
Gerrit-PatchSet: 1
Gerrit-Owner: Shelley Chen <shchen(a)google.com>
Gerrit-MessageType: newchange
5
9
Change in coreboot[master]: [WIP] mb/hp: Add HP ProBook 640 G1
by Iru Cai (vimacs) (Code Review) May 2, 2024
by Iru Cai (vimacs) (Code Review) May 2, 2024
May 2, 2024
Hello Iru Cai,
I'd like you to do a code review. Please visit
https://review.coreboot.org/c/coreboot/+/46130
to review the following change.
Change subject: [WIP] mb/hp: Add HP ProBook 640 G1
......................................................................
[WIP] mb/hp: Add HP ProBook 640 G1
Generate code from autoport. It boots to Arch Linux in a USB disk from
SeaBIOS payload.
EC ACPI doesn't work yet.
This board doesn't have HP Sure Start enabled, so we can use all the
flash regions, and relocate the EC firmware with CB:41393.
Change-Id: I07f433784292e3765bde3736414ff0eae525a046
Signed-off-by: Iru Cai <mytbk920423(a)gmail.com>
---
A Documentation/mainboard/hp/640g1.md
A src/mainboard/hp/probook_640_g1/Kconfig
A src/mainboard/hp/probook_640_g1/Kconfig.name
A src/mainboard/hp/probook_640_g1/Makefile.inc
A src/mainboard/hp/probook_640_g1/acpi/ec.asl
A src/mainboard/hp/probook_640_g1/acpi/platform.asl
A src/mainboard/hp/probook_640_g1/acpi/superio.asl
A src/mainboard/hp/probook_640_g1/acpi_tables.c
A src/mainboard/hp/probook_640_g1/board_info.txt
A src/mainboard/hp/probook_640_g1/bootblock.c
A src/mainboard/hp/probook_640_g1/devicetree.cb
A src/mainboard/hp/probook_640_g1/dsdt.asl
A src/mainboard/hp/probook_640_g1/gma-mainboard.ads
A src/mainboard/hp/probook_640_g1/gpio.c
A src/mainboard/hp/probook_640_g1/hda_verb.c
A src/mainboard/hp/probook_640_g1/mainboard.c
A src/mainboard/hp/probook_640_g1/romstage.c
17 files changed, 635 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/30/46130/1
diff --git a/Documentation/mainboard/hp/640g1.md b/Documentation/mainboard/hp/640g1.md
new file mode 100644
index 0000000..048633f
--- /dev/null
+++ b/Documentation/mainboard/hp/640g1.md
@@ -0,0 +1,65 @@
+# HP ProBook 640 G1
+
+This page is about the notebook [HP ProBook 640 G1].
+
+## Release status
+
+(TBD)
+
+## Required proprietary blobs
+
+The following blobs are required to operate the hardware:
+
+1. EC firmware
+2. Intel ME firmware
+3. mrc.bin
+
+HP EliteBook Folio 9480m uses SMSC MEC1322 as its embedded controller.
+The EC firmware is stored in the flash chip. We can extract the EC firmware from
+the OEM firmware, and insert it in the coreboot image.
+
+Intel ME firmware is in the flash chip. It is not needed when building coreboot.
+
+The Haswell memory reference code binary is needed when building coreboot.
+Please see [mrc.bin](../../northbridge/intel/haswell/mrc.bin).
+
+## Programming
+
+(TBD)
+
+## Debugging
+
+The serial port on dock can be used to debug the laptop.
+
+## Test status
+
+### Known issues
+
+(TBD)
+
+- EC ACPI is not working yet.
+
+### Untested
+
+(TBD)
+
+### Working
+
+(TBD)
+
+## Technology
+
+```eval_rst
++------------------+-----------------------------+
+| CPU | Intel Haswell (FCPGA946) |
++------------------+-----------------------------+
+| PCH | Intel Lynx Point HM87 |
++------------------+-----------------------------+
+| EC | SMSC MEC1322 |
++------------------+-----------------------------+
+| Coprocessor | Intel Management Engine |
++------------------+-----------------------------+
+```
+
+[HP ProBook 640 G1]: https://support.hp.com/us-en/product/hp-probook-640-g1-notebook-pc/5405392/
+[Maintenance and Service Guide]: http://h10032.www1.hp.com/ctg/Manual/c04823617
diff --git a/src/mainboard/hp/probook_640_g1/Kconfig b/src/mainboard/hp/probook_640_g1/Kconfig
new file mode 100644
index 0000000..d23a3fb
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/Kconfig
@@ -0,0 +1,42 @@
+if BOARD_HP_PROBOOK_640_G1
+
+config BOARD_SPECIFIC_OPTIONS
+ def_bool y
+ select BOARD_ROMSIZE_KB_16384
+ select EC_HP_KBC1126
+ select HAVE_ACPI_RESUME
+ select HAVE_ACPI_TABLES
+ select INTEL_INT15
+ select MAINBOARD_HAS_LIBGFXINIT # FIXME: check this
+ select MAINBOARD_USES_IFD_GBE_REGION
+ select NORTHBRIDGE_INTEL_HASWELL
+ select SERIRQ_CONTINUOUS_MODE
+ select SOUTHBRIDGE_INTEL_LYNXPOINT
+ select SUPERIO_SMSC_LPC47N217
+ select SYSTEM_TYPE_LAPTOP
+
+config MAINBOARD_DIR
+ string
+ default "hp/probook_640_g1"
+
+config MAINBOARD_PART_NUMBER
+ string
+ default "HP ProBook 640 G1"
+
+config VGA_BIOS_FILE
+ string
+ default "pci8086,0416.rom"
+
+config VGA_BIOS_ID
+ string
+ default "8086,0416"
+
+config USBDEBUG_HCD_INDEX # FIXME: check this
+ int
+ default 2
+
+config EC_HP_KBC1126_ECFW_IN_CBFS
+ bool
+ default n
+
+endif
diff --git a/src/mainboard/hp/probook_640_g1/Kconfig.name b/src/mainboard/hp/probook_640_g1/Kconfig.name
new file mode 100644
index 0000000..f809069
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/Kconfig.name
@@ -0,0 +1,2 @@
+config BOARD_HP_PROBOOK_640_G1
+ bool "ProBook 640 G1"
diff --git a/src/mainboard/hp/probook_640_g1/Makefile.inc b/src/mainboard/hp/probook_640_g1/Makefile.inc
new file mode 100644
index 0000000..fa23791
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/Makefile.inc
@@ -0,0 +1,3 @@
+bootblock-y += bootblock.c
+romstage-y += gpio.c
+ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads
diff --git a/src/mainboard/hp/probook_640_g1/acpi/ec.asl b/src/mainboard/hp/probook_640_g1/acpi/ec.asl
new file mode 100644
index 0000000..ab3a35c
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/acpi/ec.asl
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <ec/hp/kbc1126/acpi/ec.asl>
\ No newline at end of file
diff --git a/src/mainboard/hp/probook_640_g1/acpi/platform.asl b/src/mainboard/hp/probook_640_g1/acpi/platform.asl
new file mode 100644
index 0000000..8023ae8
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/acpi/platform.asl
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+Method(_WAK,1)
+{
+ \_SB.PCI0.LPCB.EC0.ACPI = 1
+ \_SB.PCI0.LPCB.EC0.SLPT = 0
+
+ Return(Package(){0,0})
+}
+
+Method(_PTS,1)
+{
+ \_SB.PCI0.LPCB.EC0.SLPT = Arg0
+}
diff --git a/src/mainboard/hp/probook_640_g1/acpi/superio.asl b/src/mainboard/hp/probook_640_g1/acpi/superio.asl
new file mode 100644
index 0000000..55b1db5
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/acpi/superio.asl
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <drivers/pc80/pc/ps2_controller.asl>
diff --git a/src/mainboard/hp/probook_640_g1/acpi_tables.c b/src/mainboard/hp/probook_640_g1/acpi_tables.c
new file mode 100644
index 0000000..f9ac854
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/acpi_tables.c
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <acpi/acpi_gnvs.h>
+#include <southbridge/intel/lynxpoint/nvs.h>
+
+void acpi_create_gnvs(struct global_nvs *gnvs)
+{
+ /* The lid is open by default. */
+ gnvs->lids = 1;
+
+ /* Temperature at which OS will shutdown */
+ gnvs->tcrt = 100;
+ /* Temperature at which OS will throttle CPU */
+ gnvs->tpsv = 90;
+}
diff --git a/src/mainboard/hp/probook_640_g1/board_info.txt b/src/mainboard/hp/probook_640_g1/board_info.txt
new file mode 100644
index 0000000..28b9c2f
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/board_info.txt
@@ -0,0 +1,5 @@
+Category: laptop
+ROM protocol: SPI
+Flashrom support: n
+FIXME: put ROM package, ROM socketed, Release year
+Board URL: https://support.hp.com/us-en/product/hp-probook-640-g1-notebook-pc/5405392/
diff --git a/src/mainboard/hp/probook_640_g1/bootblock.c b/src/mainboard/hp/probook_640_g1/bootblock.c
new file mode 100644
index 0000000..b5b6d43
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/bootblock.c
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <southbridge/intel/lynxpoint/pch.h>
+#include <superio/smsc/lpc47n217/lpc47n217.h>
+#include <ec/hp/kbc1126/ec.h>
+
+#define SERIAL_DEV PNP_DEV(0x4e, LPC47N217_SP1)
+
+void mainboard_config_superio(void)
+{
+ lpc47n217_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+ kbc1126_enter_conf();
+ kbc1126_mailbox_init();
+ kbc1126_kbc_init();
+ kbc1126_ec_init();
+ kbc1126_pm1_init();
+ kbc1126_exit_conf();
+}
diff --git a/src/mainboard/hp/probook_640_g1/devicetree.cb b/src/mainboard/hp/probook_640_g1/devicetree.cb
new file mode 100644
index 0000000..4056b9d
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/devicetree.cb
@@ -0,0 +1,88 @@
+chip northbridge/intel/haswell # FIXME: check ec_present, dq_pins_interleaved, usb_xhci_on_resume, gfx
+ register "dq_pins_interleaved" = "false"
+ register "ec_present" = "true"
+ register "gfx" = "GMA_STATIC_DISPLAYS(0)"
+ register "gpu_ddi_e_connected" = "1"
+ register "gpu_dp_b_hotplug" = "4"
+ register "gpu_dp_c_hotplug" = "4"
+ register "gpu_dp_d_hotplug" = "4"
+ register "gpu_panel_power_backlight_off_delay" = "1"
+ register "gpu_panel_power_backlight_on_delay" = "1"
+ register "gpu_panel_power_cycle_delay" = "6"
+ register "gpu_panel_power_down_delay" = "500"
+ register "gpu_panel_power_up_delay" = "2000"
+ register "gpu_pch_backlight_pwm_hz" = "200"
+ register "usb_xhci_on_resume" = "false"
+ device cpu_cluster 0x0 on
+ chip cpu/intel/haswell
+ 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 0x103c 0x1993 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
+ device pci 03.0 on end # Mini-HD audio
+
+ chip southbridge/intel/lynxpoint # Intel Series 8 Lynx Point PCH
+ register "docking_supported" = "1"
+ register "gen1_dec" = "0x007c0201"
+ register "gen2_dec" = "0x000c0101"
+ register "gen4_dec" = "0x000402e9"
+ register "gpi6_routing" = "2"
+ register "sata_ahci" = "1"
+ register "sata_port0_gen3_dtle" = "0x7"
+ # 0(HDD), 1(ODD), 5(M.2)
+ register "sata_port_map" = "0x37"
+ device pci 14.0 on end # xHCI 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 on end # Intel Gigabit Ethernet
+ device pci 1a.0 on end # USB2 EHCI #2
+ device pci 1b.0 on end # High Definition Audio
+ device pci 1c.0 on end # PCIe Port #1
+ device pci 1c.1 off end # PCIe Port #2
+ device pci 1c.2 off end # PCIe Port #3
+ device pci 1c.3 off end # PCIe Port #4
+ device pci 1c.4 off end # PCIe Port #5
+ device pci 1c.5 off end # PCIe Port #6
+ device pci 1c.6 on end # PCIe Port #7, WLAN
+ device pci 1c.7 on end # PCIe Port #8, Card Reader
+ device pci 1d.0 on end # USB2 EHCI #1
+ device pci 1f.0 on # LPC bridge
+ chip ec/hp/kbc1126
+ register "ec_data_port" = "0x62"
+ register "ec_cmd_port" = "0x66"
+ register "ec_ctrl_reg" = "0x81"
+ register "ec_fan_ctrl_value" = "0x5f"
+ device pnp ff.1 off end
+ end
+ chip superio/smsc/lpc47n217
+ device pnp 4e.3 on # Parallel
+ io 0x60 = 0x378
+ irq 0x70 = 7
+ end
+ device pnp 4e.4 on # COM1
+ io 0x60 = 0x3f8
+ irq 0x70 = 4
+ end
+ device pnp 4e.5 off end # COM2
+ end
+ end
+ device pci 1f.2 on end # SATA Controller (AHCI)
+ device pci 1f.3 on end # SMBus
+ device pci 1f.5 off end # SATA Controller (Legacy)
+ device pci 1f.6 off end # Thermal
+ end
+ end
+end
diff --git a/src/mainboard/hp/probook_640_g1/dsdt.asl b/src/mainboard/hp/probook_640_g1/dsdt.asl
new file mode 100644
index 0000000..769d907
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/dsdt.asl
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+
+#include <acpi/acpi.h>
+
+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 <cpu/intel/common/acpi/cpu.asl>
+ #include <southbridge/intel/common/acpi/platform.asl>
+ /* global NVS and variables. */
+ #include <southbridge/intel/lynxpoint/acpi/globalnvs.asl>
+ #include <southbridge/intel/common/acpi/sleepstates.asl>
+
+ Device (\_SB.PCI0)
+ {
+ #include <northbridge/intel/haswell/acpi/haswell.asl>
+ #include <drivers/intel/gma/acpi/default_brightness_levels.asl>
+ #include <southbridge/intel/lynxpoint/acpi/pch.asl>
+ }
+}
diff --git a/src/mainboard/hp/probook_640_g1/gma-mainboard.ads b/src/mainboard/hp/probook_640_g1/gma-mainboard.ads
new file mode 100644
index 0000000..a6af0ac
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/gma-mainboard.ads
@@ -0,0 +1,23 @@
+-- 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
+
+ -- FIXME: check this
+ ports : constant Port_List :=
+ (DP1,
+ DP2,
+ DP3,
+ HDMI1,
+ HDMI2,
+ HDMI3,
+ Analog,
+ eDP,
+ others => Disabled);
+
+end GMA.Mainboard;
diff --git a/src/mainboard/hp/probook_640_g1/gpio.c b/src/mainboard/hp/probook_640_g1/gpio.c
new file mode 100644
index 0000000..629117a
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/gpio.c
@@ -0,0 +1,228 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <southbridge/intel/common/gpio.h>
+
+static const struct pch_gpio_set1 pch_gpio_set1_mode = {
+ .gpio0 = GPIO_MODE_GPIO,
+ .gpio1 = GPIO_MODE_GPIO,
+ .gpio2 = GPIO_MODE_GPIO,
+ .gpio3 = GPIO_MODE_GPIO,
+ .gpio4 = GPIO_MODE_GPIO,
+ .gpio5 = GPIO_MODE_NATIVE,
+ .gpio6 = GPIO_MODE_GPIO,
+ .gpio7 = GPIO_MODE_GPIO,
+ .gpio8 = GPIO_MODE_GPIO,
+ .gpio9 = GPIO_MODE_GPIO,
+ .gpio10 = GPIO_MODE_GPIO,
+ .gpio11 = GPIO_MODE_GPIO,
+ .gpio12 = GPIO_MODE_NATIVE,
+ .gpio13 = GPIO_MODE_GPIO,
+ .gpio14 = GPIO_MODE_GPIO,
+ .gpio15 = GPIO_MODE_GPIO,
+ .gpio16 = GPIO_MODE_GPIO,
+ .gpio17 = GPIO_MODE_GPIO,
+ .gpio18 = GPIO_MODE_NATIVE,
+ .gpio19 = GPIO_MODE_GPIO,
+ .gpio20 = GPIO_MODE_NATIVE,
+ .gpio21 = GPIO_MODE_GPIO,
+ .gpio22 = GPIO_MODE_GPIO,
+ .gpio23 = GPIO_MODE_GPIO,
+ .gpio24 = GPIO_MODE_GPIO,
+ .gpio25 = GPIO_MODE_NATIVE,
+ .gpio26 = GPIO_MODE_NATIVE,
+ .gpio27 = GPIO_MODE_GPIO,
+ .gpio28 = GPIO_MODE_GPIO,
+ .gpio29 = GPIO_MODE_GPIO,
+ .gpio30 = GPIO_MODE_NATIVE,
+ .gpio31 = GPIO_MODE_GPIO,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_direction = {
+ .gpio0 = GPIO_DIR_INPUT,
+ .gpio1 = GPIO_DIR_INPUT,
+ .gpio2 = GPIO_DIR_OUTPUT,
+ .gpio3 = GPIO_DIR_INPUT,
+ .gpio4 = GPIO_DIR_INPUT,
+ .gpio6 = GPIO_DIR_INPUT,
+ .gpio7 = GPIO_DIR_INPUT,
+ .gpio8 = GPIO_DIR_INPUT,
+ .gpio9 = GPIO_DIR_INPUT,
+ .gpio10 = GPIO_DIR_INPUT,
+ .gpio11 = GPIO_DIR_OUTPUT,
+ .gpio13 = GPIO_DIR_INPUT,
+ .gpio14 = GPIO_DIR_INPUT,
+ .gpio15 = GPIO_DIR_INPUT,
+ .gpio16 = GPIO_DIR_INPUT,
+ .gpio17 = GPIO_DIR_INPUT,
+ .gpio19 = GPIO_DIR_INPUT,
+ .gpio21 = GPIO_DIR_INPUT,
+ .gpio22 = GPIO_DIR_OUTPUT,
+ .gpio23 = GPIO_DIR_INPUT,
+ .gpio24 = GPIO_DIR_INPUT,
+ .gpio27 = GPIO_DIR_INPUT,
+ .gpio28 = GPIO_DIR_OUTPUT,
+ .gpio29 = GPIO_DIR_INPUT,
+ .gpio31 = GPIO_DIR_INPUT,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_level = {
+ .gpio2 = GPIO_LEVEL_LOW,
+ .gpio11 = GPIO_LEVEL_LOW,
+ .gpio22 = GPIO_LEVEL_HIGH,
+ .gpio28 = GPIO_LEVEL_LOW,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_reset = {
+ .gpio24 = GPIO_RESET_RSMRST,
+ .gpio30 = GPIO_RESET_RSMRST,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_invert = {
+ .gpio1 = GPIO_INVERT,
+ .gpio3 = GPIO_INVERT,
+ .gpio4 = GPIO_INVERT,
+ .gpio6 = GPIO_INVERT,
+ .gpio7 = GPIO_INVERT,
+ .gpio9 = GPIO_INVERT,
+ .gpio10 = GPIO_INVERT,
+ .gpio19 = GPIO_INVERT,
+ .gpio21 = 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_NATIVE,
+ .gpio33 = GPIO_MODE_GPIO,
+ .gpio34 = GPIO_MODE_GPIO,
+ .gpio35 = GPIO_MODE_GPIO,
+ .gpio36 = GPIO_MODE_GPIO,
+ .gpio37 = GPIO_MODE_GPIO,
+ .gpio38 = GPIO_MODE_GPIO,
+ .gpio39 = GPIO_MODE_GPIO,
+ .gpio40 = GPIO_MODE_GPIO,
+ .gpio41 = GPIO_MODE_GPIO,
+ .gpio42 = GPIO_MODE_GPIO,
+ .gpio43 = GPIO_MODE_GPIO,
+ .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_GPIO,
+ .gpio51 = GPIO_MODE_GPIO,
+ .gpio52 = GPIO_MODE_GPIO,
+ .gpio53 = GPIO_MODE_GPIO,
+ .gpio54 = GPIO_MODE_GPIO,
+ .gpio55 = GPIO_MODE_GPIO,
+ .gpio56 = GPIO_MODE_GPIO,
+ .gpio57 = GPIO_MODE_GPIO,
+ .gpio58 = GPIO_MODE_NATIVE,
+ .gpio59 = GPIO_MODE_GPIO,
+ .gpio60 = GPIO_MODE_GPIO,
+ .gpio61 = GPIO_MODE_GPIO,
+ .gpio62 = GPIO_MODE_NATIVE,
+ .gpio63 = GPIO_MODE_NATIVE,
+};
+
+static const struct pch_gpio_set2 pch_gpio_set2_direction = {
+ .gpio33 = GPIO_DIR_OUTPUT,
+ .gpio34 = GPIO_DIR_INPUT,
+ .gpio35 = GPIO_DIR_INPUT,
+ .gpio36 = GPIO_DIR_INPUT,
+ .gpio37 = GPIO_DIR_INPUT,
+ .gpio38 = GPIO_DIR_INPUT,
+ .gpio39 = GPIO_DIR_INPUT,
+ .gpio40 = GPIO_DIR_INPUT,
+ .gpio41 = GPIO_DIR_INPUT,
+ .gpio42 = GPIO_DIR_INPUT,
+ .gpio43 = GPIO_DIR_INPUT,
+ .gpio48 = GPIO_DIR_INPUT,
+ .gpio49 = GPIO_DIR_INPUT,
+ .gpio50 = GPIO_DIR_OUTPUT,
+ .gpio51 = GPIO_DIR_OUTPUT,
+ .gpio52 = GPIO_DIR_INPUT,
+ .gpio53 = GPIO_DIR_OUTPUT,
+ .gpio54 = GPIO_DIR_OUTPUT,
+ .gpio55 = GPIO_DIR_INPUT,
+ .gpio56 = GPIO_DIR_OUTPUT,
+ .gpio57 = GPIO_DIR_INPUT,
+ .gpio59 = GPIO_DIR_INPUT,
+ .gpio60 = GPIO_DIR_OUTPUT,
+ .gpio61 = GPIO_DIR_OUTPUT,
+};
+
+static const struct pch_gpio_set2 pch_gpio_set2_level = {
+ .gpio33 = GPIO_LEVEL_LOW,
+ .gpio50 = GPIO_LEVEL_HIGH,
+ .gpio51 = GPIO_LEVEL_LOW,
+ .gpio53 = GPIO_LEVEL_HIGH,
+ .gpio54 = GPIO_LEVEL_LOW,
+ .gpio56 = GPIO_LEVEL_HIGH,
+ .gpio60 = GPIO_LEVEL_HIGH,
+ .gpio61 = 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_GPIO,
+ .gpio65 = GPIO_MODE_NATIVE,
+ .gpio66 = GPIO_MODE_NATIVE,
+ .gpio67 = GPIO_MODE_GPIO,
+ .gpio68 = GPIO_MODE_GPIO,
+ .gpio69 = GPIO_MODE_GPIO,
+ .gpio70 = GPIO_MODE_GPIO,
+ .gpio71 = GPIO_MODE_GPIO,
+ .gpio72 = GPIO_MODE_GPIO,
+ .gpio73 = GPIO_MODE_NATIVE,
+ .gpio74 = GPIO_MODE_GPIO,
+ .gpio75 = GPIO_MODE_NATIVE,
+};
+
+static const struct pch_gpio_set3 pch_gpio_set3_direction = {
+ .gpio64 = GPIO_DIR_INPUT,
+ .gpio67 = GPIO_DIR_INPUT,
+ .gpio68 = GPIO_DIR_OUTPUT,
+ .gpio69 = GPIO_DIR_INPUT,
+ .gpio70 = GPIO_DIR_OUTPUT,
+ .gpio71 = GPIO_DIR_OUTPUT,
+ .gpio72 = GPIO_DIR_INPUT,
+ .gpio74 = GPIO_DIR_OUTPUT,
+};
+
+static const struct pch_gpio_set3 pch_gpio_set3_level = {
+ .gpio68 = GPIO_LEVEL_HIGH,
+ .gpio70 = GPIO_LEVEL_HIGH,
+ .gpio71 = GPIO_LEVEL_HIGH,
+ .gpio74 = GPIO_LEVEL_HIGH,
+};
+
+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/hp/probook_640_g1/hda_verb.c b/src/mainboard/hp/probook_640_g1/hda_verb.c
new file mode 100644
index 0000000..5c0f943
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/hda_verb.c
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
+ 0x00000000, /* Codec Vendor / Device ID: */
+ 0x00000000, /* Subsystem ID */
+ 11, /* Number of 4 dword sets */
+ AZALIA_SUBVENDOR(0, 0x00000000),
+ AZALIA_PIN_CFG(0, 0x0a, 0x21011030),
+ AZALIA_PIN_CFG(0, 0x0b, 0x0321101f),
+ AZALIA_PIN_CFG(0, 0x0c, 0x03a11020),
+ AZALIA_PIN_CFG(0, 0x0d, 0x90170110),
+ AZALIA_PIN_CFG(0, 0x0e, 0x40f000f0),
+ AZALIA_PIN_CFG(0, 0x0f, 0x2181102e),
+ AZALIA_PIN_CFG(0, 0x10, 0x40f000f0),
+ AZALIA_PIN_CFG(0, 0x11, 0xd5a30140),
+ AZALIA_PIN_CFG(0, 0x1f, 0x40f000f0),
+ AZALIA_PIN_CFG(0, 0x20, 0x40f000f0),
+
+};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/hp/probook_640_g1/mainboard.c b/src/mainboard/hp/probook_640_g1/mainboard.c
new file mode 100644
index 0000000..3f023d0
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/mainboard.c
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <device/device.h>
+#include <drivers/intel/gma/int15.h>
+#include <ec/acpi/ec.h>
+#include <console/console.h>
+#include <pc80/keyboard.h>
+
+static void mainboard_enable(struct device *dev)
+{
+ install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, 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/hp/probook_640_g1/romstage.c b/src/mainboard/hp/probook_640_g1/romstage.c
new file mode 100644
index 0000000..63c2fb8
--- /dev/null
+++ b/src/mainboard/hp/probook_640_g1/romstage.c
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <stdint.h>
+#include <northbridge/intel/haswell/haswell.h>
+#include <northbridge/intel/haswell/raminit.h>
+#include <southbridge/intel/lynxpoint/pch.h>
+
+void mainboard_config_rcba(void)
+{
+ RCBA16(D31IR) = DIR_ROUTE(PIRQF, PIRQD, PIRQC, PIRQA);
+ RCBA16(D29IR) = DIR_ROUTE(PIRQB, PIRQD, PIRQA, PIRQC);
+ RCBA16(D28IR) = DIR_ROUTE(PIRQA, PIRQA, PIRQA, PIRQA);
+ RCBA16(D27IR) = DIR_ROUTE(PIRQG, PIRQB, PIRQC, PIRQD);
+ RCBA16(D26IR) = DIR_ROUTE(PIRQA, PIRQF, PIRQC, PIRQD);
+ RCBA16(D25IR) = DIR_ROUTE(PIRQE, PIRQB, PIRQC, PIRQD);
+ RCBA16(D22IR) = DIR_ROUTE(PIRQA, PIRQB, PIRQC, PIRQD);
+ RCBA16(D20IR) = DIR_ROUTE(PIRQA, PIRQB, PIRQC, PIRQD);
+}
+
+void mb_get_spd_map(uint8_t spd_map[4])
+{
+ spd_map[0] = 0xa0;
+ spd_map[2] = 0xa2;
+}
+
+void mainboard_fill_pei_data(struct pei_data *pei_data)
+{
+ struct usb2_port_setting usb2_ports[MAX_USB2_PORTS] = {
+ /* FIXME: Length and Location are computed from IOBP values, may be inaccurate */
+ /* Length, Enable, OCn#, Location */
+ { 0x0110, 1, 0, USB_PORT_BACK_PANEL }, /* dock */
+ { 0x0080, 1, 0, USB_PORT_BACK_PANEL }, /* right */
+ { 0x0110, 1, 1, USB_PORT_BACK_PANEL }, /* right */
+ { 0x0110, 1, 1, USB_PORT_BACK_PANEL }, /* left */
+ { 0x0110, 1, 2, USB_PORT_BACK_PANEL },
+ { 0x0080, 1, 2, USB_PORT_BACK_PANEL },
+ { 0x0110, 1, 3, USB_PORT_BACK_PANEL }, /* webcam */
+ { 0x0080, 1, 3, USB_PORT_DOCK },
+ { 0x0110, 1, 4, USB_PORT_BACK_PANEL }, /* left */
+ { 0x0110, 1, 4, USB_PORT_BACK_PANEL },
+ { 0x0110, 1, 5, USB_PORT_BACK_PANEL }, /* M.2 */
+ { 0x0110, 1, 5, USB_PORT_BACK_PANEL }, /* WLAN */
+ { 0x0110, 1, 6, USB_PORT_BACK_PANEL },
+ { 0x0080, 1, 6, USB_PORT_DOCK },
+ };
+ struct usb3_port_setting usb3_ports[MAX_USB3_PORTS] = {
+ { 1, 0 },
+ { 1, 0 },
+ { 1, 1 },
+ { 1, 1 },
+ { 1, 2 },
+ { 0, 2 },
+ };
+ memcpy(pei_data->usb2_ports, usb2_ports, sizeof(usb2_ports));
+ memcpy(pei_data->usb3_ports, usb3_ports, sizeof(usb3_ports));
+}
--
To view, visit https://review.coreboot.org/c/coreboot/+/46130
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I07f433784292e3765bde3736414ff0eae525a046
Gerrit-Change-Number: 46130
Gerrit-PatchSet: 1
Gerrit-Owner: Iru Cai (vimacs) <mytbk920423(a)gmail.com>
Gerrit-Reviewer: Iru Cai <mytbk920423(a)gmail.com>
Gerrit-Reviewer: Martin Roth <martinroth(a)google.com>
Gerrit-Reviewer: Patrick Georgi <pgeorgi(a)google.com>
Gerrit-MessageType: newchange
4
13
Change in coreboot[master]: soc/intel/broadwell: Add ACPI CIDs for SerialIO devices
by Angel Pons (Code Review) April 14, 2024
by Angel Pons (Code Review) April 14, 2024
April 14, 2024
Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/46973 )
Change subject: soc/intel/broadwell: Add ACPI CIDs for SerialIO devices
......................................................................
soc/intel/broadwell: Add ACPI CIDs for SerialIO devices
Lynxpoint has them, so add them on Broadwell as well.
Change-Id: Iaa3e8044090262a64e58062ec4b116976978ce55
Signed-off-by: Angel Pons <th3fanbus(a)gmail.com>
---
M src/soc/intel/broadwell/pch/acpi/serialio.asl
1 file changed, 6 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/73/46973/1
diff --git a/src/soc/intel/broadwell/pch/acpi/serialio.asl b/src/soc/intel/broadwell/pch/acpi/serialio.asl
index 2bacd2b..1e6dbac 100644
--- a/src/soc/intel/broadwell/pch/acpi/serialio.asl
+++ b/src/soc/intel/broadwell/pch/acpi/serialio.asl
@@ -166,6 +166,7 @@
// LynxPoint-LP
Return ("INT33C2")
}
+ Name (_CID, "INT33C2")
Name (_UID, 1)
Name (SSCN, Package () { 432, 507, 30 })
@@ -242,6 +243,7 @@
// LynxPoint-LP
Return ("INT33C3")
}
+ Name (_CID, "INT33C3")
Name (_UID, 1)
Name (SSCN, Package () { 432, 507, 30 })
@@ -318,6 +320,7 @@
// LynxPoint-LP
Return ("INT33C0")
}
+ Name (_CID, "INT33C0")
Name (_UID, 1)
// BAR0 is assigned during PCI enumeration and saved into NVS
@@ -379,6 +382,7 @@
// LynxPoint-LP
Return ("INT33C1")
}
+ Name (_CID, "INT33C1")
Name (_UID, 1)
// BAR0 is assigned during PCI enumeration and saved into NVS
@@ -452,6 +456,7 @@
// LynxPoint-LP
Return ("INT33C4")
}
+ Name (_CID, "INT33C4")
Name (_UID, 1)
// BAR0 is assigned during PCI enumeration and saved into NVS
@@ -525,6 +530,7 @@
// LynxPoint-LP
Return ("INT33C5")
}
+ Name (_CID, "INT33C5")
Name (_UID, 1)
// BAR0 is assigned during PCI enumeration and saved into NVS
--
To view, visit https://review.coreboot.org/c/coreboot/+/46973
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Iaa3e8044090262a64e58062ec4b116976978ce55
Gerrit-Change-Number: 46973
Gerrit-PatchSet: 1
Gerrit-Owner: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Patrick Rudolph <siro(a)das-labor.org>
Gerrit-MessageType: newchange
4
6
Change in coreboot[master]: soc/intel/broadwell/pch/sata.c: Add missing SATA init steps
by Angel Pons (Code Review) April 13, 2024
by Angel Pons (Code Review) April 13, 2024
April 13, 2024
Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/47029 )
Change subject: soc/intel/broadwell/pch/sata.c: Add missing SATA init steps
......................................................................
soc/intel/broadwell/pch/sata.c: Add missing SATA init steps
WildcatPoint-LP BIOS spec lists them, and are the same for Lynxpoint.
Keep the BWG comments for now, since both platforms will be merged soon.
Change-Id: Iba28c1591affafeb37097084c2fa58128974bd00
Signed-off-by: Angel Pons <th3fanbus(a)gmail.com>
---
M src/soc/intel/broadwell/pch/sata.c
1 file changed, 9 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/29/47029/1
diff --git a/src/soc/intel/broadwell/pch/sata.c b/src/soc/intel/broadwell/pch/sata.c
index 91c2ff5..e9d70f1 100644
--- a/src/soc/intel/broadwell/pch/sata.c
+++ b/src/soc/intel/broadwell/pch/sata.c
@@ -95,6 +95,15 @@
/* Setup register 98h */
reg32 = pci_read_config32(dev, 0x98);
+ reg32 |= 1 << 19; /* BWG step 6 */
+ reg32 |= 1 << 22; /* BWG step 5 */
+ reg32 &= ~(0x3f << 7);
+ reg32 |= 0x04 << 7; /* BWG step 7 */
+ reg32 |= 1 << 20; /* BWG step 8 */
+ reg32 &= ~(0x03 << 5);
+ reg32 |= 1 << 5; /* BWG step 9 */
+ reg32 |= 1 << 18; /* BWG step 10 */
+ reg32 |= 1 << 29; /* BWG step 11 */
reg32 &= ~((1 << 31) | (1 << 30));
reg32 |= 1 << 23;
reg32 |= 1 << 24; /* Enable MPHY Dynamic Power Gating */
--
To view, visit https://review.coreboot.org/c/coreboot/+/47029
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Iba28c1591affafeb37097084c2fa58128974bd00
Gerrit-Change-Number: 47029
Gerrit-PatchSet: 1
Gerrit-Owner: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Patrick Rudolph <siro(a)das-labor.org>
Gerrit-MessageType: newchange
4
14
Change in coreboot[master]: sb/intel/lynxpoint/lpc.c: Follow Broadwell's order
by Angel Pons (Code Review) April 11, 2024
by Angel Pons (Code Review) April 11, 2024
April 11, 2024
Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/47046 )
Change subject: sb/intel/lynxpoint/lpc.c: Follow Broadwell's order
......................................................................
sb/intel/lynxpoint/lpc.c: Follow Broadwell's order
Change-Id: Ibddac69297fd7ae901cde92d66e6c0485b526da1
Signed-off-by: Angel Pons <th3fanbus(a)gmail.com>
---
M src/southbridge/intel/lynxpoint/lpc.c
1 file changed, 35 insertions(+), 35 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/46/47046/1
diff --git a/src/southbridge/intel/lynxpoint/lpc.c b/src/southbridge/intel/lynxpoint/lpc.c
index 1845273..d1780fa 100644
--- a/src/southbridge/intel/lynxpoint/lpc.c
+++ b/src/southbridge/intel/lynxpoint/lpc.c
@@ -190,7 +190,6 @@
u16 reg16;
u32 reg32;
const char *state;
- u16 pmbase = get_pmbase();
int pwr_on = CONFIG_MAINBOARD_POWER_FAILURE_STATE;
int nmi_option;
@@ -232,26 +231,6 @@
pci_write_config16(dev, GEN_PMCON_3, reg16);
printk(BIOS_INFO, "Set power %s after power failure.\n", state);
- /* Set up NMI on errors. */
- reg8 = inb(0x61);
- reg8 &= 0x0f; /* Higher Nibble must be 0 */
- reg8 &= ~(1 << 3); /* IOCHK# NMI Enable */
- // reg8 &= ~(1 << 2); /* PCI SERR# Enable */
- reg8 |= (1 << 2); /* PCI SERR# Disable for now */
- outb(reg8, 0x61);
-
- reg8 = inb(0x70);
- nmi_option = NMI_OFF;
- get_option(&nmi_option, "nmi");
- if (nmi_option) {
- printk(BIOS_INFO, "NMI sources enabled.\n");
- reg8 &= ~(1 << 7); /* Set NMI. */
- } else {
- printk(BIOS_INFO, "NMI sources disabled.\n");
- reg8 |= (1 << 7); /* Can't mask NMI from PCI-E and NMI_NOW */
- }
- outb(reg8, 0x70);
-
/* Enable CPU_SLP# and Intel Speedstep, set SMI# rate down */
reg16 = pci_read_config16(dev, GEN_PMCON_1);
reg16 &= ~(3 << 0); // SMI# rate 1 minute
@@ -275,6 +254,11 @@
/* SMI setup based on device tree configuration */
enable_alt_smi(config->alt_gp_smi_en);
}
+}
+
+static void pch_misc_init(struct device *dev)
+{
+ u16 pmbase = get_pmbase();
/* Set up power management block and determine sleep mode */
reg32 = inl(pmbase + 0x04); // PM1_CNT
@@ -282,12 +266,40 @@
reg32 |= (1 << 0); // SCI_EN
outl(reg32, pmbase + 0x04);
+ /* Set up NMI on errors. */
+ reg8 = inb(0x61);
+ reg8 &= 0x0f; /* Higher Nibble must be 0 */
+ reg8 &= ~(1 << 3); /* IOCHK# NMI Enable */
+ // reg8 &= ~(1 << 2); /* PCI SERR# Enable */
+ reg8 |= (1 << 2); /* PCI SERR# Disable for now */
+ outb(reg8, 0x61);
+
+ reg8 = inb(0x70);
+ nmi_option = NMI_OFF;
+ get_option(&nmi_option, "nmi");
+ if (nmi_option) {
+ printk(BIOS_INFO, "NMI sources enabled.\n");
+ reg8 &= ~(1 << 7); /* Set NMI. */
+ } else {
+ printk(BIOS_INFO, "NMI sources disabled.\n");
+ reg8 |= (1 << 7); /* Can't mask NMI from PCI-E and NMI_NOW */
+ }
+ outb(reg8, 0x70);
+
+ /* Indicate DRAM init done for MRC S3 to know it can resume */
+ pci_or_config8(dev, GEN_PMCON_2, 1 << 7);
+
+ /* Enable BIOS updates outside of SMM */
+ pci_and_config8(dev, BIOS_CNTL, ~(1 << 5));
+
/* Clear magic status bits to prevent unexpected wake */
RCBA32_OR(0x3310, (1 << 4) | (1 << 5) | (1 << 0));
reg16 = RCBA16(0x3f02);
reg16 &= ~0xf;
RCBA16(0x3f02) = reg16;
+
+ pch_enable_serial_irqs(dev);
}
/* LynxPoint PCH Power Management init */
@@ -461,18 +473,8 @@
apm_control(APM_CNT_ACPI_DISABLE);
}
-static void pch_disable_smm_only_flashing(struct device *dev)
-{
- printk(BIOS_SPEW, "Enabling BIOS updates outside of SMM... ");
-
- pci_and_config8(dev, BIOS_CNTL, ~(1 << 5));
-}
-
static void pch_fixups(struct device *dev)
{
- /* Indicate DRAM init done for MRC S3 to know it can resume */
- pci_or_config8(dev, GEN_PMCON_2, 1 << 7);
-
/*
* Enable DMI ASPM in the PCH
*/
@@ -488,14 +490,14 @@
/* IO APIC initialization. */
pch_enable_ioapic(dev);
- pch_enable_serial_irqs(dev);
-
/* Setup the PIRQ. */
pch_pirq_init(dev);
/* Setup power options. */
pch_power_options(dev);
+ pch_misc_init(dev);
+
/* Initialize power management */
if (pch_is_lp()) {
lpt_lp_pm_init(dev);
@@ -519,8 +521,6 @@
/* Interrupt 9 should be level triggered (SCI) */
i8259_configure_irq_trigger(9, 1);
- pch_disable_smm_only_flashing(dev);
-
pch_set_acpi_mode();
pch_fixups(dev);
--
To view, visit https://review.coreboot.org/c/coreboot/+/47046
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Ibddac69297fd7ae901cde92d66e6c0485b526da1
Gerrit-Change-Number: 47046
Gerrit-PatchSet: 1
Gerrit-Owner: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Patrick Rudolph <siro(a)das-labor.org>
Gerrit-MessageType: newchange
2
4
Change in coreboot[master]: [UNTESTED] sb/intel/bd82x6x: Replace `write_iobp`
by Angel Pons (Code Review) April 11, 2024
by Angel Pons (Code Review) April 11, 2024
April 11, 2024
Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/49177 )
Change subject: [UNTESTED] sb/intel/bd82x6x: Replace `write_iobp`
......................................................................
[UNTESTED] sb/intel/bd82x6x: Replace `write_iobp`
Use the already-existing `pch_iobp_update` function instead. Only update
individual fields, like reference code does. Several replay issues still
remain, and have been marked with comments. Follow-ups will handle them.
Change-Id: I5b95134a504d693f8e6f2df35784bf75037b7b16
Signed-off-by: Angel Pons <th3fanbus(a)gmail.com>
---
M src/southbridge/intel/bd82x6x/early_pch.c
1 file changed, 71 insertions(+), 94 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/77/49177/1
diff --git a/src/southbridge/intel/bd82x6x/early_pch.c b/src/southbridge/intel/bd82x6x/early_pch.c
index 903dc01..0b60d13 100644
--- a/src/southbridge/intel/bd82x6x/early_pch.c
+++ b/src/southbridge/intel/bd82x6x/early_pch.c
@@ -16,41 +16,6 @@
#include "pch.h"
#include "chip.h"
-static void wait_iobp(void)
-{
- while (RCBA8(IOBPS) & 1)
- ; // implement timeout?
-}
-
-static u32 read_iobp(u32 address)
-{
- u32 ret;
-
- RCBA32(IOBPIRI) = address;
- RCBA16(IOBPS) = (RCBA16(IOBPS) & 0x1ff) | 0x600;
- wait_iobp();
- ret = RCBA32(IOBPD);
- wait_iobp();
- RCBA8(IOBPS); // call wait_iobp() instead here?
- return ret;
-}
-
-static void write_iobp(u32 address, u32 val)
-{
- /* this function was probably pch_iobp_update with the andvalue
- * being 0. So either the IOBP read can be removed or this function
- * and the pch_iobp_update function in ramstage could be merged */
- read_iobp(address);
- RCBA16(IOBPS) = (RCBA16(IOBPS) & 0x1ff) | 0x600;
- wait_iobp();
-
- RCBA32(IOBPD) = val;
- wait_iobp();
- RCBA16(IOBPS) = (RCBA16(IOBPS) & 0x1ff) | 0x600;
-
- RCBA8(IOBPS); // call wait_iobp() instead here?
-}
-
void early_pch_init_native_dmi_pre(void)
{
/* Link Capabilities Register */
@@ -184,67 +149,79 @@
pch_assign_pcie_lane_mapping();
- write_iobp(0xea007f62, 0x00590133);
- write_iobp(0xec007f62, 0x00590133);
- write_iobp(0xec007f64, 0x59555588);
- write_iobp(0xea0040b9, 0x0001051c);
- write_iobp(0xeb0040a1, 0x800084ff);
- write_iobp(0xec0040a1, 0x800084ff);
- write_iobp(0xea004001, 0x00008400);
- write_iobp(0xeb004002, 0x40201758);
- write_iobp(0xec004002, 0x40201758);
- write_iobp(0xea004002, 0x00601758);
- write_iobp(0xea0040a1, 0x810084ff);
- write_iobp(0xeb0040b1, 0x0001c598);
- write_iobp(0xec0040b1, 0x0001c598);
- write_iobp(0xeb0040b6, 0x0001c598);
- write_iobp(0xea0000a9, 0x80ff969f);
- write_iobp(0xea0001a9, 0x80ff969f);
- write_iobp(0xeb0040b2, 0x0001c396);
- write_iobp(0xeb0040b3, 0x0001c396);
- write_iobp(0xec0040b2, 0x0001c396);
- write_iobp(0xea0001a9, 0x80ff94ff);
- write_iobp(SATA_IOBP_SP0G3IR, 0x0088037f);
- write_iobp(0xea0000a9, 0x80ff94ff);
- write_iobp(SATA_IOBP_SP1G3IR, 0x0088037f);
+ pch_iobp_update(0xea007f62, ~(0xff << 16), 0x59 << 16);
+ pch_iobp_update(0xec007f62, ~(0xff << 16), 0x59 << 16);
+ pch_iobp_update(0xec007f64, ~(0xf << 24), 0x9 << 24);
+ pch_iobp_update(0xea0040b9, ~0xffff, 0x051c);
+ pch_iobp_update(0xeb0040a1, ~(0x3ff << 3), 0x9f << 3);
+ pch_iobp_update(0xec0040a1, ~(0x3ff << 3), 0x9f << 3);
- write_iobp(0xea007f05, 0x00010642);
- write_iobp(0xea0040b7, 0x0001c91c);
- write_iobp(0xea0040b8, 0x0001c91c);
- write_iobp(0xeb0040a1, 0x820084ff);
- write_iobp(0xec0040a1, 0x820084ff);
- write_iobp(0xea007f0a, 0xc2480000);
+ /* Some CPT-only writes go here */
- write_iobp(0xec00404d, 0x1ff177f);
- write_iobp(0xec000084, 0x5a600000);
- write_iobp(0xec000184, 0x5a600000);
- write_iobp(0xec000284, 0x5a600000);
- write_iobp(0xec000384, 0x5a600000);
- write_iobp(0xec000094, 0x000f0501);
- write_iobp(0xec000194, 0x000f0501);
- write_iobp(0xec000294, 0x000f0501);
- write_iobp(0xec000394, 0x000f0501);
- write_iobp(0xec000096, 0x00000001);
- write_iobp(0xec000196, 0x00000001);
- write_iobp(0xec000296, 0x00000001);
- write_iobp(0xec000396, 0x00000001);
- write_iobp(0xec000001, 0x00008c08);
- write_iobp(0xec000101, 0x00008c08);
- write_iobp(0xec000201, 0x00008c08);
- write_iobp(0xec000301, 0x00008c08);
- write_iobp(0xec0040b5, 0x0001c518);
- write_iobp(0xec000087, 0x06077597);
- write_iobp(0xec000187, 0x06077597);
- write_iobp(0xec000287, 0x06077597);
- write_iobp(0xec000387, 0x06077597);
- write_iobp(0xea000050, 0x00bb0157);
- write_iobp(0xea000150, 0x00bb0157);
- write_iobp(0xec007f60, 0x77777d77);
- write_iobp(0xea00008d, 0x01320000);
- write_iobp(0xea00018d, 0x01320000);
- write_iobp(0xec0007b2, 0x04514b5e);
- write_iobp(0xec00078c, 0x40000200);
- write_iobp(0xec000780, 0x02000020);
+ pch_iobp_update(0xea004001, ~(3 << 10), 1 << 10);
+ pch_iobp_update(0xeb004002, ~0, 1 << 30 | 1 << 21);
+ pch_iobp_update(0xec004002, ~0, 1 << 30 | 1 << 21);
+ pch_iobp_update(0xea004002, ~0, 1 << 22 | 1 << 21);
+ pch_iobp_update(0xea0040a1, ~0, 1 << 24);
+ pch_iobp_update(0xeb0040b1, ~0xffff, 0xc598);
+ pch_iobp_update(0xec0040b1, ~0xffff, 0xc598);
+ pch_iobp_update(0xeb0040b6, ~0xffff, 0xc598);
+ pch_iobp_update(0xea0000a9, ~(3 << 14), 2 << 14);
+ pch_iobp_update(0xea0001a9, ~(3 << 14), 2 << 14);
+ pch_iobp_update(0xeb0040b2, ~0xffff, 0xc396);
+ pch_iobp_update(0xeb0040b3, ~0xffff, 0xc396);
+ pch_iobp_update(0xec0040b2, ~0xffff, 0xc396);
+
+ /* Assumes SATA direct connect, trace length <= 3.5" */
+ pch_iobp_update(0xea0001a9, ~(0x3ff << 3), 0x29f << 3);
+ pch_iobp_update(SATA_IOBP_SP0G3IR, ~(0xff << 16 | 0x3f << 8), 0x88 << 16 | 3 << 8);
+ pch_iobp_update(0xea0000a9, ~(0x3ff << 3), 0x29f << 3);
+ pch_iobp_update(SATA_IOBP_SP1G3IR, ~(0xff << 16 | 0x3f << 8), 0x88 << 16 | 3 << 8);
+
+ /* TODO: Needs special handling */
+ pch_iobp_update(0xea007f05, 0, 0x00010642);
+
+ pch_iobp_update(0xea0040b7, ~0xffff, 0xc91c);
+ pch_iobp_update(0xea0040b8, ~0xffff, 0xc91c);
+ pch_iobp_update(0xeb0040a1, ~0, 1 << 25);
+ pch_iobp_update(0xec0040a1, ~0, 1 << 25);
+ pch_iobp_update(0xea007f0a, ~0, 3 << 30);
+
+ /* PPT A0 resume-only xHCI workaround goes here */
+
+ /* TODO: This section is PPT-only */
+ pch_iobp_update(0xec00404d, ~(0xff3f << 8), 0xff17 << 8);
+ pch_iobp_update(0xec000084, ~(1 << 31), 0);
+ pch_iobp_update(0xec000184, ~(1 << 31), 0);
+ pch_iobp_update(0xec000284, ~(1 << 31), 0);
+ pch_iobp_update(0xec000384, ~(1 << 31), 0);
+ pch_iobp_update(0xec000094, ~0, 0xf << 16);
+ pch_iobp_update(0xec000194, ~0, 0xf << 16);
+ pch_iobp_update(0xec000294, ~0, 0xf << 16);
+ pch_iobp_update(0xec000394, ~0, 0xf << 16);
+ pch_iobp_update(0xec000096, ~0x3ff, 1);
+ pch_iobp_update(0xec000196, ~0x3ff, 1);
+ pch_iobp_update(0xec000296, ~0x3ff, 1);
+ pch_iobp_update(0xec000396, ~0x3ff, 1);
+ pch_iobp_update(0xec000001, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec000101, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec000201, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec000301, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec0040b5, ~0xffff, 0xc518);
+ pch_iobp_update(0xec000087, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xec000187, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xec000287, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xec000387, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xea000050, ~(0xff << 16), 0xbb << 16);
+ pch_iobp_update(0xea000150, ~(0xff << 16), 0xbb << 16);
+ pch_iobp_update(0xec007f60, ~(0xf << 8), 0xd << 8);
+ pch_iobp_update(0xea00008d, ~0, 3 << 20);
+ pch_iobp_update(0xea00018d, ~0, 3 << 20);
+
+ /* TODO: Figure out what these writes mean */
+ pch_iobp_update(0xec0007b2, 0, 0x04514b5e);
+ pch_iobp_update(0xec00078c, 0, 0x40000200);
+ pch_iobp_update(0xec000780, 0, 0x02000020);
}
static void pch_enable_gbe(void)
--
To view, visit https://review.coreboot.org/c/coreboot/+/49177
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I5b95134a504d693f8e6f2df35784bf75037b7b16
Gerrit-Change-Number: 49177
Gerrit-PatchSet: 1
Gerrit-Owner: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Patrick Rudolph <siro(a)das-labor.org>
Gerrit-MessageType: newchange
2
3
Change in coreboot[master]: nb/intel/sandybridge: Improve channel disable logic
by Angel Pons (Code Review) April 11, 2024
by Angel Pons (Code Review) April 11, 2024
April 11, 2024
Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/45500 )
Change subject: nb/intel/sandybridge: Improve channel disable logic
......................................................................
nb/intel/sandybridge: Improve channel disable logic
Do not consider the failed channel's SPDs in emergency mode. Also, force
a full training if not resuming from S3 and the saved data indicates a
channel has failed. Special care needs to be taken as the selected
memory frequency could be raised after a channel has been disabled.
Tested on Asus P8Z77-V LX2, with a good DIMM on channel 0 and a bad DIMM
on channel 1. The failing channel causes errors when discovering timB,
and emergency mode raminit for the other channel is good enough to boot.
With this commit:
a. Regular boots always result in full training.
b. The board still boots, as emergency raminit trained the good DIMM.
c. S3 resume still works in all tested configurations.
d. If pretending the bad DIMM is slower:
1. The MPLL gets locked at the slow frequency of the bad DIMM.
2. The first raminit attempt still fails miserably on the bad DIMM.
3. Emergency mode uses the frequency the MPLL is locked at.
4. The board boots with the good DIMM running at the slow frequency.
With good DIMMs on both channels, everything works the same as before.
Change-Id: I3d34594561680906cb0b15a9c6a5fa7a773c0496
Signed-off-by: Angel Pons <th3fanbus(a)gmail.com>
---
M src/northbridge/intel/sandybridge/raminit.c
M src/northbridge/intel/sandybridge/raminit_common.h
M src/northbridge/intel/sandybridge/raminit_native.c
3 files changed, 38 insertions(+), 14 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/00/45500/1
diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c
index 319fea3..51c57c6 100644
--- a/src/northbridge/intel/sandybridge/raminit.c
+++ b/src/northbridge/intel/sandybridge/raminit.c
@@ -43,15 +43,7 @@
/* Disable a channel in ramctr_timing */
static void disable_channel(ramctr_timing *ctrl, int channel)
{
- ctrl->rankmap[channel] = 0;
-
- memset(&ctrl->rank_mirror[channel][0], 0, sizeof(ctrl->rank_mirror[0]));
-
- ctrl->channel_size_mb[channel] = 0;
- ctrl->cmd_stretch[channel] = 0;
- ctrl->mad_dimm[channel] = 0;
- memset(&ctrl->timings[channel][0], 0, sizeof(ctrl->timings[0]));
- memset(&ctrl->info.dimm[channel][0], 0, sizeof(ctrl->info.dimm[0]));
+ ctrl->failed_channels |= BIT(channel);
}
static bool nb_supports_ecc(const uint32_t capid0_a)
@@ -163,6 +155,10 @@
FOR_ALL_CHANNELS {
ctrl->channel_size_mb[channel] = 0;
+ /* Skip decoding the SPDs of failed channels */
+ if (ctrl->failed_channels & BIT(channel))
+ continue;
+
ch_dimms = 0;
/* Count dimms on channel */
for (slot = 0; slot < NUM_SLOTS; slot++) {
@@ -345,8 +341,21 @@
system_reset();
}
+ /*
+ * Discard the saved data if it is from raminit emergency mode.
+ * Ideally, we would not advertise support for ACPI S3 in such
+ * cases, because there is evidence that the RAM has stability
+ * problems. Until then, skip this sanity check on S3 resumes.
+ */
+ if (!s3resume && ctrl_cached && ctrl_cached->failed_channels) {
+ printk(BIOS_ERR, "Stored timings indicate channels have failed.\n");
+
+ ctrl_cached = NULL;
+ }
+
/* Verify MRC cache for fast boot */
if (!s3resume && ctrl_cached) {
+
/* Load SPD unique information data. */
memset(spds, 0, sizeof(spds));
mainboard_get_spd(spds, 1);
@@ -391,6 +400,13 @@
}
if (err) {
+ /*
+ * We can't reinitialize the DRAM MPLL at a different frequency.
+ * As we want to ignore the SPDs on the failed channel, we have
+ * to use the same tCK in emergency mode to avoid some troubles.
+ */
+ const u32 old_tCK = ctrl.tCK;
+
/* Fallback: disable failing channel */
printk(BIOS_ERR, "RAM training failed, trying fallback.\n");
printram("Disable failing channel.\n");
@@ -398,12 +414,15 @@
/* Reset internal state */
reinit_ctrl(&ctrl, cpuid);
- /* Reset DDR3 frequency */
- dram_find_spds_ddr3(spds, &ctrl);
-
/* Disable failing channel */
disable_channel(&ctrl, GET_ERR_CHANNEL(err));
+ /* Restore tCK */
+ ctrl.tCK = old_tCK;
+
+ /* Recalculate DDR3 frequency */
+ dram_find_spds_ddr3(spds, &ctrl);
+
err = try_init_dram_ddr3(&ctrl, fast_boot, s3resume, me_uma_size);
}
diff --git a/src/northbridge/intel/sandybridge/raminit_common.h b/src/northbridge/intel/sandybridge/raminit_common.h
index 32f2b44..cf3d6a9 100644
--- a/src/northbridge/intel/sandybridge/raminit_common.h
+++ b/src/northbridge/intel/sandybridge/raminit_common.h
@@ -105,7 +105,7 @@
/*
* WARNING: Do not forget to increase MRC_CACHE_VERSION when the saved data is changed!
*/
-#define MRC_CACHE_VERSION 5
+#define MRC_CACHE_VERSION 6
typedef struct odtmap_st {
u16 rttwr;
@@ -185,6 +185,9 @@
/* Bits [0..11] of PM_DLL_CONFIG: Master DLL wakeup delay timer */
u16 mdll_wake_delay;
+ /* Bitmap of channels that have failed */
+ u8 failed_channels;
+
u8 rankmap[NUM_CHANNELS];
int ref_card_offset[NUM_CHANNELS];
u32 mad_dimm[NUM_CHANNELS];
diff --git a/src/northbridge/intel/sandybridge/raminit_native.c b/src/northbridge/intel/sandybridge/raminit_native.c
index c23a5ac..a469910 100644
--- a/src/northbridge/intel/sandybridge/raminit_native.c
+++ b/src/northbridge/intel/sandybridge/raminit_native.c
@@ -265,7 +265,9 @@
printk(BIOS_DEBUG, "PLL_REF100_CFG value: 0x%x\n", ref_100mhz_support);
- ctrl->tCK = get_mem_min_tck();
+ /* In emergency mode, use provided tCK if non-zero. Otherwise, calculate it. */
+ if (!ctrl->failed_channels || !ctrl->tCK)
+ ctrl->tCK = get_mem_min_tck();
/* Find CAS latency */
while (1) {
--
To view, visit https://review.coreboot.org/c/coreboot/+/45500
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I3d34594561680906cb0b15a9c6a5fa7a773c0496
Gerrit-Change-Number: 45500
Gerrit-PatchSet: 1
Gerrit-Owner: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Patrick Rudolph <siro(a)das-labor.org>
Gerrit-MessageType: newchange
3
8
Change in coreboot[master]: [UNTESTED] sb/intel/bd82x6x: Clean up `early_pch_init` function
by Angel Pons (Code Review) April 11, 2024
by Angel Pons (Code Review) April 11, 2024
April 11, 2024
Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/49169 )
Change subject: [UNTESTED] sb/intel/bd82x6x: Clean up `early_pch_init` function
......................................................................
[UNTESTED] sb/intel/bd82x6x: Clean up `early_pch_init` function
It was being run twice, in both bootblock and romstage. Using Lynxpoint
as a reference, reorder the code so that it is only run once.
Change-Id: Ia77042c0640929cec05fdd9a9f8c7235fdfe8390
Signed-off-by: Angel Pons <th3fanbus(a)gmail.com>
---
M src/southbridge/intel/bd82x6x/bootblock.c
M src/southbridge/intel/bd82x6x/early_pch.c
M src/southbridge/intel/bd82x6x/pch.h
3 files changed, 37 insertions(+), 33 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/69/49169/1
diff --git a/src/southbridge/intel/bd82x6x/bootblock.c b/src/southbridge/intel/bd82x6x/bootblock.c
index a3228e7..f594a9f 100644
--- a/src/southbridge/intel/bd82x6x/bootblock.c
+++ b/src/southbridge/intel/bd82x6x/bootblock.c
@@ -3,8 +3,15 @@
#include <arch/bootblock.h>
#include <device/pci_ops.h>
#include <southbridge/intel/common/early_spi.h>
+#include <types.h>
+
#include "pch.h"
+static void map_rcba(void)
+{
+ pci_write_config32(PCH_LPC_DEV, RCBA, (uintptr_t)DEFAULT_RCBA | 1);
+}
+
static void enable_port80_on_lpc(void)
{
/* Enable port 80 POST on LPC */
@@ -33,13 +40,14 @@
void bootblock_early_southbridge_init(void)
{
+ map_rcba();
enable_spi_prefetching_and_caching();
-
- early_pch_init();
-
enable_port80_on_lpc();
set_spi_speed();
/* Enable upper 128bytes of CMOS */
RCBA32(RC) = (1 << 2);
+
+ pch_enable_lpc_decode();
+ mainboard_pch_lpc_setup();
}
diff --git a/src/southbridge/intel/bd82x6x/early_pch.c b/src/southbridge/intel/bd82x6x/early_pch.c
index 6daafe0..f684a96 100644
--- a/src/southbridge/intel/bd82x6x/early_pch.c
+++ b/src/southbridge/intel/bd82x6x/early_pch.c
@@ -216,26 +216,6 @@
write_iobp(0xec000780, 0x02000020);
}
-static void pch_enable_bars(void)
-{
- pci_write_config32(PCH_LPC_DEV, RCBA, (uintptr_t)DEFAULT_RCBA | 1);
-
- pci_write_config32(PCH_LPC_DEV, PMBASE, DEFAULT_PMBASE | 1);
-
- pci_write_config8(PCH_LPC_DEV, ACPI_CNTL, ACPI_EN);
-
- pci_write_config32(PCH_LPC_DEV, GPIO_BASE, DEFAULT_GPIOBASE | 1);
-
- /* Enable GPIO functionality. */
- pci_write_config8(PCH_LPC_DEV, GPIO_CNTL, 0x10);
-}
-
-static void pch_generic_setup(void)
-{
- RCBA32(GCS) = RCBA32(GCS) | (1 << 5); /* No reset */
- write_pmbase16(TCO1_CNT, 1 << 11); /* halt timer */
-}
-
static void pch_enable_gbe(void)
{
uint8_t wanted_buc;
@@ -260,7 +240,27 @@
}
}
-static void pch_enable_lpc_decode(void)
+static void pch_enable_bars(void)
+{
+ pci_write_config32(PCH_LPC_DEV, RCBA, (uintptr_t)DEFAULT_RCBA | 1);
+
+ pci_write_config32(PCH_LPC_DEV, PMBASE, DEFAULT_PMBASE | 1);
+
+ pci_write_config8(PCH_LPC_DEV, ACPI_CNTL, ACPI_EN);
+
+ pci_write_config32(PCH_LPC_DEV, GPIO_BASE, DEFAULT_GPIOBASE | 1);
+
+ /* Enable GPIO functionality. */
+ pci_write_config8(PCH_LPC_DEV, GPIO_CNTL, 0x10);
+}
+
+static void pch_generic_setup(void)
+{
+ RCBA32(GCS) = RCBA32(GCS) | (1 << 5); /* No reset */
+ write_pmbase16(TCO1_CNT, 1 << 11); /* halt timer */
+}
+
+void pch_enable_lpc_decode(void)
{
/*
* Enable some common LPC IO ranges:
@@ -298,18 +298,13 @@
void early_pch_init(void)
{
- pch_enable_lpc_decode();
-
- mainboard_pch_lpc_setup();
+ pch_enable_gbe();
pch_enable_bars();
- pch_generic_setup();
-
- pch_enable_gbe();
-
setup_pch_gpios(&mainboard_gpio_map);
- if (ENV_ROMSTAGE)
- enable_smbus();
+ pch_generic_setup();
+
+ enable_smbus();
}
diff --git a/src/southbridge/intel/bd82x6x/pch.h b/src/southbridge/intel/bd82x6x/pch.h
index dcab839..3b91e31 100644
--- a/src/southbridge/intel/bd82x6x/pch.h
+++ b/src/southbridge/intel/bd82x6x/pch.h
@@ -56,6 +56,7 @@
/* Optional mainboard hook to do additional LPC configuration
or to override what is set up by default. */
void mainboard_pch_lpc_setup(void);
+void pch_enable_lpc_decode(void);
void early_pch_init_native(void);
void early_pch_init(void);
void early_pch_init_native_dmi_pre(void);
--
To view, visit https://review.coreboot.org/c/coreboot/+/49169
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Ia77042c0640929cec05fdd9a9f8c7235fdfe8390
Gerrit-Change-Number: 49169
Gerrit-PatchSet: 1
Gerrit-Owner: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Patrick Rudolph <siro(a)das-labor.org>
Gerrit-MessageType: newchange
2
3
Change in coreboot[master]: [UNTESTED] sb/intel/bd82x6x: Account for PCH type in IOBP magic
by Angel Pons (Code Review) April 11, 2024
by Angel Pons (Code Review) April 11, 2024
April 11, 2024
Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/49178 )
Change subject: [UNTESTED] sb/intel/bd82x6x: Account for PCH type in IOBP magic
......................................................................
[UNTESTED] sb/intel/bd82x6x: Account for PCH type in IOBP magic
The initial steps came out of trace output from a Panther Point system.
Add missing Cougar Point steps, and guard Panther Point specific steps.
Change-Id: I2569f9c436f545a5e3ffda5a31ab27c27469f540
Signed-off-by: Angel Pons <th3fanbus(a)gmail.com>
---
M src/southbridge/intel/bd82x6x/early_pch.c
1 file changed, 33 insertions(+), 29 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/78/49178/1
diff --git a/src/southbridge/intel/bd82x6x/early_pch.c b/src/southbridge/intel/bd82x6x/early_pch.c
index 0b60d13..e86297b 100644
--- a/src/southbridge/intel/bd82x6x/early_pch.c
+++ b/src/southbridge/intel/bd82x6x/early_pch.c
@@ -156,7 +156,10 @@
pch_iobp_update(0xeb0040a1, ~(0x3ff << 3), 0x9f << 3);
pch_iobp_update(0xec0040a1, ~(0x3ff << 3), 0x9f << 3);
- /* Some CPT-only writes go here */
+ if (pch_silicon_type() == PCH_TYPE_CPT) {
+ pch_iobp_update(0xec004086, ~0, 1 << 30);
+ pch_iobp_update(0xec004086, ~0, 1 << 31);
+ }
pch_iobp_update(0xea004001, ~(3 << 10), 1 << 10);
pch_iobp_update(0xeb004002, ~0, 1 << 30 | 1 << 21);
@@ -189,34 +192,35 @@
/* PPT A0 resume-only xHCI workaround goes here */
- /* TODO: This section is PPT-only */
- pch_iobp_update(0xec00404d, ~(0xff3f << 8), 0xff17 << 8);
- pch_iobp_update(0xec000084, ~(1 << 31), 0);
- pch_iobp_update(0xec000184, ~(1 << 31), 0);
- pch_iobp_update(0xec000284, ~(1 << 31), 0);
- pch_iobp_update(0xec000384, ~(1 << 31), 0);
- pch_iobp_update(0xec000094, ~0, 0xf << 16);
- pch_iobp_update(0xec000194, ~0, 0xf << 16);
- pch_iobp_update(0xec000294, ~0, 0xf << 16);
- pch_iobp_update(0xec000394, ~0, 0xf << 16);
- pch_iobp_update(0xec000096, ~0x3ff, 1);
- pch_iobp_update(0xec000196, ~0x3ff, 1);
- pch_iobp_update(0xec000296, ~0x3ff, 1);
- pch_iobp_update(0xec000396, ~0x3ff, 1);
- pch_iobp_update(0xec000001, ~0, 3 << 10 | 1 << 3);
- pch_iobp_update(0xec000101, ~0, 3 << 10 | 1 << 3);
- pch_iobp_update(0xec000201, ~0, 3 << 10 | 1 << 3);
- pch_iobp_update(0xec000301, ~0, 3 << 10 | 1 << 3);
- pch_iobp_update(0xec0040b5, ~0xffff, 0xc518);
- pch_iobp_update(0xec000087, ~(0xf << 8), 5 << 8);
- pch_iobp_update(0xec000187, ~(0xf << 8), 5 << 8);
- pch_iobp_update(0xec000287, ~(0xf << 8), 5 << 8);
- pch_iobp_update(0xec000387, ~(0xf << 8), 5 << 8);
- pch_iobp_update(0xea000050, ~(0xff << 16), 0xbb << 16);
- pch_iobp_update(0xea000150, ~(0xff << 16), 0xbb << 16);
- pch_iobp_update(0xec007f60, ~(0xf << 8), 0xd << 8);
- pch_iobp_update(0xea00008d, ~0, 3 << 20);
- pch_iobp_update(0xea00018d, ~0, 3 << 20);
+ if (pch_silicon_type() == PCH_TYPE_CPT) {
+ pch_iobp_update(0xec00404d, ~(0xff3f << 8), 0xff17 << 8);
+ pch_iobp_update(0xec000084, ~(1 << 31), 0);
+ pch_iobp_update(0xec000184, ~(1 << 31), 0);
+ pch_iobp_update(0xec000284, ~(1 << 31), 0);
+ pch_iobp_update(0xec000384, ~(1 << 31), 0);
+ pch_iobp_update(0xec000094, ~0, 0xf << 16);
+ pch_iobp_update(0xec000194, ~0, 0xf << 16);
+ pch_iobp_update(0xec000294, ~0, 0xf << 16);
+ pch_iobp_update(0xec000394, ~0, 0xf << 16);
+ pch_iobp_update(0xec000096, ~0x3ff, 1);
+ pch_iobp_update(0xec000196, ~0x3ff, 1);
+ pch_iobp_update(0xec000296, ~0x3ff, 1);
+ pch_iobp_update(0xec000396, ~0x3ff, 1);
+ pch_iobp_update(0xec000001, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec000101, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec000201, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec000301, ~0, 3 << 10 | 1 << 3);
+ pch_iobp_update(0xec0040b5, ~0xffff, 0xc518);
+ pch_iobp_update(0xec000087, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xec000187, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xec000287, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xec000387, ~(0xf << 8), 5 << 8);
+ pch_iobp_update(0xea000050, ~(0xff << 16), 0xbb << 16);
+ pch_iobp_update(0xea000150, ~(0xff << 16), 0xbb << 16);
+ pch_iobp_update(0xec007f60, ~(0xf << 8), 0xd << 8);
+ pch_iobp_update(0xea00008d, ~0, 3 << 20);
+ pch_iobp_update(0xea00018d, ~0, 3 << 20);
+ }
/* TODO: Figure out what these writes mean */
pch_iobp_update(0xec0007b2, 0, 0x04514b5e);
--
To view, visit https://review.coreboot.org/c/coreboot/+/49178
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I2569f9c436f545a5e3ffda5a31ab27c27469f540
Gerrit-Change-Number: 49178
Gerrit-PatchSet: 1
Gerrit-Owner: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Patrick Rudolph <siro(a)das-labor.org>
Gerrit-MessageType: newchange
2
3