diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/spider_net.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c index 2154469678b7..94e238f6ed31 100644 --- a/drivers/net/spider_net.c +++ b/drivers/net/spider_net.c | |||
@@ -1895,16 +1895,27 @@ spider_net_download_firmware(struct spider_net_card *card, | |||
1895 | static int | 1895 | static int |
1896 | spider_net_init_firmware(struct spider_net_card *card) | 1896 | spider_net_init_firmware(struct spider_net_card *card) |
1897 | { | 1897 | { |
1898 | const struct firmware *firmware; | 1898 | struct firmware *firmware; |
1899 | struct device_node *dn; | ||
1900 | u8 *fw_prop; | ||
1899 | int err = -EIO; | 1901 | int err = -EIO; |
1900 | 1902 | ||
1901 | if (request_firmware(&firmware, | 1903 | if (request_firmware((const struct firmware **)&firmware, |
1902 | SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) < 0) { | 1904 | SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) < 0) { |
1903 | if (netif_msg_probe(card)) | 1905 | if (netif_msg_probe(card)) |
1904 | pr_err("Couldn't read in sequencer data file %s.\n", | 1906 | pr_err("Couldn't read in sequencer data file %s.\n", |
1905 | SPIDER_NET_FIRMWARE_NAME); | 1907 | SPIDER_NET_FIRMWARE_NAME); |
1906 | firmware = NULL; | 1908 | |
1907 | goto out; | 1909 | dn = pci_device_to_OF_node(card->pdev); |
1910 | if (!dn) | ||
1911 | goto out; | ||
1912 | |||
1913 | fw_prop = (u8 *)get_property(dn, "firmware", NULL); | ||
1914 | if (!fw_prop) | ||
1915 | goto out; | ||
1916 | |||
1917 | memcpy(firmware->data, fw_prop, 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32)); | ||
1918 | firmware->size = 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32); | ||
1908 | } | 1919 | } |
1909 | 1920 | ||
1910 | if (firmware->size != 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32)) { | 1921 | if (firmware->size != 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32)) { |