<p>Youness Alaoui has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26107">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">purism/librem15v2: Add support for Librem 15 v2<br><br>Code is very similar to Librem 13 v1, with the following differences:<br>- SATA ports 0 and 1 instead of 0 and 3<br>- SATA DTLE IOBP value is 7 instead of 9 for port 0<br>- There is no LAN device<br>- There are two SODIMM slots, and DQs are interleaved<br>- USB ports are different<br><br>Change-Id: I86d099ba1919009ecc6cc8ec7af4dbabc68ec3cf<br>Signed-off-by: Youness Alaoui <youness.alaoui@puri.sm><br>---<br>A src/mainboard/purism/librem15v2/Kconfig<br>A src/mainboard/purism/librem15v2/Kconfig.name<br>A src/mainboard/purism/librem15v2/Makefile.inc<br>A src/mainboard/purism/librem15v2/acpi/ec.asl<br>A src/mainboard/purism/librem15v2/acpi/mainboard.asl<br>A src/mainboard/purism/librem15v2/acpi/superio.asl<br>A src/mainboard/purism/librem15v2/acpi_tables.c<br>A src/mainboard/purism/librem15v2/board_info.txt<br>A src/mainboard/purism/librem15v2/devicetree.cb<br>A src/mainboard/purism/librem15v2/dsdt.asl<br>A src/mainboard/purism/librem15v2/fadt.c<br>A src/mainboard/purism/librem15v2/gpio.h<br>A src/mainboard/purism/librem15v2/hda_verb.c<br>A src/mainboard/purism/librem15v2/mainboard.c<br>A src/mainboard/purism/librem15v2/pei_data.c<br>A src/mainboard/purism/librem15v2/romstage.c<br>16 files changed, 748 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/07/26107/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mainboard/purism/librem15v2/Kconfig b/src/mainboard/purism/librem15v2/Kconfig</span><br><span>new file mode 100644</span><br><span>index 0000000..6500457</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/Kconfig</span><br><span>@@ -0,0 +1,72 @@</span><br><span style="color: hsl(120, 100%, 40%);">+if BOARD_PURISM_LIBREM15_V2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config BOARD_SPECIFIC_OPTIONS # dummy</span><br><span style="color: hsl(120, 100%, 40%);">+  def_bool y</span><br><span style="color: hsl(120, 100%, 40%);">+    select SYSTEM_TYPE_LAPTOP</span><br><span style="color: hsl(120, 100%, 40%);">+     select BOARD_ROMSIZE_KB_8192</span><br><span style="color: hsl(120, 100%, 40%);">+  select EC_PURISM_LIBREM</span><br><span style="color: hsl(120, 100%, 40%);">+       select HAVE_ACPI_RESUME</span><br><span style="color: hsl(120, 100%, 40%);">+       select HAVE_ACPI_TABLES</span><br><span style="color: hsl(120, 100%, 40%);">+       select INTEL_INT15</span><br><span style="color: hsl(120, 100%, 40%);">+    select SOC_INTEL_BROADWELL</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config DRIVERS_PS2_KEYBOARD</span><br><span style="color: hsl(120, 100%, 40%);">+     def_bool y</span><br><span style="color: hsl(120, 100%, 40%);">+    help</span><br><span style="color: hsl(120, 100%, 40%);">+    Default PS/2 Keyboard to enabled on this board.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config DRIVERS_UART_8250IO</span><br><span style="color: hsl(120, 100%, 40%);">+       def_bool n</span><br><span style="color: hsl(120, 100%, 40%);">+    help</span><br><span style="color: hsl(120, 100%, 40%);">+    This platform does not have any way to get standard</span><br><span style="color: hsl(120, 100%, 40%);">+   serial output so disable it by default.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config PCIEXP_L1_SUB_STATE</span><br><span style="color: hsl(120, 100%, 40%);">+       def_bool n</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config PCIEXP_AER</span><br><span style="color: hsl(120, 100%, 40%);">+       def_bool n</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config HAVE_IFD_BIN</span><br><span style="color: hsl(120, 100%, 40%);">+     bool</span><br><span style="color: hsl(120, 100%, 40%);">+  default n</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config HAVE_ME_BIN</span><br><span style="color: hsl(120, 100%, 40%);">+       bool</span><br><span style="color: hsl(120, 100%, 40%);">+  default n</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config MAINBOARD_DIR</span><br><span style="color: hsl(120, 100%, 40%);">+     string</span><br><span style="color: hsl(120, 100%, 40%);">+        default purism/librem15v2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config MAINBOARD_PART_NUMBER</span><br><span style="color: hsl(120, 100%, 40%);">+     string</span><br><span style="color: hsl(120, 100%, 40%);">+        default "Librem 15 v2"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config MAINBOARD_VERSION</span><br><span style="color: hsl(120, 100%, 40%);">+  string</span><br><span style="color: hsl(120, 100%, 40%);">+        default "2.0"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config MAINBOARD_FAMILY</span><br><span style="color: hsl(120, 100%, 40%);">+    string</span><br><span style="color: hsl(120, 100%, 40%);">+        default "Librem 15"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config MAX_CPUS</span><br><span style="color: hsl(120, 100%, 40%);">+      int</span><br><span style="color: hsl(120, 100%, 40%);">+   default 8</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config NO_POST</span><br><span style="color: hsl(120, 100%, 40%);">+   def_bool y</span><br><span style="color: hsl(120, 100%, 40%);">+    help</span><br><span style="color: hsl(120, 100%, 40%);">+    This platform does not have any way to see POST codes</span><br><span style="color: hsl(120, 100%, 40%);">+         so disable them by default.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config PRE_GRAPHICS_DELAY</span><br><span style="color: hsl(120, 100%, 40%);">+    int</span><br><span style="color: hsl(120, 100%, 40%);">+   default 50</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+config VGA_BIOS_ID</span><br><span style="color: hsl(120, 100%, 40%);">+      string</span><br><span style="color: hsl(120, 100%, 40%);">+        default "8086,162b"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span>diff --git a/src/mainboard/purism/librem15v2/Kconfig.name b/src/mainboard/purism/librem15v2/Kconfig.name</span><br><span>new file mode 100644</span><br><span>index 0000000..196c900</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/Kconfig.name</span><br><span>@@ -0,0 +1,2 @@</span><br><span style="color: hsl(120, 100%, 40%);">+config BOARD_PURISM_LIBREM15_V2</span><br><span style="color: hsl(120, 100%, 40%);">+     bool "Librem 15 v2"</span><br><span>diff --git a/src/mainboard/purism/librem15v2/Makefile.inc b/src/mainboard/purism/librem15v2/Makefile.inc</span><br><span>new file mode 100644</span><br><span>index 0000000..44e79c3</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/Makefile.inc</span><br><span>@@ -0,0 +1,17 @@</span><br><span style="color: hsl(120, 100%, 40%);">+##</span><br><span style="color: hsl(120, 100%, 40%);">+## This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+##</span><br><span style="color: hsl(120, 100%, 40%);">+## Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+##</span><br><span style="color: hsl(120, 100%, 40%);">+## This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+## it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+## the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+##</span><br><span style="color: hsl(120, 100%, 40%);">+## This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+## but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+## GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+##</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+romstage-y += pei_data.c</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-y += pei_data.c</span><br><span>diff --git a/src/mainboard/purism/librem15v2/acpi/ec.asl b/src/mainboard/purism/librem15v2/acpi/ec.asl</span><br><span>new file mode 100644</span><br><span>index 0000000..b2fa5b9</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/acpi/ec.asl</span><br><span>@@ -0,0 +1,20 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define EC_SCI_GPI 10</span><br><span style="color: hsl(120, 100%, 40%);">+#define PPCM_TURBO Zero</span><br><span style="color: hsl(120, 100%, 40%);">+#define PPCM_NOTURBO One</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <ec/purism/librem/acpi/ec.asl></span><br><span>diff --git a/src/mainboard/purism/librem15v2/acpi/mainboard.asl b/src/mainboard/purism/librem15v2/acpi/mainboard.asl</span><br><span>new file mode 100644</span><br><span>index 0000000..f0b2c1d</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/acpi/mainboard.asl</span><br><span>@@ -0,0 +1,54 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Scope (\_SB)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       Device (LID0)</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+             Name (_HID, EisaId ("PNP0C0D"))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (_STA)</span><br><span style="color: hsl(120, 100%, 40%);">+         {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Return (0xF)</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (_LID)</span><br><span style="color: hsl(120, 100%, 40%);">+         {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Return (\_SB.PCI0.LPCB.EC.LIDS)</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Device (PWRB)</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+             Name (_HID, EisaId ("PNP0C0C"))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (_STA)</span><br><span style="color: hsl(120, 100%, 40%);">+         {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Return (0xF)</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Name (_PRW, Package () { 27, 4 })</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Device (SLPB)</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+             Name (_HID, EisaId ("PNP0C0E"))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (_STA)</span><br><span style="color: hsl(120, 100%, 40%);">+         {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Return (0xF)</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/mainboard/purism/librem15v2/acpi/superio.asl b/src/mainboard/purism/librem15v2/acpi/superio.asl</span><br><span>new file mode 100644</span><br><span>index 0000000..92c272e</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/acpi/superio.asl</span><br><span>@@ -0,0 +1,16 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <drivers/pc80/pc/ps2_controller.asl></span><br><span>diff --git a/src/mainboard/purism/librem15v2/acpi_tables.c b/src/mainboard/purism/librem15v2/acpi_tables.c</span><br><span>new file mode 100644</span><br><span>index 0000000..b51be02</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/acpi_tables.c</span><br><span>@@ -0,0 +1,37 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/acpi.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/acpigen.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/ioapic.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/acpi.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/nvs.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void acpi_create_gnvs(global_nvs_t *gnvs)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      acpi_init_gnvs(gnvs);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+unsigned long acpi_fill_madt(unsigned long current)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Local APICs */</span><br><span style="color: hsl(120, 100%, 40%);">+     current = acpi_create_madt_lapics(current);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* IOAPIC */</span><br><span style="color: hsl(120, 100%, 40%);">+  current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current,</span><br><span style="color: hsl(120, 100%, 40%);">+                            2, IO_APIC_ADDR, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return acpi_madt_irq_overrides(current);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/mainboard/purism/librem15v2/board_info.txt b/src/mainboard/purism/librem15v2/board_info.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..d23ae9a</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/board_info.txt</span><br><span>@@ -0,0 +1,9 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Category: laptop</span><br><span style="color: hsl(120, 100%, 40%);">+Vendor name: Purism</span><br><span style="color: hsl(120, 100%, 40%);">+Board name: Librem 15 v2</span><br><span style="color: hsl(120, 100%, 40%);">+Board URL: https://puri.sm/librem-15/</span><br><span style="color: hsl(120, 100%, 40%);">+ROM package: SOIC8</span><br><span style="color: hsl(120, 100%, 40%);">+ROM protocol: SPI</span><br><span style="color: hsl(120, 100%, 40%);">+ROM socketed: n</span><br><span style="color: hsl(120, 100%, 40%);">+Flashrom support: y</span><br><span style="color: hsl(120, 100%, 40%);">+Release year: 2015</span><br><span>diff --git a/src/mainboard/purism/librem15v2/devicetree.cb b/src/mainboard/purism/librem15v2/devicetree.cb</span><br><span>new file mode 100644</span><br><span>index 0000000..3e83d3f</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/devicetree.cb</span><br><span>@@ -0,0 +1,75 @@</span><br><span style="color: hsl(120, 100%, 40%);">+chip soc/intel/broadwell</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        # Enable eDP Hotplug with 6ms pulse</span><br><span style="color: hsl(120, 100%, 40%);">+   register "gpu_dp_d_hotplug" = "0x06"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    # Enable DDI1 Hotplug with 6ms pulse</span><br><span style="color: hsl(120, 100%, 40%);">+  register "gpu_dp_b_hotplug" = "0x06"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    # Set backlight PWM values for eDP</span><br><span style="color: hsl(120, 100%, 40%);">+    register "gpu_cpu_backlight" = "0x00000200"</span><br><span style="color: hsl(120, 100%, 40%);">+       register "gpu_pch_backlight" = "0x04000200"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     # Enable Panel and configure power delays</span><br><span style="color: hsl(120, 100%, 40%);">+     register "gpu_panel_port_select" = "1"                      # eDP</span><br><span style="color: hsl(120, 100%, 40%);">+ register "gpu_panel_power_cycle_delay" = "6"                # 500ms</span><br><span style="color: hsl(120, 100%, 40%);">+       register "gpu_panel_power_up_delay" = "2000"                # 200ms</span><br><span style="color: hsl(120, 100%, 40%);">+       register "gpu_panel_power_down_delay" = "500"               # 50ms</span><br><span style="color: hsl(120, 100%, 40%);">+        register "gpu_panel_power_backlight_on_delay" = "2000"      # 200ms</span><br><span style="color: hsl(120, 100%, 40%);">+       register "gpu_panel_power_backlight_off_delay" = "2000"     # 200ms</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     # EC host command ranges are in 0x380-0x383 & 0x80-0x8f</span><br><span style="color: hsl(120, 100%, 40%);">+   register "gen1_dec" = "0x00000381"</span><br><span style="color: hsl(120, 100%, 40%);">+        register "gen2_dec" = "0x000c0081"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      # Port 0 is HDD</span><br><span style="color: hsl(120, 100%, 40%);">+       # Port 1 is M.2 NGFF</span><br><span style="color: hsl(120, 100%, 40%);">+  register "sata_port_map" = "0x3"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        # Port tuning for link stability</span><br><span style="color: hsl(120, 100%, 40%);">+      register "sata_port0_gen3_dtle" = "7"</span><br><span style="color: hsl(120, 100%, 40%);">+     register "sata_port1_gen3_dtle" = "9"</span><br><span style="color: hsl(120, 100%, 40%);">+     register "sata_port2_gen3_dtle" = "9"</span><br><span style="color: hsl(120, 100%, 40%);">+     register "sata_port3_gen3_dtle" = "7"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   device cpu_cluster 0 on</span><br><span style="color: hsl(120, 100%, 40%);">+               device lapic 0 on end</span><br><span style="color: hsl(120, 100%, 40%);">+ end</span><br><span style="color: hsl(120, 100%, 40%);">+   device domain 0 on</span><br><span style="color: hsl(120, 100%, 40%);">+            device pci 00.0 on  end # host bridge</span><br><span style="color: hsl(120, 100%, 40%);">+         device pci 02.0 on  end # vga controller</span><br><span style="color: hsl(120, 100%, 40%);">+              device pci 03.0 on  end # mini-hd audio</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 13.0 off end # Smart Sound Audio DSP</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 14.0 on  end # USB3 XHCI</span><br><span style="color: hsl(120, 100%, 40%);">+           device pci 15.0 off end # Serial I/O DMA</span><br><span style="color: hsl(120, 100%, 40%);">+              device pci 15.1 off end # I2C0</span><br><span style="color: hsl(120, 100%, 40%);">+                device pci 15.2 off end # I2C1</span><br><span style="color: hsl(120, 100%, 40%);">+                device pci 15.3 off end # GSPI0</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 15.4 off end # GSPI1</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 15.5 off end # UART0</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 15.6 off end # UART1</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 16.0 off end # Management Engine Interface 1</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 16.1 off end # Management Engine Interface 2</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 16.2 off end # Management Engine IDE-R</span><br><span style="color: hsl(120, 100%, 40%);">+             device pci 16.3 off end # Management Engine KT</span><br><span style="color: hsl(120, 100%, 40%);">+                device pci 17.0 off end # SDIO</span><br><span style="color: hsl(120, 100%, 40%);">+                device pci 19.0 off end # GbE</span><br><span style="color: hsl(120, 100%, 40%);">+         device pci 1b.0 on  end # High Definition Audio</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 1c.0 on  end # PCIe Port #1</span><br><span style="color: hsl(120, 100%, 40%);">+                device pci 1c.1 off end # PCIe Port #2</span><br><span style="color: hsl(120, 100%, 40%);">+                device pci 1c.2 off end # PCIe Port #3 - LAN</span><br><span style="color: hsl(120, 100%, 40%);">+          device pci 1c.3 on  end # PCIe Port #4 - WiFi</span><br><span style="color: hsl(120, 100%, 40%);">+         device pci 1c.4 on  end # PCIe Port #5</span><br><span style="color: hsl(120, 100%, 40%);">+                device pci 1c.5 on  end # PCIe Port #6 - M.2 NVMe</span><br><span style="color: hsl(120, 100%, 40%);">+             device pci 1d.0 on  end # USB2 EHCI</span><br><span style="color: hsl(120, 100%, 40%);">+           device pci 1e.0 off end # PCI bridge</span><br><span style="color: hsl(120, 100%, 40%);">+          device pci 1f.0 on</span><br><span style="color: hsl(120, 100%, 40%);">+                    chip ec/purism/librem</span><br><span style="color: hsl(120, 100%, 40%);">+                         device pnp 0c09.0 on end</span><br><span style="color: hsl(120, 100%, 40%);">+                      end</span><br><span style="color: hsl(120, 100%, 40%);">+           end # LPC bridge</span><br><span style="color: hsl(120, 100%, 40%);">+              device pci 1f.2 on  end # SATA Controller</span><br><span style="color: hsl(120, 100%, 40%);">+             device pci 1f.3 on  end # SMBus</span><br><span style="color: hsl(120, 100%, 40%);">+               device pci 1f.6 off end # Thermal</span><br><span style="color: hsl(120, 100%, 40%);">+     end</span><br><span style="color: hsl(120, 100%, 40%);">+end</span><br><span>diff --git a/src/mainboard/purism/librem15v2/dsdt.asl b/src/mainboard/purism/librem15v2/dsdt.asl</span><br><span>new file mode 100644</span><br><span>index 0000000..955857a</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/dsdt.asl</span><br><span>@@ -0,0 +1,47 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DefinitionBlock(</span><br><span style="color: hsl(120, 100%, 40%);">+    "dsdt.aml",</span><br><span style="color: hsl(120, 100%, 40%);">+ "DSDT",</span><br><span style="color: hsl(120, 100%, 40%);">+     0x05,           /* DSDT revision: ACPI v5.0 */</span><br><span style="color: hsl(120, 100%, 40%);">+        "COREv4",     /* OEM id */</span><br><span style="color: hsl(120, 100%, 40%);">+  "COREBOOT",   /* OEM table id */</span><br><span style="color: hsl(120, 100%, 40%);">+    0x20160115      /* OEM revision */</span><br><span style="color: hsl(120, 100%, 40%);">+)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Some generic macros */</span><br><span style="color: hsl(120, 100%, 40%);">+     #include <soc/intel/broadwell/acpi/platform.asl></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Global NVS and variables */</span><br><span style="color: hsl(120, 100%, 40%);">+        #include <soc/intel/broadwell/acpi/globalnvs.asl></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* CPU */</span><br><span style="color: hsl(120, 100%, 40%);">+     #include <soc/intel/broadwell/acpi/cpu.asl></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Scope (\_SB) {</span><br><span style="color: hsl(120, 100%, 40%);">+                Device (PCI0)</span><br><span style="color: hsl(120, 100%, 40%);">+         {</span><br><span style="color: hsl(120, 100%, 40%);">+                     #include <soc/intel/broadwell/acpi/systemagent.asl></span><br><span style="color: hsl(120, 100%, 40%);">+                     #include <soc/intel/broadwell/acpi/pch.asl></span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Chipset specific sleep states */</span><br><span style="color: hsl(120, 100%, 40%);">+   #include <soc/intel/broadwell/acpi/sleepstates.asl></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Mainboard specific */</span><br><span style="color: hsl(120, 100%, 40%);">+      #include "acpi/mainboard.asl"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/mainboard/purism/librem15v2/fadt.c b/src/mainboard/purism/librem15v2/fadt.c</span><br><span>new file mode 100644</span><br><span>index 0000000..9cbcd3f</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/fadt.c</span><br><span>@@ -0,0 +1,45 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/acpi.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    acpi_header_t *header = &fadt->header;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       memset(fadt, 0, sizeof(acpi_fadt_t));</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(header->signature, "FACP", 4);</span><br><span style="color: hsl(120, 100%, 40%);">+    header->length = sizeof(acpi_fadt_t);</span><br><span style="color: hsl(120, 100%, 40%);">+      header->revision = ACPI_FADT_REV_ACPI_3_0;</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(header->oem_id, OEM_ID, 6);</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);</span><br><span style="color: hsl(120, 100%, 40%);">+       memcpy(header->asl_compiler_id, ASLC, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+  header->asl_compiler_revision = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       fadt->firmware_ctrl = (u32)facs;</span><br><span style="color: hsl(120, 100%, 40%);">+   fadt->dsdt = (u32)dsdt;</span><br><span style="color: hsl(120, 100%, 40%);">+    fadt->model = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+   fadt->preferred_pm_profile = PM_MOBILE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  fadt->x_firmware_ctl_l = (u32)facs;</span><br><span style="color: hsl(120, 100%, 40%);">+        fadt->x_firmware_ctl_h = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        fadt->x_dsdt_l = (u32)dsdt;</span><br><span style="color: hsl(120, 100%, 40%);">+        fadt->x_dsdt_h = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      acpi_fill_in_fadt(fadt);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    header->checksum = acpi_checksum((void *)fadt, header->length);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/mainboard/purism/librem15v2/gpio.h b/src/mainboard/purism/librem15v2/gpio.h</span><br><span>new file mode 100644</span><br><span>index 0000000..98b09bc</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/gpio.h</span><br><span>@@ -0,0 +1,120 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef MAINBOARD_GPIO_H</span><br><span style="color: hsl(120, 100%, 40%);">+#define MAINBOARD_GPIO_H</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/gpio.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct gpio_config mainboard_gpio_config[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ PCH_GPIO_INPUT,         /* 0 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 1 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 2 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 3 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 4 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 5 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 6 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 7 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 8 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_INPUT,         /* 9 */</span><br><span style="color: hsl(120, 100%, 40%);">+       PCH_GPIO_ACPI_SCI,      /* 10 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 11 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 12 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 13 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 14 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 15 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 16 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 17 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 18 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 19 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 20 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 21 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 22 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 23 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 24 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 25 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 26 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 27 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 28 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 29 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 30 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 31 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 32 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 33 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 34 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 35 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 36 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 37 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 38 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 39 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 40 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 41 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 42 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 43 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 44 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 45 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 46 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 47 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 48 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 49 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 50 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 51 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 52 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 53 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 54 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 55 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 56 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 57 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 58 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 59 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 60 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 61 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 62 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 63 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 64 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 65 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 66 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 67 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 68 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 69 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 70 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 71 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 72 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 73 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 74 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 75 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 76 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 77 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 78 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 79 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 80 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 81 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_NATIVE,        /* 82 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 83 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 84 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 85 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 86 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 87 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 88 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 89 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 90 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 91 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 92 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 93 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_INPUT,         /* 94 */</span><br><span style="color: hsl(120, 100%, 40%);">+      PCH_GPIO_END</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>diff --git a/src/mainboard/purism/librem15v2/hda_verb.c b/src/mainboard/purism/librem15v2/hda_verb.c</span><br><span>new file mode 100644</span><br><span>index 0000000..958a939</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/hda_verb.c</span><br><span>@@ -0,0 +1,105 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <device/azalia_device.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const u32 cim_verb_data[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   /* coreboot specific header */</span><br><span style="color: hsl(120, 100%, 40%);">+        0x10ec0269,     /* Codec Vendor / Device ID: Realtek ALC269 */</span><br><span style="color: hsl(120, 100%, 40%);">+        0x19910269,     /* Subsystem ID */</span><br><span style="color: hsl(120, 100%, 40%);">+    0x0000000c,     /* Number of jacks (NID entries) */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ 0x0017ff00,     /* Function Reset */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x0017ff00,     /* Double Function Reset */</span><br><span style="color: hsl(120, 100%, 40%);">+   0x0017ff00,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x0017ff00,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Bits 31:28 - Codec Address */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Bits 27:20 - NID */</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Bits 19:8 - Verb ID */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Bits 7:0  - Payload */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* NID 0x01, HDA Codec Subsystem ID Verb Table: 0x19910269 */</span><br><span style="color: hsl(120, 100%, 40%);">+ 0x00172069,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x00172102,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x00172291,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x00172319,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Widget Verb Table */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x12) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01271c00,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01271d00,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01271e00,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01271f40,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x14) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01471c10,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01471d01,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01471e17,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01471f90,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x17) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01771cf0,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01771d11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01771e11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01771f41,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x18) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01871c20,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01871d10,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01871ea1,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01871f04,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x19) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01971c30,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01971d01,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01971ea7,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01971f90,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x1A) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01a71cf0,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01a71d11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01a71e11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01a71f41,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x1B) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01b71cf0,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01b71d11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01b71e11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01b71f41,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x1D) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01d71c05,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01d71d9d,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01d71e56,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01d71f40,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x1E) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x01e71cf0,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01e71d11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01e71e11,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x01e71f41,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pin Complex (NID 0x21) */</span><br><span style="color: hsl(120, 100%, 40%);">+  0x02171c1f,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x02171d10,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x02171e21,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x02171f04,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const u32 pc_beep_verbs[] = {};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AZALIA_ARRAY_SIZES;</span><br><span>diff --git a/src/mainboard/purism/librem15v2/mainboard.c b/src/mainboard/purism/librem15v2/mainboard.c</span><br><span>new file mode 100644</span><br><span>index 0000000..2ca559a</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/mainboard.c</span><br><span>@@ -0,0 +1,28 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <device/device.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <drivers/intel/gma/int15.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void mainboard_enable(struct device *dev)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     GMA_INT15_PANEL_FIT_CENTERING,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct chip_operations mainboard_ops = {</span><br><span style="color: hsl(120, 100%, 40%);">+    .enable_dev = mainboard_enable,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/mainboard/purism/librem15v2/pei_data.c b/src/mainboard/purism/librem15v2/pei_data.c</span><br><span>new file mode 100644</span><br><span>index 0000000..83de020</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/pei_data.c</span><br><span>@@ -0,0 +1,64 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/pei_data.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/pei_wrapper.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void mainboard_fill_pei_data(struct pei_data *pei_data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  pei_data->ec_present = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  pei_data->dq_pins_interleaved = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* One DIMM slot */</span><br><span style="color: hsl(120, 100%, 40%);">+   pei_data->dimm_channel0_disabled = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+      pei_data->dimm_channel1_disabled = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    pei_data->spd_addresses[0] = 0xa0;</span><br><span style="color: hsl(120, 100%, 40%);">+ pei_data->spd_addresses[2] = 0xa4;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* P1: Right Side Port (USB2) */</span><br><span style="color: hsl(120, 100%, 40%);">+      pei_data_usb2_port(pei_data, 0, 0x0080, 1, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_BACK_PANEL);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* P2: Right Side Port (USB2) */</span><br><span style="color: hsl(120, 100%, 40%);">+      pei_data_usb2_port(pei_data, 1, 0x0080, 1, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_BACK_PANEL);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* P3: Left Side Port (USB2 only) */</span><br><span style="color: hsl(120, 100%, 40%);">+  pei_data_usb2_port(pei_data, 2, 0x0080, 1, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_BACK_PANEL);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* P4: Left Side Port (USB2 only) */</span><br><span style="color: hsl(120, 100%, 40%);">+  pei_data_usb2_port(pei_data, 3, 0x0080, 1, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_BACK_PANEL);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* P5: Empty */</span><br><span style="color: hsl(120, 100%, 40%);">+       pei_data_usb2_port(pei_data, 4, 0x0080, 0, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_BACK_PANEL);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* P6: Bluetooth */</span><br><span style="color: hsl(120, 100%, 40%);">+   pei_data_usb2_port(pei_data, 5, 0x0080, 1, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_SKIP);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* P7: Camera */</span><br><span style="color: hsl(120, 100%, 40%);">+      pei_data_usb2_port(pei_data, 6, 0x0080, 1, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_SKIP);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* P8: SD Card */</span><br><span style="color: hsl(120, 100%, 40%);">+     pei_data_usb2_port(pei_data, 7, 0x0080, 1, USB_OC_PIN_SKIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                      USB_PORT_BACK_PANEL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* P1: Right Side Port (USB3) */</span><br><span style="color: hsl(120, 100%, 40%);">+      pei_data_usb3_port(pei_data, 0, 1, USB_OC_PIN_SKIP, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* P2: Right Side Port (USB3) */</span><br><span style="color: hsl(120, 100%, 40%);">+      pei_data_usb3_port(pei_data, 1, 1, USB_OC_PIN_SKIP, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* P3: Empty */</span><br><span style="color: hsl(120, 100%, 40%);">+       pei_data_usb3_port(pei_data, 2, 0, USB_OC_PIN_SKIP, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* P4: Empty */</span><br><span style="color: hsl(120, 100%, 40%);">+       pei_data_usb3_port(pei_data, 3, 0, USB_OC_PIN_SKIP, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/mainboard/purism/librem15v2/romstage.c b/src/mainboard/purism/librem15v2/romstage.c</span><br><span>new file mode 100644</span><br><span>index 0000000..2e0ae85</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/purism/librem15v2/romstage.c</span><br><span>@@ -0,0 +1,37 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/gpio.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/pei_data.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/pei_wrapper.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/romstage.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include "gpio.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void mainboard_romstage_entry(struct romstage_params *rp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct pei_data pei_data;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Initialize GPIOs */</span><br><span style="color: hsl(120, 100%, 40%);">+        init_gpios(mainboard_gpio_config);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Fill out PEI DATA */</span><br><span style="color: hsl(120, 100%, 40%);">+       memset(&pei_data, 0, sizeof(pei_data));</span><br><span style="color: hsl(120, 100%, 40%);">+   mainboard_fill_pei_data(&pei_data);</span><br><span style="color: hsl(120, 100%, 40%);">+       rp->pei_data = &pei_data;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Initialize memory */</span><br><span style="color: hsl(120, 100%, 40%);">+       romstage_common(rp);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26107">change 26107</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/26107"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I86d099ba1919009ecc6cc8ec7af4dbabc68ec3cf </div>
<div style="display:none"> Gerrit-Change-Number: 26107 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Youness Alaoui <snifikino@gmail.com> </div>