From a7437ca3409eef0a906986da55cf43d6f61a1f08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kope=C4=87?= Date: Tue, 4 Jun 2024 12:12:55 +0200 Subject: [PATCH] soc/intel/common/block/cse: allow CSE telemetry on non-lite CSE SKU MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CSE MKHI_BUP_COMMON_GET_BOOT_PERF_DATA command is also implemented in non-Lite CSE SKUs. Original CL [1] adding this feature also says that, but at that point the feature was validated for CSE Lite only. Move cse_get_boot_performance_data() to shared blk/cse/telemetry.c to have it compile for mainboards without CSE Lite. TEST=Boot NovaCustom V540TU (MTL-P / ME Consumer) with SOC_INTEL_CSE_PRE_CPU_RESET_TELEMETRY_V2 selected and check `cbmem -t`: 990:CSME ROM started execution 0 944:CSE sent 'Boot Stall Done' to PMC 34,000 945:CSE started to handle ICC configuration 172,000 (138,000) 946:CSE sent 'Host BIOS Prep Done' to PMC 172,000 (0) 947:CSE received 'CPU Reset Done Ack sent' from PMC 314,000 (142,000) 991:Die Management Unit (DMU) load completed 360,000 (46,000) 0:1st timestamp 385,844 (25,844) 11:start of bootblock 398,796 (12,952) 12:end of bootblock 402,099 (3,302) [...] [1]: https://review.coreboot.org/c/coreboot/+/59507 Change-Id: I3a5b1abd282af9af33cef2371719df4133684a2e Signed-off-by: Michał Kopeć Reviewed-on: https://review.coreboot.org/c/coreboot/+/82898 Tested-by: build bot (Jenkins) Reviewed-by: Subrata Banik Reviewed-by: Krystian Hebel --- src/soc/intel/common/block/cse/Kconfig | 2 +- src/soc/intel/common/block/cse/cse_lite.c | 29 --------------------- src/soc/intel/common/block/cse/telemetry.c | 30 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/src/soc/intel/common/block/cse/Kconfig b/src/soc/intel/common/block/cse/Kconfig index 0b518c3b8d..657494a03a 100644 --- a/src/soc/intel/common/block/cse/Kconfig +++ b/src/soc/intel/common/block/cse/Kconfig @@ -294,7 +294,7 @@ config SOC_INTEL_CSE_LITE_COMPRESS_ME_RW config SOC_INTEL_CSE_PRE_CPU_RESET_TELEMETRY def_bool n - depends on SOC_INTEL_CSE_LITE_SKU && !SOC_INTEL_CSE_LITE_SYNC_BY_PAYLOAD + depends on !SOC_INTEL_CSE_LITE_SYNC_BY_PAYLOAD help Mainboard user to select this Kconfig in order to capture pre-cpu reset boot performance telemetry data. diff --git a/src/soc/intel/common/block/cse/cse_lite.c b/src/soc/intel/common/block/cse/cse_lite.c index 09281ab150..76e0853637 100644 --- a/src/soc/intel/common/block/cse/cse_lite.c +++ b/src/soc/intel/common/block/cse/cse_lite.c @@ -60,35 +60,6 @@ void cse_log_ro_write_protection_info(bool mfg_mode) printk(BIOS_ERR, "ME: Write protection for CSE RO is not enabled\n"); } -enum cb_err cse_get_boot_performance_data(struct cse_boot_perf_rsp *boot_perf_rsp) -{ - struct cse_boot_perf_req { - struct mkhi_hdr hdr; - uint32_t reserved; - } __packed; - - struct cse_boot_perf_req req = { - .hdr.group_id = MKHI_GROUP_ID_BUP_COMMON, - .hdr.command = MKHI_BUP_COMMON_GET_BOOT_PERF_DATA, - .reserved = 0, - }; - - size_t resp_size = sizeof(struct cse_boot_perf_rsp); - - if (heci_send_receive(&req, sizeof(req), boot_perf_rsp, &resp_size, - HECI_MKHI_ADDR)) { - printk(BIOS_ERR, "cse_lite: Could not get boot performance data\n"); - return CB_ERR; - } - - if (boot_perf_rsp->hdr.result) { - printk(BIOS_ERR, "cse_lite: Get boot performance data resp failed: %d\n", - boot_perf_rsp->hdr.result); - return CB_ERR; - } - - return CB_SUCCESS; -} static const struct cse_bp_info *cse_get_bp_info_from_rsp(void) { diff --git a/src/soc/intel/common/block/cse/telemetry.c b/src/soc/intel/common/block/cse/telemetry.c index c1c70e5595..2c9fb54581 100644 --- a/src/soc/intel/common/block/cse/telemetry.c +++ b/src/soc/intel/common/block/cse/telemetry.c @@ -6,6 +6,36 @@ #define MSEC_TO_USEC(x) (x * 1000) +enum cb_err cse_get_boot_performance_data(struct cse_boot_perf_rsp *boot_perf_rsp) +{ + struct cse_boot_perf_req { + struct mkhi_hdr hdr; + uint32_t reserved; + } __packed; + + struct cse_boot_perf_req req = { + .hdr.group_id = MKHI_GROUP_ID_BUP_COMMON, + .hdr.command = MKHI_BUP_COMMON_GET_BOOT_PERF_DATA, + .reserved = 0, + }; + + size_t resp_size = sizeof(struct cse_boot_perf_rsp); + + if (heci_send_receive(&req, sizeof(req), boot_perf_rsp, &resp_size, + HECI_MKHI_ADDR)) { + printk(BIOS_ERR, "cse: Could not get boot performance data\n"); + return CB_ERR; + } + + if (boot_perf_rsp->hdr.result) { + printk(BIOS_ERR, "cse: Get boot performance data resp failed: %d\n", + boot_perf_rsp->hdr.result); + return CB_ERR; + } + + return CB_SUCCESS; +} + static void process_cse_telemetry_data(void) { struct cse_boot_perf_rsp cse_perf_data;