Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 303573
b: refs/heads/master
c: b412284
h: refs/heads/master
i:
  303571: 13d5a76
v: v3
  • Loading branch information
Greg Kroah-Hartman committed Apr 20, 2012
1 parent 92d2658 commit 60c363b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 68980793b283a66488d8949b5cd7a2f09e8f874f
refs/heads/master: b412284b969845615e860001b2f34614ece1d576
59 changes: 18 additions & 41 deletions trunk/drivers/usb/misc/emi26.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,14 @@ static int emi26_load_firmware (struct usb_device *dev)
const struct firmware *bitstream_fw = NULL;
const struct firmware *firmware_fw = NULL;
const struct ihex_binrec *rec;
int err;
int err = -ENOMEM;
int i;
__u32 addr; /* Address to write */
__u8 *buf;

buf = kmalloc(FW_LOAD_SIZE, GFP_KERNEL);
if (!buf) {
dev_err(&dev->dev, "%s - error loading firmware: error = %d\n",
__func__, -ENOMEM);
err = -ENOMEM;
if (!buf)
goto wraperr;
}

err = request_ihex_firmware(&loader_fw, "emi26/loader.fw", &dev->dev);
if (err)
Expand All @@ -111,31 +107,24 @@ static int emi26_load_firmware (struct usb_device *dev)

/* Assert reset (stop the CPU in the EMI) */
err = emi26_set_reset(dev,1);
if (err < 0) {
dev_err(&dev->dev,"%s - error loading firmware: error = %d\n",
__func__, err);
if (err < 0)
goto wraperr;
}

rec = (const struct ihex_binrec *)loader_fw->data;
/* 1. We need to put the loader for the FPGA into the EZ-USB */
while (rec) {
err = emi26_writememory(dev, be32_to_cpu(rec->addr),
rec->data, be16_to_cpu(rec->len),
ANCHOR_LOAD_INTERNAL);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}
rec = ihex_next_binrec(rec);
}

/* De-assert reset (let the CPU run) */
err = emi26_set_reset(dev,0);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}
msleep(250); /* let device settle */

/* 2. We upload the FPGA firmware into the EMI
Expand All @@ -153,38 +142,30 @@ static int emi26_load_firmware (struct usb_device *dev)
rec = ihex_next_binrec(rec);
}
err = emi26_writememory(dev, addr, buf, i, ANCHOR_LOAD_FPGA);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}
} while (rec);

/* Assert reset (stop the CPU in the EMI) */
err = emi26_set_reset(dev,1);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}

/* 3. We need to put the loader for the firmware into the EZ-USB (again...) */
for (rec = (const struct ihex_binrec *)loader_fw->data;
rec; rec = ihex_next_binrec(rec)) {
err = emi26_writememory(dev, be32_to_cpu(rec->addr),
rec->data, be16_to_cpu(rec->len),
ANCHOR_LOAD_INTERNAL);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}
}
msleep(250); /* let device settle */

/* De-assert reset (let the CPU run) */
err = emi26_set_reset(dev,0);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}

/* 4. We put the part of the firmware that lies in the external RAM into the EZ-USB */

Expand All @@ -194,46 +175,42 @@ static int emi26_load_firmware (struct usb_device *dev)
err = emi26_writememory(dev, be32_to_cpu(rec->addr),
rec->data, be16_to_cpu(rec->len),
ANCHOR_LOAD_EXTERNAL);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}
}
}

/* Assert reset (stop the CPU in the EMI) */
err = emi26_set_reset(dev,1);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}

for (rec = (const struct ihex_binrec *)firmware_fw->data;
rec; rec = ihex_next_binrec(rec)) {
if (INTERNAL_RAM(be32_to_cpu(rec->addr))) {
err = emi26_writememory(dev, be32_to_cpu(rec->addr),
rec->data, be16_to_cpu(rec->len),
ANCHOR_LOAD_INTERNAL);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}
}
}

/* De-assert reset (let the CPU run) */
err = emi26_set_reset(dev,0);
if (err < 0) {
err("%s - error loading firmware: error = %d", __func__, err);
if (err < 0)
goto wraperr;
}
msleep(250); /* let device settle */

/* return 1 to fail the driver inialization
* and give real driver change to load */
err = 1;

wraperr:
if (err < 0)
dev_err(&dev->dev,"%s - error loading firmware: error = %d\n",
__func__, err);

release_firmware(loader_fw);
release_firmware(bitstream_fw);
release_firmware(firmware_fw);
Expand Down

0 comments on commit 60c363b

Please sign in to comment.