mb/kontron: Add Kontron mAL10 COMe module support

This patch adds support for the Kontron mAL10 COMe module with the
Apollo Lake SoC together with Kontron T10-TNI carrierboard.

Working:
  - UART console and I2C on Kontron kempld;
  - USB2/3
  - Ethernet controller
  - eMMC
  - SATA
  - PCIe ports
  - IGD/DP
  - SMBus
  - HWM

Not tested:
  - IGD/LVDS
  - SDIO

TODO:
  - HDA (codec IDT 92HD73C1X5, currently disabled)

Tested payloads:
  - SeaBIOS
  - Tianocore, UEFIPayload - without video, EFI-shell in console only

Tested on COMe module with Intel Atom x5-E3940 processor (4 Core,
1.6/1.8GHz, 9.5W TDP). Xubuntu 18.04.2 was used as a bootable OS
(5.0.0-32-generic linux kernel)

Change-Id: Ib8432e10396f77eb05a71af1ccaaa4437a2e43ea
Signed-off-by: Maxim Polyakov <max.senia.poliak@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/39133
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Maxim Polyakov 2020-06-20 17:26:21 +03:00 committed by Patrick Georgi
parent 0948b363b0
commit 0fcd37172f
26 changed files with 961 additions and 0 deletions

View File

@ -76,6 +76,10 @@ The boards in this section are not real mainboards, but emulators.
- [IceLake RVP](intel/icelake_rvp.md)
- [KBLRVP11](intel/kblrvp11.md)
## Kontron
- [mAL-10](kontron/mal10.md)
## Lenovo
- [Mainboard codenames](lenovo/codenames.md)

View File

@ -0,0 +1,106 @@
# Kontron mAL10 Computer-on-Modules platform
The Kontron [mAL10] COMe is a credit card sized Computer-on-Modules
platform based on the Intel Atom E3900 Series, Pentium and Celeron
processors.
## Technology
```eval_rst
+------------------+----------------------------------+
| COMe Type | mini pin-out type 10 |
+------------------+----------------------------------+
| SoC | Intel Atom x5-E3940 (4 core) |
+------------------+----------------------------------+
| GPU | Intel HD Graphics 500 |
+------------------+----------------------------------+
| Coprocessor | Intel TXE 3.0 |
+------------------+----------------------------------+
| RAM | 8GB DDR3L |
+------------------+----------------------------------+
| eMMC Flash | 32GB eMMC pSLC |
+------------------+----------------------------------+
| USB3 | x2 |
+------------------+----------------------------------+
| USB2 | x6 |
+------------------+----------------------------------+
| SATA | x2 |
+------------------+----------------------------------+
| LAN | Intel I210IT, I211AT |
+------------------+----------------------------------+
| Super IO/EC | Kontron CPLD/EC |
+------------------+----------------------------------+
| HWM | NCT7802 |
+------------------+----------------------------------+
```
## Building coreboot
The following commands will build a working image:
```bash
make distclean
make defconfig KBUILD_DEFCONFIG=configs/config.kontron_mal10
make
```
## Payloads
- SeaBIOS
- Tianocore
- Linux as payload
## Flashing coreboot
The SPI flash can be accessed internally using [flashrom].
The following command is used to flash BIOS region.
```bash
$ flashrom -p internal --ifd -i bios -w coreboot.rom --noverify-all
```
## Hardware Monitor
The Nuvoton [NCT7802Y] is a hardware monitoring IC, capable of monitor critical
system parameters including power supply voltages, fan speeds, and temperatures.
The remote inputs can be connected to CPU/GPU thermal diode or any thermal diode
sensors and thermistor.
- 6 temperature sensors;
- 5 voltage sensors;
- 3 fan speed sensors;
- 4 sets of temperature setting points.
PECI is not supported by Apollo Lake Pentium/Celeron/Atom processors and the CPU
temperature value is taken from a thermal resistor (NTC) that is placed very
close to the CPU.
## Known issues
- Works only with Tianocore "UEFIPayload" payload edk2-stable201903-1569-g3e63a91
Booting with the "CorebootPayload" [crashes].
- Tianocore outputs video through an external GPU only.
## Untested
- IGD/LVDS
- SDIO
## Tested and working
- Kontron CPLD/EC (Serial ports, I2C port)
- NCT7802 [HWM](#Hardware Monitor)
- USB2/3
- Gigabit Ethernet ports
- eMMC
- SATA
- PCIe ports
- IGD/DP
## TODO
- Onboard audio (codec IDT 92HD73C1X5, currently disabled)
- S3 suspend/resume
[mAL10]: https://www.kontron.com/products/iot/iot-industry-4.0/iot-ready-boards-and-modules/com-express/com-express-mini/come-mal10-e2-.html
[W25Q128FV]: https://www.winbond.com/resource-files/w25q128fv%20rev.m%2005132016%20kms.pdf
[flashrom]: https://flashrom.org/Flashrom
[NCT7802Y]: https://www.nuvoton.com/products/cloud-computing/hardware-monitors/desktop-server-series/nct7802y/?__locale=en
[crashes]: https://pastebin.com/cpCfrPCL

View File

@ -0,0 +1,58 @@
if BOARD_KONTRON_COME_MAL10
config BOARD_SPECIFIC_OPTIONS
def_bool y
select HAVE_ACPI_TABLES
select HAVE_ACPI_RESUME
select HAVE_OPTION_TABLE
select HAVE_CMOS_DEFAULT
select INTEL_GMA_HAVE_VBT
select SOC_INTEL_APOLLOLAKE
select BOARD_ROMSIZE_KB_16384
select ONBOARD_VGA_IS_PRIMARY
select MAINBOARD_HAS_LIBGFXINIT
select MAINBOARD_HAS_CRB_TPM
select EC_KONTRON_KEMPLD
select DRIVERS_I2C_NCT7802Y
config MAINBOARD_DIR
string
default "kontron/mal10"
# TODO: Add a new carrier boards here
choice
prompt "Carrier board"
default BOARD_KONTRON_T10_TNI
help
This option sets the type of carrier board to be used with
the Kontron mAL10 COMe module.
config BOARD_KONTRON_T10_TNI
bool "Kontron i-T10-TNIx"
help
By selecting this option, the target ROM image will be built for
the Kontron Ref.Carrier-i T10-TNI carrier board.
endchoice
config VARIANT_DIR
string
default "mal10"
config CARRIER_DIR
string
default "t10-tni" if BOARD_KONTRON_T10_TNI
config MAINBOARD_PART_NUMBER
string
default "COMe-mAL10"
config DEVICETREE
string
default "variants/$(CONFIG_VARIANT_DIR)/devicetree.cb"
config OVERRIDE_DEVICETREE
string
default "carriers/$(CONFIG_CARRIER_DIR)/overridetree.cb"
endif

View File

@ -0,0 +1,2 @@
config BOARD_KONTRON_COME_MAL10
bool "COMe-mAL10"

View File

@ -0,0 +1,9 @@
bootblock-y += bootblock.c
ramstage-y += ramstage.c
ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += variants/$(VARIANT_DIR)/gma-mainboard.ads
subdirs-y += variants/$(VARIANT_DIR)
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include
subdirs-y += carriers/$(CARRIER_DIR)
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/carriers/$(CARRIER_DIR)/include

View File

@ -0,0 +1,31 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#define DPTF_CPU_PASSIVE 90
#define DPTF_CPU_CRITICAL 105
Name (DTRT, Package () {
/* CPU Throttle Effect on CPU */
Package () { \_SB.PCI0.TCPU, \_SB.PCI0.TCPU, 100, 100, 0, 0, 0, 0 },
})
Name (MPPC, Package ()
{
0x2, /* Revision */
Package () { /* Power Limit 1 */
0, /* PowerLimitIndex, 0 for Power Limit 1 */
3000, /* PowerLimitMinimum */
10000, /* PowerLimitMaximum */
1000, /* TimeWindowMinimum */
1000, /* TimeWindowMaximum */
200 /* StepSize */
},
Package () { /* Power Limit 2 */
1, /* PowerLimitIndex, 1 for Power Limit 2 */
10000, /* PowerLimitMinimum */
15000, /* PowerLimitMaximum */
1000, /* TimeWindowMinimum */
1000, /* TimeWindowMaximum */
1000 /* StepSize */
}
})

View File

@ -0,0 +1,6 @@
Vendor name: Kontron
Category: mini
ROM protocol: SPI
ROM socketed: n
Flashrom support: y
Release year: 2019

View File

@ -0,0 +1,26 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <bootblock_common.h>
#include <intelblocks/lpc_lib.h>
#include <ec/kontron/kempld/kempld.h>
#include <variant/gpio.h>
static void init_cpld(void)
{
/* Set up LPC decoding for CPLD I/O port ranges */
lpc_open_pmio_window(0x0A80, 2);
/* Enable console serial ports */
lpc_io_setup_comm_a_b();
kempld_enable_uart_for_console();
}
void bootblock_mainboard_early_init(void)
{
variant_early_gpio_configure();
init_cpld();
}
void bootblock_mainboard_init(void)
{
}

View File

@ -0,0 +1 @@
ramstage-y += gpio.c

View File

@ -0,0 +1,8 @@
Vendor name: Kontron
Board name: COMe-Ref-Carrier-i-T10-TNI
Board URL: https://www.kontron.com/products/boards-and-standard-form-factors/com-express/starterkits-and-evaluation-boards/come-ref.carrier-i-t10-tni.html
Category: mini
ROM protocol: SPI
ROM socketed: n
Flashrom support: y
Release year: 2019

View File

@ -0,0 +1,267 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include "include/carrier/gpio.h"
static const struct pad_config gpio_table[] = {
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_0, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_1, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_2, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_3, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_4, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_5, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_6, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_7, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_8, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_9, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_10, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_11, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_12, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_13, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_14, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_BIDIRECT(GPIO_15, 0, DN_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_BIDIRECT(GPIO_16, 1, UP_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_BIDIRECT(GPIO_17, 1, UP_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPI_TRIG_OWN(GPIO_18, UP_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_19, UP_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_20, DN_20K, DEEP, OFF, TxDRxE, DRIVER),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_21, UP_20K, DEEP, OFF, TxDRxE, DRIVER),
/* GPIO_22 - GPIO (DW0: 0x44800102, DW1: 0x00024100) */
/* PAD_CFG_GPI_TRIG_IOS_OWN(GPIO_22, NONE, DEEP, OFF, TxDRxE, DISPUPD, DRIVER), */
/* NEED TO IGNORE: PAD_RX_POL(INVERT) */
_PAD_CFG_STRUCT(GPIO_22,
PAD_RESET(DEEP) | PAD_TRIG(OFF) | PAD_RX_POL(INVERT) | PAD_BUF(TX_DISABLE),
PAD_IOSSTATE(TxDRxE) | PAD_IOSTERM(DISPUPD) | PAD_CFG_OWN_GPIO(DRIVER)),
/* GPIO_23 - GPIO (DW0: 0x44800102, DW1: 0x00024100) */
/* PAD_CFG_GPI_TRIG_IOS_OWN(GPIO_23, NONE, DEEP, OFF, TxDRxE, DISPUPD, DRIVER), */
/* NEED TO IGNORE : PAD_RX_POL(INVERT) */
_PAD_CFG_STRUCT(GPIO_23,
PAD_RESET(DEEP) | PAD_TRIG(OFF) | PAD_RX_POL(INVERT) | PAD_BUF(TX_DISABLE),
PAD_IOSSTATE(TxDRxE) | PAD_IOSTERM(DISPUPD) | PAD_CFG_OWN_GPIO(DRIVER)),
/* GPIO_24 - GPIO (DW0: 0x40800102, DW1: 0x00027100) */
/* PAD_CFG_GPI_TRIG_IOS_OWN(GPIO_24, UP_20K, DEEP, LEVEL, TxDRxE, DISPUPD, ACPI), */
/* NEED TO IGNORE: PAD_RX_POL(INVERT) */
_PAD_CFG_STRUCT(GPIO_24,
PAD_RESET(DEEP) | PAD_RX_POL(INVERT) | PAD_BUF(TX_DISABLE),
PAD_PULL(UP_20K) | PAD_IOSSTATE(TxDRxE) | PAD_IOSTERM(DISPUPD)),
PAD_CFG_GPI_SCI_IOS(GPIO_25, UP_20K, DEEP, LEVEL, INVERT, TxDRxE, DISPUPD),
PAD_CFG_NF(GPIO_26, NATIVE, DEEP, NF5),
PAD_CFG_GPI_SCI_IOS(GPIO_27, NONE, DEEP, EDGE_SINGLE, INVERT, TxDRxE, DISPUPD),
PAD_CFG_GPIO_BIDIRECT(GPIO_28, 0, DN_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_BIDIRECT(GPIO_29, 0, DN_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_30, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_31, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_BIDIRECT(GPIO_32, 1, DN_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_33, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_34, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_35, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_36, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_37, DN_20K, DEEP, HIZCRx0, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_38, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_39, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_40, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_41, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_NF(GPIO_42, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_43, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_44, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_45, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_46, UP_20K, DEEP, NF1),
PAD_CFG_NF(GPIO_47, UP_20K, DEEP, NF1),
PAD_CFG_NF(GPIO_48, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_49, NATIVE, DEEP, NF1),
PAD_CFG_GPIO_BIDIRECT(GPIO_62, 1, DN_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_BIDIRECT_IOS(GPIO_63, 0, UP_20K, DEEP, OFF, TxLASTRxE, ENPU, DRIVER),
PAD_CFG_GPIO_BIDIRECT(GPIO_64, 0, DN_20K, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_BIDIRECT(GPIO_65, 0, NONE, DEEP, OFF, DRIVER),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_66, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_67, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_68, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_69, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_70, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_71, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_72, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_73, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_NF(TCK, DN_20K, DEEP, NF1),
PAD_CFG_NF(TRST_B, DN_20K, DEEP, NF1),
PAD_CFG_NF(TMS, UP_20K, DEEP, NF1),
PAD_CFG_NF(TDI, UP_20K, DEEP, NF1),
PAD_CFG_NF(CX_PMODE, NONE, DEEP, NF1),
PAD_CFG_NF(CX_PREQ_B, UP_20K, DEEP, NF1),
PAD_CFG_NF(JTAGX, UP_20K, DEEP, NF1),
PAD_CFG_NF(CX_PRDY_B, UP_20K, DEEP, NF1),
PAD_CFG_NF(TDO, UP_20K, DEEP, NF1),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(CNV_BRI_DT, DN_20K, DEEP, OFF, IGNORE, DRIVER),
PAD_CFG_TERM_GPO(CNV_BRI_RSP, 1, UP_20K, DEEP),
PAD_CFG_TERM_GPO(CNV_RGI_DT, 0, UP_20K, DEEP),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_187, NATIVE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_188, NATIVE, DEEP, NF1),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_189, UP_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_190, UP_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_191, UP_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_192, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_193, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_194, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_195, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_196, NATIVE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_197, NATIVE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_198, NATIVE, DEEP, NF1),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_199, UP_20K, DEEP, IGNORE, SAME),
PAD_CFG_NF(GPIO_200, DN_20K, DEEP, NF1),
PAD_CFG_NF(GPIO_201, DN_20K, DEEP, NF1),
PAD_CFG_NF(GPIO_202, DN_20K, DEEP, NF1),
PAD_CFG_NF(GPIO_203, UP_20K, DEEP, NF1),
PAD_CFG_NF(GPIO_204, UP_20K, DEEP, NF1),
PAD_CFG_NF(PMC_SPI_FS0, UP_20K, DEEP, NF1),
PAD_CFG_NF(PMC_SPI_FS1, UP_20K, DEEP, NF1),
PAD_CFG_NF(PMC_SPI_FS2, UP_20K, DEEP, NF1),
PAD_CFG_NF(PMC_SPI_RXD, DN_20K, DEEP, NF1),
PAD_CFG_NF(PMC_SPI_TXD, DN_20K, DEEP, NF1),
PAD_CFG_NF(PMC_SPI_CLK, DN_20K, DEEP, NF1),
PAD_CFG_NF(PMIC_PWRGOOD, NONE, DEEP, NF1),
PAD_CFG_NF(PMIC_RESET_B, NONE, DEEP, NF1),
PAD_CFG_NF(GPIO_213, NONE, DEEP, NF1),
PAD_CFG_NF(GPIO_214, DN_20K, DEEP, NF1),
PAD_CFG_NF(GPIO_215, DN_20K, DEEP, NF1),
PAD_CFG_NF(PMIC_THERMTRIP_B, UP_20K, DEEP, NF1),
PAD_CFG_NF(PMIC_STDBY, DN_20K, DEEP, NF1),
PAD_CFG_NF(PROCHOT_B, UP_20K, DEEP, NF1),
PAD_CFG_NF(PMIC_I2C_SCL, UP_1K, DEEP, NF1),
PAD_CFG_NF(PMIC_I2C_SDA, UP_1K, DEEP, NF1),
PAD_CFG_GPIO_HI_Z(GPIO_74, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_75, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_76, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_77, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_78, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_79, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_80, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_81, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_82, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_83, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_NF(GPIO_84, DN_20K, DEEP, NF2),
PAD_CFG_GPIO_HI_Z(GPIO_85, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_86, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_87, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_88, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_89, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_90, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_91, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_92, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_NF(GPIO_97, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_98, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_99, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_100, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_101, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_102, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_103, NATIVE, DEEP, NF1),
PAD_CFG_NF(FST_SPI_CLK_FB, NATIVE, DEEP, NF1),
PAD_CFG_GPIO_HI_Z(GPIO_104, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_105, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_106, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_109, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_110, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_111, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_112, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_113, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_116, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_117, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_118, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_119, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_120, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_121, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_122, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_HI_Z(GPIO_123, DN_20K, DEEP, TxLASTRxE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_124, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_125, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_126, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_127, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_128, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_129, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_130, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_131, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_132, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_133, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_134, UP_20K, DEEP, OFF, IGNORE, DRIVER),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_135, UP_20K, DEEP, OFF, IGNORE, DRIVER),
PAD_CFG_GPI_SCI_IOS(GPIO_136, UP_20K, DEEP, EDGE_SINGLE, INVERT, TxDRxE, SAME),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_137, UP_20K, DEEP, OFF, IGNORE, DRIVER),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_138, UP_20K, DEEP, OFF, IGNORE, DRIVER),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_139, UP_20K, DEEP, OFF, IGNORE, DRIVER),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_146, DN_20K, DEEP, NF3),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_147, DN_20K, DEEP, NF3),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_148, DN_20K, DEEP, NF3),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_149, DN_20K, DEEP, NF3),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_150, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_151, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_152, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_153, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_154, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_155, DN_20K, DEEP, NF2),
PAD_CFG_NF(GPIO_209, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_210, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_211, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_212, NATIVE, DEEP, NF1),
PAD_CFG_GPIO_DRIVER_HI_Z(OSC_CLK_OUT_0, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(OSC_CLK_OUT_1, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(OSC_CLK_OUT_2, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(OSC_CLK_OUT_3, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(OSC_CLK_OUT_4, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_AC_PRESENT, DN_20K, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_BATLOW_B, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_PLTRST_B, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_PWRBTN_B, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_RESETBUTTON_B, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_SLP_S0_B, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_SLP_S3_B, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_SLP_S4_B, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(PMU_SUSCLK, NONE, DEEP, NF1),
PAD_CFG_GPO_IOSSTATE_IOSTERM(PMU_WAKE_B, 0, DEEP, UP_20K, IGNORE, SAME),
PAD_CFG_NF_IOSTANDBY_IGNORE(SUS_STAT_B, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(SUSPWRDNACK, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_205, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_206, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_207, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(GPIO_208, NONE, DEEP, NF1),
PAD_CFG_NF_IOSSTATE(GPIO_156, DN_20K, DEEP, NF1, Tx0RxDCRx0),
PAD_CFG_NF_IOSSTATE(GPIO_157, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_158, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_159, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_160, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_161, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_162, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_163, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_164, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_165, UP_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_166, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_167, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_168, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_169, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_170, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_GPIO_DRIVER_HI_Z(GPIO_171, DN_20K, DEEP, IGNORE, SAME),
PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_172, DN_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF(GPIO_179, DN_20K, DEEP, NF1),
PAD_CFG_NF_IOSSTATE(GPIO_173, DN_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_174, DN_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_175, DN_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF_IOSSTATE(GPIO_176, DN_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_GPI_TRIG_IOSSTATE_OWN(GPIO_177, UP_20K, DEEP, EDGE_BOTH, TxDRxE, DRIVER),
PAD_CFG_NF_IOSSTATE(GPIO_178, DN_20K, DEEP, NF1, HIZCRx1),
PAD_CFG_NF(GPIO_186, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSSTATE(GPIO_182, DN_20K, DEEP, NF1, HIZCRx0),
PAD_CFG_TERM_GPO(GPIO_183, 1, DN_20K, DEEP),
PAD_CFG_NF_IOSTANDBY_IGNORE(SMB_ALERTB, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(SMB_CLK, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(SMB_DATA, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(LPC_ILB_SERIRQ, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_CLKOUT0, NONE, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_CLKOUT1, NONE, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD0, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD1, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD2, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD3, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_CLKRUNB, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_FRAMEB, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
};
void carrier_gpio_configure(void)
{
gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
}

View File

@ -0,0 +1,32 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef T10_TNI_CFG_GPIO_H
#define T10_TNI_CFG_GPIO_H
#include <gpio.h>
#include <stddef.h>
/*
* Bidirectional GPIO port when both RX and TX buffer is enabled
* TODO: move this macros to src/soc/intel/common/block/include/intelblocks/gpio_defs.h
*/
#ifndef PAD_CFG_GPIO_BIDIRECT_IOS
#define PAD_CFG_GPIO_BIDIRECT_IOS(pad, val, pull, rst, trig, iosstate, iosterm, own) \
_PAD_CFG_STRUCT(pad, \
PAD_FUNC(GPIO) | PAD_RESET(rst) | PAD_TRIG(trig) | \
PAD_BUF(NO_DISABLE) | val, \
PAD_PULL(pull) | PAD_CFG_OWN_GPIO(own) | \
PAD_IOSSTATE(iosstate) | PAD_IOSTERM(iosterm))
#endif
#ifndef PAD_CFG_GPIO_BIDIRECT
#define PAD_CFG_GPIO_BIDIRECT(pad, val, pull, rst, trig, own) \
_PAD_CFG_STRUCT(pad, \
PAD_FUNC(GPIO) | PAD_RESET(rst) | PAD_TRIG(trig) | \
PAD_BUF(NO_DISABLE) | val, \
PAD_PULL(pull) | PAD_CFG_OWN_GPIO(own))
#endif
void carrier_gpio_configure(void);
#endif /* T10_TNI_CFG_GPIO_H */

View File

@ -0,0 +1,42 @@
# SPDX-License-Identifier: GPL-2.0-only
chip soc/intel/apollolake
device cpu_cluster 0 on
device lapic 0 on end
end
# Override USB port configuration
register "usb_config_override" = "1"
# USB 2.0
register "usb2_port[0]" = "PORT_EN(OC1)"
register "usb2_port[1]" = "PORT_EN(OC1)"
register "usb2_port[2]" = "PORT_EN(OC1)"
register "usb2_port[3]" = "PORT_EN(OC1)"
register "usb2_port[4]" = "PORT_EN(OC1)"
register "usb2_port[5]" = "PORT_EN(OC1)"
register "usb2_port[6]" = "PORT_EN(OC_SKIP)"
register "usb2_port[7]" = "PORT_EN(OC_SKIP)"
# USB 3.0
register "usb3_port[0]" = "PORT_EN(OC0)"
register "usb3_port[1]" = "PORT_EN(OC0)"
device domain 0 on
device pci 0e.0 off end # TODO: Audio
device pci 13.0 on # PCIe-A 1 (Root Port 2)
register "pcie_rp_clkreq_pin[2]" = "0"
end
device pci 13.1 on # PCIe-A 2 (Root Port 3)
register "pcie_rp_clkreq_pin[3]" = "0"
end
device pci 13.2 on # PCIe-A 3 (Root Port 4)
register "pcie_rp_clkreq_pin[4]" = "0"
end
device pci 13.3 on # PCIe-A 4 (Root Port 5)
register "pcie_rp_clkreq_pin[5]" = "0"
end
device pci 14.0 on # PCIe-B 1 (Root Port 0)
register "pcie_rp_clkreq_pin[0]" = "1"
end
end
end

View File

@ -0,0 +1,6 @@
baud_rate = 115200
debug_level = Info
power_on_after_fail = Enable
boot_devices = (hd0,0);(hd1,0)
boot_default = 0xff
cmos_defaults_loaded = No

View File

@ -0,0 +1,55 @@
# -----------------------------------------------------------------
entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
# -----------------------------------------------------------------
# coreboot config options: console
395 4 e 3 debug_level
# -----------------------------------------------------------------
# coreboot config options: cpu
400 1 e 2 hyper_threading
# coreboot config options: pch
408 2 e 4 power_on_after_fail
# coreboot config options: mainboard
440 1 e 2 ethernet1
441 1 e 2 ethernet2
# payload config options
512 256 s 0 boot_devices
768 8 h 0 boot_default
776 1 e 1 cmos_defaults_loaded
# coreboot config options: check sums
984 16 h 0 check_sum
# -----------------------------------------------------------------
enumerations
#ID value text
1 0 No
1 1 Yes
2 0 Disable
2 1 Enable
3 1 Emergency
3 2 Alert
3 3 Critical
3 4 Error
3 5 Warning
3 6 Notice
3 7 Info
3 8 Debug
3 9 Spew
4 0 Disable
4 1 Enable
4 2 Keep
# -----------------------------------------------------------------
checksums
checksum 392 983 984

View File

@ -0,0 +1,29 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <acpi/acpi.h>
DefinitionBlock(
"dsdt.aml",
"DSDT",
ACPI_DSDT_REV_2,
OEM_ID,
ACPI_TABLE_CREATOR,
0x20110725 // OEM revision
)
{
#include <soc/intel/apollolake/acpi/globalnvs.asl>
#include <cpu/intel/common/acpi/cpu.asl>
#include <southbridge/intel/common/acpi/sleepstates.asl>
Scope (\_SB)
{
Device(PCI0)
{
#include <soc/intel/apollolake/acpi/northbridge.asl>
#include <soc/intel/apollolake/acpi/southbridge.asl>
}
#include "acpi/dptf.asl"
#include <soc/intel/apollolake/acpi/dptf.asl>
#include <soc/intel/common/acpi/dptf/dptf.asl>
}
}

View File

@ -0,0 +1,21 @@
FLASH 16M {
SI_DESC 0x1000
SI_BIOS 0xefe000 {
IFWI 0x2ff000
OBB 0xbff000 {
FMAP 0x1000
UNIFIED_MRC_CACHE 0x21000 {
RECOVERY_MRC_CACHE 0x10000
RW_MRC_CACHE 0x10000
RW_VAR_MRC_CACHE 0x1000
}
CONSOLE 0x20000
COREBOOT(CBFS)
BIOS_UNUSABLE 0x40000
}
}
SI_DEVICEEXT 0x101000 {
DEVICE_EXTENSION 0x100000
UNUSED_HOLE 0x1000
}
}

View File

@ -0,0 +1,47 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <soc/ramstage.h>
#include <carrier/gpio.h>
#include <stddef.h>
void mainboard_silicon_init_params(FSP_S_CONFIG *silconfig)
{
carrier_gpio_configure();
/*
* CPU Power Management Configuration correspond to the BIOS Setup menu settings
* in the AMI UEFI v112.
* TODO: move these FSP options to device tree
*/
silconfig->EnableCx = 1; /* Enable CPU power states */
silconfig->C1e = 1; /* enable Enhanced C-states */
/*
* Attention! Do not change PkgCStateLimit! This causes spikes in the power
* consumption of the SoC when the system comes out of power saving mode, and
* voltage sagging at the output of DC-DC converters on the COMe module. In the
* AMI BIOS Setup shows this parameter, but does not allow changing it.
*/
silconfig->PkgCStateLimit = 0; /* Max Pkg Cstate : PkgC0C1 */
silconfig->MaxCoreCState = 3; /* Max Core C-State : C6 */
silconfig->CStateAutoDemotion = 0; /* Disable C1 and C3 Auto-demotion */
silconfig->CStateUnDemotion = 0; /* Disable C1 and C3 Un-demotion */
silconfig->PkgCStateDemotion = 1; /* enable package Cstate demotion */
silconfig->PkgCStateUnDemotion = 1; /* enable package Cstate undemotion */
silconfig->PmSupport = 1; /* GT PM Support */
silconfig->EnableRenderStandby = 1; /* enable render standby */
silconfig->LPSS_S0ixEnable = 1; /* LPSS IOSF PMCTL S0ix Enable */
silconfig->InitS3Cpu = 1; /* initialize CPU during S3 resume */
/* Override High Precision Timer options */
silconfig->HpetBdfValid = 1;
silconfig->HpetBusNumber = 0xFA;
silconfig->HpetDeviceNumber = 0x0F;
silconfig->HpetFunctionNumber = 0;
/* Override APIC options */
silconfig->IoApicId = 1;
silconfig->IoApicBdfValid = 1;
silconfig->IoApicBusNumber = 0xFA;
silconfig->IoApicDeviceNumber = 0x1F;
silconfig->IoApicFunctionNumber = 0;
}

View File

@ -0,0 +1,28 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <string.h>
#include <soc/romstage.h>
#include <FspmUpd.h>
void mainboard_memory_init_params(FSPM_UPD *mupd)
{
mupd->FspmConfig.Package = 0;
mupd->FspmConfig.Profile = 0x19;
mupd->FspmConfig.MemoryDown = 0;
mupd->FspmConfig.DDR3LPageSize = 2;
mupd->FspmConfig.DualRankSupportEnable = 0;
mupd->FspmConfig.RmtMode = 0;
mupd->FspmConfig.MemorySizeLimit = 0;
mupd->FspmConfig.DIMM0SPDAddress = 0xA0;
mupd->FspmConfig.DIMM1SPDAddress = 0xA4;
mupd->FspmConfig.RmtCheckRun = 1;
mupd->FspmConfig.RmtMarginCheckScaleHighThreshold = 0;
mupd->FspmConfig.EnhancePort8xhDecoding = 1;
mupd->FspmConfig.MsgLevelMask = 0;
mupd->FspmConfig.MrcDataSaving = 0;
mupd->FspmConfig.MrcFastBoot = 1;
mupd->FspmConfig.PrimaryVideoAdaptor = 2;
}

View File

@ -0,0 +1 @@
bootblock-y += gpio.c

View File

@ -0,0 +1,8 @@
Vendor name: Kontron
Board name: COMe-mAL10
Board URL: https://www.kontron.com/products/iot/iot-industry-4.0/iot-ready-boards-and-modules/com-express/com-express-mini/come-mal10-e2-.html
Category: mini
ROM protocol: SPI
ROM socketed: n
Flashrom support: y
Release year: 2019

Binary file not shown.

View File

@ -0,0 +1,114 @@
# SPDX-License-Identifier: GPL-2.0-only
chip soc/intel/apollolake
register "enable_vtd" = "1"
register "dptf_enable" = "1"
device cpu_cluster 0 on
device lapic 0 on end
end
device domain 0 on
device pci 00.0 on end # Host Bridge
device pci 00.1 on end # DPTF
device pci 00.2 off end # NPK
device pci 02.0 on end # iGPU
device pci 03.0 off end # Iunit
device pci 0d.0 on end # P2SB
device pci 0d.1 on end # PMC
device pci 0d.2 on end # SPI
device pci 0d.3 on end # Shared SRAM
device pci 0e.0 on end # Audio
device pci 0f.0 on end # TXE
device pci 11.0 off end # ISH
device pci 12.0 on end # SATA
device pci 13.0 on # PCIe-A 1 (Root Port 2)
register "pcie_rp_clkreq_pin[2]" = "CLKREQ_DISABLED"
end
device pci 13.1 on # PCIe-A 2 (Root Port 3)
register "pcie_rp_clkreq_pin[3]" = "CLKREQ_DISABLED"
end
device pci 13.2 on # PCIe-A 3 (Root Port 4)
register "pcie_rp_clkreq_pin[4]" = "CLKREQ_DISABLED"
end
device pci 13.3 on # PCIe-A 4 (Root Port 5)
register "pcie_rp_clkreq_pin[5]" = "CLKREQ_DISABLED"
end
device pci 14.0 on # PCIe-B 1 (Root Port 0)
register "pcie_rp_clkreq_pin[0]" = "CLKREQ_DISABLED"
end
device pci 14.1 off # PCIe-B 2 (Root Port 1)
register "pcie_rp_clkreq_pin[1]" = "CLKREQ_DISABLED"
end
device pci 15.0 on end # XHCI
device pci 15.1 off end # XDCI
device pci 16.0 off end # I2C 0
device pci 16.1 off end # I2C 1
device pci 16.2 off end # I2C 2
device pci 16.3 off end # I2C 3
device pci 17.0 off end # I2C 4
device pci 17.1 off end # I2C 5
device pci 17.2 off end # I2C 6
device pci 17.3 off end # I2C 7
device pci 18.0 off end # HSUART 0
device pci 18.1 off end # HSUART 1
device pci 18.2 off end # UART 2
device pci 18.3 off end # UART 3
device pci 19.0 off end # SPI 0
device pci 19.1 off end # SPI 1
device pci 19.2 off end # SPI 2
device pci 1a.0 on end # PWM
device pci 1b.0 on end # SDCARD
device pci 1c.0 on end # eMMC
device pci 1d.0 off end # UFS
device pci 1e.0 off end # SDIO
device pci 1f.0 on # LPC
register "serirq_mode" = "SERIRQ_CONTINUOUS"
chip ec/kontron/kempld
device generic 0.0 on # UART #0
register "uart[0]" = "{ KEMPLD_UART_3F8, 4 }"
end
device generic 0.1 on # UART #1
register "uart[1]" = "{ KEMPLD_UART_2F8, 3 }"
end
device generic 1.0 on # I2C
register "i2c_frequency" = "KEMPLD_I2C_FREQ_FAST_MODE_400KHZ"
end
end
end # LPC
device pci 1f.1 on # SMBUS
chip drivers/i2c/nct7802y # Hardware Monitor
register "sensors" = "{ \
.local_enable = 1, \
.rtd[2] = RTD_VOLTAGE_MODE, \
.rtd[1] = RTD_VOLTAGE_MODE, \
.rtd[0] = RTD_THERMISTOR_MODE, \
}"
# FAN0
register "fan[0].mode" = "FAN_SMART"
register "fan[0].smart.mode" = "SMART_FAN_RPM"
register "fan[0].smart.tempsrc" = "TEMP_SOURCE_REMOTE_1"
register "fan[0].smart.table" = "{ { 49, 0 },
{ 50, 6350 },
{ 70, 9550 },
{ 90, 12750 } }"
register "fan[0].smart.critical_temp" = "95"
# FAN1
register "fan[1].mode" = "FAN_SMART"
register "fan[1].smart.mode" = "SMART_FAN_RPM"
register "fan[1].smart.tempsrc" = "TEMP_SOURCE_LOCAL"
register "fan[1].smart.table" = "{ { 49, 0 },
{ 50, 6350 },
{ 70, 9550 },
{ 90, 12750 } }"
register "fan[1].smart.critical_temp" = "95"
device i2c 0x2e on end
end
end # SMBUS
end
chip drivers/crb
# Resource allocation reserves memory.
# This is required for correct use of TPM
device mmio 0xfed40000 on end
end
end

View File

@ -0,0 +1,13 @@
-- SPDX-License-Identifier: GPL-2.0-or-later
with HW.GFX.GMA;
with HW.GFX.GMA.Display_Probing;
use HW.GFX.GMA;
use HW.GFX.GMA.Display_Probing;
private package GMA.Mainboard is
ports : constant Port_List := (DP1, eDP, others => Disabled);
end GMA.Mainboard;

View File

@ -0,0 +1,36 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include "include/variant/gpio.h"
static const struct pad_config gpio_table[] = {
/* SPI */
PAD_CFG_NF(GPIO_97, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_98, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_99, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_100, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_101, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_102, NATIVE, DEEP, NF1),
PAD_CFG_NF(GPIO_103, NATIVE, DEEP, NF1),
PAD_CFG_NF(FST_SPI_CLK_FB, NATIVE, DEEP, NF1),
/* SMBUS */
PAD_CFG_NF_IOSTANDBY_IGNORE(SMB_ALERTB, NONE, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(SMB_CLK, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSTANDBY_IGNORE(SMB_DATA, UP_20K, DEEP, NF1),
/* LPC */
PAD_CFG_NF_IOSTANDBY_IGNORE(LPC_ILB_SERIRQ, UP_20K, DEEP, NF1),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_CLKOUT0, NONE, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_CLKOUT1, NONE, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD0, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD1, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD2, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_AD3, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_CLKRUNB, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
PAD_CFG_NF_IOSSTATE_IOSTERM(LPC_FRAMEB, UP_20K, DEEP, NF1, HIZCRx1, DISPUPD),
};
void variant_early_gpio_configure(void)
{
gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
}

View File

@ -0,0 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef MAL_10_CFG_GPIO_H
#define MAL_10_CFG_GPIO_H
#include <gpio.h>
#include <stddef.h>
void variant_early_gpio_configure(void);
#endif /* MAL_10_CFG_GPIO_H */