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

mei: vsc: Rework firmware image names

Rework firmware image names with the users in mind---there's no need for
variation between firmware names, apart from connected sensors. All
supported SoCs use the same firmware, too.

Use a single set of firmware binaries and assume they'll be found under
intel/vsc directory.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Wentong Wu <wentong.wu@intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20231213094055.446611-1-sakari.ailus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Sakari Ailus and committed by
Greg Kroah-Hartman
5370a431 ea0e635f

+10 -62
+10 -62
drivers/misc/mei/vsc-fw-loader.c
··· 27 27 #define VSC_EFUSE_ADDR (VSC_ADDR_BASE + 0x038) 28 28 #define VSC_STRAP_ADDR (VSC_ADDR_BASE + 0x100) 29 29 30 - #define VSC_STRAP_KEY_SRC_MASK BIT(0) 31 - #define VSC_STRAP_KEY_SRC_PRODUCT 1 32 - 33 30 #define VSC_MAINSTEPPING_VERSION_MASK GENMASK(7, 4) 34 31 #define VSC_MAINSTEPPING_VERSION_A 0 35 32 ··· 46 49 #define VSC_ROM_PKG_SIZE 256u 47 50 #define VSC_FW_PKG_SIZE 512u 48 51 49 - #define VSC_CSI_IMAGE_NAME_FMT "ivsc_fw_a1.bin" 50 - #define VSC_CSI_IMAGE_NAME_FMT_PROD "ivsc_fw_a1_%s.bin" 51 - #define VSC_ACE_IMAGE_NAME_FMT "ivsc_pkg_%s_0_a1.bin" 52 - #define VSC_ACE_IMAGE_NAME_FMT_PROD "ivsc_pkg_%s_0_a1_%s.bin" 53 - #define VSC_CFG_IMAGE_NAME_FMT "ivsc_skucfg_%s_0_1_a1.bin" 54 - #define VSC_CFG_IMAGE_NAME_FMT_PROD "ivsc_skucfg_%s_0_1_a1_%s.bin" 52 + #define VSC_IMAGE_DIR "intel/vsc/" 55 53 56 - #define VSC_IMAGE_FOLDER_FMT "vsc/soc_a1" 57 - #define VSC_IMAGE_FOLDER_FMT_PROD "vsc/soc_a1_%s" 54 + #define VSC_CSI_IMAGE_NAME VSC_IMAGE_DIR "ivsc_fw.bin" 55 + #define VSC_ACE_IMAGE_NAME_FMT VSC_IMAGE_DIR "ivsc_pkg_%s_0.bin" 56 + #define VSC_CFG_IMAGE_NAME_FMT VSC_IMAGE_DIR "ivsc_skucfg_%s_0_1.bin" 58 57 59 - #define VSC_IMAGE_NAME_MAX_LEN 64 60 - #define VSC_IMAGE_PATH_MAX_LEN 128 58 + #define VSC_IMAGE_PATH_MAX_LEN 64 61 59 62 60 #define VSC_SENSOR_NAME_MAX_LEN 16 63 - #define VSC_IMAGE_FOLDER_NAME_MAX_LEN 32 64 - #define VSC_IMAGE_NAME_SUFFIX_MAX_LEN 8 65 61 66 62 /* command id */ 67 63 enum { ··· 213 223 * @rx_buf: rx buffer 214 224 * @option: command option 215 225 * @count: total image count 216 - * @key_src: key source 217 - * @folder: image folder 218 226 * @sensor_name: camera sensor name 219 - * @suffix: image name suffix 220 227 * @frags: image fragments 221 228 */ 222 229 struct vsc_fw_loader { ··· 229 242 230 243 u16 option; 231 244 u16 count; 232 - u32 key_src; 233 245 234 - char folder[VSC_IMAGE_FOLDER_NAME_MAX_LEN]; 235 246 char sensor_name[VSC_SENSOR_NAME_MAX_LEN]; 236 - char suffix[VSC_IMAGE_NAME_SUFFIX_MAX_LEN]; 237 247 238 248 struct vsc_img_frag frags[VSC_IMG_FRAG_MAX]; 239 249 }; ··· 362 378 if (ack->token != VSC_TOKEN_DUMP_RESP) 363 379 return -EINVAL; 364 380 365 - fw_loader->key_src = FIELD_GET(VSC_STRAP_KEY_SRC_MASK, ack->payload[2]); 366 - 367 - if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT) 368 - strscpy(fw_loader->suffix, "prod", sizeof(fw_loader->suffix)); 369 - 370 381 return 0; 371 382 } 372 383 373 384 static int vsc_identify_csi_image(struct vsc_fw_loader *fw_loader) 374 385 { 375 - char path[VSC_IMAGE_PATH_MAX_LEN]; 376 - char name[VSC_IMAGE_NAME_MAX_LEN]; 377 386 const struct firmware *image; 378 387 struct vsc_fw_sign *sign; 379 388 struct vsc_img *img; 380 389 unsigned int i; 381 390 int ret; 382 391 383 - if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT) 384 - snprintf(name, sizeof(name), VSC_CSI_IMAGE_NAME_FMT_PROD, 385 - fw_loader->suffix); 386 - else 387 - snprintf(name, sizeof(name), VSC_CSI_IMAGE_NAME_FMT); 388 - 389 - snprintf(path, sizeof(path), "%s/%s", fw_loader->folder, name); 390 - 391 - ret = request_firmware(&image, path, fw_loader->dev); 392 + ret = request_firmware(&image, VSC_CSI_IMAGE_NAME, fw_loader->dev); 392 393 if (ret) 393 394 return ret; 394 395 ··· 449 480 static int vsc_identify_ace_image(struct vsc_fw_loader *fw_loader) 450 481 { 451 482 char path[VSC_IMAGE_PATH_MAX_LEN]; 452 - char name[VSC_IMAGE_NAME_MAX_LEN]; 453 483 const struct firmware *image; 454 484 struct vsc_fw_sign *sign; 455 485 struct vsc_img *img; 456 486 unsigned int i; 457 487 int ret; 458 488 459 - if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT) 460 - snprintf(name, sizeof(name), VSC_ACE_IMAGE_NAME_FMT_PROD, 461 - fw_loader->sensor_name, fw_loader->suffix); 462 - else 463 - snprintf(name, sizeof(name), VSC_ACE_IMAGE_NAME_FMT, 464 - fw_loader->sensor_name); 465 - 466 - snprintf(path, sizeof(path), "%s/%s", fw_loader->folder, name); 489 + snprintf(path, sizeof(path), VSC_ACE_IMAGE_NAME_FMT, 490 + fw_loader->sensor_name); 467 491 468 492 ret = request_firmware(&image, path, fw_loader->dev); 469 493 if (ret) ··· 533 571 { 534 572 struct vsc_img_frag *frag = &fw_loader->frags[VSC_IMG_SKU_CFG_FRAG]; 535 573 char path[VSC_IMAGE_PATH_MAX_LEN]; 536 - char name[VSC_IMAGE_NAME_MAX_LEN]; 537 574 const struct firmware *image; 538 575 u32 size; 539 576 int ret; 540 577 541 - if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT) 542 - snprintf(name, sizeof(name), VSC_CFG_IMAGE_NAME_FMT_PROD, 543 - fw_loader->sensor_name, fw_loader->suffix); 544 - else 545 - snprintf(name, sizeof(name), VSC_CFG_IMAGE_NAME_FMT, 546 - fw_loader->sensor_name); 547 - 548 - snprintf(path, sizeof(path), "%s/%s", fw_loader->folder, name); 578 + snprintf(path, sizeof(path), VSC_CFG_IMAGE_NAME_FMT, 579 + fw_loader->sensor_name); 549 580 550 581 ret = request_firmware(&image, path, fw_loader->dev); 551 582 if (ret) ··· 740 785 ret = vsc_identify_silicon(fw_loader); 741 786 if (ret) 742 787 return ret; 743 - 744 - if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT) 745 - snprintf(fw_loader->folder, sizeof(fw_loader->folder), 746 - VSC_IMAGE_FOLDER_FMT_PROD, fw_loader->suffix); 747 - else 748 - snprintf(fw_loader->folder, sizeof(fw_loader->folder), 749 - VSC_IMAGE_FOLDER_FMT); 750 788 751 789 ret = vsc_identify_csi_image(fw_loader); 752 790 if (ret)