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,
>  };
>  

Reply via email to