mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 16:11:45 +00:00
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
1 changed files with 7 additions and 0 deletions
|
@ -30,6 +30,7 @@ cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
|
||||||
u32 *bfi_image_size, char *fw_name)
|
u32 *bfi_image_size, char *fw_name)
|
||||||
{
|
{
|
||||||
const struct firmware *fw;
|
const struct firmware *fw;
|
||||||
|
u32 n;
|
||||||
|
|
||||||
if (request_firmware(&fw, fw_name, &pdev->dev)) {
|
if (request_firmware(&fw, fw_name, &pdev->dev)) {
|
||||||
pr_alert("Can't locate firmware %s\n", fw_name);
|
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_image_size = fw->size/sizeof(u32);
|
||||||
bfi_fw = fw;
|
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;
|
return *bfi_image;
|
||||||
error:
|
error:
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue