From: Frank Rowand <frowand.list@gmail.com>
To: Rob Herring <robh+dt@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
devicetree@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
Michal Simek <michal.simek@xilinx.com>,
dev@lists.96boards.org, Mark Brown <broonie@kernel.org>,
John Stultz <john.stultz@linaro.org>,
Andy Shevchenko <andy@infradead.org>,
Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 0/5] RFC: Mezzanine handling for 96boards
Date: Thu, 21 Jun 2018 06:02:44 -0700 [thread overview]
Message-ID: <174ecf08-7665-8183-07b4-790bdfcf5662@gmail.com> (raw)
In-Reply-To: <CAL_JsqK2DKPbaFvUPSU2E7oh1_pryrRXPMg8OASmK722jmznwA@mail.gmail.com>
On 06/19/18 08:52, Rob Herring wrote:
> On Mon, Jun 18, 2018 at 1:45 AM, Linus Walleij <linus.walleij@linaro.org> wrote:
>> This is a proposal for how to handle the non-discoverable
>> 96boards plug-in expansion boards called "mezzanines" in the
>> Linux kernel. It is a working RFC series meant for discussion
>> at the moment.
>>
>> The RFC was done on the brand new Ultra96 board from Xilinx
>> with a Secure96 mezzanine expansion board. The main part
>> is in patch 4, the rest is enabling and examples.
>>
>> The code can be obtained from here:
>> https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/log/?h=ultra96
>>
>> You can for example probably augment the DTS file for any
>> upstream-supported 96board and get the Secure96 going with
>> it with minor efforts.
>>
>> TODO:
>>
>> - Proper device tree bindings for the connector, for now
>> look at the example.
>>
>> - Discuss whether to actually do this or just take it all and
>> flush it down the drain because the community doesn't like
>> it. I'm not one of those especially infatuated with my own code,
>> I always stay by the old programming project management mantra
>> to calculate to make one version and throw it away as stepping
>> stone to a good final design.
>>
>> - Placement: putting this in drivers/bus is just an example.
>> drivers/platform/96boards-mezzanines is fine too, maybe better?
>>
>> - I am especially curious about input from Andy and Mika from
>> the Intel/ACPI camp on what they have seen for non-discoverable
>> plug-in boards. Does this problem even exist in the Intel
>> world, or not...
>>
>> Background:
>>
>> - These boards connect on a custom connector on this family
>> of boards. The relationship is many-to-many with the connector
>> as nexus. The electronic standard for the connector is specified:
>> https://github.com/96boards/documentation/blob/master/Specifications/96Boards-CE-Specification.pdf
>> Example mezzanines:
>> https://www.96boards.org/documentation/mezzanine/
>>
>> - These boards have siblings on other platforms, the problem
>> scope is similar with BeagleBone "capes":
>> https://beagleboard.org/capes
>> Raspberry Pi expansion boards:
>> https://www.abelectronics.co.uk/products/18/raspberry-pi-expansion-boards
>> Intel Edison, Galileo, Joule also have expansion boards.
>>
>> Idea: add a driver for the connector itself and tie it in to
>> the device tree with a compatible string. Since the boards
>> are non-discoverable two mechanisms are provided to discover
>> them:
>>
>> - Add a very simple device tree node with just a compatible
>> string for the board in the node. This will be simple to
>> add from e.g. a boot loader or as an overlay from userspace.
>>
>> board {
>> compatible = "96boards,secure96";
>> };
>>
>>
>> - Echo 1 > boardname into a sysfs file to populate the
>> board and echo 0 > boardname to depopulate it. This
>> makes it easy to even switch out expansion boards at
>> runtime, if allowed by the electronics.
>>
>> > cd /sys/devices/platform/connector
>> > echo 1 > secure96
>> lscon connector: called mezzanine_store on secure96
>> lscon connector: populate secure96
>> at24 1-0050: 2048 byte 24c128 EEPROM, writable, 128 bytes/write
>> atmel-ecc 1-0060: configuration zone is unlocked
>> tpm_tis_spi spi0.0: 2.0 TPM (device-id 0x1B, rev-id 16)
>> (...)
>>
>> What this patch set does not do:
>>
>> - It does not use device tree or ACPI DSDT or any other
>> hardware decription language to model the contents of the
>> board per se. Instead the boards buses are populated
>> directly with platform devices.
>>
>> Predictable complaints about this design:
>>
>> Q: This is not device tree overlays. Why is it not device
>> tree overlays?
>>
>> A1: Right tool for the job, overlays are complex and the
>> plan to get it in place seems to be spanning years, this
>> is a few devices on simple busses and it works today.
>> Using this approach I can already work on shaping up
>> drivers for the mezzanine board devices as proved by:
>> https://marc.info/?l=linux-crypto-vger&m=152820660120590&w=2
>> https://marc.info/?l=linux-crypto-vger&m=152820662820595&w=2
>> (...)
>>
>> I can work on drivers for the chips on the
>> Secure96 mezzanine board. It's just an example of
>> what the mezzanine community can do.
>> Now they are hacking around in userspace instead of
>> doing/reusing kernel drivers for their stuff:
>> https://github.com/jbech-linaro/secure96
>>
>> This way we can bring developers for these components
>> into the kernel community instead of telling them to
>> wait for some big infrastructure that comes later
>> before they can contribute their stuff.
>>
>> A2: Overlays does not solve the problem if the system runs
>> ACPI, and what about if the same connector[s] appear
>> on a server board, servers use ACPI. Also notice
>> that Intel have development boards with non-discoverable
>> expansion boards as well. They just will not use
>> device tree.
>>
>> A3: Overlays is Big Upfront Design.
>> https://en.wikipedia.org/wiki/Big_Design_Up_Front
>> This way of designing things is associated with the
>> (pejorative term) "waterfall model" which is out of
>> fashion as a way of doing development. I think I am not
>> the only one slightly annoyed by the fact that device
>> tree overlays is now starting to look like a very
>> big very upfront design. It's just not possible to get
>> something up and running in small iterative steps with
>> device tree overlays. Instead huge efforts are
>> required and it involves major possible showstoppers
>> and uncertain outcome as indicated by Frank's TODO:
>> https://elinux.org/Frank's_Evolving_Overlay_Thoughts
>
> I don't agree. This can be broken down into various smaller mostly
> independent problems. Overlay handling is mostly an orthogonal
> problem. The exception is that we need to ensure bindings allow a
> decoupling of upstream of the connector and downstream of the
> connector so the downstream part can be a reusable overlay. Defining
> anything while ignoring this known criteria would be a mistake.
>
> The list is roughly like this:
>
> - Connector node binding and probing infrastructure
> - GPIO (already done w/ gpio-map binding)
> - I2C
> - SPI
> - Pinmux
> - clocks
> - OF graph (displays, cameras, etc.)
> - USB (re-use the USB connector binding for non-standard connectors)
> - Userspace interface
>
> We don't have to support every interface from the start. The bindings
> and corresponding kernel support can be designed 1-by-1 for the most
> part. Start with something simple like a GPIO LED on a mezzanine. Once
> the base is functionality is there, the other parts can be worked on
> incrementally. We can punt any overlay handling to the bootloader
> initially. That punts all the issues around overlays like designing a
> userspace interface, where overlays are located (filesystem, passed
> from bootloader, built into the kernel), when they are loaded, and how
> to specify which overlays to load. Most of Frank's list is related to
> these issues.
>
> Rob
>
Agreeing with Rob (despite my other reply asking why the current
devicetree mechanisms can't be used) that we do have a desire to
have the ability to create bindings for connectors - this has been
discussed before.
-Frank
next prev parent reply other threads:[~2018-06-21 13:02 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-18 7:45 [PATCH 0/5] RFC: Mezzanine handling for 96boards Linus Walleij
2018-06-18 7:45 ` [PATCH 1/5] RFC: gpio: Add API to explicitly name a consumer Linus Walleij
2018-06-18 7:45 ` [PATCH 2/5] RFC: eeprom: at24: Allow passing gpiodesc from pdata Linus Walleij
2018-06-20 0:45 ` Andy Shevchenko
2018-06-18 7:45 ` [PATCH 3/5] RFC: spi: Make of_find_spi_device_by_node() available Linus Walleij
2018-06-18 7:45 ` [PATCH 4/5] RFC: bus: 96boards Low-Speed Connector Linus Walleij
2018-06-19 11:19 ` [Dev] " Daniel Thompson
2018-06-18 7:45 ` [PATCH 5/5] RFC: ARM64: dts: Add Low-Speed Connector to ZCU100 Linus Walleij
2018-06-19 14:55 ` Rob Herring
2018-06-22 13:22 ` Michal Simek
2018-06-18 12:21 ` [PATCH 0/5] RFC: Mezzanine handling for 96boards Arnd Bergmann
2018-06-18 13:22 ` Ard Biesheuvel
2018-06-18 14:15 ` Arnd Bergmann
2018-06-22 13:36 ` Michal Simek
2018-06-19 15:14 ` [Dev] " Yang Zhang
2018-06-19 15:25 ` Ard Biesheuvel
2018-06-19 15:26 ` Yang Zhang
2018-06-19 15:30 ` Ard Biesheuvel
2018-06-19 15:32 ` Yang Zhang
2018-06-22 13:08 ` Michal Simek
2018-06-26 9:10 ` Linus Walleij
2018-06-26 8:09 ` Linus Walleij
2018-06-26 8:19 ` Ard Biesheuvel
2018-06-26 8:36 ` Linus Walleij
2018-06-26 8:02 ` Linus Walleij
2018-06-26 8:08 ` Arnd Bergmann
2018-06-26 12:12 ` Mark Brown
2018-07-16 15:07 ` Rob Herring
2018-06-19 11:10 ` [Dev] " Daniel Thompson
2018-06-19 11:56 ` Mark Brown
2018-06-19 15:52 ` Rob Herring
2018-06-21 13:02 ` Frank Rowand [this message]
2018-06-26 9:03 ` Linus Walleij
2018-06-26 9:00 ` Linus Walleij
2018-06-27 15:23 ` [Dev] " Rob Herring
2018-06-28 6:10 ` Michal Simek
2018-06-21 12:58 ` Frank Rowand
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=174ecf08-7665-8183-07b4-790bdfcf5662@gmail.com \
--to=frowand.list@gmail.com \
--cc=andy@infradead.org \
--cc=arnd@arndb.de \
--cc=broonie@kernel.org \
--cc=dev@lists.96boards.org \
--cc=devicetree@vger.kernel.org \
--cc=john.stultz@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=manivannan.sadhasivam@linaro.org \
--cc=mark.rutland@arm.com \
--cc=michal.simek@xilinx.com \
--cc=mika.westerberg@linux.intel.com \
--cc=robh+dt@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;
as well as URLs for NNTP newsgroup(s).