Skip to content

Commit

Permalink
qlcnic: Add support for 84xx adapters to load firmware from file
Browse files Browse the repository at this point in the history
o Use appropriate firmware image file name based on device IDs.

Signed-off-by: Pratik Pujar <pratik.pujar@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Pratik Pujar authored and David S. Miller committed Aug 20, 2013
1 parent 77bead4 commit fef349c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
2 changes: 2 additions & 0 deletions drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,11 @@
/* Firmware image definitions */
#define QLC_83XX_BOOTLOADER_FLASH_ADDR 0x10000
#define QLC_83XX_FW_FILE_NAME "83xx_fw.bin"
#define QLC_84XX_FW_FILE_NAME "84xx_fw.bin"
#define QLC_83XX_BOOT_FROM_FLASH 0
#define QLC_83XX_BOOT_FROM_FILE 0x12345678

#define QLC_FW_FILE_NAME_LEN 20
#define QLC_83XX_MAX_RESET_SEQ_ENTRIES 16

#define QLC_83XX_MBX_POST_BC_OP 0x1
Expand Down
28 changes: 26 additions & 2 deletions drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1948,12 +1948,36 @@ static void qlcnic_83xx_init_hw(struct qlcnic_adapter *p_dev)
dev_err(&p_dev->pdev->dev, "%s: failed\n", __func__);
}

static inline void qlcnic_83xx_get_fw_file_name(struct qlcnic_adapter *adapter,
char *file_name)
{
struct pci_dev *pdev = adapter->pdev;

memset(file_name, 0, QLC_FW_FILE_NAME_LEN);

switch (pdev->device) {
case PCI_DEVICE_ID_QLOGIC_QLE834X:
strncpy(file_name, QLC_83XX_FW_FILE_NAME,
QLC_FW_FILE_NAME_LEN);
break;
case PCI_DEVICE_ID_QLOGIC_QLE844X:
strncpy(file_name, QLC_84XX_FW_FILE_NAME,
QLC_FW_FILE_NAME_LEN);
break;
default:
dev_err(&pdev->dev, "%s: Invalid device id\n",
__func__);
}
}

static int qlcnic_83xx_load_fw_image_from_host(struct qlcnic_adapter *adapter)
{
char fw_file_name[QLC_FW_FILE_NAME_LEN];
int err = -EIO;

if (request_firmware(&adapter->ahw->fw_info.fw,
QLC_83XX_FW_FILE_NAME, &(adapter->pdev->dev))) {
qlcnic_83xx_get_fw_file_name(adapter, fw_file_name);
if (request_firmware(&adapter->ahw->fw_info.fw, fw_file_name,
&(adapter->pdev->dev))) {
dev_err(&adapter->pdev->dev,
"No file FW image, loading flash FW image.\n");
QLC_SHARED_REG_WR32(adapter, QLCNIC_FW_IMG_VALID,
Expand Down

0 comments on commit fef349c

Please sign in to comment.