public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/1] mei: vsc: Rework firmware image names
@ 2023-12-13  9:40 Sakari Ailus
  2023-12-14 16:00 ` Andy Shevchenko
  0 siblings, 1 reply; 2+ messages in thread
From: Sakari Ailus @ 2023-12-13  9:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: gregkh, alexander.usyskin, tomas.winkler, Arnd Bergmann,
	wentong.wu

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>
---
Hi folks,

The firmware isn't in linux-firmware yet (I'm working on it). The name can
still be changed as this hasn't made its way to a release yet.

 drivers/misc/mei/vsc-fw-loader.c | 72 +++++---------------------------
 1 file changed, 10 insertions(+), 62 deletions(-)

diff --git a/drivers/misc/mei/vsc-fw-loader.c b/drivers/misc/mei/vsc-fw-loader.c
index 3e151f06e85b..ffa4ccd96a10 100644
--- a/drivers/misc/mei/vsc-fw-loader.c
+++ b/drivers/misc/mei/vsc-fw-loader.c
@@ -27,9 +27,6 @@
 #define VSC_EFUSE_ADDR			(VSC_ADDR_BASE + 0x038)
 #define VSC_STRAP_ADDR			(VSC_ADDR_BASE + 0x100)
 
-#define VSC_STRAP_KEY_SRC_MASK		BIT(0)
-#define VSC_STRAP_KEY_SRC_PRODUCT	1
-
 #define VSC_MAINSTEPPING_VERSION_MASK	GENMASK(7, 4)
 #define VSC_MAINSTEPPING_VERSION_A	0
 
@@ -49,22 +46,15 @@
 #define VSC_ROM_PKG_SIZE		256u
 #define VSC_FW_PKG_SIZE			512u
 
-#define VSC_CSI_IMAGE_NAME_FMT		"ivsc_fw_a1.bin"
-#define VSC_CSI_IMAGE_NAME_FMT_PROD	"ivsc_fw_a1_%s.bin"
-#define VSC_ACE_IMAGE_NAME_FMT		"ivsc_pkg_%s_0_a1.bin"
-#define VSC_ACE_IMAGE_NAME_FMT_PROD	"ivsc_pkg_%s_0_a1_%s.bin"
-#define VSC_CFG_IMAGE_NAME_FMT		"ivsc_skucfg_%s_0_1_a1.bin"
-#define VSC_CFG_IMAGE_NAME_FMT_PROD	"ivsc_skucfg_%s_0_1_a1_%s.bin"
+#define VSC_IMAGE_DIR			"intel/vsc/"
 
-#define VSC_IMAGE_FOLDER_FMT		"vsc/soc_a1"
-#define VSC_IMAGE_FOLDER_FMT_PROD	"vsc/soc_a1_%s"
+#define VSC_CSI_IMAGE_NAME		VSC_IMAGE_DIR "ivsc_fw.bin"
+#define VSC_ACE_IMAGE_NAME_FMT		VSC_IMAGE_DIR "ivsc_pkg_%s_0.bin"
+#define VSC_CFG_IMAGE_NAME_FMT		VSC_IMAGE_DIR "ivsc_skucfg_%s_0_1.bin"
 
-#define VSC_IMAGE_NAME_MAX_LEN		64
-#define VSC_IMAGE_PATH_MAX_LEN		128
+#define VSC_IMAGE_PATH_MAX_LEN		64
 
 #define VSC_SENSOR_NAME_MAX_LEN		16
-#define VSC_IMAGE_FOLDER_NAME_MAX_LEN	32
-#define VSC_IMAGE_NAME_SUFFIX_MAX_LEN	8
 
 /* command id */
 enum {
@@ -223,10 +213,7 @@ struct vsc_img_frag {
  * @rx_buf: rx buffer
  * @option: command option
  * @count: total image count
- * @key_src: key source
- * @folder: image folder
  * @sensor_name: camera sensor name
- * @suffix: image name suffix
  * @frags: image fragments
  */
 struct vsc_fw_loader {
@@ -242,11 +229,8 @@ struct vsc_fw_loader {
 
 	u16 option;
 	u16 count;
-	u32 key_src;
 
-	char folder[VSC_IMAGE_FOLDER_NAME_MAX_LEN];
 	char sensor_name[VSC_SENSOR_NAME_MAX_LEN];
-	char suffix[VSC_IMAGE_NAME_SUFFIX_MAX_LEN];
 
 	struct vsc_img_frag frags[VSC_IMG_FRAG_MAX];
 };
@@ -378,33 +362,18 @@ static int vsc_identify_silicon(struct vsc_fw_loader *fw_loader)
 	if (ack->token != VSC_TOKEN_DUMP_RESP)
 		return -EINVAL;
 
-	fw_loader->key_src = FIELD_GET(VSC_STRAP_KEY_SRC_MASK, ack->payload[2]);
-
-	if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT)
-		strscpy(fw_loader->suffix, "prod", sizeof(fw_loader->suffix));
-
 	return 0;
 }
 
 static int vsc_identify_csi_image(struct vsc_fw_loader *fw_loader)
 {
-	char path[VSC_IMAGE_PATH_MAX_LEN];
-	char name[VSC_IMAGE_NAME_MAX_LEN];
 	const struct firmware *image;
 	struct vsc_fw_sign *sign;
 	struct vsc_img *img;
 	unsigned int i;
 	int ret;
 
-	if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT)
-		snprintf(name, sizeof(name), VSC_CSI_IMAGE_NAME_FMT_PROD,
-			 fw_loader->suffix);
-	else
-		snprintf(name, sizeof(name), VSC_CSI_IMAGE_NAME_FMT);
-
-	snprintf(path, sizeof(path), "%s/%s", fw_loader->folder, name);
-
-	ret = request_firmware(&image, path, fw_loader->dev);
+	ret = request_firmware(&image, VSC_CSI_IMAGE_NAME, fw_loader->dev);
 	if (ret)
 		return ret;
 
@@ -480,21 +449,14 @@ static int vsc_identify_csi_image(struct vsc_fw_loader *fw_loader)
 static int vsc_identify_ace_image(struct vsc_fw_loader *fw_loader)
 {
 	char path[VSC_IMAGE_PATH_MAX_LEN];
-	char name[VSC_IMAGE_NAME_MAX_LEN];
 	const struct firmware *image;
 	struct vsc_fw_sign *sign;
 	struct vsc_img *img;
 	unsigned int i;
 	int ret;
 
-	if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT)
-		snprintf(name, sizeof(name), VSC_ACE_IMAGE_NAME_FMT_PROD,
-			 fw_loader->sensor_name, fw_loader->suffix);
-	else
-		snprintf(name, sizeof(name), VSC_ACE_IMAGE_NAME_FMT,
-			 fw_loader->sensor_name);
-
-	snprintf(path, sizeof(path), "%s/%s", fw_loader->folder, name);
+	snprintf(path, sizeof(path), VSC_ACE_IMAGE_NAME_FMT,
+		 fw_loader->sensor_name);
 
 	ret = request_firmware(&image, path, fw_loader->dev);
 	if (ret)
@@ -571,19 +533,12 @@ static int vsc_identify_cfg_image(struct vsc_fw_loader *fw_loader)
 {
 	struct vsc_img_frag *frag = &fw_loader->frags[VSC_IMG_SKU_CFG_FRAG];
 	char path[VSC_IMAGE_PATH_MAX_LEN];
-	char name[VSC_IMAGE_NAME_MAX_LEN];
 	const struct firmware *image;
 	u32 size;
 	int ret;
 
-	if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT)
-		snprintf(name, sizeof(name), VSC_CFG_IMAGE_NAME_FMT_PROD,
-			 fw_loader->sensor_name, fw_loader->suffix);
-	else
-		snprintf(name, sizeof(name), VSC_CFG_IMAGE_NAME_FMT,
-			 fw_loader->sensor_name);
-
-	snprintf(path, sizeof(path), "%s/%s", fw_loader->folder, name);
+	snprintf(path, sizeof(path), VSC_CFG_IMAGE_NAME_FMT,
+		 fw_loader->sensor_name);
 
 	ret = request_firmware(&image, path, fw_loader->dev);
 	if (ret)
@@ -786,13 +741,6 @@ int vsc_tp_init(struct vsc_tp *tp, struct device *dev)
 	if (ret)
 		return ret;
 
-	if (fw_loader->key_src == VSC_STRAP_KEY_SRC_PRODUCT)
-		snprintf(fw_loader->folder, sizeof(fw_loader->folder),
-			 VSC_IMAGE_FOLDER_FMT_PROD, fw_loader->suffix);
-	else
-		snprintf(fw_loader->folder, sizeof(fw_loader->folder),
-			 VSC_IMAGE_FOLDER_FMT);
-
 	ret = vsc_identify_csi_image(fw_loader);
 	if (ret)
 		return ret;
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/1] mei: vsc: Rework firmware image names
  2023-12-13  9:40 [PATCH 1/1] mei: vsc: Rework firmware image names Sakari Ailus
@ 2023-12-14 16:00 ` Andy Shevchenko
  0 siblings, 0 replies; 2+ messages in thread
From: Andy Shevchenko @ 2023-12-14 16:00 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: linux-kernel, gregkh, alexander.usyskin, tomas.winkler,
	Arnd Bergmann, wentong.wu

On Wed, Dec 13, 2023 at 11:40:55AM +0200, Sakari Ailus wrote:
> 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.

I like it, FWIW,
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-12-14 16:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-13  9:40 [PATCH 1/1] mei: vsc: Rework firmware image names Sakari Ailus
2023-12-14 16:00 ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox