* [PATCH net 0/3] qlcnic: Bug fixes
@ 2013-04-18 18:10 Shahed Shaikh
2013-04-18 18:55 ` David Miller
0 siblings, 1 reply; 15+ messages in thread
From: Shahed Shaikh @ 2013-04-18 18:10 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Shahed Shaikh
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
This patch series contains bug fixes for -
* Loopback test failure while traffic is running.
* Tx timeout and subsequent firmware reset by removing check for
'(adapter->netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)' from tx fast
path, as per Eric's suggestion.
* Typo in logs.
Please apply to net.
Thanks,
Shahed
Jitendra Kalsaria (1):
qlcnic: Stop traffic before performing loopback test
Shahed Shaikh (1):
qlcnic: Fix typo in logs
Sritej Velaga (1):
qlcnic: fix TSO race condition
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 15 ++++++++++-----
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 3 +--
2 files changed, 11 insertions(+), 7 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 0/3] qlcnic: Bug fixes
2013-04-18 18:10 Shahed Shaikh
@ 2013-04-18 18:55 ` David Miller
0 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2013-04-18 18:55 UTC (permalink / raw)
To: shahed.shaikh; +Cc: netdev, Dept_NX_Linux_NIC_Driver
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Date: Thu, 18 Apr 2013 14:10:03 -0400
> From: Shahed Shaikh <shahed.shaikh@qlogic.com>
>
> This patch series contains bug fixes for -
> * Loopback test failure while traffic is running.
> * Tx timeout and subsequent firmware reset by removing check for
> '(adapter->netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)' from tx fast
> path, as per Eric's suggestion.
> * Typo in logs.
>
> Please apply to net.
Series applied, thanks.
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 0/3] qlcnic: Bug fixes
@ 2013-05-21 19:26 Shahed Shaikh
2013-05-22 21:52 ` David Miller
0 siblings, 1 reply; 15+ messages in thread
From: Shahed Shaikh @ 2013-05-21 19:26 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Shahed Shaikh
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
This patch series includes following bug fixes:
* Fix probe failure path by returning proper error codes.
* Removed access to netdev->trans_start in driver.
* Fix netdev->features manipulation as part of change in EPORT
features
Please apply to net.
Thanks,
Shahed
Shahed Shaikh (1):
qlcnic: Fix updating netdev->features
Sony Chacko (2):
qlcnic: Return proper error codes from probe failure paths
qlcnic: remove netdev->trans_start updates within the driver
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 6 ++
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 2 -
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 49 ++++++++++++++-
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 65 +++++---------------
.../ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 1 -
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 3 +
6 files changed, 70 insertions(+), 56 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 0/3] qlcnic: Bug fixes
2013-05-21 19:26 [PATCH net 0/3] qlcnic: Bug fixes Shahed Shaikh
@ 2013-05-22 21:52 ` David Miller
0 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2013-05-22 21:52 UTC (permalink / raw)
To: shahed.shaikh; +Cc: netdev, Dept_NX_Linux_NIC_Driver
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Date: Tue, 21 May 2013 15:26:58 -0400
> This patch series includes following bug fixes:
> * Fix probe failure path by returning proper error codes.
> * Removed access to netdev->trans_start in driver.
> * Fix netdev->features manipulation as part of change in EPORT
> features
>
> Please apply to net.
Series applied, thanks.
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 0/3] qlcnic: bug fixes
@ 2013-08-15 12:29 Sucheta Chakraborty
2013-08-15 21:35 ` David Miller
0 siblings, 1 reply; 15+ messages in thread
From: Sucheta Chakraborty @ 2013-08-15 12:29 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept-HSGLinuxNICDev
Please apply to net.
Thanks,
Sucheta.
Himanshu Madhani (1):
qlcnic: Fix set driver version command
Manish Chopra (1):
qlcnic: Fix diagnostic interrupt test for 83xx adapters
Sucheta Chakraborty (1):
qlcnic: Fix beacon state return status handling
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 5 +++++
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 3 ++-
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 6 ++++--
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 6 +++---
4 files changed, 14 insertions(+), 6 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 0/3] qlcnic: bug fixes
2013-08-15 12:29 [PATCH net 0/3] qlcnic: bug fixes Sucheta Chakraborty
@ 2013-08-15 21:35 ` David Miller
0 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2013-08-15 21:35 UTC (permalink / raw)
To: sucheta.chakraborty; +Cc: netdev, Dept-HSGLinuxNICDev
From: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Date: Thu, 15 Aug 2013 08:29:26 -0400
> Please apply to net.
Series applied, thanks.
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 0/3] qlcnic: Bug fixes
@ 2014-08-04 15:51 Rajesh Borundia
2014-08-05 23:24 ` David Miller
0 siblings, 1 reply; 15+ messages in thread
From: Rajesh Borundia @ 2014-08-04 15:51 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept-HSGLinuxNICDev
The patch series contains following bug fixes.
* Aggregating tx stats in adapter variable was resulting
in increase of stats when user runs ifconfig command
and no traffic is running. Instead aggregate tx stats
in local variable and then assign it to adapter struct
variable.
* Set_driver_version was called after registering netdev
which was resulting in a race between FLR in open
handler and set_driver_version command as open handler
can be called simulatneously on another cpu even if probe
is not complete. So call this command before registering
netdev.
* dcbnl_ops should be initialized before registering netdev
as they are referenced in open handler.
Please apply this series to net.
Thanks,
Rajesh
Rajesh Borundia (3):
qlcnic: Fix update of ethtool stats.
qlcnic: Set driver version before registering netdev
qlcnic: Initialize dcbnl_ops before register_netdev
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 2 +-
.../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 18 +++++++++++++-----
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 10 +++++-----
3 files changed, 19 insertions(+), 11 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 0/3] qlcnic: Bug fixes
2014-08-04 15:51 [PATCH net 0/3] qlcnic: Bug fixes Rajesh Borundia
@ 2014-08-05 23:24 ` David Miller
0 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2014-08-05 23:24 UTC (permalink / raw)
To: rajesh.borundia; +Cc: netdev, Dept-HSGLinuxNICDev
From: Rajesh Borundia <rajesh.borundia@qlogic.com>
Date: Mon, 4 Aug 2014 11:51:15 -0400
> The patch series contains following bug fixes.
>
> * Aggregating tx stats in adapter variable was resulting
> in increase of stats when user runs ifconfig command
> and no traffic is running. Instead aggregate tx stats
> in local variable and then assign it to adapter struct
> variable.
> * Set_driver_version was called after registering netdev
> which was resulting in a race between FLR in open
> handler and set_driver_version command as open handler
> can be called simulatneously on another cpu even if probe
> is not complete. So call this command before registering
> netdev.
> * dcbnl_ops should be initialized before registering netdev
> as they are referenced in open handler.
>
> Please apply this series to net.
Series applied, thanks.
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 0/3] qlcnic: Bug fixes
@ 2014-08-18 13:31 Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 1/3] qlcnic: Fix flash access interface to application Shahed Shaikh
` (3 more replies)
0 siblings, 4 replies; 15+ messages in thread
From: Shahed Shaikh @ 2014-08-18 13:31 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept-HSGLinuxNICDev, Shahed Shaikh
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Hi Dave,
This series fixes some bugs related to endianess.
Please apply this series to net.
Thanks,
Shahed
Jitendra Kalsaria (1):
qlcnic: Fix flash access interface to application
Rajesh Borundia (1):
qlcnic: Fix endianess issue in FW dump template header
Shahed Shaikh (1):
qlcnic: Fix endianess issue in firmware load from file operation
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 15 +++++-
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 6 +-
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 35 +++++++++----
.../net/ethernet/qlogic/qlcnic/qlcnic_minidump.c | 57 ++++++++++++++++++++
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 16 +++++-
5 files changed, 114 insertions(+), 15 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 1/3] qlcnic: Fix flash access interface to application
2014-08-18 13:31 [PATCH net 0/3] qlcnic: Bug fixes Shahed Shaikh
@ 2014-08-18 13:31 ` Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 2/3] qlcnic: Fix endianess issue in FW dump template header Shahed Shaikh
` (2 subsequent siblings)
3 siblings, 0 replies; 15+ messages in thread
From: Shahed Shaikh @ 2014-08-18 13:31 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept-HSGLinuxNICDev, Jitendra Kalsaria
From: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Application expects flash data in little endian, but driver reads/writes
flash data using readl()/writel() APIs which swaps data on big endian machine.
So, swap the data after reading from and before writing to flash memory.
Signed-off-by: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 15 ++++++++++++++-
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 6 +++---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 16 +++++++++++++++-
3 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 16039d1..b84f5ea 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -268,7 +268,7 @@ struct qlcnic_fdt {
u16 cksum;
u16 unused;
u8 model[16];
- u16 mfg_id;
+ u8 mfg_id;
u16 id;
u8 flag;
u8 erase_cmd;
@@ -2362,6 +2362,19 @@ static inline u32 qlcnic_get_vnic_func_count(struct qlcnic_adapter *adapter)
return QLC_DEFAULT_VNIC_COUNT;
}
+static inline void qlcnic_swap32_buffer(u32 *buffer, int count)
+{
+#if defined(__BIG_ENDIAN)
+ u32 *tmp = buffer;
+ int i;
+
+ for (i = 0; i < count; i++) {
+ *tmp = swab32(*tmp);
+ tmp++;
+ }
+#endif
+}
+
#ifdef CONFIG_QLCNIC_HWMON
void qlcnic_register_hwmon_dev(struct qlcnic_adapter *);
void qlcnic_unregister_hwmon_dev(struct qlcnic_adapter *);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index a4a4ec0..476e499 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -2603,7 +2603,7 @@ int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *adapter,
}
qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_DIRECT_WINDOW,
- (addr));
+ (addr & 0xFFFF0000));
range = flash_offset + (count * sizeof(u32));
/* Check if data is spread across multiple sectors */
@@ -2753,7 +2753,7 @@ int qlcnic_83xx_read_flash_descriptor_table(struct qlcnic_adapter *adapter)
ret = qlcnic_83xx_lockless_flash_read32(adapter, QLCNIC_FDT_LOCATION,
(u8 *)&adapter->ahw->fdt,
count);
-
+ qlcnic_swap32_buffer((u32 *)&adapter->ahw->fdt, count);
qlcnic_83xx_unlock_flash(adapter);
return ret;
}
@@ -2788,7 +2788,7 @@ int qlcnic_83xx_erase_flash_sector(struct qlcnic_adapter *adapter,
addr1 = (sector_start_addr & 0xFF) << 16;
addr2 = (sector_start_addr & 0xFF0000) >> 16;
- reversed_addr = addr1 | addr2;
+ reversed_addr = addr1 | addr2 | (sector_start_addr & 0xFF00);
qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA,
reversed_addr);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
index f5786d5..59a721f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
@@ -280,6 +280,7 @@ static ssize_t qlcnic_sysfs_read_crb(struct file *filp, struct kobject *kobj,
if (ret != 0)
return ret;
qlcnic_read_crb(adapter, buf, offset, size);
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
return size;
}
@@ -296,6 +297,7 @@ static ssize_t qlcnic_sysfs_write_crb(struct file *filp, struct kobject *kobj,
if (ret != 0)
return ret;
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
qlcnic_write_crb(adapter, buf, offset, size);
return size;
}
@@ -329,6 +331,7 @@ static ssize_t qlcnic_sysfs_read_mem(struct file *filp, struct kobject *kobj,
return -EIO;
memcpy(buf, &data, size);
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
return size;
}
@@ -346,6 +349,7 @@ static ssize_t qlcnic_sysfs_write_mem(struct file *filp, struct kobject *kobj,
if (ret != 0)
return ret;
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
memcpy(&data, buf, size);
if (qlcnic_pci_mem_write_2M(adapter, offset, data))
@@ -412,6 +416,7 @@ static ssize_t qlcnic_sysfs_write_pm_config(struct file *filp,
if (rem)
return QL_STATUS_INVALID_PARAM;
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
pm_cfg = (struct qlcnic_pm_func_cfg *)buf;
ret = validate_pm_config(adapter, pm_cfg, count);
@@ -474,6 +479,7 @@ static ssize_t qlcnic_sysfs_read_pm_config(struct file *filp,
pm_cfg[pci_func].dest_npar = 0;
pm_cfg[pci_func].pci_func = i;
}
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
return size;
}
@@ -555,6 +561,7 @@ static ssize_t qlcnic_sysfs_write_esw_config(struct file *file,
if (rem)
return QL_STATUS_INVALID_PARAM;
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
esw_cfg = (struct qlcnic_esw_func_cfg *)buf;
ret = validate_esw_config(adapter, esw_cfg, count);
if (ret)
@@ -649,6 +656,7 @@ static ssize_t qlcnic_sysfs_read_esw_config(struct file *file,
if (qlcnic_get_eswitch_port_config(adapter, &esw_cfg[pci_func]))
return QL_STATUS_INVALID_PARAM;
}
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
return size;
}
@@ -688,6 +696,7 @@ static ssize_t qlcnic_sysfs_write_npar_config(struct file *file,
if (rem)
return QL_STATUS_INVALID_PARAM;
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
np_cfg = (struct qlcnic_npar_func_cfg *)buf;
ret = validate_npar_config(adapter, np_cfg, count);
if (ret)
@@ -759,6 +768,7 @@ static ssize_t qlcnic_sysfs_read_npar_config(struct file *file,
np_cfg[pci_func].max_tx_queues = nic_info.max_tx_ques;
np_cfg[pci_func].max_rx_queues = nic_info.max_rx_ques;
}
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
return size;
}
@@ -916,6 +926,7 @@ static ssize_t qlcnic_sysfs_read_pci_config(struct file *file,
pci_cfg = (struct qlcnic_pci_func_cfg *)buf;
count = size / sizeof(struct qlcnic_pci_func_cfg);
+ qlcnic_swap32_buffer((u32 *)pci_info, size / sizeof(u32));
for (i = 0; i < count; i++) {
pci_cfg[i].pci_func = pci_info[i].id;
pci_cfg[i].func_type = pci_info[i].type;
@@ -969,6 +980,7 @@ static ssize_t qlcnic_83xx_sysfs_flash_read_handler(struct file *filp,
}
qlcnic_83xx_unlock_flash(adapter);
+ qlcnic_swap32_buffer((u32 *)p_read_buf, count);
memcpy(buf, p_read_buf, size);
kfree(p_read_buf);
@@ -986,9 +998,10 @@ static int qlcnic_83xx_sysfs_flash_bulk_write(struct qlcnic_adapter *adapter,
if (!p_cache)
return -ENOMEM;
+ count = size / sizeof(u32);
+ qlcnic_swap32_buffer((u32 *)buf, count);
memcpy(p_cache, buf, size);
p_src = p_cache;
- count = size / sizeof(u32);
if (qlcnic_83xx_lock_flash(adapter) != 0) {
kfree(p_cache);
@@ -1053,6 +1066,7 @@ static int qlcnic_83xx_sysfs_flash_write(struct qlcnic_adapter *adapter,
if (!p_cache)
return -ENOMEM;
+ qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
memcpy(p_cache, buf, size);
p_src = p_cache;
count = size / sizeof(u32);
--
1.5.6
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 2/3] qlcnic: Fix endianess issue in FW dump template header
2014-08-18 13:31 [PATCH net 0/3] qlcnic: Bug fixes Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 1/3] qlcnic: Fix flash access interface to application Shahed Shaikh
@ 2014-08-18 13:31 ` Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 3/3] qlcnic: Fix endianess issue in firmware load from file operation Shahed Shaikh
2014-08-22 0:43 ` [PATCH net 0/3] qlcnic: Bug fixes David Miller
3 siblings, 0 replies; 15+ messages in thread
From: Shahed Shaikh @ 2014-08-18 13:31 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept-HSGLinuxNICDev, Rajesh Borundia
From: Rajesh Borundia <rajesh.borundia@qlogic.com>
Firmware dump template header is read from adapter using
readl() which swaps the data. So, adjust structure
element on the boundary of 32bit dword.
Signed-off-by: Rajesh Borundia <rajesh.borundia@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
.../net/ethernet/qlogic/qlcnic/qlcnic_minidump.c | 57 ++++++++++++++++++++
1 files changed, 57 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
index e46fc39..c9f57fb 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
@@ -47,15 +47,26 @@ struct qlcnic_common_entry_hdr {
u32 type;
u32 offset;
u32 cap_size;
+#if defined(__LITTLE_ENDIAN)
u8 mask;
u8 rsvd[2];
u8 flags;
+#else
+ u8 flags;
+ u8 rsvd[2];
+ u8 mask;
+#endif
} __packed;
struct __crb {
u32 addr;
+#if defined(__LITTLE_ENDIAN)
u8 stride;
u8 rsvd1[3];
+#else
+ u8 rsvd1[3];
+ u8 stride;
+#endif
u32 data_size;
u32 no_ops;
u32 rsvd2[4];
@@ -63,15 +74,28 @@ struct __crb {
struct __ctrl {
u32 addr;
+#if defined(__LITTLE_ENDIAN)
u8 stride;
u8 index_a;
u16 timeout;
+#else
+ u16 timeout;
+ u8 index_a;
+ u8 stride;
+#endif
u32 data_size;
u32 no_ops;
+#if defined(__LITTLE_ENDIAN)
u8 opcode;
u8 index_v;
u8 shl_val;
u8 shr_val;
+#else
+ u8 shr_val;
+ u8 shl_val;
+ u8 index_v;
+ u8 opcode;
+#endif
u32 val1;
u32 val2;
u32 val3;
@@ -79,16 +103,27 @@ struct __ctrl {
struct __cache {
u32 addr;
+#if defined(__LITTLE_ENDIAN)
u16 stride;
u16 init_tag_val;
+#else
+ u16 init_tag_val;
+ u16 stride;
+#endif
u32 size;
u32 no_ops;
u32 ctrl_addr;
u32 ctrl_val;
u32 read_addr;
+#if defined(__LITTLE_ENDIAN)
u8 read_addr_stride;
u8 read_addr_num;
u8 rsvd1[2];
+#else
+ u8 rsvd1[2];
+ u8 read_addr_num;
+ u8 read_addr_stride;
+#endif
} __packed;
struct __ocm {
@@ -122,23 +157,39 @@ struct __mux {
struct __queue {
u32 sel_addr;
+#if defined(__LITTLE_ENDIAN)
u16 stride;
u8 rsvd[2];
+#else
+ u8 rsvd[2];
+ u16 stride;
+#endif
u32 size;
u32 no_ops;
u8 rsvd2[8];
u32 read_addr;
+#if defined(__LITTLE_ENDIAN)
u8 read_addr_stride;
u8 read_addr_cnt;
u8 rsvd3[2];
+#else
+ u8 rsvd3[2];
+ u8 read_addr_cnt;
+ u8 read_addr_stride;
+#endif
} __packed;
struct __pollrd {
u32 sel_addr;
u32 read_addr;
u32 sel_val;
+#if defined(__LITTLE_ENDIAN)
u16 sel_val_stride;
u16 no_ops;
+#else
+ u16 no_ops;
+ u16 sel_val_stride;
+#endif
u32 poll_wait;
u32 poll_mask;
u32 data_size;
@@ -153,9 +204,15 @@ struct __mux2 {
u32 no_ops;
u32 sel_val_mask;
u32 read_addr;
+#if defined(__LITTLE_ENDIAN)
u8 sel_val_stride;
u8 data_size;
u8 rsvd[2];
+#else
+ u8 rsvd[2];
+ u8 data_size;
+ u8 sel_val_stride;
+#endif
} __packed;
struct __pollrdmwr {
--
1.5.6
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 3/3] qlcnic: Fix endianess issue in firmware load from file operation
2014-08-18 13:31 [PATCH net 0/3] qlcnic: Bug fixes Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 1/3] qlcnic: Fix flash access interface to application Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 2/3] qlcnic: Fix endianess issue in FW dump template header Shahed Shaikh
@ 2014-08-18 13:31 ` Shahed Shaikh
2014-08-22 0:43 ` [PATCH net 0/3] qlcnic: Bug fixes David Miller
3 siblings, 0 replies; 15+ messages in thread
From: Shahed Shaikh @ 2014-08-18 13:31 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept-HSGLinuxNICDev, Shahed Shaikh
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Firmware binary file is in little endian. On big-endian architecture, while
writing this binary FW file to adapters memory, writel() swaps the data resulting into
corruption of FW image. So, swap the data before writing into adapters memory.
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 35 ++++++++++++++------
1 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index f33559b..86783e1 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -1378,31 +1378,45 @@ static int qlcnic_83xx_copy_fw_file(struct qlcnic_adapter *adapter)
{
struct qlc_83xx_fw_info *fw_info = adapter->ahw->fw_info;
const struct firmware *fw = fw_info->fw;
- u32 dest, *p_cache;
+ u32 dest, *p_cache, *temp;
int i, ret = -EIO;
+ __le32 *temp_le;
u8 data[16];
size_t size;
u64 addr;
+ temp = kzalloc(fw->size, GFP_KERNEL);
+ if (!temp) {
+ release_firmware(fw);
+ fw_info->fw = NULL;
+ return -ENOMEM;
+ }
+
+ temp_le = (__le32 *)fw->data;
+
+ /* FW image in file is in little endian, swap the data to nullify
+ * the effect of writel() operation on big endian platform.
+ */
+ for (i = 0; i < fw->size / sizeof(u32); i++)
+ temp[i] = __le32_to_cpu(temp_le[i]);
+
dest = QLCRDX(adapter->ahw, QLCNIC_FW_IMAGE_ADDR);
size = (fw->size & ~0xF);
- p_cache = (u32 *)fw->data;
+ p_cache = temp;
addr = (u64)dest;
ret = qlcnic_ms_mem_write128(adapter, addr,
p_cache, size / 16);
if (ret) {
dev_err(&adapter->pdev->dev, "MS memory write failed\n");
- release_firmware(fw);
- fw_info->fw = NULL;
- return -EIO;
+ goto exit;
}
/* alignment check */
if (fw->size & 0xF) {
addr = dest + size;
for (i = 0; i < (fw->size & 0xF); i++)
- data[i] = fw->data[size + i];
+ data[i] = temp[size + i];
for (; i < 16; i++)
data[i] = 0;
ret = qlcnic_ms_mem_write128(adapter, addr,
@@ -1410,15 +1424,16 @@ static int qlcnic_83xx_copy_fw_file(struct qlcnic_adapter *adapter)
if (ret) {
dev_err(&adapter->pdev->dev,
"MS memory write failed\n");
- release_firmware(fw);
- fw_info->fw = NULL;
- return -EIO;
+ goto exit;
}
}
+
+exit:
release_firmware(fw);
fw_info->fw = NULL;
+ kfree(temp);
- return 0;
+ return ret;
}
static void qlcnic_83xx_dump_pause_control_regs(struct qlcnic_adapter *adapter)
--
1.5.6
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH net 0/3] qlcnic: Bug fixes
2014-08-18 13:31 [PATCH net 0/3] qlcnic: Bug fixes Shahed Shaikh
` (2 preceding siblings ...)
2014-08-18 13:31 ` [PATCH net 3/3] qlcnic: Fix endianess issue in firmware load from file operation Shahed Shaikh
@ 2014-08-22 0:43 ` David Miller
3 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2014-08-22 0:43 UTC (permalink / raw)
To: shahed.shaikh; +Cc: netdev, Dept-HSGLinuxNICDev
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Date: Mon, 18 Aug 2014 09:31:52 -0400
> This series fixes some bugs related to endianess.
>
> Please apply this series to net.
Series applied, thanks.
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 0/3] qlcnic: bug fixes
@ 2016-08-03 8:02 Manish Chopra
2016-08-03 19:03 ` David Miller
0 siblings, 1 reply; 15+ messages in thread
From: Manish Chopra @ 2016-08-03 8:02 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept-GELinuxNICDev
Hi David,
This series fixes a data structure corruption bug in
VF's async mailbox commands handling and an issue realted
to napi poll budget in the driver.
Please consider applying this series to "net"
Thanks,
Manish
Manish Chopra (3):
qlcnic: fix data structure corruption in async mbx command handling
qlcnic: fix napi budget alteration
qlcnic: Update version to 5.3.65
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 4 +-
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 2 -
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h | 9 +-
.../ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 95 +++++++++++--------
4 files changed, 62 insertions(+), 48 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 0/3] qlcnic: bug fixes
2016-08-03 8:02 [PATCH net 0/3] qlcnic: bug fixes Manish Chopra
@ 2016-08-03 19:03 ` David Miller
0 siblings, 0 replies; 15+ messages in thread
From: David Miller @ 2016-08-03 19:03 UTC (permalink / raw)
To: manish.chopra; +Cc: netdev, Dept-GELinuxNICDev
From: Manish Chopra <manish.chopra@qlogic.com>
Date: Wed, 3 Aug 2016 04:02:01 -0400
> This series fixes a data structure corruption bug in
> VF's async mailbox commands handling and an issue realted
> to napi poll budget in the driver.
>
> Please consider applying this series to "net"
Series applied, thanks.
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2016-08-03 19:03 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-18 13:31 [PATCH net 0/3] qlcnic: Bug fixes Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 1/3] qlcnic: Fix flash access interface to application Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 2/3] qlcnic: Fix endianess issue in FW dump template header Shahed Shaikh
2014-08-18 13:31 ` [PATCH net 3/3] qlcnic: Fix endianess issue in firmware load from file operation Shahed Shaikh
2014-08-22 0:43 ` [PATCH net 0/3] qlcnic: Bug fixes David Miller
-- strict thread matches above, loose matches on Subject: below --
2016-08-03 8:02 [PATCH net 0/3] qlcnic: bug fixes Manish Chopra
2016-08-03 19:03 ` David Miller
2014-08-04 15:51 [PATCH net 0/3] qlcnic: Bug fixes Rajesh Borundia
2014-08-05 23:24 ` David Miller
2013-08-15 12:29 [PATCH net 0/3] qlcnic: bug fixes Sucheta Chakraborty
2013-08-15 21:35 ` David Miller
2013-05-21 19:26 [PATCH net 0/3] qlcnic: Bug fixes Shahed Shaikh
2013-05-22 21:52 ` David Miller
2013-04-18 18:10 Shahed Shaikh
2013-04-18 18:55 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).