aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wwan/iosm/iosm_ipc_devlink.c
diff options
context:
space:
mode:
authorM Chetan Kumar <m.chetan.kumar@linux.intel.com>2021-10-02 20:02:12 +0530
committerDavid S. Miller <davem@davemloft.net>2021-10-02 16:05:20 +0100
commitb8aa16541d73994dc18c5e8789124f26189ed656 (patch)
tree9cc7697ccfb016eb67f908ce342e7766bbec495b /drivers/net/wwan/iosm/iosm_ipc_devlink.c
parentMerge branch 'hw_addr_set' (diff)
downloadlinux-dev-b8aa16541d73994dc18c5e8789124f26189ed656.tar.xz
linux-dev-b8aa16541d73994dc18c5e8789124f26189ed656.zip
net: wwan: iosm: correct devlink extra params
1. Removed driver specific extra params like download_region, address & region_count. The required information is passed as part of flash API. 2. IOSM Devlink documentation updated to reflect the same. Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wwan/iosm/iosm_ipc_devlink.c')
-rw-r--r--drivers/net/wwan/iosm/iosm_ipc_devlink.c81
1 files changed, 15 insertions, 66 deletions
diff --git a/drivers/net/wwan/iosm/iosm_ipc_devlink.c b/drivers/net/wwan/iosm/iosm_ipc_devlink.c
index 6fe56f73011b..17da85a8f337 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_devlink.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_devlink.c
@@ -23,31 +23,11 @@ static int ipc_devlink_get_param(struct devlink *dl, u32 id,
struct devlink_param_gset_ctx *ctx)
{
struct iosm_devlink *ipc_devlink = devlink_priv(dl);
- int rc = 0;
- switch (id) {
- case IOSM_DEVLINK_PARAM_ID_ERASE_FULL_FLASH:
+ if (id == IOSM_DEVLINK_PARAM_ID_ERASE_FULL_FLASH)
ctx->val.vu8 = ipc_devlink->param.erase_full_flash;
- break;
-
- case IOSM_DEVLINK_PARAM_ID_DOWNLOAD_REGION:
- ctx->val.vu8 = ipc_devlink->param.download_region;
- break;
-
- case IOSM_DEVLINK_PARAM_ID_ADDRESS:
- ctx->val.vu32 = ipc_devlink->param.address;
- break;
-
- case IOSM_DEVLINK_PARAM_ID_REGION_COUNT:
- ctx->val.vu8 = ipc_devlink->param.region_count;
- break;
- default:
- rc = -EOPNOTSUPP;
- break;
- }
-
- return rc;
+ return 0;
}
/* Set the param values for the specific param ID's */
@@ -55,31 +35,11 @@ static int ipc_devlink_set_param(struct devlink *dl, u32 id,
struct devlink_param_gset_ctx *ctx)
{
struct iosm_devlink *ipc_devlink = devlink_priv(dl);
- int rc = 0;
- switch (id) {
- case IOSM_DEVLINK_PARAM_ID_ERASE_FULL_FLASH:
+ if (id == IOSM_DEVLINK_PARAM_ID_ERASE_FULL_FLASH)
ipc_devlink->param.erase_full_flash = ctx->val.vu8;
- break;
-
- case IOSM_DEVLINK_PARAM_ID_DOWNLOAD_REGION:
- ipc_devlink->param.download_region = ctx->val.vu8;
- break;
-
- case IOSM_DEVLINK_PARAM_ID_ADDRESS:
- ipc_devlink->param.address = ctx->val.vu32;
- break;
-
- case IOSM_DEVLINK_PARAM_ID_REGION_COUNT:
- ipc_devlink->param.region_count = ctx->val.vu8;
- break;
-
- default:
- rc = -EOPNOTSUPP;
- break;
- }
- return rc;
+ return 0;
}
/* Devlink param structure array */
@@ -89,21 +49,6 @@ static const struct devlink_param iosm_devlink_params[] = {
BIT(DEVLINK_PARAM_CMODE_RUNTIME),
ipc_devlink_get_param, ipc_devlink_set_param,
NULL),
- DEVLINK_PARAM_DRIVER(IOSM_DEVLINK_PARAM_ID_DOWNLOAD_REGION,
- "download_region", DEVLINK_PARAM_TYPE_BOOL,
- BIT(DEVLINK_PARAM_CMODE_RUNTIME),
- ipc_devlink_get_param, ipc_devlink_set_param,
- NULL),
- DEVLINK_PARAM_DRIVER(IOSM_DEVLINK_PARAM_ID_ADDRESS,
- "address", DEVLINK_PARAM_TYPE_U32,
- BIT(DEVLINK_PARAM_CMODE_RUNTIME),
- ipc_devlink_get_param, ipc_devlink_set_param,
- NULL),
- DEVLINK_PARAM_DRIVER(IOSM_DEVLINK_PARAM_ID_REGION_COUNT,
- "region_count", DEVLINK_PARAM_TYPE_U8,
- BIT(DEVLINK_PARAM_CMODE_RUNTIME),
- ipc_devlink_get_param, ipc_devlink_set_param,
- NULL),
};
/* Get devlink flash component type */
@@ -134,18 +79,23 @@ static int ipc_devlink_flash_update(struct devlink *devlink,
{
struct iosm_devlink *ipc_devlink = devlink_priv(devlink);
enum iosm_flash_comp_type fls_type;
+ struct iosm_devlink_image *header;
int rc = -EINVAL;
u8 *mdm_rsp;
- if (!params->component)
+ header = (struct iosm_devlink_image *)params->fw->data;
+
+ if (!header || params->fw->size <= IOSM_DEVLINK_HDR_SIZE ||
+ (memcmp(header->magic_header, IOSM_DEVLINK_MAGIC_HEADER,
+ IOSM_DEVLINK_MAGIC_HEADER_LEN) != 0))
return -EINVAL;
mdm_rsp = kzalloc(IOSM_EBL_DW_PACK_SIZE, GFP_KERNEL);
if (!mdm_rsp)
return -ENOMEM;
- fls_type = ipc_devlink_get_flash_comp_type(params->component,
- strlen(params->component));
+ fls_type = ipc_devlink_get_flash_comp_type(header->image_type,
+ IOSM_DEVLINK_MAX_IMG_LEN);
switch (fls_type) {
case FLASH_COMP_TYPE_PSI:
@@ -165,16 +115,16 @@ static int ipc_devlink_flash_update(struct devlink *devlink,
break;
default:
devlink_flash_update_status_notify(devlink, "Invalid component",
- params->component, 0, 0);
+ NULL, 0, 0);
break;
}
if (!rc)
devlink_flash_update_status_notify(devlink, "Flashing success",
- params->component, 0, 0);
+ header->image_type, 0, 0);
else
devlink_flash_update_status_notify(devlink, "Flashing failed",
- params->component, 0, 0);
+ header->image_type, 0, 0);
kfree(mdm_rsp);
return rc;
@@ -182,7 +132,6 @@ static int ipc_devlink_flash_update(struct devlink *devlink,
/* Call back function for devlink ops */
static const struct devlink_ops devlink_flash_ops = {
- .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT,
.flash_update = ipc_devlink_flash_update,
};