ATH10K Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Kalle Valo <kvalo@qca.qualcomm.com>
To: Ben Greear <greearb@candelatech.com>
Cc: linux-wireless@vger.kernel.org, ath10k@lists.infradead.org
Subject: Re: [PATCH 1/4] ath10k:  provide firmware crash info via debugfs.
Date: Fri, 6 Jun 2014 09:10:15 +0300	[thread overview]
Message-ID: <87wqcumuuw.fsf@kamboji.qca.qualcomm.com> (raw)
In-Reply-To: <5390B632.7030305@candelatech.com> (Ben Greear's message of "Thu,  5 Jun 2014 11:25:54 -0700")

Ben Greear <greearb@candelatech.com> writes:

> On 06/05/2014 09:18 AM, Kalle Valo wrote:
>
>>> +struct ath10k_tlv_dump_data {
>>> +	u32 type; /* see ath10k_fw_error_dump_type above */
>>> +	u32 tlv_len; /* in bytes */
>>> +	u8 tlv_data[]; /* Pad to 32-bit boundaries as needed. */
>>> +} __packed;
>>> +
>>> +struct ath10k_dump_file_data {
>>> +	/* Dump file information */
>>> +	u32 len;
>>> +	u32 magic; /* 0x01020304, tells us byte-order of host if we care */
>>> +	u32 version; /* File dump version, 1 for now. */
>> 
>> Actually I would prefer to have magic first and have ASCII string as
>> string, for example "ATH10K-FW-DUMP".
>
> I'd like magic number to stay, was planning to use it to detect byte
> ordering (ie, dumps might come from various different platforms, to
> be decoded on some different platform).

If you want to know the endianess, I would prefer to do it the proper
way, for example something like this:

#ifdef __BIG_ENDIAN
        dump_data->big_endian = 1;
#else
        dump_data->big_endian = 0;
#endif

>>> +	/* Some info we can get from ath10k struct that might help. */
>>> +	u32 chip_id;
>>> +	u32 target_version;
>> 
>> bus_type or something like that would be good to add already now.
>
> Can you be more specific on what info you want here?  I don't see
> any mention of bus_type in the ath10k dir.

I was thinking of adding a new field named "bus_type" which will contain
just zero for now. This is so that we don't need to make any changes to
the format if/when we add a new bus along with pci.

>>> +	u32 fw_version_minor;
>>> +	u16 fw_version_release;
>>> +	u16 fw_version_build;
>>> +	u32 phy_capability;
>>> +	u32 hw_min_tx_power;
>>> +	u32 hw_max_tx_power;
>>> +	u32 ht_cap_info;
>>> +	u32 vht_cap_info;
>>> +	u32 num_rf_chains;
>>> +	char fw_ver[64]; /* Firmware version string */
>> 
>> Can we reuse ETHTOOL_FWVERS_LEN? cfg80211 already uses that.
>> 
>> #define ETHTOOL_FWVERS_LEN	32
>
> I prefer not to..that way, firmware format will remain the same even if
> the kernel changes the fwvers-len some day.

That is defined in the ethtool user space interface so changing that
would break a lot of things. And also used by cfg80211 and other
drivers. I would prefer to be consistent here and use
ETHTOOL_FWVERS_LEN.

>>> @@ -488,6 +555,12 @@ struct ath10k {
>>>  
>>>  	struct dfs_pattern_detector *dfs_detector;
>>>  
>>> +	/* Used for crash-dump storage */
>>> +	/* Don't over-write dump info until someone reads the data. */
>>> +	bool crashed_since_read;
>>> +	struct ath10k_dbglog_entry_storage dbglog_entry_data;
>>> +	u32 reg_dump_values[REG_DUMP_COUNT_QCA988X];
>> 
>> I think these should be in struct ath10k_debug.
>
> I did not do this because I figure we will want ethtool support w/out
> forcing debugfs to be enabled someday soon.

When we add ethtool support, it's easy to move these back. And then we
need to move the code out from debug.c anyway.

>>> +void ath10k_dbg_save_fw_dbg_buffer(struct ath10k *ar, u8 *buffer, int len)
>>> +{
>>> +	int i;
>>> +	int z = ar->dbglog_entry_data.next_idx;
>>> +
>>> +	/* Don't save any new logs until user-space reads this. */
>>> +	if (ar->crashed_since_read)
>>> +		return;
>> 
>> Locking? If this functions depends on something, please document that
>> with lockdep_assert_held().
>
> To be honest, I was going to ignore locking and assume that firmware
> will not crash that often.  Worst case would be a garbled crash dump
> as there is no memory allocation involved in gathering the crash,
> and the length of the crash dump will not change based on anything in
> the crash logic.

Ignoring locking means that in few years we have a big mess in our
hands. I prefer to do the locking right from day one.

> I'm a bit leery of adding spin-locks in the dump routine just for
> this, but I can add and use a new spin-lock if you prefer.

Why a new spinlock? I didn't review the locking requirements, but I
would first check ar->data_lock can be used.

> If so, any idea if we can do the reads of the target's memory while
> holding a spin-lock, or would I need some temporary buffers and only
> lock while copying that in to the storage in the 'ar'?

I don't see why you would need special locks for reading target's
memory. If there is something needed, pci.c should handle that. Michal?

-- 
Kalle Valo

_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

  reply	other threads:[~2014-06-06  6:19 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-04 18:01 [PATCH 1/4] ath10k: provide firmware crash info via debugfs greearb
2014-06-04 18:01 ` [PATCH 2/4] ath10k: save firmware debug log messages greearb
2014-06-04 18:01 ` [PATCH 3/4] ath10k: save firmware stack upon firmware crash greearb
2014-06-04 18:01 ` [PATCH 4/4] ath10k: Dump exception stack contents on " greearb
2014-06-05 16:18 ` [PATCH 1/4] ath10k: provide firmware crash info via debugfs Kalle Valo
2014-06-05 18:25   ` Ben Greear
2014-06-06  6:10     ` Kalle Valo [this message]
2014-06-06  6:30       ` Michal Kazior
2014-06-06  8:55         ` Kalle Valo
2014-06-06  9:45           ` Michal Kazior
2014-06-06 16:11       ` Ben Greear
2014-06-07 12:55         ` Kalle Valo
2014-06-07 15:32           ` Ben Greear
2014-06-08  8:28             ` Kalle Valo
2014-06-08 15:40               ` Ben Greear
2014-06-06  6:55 ` Kalle Valo
2014-06-06 16:01   ` Ben Greear
2014-06-07 12:50     ` Kalle Valo
2014-06-06  9:33 ` Kalle Valo
2014-06-06 17:06   ` Ben Greear
2014-06-07 12:57     ` Kalle Valo
2014-06-07 15:29       ` Ben Greear
2014-06-08  8:12         ` Kalle Valo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wqcumuuw.fsf@kamboji.qca.qualcomm.com \
    --to=kvalo@qca.qualcomm.com \
    --cc=ath10k@lists.infradead.org \
    --cc=greearb@candelatech.com \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox