mirror of https://gitee.com/openkylin/linux.git
bna: fix firmware loading on big-endian machines
Firmware required by bna is stored in appropriate files as sequence of LE32 integers. After loading by request_firmware() they need to be byte-swapped on big-endian arches. Without this conversion the NIC is unusable on big-endian machines. Cc: Rasesh Mody <rasesh.mody@qlogic.com> Signed-off-by: Ivan Vecera <ivecera@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
50dce303d0
commit
e236b95423
|
@ -30,6 +30,7 @@ cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
|
|||
u32 *bfi_image_size, char *fw_name)
|
||||
{
|
||||
const struct firmware *fw;
|
||||
u32 n;
|
||||
|
||||
if (request_firmware(&fw, fw_name, &pdev->dev)) {
|
||||
pr_alert("Can't locate firmware %s\n", fw_name);
|
||||
|
@ -40,6 +41,12 @@ cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
|
|||
*bfi_image_size = fw->size/sizeof(u32);
|
||||
bfi_fw = fw;
|
||||
|
||||
/* Convert loaded firmware to host order as it is stored in file
|
||||
* as sequence of LE32 integers.
|
||||
*/
|
||||
for (n = 0; n < *bfi_image_size; n++)
|
||||
le32_to_cpus(*bfi_image + n);
|
||||
|
||||
return *bfi_image;
|
||||
error:
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue