lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0680/1039] iwlwifi: recognize missing PNVM data and then log filename
    Date
    From: Luca Coelho <luciano.coelho@intel.com>

    [ Upstream commit 1db385c668d3ccb04ccdb5f0f190fd17b2db29c6 ]

    We can detect that a FW SYSASSERT is due to missing PNVM data by
    checking the assertion code. When this happens, it's is useful for
    the user if we print the filename where the driver is looking for the
    data.

    Add the PNVM missing assertion code to the dump list and print out the
    name of the file we're looking for when this happens.

    Reported-by: Sam Edwards <CFSworks@gmail.com>
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Link: https://lore.kernel.org/r/iwlwifi.20211210090244.1d8725b7518a.I0c36617a7282bd445cda484d97ac4a83022706ee@changeid
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/intel/iwlwifi/fw/dump.c | 9 +++++++++
    drivers/net/wireless/intel/iwlwifi/fw/img.c | 6 +++---
    drivers/net/wireless/intel/iwlwifi/fw/img.h | 4 ++++
    3 files changed, 16 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dump.c b/drivers/net/wireless/intel/iwlwifi/fw/dump.c
    index 016b3a4c5f513..6a37933a02169 100644
    --- a/drivers/net/wireless/intel/iwlwifi/fw/dump.c
    +++ b/drivers/net/wireless/intel/iwlwifi/fw/dump.c
    @@ -12,6 +12,7 @@
    #include "iwl-io.h"
    #include "iwl-prph.h"
    #include "iwl-csr.h"
    +#include "pnvm.h"

    /*
    * Note: This structure is read from the device with IO accesses,
    @@ -147,6 +148,7 @@ static void iwl_fwrt_dump_umac_error_log(struct iwl_fw_runtime *fwrt)
    struct iwl_trans *trans = fwrt->trans;
    struct iwl_umac_error_event_table table = {};
    u32 base = fwrt->trans->dbg.umac_error_event_table;
    + char pnvm_name[MAX_PNVM_NAME];

    if (!base &&
    !(fwrt->trans->dbg.error_event_table_tlv_status &
    @@ -164,6 +166,13 @@ static void iwl_fwrt_dump_umac_error_log(struct iwl_fw_runtime *fwrt)
    fwrt->trans->status, table.valid);
    }

    + if ((table.error_id & ~FW_SYSASSERT_CPU_MASK) ==
    + FW_SYSASSERT_PNVM_MISSING) {
    + iwl_pnvm_get_fs_name(trans, pnvm_name, sizeof(pnvm_name));
    + IWL_ERR(fwrt, "PNVM data is missing, please install %s\n",
    + pnvm_name);
    + }
    +
    IWL_ERR(fwrt, "0x%08X | %s\n", table.error_id,
    iwl_fw_lookup_assert_desc(table.error_id));
    IWL_ERR(fwrt, "0x%08X | umac branchlink1\n", table.blink1);
    diff --git a/drivers/net/wireless/intel/iwlwifi/fw/img.c b/drivers/net/wireless/intel/iwlwifi/fw/img.c
    index 24a9666736913..530674a35eeb2 100644
    --- a/drivers/net/wireless/intel/iwlwifi/fw/img.c
    +++ b/drivers/net/wireless/intel/iwlwifi/fw/img.c
    @@ -1,6 +1,6 @@
    // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
    /*
    - * Copyright(c) 2019 - 2020 Intel Corporation
    + * Copyright(c) 2019 - 2021 Intel Corporation
    */

    #include "img.h"
    @@ -49,10 +49,9 @@ u8 iwl_fw_lookup_notif_ver(const struct iwl_fw *fw, u8 grp, u8 cmd, u8 def)
    }
    EXPORT_SYMBOL_GPL(iwl_fw_lookup_notif_ver);

    -#define FW_SYSASSERT_CPU_MASK 0xf0000000
    static const struct {
    const char *name;
    - u8 num;
    + u32 num;
    } advanced_lookup[] = {
    { "NMI_INTERRUPT_WDG", 0x34 },
    { "SYSASSERT", 0x35 },
    @@ -73,6 +72,7 @@ static const struct {
    { "NMI_INTERRUPT_ACTION_PT", 0x7C },
    { "NMI_INTERRUPT_UNKNOWN", 0x84 },
    { "NMI_INTERRUPT_INST_ACTION_PT", 0x86 },
    + { "PNVM_MISSING", FW_SYSASSERT_PNVM_MISSING },
    { "ADVANCED_SYSASSERT", 0 },
    };

    diff --git a/drivers/net/wireless/intel/iwlwifi/fw/img.h b/drivers/net/wireless/intel/iwlwifi/fw/img.h
    index 993bda17fa309..fa7b1780064c2 100644
    --- a/drivers/net/wireless/intel/iwlwifi/fw/img.h
    +++ b/drivers/net/wireless/intel/iwlwifi/fw/img.h
    @@ -279,4 +279,8 @@ u8 iwl_fw_lookup_cmd_ver(const struct iwl_fw *fw, u8 grp, u8 cmd, u8 def);

    u8 iwl_fw_lookup_notif_ver(const struct iwl_fw *fw, u8 grp, u8 cmd, u8 def);
    const char *iwl_fw_lookup_assert_desc(u32 num);
    +
    +#define FW_SYSASSERT_CPU_MASK 0xf0000000
    +#define FW_SYSASSERT_PNVM_MISSING 0x0010070d
    +
    #endif /* __iwl_fw_img_h__ */
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:40    [W:4.325 / U:0.536 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site