patches for DPDK stable branches
 help / color / Atom feed
* [dpdk-stable] [PATCH] net/ice: fix incorrect EEPROM data
@ 2020-05-08  7:13 Shougang Wang
  2020-05-08  7:20 ` Yang, Qiming
  2020-06-28  3:37 ` [dpdk-stable] [PATCH v2] " Shougang Wang
  0 siblings, 2 replies; 5+ messages in thread
From: Shougang Wang @ 2020-05-08  7:13 UTC (permalink / raw)
  To: dev; +Cc: Qiming Yang, Shougang Wang, stable

Kernel driver reads EEPROM data from flash but DPDK reads from
shadow ram. This patch fixes the issue by changing method to get
EEPROM data from flash.

Fixes: 68a1ab82ad74 ("net/ice: speed up to retrieve EEPROM")
Cc: stable@dpdk.org

Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
---
 drivers/net/ice/base/ice_nvm.c |  4 ++--
 drivers/net/ice/base/ice_nvm.h |  3 +++
 drivers/net/ice/ice_ethdev.c   | 26 +++++++++++---------------
 3 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ice/base/ice_nvm.c b/drivers/net/ice/base/ice_nvm.c
index 1bbd6e209..a5f9f8fe6 100644
--- a/drivers/net/ice/base/ice_nvm.c
+++ b/drivers/net/ice/base/ice_nvm.c
@@ -186,7 +186,7 @@ ice_read_sr_buf_aq(struct ice_hw *hw, u16 offset, u16 *words, u16 *data)
  *
  * This function will request NVM ownership.
  */
-static enum ice_status
+enum ice_status
 ice_acquire_nvm(struct ice_hw *hw, enum ice_aq_res_access_type access)
 {
 	ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__);
@@ -203,7 +203,7 @@ ice_acquire_nvm(struct ice_hw *hw, enum ice_aq_res_access_type access)
  *
  * This function will release NVM ownership.
  */
-static void ice_release_nvm(struct ice_hw *hw)
+void ice_release_nvm(struct ice_hw *hw)
 {
 	ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__);
 
diff --git a/drivers/net/ice/base/ice_nvm.h b/drivers/net/ice/base/ice_nvm.h
index e5f8888e3..075e7a59f 100644
--- a/drivers/net/ice/base/ice_nvm.h
+++ b/drivers/net/ice/base/ice_nvm.h
@@ -85,6 +85,9 @@ enum ice_status
 ice_handle_nvm_access(struct ice_hw *hw, struct ice_nvm_access_cmd *cmd,
 		      union ice_nvm_access_data *data);
 enum ice_status
+ice_acquire_nvm(struct ice_hw *hw, enum ice_aq_res_access_type access);
+void ice_release_nvm(struct ice_hw *hw);
+enum ice_status
 ice_read_flat_nvm(struct ice_hw *hw, u32 offset, u32 *length, u8 *data,
 		  bool read_shadow_ram);
 enum ice_status
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index d5110c439..3d8118e37 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -3951,8 +3951,7 @@ ice_get_eeprom_length(struct rte_eth_dev *dev)
 {
 	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
-	/* Convert word count to byte count */
-	return hw->nvm.sr_words << 1;
+	return hw->nvm.flash_size;
 }
 
 static int
@@ -3960,26 +3959,23 @@ ice_get_eeprom(struct rte_eth_dev *dev,
 	       struct rte_dev_eeprom_info *eeprom)
 {
 	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint16_t *data = eeprom->data;
-	uint16_t first_word, last_word, nwords;
+	uint8_t *data = eeprom->data;
 	enum ice_status status = ICE_SUCCESS;
+	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
 
-	first_word = eeprom->offset >> 1;
-	last_word = (eeprom->offset + eeprom->length - 1) >> 1;
-	nwords = last_word - first_word + 1;
-
-	if (first_word >= hw->nvm.sr_words ||
-	    last_word >= hw->nvm.sr_words) {
-		PMD_DRV_LOG(ERR, "Requested EEPROM bytes out of range.");
-		return -EINVAL;
+	status = ice_acquire_nvm(hw, ICE_RES_READ);
+	if (status) {
+		PMD_DRV_LOG(ERR, "acquire nvm failed.");
+		return -EIO;
 	}
 
-	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
+	status = ice_read_flat_nvm(hw, eeprom->offset, &eeprom->length,
+			data, false);
+
+	ice_release_nvm(hw);
 
-	status = ice_read_sr_buf(hw, first_word, &nwords, data);
 	if (status) {
 		PMD_DRV_LOG(ERR, "EEPROM read failed.");
-		eeprom->length = sizeof(uint16_t) * nwords;
 		return -EIO;
 	}
 
-- 
2.17.1


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

* Re: [dpdk-stable] [PATCH] net/ice: fix incorrect EEPROM data
  2020-05-08  7:13 [dpdk-stable] [PATCH] net/ice: fix incorrect EEPROM data Shougang Wang
@ 2020-05-08  7:20 ` Yang, Qiming
  2020-06-28  3:37 ` [dpdk-stable] [PATCH v2] " Shougang Wang
  1 sibling, 0 replies; 5+ messages in thread
From: Yang, Qiming @ 2020-05-08  7:20 UTC (permalink / raw)
  To: Wang, ShougangX, dev; +Cc: stable

Hi, Shougang
We can't change share code except formal share code update.
I'll Nack it.

Qiming

> -----Original Message-----
> From: Wang, ShougangX <shougangx.wang@intel.com>
> Sent: Friday, May 8, 2020 15:14
> To: dev@dpdk.org
> Cc: Yang, Qiming <qiming.yang@intel.com>; Wang, ShougangX
> <shougangx.wang@intel.com>; stable@dpdk.org
> Subject: [PATCH] net/ice: fix incorrect EEPROM data
> 
> Kernel driver reads EEPROM data from flash but DPDK reads from shadow
> ram. This patch fixes the issue by changing method to get EEPROM data from
> flash.
> 
> Fixes: 68a1ab82ad74 ("net/ice: speed up to retrieve EEPROM")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
> ---
>  drivers/net/ice/base/ice_nvm.c |  4 ++--  drivers/net/ice/base/ice_nvm.h |
> 3 +++
>  drivers/net/ice/ice_ethdev.c   | 26 +++++++++++---------------
>  3 files changed, 16 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/net/ice/base/ice_nvm.c
> b/drivers/net/ice/base/ice_nvm.c index 1bbd6e209..a5f9f8fe6 100644
> --- a/drivers/net/ice/base/ice_nvm.c
> +++ b/drivers/net/ice/base/ice_nvm.c
> @@ -186,7 +186,7 @@ ice_read_sr_buf_aq(struct ice_hw *hw, u16 offset,
> u16 *words, u16 *data)
>   *
>   * This function will request NVM ownership.
>   */
> -static enum ice_status
> +enum ice_status
>  ice_acquire_nvm(struct ice_hw *hw, enum ice_aq_res_access_type access)
> {
>  	ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); @@ -203,7
> +203,7 @@ ice_acquire_nvm(struct ice_hw *hw, enum
> ice_aq_res_access_type access)
>   *
>   * This function will release NVM ownership.
>   */
> -static void ice_release_nvm(struct ice_hw *hw)
> +void ice_release_nvm(struct ice_hw *hw)
>  {
>  	ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__);
> 
> diff --git a/drivers/net/ice/base/ice_nvm.h
> b/drivers/net/ice/base/ice_nvm.h index e5f8888e3..075e7a59f 100644
> --- a/drivers/net/ice/base/ice_nvm.h
> +++ b/drivers/net/ice/base/ice_nvm.h
> @@ -85,6 +85,9 @@ enum ice_status
>  ice_handle_nvm_access(struct ice_hw *hw, struct ice_nvm_access_cmd
> *cmd,
>  		      union ice_nvm_access_data *data);  enum ice_status
> +ice_acquire_nvm(struct ice_hw *hw, enum ice_aq_res_access_type
> access);
> +void ice_release_nvm(struct ice_hw *hw); enum ice_status
>  ice_read_flat_nvm(struct ice_hw *hw, u32 offset, u32 *length, u8 *data,
>  		  bool read_shadow_ram);
>  enum ice_status
> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
> index d5110c439..3d8118e37 100644
> --- a/drivers/net/ice/ice_ethdev.c
> +++ b/drivers/net/ice/ice_ethdev.c
> @@ -3951,8 +3951,7 @@ ice_get_eeprom_length(struct rte_eth_dev *dev)
> {
>  	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> 
> -	/* Convert word count to byte count */
> -	return hw->nvm.sr_words << 1;
> +	return hw->nvm.flash_size;
>  }
> 
>  static int
> @@ -3960,26 +3959,23 @@ ice_get_eeprom(struct rte_eth_dev *dev,
>  	       struct rte_dev_eeprom_info *eeprom)  {
>  	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> -	uint16_t *data = eeprom->data;
> -	uint16_t first_word, last_word, nwords;
> +	uint8_t *data = eeprom->data;
>  	enum ice_status status = ICE_SUCCESS;
> +	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
> 
> -	first_word = eeprom->offset >> 1;
> -	last_word = (eeprom->offset + eeprom->length - 1) >> 1;
> -	nwords = last_word - first_word + 1;
> -
> -	if (first_word >= hw->nvm.sr_words ||
> -	    last_word >= hw->nvm.sr_words) {
> -		PMD_DRV_LOG(ERR, "Requested EEPROM bytes out of
> range.");
> -		return -EINVAL;
> +	status = ice_acquire_nvm(hw, ICE_RES_READ);
> +	if (status) {
> +		PMD_DRV_LOG(ERR, "acquire nvm failed.");
> +		return -EIO;
>  	}
> 
> -	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
> +	status = ice_read_flat_nvm(hw, eeprom->offset, &eeprom->length,
> +			data, false);
> +
> +	ice_release_nvm(hw);
> 
> -	status = ice_read_sr_buf(hw, first_word, &nwords, data);
>  	if (status) {
>  		PMD_DRV_LOG(ERR, "EEPROM read failed.");
> -		eeprom->length = sizeof(uint16_t) * nwords;
>  		return -EIO;
>  	}
> 
> --
> 2.17.1


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

* [dpdk-stable] [PATCH v2] net/ice: fix incorrect EEPROM data
  2020-05-08  7:13 [dpdk-stable] [PATCH] net/ice: fix incorrect EEPROM data Shougang Wang
  2020-05-08  7:20 ` Yang, Qiming
@ 2020-06-28  3:37 ` " Shougang Wang
  2020-06-30 14:23   ` [dpdk-stable] [dpdk-dev] " Zhang, Qi Z
  2020-07-01  2:46   ` Jiang, YuX
  1 sibling, 2 replies; 5+ messages in thread
From: Shougang Wang @ 2020-06-28  3:37 UTC (permalink / raw)
  To: dev; +Cc: Beilei Xing, Qiming Yang, Shougang Wang, stable

Kernel driver reads EEPROM data from flash but DPDK reads from
shadow ram. This patch fixes the issue by changing method to get
EEPROM data from flash.

Fixes: 68a1ab82ad74 ("net/ice: speed up to retrieve EEPROM")
Cc: stable@dpdk.org

Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
---
 drivers/net/ice/ice_ethdev.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index 5a89a1955..eaffb6578 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -3956,8 +3956,7 @@ ice_get_eeprom_length(struct rte_eth_dev *dev)
 {
 	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
-	/* Convert word count to byte count */
-	return hw->nvm.sr_words << 1;
+	return hw->nvm.flash_size;
 }
 
 static int
@@ -3965,26 +3964,24 @@ ice_get_eeprom(struct rte_eth_dev *dev,
 	       struct rte_dev_eeprom_info *eeprom)
 {
 	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint16_t *data = eeprom->data;
-	uint16_t first_word, last_word, nwords;
 	enum ice_status status = ICE_SUCCESS;
+	uint8_t *data = eeprom->data;
 
-	first_word = eeprom->offset >> 1;
-	last_word = (eeprom->offset + eeprom->length - 1) >> 1;
-	nwords = last_word - first_word + 1;
+	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
 
-	if (first_word >= hw->nvm.sr_words ||
-	    last_word >= hw->nvm.sr_words) {
-		PMD_DRV_LOG(ERR, "Requested EEPROM bytes out of range.");
-		return -EINVAL;
+	status = ice_acquire_nvm(hw, ICE_RES_READ);
+	if (status) {
+		PMD_DRV_LOG(ERR, "acquire nvm failed.");
+		return -EIO;
 	}
 
-	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
+	status = ice_read_flat_nvm(hw, eeprom->offset, &eeprom->length,
+				   data, false);
+
+	ice_release_nvm(hw);
 
-	status = ice_read_sr_buf(hw, first_word, &nwords, data);
 	if (status) {
 		PMD_DRV_LOG(ERR, "EEPROM read failed.");
-		eeprom->length = sizeof(uint16_t) * nwords;
 		return -EIO;
 	}
 
-- 
2.17.1


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v2] net/ice: fix incorrect EEPROM data
  2020-06-28  3:37 ` [dpdk-stable] [PATCH v2] " Shougang Wang
@ 2020-06-30 14:23   ` " Zhang, Qi Z
  2020-07-01  2:46   ` Jiang, YuX
  1 sibling, 0 replies; 5+ messages in thread
From: Zhang, Qi Z @ 2020-06-30 14:23 UTC (permalink / raw)
  To: Wang, ShougangX, dev; +Cc: Xing, Beilei, Yang, Qiming, Wang, ShougangX, stable



> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Shougang Wang
> Sent: Sunday, June 28, 2020 11:38 AM
> To: dev@dpdk.org
> Cc: Xing, Beilei <beilei.xing@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Wang, ShougangX <shougangx.wang@intel.com>;
> stable@dpdk.org
> Subject: [dpdk-dev] [PATCH v2] net/ice: fix incorrect EEPROM data
> 
> Kernel driver reads EEPROM data from flash but DPDK reads from shadow
> ram. This patch fixes the issue by changing method to get EEPROM data from
> flash.
> 
> Fixes: 68a1ab82ad74 ("net/ice: speed up to retrieve EEPROM")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Shougang Wang <shougangx.wang@intel.com>

Acked-by: Qi Zhang <qi.z.zhang@intel.com>

Applied to dpdk-next-net-intel.

Thanks
Qi



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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v2] net/ice: fix incorrect EEPROM data
  2020-06-28  3:37 ` [dpdk-stable] [PATCH v2] " Shougang Wang
  2020-06-30 14:23   ` [dpdk-stable] [dpdk-dev] " Zhang, Qi Z
@ 2020-07-01  2:46   ` Jiang, YuX
  1 sibling, 0 replies; 5+ messages in thread
From: Jiang, YuX @ 2020-07-01  2:46 UTC (permalink / raw)
  To: Wang, ShougangX, dev; +Cc: Xing, Beilei, Yang, Qiming, Wang, ShougangX, stable

Tested-by: Jiang, YuX <yux.jiang@intel.com>

-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Shougang Wang
Sent: Sunday, June 28, 2020 11:38 AM
To: dev@dpdk.org
Cc: Xing, Beilei <beilei.xing@intel.com>; Yang, Qiming <qiming.yang@intel.com>; Wang, ShougangX <shougangx.wang@intel.com>; stable@dpdk.org
Subject: [dpdk-dev] [PATCH v2] net/ice: fix incorrect EEPROM data

Kernel driver reads EEPROM data from flash but DPDK reads from shadow ram. This patch fixes the issue by changing method to get EEPROM data from flash.

Fixes: 68a1ab82ad74 ("net/ice: speed up to retrieve EEPROM")
Cc: stable@dpdk.org

Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
---
 drivers/net/ice/ice_ethdev.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 5a89a1955..eaffb6578 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -3956,8 +3956,7 @@ ice_get_eeprom_length(struct rte_eth_dev *dev)  {
 	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
-	/* Convert word count to byte count */
-	return hw->nvm.sr_words << 1;
+	return hw->nvm.flash_size;
 }
 
 static int
@@ -3965,26 +3964,24 @@ ice_get_eeprom(struct rte_eth_dev *dev,
 	       struct rte_dev_eeprom_info *eeprom)  {
 	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	uint16_t *data = eeprom->data;
-	uint16_t first_word, last_word, nwords;
 	enum ice_status status = ICE_SUCCESS;
+	uint8_t *data = eeprom->data;
 
-	first_word = eeprom->offset >> 1;
-	last_word = (eeprom->offset + eeprom->length - 1) >> 1;
-	nwords = last_word - first_word + 1;
+	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
 
-	if (first_word >= hw->nvm.sr_words ||
-	    last_word >= hw->nvm.sr_words) {
-		PMD_DRV_LOG(ERR, "Requested EEPROM bytes out of range.");
-		return -EINVAL;
+	status = ice_acquire_nvm(hw, ICE_RES_READ);
+	if (status) {
+		PMD_DRV_LOG(ERR, "acquire nvm failed.");
+		return -EIO;
 	}
 
-	eeprom->magic = hw->vendor_id | (hw->device_id << 16);
+	status = ice_read_flat_nvm(hw, eeprom->offset, &eeprom->length,
+				   data, false);
+
+	ice_release_nvm(hw);
 
-	status = ice_read_sr_buf(hw, first_word, &nwords, data);
 	if (status) {
 		PMD_DRV_LOG(ERR, "EEPROM read failed.");
-		eeprom->length = sizeof(uint16_t) * nwords;
 		return -EIO;
 	}
 
--
2.17.1


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

end of thread, back to index

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-08  7:13 [dpdk-stable] [PATCH] net/ice: fix incorrect EEPROM data Shougang Wang
2020-05-08  7:20 ` Yang, Qiming
2020-06-28  3:37 ` [dpdk-stable] [PATCH v2] " Shougang Wang
2020-06-30 14:23   ` [dpdk-stable] [dpdk-dev] " Zhang, Qi Z
2020-07-01  2:46   ` Jiang, YuX

patches for DPDK stable branches

Archives are clonable:
	git clone --mirror http://inbox.dpdk.org/stable/0 stable/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 stable stable/ http://inbox.dpdk.org/stable \
		stable@dpdk.org
	public-inbox-index stable


Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.stable


AGPL code for this site: git clone https://public-inbox.org/ public-inbox