diff options
Diffstat (limited to 'drivers/net/wimax/i2400m')
-rw-r--r-- | drivers/net/wimax/i2400m/fw.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c index 92d4d605dc2d..c962a8d8df7e 100644 --- a/drivers/net/wimax/i2400m/fw.c +++ b/drivers/net/wimax/i2400m/fw.c | |||
@@ -509,6 +509,17 @@ error_send: | |||
509 | 509 | ||
510 | 510 | ||
511 | /* | 511 | /* |
512 | * Indicate if the device emitted a reboot barker that indicates | ||
513 | * "signed boot" | ||
514 | */ | ||
515 | static | ||
516 | unsigned i2400m_boot_is_signed(struct i2400m *i2400m) | ||
517 | { | ||
518 | return likely(i2400m->sboot); | ||
519 | } | ||
520 | |||
521 | |||
522 | /* | ||
512 | * Do the final steps of uploading firmware | 523 | * Do the final steps of uploading firmware |
513 | * | 524 | * |
514 | * Depending on the boot mode (signed vs non-signed), different | 525 | * Depending on the boot mode (signed vs non-signed), different |
@@ -529,7 +540,7 @@ int i2400m_dnload_finalize(struct i2400m *i2400m, | |||
529 | 540 | ||
530 | d_fnstart(3, dev, "offset %zu\n", offset); | 541 | d_fnstart(3, dev, "offset %zu\n", offset); |
531 | cmd = (void *) bcf + offset; | 542 | cmd = (void *) bcf + offset; |
532 | if (i2400m->sboot == 0) { | 543 | if (i2400m_boot_is_signed(i2400m) == 0) { |
533 | struct i2400m_bootrom_header jump_ack; | 544 | struct i2400m_bootrom_header jump_ack; |
534 | d_printf(1, dev, "unsecure boot, jumping to 0x%08x\n", | 545 | d_printf(1, dev, "unsecure boot, jumping to 0x%08x\n", |
535 | le32_to_cpu(cmd->target_addr)); | 546 | le32_to_cpu(cmd->target_addr)); |
@@ -846,28 +857,24 @@ int i2400m_dnload_init(struct i2400m *i2400m, const struct i2400m_bcf_hdr *bcf) | |||
846 | { | 857 | { |
847 | int result; | 858 | int result; |
848 | struct device *dev = i2400m_dev(i2400m); | 859 | struct device *dev = i2400m_dev(i2400m); |
849 | u32 module_id = le32_to_cpu(bcf->module_id); | ||
850 | 860 | ||
851 | if (i2400m->sboot == 0 | 861 | if (i2400m_boot_is_signed(i2400m)) { |
852 | && (module_id & I2400M_BCF_MOD_ID_POKES) == 0) { | 862 | d_printf(1, dev, "signed boot\n"); |
853 | /* non-signed boot process without pokes */ | 863 | result = i2400m_dnload_init_signed(i2400m, bcf); |
854 | result = i2400m_dnload_init_nonsigned(i2400m); | ||
855 | if (result == -ERESTARTSYS) | 864 | if (result == -ERESTARTSYS) |
856 | return result; | 865 | return result; |
857 | if (result < 0) | 866 | if (result < 0) |
858 | dev_err(dev, "fw %s: non-signed download " | 867 | dev_err(dev, "firmware %s: signed boot download " |
859 | "initialization failed: %d\n", | 868 | "initialization failed: %d\n", |
860 | i2400m->fw_name, result); | 869 | i2400m->fw_name, result); |
861 | } else if (i2400m->sboot == 0 | 870 | } else { |
862 | && (module_id & I2400M_BCF_MOD_ID_POKES)) { | 871 | /* non-signed boot process without pokes */ |
863 | /* non-signed boot process with pokes, nothing to do */ | 872 | d_printf(1, dev, "non-signed boot\n"); |
864 | result = 0; | 873 | result = i2400m_dnload_init_nonsigned(i2400m); |
865 | } else { /* signed boot process */ | ||
866 | result = i2400m_dnload_init_signed(i2400m, bcf); | ||
867 | if (result == -ERESTARTSYS) | 874 | if (result == -ERESTARTSYS) |
868 | return result; | 875 | return result; |
869 | if (result < 0) | 876 | if (result < 0) |
870 | dev_err(dev, "fw %s: signed boot download " | 877 | dev_err(dev, "firmware %s: non-signed download " |
871 | "initialization failed: %d\n", | 878 | "initialization failed: %d\n", |
872 | i2400m->fw_name, result); | 879 | i2400m->fw_name, result); |
873 | } | 880 | } |