|
@@ -720,14 +720,17 @@ ssize_t i2400m_dnload_bcf(struct i2400m *i2400m,
|
|
"downloading section #%zu (@%zu %zu B) to 0x%08x\n",
|
|
"downloading section #%zu (@%zu %zu B) to 0x%08x\n",
|
|
section, offset, sizeof(*bh) + data_size,
|
|
section, offset, sizeof(*bh) + data_size,
|
|
le32_to_cpu(bh->target_addr));
|
|
le32_to_cpu(bh->target_addr));
|
|
- if (i2400m_brh_get_opcode(bh) == I2400M_BRH_SIGNED_JUMP) {
|
|
|
|
- /* Secure boot needs to stop here */
|
|
|
|
- d_printf(5, dev, "signed jump found @%zu\n", offset);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * We look for JUMP cmd from the bootmode header,
|
|
|
|
+ * either I2400M_BRH_SIGNED_JUMP for secure boot
|
|
|
|
+ * or I2400M_BRH_JUMP for unsecure boot, the last chunk
|
|
|
|
+ * should be the bootmode header with JUMP cmd.
|
|
|
|
+ */
|
|
|
|
+ if (i2400m_brh_get_opcode(bh) == I2400M_BRH_SIGNED_JUMP ||
|
|
|
|
+ i2400m_brh_get_opcode(bh) == I2400M_BRH_JUMP) {
|
|
|
|
+ d_printf(5, dev, "jump found @%zu\n", offset);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- if (offset + section_size == bcf_len)
|
|
|
|
- /* Non-secure boot stops here */
|
|
|
|
- break;
|
|
|
|
if (offset + section_size > bcf_len) {
|
|
if (offset + section_size > bcf_len) {
|
|
dev_err(dev, "fw %s: bad section #%zu, "
|
|
dev_err(dev, "fw %s: bad section #%zu, "
|
|
"end (@%zu) beyond EOF (@%zu)\n",
|
|
"end (@%zu) beyond EOF (@%zu)\n",
|