On Tue, 2019-07-23 at 21:51 -0700, Sudarsana Reddy Kalluru wrote: > The patch adds driver interface for reading the NVM config request > and > update the attributes on nvm config flash partition. >
You didn't not use the get_cfg API you added in previous patch. Also can you please clarify how the user reads/write from/to NVM config ? i mean what UAPIs and tools are being used ? > Signed-off-by: Sudarsana Reddy Kalluru <skall...@marvell.com> > Signed-off-by: Ariel Elior <ael...@marvell.com> > --- > drivers/net/ethernet/qlogic/qed/qed_main.c | 65 > ++++++++++++++++++++++++++++++ > include/linux/qed/qed_if.h | 1 + > 2 files changed, 66 insertions(+) > > diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c > b/drivers/net/ethernet/qlogic/qed/qed_main.c > index 829dd60..54f00d2 100644 > --- a/drivers/net/ethernet/qlogic/qed/qed_main.c > +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c > @@ -67,6 +67,8 @@ > #define QED_ROCE_QPS (8192) > #define QED_ROCE_DPIS (8) > #define QED_RDMA_SRQS QED_ROCE_QPS > +#define QED_NVM_CFG_SET_FLAGS 0xE > +#define QED_NVM_CFG_SET_PF_FLAGS 0x1E > > static char version[] = > "QLogic FastLinQ 4xxxx Core Module qed " DRV_MODULE_VERSION > "\n"; > @@ -2227,6 +2229,66 @@ static int qed_nvm_flash_image_validate(struct > qed_dev *cdev, > return 0; > } > > +/* Binary file format - > + * /---------------------------------------------------------- > ------------\ > + * 0B | 0x5 [command > index] | > + * 4B | Entity ID | Reserved | Number of config > attributes | > + * 8B | Config ID | Length | > Value | > + > * | > | > + * \---------------------------------------------------------- > ------------/ > + * There can be several Cfg_id-Length-Value sets as specified by > 'Number of...'. > + * Entity ID - A non zero entity value for which the config need to > be updated. > + */ > +static int qed_nvm_flash_cfg_write(struct qed_dev *cdev, const u8 > **data) > +{ > + struct qed_hwfn *hwfn = QED_LEADING_HWFN(cdev); > + u8 entity_id, len, buf[32]; > + struct qed_ptt *ptt; > + u16 cfg_id, count; > + int rc = 0, i; > + u32 flags; > + > + ptt = qed_ptt_acquire(hwfn); > + if (!ptt) > + return -EAGAIN; > + > + /* NVM CFG ID attribute header */ > + *data += 4; > + entity_id = **data; > + *data += 2; > + count = *((u16 *)*data); > + *data += 2; > + > + DP_VERBOSE(cdev, NETIF_MSG_DRV, > + "Read config ids: entity id %02x num _attrs = > %0d\n", > + entity_id, count); > + /* NVM CFG ID attributes */ > + for (i = 0; i < count; i++) { > + cfg_id = *((u16 *)*data); > + *data += 2; > + len = **data; > + (*data)++; > + memcpy(buf, *data, len); > + *data += len; > + > + flags = entity_id ? QED_NVM_CFG_SET_PF_FLAGS : > + QED_NVM_CFG_SET_FLAGS; > + > + DP_VERBOSE(cdev, NETIF_MSG_DRV, > + "cfg_id = %d len = %d\n", cfg_id, len); > + rc = qed_mcp_nvm_set_cfg(hwfn, ptt, cfg_id, entity_id, > flags, > + buf, len); > + if (rc) { > + DP_ERR(cdev, "Error %d configuring %d\n", rc, > cfg_id); > + break; > + } > + } > + > + qed_ptt_release(hwfn, ptt); > + > + return rc; > +} > + > static int qed_nvm_flash(struct qed_dev *cdev, const char *name) > { > const struct firmware *image; > @@ -2268,6 +2330,9 @@ static int qed_nvm_flash(struct qed_dev *cdev, > const char *name) > rc = qed_nvm_flash_image_access(cdev, &data, > &check_resp); > break; > + case QED_NVM_FLASH_CMD_NVM_CFG_ID: > + rc = qed_nvm_flash_cfg_write(cdev, &data); > + break; > default: > DP_ERR(cdev, "Unknown command %08x\n", > cmd_type); > rc = -EINVAL; > diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h > index eef02e6..23805ea 100644 > --- a/include/linux/qed/qed_if.h > +++ b/include/linux/qed/qed_if.h > @@ -804,6 +804,7 @@ enum qed_nvm_flash_cmd { > QED_NVM_FLASH_CMD_FILE_DATA = 0x2, > QED_NVM_FLASH_CMD_FILE_START = 0x3, > QED_NVM_FLASH_CMD_NVM_CHANGE = 0x4, > + QED_NVM_FLASH_CMD_NVM_CFG_ID = 0x5, > QED_NVM_FLASH_CMD_NVM_MAX, > }; >