Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

firmware: stratix10-svc: extend svc to support RSU feature

Extend Intel Stratix10 service layer driver to support new RSU
DCMF status reporting.

The status of each DCMF is reported. The currently used DCMF is used as
reference, while the other three are compared against it to determine if
they are corrupted.

DCMF = Decision Configuration Management Firmware
RSU = Remote System Update

Signed-off-by: Radu Bacrau <radu.bacrau@intel.com>
Signed-off-by: Ang Tien Sung <tien.sung.ang@intel.com>
Signed-off-by: Kah Jing Lee <kah.jing.lee@intel.com>
Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
Link: https://lore.kernel.org/r/20220711223140.2307945-5-dinguyen@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Kah Jing Lee and committed by
Greg Kroah-Hartman
1b4394c5 4a6c8c56

+37 -8
+12 -8
drivers/firmware/stratix10-svc.c
··· 338 338 break; 339 339 case COMMAND_RSU_RETRY: 340 340 case COMMAND_RSU_MAX_RETRY: 341 + case COMMAND_RSU_DCMF_STATUS: 341 342 case COMMAND_FIRMWARE_VERSION: 342 343 cb_data->status = BIT(SVC_STATUS_OK); 343 344 cb_data->kaddr1 = &res.a1; ··· 519 518 a1 = (unsigned long)pdata->paddr; 520 519 a2 = (unsigned long)pdata->size; 521 520 break; 522 - 521 + case COMMAND_RSU_DCMF_STATUS: 522 + a0 = INTEL_SIP_SMC_RSU_DCMF_STATUS; 523 + a1 = 0; 524 + a2 = 0; 525 + break; 523 526 default: 524 527 pr_warn("it shouldn't happen\n"); 525 528 break; ··· 601 596 pr_err("%s: STATUS_ERROR\n", __func__); 602 597 cbdata->status = BIT(SVC_STATUS_ERROR); 603 598 cbdata->kaddr1 = &res.a1; 604 - cbdata->kaddr2 = NULL; 605 - cbdata->kaddr3 = NULL; 599 + cbdata->kaddr2 = (res.a2) ? 600 + svc_pa_to_va(res.a2) : NULL; 601 + cbdata->kaddr3 = (res.a3) ? &res.a3 : NULL; 606 602 pdata->chan->scl->receive_cb(pdata->chan->scl, cbdata); 607 603 break; 608 604 default: ··· 611 605 612 606 /* 613 607 * be compatible with older version firmware which 614 - * doesn't support RSU notify or retry 608 + * doesn't support newer RSU commands 615 609 */ 616 - if ((pdata->command == COMMAND_RSU_RETRY) || 617 - (pdata->command == COMMAND_RSU_MAX_RETRY) || 618 - (pdata->command == COMMAND_RSU_NOTIFY) || 619 - (pdata->command == COMMAND_FIRMWARE_VERSION)) { 610 + if ((pdata->command != COMMAND_RSU_UPDATE) && 611 + (pdata->command != COMMAND_RSU_STATUS)) { 620 612 cbdata->status = 621 613 BIT(SVC_STATUS_NO_SUPPORT); 622 614 cbdata->kaddr1 = NULL;
+21
include/linux/firmware/intel/stratix10-smc.h
··· 404 404 INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY) 405 405 406 406 /** 407 + * Request INTEL_SIP_SMC_RSU_DCMF_STATUS 408 + * 409 + * Sync call used by service driver at EL1 to query DCMF status from FW 410 + * 411 + * Call register usage: 412 + * a0 INTEL_SIP_SMC_RSU_DCMF_STATUS 413 + * a1-7 not used 414 + * 415 + * Return status 416 + * a0 INTEL_SIP_SMC_STATUS_OK 417 + * a1 dcmf3 | dcmf2 | dcmf1 | dcmf0 418 + * 419 + * Or 420 + * 421 + * a0 INTEL_SIP_SMC_RSU_ERROR 422 + */ 423 + #define INTEL_SIP_SMC_FUNCID_RSU_DCMF_STATUS 20 424 + #define INTEL_SIP_SMC_RSU_DCMF_STATUS \ 425 + INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_DCMF_STATUS) 426 + 427 + /** 407 428 * Request INTEL_SIP_SMC_SERVICE_COMPLETED 408 429 * Sync call to check if the secure world have completed service request 409 430 * or not.
+4
include/linux/firmware/intel/stratix10-svc-client.h
··· 114 114 * @COMMAND_FIRMWARE_VERSION: query running firmware version, return status 115 115 * is SVC_STATUS_OK or SVC_STATUS_ERROR 116 116 * 117 + * @COMMAND_RSU_DCMF_STATUS: query firmware for the DCMF status 118 + * return status is SVC_STATUS_OK or SVC_STATUS_ERROR 119 + * 117 120 * @COMMAND_FCS_REQUEST_SERVICE: request validation of image from firmware, 118 121 * return status is SVC_STATUS_OK, SVC_STATUS_INVALID_PARAM 119 122 * ··· 149 146 COMMAND_RSU_RETRY, 150 147 COMMAND_RSU_MAX_RETRY, 151 148 COMMAND_RSU_DCMF_VERSION, 149 + COMMAND_RSU_DCMF_STATUS, 152 150 COMMAND_FIRMWARE_VERSION, 153 151 /* for FCS */ 154 152 COMMAND_FCS_REQUEST_SERVICE = 20,