summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCindy H Kao <cindy.h.kao@intel.com>2009-10-02 19:31:17 -0700
committerInaky Perez-Gonzalez <inaky@linux.intel.com>2009-10-19 15:56:16 +0900
commit28cff50d99ce9a1db65b7d4dcdcc0f1f8d9f9309 (patch)
tree67c39a2383a8eba76e7c036c6d85dbbd86399a08
parent6f4fc90a36fbe87e3003b3f7c8090ecc89bd1353 (diff)
downloadblackbird-op-linux-28cff50d99ce9a1db65b7d4dcdcc0f1f8d9f9309.tar.gz
blackbird-op-linux-28cff50d99ce9a1db65b7d4dcdcc0f1f8d9f9309.zip
wimax/i2400m: change the bcf_len to exclude the extended header size
The actual fw->size may not equal to the bcf size indicated in the bcf header if the extended bcf debug header is added in the tail. To reflect the actual fw size that will be downloaded to the device, it is now retrived from from the size field indicated in the bcf header. All of the headers (if there are extended headers) should indicate same value for the size field since only one set of firmware chunks is downloaded Signed-off-by: Cindy H Kao <cindy.h.kao@intel.com>
-rw-r--r--drivers/net/wimax/i2400m/fw.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c
index 97ea78406725..fda54bfdf70e 100644
--- a/drivers/net/wimax/i2400m/fw.c
+++ b/drivers/net/wimax/i2400m/fw.c
@@ -1388,15 +1388,16 @@ const struct i2400m_bcf_hdr *i2400m_bcf_hdr_find(struct i2400m *i2400m)
*/
static
int i2400m_fw_dnload(struct i2400m *i2400m, const struct i2400m_bcf_hdr *bcf,
- size_t bcf_size, enum i2400m_bri flags)
+ size_t fw_size, enum i2400m_bri flags)
{
int ret = 0;
struct device *dev = i2400m_dev(i2400m);
int count = i2400m->bus_bm_retries;
const struct i2400m_bcf_hdr *bcf_hdr;
+ size_t bcf_size;
- d_fnstart(5, dev, "(i2400m %p bcf %p size %zu)\n",
- i2400m, bcf, bcf_size);
+ d_fnstart(5, dev, "(i2400m %p bcf %p fw size %zu)\n",
+ i2400m, bcf, fw_size);
i2400m->boot_mode = 1;
wmb(); /* Make sure other readers see it */
hw_reboot:
@@ -1434,6 +1435,12 @@ hw_reboot:
if (ret < 0)
goto error_dnload_init;
+ /*
+ * bcf_size refers to one header size plus the fw sections size
+ * indicated by the header,ie. if there are other extended headers
+ * at the tail, they are not counted
+ */
+ bcf_size = sizeof(u32) * le32_to_cpu(bcf_hdr->size);
ret = i2400m_dnload_bcf(i2400m, bcf, bcf_size);
if (ret == -ERESTARTSYS)
goto error_dev_rebooted;
@@ -1464,7 +1471,7 @@ error_bcf_hdr_find:
error_bootrom_init:
error_too_many_reboots:
d_fnend(5, dev, "(i2400m %p bcf %p size %zu) = %d\n",
- i2400m, bcf, bcf_size, ret);
+ i2400m, bcf, fw_size, ret);
return ret;
error_dev_rebooted:
OpenPOWER on IntegriCloud