mirror of
https://github.com/linuxboot/heads.git
synced 2024-12-22 14:22:26 +00:00
610 lines
18 KiB
Diff
610 lines
18 KiB
Diff
|
diff --git a/src/mainboard/purism/librem_l1um/Kconfig b/src/mainboard/purism/librem_l1um/Kconfig
|
||
|
new file mode 100644
|
||
|
index 0000000000..ba504faa75
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/Kconfig
|
||
|
@@ -0,0 +1,41 @@
|
||
|
+if BOARD_PURISM_LIBREM_L1UM
|
||
|
+
|
||
|
+config BOARD_SPECIFIC_OPTIONS
|
||
|
+ def_bool y
|
||
|
+ select BOARD_ROMSIZE_KB_16384
|
||
|
+ select DRIVERS_UART_8250IO
|
||
|
+ select ENABLE_FSP_FAST_BOOT
|
||
|
+ select GENERATE_SMBIOS_TABLES
|
||
|
+ select HAVE_ACPI_TABLES
|
||
|
+ select IPMI_KCS
|
||
|
+ select MAINBOARD_HAS_LPC_TPM
|
||
|
+ select MAINBOARD_USES_IFD_GBE_REGION
|
||
|
+ select MRC_CACHE_FMAP
|
||
|
+ select SERIRQ_CONTINUOUS_MODE
|
||
|
+ select SOC_INTEL_FSP_BROADWELL_DE
|
||
|
+ select SUPERIO_ASPEED_AST2400
|
||
|
+
|
||
|
+config MAINBOARD_DIR
|
||
|
+ string
|
||
|
+ default "purism/librem_l1um"
|
||
|
+
|
||
|
+config MAINBOARD_PART_NUMBER
|
||
|
+ string
|
||
|
+ default "LIBREM_L1UM"
|
||
|
+
|
||
|
+config IRQ_SLOT_COUNT
|
||
|
+ int
|
||
|
+ default 18
|
||
|
+
|
||
|
+config CBFS_SIZE
|
||
|
+ hex
|
||
|
+ default 0x00C00000
|
||
|
+
|
||
|
+config VIRTUAL_ROM_SIZE
|
||
|
+ hex
|
||
|
+ default 0x1000000
|
||
|
+
|
||
|
+config INTEGRATED_UART
|
||
|
+ def_bool n
|
||
|
+
|
||
|
+endif # BOARD_PURISM_LIBREM_L1UM
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/Kconfig.name b/src/mainboard/purism/librem_l1um/Kconfig.name
|
||
|
new file mode 100644
|
||
|
index 0000000000..3e3441931c
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/Kconfig.name
|
||
|
@@ -0,0 +1,2 @@
|
||
|
+config BOARD_PURISM_LIBREM_L1UM
|
||
|
+ bool "Purism LIBREM_L1UM"
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/Makefile.inc b/src/mainboard/purism/librem_l1um/Makefile.inc
|
||
|
new file mode 100644
|
||
|
index 0000000000..991f44ed3c
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/Makefile.inc
|
||
|
@@ -0,0 +1,14 @@
|
||
|
+##
|
||
|
+## This file is part of the coreboot project.
|
||
|
+##
|
||
|
+## This program is free software; you can redistribute it and/or modify
|
||
|
+## it under the terms of the GNU General Public License as published by
|
||
|
+## the Free Software Foundation; version 2 of the License.
|
||
|
+##
|
||
|
+## This program is distributed in the hope that it will be useful,
|
||
|
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+## GNU General Public License for more details.
|
||
|
+##
|
||
|
+
|
||
|
+ramstage-y += irqroute.c
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/acpi/mainboard.asl b/src/mainboard/purism/librem_l1um/acpi/mainboard.asl
|
||
|
new file mode 100644
|
||
|
index 0000000000..78858cc652
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/acpi/mainboard.asl
|
||
|
@@ -0,0 +1,18 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or
|
||
|
+ * modify it under the terms of the GNU General Public License as
|
||
|
+ * published by the Free Software Foundation; version 2 of
|
||
|
+ * the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+Device (PWRB)
|
||
|
+{
|
||
|
+ Name(_HID, EisaId("PNP0C0C"))
|
||
|
+}
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/acpi/platform.asl b/src/mainboard/purism/librem_l1um/acpi/platform.asl
|
||
|
new file mode 100644
|
||
|
index 0000000000..4cab1777c4
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/acpi/platform.asl
|
||
|
@@ -0,0 +1,53 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+/* The APM port can be used for generating software SMIs */
|
||
|
+
|
||
|
+OperationRegion (APMP, SystemIO, 0xb2, 2)
|
||
|
+Field (APMP, ByteAcc, NoLock, Preserve)
|
||
|
+{
|
||
|
+ APMC, 8, // APM command
|
||
|
+ APMS, 8 // APM status
|
||
|
+}
|
||
|
+
|
||
|
+/* Port 80 POST */
|
||
|
+
|
||
|
+OperationRegion (POST, SystemIO, 0x80, 1)
|
||
|
+Field (POST, ByteAcc, Lock, Preserve)
|
||
|
+{
|
||
|
+ DBG0, 8
|
||
|
+}
|
||
|
+
|
||
|
+Name(\APC1, Zero) // IIO IOAPIC
|
||
|
+
|
||
|
+Name(\PICM, Zero) // IOAPIC/8259
|
||
|
+
|
||
|
+Method(_PIC, 1)
|
||
|
+{
|
||
|
+ Store(Arg0, PICM)
|
||
|
+}
|
||
|
+
|
||
|
+/* The _PTS method (Prepare To Sleep) is called before the OS is
|
||
|
+ * entering a sleep state. The sleep state number is passed in Arg0
|
||
|
+ */
|
||
|
+
|
||
|
+Method(_PTS,1)
|
||
|
+{
|
||
|
+}
|
||
|
+
|
||
|
+/* The _WAK method is called on system wakeup */
|
||
|
+
|
||
|
+Method(_WAK,1)
|
||
|
+{
|
||
|
+ Return(Package(){0,0})
|
||
|
+}
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/acpi_tables.c b/src/mainboard/purism/librem_l1um/acpi_tables.c
|
||
|
new file mode 100644
|
||
|
index 0000000000..7507f24fc7
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/acpi_tables.c
|
||
|
@@ -0,0 +1,39 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+#include <arch/ioapic.h>
|
||
|
+#include <soc/acpi.h>
|
||
|
+#include <soc/iomap.h>
|
||
|
+
|
||
|
+unsigned long acpi_fill_madt(unsigned long current)
|
||
|
+{
|
||
|
+ u32 i;
|
||
|
+
|
||
|
+ current = acpi_create_madt_lapics(current);
|
||
|
+
|
||
|
+ current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 8,
|
||
|
+ IOXAPIC1_BASE_ADDRESS, 0);
|
||
|
+ set_ioapic_id((u8 *)IOXAPIC1_BASE_ADDRESS, 8);
|
||
|
+
|
||
|
+ current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 9,
|
||
|
+ IOXAPIC2_BASE_ADDRESS, 24);
|
||
|
+ set_ioapic_id((u8 *)IOXAPIC2_BASE_ADDRESS, 9);
|
||
|
+
|
||
|
+ current = acpi_madt_irq_overrides(current);
|
||
|
+
|
||
|
+ for (i = 0; i < 16; i++)
|
||
|
+ current += acpi_create_madt_lapic_nmi(
|
||
|
+ (acpi_madt_lapic_nmi_t *)current, i, 0xD, 1);
|
||
|
+
|
||
|
+ return current;
|
||
|
+}
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/board_info.txt b/src/mainboard/purism/librem_l1um/board_info.txt
|
||
|
new file mode 100644
|
||
|
index 0000000000..fc8da9d5f5
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/board_info.txt
|
||
|
@@ -0,0 +1,8 @@
|
||
|
+Board name: Purism Librem Server L1UM
|
||
|
+Category: server
|
||
|
+Board URL: https://puri.sm/products/librem-server/
|
||
|
+ROM package: SOIC-8
|
||
|
+ROM protocol: SPI
|
||
|
+ROM socketed: no
|
||
|
+Flashrom support: y
|
||
|
+Release year: 2020
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/devicetree.cb b/src/mainboard/purism/librem_l1um/devicetree.cb
|
||
|
new file mode 100644
|
||
|
index 0000000000..5869b23e58
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/devicetree.cb
|
||
|
@@ -0,0 +1,96 @@
|
||
|
+chip soc/intel/fsp_broadwell_de
|
||
|
+ device cpu_cluster 0 on
|
||
|
+ device lapic 0 on end
|
||
|
+ end
|
||
|
+ device domain 0 on
|
||
|
+ device pci 00.0 on end # SoC router (6f00)
|
||
|
+ device pci 01.0 on end # CPU PCIe RP1 (6f02)
|
||
|
+ device pci 01.1 on end # CPU PCIe RP1 (6f03)
|
||
|
+ device pci 02.0 on end # CPU PCIe RP2 (6f04)
|
||
|
+ device pci 02.2 on end # CPU PCIe RP2 (6f06)
|
||
|
+ device pci 03.0 on end # CPU PCIe RP3 (6f08)
|
||
|
+ device pci 05.0 on end # Sys Mgmt (6f28)
|
||
|
+ device pci 05.1 on end # IIO HP (6f29)
|
||
|
+ device pci 05.2 on end # IIO RAS (6f2a)
|
||
|
+ device pci 05.4 on end # I/O APIC (6f2c)
|
||
|
+ device pci 05.6 off end # I/O Performance Monitoring (6f39)
|
||
|
+ device pci 06.0 off end # IIO Debug
|
||
|
+ device pci 06.1 off end # IIO Debug
|
||
|
+ device pci 06.2 off end # IIO Debug
|
||
|
+ device pci 06.3 off end # IIO Debug
|
||
|
+ device pci 06.4 off end # IIO Debug
|
||
|
+ device pci 06.5 off end # IIO Debug
|
||
|
+ device pci 06.6 off end # IIO Debug
|
||
|
+ device pci 06.7 off end # IIO Debug
|
||
|
+ device pci 07.0 off end # IIO Debug
|
||
|
+ device pci 07.1 off end # IIO Debug
|
||
|
+ device pci 07.2 off end # IIO Debug
|
||
|
+ device pci 07.3 off end # IIO Debug
|
||
|
+ device pci 07.4 off end # IIO Debug
|
||
|
+ device pci 14.0 on end # xHCI Controller (8c31)
|
||
|
+ device pci 16.0 off end # MEI Controller #1 (8c3a)
|
||
|
+ device pci 16.1 off end # MEI Controller #2 (8c3b)
|
||
|
+ device pci 16.2 off end # IDE-r Controller (8c3c)
|
||
|
+ device pci 16.3 off end # KT Controller (8c3d)
|
||
|
+ device pci 19.0 off end # Gigabit LAN Controller
|
||
|
+ device pci 1a.0 on end # EHCI Controller #2 (8c2d)
|
||
|
+ device pci 1c.0 on end # PCH PCIe RP1 (8c10)
|
||
|
+ device pci 1c.1 on end # PCH PCIe RP2 (8c12)
|
||
|
+ device pci 1c.3 on end # PCH PCIe RP4 (8c16)
|
||
|
+ device pci 1c.4 on end # PCH PCIe RP5 (8c18)
|
||
|
+ device pci 1d.0 on end # EHCI Controller #1 (8c26)
|
||
|
+ device pci 1f.0 on
|
||
|
+ chip drivers/ipmi
|
||
|
+ register "bmc_i2c_address" = "0x20"
|
||
|
+ device pnp ca2.0 on # IPMI KCS
|
||
|
+ irq 0x70 = 0x05
|
||
|
+ end
|
||
|
+ end
|
||
|
+ chip superio/common
|
||
|
+ device pnp 2e.0 on
|
||
|
+ chip superio/aspeed/ast2400
|
||
|
+ device pnp 2e.2 on # SUART1
|
||
|
+ io 0x60 = 0x3f8
|
||
|
+ irq 0x70 = 0x04
|
||
|
+ end
|
||
|
+ device pnp 2e.3 on # SUART2
|
||
|
+ io 0x60 = 0x2f8
|
||
|
+ irq 0x70 = 0x03
|
||
|
+ end
|
||
|
+ device pnp 2e.4 on # SWC
|
||
|
+ io 0x60 = 0x8e6
|
||
|
+ io 0x62 = 0x8e0
|
||
|
+ io 0x64 = 0x8e4
|
||
|
+ io 0x66 = 0x8e8
|
||
|
+ irq 0x70 = 0x09
|
||
|
+ end
|
||
|
+ device pnp 2e.5 off end # KBC
|
||
|
+ device pnp 2e.7 on end # GPIO
|
||
|
+ device pnp 2e.b on # SUART3
|
||
|
+ io 0x60 = 0x3e8
|
||
|
+ irq 0x70 = 0x06
|
||
|
+ end
|
||
|
+ device pnp 2e.c on # SUART4
|
||
|
+ io 0x60 = 0x2e8
|
||
|
+ irq 0x70 = 0x05
|
||
|
+ end
|
||
|
+ device pnp 2e.d on # iLPC2AHB
|
||
|
+ irq 0x70 = 0x09
|
||
|
+ end
|
||
|
+ device pnp 2e.e on # Mailbox
|
||
|
+ io 0x60 = 0x8c0
|
||
|
+ irq 0x70 = 0x09
|
||
|
+ end
|
||
|
+ end
|
||
|
+ end
|
||
|
+ end
|
||
|
+ chip drivers/pc80/tpm
|
||
|
+ device pnp 0c31.0 on end
|
||
|
+ end
|
||
|
+ end # LPC Bridge (8c54)
|
||
|
+ device pci 1f.2 on end # SATA Controller (8c02)
|
||
|
+ device pci 1f.3 on end # SMBus Controller (8c22)
|
||
|
+ device pci 1f.5 on end # SATA Controller
|
||
|
+ device pci 1f.6 on end # Thermal Mgmt Controller (8c24)
|
||
|
+ end
|
||
|
+end
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/dsdt.asl b/src/mainboard/purism/librem_l1um/dsdt.asl
|
||
|
new file mode 100644
|
||
|
index 0000000000..c9dd6f5506
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/dsdt.asl
|
||
|
@@ -0,0 +1,41 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+#include <arch/acpi.h>
|
||
|
+DefinitionBlock(
|
||
|
+ "dsdt.aml",
|
||
|
+ "DSDT",
|
||
|
+ 0x02, // DSDT revision: ACPI v2.0 and up
|
||
|
+ OEM_ID,
|
||
|
+ ACPI_TABLE_CREATOR,
|
||
|
+ 0x20110725 // OEM revision
|
||
|
+)
|
||
|
+{
|
||
|
+ #include "acpi/platform.asl"
|
||
|
+
|
||
|
+ Name(_S0, Package() { 0x00, 0x00, 0x00, 0x00 })
|
||
|
+ Name(_S5, Package() { 0x07, 0x00, 0x00, 0x00 })
|
||
|
+
|
||
|
+ Scope (\_SB)
|
||
|
+ {
|
||
|
+ Device (PCI0)
|
||
|
+ {
|
||
|
+ #include <acpi/southcluster.asl>
|
||
|
+ #include <acpi/pcie1.asl>
|
||
|
+ }
|
||
|
+
|
||
|
+ #include <acpi/uncore.asl>
|
||
|
+ }
|
||
|
+
|
||
|
+ #include "acpi/mainboard.asl"
|
||
|
+}
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/fadt.c b/src/mainboard/purism/librem_l1um/fadt.c
|
||
|
new file mode 100644
|
||
|
index 0000000000..cba3b078fb
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/fadt.c
|
||
|
@@ -0,0 +1,25 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+#include <soc/acpi.h>
|
||
|
+
|
||
|
+void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)
|
||
|
+{
|
||
|
+ acpi_header_t *header = &(fadt->header);
|
||
|
+
|
||
|
+ acpi_fill_in_fadt(fadt, facs, dsdt);
|
||
|
+
|
||
|
+ /* Platform specific customizations go here */
|
||
|
+
|
||
|
+ header->checksum = acpi_checksum((void *) fadt, sizeof(acpi_fadt_t));
|
||
|
+}
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/irqroute.c b/src/mainboard/purism/librem_l1um/irqroute.c
|
||
|
new file mode 100644
|
||
|
index 0000000000..fb2f90d0f4
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/irqroute.c
|
||
|
@@ -0,0 +1,16 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+#include "irqroute.h"
|
||
|
+
|
||
|
+DEFINE_IRQ_ROUTES;
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/irqroute.h b/src/mainboard/purism/librem_l1um/irqroute.h
|
||
|
new file mode 100644
|
||
|
index 0000000000..82b9448f64
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/irqroute.h
|
||
|
@@ -0,0 +1,45 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+#ifndef IRQROUTE_H
|
||
|
+#define IRQROUTE_H
|
||
|
+
|
||
|
+#include <soc/irq.h>
|
||
|
+#include <soc/pci_devs.h>
|
||
|
+
|
||
|
+#define PCI_DEV_PIRQ_ROUTES \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(XHCI_DEV, A, B, C, D), \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(ME_DEV, A, B, C, D), \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(GBE_DEV, A, B, C, D), \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(EHCI2_DEV, A, B, C, D), \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(HDA_DEV, A, B, C, D), \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(PCIE_DEV, A, B, C, D), \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(EHCI1_DEV, A, B, C, D), \
|
||
|
+ PCI_DEV_PIRQ_ROUTE(SATA_DEV, A, B, C, D)
|
||
|
+
|
||
|
+/*
|
||
|
+ * Route each PIRQ[A-H] to a PIC IRQ[0-15]
|
||
|
+ * Reserved: 0, 1, 2, 8, 13
|
||
|
+ * ACPI/SCI: 9
|
||
|
+ */
|
||
|
+#define PIRQ_PIC_ROUTES \
|
||
|
+ PIRQ_PIC(A, 5), \
|
||
|
+ PIRQ_PIC(B, 6), \
|
||
|
+ PIRQ_PIC(C, 7), \
|
||
|
+ PIRQ_PIC(D, 10), \
|
||
|
+ PIRQ_PIC(E, 11), \
|
||
|
+ PIRQ_PIC(F, 12), \
|
||
|
+ PIRQ_PIC(G, 14), \
|
||
|
+ PIRQ_PIC(H, 15)
|
||
|
+
|
||
|
+#endif /* IRQROUTE_H */
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/mainboard.c b/src/mainboard/purism/librem_l1um/mainboard.c
|
||
|
new file mode 100644
|
||
|
index 0000000000..7a017bdcaf
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/mainboard.c
|
||
|
@@ -0,0 +1,26 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+#include <device/device.h>
|
||
|
+
|
||
|
+/*
|
||
|
+ * mainboard_enable is executed as first thing after enumerate_buses().
|
||
|
+ * This is the earliest point to add customization.
|
||
|
+ */
|
||
|
+static void mainboard_enable(struct device *dev)
|
||
|
+{
|
||
|
+}
|
||
|
+
|
||
|
+struct chip_operations mainboard_ops = {
|
||
|
+ .enable_dev = mainboard_enable,
|
||
|
+};
|
||
|
diff --git a/src/mainboard/purism/librem_l1um/romstage.c b/src/mainboard/purism/librem_l1um/romstage.c
|
||
|
new file mode 100644
|
||
|
index 0000000000..112eb264fc
|
||
|
--- /dev/null
|
||
|
+++ b/src/mainboard/purism/librem_l1um/romstage.c
|
||
|
@@ -0,0 +1,98 @@
|
||
|
+/*
|
||
|
+ * This file is part of the coreboot project.
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or modify
|
||
|
+ * it under the terms of the GNU General Public License as published by
|
||
|
+ * the Free Software Foundation; version 2 of the License.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ */
|
||
|
+
|
||
|
+#include <stddef.h>
|
||
|
+#include <soc/romstage.h>
|
||
|
+#include <drivers/intel/fsp1_0/fsp_util.h>
|
||
|
+#include <cpu/x86/msr.h>
|
||
|
+#include <cf9_reset.h>
|
||
|
+#include <console/console.h>
|
||
|
+#include <device/pci_ops.h>
|
||
|
+#include <soc/pci_devs.h>
|
||
|
+#include <soc/lpc.h>
|
||
|
+#include <superio/aspeed/ast2400/ast2400.h>
|
||
|
+#include <superio/aspeed/common/aspeed.h>
|
||
|
+
|
||
|
+#define SERIAL_DEV PNP_DEV(0x2e, AST2400_SUART1)
|
||
|
+
|
||
|
+/**
|
||
|
+ * brief mainboard call for setup that needs to be done before fsp init
|
||
|
+ */
|
||
|
+void early_mainboard_romstage_entry(void)
|
||
|
+{
|
||
|
+ /*
|
||
|
+ * Sometimes the system boots in an invalid state, where random values
|
||
|
+ * have been written to MSRs and then the MSRs are locked.
|
||
|
+ * Seems to always happen on warm reset.
|
||
|
+ *
|
||
|
+ * Power cycling or a board_reset() isn't sufficient in this case, so
|
||
|
+ * issue a full_reset() to "fix" this issue.
|
||
|
+ */
|
||
|
+ msr_t msr = rdmsr(IA32_FEATURE_CONTROL);
|
||
|
+ if (msr.lo & 1) {
|
||
|
+ console_init();
|
||
|
+ printk(BIOS_EMERG, "Detected broken platform state. Issuing full reset\n");
|
||
|
+ full_reset();
|
||
|
+ }
|
||
|
+
|
||
|
+ /* enable early serial output */
|
||
|
+ aspeed_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
|
||
|
+}
|
||
|
+
|
||
|
+/*
|
||
|
+ * brief mainboard call for setup that needs to be done after fsp init
|
||
|
+ */
|
||
|
+void late_mainboard_romstage_entry(void)
|
||
|
+{
|
||
|
+ // IPMI through BIC
|
||
|
+ pci_write_config32(PCI_DEV(0, LPC_DEV, LPC_FUNC), LPC_GEN2_DEC,
|
||
|
+ 0x0c0ca1);
|
||
|
+}
|
||
|
+
|
||
|
+/*
|
||
|
+ * brief customize fsp parameters here if needed
|
||
|
+ */
|
||
|
+void romstage_fsp_rt_buffer_callback(FSP_INIT_RT_BUFFER *FspRtBuffer)
|
||
|
+{
|
||
|
+ UPD_DATA_REGION *fsp_upd_data = FspRtBuffer->Common.UpdDataRgnPtr;
|
||
|
+
|
||
|
+ /* The internal UART operates on 0x3f8/0x2f8.
|
||
|
+ * As it's not wired up and conflicts with SuperIO decoding
|
||
|
+ * the same range, make sure to disable it.
|
||
|
+ */
|
||
|
+ fsp_upd_data->SerialPortConfigure = 0;
|
||
|
+ fsp_upd_data->SerialPortControllerInit0 = 0;
|
||
|
+ fsp_upd_data->SerialPortControllerInit1 = 0;
|
||
|
+
|
||
|
+ /* coreboot will initialize UART.
|
||
|
+ * No need for FSP to do it again.
|
||
|
+ */
|
||
|
+ fsp_upd_data->SerialPortConfigure = 0;
|
||
|
+ fsp_upd_data->SerialPortBaudRate = 0;
|
||
|
+
|
||
|
+ /* Make FSP use serial IO */
|
||
|
+ fsp_upd_data->SerialPortType = 1;
|
||
|
+
|
||
|
+ /* Set the bifurcation for IOU1 / port 0
|
||
|
+ * default xxxxxx8, set to xxxx8x8 to
|
||
|
+ * enable PCIe slot 0
|
||
|
+ */
|
||
|
+ fsp_upd_data->ConfigIOU1_PciPort3 = 3;
|
||
|
+
|
||
|
+ /* Set the bifurcation for IOU2 / port 1
|
||
|
+ * default xxxxxx8, set to xxxxx4x4 to
|
||
|
+ * enable SAS controller and NVMe to coexist
|
||
|
+ */
|
||
|
+ fsp_upd_data->ConfigIOU2_PciPort1 = 0;
|
||
|
+
|
||
|
+}
|
||
|
--
|
||
|
2.20.1
|
||
|
|