devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Martin Blumenstingl <martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
To: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
Cc: ath9k-devel-xDcbHBWguxHbcTqmT+pZeQ@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	ath9k-devel-A+ZNKFmMK5xy9aJCnZT0Uw@public.gmane.org,
	mcgrof-3uybbJdB1yH774rrrx3eTA@public.gmane.org,
	galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
	ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org,
	mark.rutland-5wv7dgnIgG8@public.gmane.org,
	pawel.moll-5wv7dgnIgG8@public.gmane.org,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
	chunkeey-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org,
	arend.vanspriel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org,
	julian.calaby-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Subject: Re: [PATCH v4 1/3] Documentation: dt: net: add ath9k wireless device binding
Date: Mon, 11 Jul 2016 23:21:26 +0200	[thread overview]
Message-ID: <CAFBinCBYmpBVph9vmWcPT512o2ObgmYn4naS2cTrpL61q6u1xw@mail.gmail.com> (raw)
In-Reply-To: <1877260.9mAQ7eY9me@wuerfel>

On Mon, Jul 11, 2016 at 12:01 AM, Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org> wrote:
>> ath9k reads the data from the EEPROM into memory. With that property
>> disabled ath9k simply assumes that the endianness of the values in the
>> EEPROM are having the correct endianness for the host system (in other
>> words: no swap is being applied).
>> I am not sure I understand you correctly, but isn't what you are
>> explaining an issue in the ath9k code, rather than in this
>> documentation?
>
> I looked at the code more to find that out now, but I'm more confused
> now, as the eeprom seems to be read as a byte stream, and the endianess
> conversion that the driver performs is not on the data values in it,
> but seems to instead swap the bytes in each 16-bit word, regardless
> of the contents (the values inside of the byte stream are always
> interpreted as big-endian). Is that a correct observation?
that seems to be the case for the ar9003 eeprom. Other implementations
are doing it different, look at ath9k_hw_ar9287_check_eeprom for
example: first ath9k_hw_nvram_swap_data checks the two magic bytes at
the beginning of the data and swaps the bytes in each 16-bit word if
the magic bytes don't match the magic bytes for the "native system
endianness" (see AR5416_EEPROM_MAGIC). Then more swapping is applied.
I asked for more details about the EEPROM format (specifically the
endianness part) here [0] as I don't have access to the datasheets
(all I have is the ath9k code)

> What I see in ath_pci_eeprom_read() is that the 16-bit words are taken
> from the lower 16 bit of the little-endian AR_EEPROM_STATUS_DATA
> register. As this is coming from a PCI register, it must have a device
> specific endianess that is identical on all CPUs, so in the description
> above, mentioning CPU endianess is a bit confusing. I could not find
> the code that does the conditional byteswap, instead this function
>
> static bool ar9300_eeprom_read_byte(struct ath_hw *ah, int address,
>                                     u8 *buffer)
> {
>         u16 val;
>
>         if (unlikely(!ath9k_hw_nvram_read(ah, address / 2, &val)))
>                 return false;
>
>         *buffer = (val >> (8 * (address % 2))) & 0xff;
>         return true;
> }
>
> evidently assumes that the lower 8 bit of the 16-bit data from PCI
> come first, i.e. it byteswaps on big-endian CPUs to get the bytestream
> back into the order in which it is stored in the EEPROM.
Please have a look at the ath9k_hw_nvram_swap_data function and
eeprom_ops.check_eeprom (for example ath9k_hw_ar9287_check_eeprom).
These are performing the conditional swapping (in addition to whatever
previous swapping there was).
The basic code works like this: read the full EEPROM data into memory
(either from PCI bus, ath9k_platform_data or request_firmware), then
eeprom_ops.check_eeprom will call ath9k_hw_nvram_swap_data for 16-bit
word swapping and afterwards the check_eeprom implementation will doe
further swapping.
Apart from that your findings seem correct (at least this is identical
to how I would interpret the code).

> Interestingly, this also seems to happen for ath_ahb_eeprom_read()
> even though on that one the value does not get swapped by the bus
> accessor, so presumably big-endian machines with a ahb based ath9k
> store their eeprom byte-reversed?
on AHB the eeprom data has to be provided via ath9k_platform_data /
request_firmware mechanism. Thus there is no bus specific swapping,
only the ath9k_hw_nvram_swap_data / eeprom_ops.check_eeprom swapping
is applied in this case.


[0] http://thread.gmane.org/gmane.linux.kernel.wireless.general/153569
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2016-07-11 21:21 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20160624123430.4097-1-martin.blumenstingl@googlemail.com>
     [not found] ` <20160624123430.4097-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-07-09 23:28   ` [PATCH v4 0/3] add devicetree support to ath9k Martin Blumenstingl
     [not found]     ` <20160709232834.31654-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-07-09 23:28       ` [PATCH v4 1/3] Documentation: dt: net: add ath9k wireless device binding Martin Blumenstingl
     [not found]         ` <20160709232834.31654-2-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-07-10 20:52           ` Arnd Bergmann
2016-07-10 20:54             ` Martin Blumenstingl
     [not found]               ` <CAFBinCBbzMM0Pz8s444YE+NSN+035+o8PtNBoUn4v8yPMzG9Mw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-07-10 22:01                 ` Arnd Bergmann
2016-07-11 21:21                   ` Martin Blumenstingl [this message]
     [not found]                     ` <CAFBinCBYmpBVph9vmWcPT512o2ObgmYn4naS2cTrpL61q6u1xw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-07-14 12:33                       ` Arnd Bergmann
2016-07-13  7:02         ` Kalle Valo
2016-07-13  7:47           ` Arnd Bergmann
2016-07-09 23:28       ` [PATCH v4 2/3] ath9k: add a helper to get the string representation of ath_bus_type Martin Blumenstingl
2016-07-09 23:28       ` [PATCH v4 3/3] ath9k: parse the device configuration from an OF node Martin Blumenstingl
     [not found]         ` <20160709232834.31654-4-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-07-10  0:19           ` Bjørn Mork
     [not found]             ` <87inwe9wfb.fsf-3F4PFWf5pNjpjLOzFPqGjWGXanvQGlWp@public.gmane.org>
2016-07-10  9:28               ` Oleksij Rempel
2016-07-10 20:56               ` Martin Blumenstingl
2016-08-21 14:31       ` [PATCH v5 0/3] add devicetree support to ath9k Martin Blumenstingl
     [not found]         ` <20160821143105.27487-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-08-21 14:31           ` [PATCH v5 1/3] Documentation: dt: net: add ath9k wireless device binding Martin Blumenstingl
2016-08-22  9:08             ` Arnd Bergmann
2016-08-28 20:51               ` Martin Blumenstingl
2016-08-29 12:12                 ` Arnd Bergmann
2016-08-21 14:31           ` [PATCH v5 2/3] ath9k: add a helper to get the string representation of ath_bus_type Martin Blumenstingl
2016-08-21 14:31           ` [PATCH v5 3/3] ath9k: parse the device configuration from an OF node Martin Blumenstingl
2016-09-06 21:46           ` [PATCH v6 0/3] add devicetree support to ath9k Martin Blumenstingl
     [not found]             ` <20160906214623.20424-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-09-06 21:46               ` [PATCH v6 1/3] Documentation: dt: net: add ath9k wireless device binding Martin Blumenstingl
2016-09-09  7:48                 ` Oleksij Rempel
     [not found]                   ` <3b93ec95-ec7c-863a-06b7-fab4f2688855-YEK0n+YFykbzxQdaRaTXBw@public.gmane.org>
2016-09-09 20:57                     ` Martin Blumenstingl
2016-09-13  7:28                       ` Oleksij Rempel
     [not found]                       ` <CAFBinCAOQmk3KY1b+D1iKAOEBfasYyei681cae4PbD+201mzbQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-09-16 12:45                         ` Rob Herring
2016-09-18 21:51                           ` Martin Blumenstingl
     [not found]                 ` <20160906214623.20424-2-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-09-16 12:37                   ` Rob Herring
2016-09-06 21:46               ` [PATCH v6 2/3] ath9k: add a helper to get the string representation of ath_bus_type Martin Blumenstingl
2016-09-06 21:46               ` [PATCH v6 3/3] ath9k: parse the device configuration from an OF node Martin Blumenstingl
2016-10-02 21:47               ` [PATCH v7 0/3] add devicetree support to ath9k Martin Blumenstingl
     [not found]                 ` <20161002214743.2263-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-10-02 21:47                   ` [PATCH v7 1/3] Documentation: dt: net: add ath9k wireless device binding Martin Blumenstingl
2016-10-07 12:17                     ` [v7, " Kalle Valo
2016-10-07 12:17                     ` Kalle Valo
     [not found]                     ` <20161002214743.2263-2-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-10-07 12:17                       ` Kalle Valo
2016-10-09  1:28                       ` [PATCH v7 " Rob Herring
2016-10-09  9:54                         ` Martin Blumenstingl
2016-10-02 21:47                   ` [PATCH v7 2/3] ath9k: add a helper to get the string representation of ath_bus_type Martin Blumenstingl
2016-10-02 21:47                   ` [PATCH v7 3/3] ath9k: parse the device configuration from an OF node Martin Blumenstingl
2016-10-16 20:59                   ` [PATCH v8 0/3] add devicetree support to ath9k Martin Blumenstingl
     [not found]                     ` <20161016205907.19927-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-10-16 20:59                       ` [PATCH v8 1/3] Documentation: dt: net: add ath9k wireless device binding Martin Blumenstingl
     [not found]                         ` <20161016205907.19927-2-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2016-10-18 15:31                           ` Rob Herring
2016-11-15 14:56                           ` [v8, " Kalle Valo
2016-10-16 20:59                       ` [PATCH v8 2/3] ath9k: add a helper to get the string representation of ath_bus_type Martin Blumenstingl
2016-10-16 20:59                       ` [PATCH v8 3/3] ath9k: parse the device configuration from an OF node Martin Blumenstingl

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=CAFBinCBYmpBVph9vmWcPT512o2ObgmYn4naS2cTrpL61q6u1xw@mail.gmail.com \
    --to=martin.blumenstingl-gm/ye1e23mwn+bqq9rbeug@public.gmane.org \
    --cc=arend.vanspriel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=ath9k-devel-A+ZNKFmMK5xy9aJCnZT0Uw@public.gmane.org \
    --cc=ath9k-devel-xDcbHBWguxHbcTqmT+pZeQ@public.gmane.org \
    --cc=chunkeey-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
    --cc=julian.calaby-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=mcgrof-3uybbJdB1yH774rrrx3eTA@public.gmane.org \
    --cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.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;
as well as URLs for NNTP newsgroup(s).