summaryrefslogtreecommitdiff
path: root/src/mainboard/asrock
diff options
context:
space:
mode:
authorJan Philipp Groß <jeangrande@mailbox.org>2024-06-06 13:12:11 +0200
committerFelix Held <felix-coreboot@felixheld.de>2024-07-03 16:24:53 +0000
commit2721846dab2c5e7a207e985cb634588f380744bd (patch)
tree7e0232a153529fe3bf94100fc3114a753ae22697 /src/mainboard/asrock
parent16b18a8b3047d4a9fbfe087711e3f3656d90b96d (diff)
mb/asrock: Add Fatal1ty Z87 Professional (Haswell)
This port was done via autoport and subsequent manual tweaking. Thanks to Angel Pons for helping me with the misbehaving ASM1061 ASPM! The board features two socketed DIP-8 SPI flash chips, as well as a BIOS selection via jumper and onboard Power and Reset switches. Working: - Haswell MRC.bin - All four DDR3/DDR3L DIMM slots - S3 suspend and resume - Libgfxinit - HDMI-Out Port - both RJ-45 Gigabit LAN Ports - USB 2.0 Ports - USB 3.1 Gen1 Ports - both USB 3.1 Gen1 headers - HD Audio Jack (audio output) - all six SATA3 6.0 Gb/s connectors by Intel - all four SATA3 6.0 Gb/s connectors by ASMedia ASM1061 - all three PCI Express 3.0 x16 slots - PCI Express 2.0 x1 slot - half mini-PCI Express slot Working (board-specific) - Power Switch with LED (functional, yet no LED) - Reset Switch with LED (functional, yet no LED) - BIOS Selection via jumper not (yet) tested: - IR header - COM Port header - DisplayPort - eSATA connector - USB 2.0 headers - PS/2 Mouse/Keyboard Port - HDMI-In Port - PCI slots not (yet) working: - Front panel audio connector - Software fan control: While the Nuvoton chip is correctly discovered, the numbering of the fan connectors is faulty, resulting in the wrong fan being controlled. - Dr. Debug: on vendor firmware, the LEDs turn off after successful boot. On coreboot, the LED shows two bright zeros after boot. Change-Id: Iae0b73d8e81be90ec3a2d5463df3ed170f603266 Signed-off-by: Jan Philipp Groß <jeangrande@mailbox.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/82913 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nicholas Chin <nic.c3.14@gmail.com> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Felix Singer <service+coreboot-gerrit@felixsinger.de>
Diffstat (limited to 'src/mainboard/asrock')
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/Kconfig26
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/Kconfig.name3
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/Makefile.mk6
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/acpi/ec.asl3
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/acpi/platform.asl10
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/acpi/superio.asl3
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/board_info.txt7
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/bootblock.c8
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/data.vbtbin0 -> 6144 bytes
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/devicetree.cb133
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/dsdt.asl28
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/gma-mainboard.ads17
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/gpio.c192
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/hda_verb.c25
-rw-r--r--src/mainboard/asrock/fatal1ty_z87_professional/romstage.c44
15 files changed, 505 insertions, 0 deletions
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/Kconfig b/src/mainboard/asrock/fatal1ty_z87_professional/Kconfig
new file mode 100644
index 0000000000..b1600ef42f
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/Kconfig
@@ -0,0 +1,26 @@
+## SPDX-License-Identifier: GPL-2.0-only
+if BOARD_ASROCK_FATAL1TY_Z87_PROFESSIONAL
+
+config BOARD_SPECIFIC_OPTIONS
+ def_bool y
+ select BOARD_ROMSIZE_KB_8192
+ select DRIVERS_ASMEDIA_ASPM_BLACKLIST
+ select HAVE_ACPI_RESUME
+ select HAVE_ACPI_TABLES
+ select INTEL_GMA_HAVE_VBT
+ select MAINBOARD_HAS_LIBGFXINIT
+ select MAINBOARD_USES_IFD_GBE_REGION
+ select NORTHBRIDGE_INTEL_HASWELL
+ select SERIRQ_CONTINUOUS_MODE
+ select SOUTHBRIDGE_INTEL_LYNXPOINT
+ select SUPERIO_NUVOTON_NCT6776
+
+config MAINBOARD_DIR
+ default "asrock/fatal1ty_z87_professional"
+
+config MAINBOARD_PART_NUMBER
+ default "Fatal1ty Z87 Professional"
+
+config USBDEBUG_HCD_INDEX
+ default 2 # USB-2.0-Header with the designation USB4_5
+endif
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/Kconfig.name b/src/mainboard/asrock/fatal1ty_z87_professional/Kconfig.name
new file mode 100644
index 0000000000..b413e2d5db
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/Kconfig.name
@@ -0,0 +1,3 @@
+## SPDX-License-Identifier: GPL-2.0-only
+config BOARD_ASROCK_FATAL1TY_Z87_PROFESSIONAL
+ bool "Fatal1ty Z87 Professional"
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/Makefile.mk b/src/mainboard/asrock/fatal1ty_z87_professional/Makefile.mk
new file mode 100644
index 0000000000..93f729d787
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/Makefile.mk
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+bootblock-y += bootblock.c
+bootblock-y += gpio.c
+romstage-y += gpio.c
+ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/acpi/ec.asl b/src/mainboard/asrock/fatal1ty_z87_professional/acpi/ec.asl
new file mode 100644
index 0000000000..16990d45f4
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/acpi/ec.asl
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: CC-PDDC */
+
+/* Please update the license if adding licensable material. */
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/acpi/platform.asl b/src/mainboard/asrock/fatal1ty_z87_professional/acpi/platform.asl
new file mode 100644
index 0000000000..aff432b6f4
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/acpi/platform.asl
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+Method(_WAK, 1)
+{
+ Return(Package() {0, 0})
+}
+
+Method(_PTS, 1)
+{
+}
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/acpi/superio.asl b/src/mainboard/asrock/fatal1ty_z87_professional/acpi/superio.asl
new file mode 100644
index 0000000000..16990d45f4
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/acpi/superio.asl
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: CC-PDDC */
+
+/* Please update the license if adding licensable material. */
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/board_info.txt b/src/mainboard/asrock/fatal1ty_z87_professional/board_info.txt
new file mode 100644
index 0000000000..d6dfa6bec8
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/board_info.txt
@@ -0,0 +1,7 @@
+Category: desktop
+Board URL: https://www.asrock.com/mb/Intel/Fatal1ty%20Z87%20Professional/
+ROM protocol: SPI
+Flashrom support: y
+ROM package: DIP-8 (2x)
+ROM socketed: y
+Release year: 2013
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/bootblock.c b/src/mainboard/asrock/fatal1ty_z87_professional/bootblock.c
new file mode 100644
index 0000000000..1cec5c4fc0
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/bootblock.c
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <southbridge/intel/lynxpoint/pch.h>
+
+/* FIXME: remove this if not needed */
+void mainboard_config_superio(void)
+{
+}
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/data.vbt b/src/mainboard/asrock/fatal1ty_z87_professional/data.vbt
new file mode 100644
index 0000000000..38bf6ea0c9
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/data.vbt
Binary files differ
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/devicetree.cb b/src/mainboard/asrock/fatal1ty_z87_professional/devicetree.cb
new file mode 100644
index 0000000000..5fbc99f615
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/devicetree.cb
@@ -0,0 +1,133 @@
+chip northbridge/intel/haswell
+ chip cpu/intel/haswell
+ device cpu_cluster 0 on
+ ops haswell_cpu_bus_ops
+ end
+ end
+ device domain 0 on
+ ops haswell_pci_domain_ops
+
+ device pci 00.0 on # Desktop Host bridge
+ subsystemid 0x1849 0x0c00
+ end
+ device pci 01.0 on # PEG
+ subsystemid 0x1849 0x0c01
+ end
+ device pci 01.1 on end
+ device pci 01.2 on end
+ device pci 02.0 on # iGPU
+ subsystemid 0x1849 0x0412
+ end
+ device pci 03.0 on # Mini-HD audio
+ subsystemid 0x1849 0x0c0c
+ end
+
+ chip southbridge/intel/lynxpoint # Intel 8 Series Lynx Point PCH
+ register "gen1_dec" = "0x000c0291"
+ register "gen2_dec" = "0x000c0241"
+ register "gen3_dec" = "0x000c0251"
+ register "sata_port_map" = "0x3f"
+ device pci 14.0 on # xHCI Controller
+ subsystemid 0x1849 0x8c31
+ end
+ device pci 16.0 on # MEI #1
+ subsystemid 0x1849 0x8c3a
+ end
+ device pci 16.1 off end # MEI #2
+ device pci 19.0 on # Intel Gigabit Ethernet
+ subsystemid 0x1849 0x153b
+ end
+ device pci 1a.0 on # USB2 EHCI #2
+ subsystemid 0x1849 0x8c2d
+ end
+ device pci 1b.0 on # High Definition Audio
+ subsystemid 0x1849 0x1020
+ end
+ device pci 1c.0 off end # RP #1
+ device pci 1c.1 on # RP #2: mPCIe slot
+ subsystemid 0x1849 0x8c12
+ end
+ device pci 1c.2 on # RP #3: ASM1061 SATA controller
+ subsystemid 0x1849 0x8c14
+ end
+ device pci 1c.3 on # RP #4: Intel I211 GbE
+ subsystemid 0x1849 0x8c16
+ device pci 00.0 on end
+ end
+ device pci 1c.4 on # RP #5: ASM1061 SATA controller
+ subsystemid 0x1849 0x8c18
+ end
+ device pci 1c.5 on # RP #6: PCIe x1 slot
+ subsystemid 0x1849 0x8c1a
+ end
+ device pci 1c.6 on # RP #7: ASM1083 PCIe-to-PCI bridge
+ subsystemid 0x1849 0x8c1c
+ end
+ device pci 1c.7 off end # RP #8
+ device pci 1d.0 on # USB2 EHCI #1
+ subsystemid 0x1849 0x8c26
+ end
+ device pci 1f.0 on # LPC bridge
+ subsystemid 0x1849 0x8c44
+ chip superio/nuvoton/nct6776
+ device pnp 2e.0 off end # Floppy
+ device pnp 2e.1 off end # Parallel
+ device pnp 2e.2 on # UART A
+ io 0x60 = 0x03f8
+ irq 0x70 = 4
+ end
+ device pnp 2e.3 off end # UART B, IR
+ device pnp 2e.5 on # PS/2 Keyboard/Mouse
+ io 0x60 = 0x0060
+ io 0x62 = 0x0064
+ irq 0x70 = 1 # + Keyboard IRQ
+ irq 0x72 = 12 # + Mouse IRQ (unused)
+ end
+ device pnp 2e.6 off end # CIR
+ device pnp 2e.7 off end # GPIO8
+ device pnp 2e.107 off end # GPIO9
+ device pnp 2e.8 off end # WDT
+ device pnp 2e.108 on # GPIO0
+ irq 0xe0 = 0xf9 # + GPIO0 direction
+ irq 0xe1 = 0xfd # + GPIO0 value
+ end
+ device pnp 2e.208 off end # GPIOA
+ device pnp 2e.308 off end # GPIO base
+ device pnp 2e.109 on # GPIO1
+ irq 0xf0 = 0xf1 # + GPIO1 direction
+ irq 0xf1 = 0xf1 # + GPIO1 value
+ end
+ device pnp 2e.209 off end # GPIO2
+ device pnp 2e.309 off end # GPIO3
+ device pnp 2e.409 off end # GPIO4
+ device pnp 2e.509 off end # GPIO5
+ device pnp 2e.609 off end # GPIO6
+ device pnp 2e.709 on # GPIO7
+ irq 0xe0 = 0xff # + GPIO7 direction
+ end
+ device pnp 2e.a on # ACPI
+ irq 0xe4 = 0x10 # + Power RAM in S3
+ irq 0xf0 = 0x20
+ end
+ device pnp 2e.b on # HWM, LED
+ irq 0x30 = 0xe1 # + Fan RPM sense pins
+ io 0x60 = 0x0290 # + HWM base address
+ irq 0x70 = 0
+ end
+ device pnp 2e.d off end # VID
+ device pnp 2e.e off end # CIR wake-up
+ device pnp 2e.f off end # GPIO PP/OD
+ device pnp 2e.14 off end # SVID
+ device pnp 2e.16 off end # Deep sleep
+ device pnp 2e.17 off end # GPIOA
+ end
+ end
+ device pci 1f.2 on end # SATA Controller (AHCI)
+ device pci 1f.3 on # SMBus
+ subsystemid 0x1849 0x8c22
+ end
+ device pci 1f.5 off end # SATA Controller (Legacy)
+ device pci 1f.6 off end # Thermal
+ end
+ end
+end
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/dsdt.asl b/src/mainboard/asrock/fatal1ty_z87_professional/dsdt.asl
new file mode 100644
index 0000000000..488998a506
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/dsdt.asl
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+
+#include <acpi/acpi.h>
+
+DefinitionBlock(
+ "dsdt.aml",
+ "DSDT",
+ ACPI_DSDT_REV_2,
+ OEM_ID,
+ ACPI_TABLE_CREATOR,
+ 0x20141018
+)
+{
+ #include <acpi/dsdt_top.asl>
+ #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/hostbridge.asl>
+ #include <southbridge/intel/lynxpoint/acpi/pch.asl>
+ }
+}
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/gma-mainboard.ads b/src/mainboard/asrock/fatal1ty_z87_professional/gma-mainboard.ads
new file mode 100644
index 0000000000..61dc90a151
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/gma-mainboard.ads
@@ -0,0 +1,17 @@
+-- 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 :=
+ (DP2, -- DP
+ HDMI2, -- DP
+ HDMI3, -- HDMI
+ others => Disabled);
+
+end GMA.Mainboard;
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/gpio.c b/src/mainboard/asrock/fatal1ty_z87_professional/gpio.c
new file mode 100644
index 0000000000..7ecd7bbad4
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/gpio.c
@@ -0,0 +1,192 @@
+/* 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_GPIO,
+ .gpio6 = GPIO_MODE_GPIO,
+ .gpio7 = GPIO_MODE_GPIO,
+ .gpio8 = GPIO_MODE_NATIVE,
+ .gpio9 = GPIO_MODE_NATIVE,
+ .gpio10 = GPIO_MODE_NATIVE,
+ .gpio11 = GPIO_MODE_NATIVE,
+ .gpio12 = GPIO_MODE_NATIVE,
+ .gpio13 = GPIO_MODE_GPIO,
+ .gpio14 = GPIO_MODE_NATIVE,
+ .gpio15 = GPIO_MODE_GPIO,
+ .gpio16 = GPIO_MODE_GPIO,
+ .gpio17 = GPIO_MODE_GPIO,
+ .gpio18 = GPIO_MODE_NATIVE,
+ .gpio19 = GPIO_MODE_NATIVE,
+ .gpio20 = GPIO_MODE_GPIO,
+ .gpio21 = GPIO_MODE_NATIVE,
+ .gpio22 = GPIO_MODE_NATIVE,
+ .gpio23 = GPIO_MODE_NATIVE,
+ .gpio24 = GPIO_MODE_GPIO,
+ .gpio25 = GPIO_MODE_GPIO,
+ .gpio26 = GPIO_MODE_GPIO,
+ .gpio27 = GPIO_MODE_GPIO,
+ .gpio28 = GPIO_MODE_GPIO,
+ .gpio29 = GPIO_MODE_NATIVE,
+ .gpio30 = GPIO_MODE_NATIVE,
+ .gpio31 = GPIO_MODE_GPIO,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_direction = {
+ .gpio0 = GPIO_DIR_INPUT,
+ .gpio1 = GPIO_DIR_INPUT,
+ .gpio2 = GPIO_DIR_INPUT,
+ .gpio3 = GPIO_DIR_INPUT,
+ .gpio4 = GPIO_DIR_INPUT,
+ .gpio5 = GPIO_DIR_INPUT,
+ .gpio6 = GPIO_DIR_INPUT,
+ .gpio7 = GPIO_DIR_INPUT,
+ .gpio13 = GPIO_DIR_INPUT,
+ .gpio15 = GPIO_DIR_OUTPUT,
+ .gpio16 = GPIO_DIR_INPUT,
+ .gpio17 = GPIO_DIR_INPUT,
+ .gpio20 = GPIO_DIR_INPUT,
+ .gpio24 = GPIO_DIR_OUTPUT,
+ .gpio25 = GPIO_DIR_INPUT,
+ .gpio26 = GPIO_DIR_INPUT,
+ .gpio27 = GPIO_DIR_INPUT,
+ .gpio28 = GPIO_DIR_OUTPUT,
+ .gpio31 = GPIO_DIR_INPUT,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_level = {
+ .gpio15 = GPIO_LEVEL_LOW,
+ .gpio24 = GPIO_LEVEL_LOW,
+ .gpio28 = GPIO_LEVEL_LOW,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_reset = {
+ .gpio8 = GPIO_RESET_RSMRST,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_invert = {
+ .gpio13 = GPIO_INVERT,
+};
+
+static const struct pch_gpio_set1 pch_gpio_set1_blink = {
+};
+
+static const struct pch_gpio_set2 pch_gpio_set2_mode = {
+ .gpio32 = GPIO_MODE_GPIO,
+ .gpio33 = GPIO_MODE_GPIO,
+ .gpio34 = GPIO_MODE_GPIO,
+ .gpio35 = GPIO_MODE_GPIO,
+ .gpio36 = GPIO_MODE_NATIVE,
+ .gpio37 = GPIO_MODE_NATIVE,
+ .gpio38 = GPIO_MODE_NATIVE,
+ .gpio39 = GPIO_MODE_NATIVE,
+ .gpio40 = GPIO_MODE_NATIVE,
+ .gpio41 = GPIO_MODE_NATIVE,
+ .gpio42 = GPIO_MODE_NATIVE,
+ .gpio43 = GPIO_MODE_NATIVE,
+ .gpio44 = GPIO_MODE_NATIVE,
+ .gpio45 = GPIO_MODE_NATIVE,
+ .gpio46 = GPIO_MODE_NATIVE,
+ .gpio47 = GPIO_MODE_NATIVE,
+ .gpio48 = GPIO_MODE_NATIVE,
+ .gpio49 = GPIO_MODE_GPIO,
+ .gpio50 = GPIO_MODE_GPIO,
+ .gpio51 = GPIO_MODE_GPIO,
+ .gpio52 = GPIO_MODE_GPIO,
+ .gpio53 = GPIO_MODE_GPIO,
+ .gpio54 = GPIO_MODE_GPIO,
+ .gpio55 = GPIO_MODE_GPIO,
+ .gpio56 = GPIO_MODE_NATIVE,
+ .gpio57 = GPIO_MODE_GPIO,
+ .gpio58 = GPIO_MODE_NATIVE,
+ .gpio59 = GPIO_MODE_NATIVE,
+ .gpio60 = GPIO_MODE_NATIVE,
+ .gpio61 = GPIO_MODE_NATIVE,
+ .gpio62 = GPIO_MODE_NATIVE,
+ .gpio63 = GPIO_MODE_NATIVE,
+};
+
+static const struct pch_gpio_set2 pch_gpio_set2_direction = {
+ .gpio32 = GPIO_DIR_OUTPUT,
+ .gpio33 = GPIO_DIR_OUTPUT,
+ .gpio34 = GPIO_DIR_INPUT,
+ .gpio35 = GPIO_DIR_OUTPUT,
+ .gpio49 = GPIO_DIR_INPUT,
+ .gpio50 = GPIO_DIR_OUTPUT,
+ .gpio51 = GPIO_DIR_OUTPUT,
+ .gpio52 = GPIO_DIR_INPUT,
+ .gpio53 = GPIO_DIR_OUTPUT,
+ .gpio54 = GPIO_DIR_INPUT,
+ .gpio55 = GPIO_DIR_OUTPUT,
+ .gpio57 = GPIO_DIR_INPUT,
+};
+
+static const struct pch_gpio_set2 pch_gpio_set2_level = {
+ .gpio32 = GPIO_LEVEL_HIGH,
+ .gpio33 = GPIO_LEVEL_HIGH,
+ .gpio35 = GPIO_LEVEL_LOW,
+ .gpio50 = GPIO_LEVEL_HIGH,
+ .gpio51 = GPIO_LEVEL_HIGH,
+ .gpio53 = GPIO_LEVEL_HIGH,
+ .gpio55 = GPIO_LEVEL_HIGH,
+};
+
+static const struct pch_gpio_set2 pch_gpio_set2_reset = {
+};
+
+static const struct pch_gpio_set3 pch_gpio_set3_mode = {
+ .gpio64 = GPIO_MODE_NATIVE,
+ .gpio65 = GPIO_MODE_NATIVE,
+ .gpio66 = GPIO_MODE_NATIVE,
+ .gpio67 = GPIO_MODE_NATIVE,
+ .gpio68 = GPIO_MODE_GPIO,
+ .gpio69 = GPIO_MODE_GPIO,
+ .gpio70 = GPIO_MODE_NATIVE,
+ .gpio71 = GPIO_MODE_NATIVE,
+ .gpio72 = GPIO_MODE_GPIO,
+ .gpio73 = GPIO_MODE_GPIO,
+ .gpio74 = GPIO_MODE_NATIVE,
+ .gpio75 = GPIO_MODE_NATIVE,
+};
+
+static const struct pch_gpio_set3 pch_gpio_set3_direction = {
+ .gpio68 = GPIO_DIR_INPUT,
+ .gpio69 = GPIO_DIR_INPUT,
+ .gpio72 = GPIO_DIR_OUTPUT,
+ .gpio73 = GPIO_DIR_INPUT,
+};
+
+static const struct pch_gpio_set3 pch_gpio_set3_level = {
+ .gpio72 = GPIO_LEVEL_LOW,
+};
+
+static const struct pch_gpio_set3 pch_gpio_set3_reset = {
+};
+
+const struct pch_gpio_map mainboard_gpio_map = {
+ .set1 = {
+ .mode = &pch_gpio_set1_mode,
+ .direction = &pch_gpio_set1_direction,
+ .level = &pch_gpio_set1_level,
+ .blink = &pch_gpio_set1_blink,
+ .invert = &pch_gpio_set1_invert,
+ .reset = &pch_gpio_set1_reset,
+ },
+ .set2 = {
+ .mode = &pch_gpio_set2_mode,
+ .direction = &pch_gpio_set2_direction,
+ .level = &pch_gpio_set2_level,
+ .reset = &pch_gpio_set2_reset,
+ },
+ .set3 = {
+ .mode = &pch_gpio_set3_mode,
+ .direction = &pch_gpio_set3_direction,
+ .level = &pch_gpio_set3_level,
+ .reset = &pch_gpio_set3_reset,
+ },
+};
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/hda_verb.c b/src/mainboard/asrock/fatal1ty_z87_professional/hda_verb.c
new file mode 100644
index 0000000000..9c381e650d
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/hda_verb.c
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
+ 0x11020011, /* Codec Vendor / Device ID: Creative */
+ 0x18491020, /* Subsystem ID */
+ 11, /* Number of 4 dword sets */
+ AZALIA_SUBVENDOR(0, 0x18491020),
+ AZALIA_PIN_CFG(0, 0x0b, 0x01014010),
+ AZALIA_PIN_CFG(0, 0x0c, 0x014580f0),
+ AZALIA_PIN_CFG(0, 0x0d, 0x014570f0),
+ AZALIA_PIN_CFG(0, 0x0e, 0x01c530f0),
+ AZALIA_PIN_CFG(0, 0x0f, 0x0221401f),
+ AZALIA_PIN_CFG(0, 0x10, 0x02216011),
+ AZALIA_PIN_CFG(0, 0x11, 0x02012014),
+ AZALIA_PIN_CFG(0, 0x12, 0x37a791f0),
+ AZALIA_PIN_CFG(0, 0x13, 0x908700f0),
+ AZALIA_PIN_CFG(0, 0x18, 0x500000f0),
+
+};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/asrock/fatal1ty_z87_professional/romstage.c b/src/mainboard/asrock/fatal1ty_z87_professional/romstage.c
new file mode 100644
index 0000000000..44932e7229
--- /dev/null
+++ b/src/mainboard/asrock/fatal1ty_z87_professional/romstage.c
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <northbridge/intel/haswell/haswell.h>
+#include <northbridge/intel/haswell/raminit.h>
+#include <southbridge/intel/lynxpoint/pch.h>
+
+void mainboard_config_rcba(void)
+{
+}
+
+void mb_get_spd_map(struct spd_info *spdi)
+{
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[1] = 0x51;
+ spdi->addresses[2] = 0x52;
+ spdi->addresses[3] = 0x53;
+}
+
+const struct usb2_port_config mainboard_usb2_ports[MAX_USB2_PORTS] = {
+ /* Length, Enable, OCn#, Location */
+ { 0x0040, 1, 0, USB_PORT_FLEX },
+ { 0x0040, 1, 0, USB_PORT_FLEX },
+ { 0x0040, 1, 1, USB_PORT_FLEX },
+ { 0x0040, 1, USB_OC_PIN_SKIP, USB_PORT_FLEX },
+ { 0x0040, 1, USB_OC_PIN_SKIP, USB_PORT_FLEX },
+ { 0x0040, 1, 2, USB_PORT_FLEX },
+ { 0x0040, 1, 3, USB_PORT_FLEX },
+ { 0x0040, 1, 3, USB_PORT_FLEX },
+ { 0x0040, 1, 4, USB_PORT_FLEX },
+ { 0x0040, 1, 4, USB_PORT_FLEX },
+ { 0x0040, 1, 5, USB_PORT_FLEX },
+ { 0x0040, 1, 5, USB_PORT_FLEX },
+ { 0x0040, 1, 6, USB_PORT_FLEX },
+ { 0x0040, 1, 6, USB_PORT_FLEX },
+};
+
+const struct usb3_port_config mainboard_usb3_ports[MAX_USB3_PORTS] = {
+ { 1, 0 },
+ { 1, 0 },
+ { 1, 1 },
+ { 1, 1 },
+ { 1, 2 },
+ { 1, 2 },
+};