[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230323062451.2925996-1-danishanwar@ti.com>
Date: Thu, 23 Mar 2023 11:54:46 +0530
From: MD Danish Anwar <danishanwar@...com>
To: "Andrew F. Davis" <afd@...com>, Suman Anna <s-anna@...com>,
Roger Quadros <rogerq@...nel.org>,
Vignesh Raghavendra <vigneshr@...com>,
Tero Kristo <kristo@...nel.org>,
MD Danish Anwar <danishanwar@...com>,
Mathieu Poirier <mathieu.poirier@...aro.org>,
Bjorn Andersson <andersson@...nel.org>,
Santosh Shilimkar <ssantosh@...nel.org>,
Nishanth Menon <nm@...com>
CC: <linux-remoteproc@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>,
<linux-kernel@...r.kernel.org>, <linux-omap@...r.kernel.org>,
<srk@...com>, <devicetree@...r.kernel.org>,
<netdev@...r.kernel.org>
Subject: [PATCH v5 0/5] Introduce PRU platform consumer API
Hi All,
The Programmable Real-Time Unit and Industrial Communication Subsystem (PRU-ICSS
or simply PRUSS) on various TI SoCs consists of dual 32-bit RISC cores
(Programmable Real-Time Units, or PRUs) for program execution.
There are 3 foundation components for TI PRUSS subsystem: the PRUSS platform
driver, the PRUSS INTC driver and the PRUSS remoteproc driver. All of them have
already been merged and can be found under:
1) drivers/soc/ti/pruss.c
Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml
2) drivers/irqchip/irq-pruss-intc.c
Documentation/devicetree/bindings/interrupt-controller/ti,pruss-intc.yaml
3) drivers/remoteproc/pru_rproc.c
Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml
The programmable nature of the PRUs provide flexibility to implement custom
peripheral interfaces, fast real-time responses, or specialized data handling.
Example of a PRU consumer drivers will be:
- Software UART over PRUSS
- PRU-ICSS Ethernet EMAC
In order to make usage of common PRU resources and allow the consumer drivers
to configure the PRU hardware for specific usage the PRU API is introduced.
This is the v5 of the old patch series[1]. This doesn't have any functional
changes, the old series has been rebased on linux-next.
Changes from v4 [1] to v5:
*) Addressed Roger's comment to change function argument in API
pruss_cfg_xfr_enable(). Instead of asking user to calcualte mask, now user
will just provide the pru_type and mask will be calcualted inside the API.
*) Moved enum pru_type from pru_rproc.c to include/linux/remoteproc/pruss.h
in patch 4 / 5.
*) Moved enum pruss_gpi_mode from patch 3/5 to patch 4/5 to introduce this
enum in same patch as the API using it.
*) Moved enum pruss_gp_mux_sel from patch 3/5 to patch 5/5 to introduce this
enum in same patch as the API using it.
*) Created new headefile drivers/soc/ti/pruss.h, private to PRUSS as asked by
Roger. Moved all private definitions and pruss_cfg_read () / update ()
APIs to this newly added headerfile.
*) Renamed include/linux/pruss_driver.h to include/linux/pruss_internal.h as
suggested by Andrew and Roger.
Changes from v3 [2] to v4:
*) Added my SoB tags in all patches as earlier SoB tags were missing in few
patches.
*) Added Roger's RB tags in 3 patches.
*) Addressed Roger's comment in patch 4/5 of this series. Added check for
invalid GPI mode in pruss_cfg_gpimode() API.
*) Removed patch [5] from this series as that patch is no longer required.
*) Made pruss_cfg_read() and pruss_cfg_update() APIs internal to pruss.c by
removing EXPORT_SYMBOL_GPL and making them static. Now these APIs are
internal to pruss.c and PRUSS CFG space is not exposed.
*) Moved APIs pruss_cfg_gpimode(), pruss_cfg_miirt_enable(),
pruss_cfg_xfr_enable(), pruss_cfg_get_gpmux(), pruss_cfg_set_gpmux() to
pruss.c file as they are using APIs pruss_cfg_read / update.
Defined these APIs in pruss.h file as other drivers use these APIs to
perform respective operations.
Changes from v2 to v3:
*) No functional changes, the old series has been rebased on linux-next (tag:
next-20230306).
This series depends on another series which is already merged in the remoteproc
tree [3] and is part of v6.3-rc1. This series and the remoteproc series form
the PRUSS consumer API which can be used by consumer drivers to utilize the
PRUs.
One example of the consumer driver is the PRU-ICSSG ethernet driver [4],which
depends on this series and the remoteproc series [3].
[1] https://lore.kernel.org/all/20230313111127.1229187-1-danishanwar@ti.com/
[2] https://lore.kernel.org/all/20230306110934.2736465-1-danishanwar@ti.com/
[3] https://lore.kernel.org/all/20230106121046.886863-1-danishanwar@ti.com/#t
[4] https://lore.kernel.org/all/20230210114957.2667963-1-danishanwar@ti.com/
[5] https://lore.kernel.org/all/20230306110934.2736465-6-danishanwar@ti.com/
Thanks and Regards,
Md Danish Anwar
Andrew F. Davis (1):
soc: ti: pruss: Add pruss_{request,release}_mem_region() API
Suman Anna (2):
soc: ti: pruss: Add pruss_cfg_read()/update() API
soc: ti: pruss: Add helper functions to set GPI mode, MII_RT_event and
XFR
Tero Kristo (2):
soc: ti: pruss: Add pruss_get()/put() API
soc: ti: pruss: Add helper functions to get/set PRUSS_CFG_GPMUX
drivers/remoteproc/pru_rproc.c | 17 +-
drivers/soc/ti/pruss.c | 256 +++++++++++++++++-
drivers/soc/ti/pruss.h | 112 ++++++++
.../{pruss_driver.h => pruss_internal.h} | 34 +--
include/linux/remoteproc/pruss.h | 139 ++++++++++
5 files changed, 516 insertions(+), 42 deletions(-)
create mode 100644 drivers/soc/ti/pruss.h
rename include/linux/{pruss_driver.h => pruss_internal.h} (58%)
--
2.25.1
Powered by blists - more mailing lists