Skip to content

Commit

Permalink
[PATCH] spidernet: read firmware from the OF device tree
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Arnd Bergmann authored and Jeff Garzik committed Jan 17, 2006
1 parent 0d3ea16 commit 030d675
Showing 1 changed file with 15 additions and 4 deletions.
19 changes: 15 additions & 4 deletions drivers/net/spider_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand Down

0 comments on commit 030d675

Please sign in to comment.