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

firmware: stratix10-svc: extend svc to support new RSU features

Extend Intel Stratix10 service layer driver to support new RSU DCMF
versions and max retry parameter.

DCMF = Decision Configuration Management Firmware. The max retry parameter
is the maximum times the images is allowed to reload itself before giving
up and starting RSU failover flow.

Signed-off-by: Richard Gong <richard.gong@intel.com>
Link: https://lore.kernel.org/r/1592231348-31334-3-git-send-email-richard.gong@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Richard Gong and committed by
Greg Kroah-Hartman
bf0e5bf6 36847f9e

+68
+17
drivers/firmware/stratix10-svc.c
··· 305 305 cb_data->status = BIT(SVC_STATUS_COMPLETED); 306 306 break; 307 307 case COMMAND_RSU_RETRY: 308 + case COMMAND_RSU_MAX_RETRY: 308 309 cb_data->status = BIT(SVC_STATUS_OK); 309 310 cb_data->kaddr1 = &res.a1; 311 + break; 312 + case COMMAND_RSU_DCMF_VERSION: 313 + cb_data->status = BIT(SVC_STATUS_OK); 314 + cb_data->kaddr1 = &res.a1; 315 + cb_data->kaddr2 = &res.a2; 310 316 break; 311 317 default: 312 318 pr_warn("it shouldn't happen\n"); ··· 412 406 a1 = 0; 413 407 a2 = 0; 414 408 break; 409 + case COMMAND_RSU_MAX_RETRY: 410 + a0 = INTEL_SIP_SMC_RSU_MAX_RETRY; 411 + a1 = 0; 412 + a2 = 0; 413 + break; 414 + case COMMAND_RSU_DCMF_VERSION: 415 + a0 = INTEL_SIP_SMC_RSU_DCMF_VERSION; 416 + a1 = 0; 417 + a2 = 0; 418 + break; 415 419 default: 416 420 pr_warn("it shouldn't happen\n"); 417 421 break; ··· 490 474 * doesn't support RSU notify or retry 491 475 */ 492 476 if ((pdata->command == COMMAND_RSU_RETRY) || 477 + (pdata->command == COMMAND_RSU_MAX_RETRY) || 493 478 (pdata->command == COMMAND_RSU_NOTIFY)) { 494 479 cbdata->status = 495 480 BIT(SVC_STATUS_NO_SUPPORT);
+43
include/linux/firmware/intel/stratix10-smc.h
··· 361 361 #define INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER 15 362 362 #define INTEL_SIP_SMC_RSU_RETRY_COUNTER \ 363 363 INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER) 364 + 365 + /** 366 + * Request INTEL_SIP_SMC_RSU_DCMF_VERSION 367 + * 368 + * Sync call used by service driver at EL1 to query DCMF (Decision 369 + * Configuration Management Firmware) version from FW 370 + * 371 + * Call register usage: 372 + * a0 INTEL_SIP_SMC_RSU_DCMF_VERSION 373 + * a1-7 not used 374 + * 375 + * Return status 376 + * a0 INTEL_SIP_SMC_STATUS_OK 377 + * a1 dcmf1 | dcmf0 378 + * a2 dcmf3 | dcmf2 379 + * 380 + * Or 381 + * 382 + * a0 INTEL_SIP_SMC_RSU_ERROR 383 + */ 384 + #define INTEL_SIP_SMC_FUNCID_RSU_DCMF_VERSION 16 385 + #define INTEL_SIP_SMC_RSU_DCMF_VERSION \ 386 + INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_DCMF_VERSION) 387 + 388 + /** 389 + * Request INTEL_SIP_SMC_RSU_MAX_RETRY 390 + * 391 + * Sync call used by service driver at EL1 to query max retry value from FW 392 + * 393 + * Call register usage: 394 + * a0 INTEL_SIP_SMC_RSU_MAX_RETRY 395 + * a1-7 not used 396 + * 397 + * Return status 398 + * a0 INTEL_SIP_SMC_STATUS_OK 399 + * a1 max retry value 400 + * 401 + * Or 402 + * a0 INTEL_SIP_SMC_RSU_ERROR 403 + */ 404 + #define INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY 18 405 + #define INTEL_SIP_SMC_RSU_MAX_RETRY \ 406 + INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY)
+8
include/linux/firmware/intel/stratix10-svc-client.h
··· 98 98 * 99 99 * @COMMAND_RSU_RETRY: query firmware for the current image's retry counter, 100 100 * return status is SVC_STATUS_OK or SVC_STATUS_ERROR 101 + * 102 + * @COMMAND_RSU_MAX_RETRY: query firmware for the max retry value, 103 + * return status is SVC_STATUS_OK or SVC_STATUS_ERROR 104 + * 105 + * @COMMAND_RSU_DCMF_VERSION: query firmware for the DCMF version, return status 106 + * is SVC_STATUS_OK or SVC_STATUS_ERROR 101 107 */ 102 108 enum stratix10_svc_command_code { 103 109 COMMAND_NOOP = 0, ··· 115 109 COMMAND_RSU_UPDATE, 116 110 COMMAND_RSU_NOTIFY, 117 111 COMMAND_RSU_RETRY, 112 + COMMAND_RSU_MAX_RETRY, 113 + COMMAND_RSU_DCMF_VERSION, 118 114 }; 119 115 120 116 /**