Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fef349ce authored by Pratik Pujar's avatar Pratik Pujar Committed by David S. Miller
Browse files

qlcnic: Add support for 84xx adapters to load firmware from file



o Use appropriate firmware image file name based on device IDs.

Signed-off-by: default avatarPratik Pujar <pratik.pujar@qlogic.com>
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 77bead46
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+26 −2
Original line number Diff line number Diff line
@@ -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,