public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
To: Martin Blumenstingl
	<martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@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 00:01:05 +0200	[thread overview]
Message-ID: <1877260.9mAQ7eY9me@wuerfel> (raw)
In-Reply-To: <CAFBinCBbzMM0Pz8s444YE+NSN+035+o8PtNBoUn4v8yPMzG9Mw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On Sunday, July 10, 2016 10:54:50 PM CEST Martin Blumenstingl wrote:
> On Sun, Jul 10, 2016 at 10:52 PM, Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org> wrote:
> > On Sunday, July 10, 2016 1:28:32 AM CEST Martin Blumenstingl wrote:
> >> +- qca,check-eeprom-endianness: When enabled, the driver checks if the
> >> +                               endianness of the EEPROM (based on the two
> >> +                               magic bytes at the start of the EEPROM)
> >> +                               matches the host system's native endianness.
> >> +                               The data will be swapped accordingly if there
> >> +                               is a mismatch.
> >> +                               Leaving this disabled means that the EEPROM
> >> +                               data will be interpreted in the system's
> >> +                               native endianness, regardless of the magic
> >> +                               bytes.
> >> +                               Enable this option only when the magic bytes
> >> +                               are known to indicate the correct endianness
> >> +                               of the EEPROM data, because otherwise the
> >> +                               EEPROM data may be swapped and thus may be
> >> +                               parsed incorrectly.
> >
> > Defining properties in terms of "native" endianess is usually not a good
> > idea, as some architectures (ARMv6+, PowerPC, ...) allow running either
> > big-endian or little-endian without changing the endianess of device
> > registers in the process.
> >
> > It's better to document the property as defaulting to a specific endianess
> > unless you have an override or the autodetection flag, regardless of
> > the CPU endianess.
> 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?

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.

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?

	Arnd
--
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

  parent reply	other threads:[~2016-07-10 22:01 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 [this message]
2016-07-11 21:21                   ` Martin Blumenstingl
     [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=1877260.9mAQ7eY9me@wuerfel \
    --to=arnd-r2ngtmty4d4@public.gmane.org \
    --cc=arend.vanspriel-dY08KVG/lbpWk0Htik3J/w@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=martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@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