Jonathan Zhang has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/42947 )
Change subject: doc/mb/ocp: Add documentation for Delta Lake
......................................................................
doc/mb/ocp: Add documentation for Delta Lake
Add OCP platform Delta Lake documentation.
Signed-off-by: Jonathan Zhang <jonzhang(a)fb.com>
Change-Id: I9216c80023db071591c8d3add7c0f041e9e6b97e
---
A Documentation/mainboard/ocp/deltalake.md
1 file changed, 98 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/47/42947/1
diff --git a/Documentation/mainboard/ocp/deltalake.md b/Documentation/mainboard/ocp/deltalake.md
new file mode 100644
index 0000000..3af893a
--- /dev/null
+++ b/Documentation/mainboard/ocp/deltalake.md
@@ -0,0 +1,98 @@
+# OCP Delta Lake
+
+This page describes coreboot support status for the [OCP] (Open Compute Project)
+Delta Lake server platform.
+
+## Introduction
+
+OCP Delta Lake server platform is a component of multi-host server system
+Yosemite-V3. Both were announced by Facebook and Intel in [OCP virtual summit 2020].
+
+Delta Lake server is a one socket CooperLake Sacalable Processor server.
+
+Yosemite-V3 has multiple configurations. Depending on configurations, it may
+host up to 4 Delta Lake servers in one sled.
+
+Yosemite-V3 and Delta Lake are currently in DVT phase. Facebook, Intel and partners
+jointly develop FSP/coreboot/Linuxboot solution on Delta Lake as a hack project.
+
+## Required blobs
+
+This board currently requires:
+- FSP blob: The blob (Intel CooperLake Scalable Processor Firmware Support Package)
+ is not yet available to the public. It will be made public some time after the MP
+ of CooperLake Scalable Processor when the FSP is mature.
+- Microcode: Not yet available to the public.
+- ME binary: Not yet available to the public.
+
+## Payload
+- Linuxboot: This is necessary only if you use Linuxboot as coreboot payload.
+ U-root as initramfs, is used in the joint development. It can be built
+ following [All about u-root].
+
+## Flashing coreboot
+
+To do in-band FW image update, use [flashrom]:
+ flashrom -p internal:ich_spi_mode=hwseq -c "Opaque flash chip" --ifd \
+ -i bios --noverify-all -w <path to coreboot image>
+
+From OpenBMC, to update FW image:
+ fw-util slotx --update bios <path to coreboot image>
+
+To power off/on the host:
+ power-util slotx off
+ power-util slotx on
+
+To connect to console through SOL (Serial Over Lan):
+ sol-util slotx
+
+## Working features
+The solution is developed using Linuxboot payload. The Linuxboot
+kernel versions tried is 5.2.9. The initramfs image is u-root.
+- Most SMBIOS types
+- BMC integration:
+ - BMC readiness check
+ - IPMI commands
+ - watchdog timer
+ - POST complete pin acknowledgement
+- SEL record generation
+- Early serial output
+- port 80h direct to GPIO
+- ACPI tables: APIC/DSDT/FACP/FACS/HPET/MCFG/SPMI/SRAT/SLIT/SSDT
+- Skipping memory training upon subsequent reboots
+- BMC crash dump
+- Error injection through ITP
+
+## Firmware configurations
+[ChromeOS VPD] is used to store most of firmware configurations. RO_VPD
+holds default values, while RW_VPD holds customized values.
+
+VPD variables supported are:
+- firmware_version: This variable holds overall firmware version. coreboot
+ uses its value to populate smbios type 1 version field.
+
+## Known issues / feature gaps
+- Even though CPX-SP FSP is based on FSP 2.2 framework, it does not
+ support FSP_USES_CB_STACK. An IPS ticket is filed with Intel.
+- VT-d is not supported. An IPS ticket is filed with Intel.
+- PCIe bifuration is not supported. An IPS ticket is filed with Intel.
+- SMBIOS type 7 and type 17 are not populated.
+- ME based power capping.
+
+## Technology
+
+```eval_rst
++------------------------+---------------------------------------------+
+| Processor (1 socket) | Intel CooperLake Scalable Processor |
++------------------------+---------------------------------------------+
+| BMC | Aspeed AST 2500 |
++------------------------+---------------------------------------------+
+| PCH | Intel Lewisburg C621 |
++------------------------+---------------------------------------------+
+```
+
+[OCP]: https://www.opencompute.org
+[OCP virtual summit 2020]: https://www.opencompute.org/summit/virtual-summit/schedule
+[flashrom]: https://flashrom.org/Flashrom
+[All about u-root]: https://github.com/linuxboot/book/tree/master/u-root
+[ChromeOS VPD]: https://chromium.googlesource.com/chromiumos/platform/vpd/+/master/README.md
--
To view, visit https://review.coreboot.org/c/coreboot/+/42947
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I9216c80023db071591c8d3add7c0f041e9e6b97e
Gerrit-Change-Number: 42947
Gerrit-PatchSet: 1
Gerrit-Owner: Jonathan Zhang <jonzhang(a)fb.com>
Gerrit-MessageType: newchange
Johnny Lin has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/40234 )
Change subject: drivers/ipmi: Add IPMI KCS support in romstage
......................................................................
drivers/ipmi: Add IPMI KCS support in romstage
It's necessary to run IPMI commands in romstage for writing error SEL
such as memory initialization error SEL, and also for other usages
such as starting FRB2 timer, OEM commands, etc.
Change-Id: Ie3198965670454b123e570f9056673fdf515f52b
Signed-off-by: Johnny Lin <johnny_lin(a)wiwynn.com>
---
M src/drivers/ipmi/Kconfig
M src/drivers/ipmi/Makefile.inc
M src/drivers/ipmi/ipmi_kcs.h
A src/drivers/ipmi/ipmi_kcs_ops_premem.c
4 files changed, 129 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/34/40234/1
diff --git a/src/drivers/ipmi/Kconfig b/src/drivers/ipmi/Kconfig
index 37cfc0d..0304cb0 100644
--- a/src/drivers/ipmi/Kconfig
+++ b/src/drivers/ipmi/Kconfig
@@ -18,3 +18,10 @@
IPMB messages are limited to 32-bytes total. When the
data size is larger than this value, IPMI can complete
reading/writing the data over multiple commands.
+
+config IPMI_KCS_ROMSTAGE
+ bool
+ default n
+ depends on IPMI_KCS
+ help
+ IPMI KCS support in romstage.
diff --git a/src/drivers/ipmi/Makefile.inc b/src/drivers/ipmi/Makefile.inc
index 973fff8..06a3433 100644
--- a/src/drivers/ipmi/Makefile.inc
+++ b/src/drivers/ipmi/Makefile.inc
@@ -2,3 +2,6 @@
ramstage-$(CONFIG_IPMI_KCS) += ipmi_kcs_ops.c
ramstage-$(CONFIG_IPMI_KCS) += ipmi_ops.c
ramstage-$(CONFIG_IPMI_KCS) += ipmi_fru.c
+romstage-$(CONFIG_IPMI_KCS_ROMSTAGE) += ipmi_kcs_ops_premem.c
+romstage-$(CONFIG_IPMI_KCS_ROMSTAGE) += ipmi_kcs.c
+romstage-$(CONFIG_IPMI_KCS_ROMSTAGE) += ipmi_ops.c
diff --git a/src/drivers/ipmi/ipmi_kcs.h b/src/drivers/ipmi/ipmi_kcs.h
index 9a04377..5de77ed 100644
--- a/src/drivers/ipmi/ipmi_kcs.h
+++ b/src/drivers/ipmi/ipmi_kcs.h
@@ -40,6 +40,9 @@
const unsigned char *inmsg, int inlen,
unsigned char *outmsg, int outlen);
+/* Run basic IPMI init functions in romstage from the provided PnP device */
+void ipmi_kcs_premem_init(const u16 port, const u16 device);
+
struct ipmi_rsp {
uint8_t lun;
uint8_t cmd;
diff --git a/src/drivers/ipmi/ipmi_kcs_ops_premem.c b/src/drivers/ipmi/ipmi_kcs_ops_premem.c
new file mode 100644
index 0000000..e601041
--- /dev/null
+++ b/src/drivers/ipmi/ipmi_kcs_ops_premem.c
@@ -0,0 +1,116 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <console/console.h>
+
+#include <device/pnp.h>
+#include <delay.h>
+#include <timer.h>
+#include "ipmi_kcs.h"
+#include "chip.h"
+
+static int ipmi_get_bmc_self_test_result(const struct device *dev,
+ struct ipmi_selftest_rsp *rsp)
+{
+ int ret;
+
+ ret = ipmi_kcs_message(dev->path.pnp.port, IPMI_NETFN_APPLICATION, 0,
+ IPMI_BMC_GET_SELFTEST_RESULTS, NULL, 0, (u8 *)rsp,
+ sizeof(*rsp));
+
+ if (ret < sizeof(struct ipmi_rsp) || rsp->resp.completion_code) {
+ printk(BIOS_ERR, "IPMI: %s command failed (ret=%d resp=0x%x)\n",
+ __func__, ret, rsp->resp.completion_code);
+ return 1;
+ }
+ if (ret != sizeof(*rsp)) {
+ printk(BIOS_ERR, "IPMI: %s response truncated\n", __func__);
+ return 1;
+ }
+
+ return 0;
+}
+
+void ipmi_kcs_premem_init(const u16 port, const u16 device)
+{
+ const struct drivers_ipmi_config *conf = NULL;
+ struct ipmi_selftest_rsp selftestrsp;
+ uint8_t retry_count;
+ const struct device *dev;
+
+ /* Find IPMI pnp device from devicetree in romstage */
+ dev = dev_find_slot_pnp(port, device);
+
+ if (!dev) {
+ printk(BIOS_ERR, "IPMI: Cannot find pnp device port: %x, device %x\n",
+ port, device);
+ return;
+ }
+ if (!dev->enabled)
+ return;
+
+ printk(BIOS_DEBUG, "IPMI: romstage PNP KCS 0x%x\n", dev->path.pnp.port);
+ if (dev->chip_info)
+ conf = dev->chip_info;
+
+ if (conf && conf->wait_for_bmc && conf->bmc_boot_timeout) {
+ struct stopwatch sw;
+ stopwatch_init_msecs_expire(&sw, conf->bmc_boot_timeout * 1000);
+ printk(BIOS_INFO, "IPMI: Waiting for BMC...\n");
+
+ while (!stopwatch_expired(&sw)) {
+ if (inb(dev->path.pnp.port) != 0xff)
+ break;
+ mdelay(100);
+ }
+ if (stopwatch_expired(&sw)) {
+ printk(BIOS_INFO, "IPMI: Waiting for BMC timed out\n");
+ return;
+ }
+ }
+
+ printk(BIOS_INFO, "Get BMC self test result...");
+ for (retry_count = 0; retry_count < conf->bmc_boot_timeout; retry_count++) {
+ if (!ipmi_get_bmc_self_test_result(dev, &selftestrsp))
+ break;
+
+ mdelay(1000);
+ }
+
+ switch (selftestrsp.result) {
+ case IPMI_APP_SELFTEST_NO_ERROR: /* 0x55 */
+ printk(BIOS_DEBUG, "No Error\n");
+ break;
+ case IPMI_APP_SELFTEST_NOT_IMPLEMENTED: /* 0x56 */
+ printk(BIOS_DEBUG, "Function Not Implemented\n");
+ break;
+ case IPMI_APP_SELFTEST_ERROR: /* 0x57 */
+ printk(BIOS_ERR, "BMC: Corrupted or inaccessible data or device\n");
+ /* Don't write tables if communication failed */
+ break;
+ case IPMI_APP_SELFTEST_FATAL_HW_ERROR: /* 0x58 */
+ printk(BIOS_ERR, "BMC: Fatal Hardware Error\n");
+ /* Don't write tables if communication failed */
+ break;
+ case IPMI_APP_SELFTEST_RESERVED: /* 0xFF */
+ printk(BIOS_DEBUG, "Reserved\n");
+ break;
+
+ default: /* Other Device Specific Hardware Error */
+ printk(BIOS_ERR, "BMC: Device Specific Error\n");
+ /* Don't write tables if communication failed */
+ break;
+ }
+
+}
--
To view, visit https://review.coreboot.org/c/coreboot/+/40234
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Ie3198965670454b123e570f9056673fdf515f52b
Gerrit-Change-Number: 40234
Gerrit-PatchSet: 1
Gerrit-Owner: Johnny Lin
Gerrit-MessageType: newchange
Jamie Ryu has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/42282 )
Change subject: soc/intel/tgl: Disable hybrid storage mode in recovery mode
......................................................................
soc/intel/tgl: Disable hybrid storage mode in recovery mode
This is WA to initialize NVME with CSE Lite in recovery mode.
CSME Lite does not support hybrid storage dynamic configuration in RO.
Hence, hybrid storage mode is disabled in recovery mode for CSME Lite
until the functionality is supported by CSE Lite RO.
BUG=b:158643194
TEST=boot and verified with tglrvp and volteer in recovery mode
Cq-Depend: chrome-internal:3100721
Signed-off-by: Jamie Ryu <jamie.m.ryu(a)intel.com>
Change-Id: I5397cfc007069debe3701bf1e38e81bd17a29f0c
---
M src/soc/intel/tigerlake/fsp_params.c
1 file changed, 12 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/82/42282/1
diff --git a/src/soc/intel/tigerlake/fsp_params.c b/src/soc/intel/tigerlake/fsp_params.c
old mode 100644
new mode 100755
index 926d8eb..e931a22
--- a/src/soc/intel/tigerlake/fsp_params.c
+++ b/src/soc/intel/tigerlake/fsp_params.c
@@ -10,6 +10,7 @@
#include <intelblocks/lpss.h>
#include <intelblocks/xdci.h>
#include <intelpch/lockdown.h>
+#include <security/vboot/vboot_common.h>
#include <soc/gpio_soc_defs.h>
#include <soc/intel/common/vbt.h>
#include <soc/pci_devs.h>
@@ -251,7 +252,17 @@
params->Enable8254ClockGatingOnS3 = !CONFIG_USE_LEGACY_8254_TIMER;
/* Enable Hybrid storage auto detection */
- params->HybridStorageMode = config->HybridStorageMode;
+ if (CONFIG(SOC_INTEL_CSE_LITE_SKU) && vboot_recovery_mode_enabled()) {
+ /*
+ * Since CSME Lite SKU does not support hybrid storage dynamic
+ * configuration in recovery boot mode, dynamic configuration is
+ * disabled as a temporary WA until the fix is available.
+ */
+ printk(BIOS_DEBUG, "cse_lite: recovery mode enabled\n");
+ params->HybridStorageMode = 0;
+ } else {
+ params->HybridStorageMode = config->HybridStorageMode;
+ }
/* USB4/TBT */
for (i = 0; i < ARRAY_SIZE(params->ITbtPcieRootPortEn); i++) {
--
To view, visit https://review.coreboot.org/c/coreboot/+/42282
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I5397cfc007069debe3701bf1e38e81bd17a29f0c
Gerrit-Change-Number: 42282
Gerrit-PatchSet: 1
Gerrit-Owner: Jamie Ryu <jamie.m.ryu(a)intel.com>
Gerrit-MessageType: newchange