[PATCH] spidernet: read firmware from the OF device tree
request_firmware() is sometimes problematic, especially in initramfs, reading the firmware from Open Firmware is much preferrable. We still try to get the firmware from the file system first, in order to support old SLOF releases and to allow updates of the spidernet firmware without reflashing the system. From: Jens Osterkamp <Jens.Osterkamp@de.ibm.com> Signed-off-by: Jens Osterkamp <Jens.Osterkamp@de.ibm.com> Signed-off-by: Arnd Bergmann <arndb@de.ibm.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
0d3ea1666f
commit
030d6753f8
|
@ -1895,16 +1895,27 @@ spider_net_download_firmware(struct spider_net_card *card,
|
|||
static int
|
||||
spider_net_init_firmware(struct spider_net_card *card)
|
||||
{
|
||||
const struct firmware *firmware;
|
||||
struct firmware *firmware;
|
||||
struct device_node *dn;
|
||||
u8 *fw_prop;
|
||||
int err = -EIO;
|
||||
|
||||
if (request_firmware(&firmware,
|
||||
if (request_firmware((const struct firmware **)&firmware,
|
||||
SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) < 0) {
|
||||
if (netif_msg_probe(card))
|
||||
pr_err("Couldn't read in sequencer data file %s.\n",
|
||||
SPIDER_NET_FIRMWARE_NAME);
|
||||
firmware = NULL;
|
||||
goto out;
|
||||
|
||||
dn = pci_device_to_OF_node(card->pdev);
|
||||
if (!dn)
|
||||
goto out;
|
||||
|
||||
fw_prop = (u8 *)get_property(dn, "firmware", NULL);
|
||||
if (!fw_prop)
|
||||
goto out;
|
||||
|
||||
memcpy(firmware->data, fw_prop, 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32));
|
||||
firmware->size = 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32);
|
||||
}
|
||||
|
||||
if (firmware->size != 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32)) {
|
||||
|
|
Loading…
Reference in a new issue