rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ayush Singh <ayush@beagleboard.org>
To: fabien.parent@linaro.org, d-gole@ti.com,
	lorforlinux@beagleboard.org, jkridner@beagleboard.org,
	robertcnelson@beagleboard.org, "Andrew Davis" <afd@ti.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <benno.lossin@proton.me>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Derek Kiernan" <derek.kiernan@amd.com>,
	"Dragan Cvetic" <dragan.cvetic@amd.com>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Nishanth Menon" <nm@ti.com>,
	"Vignesh Raghavendra" <vigneshr@ti.com>,
	"Tero Kristo" <kristo@kernel.org>
Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
	 devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	 Ayush Singh <ayush@beagleboard.org>
Subject: [PATCH 0/8] Add generic overlay for MikroBUS addon boards
Date: Wed, 11 Sep 2024 19:57:17 +0530	[thread overview]
Message-ID: <20240911-mikrobus-dt-v1-0-3ded4dc879e7@beagleboard.org> (raw)

Hello all,

This is an attempt to add MikroBUS addon support using the approach
described by Grove connector patch series [0].

The patch series tests out 2 addon boards + pwm and GPIO on the MikroBUS
connector. The boards used are GPS3 Click (for UART) [1] and Weather
Click (for I2C) [2]. Additionally, I have tested relative GPIO numbering
using devicetree nexus nodes [3].

The patch series does not attempt to do any dynamic discovery for 1-wire
eeprom MikroBUS addon boards, nor does it provide any sysfs entry for
board addition/removal. The connector driver might include them after
the basic support is ironed out, but the existing patches for dynamic
overlays work fine.

The patch series has been tested on BeaglePlay [4].

I will now go over individual parts of the patch series, but for a
better picture of the approach, it would be best to checkout [0] first.

MikroBUS connector driver
-------------------------

Just a stub platform driver for now. Will be extended in the future for
dynamic board discovery using 1-wire eeprom present in some MikroBUS
addon boards.

While it is a stub driver, disabling it will make the GPIO connector
nexus node unreachable (any driver attempting to use it will enter
differed probing). So it is required.

MikroBUS connector Devicetree
------------------------------

The connector devicetree defines the MikroBUS GPIO nexus node. This
allows using pin numbering relative to MikroBUS connector pins in the
addon boards overlay. Currently, the patch uses a clockwise numbering:

  0: PWM
  1: INT
  2: RX
  3: TX
  4: SCL
  5: SDA
  6: MOSI
  7: MISO
  8: SCK
  9: CS
  10: RST
  11: AN

Additionally, in case PWM pin is not using channel 0, a nexus node for pwm
should also be used and go in the connector devicetree.

MikroBUS connector symbols overlay
----------------------------------

To make an overlay generic we need a standard name scheme which we
use across base boards. For the connector pins the pinmux phandle
shall be:

<connector-name>_<pin-name>_mux_<pin-function>

For the parent provider phandle, we use a similar naming scheme:

<connector-name>_<pin-name>_<pin-function>

For GPIO controller, I am using `MIKROBUS_GPIO` name since with nexus
nodes, we do not need to define individual pin gpio controllers.

The string symbols can be replaced with phandles once [5] is accepted.
That will make connector stacking much simpler.

MikroBUS addon board overlay
----------------------------

The patch puts the addon board overlays in their own directory. I am
using the following naming scheme for MikroBUS addon boards:

<vendor>-<product_id>.dtso

Mikroe [6] lists this for all boards in their website, but I am not sure
if other vendors have a product_id.

This naming also makes future dynamic discovery easier, since click id
spec [7] contains vendor_id and product_id in the header.

Usage
-----

So what does this all look like? Let's take an example of a BeaglePlay
with one MikroBUS connectors for which we have physically attached a
Wather click module to the first connector. Doing ahead of time
command-line DT overlay application:

./fdtoverlay \
	-o output.dtb \
	-i k3-am625-beagleplay.dtb \
		k3-am625-beagleplay-mikrobus-connector0.dtbo mikroe-5761.dtbo

Open Items
----------

- SPI Support: 
  Currently SPI dt requires `reg` property to specify the
  chipselect to use. This, makes the SPI device overlay dependent on the
  SPI controller. Thus for SPI support, we need a way to allow defining
  SPI chipselect relative to MikroBUS pins, and not the actual device
  controller.

  One possible solution is to introduce something like `named-reg` and
  allow selecting the chipselect by string array. But this probably
  requires more discussion so I have left out SPI support for now.

  NOTE: pins other than the CS MikroBUS pin can be used as chipselect.
  See [8].

- Controller symbol duplication
  The current symbol scheme has multiple symbols for the same underlying
  controller (Eg: MIKROBUS_SCL_MUX_I2C_SCL and MIKROBUS_SDA_MUX_I2C_SDA)
  point to the same i2c controller.

  I think both of them will always use the same i2c controller, but
  maybe there are some exceptions? So I have left it as it is for this
  patch series. The same thing also applies to UART and SPI.

  NOTE: with the use of nexus node for GPIO, the GPIO controller symbol
  will be the same for all pins.

- Nexus node dt-bindings
  I am not quite sure how to deal with the nexus node properties
  (#gpio-cells, gpio-map, gpio-map-mask, gpio-map-pass-thru) since they
  seem to conflict with upstream gpio schema (gpio-controller is a
  dependency of #gpio-cells).

[0]: https://lore.kernel.org/linux-arm-kernel/20240702164403.29067-1-afd@ti.com/
[1]: https://www.mikroe.com/gps-3-click
[2]: https://www.mikroe.com/weather-click
[3]: https://devicetree-specification.readthedocs.io/en/v0.3/devicetree-basics.html#nexus-nodes-and-specifier-mapping
[4]: https://www.beagleboard.org/boards/beagleplay
[5]: https://lore.kernel.org/r/20240902-symbol-phandle-v1-0-683efb2a944b@beagleboard.org
[6]: https://www.mikroe.com/
[7]: https://github.com/MikroElektronika/click_id
[8]: https://www.mikroe.com/spi-extend-click

Signed-off-by: Ayush Singh <ayush@beagleboard.org>
---
Ayush Singh (7):
      dt-bindings: connector: Add MikorBUS connector
      mikrobus: Add mikrobus driver
      dts: ti: k3-am625-beagleplay: Enable mikroBUS connector
      dts: ti: beagleplay: Add mikrobus connector symbols
      addon_boards: Add addon_boards plumbing
      addon_boards: mikrobus: Add Weather Click
      addon_boards: mikrobus: Add GPS3 Click

Fabien Parent (1):
      rust: kernel: Add Platform device and driver abstractions

 .../bindings/connector/mikrobus-connector.yaml     |  40 +++
 Kbuild                                             |   1 +
 Kconfig                                            |   2 +
 MAINTAINERS                                        |   8 +
 addon_boards/Kconfig                               |  16 +
 addon_boards/Makefile                              |   3 +
 addon_boards/mikrobus/Makefile                     |   4 +
 addon_boards/mikrobus/mikroe-1714.dtso             |  28 ++
 addon_boards/mikrobus/mikroe-5761-i2c.dtso         |  28 ++
 arch/arm64/boot/dts/ti/Makefile                    |   1 +
 .../k3-am625-beagleplay-mikrobus-connector0.dtso   |  49 +++
 arch/arm64/boot/dts/ti/k3-am625-beagleplay.dts     |  53 ++-
 drivers/misc/Kconfig                               |  17 +
 drivers/misc/Makefile                              |   1 +
 drivers/misc/mikrobus.rs                           |  32 ++
 rust/bindings/bindings_helper.h                    |   1 +
 rust/kernel/lib.rs                                 |   1 +
 rust/kernel/platform.rs                            | 380 +++++++++++++++++++++
 18 files changed, 659 insertions(+), 6 deletions(-)
---
base-commit: 9aaeb87ce1e966169a57f53a02ba05b30880ffb8
change-id: 20240826-mikrobus-dt-52eaaadd0b1f

Best regards,
-- 
Ayush Singh <ayush@beagleboard.org>


             reply	other threads:[~2024-09-11 14:27 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-11 14:27 Ayush Singh [this message]
2024-09-11 14:27 ` [PATCH 1/8] rust: kernel: Add Platform device and driver abstractions Ayush Singh
2024-09-11 14:56   ` Greg Kroah-Hartman
2024-09-11 15:52     ` Ayush Singh
2024-09-11 17:39       ` Danilo Krummrich
2024-09-11 18:05         ` Ayush Singh
2024-09-11 21:52           ` Danilo Krummrich
2024-09-11 17:35     ` Danilo Krummrich
2024-09-11 20:07       ` Greg Kroah-Hartman
2024-09-14 10:11       ` Janne Grunau
2024-09-11 14:27 ` [PATCH 2/8] dt-bindings: connector: Add MikorBUS connector Ayush Singh
2024-09-11 15:26   ` Rob Herring (Arm)
2024-09-11 17:26   ` Rob Herring
2024-09-11 18:00     ` Ayush Singh
2024-09-11 14:27 ` [PATCH 3/8] mikrobus: Add mikrobus driver Ayush Singh
2024-09-11 14:57   ` Greg Kroah-Hartman
2024-09-11 16:02     ` Ayush Singh
2024-09-11 20:03       ` Greg Kroah-Hartman
2024-09-12 13:32         ` Ayush Singh
2024-09-11 15:48   ` Andrew Lunn
2024-09-11 14:27 ` [PATCH 4/8] dts: ti: k3-am625-beagleplay: Enable mikroBUS connector Ayush Singh
2024-09-11 14:27 ` [PATCH 5/8] dts: ti: beagleplay: Add mikrobus connector symbols Ayush Singh
2024-09-11 14:27 ` [PATCH 6/8] addon_boards: Add addon_boards plumbing Ayush Singh
2024-09-11 15:00   ` Greg Kroah-Hartman
2024-09-11 16:09     ` Ayush Singh
2024-09-11 14:27 ` [PATCH 7/8] addon_boards: mikrobus: Add Weather Click Ayush Singh
2024-09-11 14:27 ` [PATCH 8/8] addon_boards: mikrobus: Add GPS3 Click Ayush Singh
2024-09-11 14:58   ` Greg Kroah-Hartman
2024-09-11 15:56     ` Ayush Singh
2024-09-11 20:04       ` Greg Kroah-Hartman
2024-09-12  7:16         ` Ayush Singh
2024-09-12  7:29           ` Dirk Behme
2024-09-12  7:39             ` Greg Kroah-Hartman
2024-09-12  8:17               ` Ayush Singh
2024-09-12  8:50                 ` Geert Stappers
2024-09-11 17:02 ` [PATCH 0/8] Add generic overlay for MikroBUS addon boards Rob Herring
2024-09-20 16:51   ` Ayush Singh
2024-09-13 10:05 ` Alexander Stein
2024-09-13 10:23   ` Ayush Singh

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=20240911-mikrobus-dt-v1-0-3ded4dc879e7@beagleboard.org \
    --to=ayush@beagleboard.org \
    --cc=a.hindborg@kernel.org \
    --cc=afd@ti.com \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=arnd@arndb.de \
    --cc=benno.lossin@proton.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=conor+dt@kernel.org \
    --cc=d-gole@ti.com \
    --cc=derek.kiernan@amd.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dragan.cvetic@amd.com \
    --cc=fabien.parent@linaro.org \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=jkridner@beagleboard.org \
    --cc=kristo@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lorforlinux@beagleboard.org \
    --cc=nm@ti.com \
    --cc=ojeda@kernel.org \
    --cc=robertcnelson@beagleboard.org \
    --cc=robh@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tmgross@umich.edu \
    --cc=vigneshr@ti.com \
    /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).