All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Tomasz Figa <tomasz.figa@gmail.com>,
	linux-arm-kernel@lists.infradead.org, mark.rutland@arm.com,
	devicetree@vger.kernel.org, Ulf Hansson <ulf.hansson@linaro.org>,
	Pawel Moll <pawel.moll@arm.com>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	Tomasz Figa <t.figa@samsung.com>,
	linux-mmc <linux-mmc@vger.kernel.org>,
	Chris Ball <chris@printf.net>,
	robh+dt@kernel.org, Kumar Gala <galak@codeaurora.org>,
	Olof Johansson <olof@lixom.net>,
	Fabio Estevam <festevam@gmail.com>,
	Sascha Hauer <s.hauer@pengutronix.de>
Subject: Re: [PATCH 1/3] mmc: add support for power-on sequencing through DT
Date: Mon, 17 Feb 2014 14:00:43 +0100	[thread overview]
Message-ID: <201402171400.43899.arnd@arndb.de> (raw)
In-Reply-To: <20140215205159.GL30257@n2100.arm.linux.org.uk>

On Saturday 15 February 2014, Russell King - ARM Linux wrote:
> On Sat, Feb 15, 2014 at 05:21:11PM +0100, Arnd Bergmann wrote:
> > On Saturday 15 February 2014 14:22:30 Tomasz Figa wrote:
> > > On 15.02.2014 14:09, Arnd Bergmann wrote:
> > >
> > > > For spi-mode SDIO devices I'm assuming it's similar, except that
> > > > you'd describe the actual SDIO device in the board info rather than
> > > > create a fake SDIO controller. Still not discoverable unless I'm
> > > > missing your point.
> > > 
> > > I'm not sure if we should assume that SPI = MMC over SPI. I believe 
> > > there might be a custom protocol involved as well.
> > 
> > In case of SD/MMC, you essentially have three separate command sets:
> > SPI, MMC and SD, and each of them has multiple versions. MMC and SD
> > compatible devices generally also support the SPI command set (IIRC
> > it is required,
> 
> SPI support is mandatory for SDIO as well.
> 
> SDIO has CIS (remember card information structures... like PCMCIA)
> which identifies the various different logical functions of the device,
> giving class information, vendor information etc.
> 
> So... certainly the type of the attached device is discoverable even
> on SPI

But how are SPI SDIO devices used in Linux and described in DT?

If we always use the MMC_SPI host controller driver and only
describe the controller in DT, then you are right, and there is
no difference to the normal SDIO case.

If we just describe it as an SPI device OTOH, the fact that we can
identify it is useless, because we first have to know what it
is before we can ask for its identity.

> > If a device supports both SDIO and SPI, I think a straightforward
> > implementation would be to use the exact same command set, but
> > you are right that this isn't the only possibility, and the SD/MMC
> > shows how they can be slightly different already.
> 
> Given that the SPI mode is mandatory for SDIO cards, why would you
> also implement another SPI mode with different commands?

I don't know why, I was just saying that it's what storage SD cards do.

> > > Stepping aside from SPI, I already gave an example of a WLAN chip that 
> > > supports multiple control busses [1]. In addition to the commonly used 
> > > SDIO, it supports USB and HSIC as well:
> > > 
> > > [1] http://www.marvell.com/wireless/assets/marvell_avastar_88w8797.pdf
> > > 
> > > Moreover, some of Samsung boards use HSIC to communicate with modem 
> > > chips, which have exactly the same problem as we're trying to solve here 
> > > - they need to be powered on to be discovered.
> > 
> > Thanks, this definitely makes a good example. I see that it also
> > supports SPI mode for SDIO as mentioned in your link.
> 
> Well, USB is another discoverable bus.  As HSIC is a derivative of USB,
> I'd be surprised if it weren't discoverable there too.
> 
> So, out of everything identified so far, we have no undiscoverable buses.

The device also lists a high-speed uart interface. While in Linux a
tty line discipline is not exactly the same as a driver, I would
still count it as a nondiscoverable interface.

>  - requires different DT if the chip is changed, which causes problems
>    for users to identify which out of zillions of DT files they should
>    use for their exact platform.

I'm still not buying this argument. Making any changes to the board
design that are visible to software can have this effect.

>  - have to work out how to match up the fake device with a probed device
>    when it becomes available: existing SDIO drivers all assume that the
>    card has been through a fairly complex initialisation sequence already.

This one is an implementation detail. Yes, we have to ensure it works,
but it's not inherently harder that getting the other approach to work.

>  - multi-function SDIO is much harder to deal with since you have mutliple
>    drivers involved, and the SDIO device as a whole needs initialisation
>    before anyone can drive it.

Agreed, this point is a big one that I hadn't considered before.
I agree that my approach isn't ideal for multifunction cards, especially
when you want to be able to load function drivers individually or have
only one of them in use. It can probably work fine for things like calling
clk_get() where you can simply describe the clock in each function device
node separately, but I don't see how I'd easily use a 'reset' line
that has to be triggered for the first function driver that gets loaded
but must not be triggered again for the second one :(

>  - adds complexity to the SDIO drivers; they would have to know whether
>    they're embedded or on a plug-in card.

How so? If a device can be a plug-in card, I would assume that it is
actually discoverable without a special power-on sequence, while a device
that needs this can't be used standalone.

	Arnd

WARNING: multiple messages have this Message-ID (diff)
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/3] mmc: add support for power-on sequencing through DT
Date: Mon, 17 Feb 2014 14:00:43 +0100	[thread overview]
Message-ID: <201402171400.43899.arnd@arndb.de> (raw)
In-Reply-To: <20140215205159.GL30257@n2100.arm.linux.org.uk>

On Saturday 15 February 2014, Russell King - ARM Linux wrote:
> On Sat, Feb 15, 2014 at 05:21:11PM +0100, Arnd Bergmann wrote:
> > On Saturday 15 February 2014 14:22:30 Tomasz Figa wrote:
> > > On 15.02.2014 14:09, Arnd Bergmann wrote:
> > >
> > > > For spi-mode SDIO devices I'm assuming it's similar, except that
> > > > you'd describe the actual SDIO device in the board info rather than
> > > > create a fake SDIO controller. Still not discoverable unless I'm
> > > > missing your point.
> > > 
> > > I'm not sure if we should assume that SPI = MMC over SPI. I believe 
> > > there might be a custom protocol involved as well.
> > 
> > In case of SD/MMC, you essentially have three separate command sets:
> > SPI, MMC and SD, and each of them has multiple versions. MMC and SD
> > compatible devices generally also support the SPI command set (IIRC
> > it is required,
> 
> SPI support is mandatory for SDIO as well.
> 
> SDIO has CIS (remember card information structures... like PCMCIA)
> which identifies the various different logical functions of the device,
> giving class information, vendor information etc.
> 
> So... certainly the type of the attached device is discoverable even
> on SPI

But how are SPI SDIO devices used in Linux and described in DT?

If we always use the MMC_SPI host controller driver and only
describe the controller in DT, then you are right, and there is
no difference to the normal SDIO case.

If we just describe it as an SPI device OTOH, the fact that we can
identify it is useless, because we first have to know what it
is before we can ask for its identity.

> > If a device supports both SDIO and SPI, I think a straightforward
> > implementation would be to use the exact same command set, but
> > you are right that this isn't the only possibility, and the SD/MMC
> > shows how they can be slightly different already.
> 
> Given that the SPI mode is mandatory for SDIO cards, why would you
> also implement another SPI mode with different commands?

I don't know why, I was just saying that it's what storage SD cards do.

> > > Stepping aside from SPI, I already gave an example of a WLAN chip that 
> > > supports multiple control busses [1]. In addition to the commonly used 
> > > SDIO, it supports USB and HSIC as well:
> > > 
> > > [1] http://www.marvell.com/wireless/assets/marvell_avastar_88w8797.pdf
> > > 
> > > Moreover, some of Samsung boards use HSIC to communicate with modem 
> > > chips, which have exactly the same problem as we're trying to solve here 
> > > - they need to be powered on to be discovered.
> > 
> > Thanks, this definitely makes a good example. I see that it also
> > supports SPI mode for SDIO as mentioned in your link.
> 
> Well, USB is another discoverable bus.  As HSIC is a derivative of USB,
> I'd be surprised if it weren't discoverable there too.
> 
> So, out of everything identified so far, we have no undiscoverable buses.

The device also lists a high-speed uart interface. While in Linux a
tty line discipline is not exactly the same as a driver, I would
still count it as a nondiscoverable interface.

>  - requires different DT if the chip is changed, which causes problems
>    for users to identify which out of zillions of DT files they should
>    use for their exact platform.

I'm still not buying this argument. Making any changes to the board
design that are visible to software can have this effect.

>  - have to work out how to match up the fake device with a probed device
>    when it becomes available: existing SDIO drivers all assume that the
>    card has been through a fairly complex initialisation sequence already.

This one is an implementation detail. Yes, we have to ensure it works,
but it's not inherently harder that getting the other approach to work.

>  - multi-function SDIO is much harder to deal with since you have mutliple
>    drivers involved, and the SDIO device as a whole needs initialisation
>    before anyone can drive it.

Agreed, this point is a big one that I hadn't considered before.
I agree that my approach isn't ideal for multifunction cards, especially
when you want to be able to load function drivers individually or have
only one of them in use. It can probably work fine for things like calling
clk_get() where you can simply describe the clock in each function device
node separately, but I don't see how I'd easily use a 'reset' line
that has to be triggered for the first function driver that gets loaded
but must not be triggered again for the second one :(

>  - adds complexity to the SDIO drivers; they would have to know whether
>    they're embedded or on a plug-in card.

How so? If a device can be a plug-in card, I would assume that it is
actually discoverable without a special power-on sequence, while a device
that needs this can't be used standalone.

	Arnd

  parent reply	other threads:[~2014-02-17 13:01 UTC|newest]

Thread overview: 114+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-20  3:56 [PATCH 0/3] RFC/RFT: Powering on MMC Wifi/BT modules in MMC core Olof Johansson
2014-01-20  3:56 ` Olof Johansson
2014-01-20  3:56 ` [PATCH 1/3] mmc: add support for power-on sequencing through DT Olof Johansson
2014-01-20  3:56   ` Olof Johansson
2014-01-20  8:44   ` Ulf Hansson
2014-01-20  8:44     ` Ulf Hansson
2014-01-20 19:13     ` Olof Johansson
2014-01-20 19:13       ` Olof Johansson
2014-01-21  8:55       ` Ulf Hansson
2014-01-21  8:55         ` Ulf Hansson
2014-01-21 18:14         ` Olof Johansson
2014-01-21 18:14           ` Olof Johansson
2014-01-22 11:30           ` Mark Brown
2014-01-22 11:30             ` Mark Brown
2014-01-20 16:36   ` Mark Brown
2014-01-20 16:36     ` Mark Brown
2014-01-20 16:48   ` Russell King - ARM Linux
2014-01-20 16:48     ` Russell King - ARM Linux
2014-01-20 17:03     ` Fabio Estevam
2014-01-20 17:03       ` Fabio Estevam
2014-01-20 17:16       ` Russell King - ARM Linux
2014-01-20 17:16         ` Russell King - ARM Linux
2014-01-20 18:47         ` Fabio Estevam
2014-01-20 18:47           ` Fabio Estevam
2014-01-21 19:19           ` Russell King - ARM Linux
2014-01-21 19:19             ` Russell King - ARM Linux
2014-01-24 17:35     ` Fabio Estevam
2014-01-24 17:35       ` Fabio Estevam
2014-01-27  8:43       ` Jyri Sarha
2014-01-27  8:43         ` Jyri Sarha
2014-01-27  8:54         ` Chen-Yu Tsai
2014-01-27  8:54           ` Chen-Yu Tsai
2014-01-27  9:48           ` Jyri Sarha
2014-01-27  9:48             ` Jyri Sarha
2014-01-20 18:58   ` Arnd Bergmann
2014-01-20 18:58     ` Arnd Bergmann
     [not found]     ` <201401201958.57997.arnd-r2nGTMty4D4@public.gmane.org>
2014-01-20 19:04       ` Olof Johansson
2014-01-20 19:04         ` Olof Johansson
2014-01-20 19:12         ` Arnd Bergmann
2014-01-20 19:12           ` Arnd Bergmann
2014-01-20 19:14   ` Fabio Estevam
2014-01-20 19:14     ` Fabio Estevam
2014-01-20 19:14     ` Olof Johansson
2014-01-20 19:14       ` Olof Johansson
2014-01-21  7:24   ` Sascha Hauer
2014-01-21  7:24     ` Sascha Hauer
2014-01-21  7:25     ` Sascha Hauer
2014-01-21  7:25       ` Sascha Hauer
2014-01-21 18:34   ` Tomasz Figa
2014-01-21 18:34     ` Tomasz Figa
2014-01-21 21:30     ` Olof Johansson
2014-01-21 21:30       ` Olof Johansson
2014-01-21 21:39       ` Tomasz Figa
2014-01-21 21:39         ` Tomasz Figa
2014-01-26 17:26     ` Tomasz Figa
2014-01-26 17:26       ` Tomasz Figa
2014-01-27 10:19       ` Ulf Hansson
2014-01-27 10:19         ` Ulf Hansson
2014-01-28  0:59         ` Tomasz Figa
2014-01-28  0:59           ` Tomasz Figa
2014-01-28  1:08           ` Chris Ball
2014-01-28  1:08             ` Chris Ball
2014-01-28 10:06           ` Ulf Hansson
2014-01-28 10:06             ` Ulf Hansson
2014-01-28 10:48             ` Arnd Bergmann
2014-01-28 10:48               ` Arnd Bergmann
2014-02-12 18:33               ` Mark Brown
2014-02-12 18:33                 ` Mark Brown
2014-02-13  8:56               ` Ulf Hansson
2014-02-13  8:56                 ` Ulf Hansson
2014-02-13  9:01                 ` Tomasz Figa
2014-02-13  9:01                   ` Tomasz Figa
2014-02-13 10:42               ` Russell King - ARM Linux
2014-02-13 10:42                 ` Russell King - ARM Linux
2014-02-13 12:48                 ` Arnd Bergmann
2014-02-13 12:48                   ` Arnd Bergmann
2014-02-13 14:41                   ` Russell King - ARM Linux
2014-02-13 14:41                     ` Russell King - ARM Linux
2014-02-13 16:13                     ` Arnd Bergmann
2014-02-13 16:13                       ` Arnd Bergmann
2014-02-13 17:31                       ` Olof Johansson
2014-02-13 17:31                         ` Olof Johansson
2014-02-15 12:18                       ` Arnd Bergmann
2014-02-15 12:18                         ` Arnd Bergmann
2014-02-15 12:27                         ` Russell King - ARM Linux
2014-02-15 12:27                           ` Russell King - ARM Linux
2014-02-15 13:09                           ` Arnd Bergmann
2014-02-15 13:09                             ` Arnd Bergmann
2014-02-15 13:22                             ` Tomasz Figa
2014-02-15 13:22                               ` Tomasz Figa
2014-02-15 16:21                               ` Arnd Bergmann
2014-02-15 16:21                                 ` Arnd Bergmann
2014-02-15 20:52                                 ` Russell King - ARM Linux
2014-02-15 20:52                                   ` Russell King - ARM Linux
2014-02-15 21:35                                   ` Tomasz Figa
2014-02-15 21:35                                     ` Tomasz Figa
2014-02-15 22:03                                     ` Russell King - ARM Linux
2014-02-15 22:03                                       ` Russell King - ARM Linux
2014-02-17 13:00                                   ` Arnd Bergmann [this message]
2014-02-17 13:00                                     ` Arnd Bergmann
2014-02-17 23:25                                 ` Mark Brown
2014-02-17 23:25                                   ` Mark Brown
2014-01-20  3:56 ` [PATCH 2/3] mmc: dw_mmc: call mmc_of_parse to fill in common options Olof Johansson
2014-01-20  3:56   ` Olof Johansson
2014-01-20  4:53   ` Jaehoon Chung
2014-01-20  4:53     ` Jaehoon Chung
2014-01-20  3:56 ` [PATCH 3/3] ARM: dts: exynos5250-snow: Enable wifi power-on Olof Johansson
2014-01-20  3:56   ` Olof Johansson
2014-01-30 21:49 ` [PATCH 0/3] RFC/RFT: Powering on MMC Wifi/BT modules in MMC core Russell King - ARM Linux
2014-01-30 21:49   ` Russell King - ARM Linux
2014-02-01 16:14   ` Russell King - ARM Linux
2014-02-01 16:14     ` Russell King - ARM Linux
2014-02-13 10:36     ` Russell King - ARM Linux
2014-02-13 10:36       ` Russell King - ARM Linux

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=201402171400.43899.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=chris@printf.net \
    --cc=devicetree@vger.kernel.org \
    --cc=festevam@gmail.com \
    --cc=galak@codeaurora.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=olof@lixom.net \
    --cc=pawel.moll@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=t.figa@samsung.com \
    --cc=tomasz.figa@gmail.com \
    --cc=ulf.hansson@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.