* [PATCH v9 08/38] dt-bindings: dma: Add Cirrus EP93xx
2024-03-26 9:18 [PATCH v9 00/38] ep93xx device tree conversion Nikita Shubin via B4 Relay
@ 2024-03-26 9:18 ` Nikita Shubin via B4 Relay
2024-03-28 4:26 ` Vinod Koul
2024-03-26 9:18 ` [PATCH v9 09/38] dma: cirrus: Convert to DT for " Nikita Shubin via B4 Relay
` (4 subsequent siblings)
5 siblings, 1 reply; 19+ messages in thread
From: Nikita Shubin via B4 Relay @ 2024-03-26 9:18 UTC (permalink / raw)
To: Vinod Koul, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alexander Sverdlin, Nikita Shubin
Cc: dmaengine, devicetree, linux-kernel, Arnd Bergmann,
Krzysztof Kozlowski
From: Nikita Shubin <nikita.shubin@maquefel.me>
Add YAML bindings for ep93xx SoC DMA.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
---
.../bindings/dma/cirrus,ep9301-dma-m2m.yaml | 84 ++++++++++++
.../bindings/dma/cirrus,ep9301-dma-m2p.yaml | 144 +++++++++++++++++++++
2 files changed, 228 insertions(+)
diff --git a/Documentation/devicetree/bindings/dma/cirrus,ep9301-dma-m2m.yaml b/Documentation/devicetree/bindings/dma/cirrus,ep9301-dma-m2m.yaml
new file mode 100644
index 000000000000..871b76ddf90f
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/cirrus,ep9301-dma-m2m.yaml
@@ -0,0 +1,84 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/cirrus,ep9301-dma-m2m.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Cirrus Logic ep93xx SoC DMA controller
+
+maintainers:
+ - Alexander Sverdlin <alexander.sverdlin@gmail.com>
+ - Nikita Shubin <nikita.shubin@maquefel.me>
+
+allOf:
+ - $ref: dma-controller.yaml#
+
+properties:
+ compatible:
+ oneOf:
+ - const: cirrus,ep9301-dma-m2m
+ - items:
+ - enum:
+ - cirrus,ep9302-dma-m2m
+ - cirrus,ep9307-dma-m2m
+ - cirrus,ep9312-dma-m2m
+ - cirrus,ep9315-dma-m2m
+ - const: cirrus,ep9301-dma-m2m
+
+ reg:
+ items:
+ - description: m2m0 channel registers
+ - description: m2m1 channel registers
+
+ clocks:
+ items:
+ - description: m2m0 channel gate clock
+ - description: m2m1 channel gate clock
+
+ clock-names:
+ items:
+ - const: m2m0
+ - const: m2m1
+
+ interrupts:
+ items:
+ - description: m2m0 channel interrupt
+ - description: m2m1 channel interrupt
+
+ '#dma-cells':
+ const: 2
+ description: |
+ The first cell is the unique device channel number as indicated by this
+ table for ep93xx:
+
+ 10: SPI controller
+ 11: IDE controller
+
+ The second cell is the DMA direction line number:
+
+ 1: Memory to device
+ 2: Device to memory
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/cirrus,ep9301-syscon.h>
+ dma-controller@80000100 {
+ compatible = "cirrus,ep9301-dma-m2m";
+ reg = <0x80000100 0x0040>,
+ <0x80000140 0x0040>;
+ clocks = <&syscon EP93XX_CLK_M2M0>,
+ <&syscon EP93XX_CLK_M2M1>;
+ clock-names = "m2m0", "m2m1";
+ interrupt-parent = <&vic0>;
+ interrupts = <17>, <18>;
+ #dma-cells = <2>;
+ };
diff --git a/Documentation/devicetree/bindings/dma/cirrus,ep9301-dma-m2p.yaml b/Documentation/devicetree/bindings/dma/cirrus,ep9301-dma-m2p.yaml
new file mode 100644
index 000000000000..d14c31553543
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/cirrus,ep9301-dma-m2p.yaml
@@ -0,0 +1,144 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/cirrus,ep9301-dma-m2p.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Cirrus Logic ep93xx SoC M2P DMA controller
+
+maintainers:
+ - Alexander Sverdlin <alexander.sverdlin@gmail.com>
+ - Nikita Shubin <nikita.shubin@maquefel.me>
+
+allOf:
+ - $ref: dma-controller.yaml#
+
+properties:
+ compatible:
+ oneOf:
+ - const: cirrus,ep9301-dma-m2p
+ - items:
+ - enum:
+ - cirrus,ep9302-dma-m2p
+ - cirrus,ep9307-dma-m2p
+ - cirrus,ep9312-dma-m2p
+ - cirrus,ep9315-dma-m2p
+ - const: cirrus,ep9301-dma-m2p
+
+ reg:
+ items:
+ - description: m2p0 channel registers
+ - description: m2p1 channel registers
+ - description: m2p2 channel registers
+ - description: m2p3 channel registers
+ - description: m2p4 channel registers
+ - description: m2p5 channel registers
+ - description: m2p6 channel registers
+ - description: m2p7 channel registers
+ - description: m2p8 channel registers
+ - description: m2p9 channel registers
+
+ clocks:
+ items:
+ - description: m2p0 channel gate clock
+ - description: m2p1 channel gate clock
+ - description: m2p2 channel gate clock
+ - description: m2p3 channel gate clock
+ - description: m2p4 channel gate clock
+ - description: m2p5 channel gate clock
+ - description: m2p6 channel gate clock
+ - description: m2p7 channel gate clock
+ - description: m2p8 channel gate clock
+ - description: m2p9 channel gate clock
+
+ clock-names:
+ items:
+ - const: m2p0
+ - const: m2p1
+ - const: m2p2
+ - const: m2p3
+ - const: m2p4
+ - const: m2p5
+ - const: m2p6
+ - const: m2p7
+ - const: m2p8
+ - const: m2p9
+
+ interrupts:
+ items:
+ - description: m2p0 channel interrupt
+ - description: m2p1 channel interrupt
+ - description: m2p2 channel interrupt
+ - description: m2p3 channel interrupt
+ - description: m2p4 channel interrupt
+ - description: m2p5 channel interrupt
+ - description: m2p6 channel interrupt
+ - description: m2p7 channel interrupt
+ - description: m2p8 channel interrupt
+ - description: m2p9 channel interrupt
+
+ '#dma-cells':
+ const: 2
+ description: |
+ The first cell is the unique device channel number as indicated by this
+ table for ep93xx:
+
+ 0: I2S channel 1
+ 1: I2S channel 2 (unused)
+ 2: AC97 channel 1 (unused)
+ 3: AC97 channel 2 (unused)
+ 4: AC97 channel 3 (unused)
+ 5: I2S channel 3 (unused)
+ 6: UART1 (unused)
+ 7: UART2 (unused)
+ 8: UART3 (unused)
+ 9: IRDA (unused)
+
+ The second cell is the DMA direction line number:
+
+ 1: Memory to device
+ 2: Device to memory
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/cirrus,ep9301-syscon.h>
+ dma-controller@80000000 {
+ compatible = "cirrus,ep9301-dma-m2p";
+ reg = <0x80000000 0x0040>,
+ <0x80000040 0x0040>,
+ <0x80000080 0x0040>,
+ <0x800000c0 0x0040>,
+ <0x80000240 0x0040>,
+ <0x80000200 0x0040>,
+ <0x800002c0 0x0040>,
+ <0x80000280 0x0040>,
+ <0x80000340 0x0040>,
+ <0x80000300 0x0040>;
+ clocks = <&syscon EP93XX_CLK_M2P0>,
+ <&syscon EP93XX_CLK_M2P1>,
+ <&syscon EP93XX_CLK_M2P2>,
+ <&syscon EP93XX_CLK_M2P3>,
+ <&syscon EP93XX_CLK_M2P4>,
+ <&syscon EP93XX_CLK_M2P5>,
+ <&syscon EP93XX_CLK_M2P6>,
+ <&syscon EP93XX_CLK_M2P7>,
+ <&syscon EP93XX_CLK_M2P8>,
+ <&syscon EP93XX_CLK_M2P9>;
+ clock-names = "m2p0", "m2p1",
+ "m2p2", "m2p3",
+ "m2p4", "m2p5",
+ "m2p6", "m2p7",
+ "m2p8", "m2p9";
+ interrupt-parent = <&vic0>;
+ interrupts = <7>, <8>, <9>, <10>, <11>, <12>, <13>, <14>, <15>, <16>;
+ #dma-cells = <2>;
+ };
--
2.41.0
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [PATCH v9 08/38] dt-bindings: dma: Add Cirrus EP93xx
2024-03-26 9:18 ` [PATCH v9 08/38] dt-bindings: dma: Add Cirrus EP93xx Nikita Shubin via B4 Relay
@ 2024-03-28 4:26 ` Vinod Koul
0 siblings, 0 replies; 19+ messages in thread
From: Vinod Koul @ 2024-03-28 4:26 UTC (permalink / raw)
To: nikita.shubin
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alexander Sverdlin, dmaengine, devicetree, linux-kernel,
Arnd Bergmann, Krzysztof Kozlowski
On 26-03-24, 12:18, Nikita Shubin via B4 Relay wrote:
> From: Nikita Shubin <nikita.shubin@maquefel.me>
>
> Add YAML bindings for ep93xx SoC DMA.
Acked-by: Vinod Koul <vkoul@kernel.org>
--
~Vinod
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v9 09/38] dma: cirrus: Convert to DT for Cirrus EP93xx
2024-03-26 9:18 [PATCH v9 00/38] ep93xx device tree conversion Nikita Shubin via B4 Relay
2024-03-26 9:18 ` [PATCH v9 08/38] dt-bindings: dma: Add Cirrus EP93xx Nikita Shubin via B4 Relay
@ 2024-03-26 9:18 ` Nikita Shubin via B4 Relay
2024-03-28 4:31 ` Vinod Koul
2024-03-26 9:19 ` [PATCH v9 38/38] dma: cirrus: remove platform code Nikita Shubin via B4 Relay
` (3 subsequent siblings)
5 siblings, 1 reply; 19+ messages in thread
From: Nikita Shubin via B4 Relay @ 2024-03-26 9:18 UTC (permalink / raw)
To: Vinod Koul, Nikita Shubin, Alexander Sverdlin
Cc: dmaengine, linux-kernel, Arnd Bergmann
From: Nikita Shubin <nikita.shubin@maquefel.me>
Convert Cirrus EP93xx DMA to device tree usage:
- add OF ID match table with data
- add of_probe for device tree
- add xlate for m2m/m2p
- drop subsys_initcall code
- drop platform probe
- drop platform structs usage
From now on it only supports device tree probing.
Co-developed-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
---
drivers/dma/ep93xx_dma.c | 239 ++++++++++++++++++++++++-------
include/linux/platform_data/dma-ep93xx.h | 6 +
2 files changed, 191 insertions(+), 54 deletions(-)
diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
index d6c60635e90d..17c8e2badee2 100644
--- a/drivers/dma/ep93xx_dma.c
+++ b/drivers/dma/ep93xx_dma.c
@@ -20,6 +20,8 @@
#include <linux/dmaengine.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
+#include <linux/of_dma.h>
+#include <linux/overflow.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
@@ -104,6 +106,11 @@
#define DMA_MAX_CHAN_BYTES 0xffff
#define DMA_MAX_CHAN_DESCRIPTORS 32
+enum ep93xx_dma_type {
+ M2P_DMA,
+ M2M_DMA,
+};
+
struct ep93xx_dma_engine;
static int ep93xx_dma_slave_config_write(struct dma_chan *chan,
enum dma_transfer_direction dir,
@@ -129,11 +136,17 @@ struct ep93xx_dma_desc {
struct list_head node;
};
+struct ep93xx_dma_chan_cfg {
+ u8 port;
+ enum dma_transfer_direction dir;
+};
+
/**
* struct ep93xx_dma_chan - an EP93xx DMA M2P/M2M channel
* @chan: dmaengine API channel
* @edma: pointer to the engine device
* @regs: memory mapped registers
+ * @dma_cfg: channel number, direction
* @irq: interrupt number of the channel
* @clk: clock used by this channel
* @tasklet: channel specific tasklet used for callbacks
@@ -157,14 +170,12 @@ struct ep93xx_dma_desc {
* descriptor in the chain. When a descriptor is moved to the @active queue,
* the first and chained descriptors are flattened into a single list.
*
- * @chan.private holds pointer to &struct ep93xx_dma_data which contains
- * necessary channel configuration information. For memcpy channels this must
- * be %NULL.
*/
struct ep93xx_dma_chan {
struct dma_chan chan;
const struct ep93xx_dma_engine *edma;
void __iomem *regs;
+ struct ep93xx_dma_chan_cfg dma_cfg;
int irq;
struct clk *clk;
struct tasklet_struct tasklet;
@@ -216,6 +227,11 @@ struct ep93xx_dma_engine {
struct ep93xx_dma_chan channels[] __counted_by(num_channels);
};
+struct ep93xx_edma_data {
+ u32 id;
+ size_t num_channels;
+};
+
static inline struct device *chan2dev(struct ep93xx_dma_chan *edmac)
{
return &edmac->chan.dev->device;
@@ -318,10 +334,9 @@ static void m2p_set_control(struct ep93xx_dma_chan *edmac, u32 control)
static int m2p_hw_setup(struct ep93xx_dma_chan *edmac)
{
- struct ep93xx_dma_data *data = edmac->chan.private;
u32 control;
- writel(data->port & 0xf, edmac->regs + M2P_PPALLOC);
+ writel(edmac->dma_cfg.port & 0xf, edmac->regs + M2P_PPALLOC);
control = M2P_CONTROL_CH_ERROR_INT | M2P_CONTROL_ICE
| M2P_CONTROL_ENABLE;
@@ -458,16 +473,15 @@ static int m2p_hw_interrupt(struct ep93xx_dma_chan *edmac)
static int m2m_hw_setup(struct ep93xx_dma_chan *edmac)
{
- const struct ep93xx_dma_data *data = edmac->chan.private;
u32 control = 0;
- if (!data) {
+ if (edmac->dma_cfg.dir == DMA_MEM_TO_MEM) {
/* This is memcpy channel, nothing to configure */
writel(control, edmac->regs + M2M_CONTROL);
return 0;
}
- switch (data->port) {
+ switch (edmac->dma_cfg.port) {
case EP93XX_DMA_SSP:
/*
* This was found via experimenting - anything less than 5
@@ -477,7 +491,7 @@ static int m2m_hw_setup(struct ep93xx_dma_chan *edmac)
control = (5 << M2M_CONTROL_PWSC_SHIFT);
control |= M2M_CONTROL_NO_HDSK;
- if (data->direction == DMA_MEM_TO_DEV) {
+ if (edmac->dma_cfg.dir == DMA_MEM_TO_DEV) {
control |= M2M_CONTROL_DAH;
control |= M2M_CONTROL_TM_TX;
control |= M2M_CONTROL_RSS_SSPTX;
@@ -493,7 +507,7 @@ static int m2m_hw_setup(struct ep93xx_dma_chan *edmac)
* This IDE part is totally untested. Values below are taken
* from the EP93xx Users's Guide and might not be correct.
*/
- if (data->direction == DMA_MEM_TO_DEV) {
+ if (edmac->dma_cfg.dir == DMA_MEM_TO_DEV) {
/* Worst case from the UG */
control = (3 << M2M_CONTROL_PWSC_SHIFT);
control |= M2M_CONTROL_DAH;
@@ -548,7 +562,6 @@ static void m2m_fill_desc(struct ep93xx_dma_chan *edmac)
static void m2m_hw_submit(struct ep93xx_dma_chan *edmac)
{
- struct ep93xx_dma_data *data = edmac->chan.private;
u32 control = readl(edmac->regs + M2M_CONTROL);
/*
@@ -574,7 +587,7 @@ static void m2m_hw_submit(struct ep93xx_dma_chan *edmac)
control |= M2M_CONTROL_ENABLE;
writel(control, edmac->regs + M2M_CONTROL);
- if (!data) {
+ if (edmac->dma_cfg.dir == DMA_MEM_TO_MEM) {
/*
* For memcpy channels the software trigger must be asserted
* in order to start the memcpy operation.
@@ -636,7 +649,7 @@ static int m2m_hw_interrupt(struct ep93xx_dma_chan *edmac)
*/
if (ep93xx_dma_advance_active(edmac)) {
m2m_fill_desc(edmac);
- if (done && !edmac->chan.private) {
+ if (done && edmac->dma_cfg.dir == DMA_MEM_TO_MEM) {
/* Software trigger for memcpy channel */
control = readl(edmac->regs + M2M_CONTROL);
control |= M2M_CONTROL_START;
@@ -867,25 +880,22 @@ static dma_cookie_t ep93xx_dma_tx_submit(struct dma_async_tx_descriptor *tx)
static int ep93xx_dma_alloc_chan_resources(struct dma_chan *chan)
{
struct ep93xx_dma_chan *edmac = to_ep93xx_dma_chan(chan);
- struct ep93xx_dma_data *data = chan->private;
const char *name = dma_chan_name(chan);
int ret, i;
/* Sanity check the channel parameters */
if (!edmac->edma->m2m) {
- if (!data)
+ if (edmac->dma_cfg.port < EP93XX_DMA_I2S1 ||
+ edmac->dma_cfg.port > EP93XX_DMA_IRDA)
return -EINVAL;
- if (data->port < EP93XX_DMA_I2S1 ||
- data->port > EP93XX_DMA_IRDA)
- return -EINVAL;
- if (data->direction != ep93xx_dma_chan_direction(chan))
+ if (edmac->dma_cfg.dir != ep93xx_dma_chan_direction(chan))
return -EINVAL;
} else {
- if (data) {
- switch (data->port) {
+ if (edmac->dma_cfg.dir != DMA_MEM_TO_MEM) {
+ switch (edmac->dma_cfg.port) {
case EP93XX_DMA_SSP:
case EP93XX_DMA_IDE:
- if (!is_slave_direction(data->direction))
+ if (!is_slave_direction(edmac->dma_cfg.dir))
return -EINVAL;
break;
default:
@@ -894,9 +904,6 @@ static int ep93xx_dma_alloc_chan_resources(struct dma_chan *chan)
}
}
- if (data && data->name)
- name = data->name;
-
ret = clk_prepare_enable(edmac->clk);
if (ret)
return ret;
@@ -1315,36 +1322,53 @@ static void ep93xx_dma_issue_pending(struct dma_chan *chan)
ep93xx_dma_advance_work(to_ep93xx_dma_chan(chan));
}
-static int __init ep93xx_dma_probe(struct platform_device *pdev)
+static struct ep93xx_dma_engine *ep93xx_dma_of_probe(struct platform_device *pdev)
{
- struct ep93xx_dma_platform_data *pdata = dev_get_platdata(&pdev->dev);
+ const struct ep93xx_edma_data *data;
+ struct device *dev = &pdev->dev;
struct ep93xx_dma_engine *edma;
struct dma_device *dma_dev;
- int ret, i;
+ char dma_clk_name[5];
+ int i;
- edma = kzalloc(struct_size(edma, channels, pdata->num_channels), GFP_KERNEL);
+ data = device_get_match_data(dev);
+ if (!data)
+ return ERR_PTR(dev_err_probe(dev, -ENODEV, "No device match found\n"));
+
+ edma = devm_kzalloc(dev, struct_size(edma, channels, data->num_channels),
+ GFP_KERNEL);
if (!edma)
- return -ENOMEM;
+ return ERR_PTR(-ENOMEM);
+ edma->m2m = data->id;
+ edma->num_channels = data->num_channels;
dma_dev = &edma->dma_dev;
- edma->m2m = platform_get_device_id(pdev)->driver_data;
- edma->num_channels = pdata->num_channels;
INIT_LIST_HEAD(&dma_dev->channels);
- for (i = 0; i < pdata->num_channels; i++) {
- const struct ep93xx_dma_chan_data *cdata = &pdata->channels[i];
+ for (i = 0; i < edma->num_channels; i++) {
struct ep93xx_dma_chan *edmac = &edma->channels[i];
edmac->chan.device = dma_dev;
- edmac->regs = cdata->base;
- edmac->irq = cdata->irq;
+ edmac->regs = devm_platform_ioremap_resource(pdev, i);
+ if (IS_ERR(edmac->regs))
+ return edmac->regs;
+
+ edmac->irq = fwnode_irq_get(dev_fwnode(dev), i);
+ if (edmac->irq < 0)
+ return ERR_PTR(edmac->irq);
+
edmac->edma = edma;
- edmac->clk = clk_get(NULL, cdata->name);
+ if (edma->m2m)
+ sprintf(dma_clk_name, "m2m%u", i);
+ else
+ sprintf(dma_clk_name, "m2p%u", i);
+
+ edmac->clk = devm_clk_get(dev, dma_clk_name);
if (IS_ERR(edmac->clk)) {
- dev_warn(&pdev->dev, "failed to get clock for %s\n",
- cdata->name);
- continue;
+ dev_err_probe(dev, PTR_ERR(edmac->clk),
+ "no %s clock found\n", dma_clk_name);
+ return ERR_CAST(edmac->clk);
}
spin_lock_init(&edmac->lock);
@@ -1357,6 +1381,90 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
&dma_dev->channels);
}
+ return edma;
+}
+
+static bool ep93xx_m2p_dma_filter(struct dma_chan *chan, void *filter_param)
+{
+ struct ep93xx_dma_chan *echan = to_ep93xx_dma_chan(chan);
+ struct ep93xx_dma_chan_cfg *cfg = filter_param;
+
+ if (cfg->dir != ep93xx_dma_chan_direction(chan))
+ return false;
+
+ echan->dma_cfg = *cfg;
+ return true;
+}
+
+static struct dma_chan *ep93xx_m2p_dma_of_xlate(struct of_phandle_args *dma_spec,
+ struct of_dma *ofdma)
+{
+ struct ep93xx_dma_engine *edma = ofdma->of_dma_data;
+ dma_cap_mask_t mask = edma->dma_dev.cap_mask;
+ struct ep93xx_dma_chan_cfg dma_cfg;
+ u8 port = dma_spec->args[0];
+ u8 direction = dma_spec->args[1];
+
+ if (port > EP93XX_DMA_IRDA)
+ return NULL;
+
+ if (!is_slave_direction(direction))
+ return NULL;
+
+ dma_cfg.port = port;
+ dma_cfg.dir = direction;
+
+ return __dma_request_channel(&mask, ep93xx_m2p_dma_filter, &dma_cfg, ofdma->of_node);
+}
+
+static bool ep93xx_m2m_dma_filter(struct dma_chan *chan, void *filter_param)
+{
+ struct ep93xx_dma_chan *echan = to_ep93xx_dma_chan(chan);
+ struct ep93xx_dma_chan_cfg *cfg = filter_param;
+
+ echan->dma_cfg = *cfg;
+
+ return true;
+}
+
+static struct dma_chan *ep93xx_m2m_dma_of_xlate(struct of_phandle_args *dma_spec,
+ struct of_dma *ofdma)
+{
+ struct ep93xx_dma_engine *edma = ofdma->of_dma_data;
+ dma_cap_mask_t mask = edma->dma_dev.cap_mask;
+ struct ep93xx_dma_chan_cfg dma_cfg;
+ u8 port = dma_spec->args[0];
+ u8 direction = dma_spec->args[1];
+
+ if (!is_slave_direction(direction))
+ return NULL;
+
+ switch (port) {
+ case EP93XX_DMA_SSP:
+ case EP93XX_DMA_IDE:
+ break;
+ default:
+ return NULL;
+ }
+
+ dma_cfg.port = port;
+ dma_cfg.dir = direction;
+
+ return __dma_request_channel(&mask, ep93xx_m2m_dma_filter, &dma_cfg, ofdma->of_node);
+}
+
+static int ep93xx_dma_probe(struct platform_device *pdev)
+{
+ struct ep93xx_dma_engine *edma;
+ struct dma_device *dma_dev;
+ int ret;
+
+ edma = ep93xx_dma_of_probe(pdev);
+ if (!edma)
+ return PTR_ERR(edma);
+
+ dma_dev = &edma->dma_dev;
+
dma_cap_zero(dma_dev->cap_mask);
dma_cap_set(DMA_SLAVE, dma_dev->cap_mask);
dma_cap_set(DMA_CYCLIC, dma_dev->cap_mask);
@@ -1393,21 +1501,46 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
}
ret = dma_async_device_register(dma_dev);
- if (unlikely(ret)) {
- for (i = 0; i < edma->num_channels; i++) {
- struct ep93xx_dma_chan *edmac = &edma->channels[i];
- if (!IS_ERR_OR_NULL(edmac->clk))
- clk_put(edmac->clk);
- }
- kfree(edma);
+ if (ret)
+ return ret;
+
+ if (edma->m2m) {
+ ret = of_dma_controller_register(pdev->dev.of_node, ep93xx_m2m_dma_of_xlate,
+ edma);
} else {
- dev_info(dma_dev->dev, "EP93xx M2%s DMA ready\n",
- edma->m2m ? "M" : "P");
+ ret = of_dma_controller_register(pdev->dev.of_node, ep93xx_m2p_dma_of_xlate,
+ edma);
}
+ if (ret)
+ goto err_dma_unregister;
+
+ dev_info(dma_dev->dev, "EP93xx M2%s DMA ready\n", edma->m2m ? "M" : "P");
+
+ return 0;
+
+err_dma_unregister:
+ dma_async_device_unregister(dma_dev);
return ret;
}
+static const struct ep93xx_edma_data edma_m2p = {
+ .id = M2P_DMA,
+ .num_channels = 10,
+};
+
+static const struct ep93xx_edma_data edma_m2m = {
+ .id = M2M_DMA,
+ .num_channels = 2,
+};
+
+static const struct of_device_id ep93xx_dma_of_ids[] = {
+ { .compatible = "cirrus,ep9301-dma-m2p", .data = &edma_m2p },
+ { .compatible = "cirrus,ep9301-dma-m2m", .data = &edma_m2m },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, ep93xx_dma_of_ids);
+
static const struct platform_device_id ep93xx_dma_driver_ids[] = {
{ "ep93xx-dma-m2p", 0 },
{ "ep93xx-dma-m2m", 1 },
@@ -1417,15 +1550,13 @@ static const struct platform_device_id ep93xx_dma_driver_ids[] = {
static struct platform_driver ep93xx_dma_driver = {
.driver = {
.name = "ep93xx-dma",
+ .of_match_table = ep93xx_dma_of_ids,
},
.id_table = ep93xx_dma_driver_ids,
+ .probe = ep93xx_dma_probe,
};
-static int __init ep93xx_dma_module_init(void)
-{
- return platform_driver_probe(&ep93xx_dma_driver, ep93xx_dma_probe);
-}
-subsys_initcall(ep93xx_dma_module_init);
+module_platform_driver(ep93xx_dma_driver);
MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>");
MODULE_DESCRIPTION("EP93xx DMA driver");
diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h
index eb9805bb3fe8..9ec5cdd5a1eb 100644
--- a/include/linux/platform_data/dma-ep93xx.h
+++ b/include/linux/platform_data/dma-ep93xx.h
@@ -3,8 +3,11 @@
#define __ASM_ARCH_DMA_H
#include <linux/types.h>
+#include <linux/device.h>
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
+#include <linux/property.h>
+#include <linux/string.h>
/*
* M2P channels.
@@ -70,6 +73,9 @@ struct ep93xx_dma_platform_data {
static inline bool ep93xx_dma_chan_is_m2p(struct dma_chan *chan)
{
+ if (device_is_compatible(chan->device->dev, "cirrus,ep9301-dma-m2p"))
+ return true;
+
return !strcmp(dev_name(chan->device->dev), "ep93xx-dma-m2p");
}
--
2.41.0
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [PATCH v9 09/38] dma: cirrus: Convert to DT for Cirrus EP93xx
2024-03-26 9:18 ` [PATCH v9 09/38] dma: cirrus: Convert to DT for " Nikita Shubin via B4 Relay
@ 2024-03-28 4:31 ` Vinod Koul
2024-03-28 7:21 ` Alexander Sverdlin
2024-03-28 7:24 ` Nikita Shubin
0 siblings, 2 replies; 19+ messages in thread
From: Vinod Koul @ 2024-03-28 4:31 UTC (permalink / raw)
To: nikita.shubin; +Cc: Alexander Sverdlin, dmaengine, linux-kernel, Arnd Bergmann
On 26-03-24, 12:18, Nikita Shubin via B4 Relay wrote:
> From: Nikita Shubin <nikita.shubin@maquefel.me>
>
> Convert Cirrus EP93xx DMA to device tree usage:
Subsytem is dmaengine: pls fix that
>
> - add OF ID match table with data
> - add of_probe for device tree
> - add xlate for m2m/m2p
> - drop subsys_initcall code
> - drop platform probe
> - drop platform structs usage
>
> >From now on it only supports device tree probing.
>
> Co-developed-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
> Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
> ---
> drivers/dma/ep93xx_dma.c | 239 ++++++++++++++++++++++++-------
> include/linux/platform_data/dma-ep93xx.h | 6 +
> 2 files changed, 191 insertions(+), 54 deletions(-)
>
> diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
> index d6c60635e90d..17c8e2badee2 100644
> --- a/drivers/dma/ep93xx_dma.c
> +++ b/drivers/dma/ep93xx_dma.c
> @@ -20,6 +20,8 @@
> #include <linux/dmaengine.h>
> #include <linux/module.h>
> #include <linux/mod_devicetable.h>
> +#include <linux/of_dma.h>
> +#include <linux/overflow.h>
> #include <linux/platform_device.h>
> #include <linux/slab.h>
>
> @@ -104,6 +106,11 @@
> #define DMA_MAX_CHAN_BYTES 0xffff
> #define DMA_MAX_CHAN_DESCRIPTORS 32
>
> +enum ep93xx_dma_type {
> + M2P_DMA,
Is this missing P2M?
> + M2M_DMA,
> +};
> +
> struct ep93xx_dma_engine;
> static int ep93xx_dma_slave_config_write(struct dma_chan *chan,
> enum dma_transfer_direction dir,
> @@ -129,11 +136,17 @@ struct ep93xx_dma_desc {
> struct list_head node;
> };
>
> +struct ep93xx_dma_chan_cfg {
> + u8 port;
> + enum dma_transfer_direction dir;
Why is direction stored here, it should be derived from the prep_xxx
call, that has direction as an argument
> +};
> +
> /**
> * struct ep93xx_dma_chan - an EP93xx DMA M2P/M2M channel
> * @chan: dmaengine API channel
> * @edma: pointer to the engine device
> * @regs: memory mapped registers
> + * @dma_cfg: channel number, direction
> * @irq: interrupt number of the channel
> * @clk: clock used by this channel
> * @tasklet: channel specific tasklet used for callbacks
> @@ -157,14 +170,12 @@ struct ep93xx_dma_desc {
> * descriptor in the chain. When a descriptor is moved to the @active queue,
> * the first and chained descriptors are flattened into a single list.
> *
> - * @chan.private holds pointer to &struct ep93xx_dma_data which contains
> - * necessary channel configuration information. For memcpy channels this must
> - * be %NULL.
> */
> struct ep93xx_dma_chan {
> struct dma_chan chan;
> const struct ep93xx_dma_engine *edma;
> void __iomem *regs;
> + struct ep93xx_dma_chan_cfg dma_cfg;
> int irq;
> struct clk *clk;
> struct tasklet_struct tasklet;
> @@ -216,6 +227,11 @@ struct ep93xx_dma_engine {
> struct ep93xx_dma_chan channels[] __counted_by(num_channels);
> };
>
> +struct ep93xx_edma_data {
> + u32 id;
> + size_t num_channels;
> +};
> +
> static inline struct device *chan2dev(struct ep93xx_dma_chan *edmac)
> {
> return &edmac->chan.dev->device;
> @@ -318,10 +334,9 @@ static void m2p_set_control(struct ep93xx_dma_chan *edmac, u32 control)
>
> static int m2p_hw_setup(struct ep93xx_dma_chan *edmac)
> {
> - struct ep93xx_dma_data *data = edmac->chan.private;
> u32 control;
>
> - writel(data->port & 0xf, edmac->regs + M2P_PPALLOC);
> + writel(edmac->dma_cfg.port & 0xf, edmac->regs + M2P_PPALLOC);
>
> control = M2P_CONTROL_CH_ERROR_INT | M2P_CONTROL_ICE
> | M2P_CONTROL_ENABLE;
> @@ -458,16 +473,15 @@ static int m2p_hw_interrupt(struct ep93xx_dma_chan *edmac)
>
> static int m2m_hw_setup(struct ep93xx_dma_chan *edmac)
> {
> - const struct ep93xx_dma_data *data = edmac->chan.private;
> u32 control = 0;
>
> - if (!data) {
> + if (edmac->dma_cfg.dir == DMA_MEM_TO_MEM) {
> /* This is memcpy channel, nothing to configure */
> writel(control, edmac->regs + M2M_CONTROL);
> return 0;
> }
>
> - switch (data->port) {
> + switch (edmac->dma_cfg.port) {
> case EP93XX_DMA_SSP:
> /*
> * This was found via experimenting - anything less than 5
> @@ -477,7 +491,7 @@ static int m2m_hw_setup(struct ep93xx_dma_chan *edmac)
> control = (5 << M2M_CONTROL_PWSC_SHIFT);
> control |= M2M_CONTROL_NO_HDSK;
>
> - if (data->direction == DMA_MEM_TO_DEV) {
> + if (edmac->dma_cfg.dir == DMA_MEM_TO_DEV) {
> control |= M2M_CONTROL_DAH;
> control |= M2M_CONTROL_TM_TX;
> control |= M2M_CONTROL_RSS_SSPTX;
> @@ -493,7 +507,7 @@ static int m2m_hw_setup(struct ep93xx_dma_chan *edmac)
> * This IDE part is totally untested. Values below are taken
> * from the EP93xx Users's Guide and might not be correct.
> */
> - if (data->direction == DMA_MEM_TO_DEV) {
> + if (edmac->dma_cfg.dir == DMA_MEM_TO_DEV) {
> /* Worst case from the UG */
> control = (3 << M2M_CONTROL_PWSC_SHIFT);
> control |= M2M_CONTROL_DAH;
> @@ -548,7 +562,6 @@ static void m2m_fill_desc(struct ep93xx_dma_chan *edmac)
>
> static void m2m_hw_submit(struct ep93xx_dma_chan *edmac)
> {
> - struct ep93xx_dma_data *data = edmac->chan.private;
> u32 control = readl(edmac->regs + M2M_CONTROL);
>
> /*
> @@ -574,7 +587,7 @@ static void m2m_hw_submit(struct ep93xx_dma_chan *edmac)
> control |= M2M_CONTROL_ENABLE;
> writel(control, edmac->regs + M2M_CONTROL);
>
> - if (!data) {
> + if (edmac->dma_cfg.dir == DMA_MEM_TO_MEM) {
> /*
> * For memcpy channels the software trigger must be asserted
> * in order to start the memcpy operation.
> @@ -636,7 +649,7 @@ static int m2m_hw_interrupt(struct ep93xx_dma_chan *edmac)
> */
> if (ep93xx_dma_advance_active(edmac)) {
> m2m_fill_desc(edmac);
> - if (done && !edmac->chan.private) {
> + if (done && edmac->dma_cfg.dir == DMA_MEM_TO_MEM) {
> /* Software trigger for memcpy channel */
> control = readl(edmac->regs + M2M_CONTROL);
> control |= M2M_CONTROL_START;
> @@ -867,25 +880,22 @@ static dma_cookie_t ep93xx_dma_tx_submit(struct dma_async_tx_descriptor *tx)
> static int ep93xx_dma_alloc_chan_resources(struct dma_chan *chan)
> {
> struct ep93xx_dma_chan *edmac = to_ep93xx_dma_chan(chan);
> - struct ep93xx_dma_data *data = chan->private;
> const char *name = dma_chan_name(chan);
> int ret, i;
>
> /* Sanity check the channel parameters */
> if (!edmac->edma->m2m) {
> - if (!data)
> + if (edmac->dma_cfg.port < EP93XX_DMA_I2S1 ||
> + edmac->dma_cfg.port > EP93XX_DMA_IRDA)
> return -EINVAL;
> - if (data->port < EP93XX_DMA_I2S1 ||
> - data->port > EP93XX_DMA_IRDA)
> - return -EINVAL;
> - if (data->direction != ep93xx_dma_chan_direction(chan))
> + if (edmac->dma_cfg.dir != ep93xx_dma_chan_direction(chan))
> return -EINVAL;
> } else {
> - if (data) {
> - switch (data->port) {
> + if (edmac->dma_cfg.dir != DMA_MEM_TO_MEM) {
> + switch (edmac->dma_cfg.port) {
> case EP93XX_DMA_SSP:
> case EP93XX_DMA_IDE:
> - if (!is_slave_direction(data->direction))
> + if (!is_slave_direction(edmac->dma_cfg.dir))
> return -EINVAL;
> break;
> default:
> @@ -894,9 +904,6 @@ static int ep93xx_dma_alloc_chan_resources(struct dma_chan *chan)
> }
> }
>
> - if (data && data->name)
> - name = data->name;
> -
> ret = clk_prepare_enable(edmac->clk);
> if (ret)
> return ret;
> @@ -1315,36 +1322,53 @@ static void ep93xx_dma_issue_pending(struct dma_chan *chan)
> ep93xx_dma_advance_work(to_ep93xx_dma_chan(chan));
> }
>
> -static int __init ep93xx_dma_probe(struct platform_device *pdev)
> +static struct ep93xx_dma_engine *ep93xx_dma_of_probe(struct platform_device *pdev)
> {
> - struct ep93xx_dma_platform_data *pdata = dev_get_platdata(&pdev->dev);
> + const struct ep93xx_edma_data *data;
> + struct device *dev = &pdev->dev;
> struct ep93xx_dma_engine *edma;
> struct dma_device *dma_dev;
> - int ret, i;
> + char dma_clk_name[5];
> + int i;
>
> - edma = kzalloc(struct_size(edma, channels, pdata->num_channels), GFP_KERNEL);
> + data = device_get_match_data(dev);
> + if (!data)
> + return ERR_PTR(dev_err_probe(dev, -ENODEV, "No device match found\n"));
> +
> + edma = devm_kzalloc(dev, struct_size(edma, channels, data->num_channels),
> + GFP_KERNEL);
> if (!edma)
> - return -ENOMEM;
> + return ERR_PTR(-ENOMEM);
>
> + edma->m2m = data->id;
> + edma->num_channels = data->num_channels;
> dma_dev = &edma->dma_dev;
> - edma->m2m = platform_get_device_id(pdev)->driver_data;
> - edma->num_channels = pdata->num_channels;
>
> INIT_LIST_HEAD(&dma_dev->channels);
> - for (i = 0; i < pdata->num_channels; i++) {
> - const struct ep93xx_dma_chan_data *cdata = &pdata->channels[i];
> + for (i = 0; i < edma->num_channels; i++) {
> struct ep93xx_dma_chan *edmac = &edma->channels[i];
>
> edmac->chan.device = dma_dev;
> - edmac->regs = cdata->base;
> - edmac->irq = cdata->irq;
> + edmac->regs = devm_platform_ioremap_resource(pdev, i);
> + if (IS_ERR(edmac->regs))
> + return edmac->regs;
> +
> + edmac->irq = fwnode_irq_get(dev_fwnode(dev), i);
> + if (edmac->irq < 0)
> + return ERR_PTR(edmac->irq);
> +
> edmac->edma = edma;
>
> - edmac->clk = clk_get(NULL, cdata->name);
> + if (edma->m2m)
> + sprintf(dma_clk_name, "m2m%u", i);
> + else
> + sprintf(dma_clk_name, "m2p%u", i);
> +
> + edmac->clk = devm_clk_get(dev, dma_clk_name);
> if (IS_ERR(edmac->clk)) {
> - dev_warn(&pdev->dev, "failed to get clock for %s\n",
> - cdata->name);
> - continue;
> + dev_err_probe(dev, PTR_ERR(edmac->clk),
> + "no %s clock found\n", dma_clk_name);
> + return ERR_CAST(edmac->clk);
> }
>
> spin_lock_init(&edmac->lock);
> @@ -1357,6 +1381,90 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
> &dma_dev->channels);
> }
>
> + return edma;
> +}
> +
> +static bool ep93xx_m2p_dma_filter(struct dma_chan *chan, void *filter_param)
> +{
> + struct ep93xx_dma_chan *echan = to_ep93xx_dma_chan(chan);
> + struct ep93xx_dma_chan_cfg *cfg = filter_param;
> +
> + if (cfg->dir != ep93xx_dma_chan_direction(chan))
> + return false;
> +
> + echan->dma_cfg = *cfg;
> + return true;
> +}
> +
> +static struct dma_chan *ep93xx_m2p_dma_of_xlate(struct of_phandle_args *dma_spec,
> + struct of_dma *ofdma)
> +{
> + struct ep93xx_dma_engine *edma = ofdma->of_dma_data;
> + dma_cap_mask_t mask = edma->dma_dev.cap_mask;
> + struct ep93xx_dma_chan_cfg dma_cfg;
> + u8 port = dma_spec->args[0];
> + u8 direction = dma_spec->args[1];
> +
> + if (port > EP93XX_DMA_IRDA)
> + return NULL;
> +
> + if (!is_slave_direction(direction))
> + return NULL;
> +
> + dma_cfg.port = port;
> + dma_cfg.dir = direction;
> +
> + return __dma_request_channel(&mask, ep93xx_m2p_dma_filter, &dma_cfg, ofdma->of_node);
> +}
> +
> +static bool ep93xx_m2m_dma_filter(struct dma_chan *chan, void *filter_param)
> +{
> + struct ep93xx_dma_chan *echan = to_ep93xx_dma_chan(chan);
> + struct ep93xx_dma_chan_cfg *cfg = filter_param;
> +
> + echan->dma_cfg = *cfg;
> +
> + return true;
> +}
> +
> +static struct dma_chan *ep93xx_m2m_dma_of_xlate(struct of_phandle_args *dma_spec,
> + struct of_dma *ofdma)
> +{
> + struct ep93xx_dma_engine *edma = ofdma->of_dma_data;
> + dma_cap_mask_t mask = edma->dma_dev.cap_mask;
> + struct ep93xx_dma_chan_cfg dma_cfg;
> + u8 port = dma_spec->args[0];
> + u8 direction = dma_spec->args[1];
> +
> + if (!is_slave_direction(direction))
> + return NULL;
> +
> + switch (port) {
> + case EP93XX_DMA_SSP:
> + case EP93XX_DMA_IDE:
> + break;
> + default:
> + return NULL;
> + }
> +
> + dma_cfg.port = port;
> + dma_cfg.dir = direction;
> +
> + return __dma_request_channel(&mask, ep93xx_m2m_dma_filter, &dma_cfg, ofdma->of_node);
> +}
> +
> +static int ep93xx_dma_probe(struct platform_device *pdev)
> +{
> + struct ep93xx_dma_engine *edma;
> + struct dma_device *dma_dev;
> + int ret;
> +
> + edma = ep93xx_dma_of_probe(pdev);
> + if (!edma)
> + return PTR_ERR(edma);
> +
> + dma_dev = &edma->dma_dev;
> +
> dma_cap_zero(dma_dev->cap_mask);
> dma_cap_set(DMA_SLAVE, dma_dev->cap_mask);
> dma_cap_set(DMA_CYCLIC, dma_dev->cap_mask);
> @@ -1393,21 +1501,46 @@ static int __init ep93xx_dma_probe(struct platform_device *pdev)
> }
>
> ret = dma_async_device_register(dma_dev);
> - if (unlikely(ret)) {
> - for (i = 0; i < edma->num_channels; i++) {
> - struct ep93xx_dma_chan *edmac = &edma->channels[i];
> - if (!IS_ERR_OR_NULL(edmac->clk))
> - clk_put(edmac->clk);
> - }
> - kfree(edma);
> + if (ret)
> + return ret;
> +
> + if (edma->m2m) {
> + ret = of_dma_controller_register(pdev->dev.of_node, ep93xx_m2m_dma_of_xlate,
> + edma);
> } else {
> - dev_info(dma_dev->dev, "EP93xx M2%s DMA ready\n",
> - edma->m2m ? "M" : "P");
> + ret = of_dma_controller_register(pdev->dev.of_node, ep93xx_m2p_dma_of_xlate,
> + edma);
> }
> + if (ret)
> + goto err_dma_unregister;
> +
> + dev_info(dma_dev->dev, "EP93xx M2%s DMA ready\n", edma->m2m ? "M" : "P");
> +
> + return 0;
> +
> +err_dma_unregister:
> + dma_async_device_unregister(dma_dev);
>
> return ret;
> }
>
> +static const struct ep93xx_edma_data edma_m2p = {
> + .id = M2P_DMA,
> + .num_channels = 10,
> +};
> +
> +static const struct ep93xx_edma_data edma_m2m = {
> + .id = M2M_DMA,
> + .num_channels = 2,
> +};
> +
> +static const struct of_device_id ep93xx_dma_of_ids[] = {
> + { .compatible = "cirrus,ep9301-dma-m2p", .data = &edma_m2p },
> + { .compatible = "cirrus,ep9301-dma-m2m", .data = &edma_m2m },
> + { /* sentinel */ }
> +};
> +MODULE_DEVICE_TABLE(of, ep93xx_dma_of_ids);
> +
> static const struct platform_device_id ep93xx_dma_driver_ids[] = {
> { "ep93xx-dma-m2p", 0 },
> { "ep93xx-dma-m2m", 1 },
> @@ -1417,15 +1550,13 @@ static const struct platform_device_id ep93xx_dma_driver_ids[] = {
> static struct platform_driver ep93xx_dma_driver = {
> .driver = {
> .name = "ep93xx-dma",
> + .of_match_table = ep93xx_dma_of_ids,
> },
> .id_table = ep93xx_dma_driver_ids,
> + .probe = ep93xx_dma_probe,
> };
>
> -static int __init ep93xx_dma_module_init(void)
> -{
> - return platform_driver_probe(&ep93xx_dma_driver, ep93xx_dma_probe);
> -}
> -subsys_initcall(ep93xx_dma_module_init);
> +module_platform_driver(ep93xx_dma_driver);
>
> MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>");
> MODULE_DESCRIPTION("EP93xx DMA driver");
> diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h
> index eb9805bb3fe8..9ec5cdd5a1eb 100644
> --- a/include/linux/platform_data/dma-ep93xx.h
> +++ b/include/linux/platform_data/dma-ep93xx.h
> @@ -3,8 +3,11 @@
> #define __ASM_ARCH_DMA_H
>
> #include <linux/types.h>
> +#include <linux/device.h>
> #include <linux/dmaengine.h>
> #include <linux/dma-mapping.h>
> +#include <linux/property.h>
> +#include <linux/string.h>
>
> /*
> * M2P channels.
> @@ -70,6 +73,9 @@ struct ep93xx_dma_platform_data {
>
> static inline bool ep93xx_dma_chan_is_m2p(struct dma_chan *chan)
> {
> + if (device_is_compatible(chan->device->dev, "cirrus,ep9301-dma-m2p"))
> + return true;
> +
> return !strcmp(dev_name(chan->device->dev), "ep93xx-dma-m2p");
> }
>
>
> --
> 2.41.0
>
--
~Vinod
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [PATCH v9 09/38] dma: cirrus: Convert to DT for Cirrus EP93xx
2024-03-28 4:31 ` Vinod Koul
@ 2024-03-28 7:21 ` Alexander Sverdlin
2024-03-28 7:27 ` Vinod Koul
2024-03-28 7:24 ` Nikita Shubin
1 sibling, 1 reply; 19+ messages in thread
From: Alexander Sverdlin @ 2024-03-28 7:21 UTC (permalink / raw)
To: Vinod Koul, nikita.shubin; +Cc: dmaengine, linux-kernel, Arnd Bergmann
Hello Vinod!
On Thu, 2024-03-28 at 10:01 +0530, Vinod Koul wrote:
> On 26-03-24, 12:18, Nikita Shubin via B4 Relay wrote:
> > From: Nikita Shubin <nikita.shubin@maquefel.me>
> >
> > Convert Cirrus EP93xx DMA to device tree usage:
>
> Subsytem is dmaengine: pls fix that
>
> >
> > - add OF ID match table with data
> > - add of_probe for device tree
> > - add xlate for m2m/m2p
> > - drop subsys_initcall code
> > - drop platform probe
> > - drop platform structs usage
> >
> > > From now on it only supports device tree probing.
> >
> > Co-developed-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
> > Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
> > Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
> > ---
> > drivers/dma/ep93xx_dma.c | 239 ++++++++++++++++++++++++-------
> > include/linux/platform_data/dma-ep93xx.h | 6 +
> > 2 files changed, 191 insertions(+), 54 deletions(-)
> >
> > diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
> > index d6c60635e90d..17c8e2badee2 100644
> > --- a/drivers/dma/ep93xx_dma.c
> > +++ b/drivers/dma/ep93xx_dma.c
[...]
> >
> > @@ -104,6 +106,11 @@
> > #define DMA_MAX_CHAN_BYTES 0xffff
> > #define DMA_MAX_CHAN_DESCRIPTORS 32
> >
> > +enum ep93xx_dma_type {
> > + M2P_DMA,
>
> Is this missing P2M?
Not really. It's not the most obvious one, but anyway a way to enumerate
two types of DMA engines:
"7.1.1 DMA Features List
DMA specific features are:
• Ten fully independent, programmable DMA controller internal M2P/P2M
channels (5 Tx and 5 Rx).
• Two dedicated channels for Memory-to-Memory (M2M) and
Memory-to-External Peripheral Transfers (external M2P/P2M)."
Now the confusing part is that this "M2M" engine is actually used
to transfer to and from *some* devices, like SPI and IDE.
So both engines are capable of M2P and P2M, maybe Cirrus has named
two engines in a sub-optimal way decades ago and this is now a bit
historical naming.
> > + M2M_DMA,
> > +};
--
Alexander Sverdlin.
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [PATCH v9 09/38] dma: cirrus: Convert to DT for Cirrus EP93xx
2024-03-28 7:21 ` Alexander Sverdlin
@ 2024-03-28 7:27 ` Vinod Koul
0 siblings, 0 replies; 19+ messages in thread
From: Vinod Koul @ 2024-03-28 7:27 UTC (permalink / raw)
To: Alexander Sverdlin; +Cc: nikita.shubin, dmaengine, linux-kernel, Arnd Bergmann
On 28-03-24, 08:21, Alexander Sverdlin wrote:
> Hello Vinod!
>
> On Thu, 2024-03-28 at 10:01 +0530, Vinod Koul wrote:
> > On 26-03-24, 12:18, Nikita Shubin via B4 Relay wrote:
> > > From: Nikita Shubin <nikita.shubin@maquefel.me>
> > >
> > > Convert Cirrus EP93xx DMA to device tree usage:
> >
> > Subsytem is dmaengine: pls fix that
> >
> > >
> > > - add OF ID match table with data
> > > - add of_probe for device tree
> > > - add xlate for m2m/m2p
> > > - drop subsys_initcall code
> > > - drop platform probe
> > > - drop platform structs usage
> > >
> > > > From now on it only supports device tree probing.
> > >
> > > Co-developed-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
> > > Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
> > > Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
> > > ---
> > > drivers/dma/ep93xx_dma.c | 239 ++++++++++++++++++++++++-------
> > > include/linux/platform_data/dma-ep93xx.h | 6 +
> > > 2 files changed, 191 insertions(+), 54 deletions(-)
> > >
> > > diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
> > > index d6c60635e90d..17c8e2badee2 100644
> > > --- a/drivers/dma/ep93xx_dma.c
> > > +++ b/drivers/dma/ep93xx_dma.c
>
> [...]
>
> > >
> > > @@ -104,6 +106,11 @@
> > > #define DMA_MAX_CHAN_BYTES 0xffff
> > > #define DMA_MAX_CHAN_DESCRIPTORS 32
> > >
> > > +enum ep93xx_dma_type {
> > > + M2P_DMA,
> >
> > Is this missing P2M?
>
> Not really. It's not the most obvious one, but anyway a way to enumerate
> two types of DMA engines:
>
> "7.1.1 DMA Features List
> DMA specific features are:
> • Ten fully independent, programmable DMA controller internal M2P/P2M
> channels (5 Tx and 5 Rx).
> • Two dedicated channels for Memory-to-Memory (M2M) and
> Memory-to-External Peripheral Transfers (external M2P/P2M)."
>
> Now the confusing part is that this "M2M" engine is actually used
> to transfer to and from *some* devices, like SPI and IDE.
> So both engines are capable of M2P and P2M, maybe Cirrus has named
> two engines in a sub-optimal way decades ago and this is now a bit
> historical naming.
Okay, thanks for clarifying (might be worthwhile to mention this in
comments)
--
~Vinod
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v9 09/38] dma: cirrus: Convert to DT for Cirrus EP93xx
2024-03-28 4:31 ` Vinod Koul
2024-03-28 7:21 ` Alexander Sverdlin
@ 2024-03-28 7:24 ` Nikita Shubin
2024-03-28 7:28 ` Vinod Koul
1 sibling, 1 reply; 19+ messages in thread
From: Nikita Shubin @ 2024-03-28 7:24 UTC (permalink / raw)
To: Vinod Koul; +Cc: Alexander Sverdlin, dmaengine, linux-kernel, Arnd Bergmann
Hello Vinod!
Thank you for looking into this.
On Thu, 2024-03-28 at 10:01 +0530, Vinod Koul wrote:
> On 26-03-24, 12:18, Nikita Shubin via B4 Relay wrote:
> > From: Nikita Shubin <nikita.shubin@maquefel.me>
> >
> > +enum ep93xx_dma_type {
> > + M2P_DMA,
>
> Is this missing P2M?
>
> > + M2M_DMA,
> > +};
> > +
These are internal types used only to distinguish M2P/P2M and M2M
capable controllers in "of_device_id ep93xx_dma_of_ids[]".
So M2P_DMA is M2P/P2M, a can rename M2P_DMA to M2P_P2M_DMA to avoid
confusion.
> > struct ep93xx_dma_engine;
> > static int ep93xx_dma_slave_config_write(struct dma_chan *chan,
> > enum
> > dma_transfer_direction dir,
> > @@ -129,11 +136,17 @@ struct ep93xx_dma_desc {
> > struct list_head node;
> > };
> >
> > +struct ep93xx_dma_chan_cfg {
> > + u8 port;
> > + enum dma_transfer_direction dir;
>
> Why is direction stored here, it should be derived from the prep_xxx
> call, that has direction as an argument
>
>
M2P/P2M channels aren't unidirectional.
Citing "EP9xx User Guide":
"Ten fully independent, programmable DMA controller internal M2P/P2M
channels (5 Tx and 5 Rx)."
We need to return correct channel based on Device Tree provided data,
because we need direction in device_alloc_chan_resources() for hardware
setup before prepping.
May be i am mistaking somewhere.
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [PATCH v9 09/38] dma: cirrus: Convert to DT for Cirrus EP93xx
2024-03-28 7:24 ` Nikita Shubin
@ 2024-03-28 7:28 ` Vinod Koul
0 siblings, 0 replies; 19+ messages in thread
From: Vinod Koul @ 2024-03-28 7:28 UTC (permalink / raw)
To: Nikita Shubin; +Cc: Alexander Sverdlin, dmaengine, linux-kernel, Arnd Bergmann
On 28-03-24, 10:24, Nikita Shubin wrote:
> Hello Vinod!
>
> Thank you for looking into this.
>
> On Thu, 2024-03-28 at 10:01 +0530, Vinod Koul wrote:
> > On 26-03-24, 12:18, Nikita Shubin via B4 Relay wrote:
> > > From: Nikita Shubin <nikita.shubin@maquefel.me>
> > >
> > > +enum ep93xx_dma_type {
> > > + M2P_DMA,
> >
> > Is this missing P2M?
> >
> > > + M2M_DMA,
> > > +};
> > > +
>
> These are internal types used only to distinguish M2P/P2M and M2M
> capable controllers in "of_device_id ep93xx_dma_of_ids[]".
>
> So M2P_DMA is M2P/P2M, a can rename M2P_DMA to M2P_P2M_DMA to avoid
> confusion.
>
>
> > > struct ep93xx_dma_engine;
> > > static int ep93xx_dma_slave_config_write(struct dma_chan *chan,
> > > enum
> > > dma_transfer_direction dir,
> > > @@ -129,11 +136,17 @@ struct ep93xx_dma_desc {
> > > struct list_head node;
> > > };
> > >
> > > +struct ep93xx_dma_chan_cfg {
> > > + u8 port;
> > > + enum dma_transfer_direction dir;
> >
> > Why is direction stored here, it should be derived from the prep_xxx
> > call, that has direction as an argument
> >
> >
>
> M2P/P2M channels aren't unidirectional.
>
> Citing "EP9xx User Guide":
>
> "Ten fully independent, programmable DMA controller internal M2P/P2M
> channels (5 Tx and 5 Rx)."
>
> We need to return correct channel based on Device Tree provided data,
> because we need direction in device_alloc_chan_resources() for hardware
> setup before prepping.
Okay it sounds okay in that case...
>
> May be i am mistaking somewhere.
--
~Vinod
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v9 38/38] dma: cirrus: remove platform code
2024-03-26 9:18 [PATCH v9 00/38] ep93xx device tree conversion Nikita Shubin via B4 Relay
2024-03-26 9:18 ` [PATCH v9 08/38] dt-bindings: dma: Add Cirrus EP93xx Nikita Shubin via B4 Relay
2024-03-26 9:18 ` [PATCH v9 09/38] dma: cirrus: Convert to DT for " Nikita Shubin via B4 Relay
@ 2024-03-26 9:19 ` Nikita Shubin via B4 Relay
2024-03-28 4:44 ` Vinod Koul
2024-03-26 10:07 ` [PATCH v9 00/38] ep93xx device tree conversion Arnd Bergmann
` (2 subsequent siblings)
5 siblings, 1 reply; 19+ messages in thread
From: Nikita Shubin via B4 Relay @ 2024-03-26 9:19 UTC (permalink / raw)
To: Vinod Koul, Nikita Shubin, Alexander Sverdlin
Cc: linux-kernel, dmaengine, Arnd Bergmann
From: Nikita Shubin <nikita.shubin@maquefel.me>
Remove DMA platform header, from now on we use device tree for DMA
clients.
Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
---
drivers/dma/ep93xx_dma.c | 48 ++++++++++++++-
include/linux/platform_data/dma-ep93xx.h | 100 -------------------------------
2 files changed, 46 insertions(+), 102 deletions(-)
diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
index 17c8e2badee2..43c4241af7f5 100644
--- a/drivers/dma/ep93xx_dma.c
+++ b/drivers/dma/ep93xx_dma.c
@@ -17,6 +17,7 @@
#include <linux/clk.h>
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
@@ -25,8 +26,6 @@
#include <linux/platform_device.h>
#include <linux/slab.h>
-#include <linux/platform_data/dma-ep93xx.h>
-
#include "dmaengine.h"
/* M2P registers */
@@ -106,6 +105,26 @@
#define DMA_MAX_CHAN_BYTES 0xffff
#define DMA_MAX_CHAN_DESCRIPTORS 32
+/*
+ * M2P channels.
+ *
+ * Note that these values are also directly used for setting the PPALLOC
+ * register.
+ */
+#define EP93XX_DMA_I2S1 0
+#define EP93XX_DMA_I2S2 1
+#define EP93XX_DMA_AAC1 2
+#define EP93XX_DMA_AAC2 3
+#define EP93XX_DMA_AAC3 4
+#define EP93XX_DMA_I2S3 5
+#define EP93XX_DMA_UART1 6
+#define EP93XX_DMA_UART2 7
+#define EP93XX_DMA_UART3 8
+#define EP93XX_DMA_IRDA 9
+/* M2M channels */
+#define EP93XX_DMA_SSP 10
+#define EP93XX_DMA_IDE 11
+
enum ep93xx_dma_type {
M2P_DMA,
M2M_DMA,
@@ -242,6 +261,31 @@ static struct ep93xx_dma_chan *to_ep93xx_dma_chan(struct dma_chan *chan)
return container_of(chan, struct ep93xx_dma_chan, chan);
}
+static inline bool ep93xx_dma_chan_is_m2p(struct dma_chan *chan)
+{
+ if (device_is_compatible(chan->device->dev, "cirrus,ep9301-dma-m2p"))
+ return true;
+
+ return !strcmp(dev_name(chan->device->dev), "ep93xx-dma-m2p");
+}
+
+/*
+ * ep93xx_dma_chan_direction - returns direction the channel can be used
+ *
+ * This function can be used in filter functions to find out whether the
+ * channel supports given DMA direction. Only M2P channels have such
+ * limitation, for M2M channels the direction is configurable.
+ */
+static inline enum dma_transfer_direction
+ep93xx_dma_chan_direction(struct dma_chan *chan)
+{
+ if (!ep93xx_dma_chan_is_m2p(chan))
+ return DMA_TRANS_NONE;
+
+ /* even channels are for TX, odd for RX */
+ return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
+}
+
/**
* ep93xx_dma_set_active - set new active descriptor chain
* @edmac: channel
diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h
deleted file mode 100644
index 9ec5cdd5a1eb..000000000000
--- a/include/linux/platform_data/dma-ep93xx.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef __ASM_ARCH_DMA_H
-#define __ASM_ARCH_DMA_H
-
-#include <linux/types.h>
-#include <linux/device.h>
-#include <linux/dmaengine.h>
-#include <linux/dma-mapping.h>
-#include <linux/property.h>
-#include <linux/string.h>
-
-/*
- * M2P channels.
- *
- * Note that these values are also directly used for setting the PPALLOC
- * register.
- */
-#define EP93XX_DMA_I2S1 0
-#define EP93XX_DMA_I2S2 1
-#define EP93XX_DMA_AAC1 2
-#define EP93XX_DMA_AAC2 3
-#define EP93XX_DMA_AAC3 4
-#define EP93XX_DMA_I2S3 5
-#define EP93XX_DMA_UART1 6
-#define EP93XX_DMA_UART2 7
-#define EP93XX_DMA_UART3 8
-#define EP93XX_DMA_IRDA 9
-/* M2M channels */
-#define EP93XX_DMA_SSP 10
-#define EP93XX_DMA_IDE 11
-
-/**
- * struct ep93xx_dma_data - configuration data for the EP93xx dmaengine
- * @port: peripheral which is requesting the channel
- * @direction: TX/RX channel
- * @name: optional name for the channel, this is displayed in /proc/interrupts
- *
- * This information is passed as private channel parameter in a filter
- * function. Note that this is only needed for slave/cyclic channels. For
- * memcpy channels %NULL data should be passed.
- */
-struct ep93xx_dma_data {
- int port;
- enum dma_transfer_direction direction;
- const char *name;
-};
-
-/**
- * struct ep93xx_dma_chan_data - platform specific data for a DMA channel
- * @name: name of the channel, used for getting the right clock for the channel
- * @base: mapped registers
- * @irq: interrupt number used by this channel
- */
-struct ep93xx_dma_chan_data {
- const char *name;
- void __iomem *base;
- int irq;
-};
-
-/**
- * struct ep93xx_dma_platform_data - platform data for the dmaengine driver
- * @channels: array of channels which are passed to the driver
- * @num_channels: number of channels in the array
- *
- * This structure is passed to the DMA engine driver via platform data. For
- * M2P channels, contract is that even channels are for TX and odd for RX.
- * There is no requirement for the M2M channels.
- */
-struct ep93xx_dma_platform_data {
- struct ep93xx_dma_chan_data *channels;
- size_t num_channels;
-};
-
-static inline bool ep93xx_dma_chan_is_m2p(struct dma_chan *chan)
-{
- if (device_is_compatible(chan->device->dev, "cirrus,ep9301-dma-m2p"))
- return true;
-
- return !strcmp(dev_name(chan->device->dev), "ep93xx-dma-m2p");
-}
-
-/**
- * ep93xx_dma_chan_direction - returns direction the channel can be used
- * @chan: channel
- *
- * This function can be used in filter functions to find out whether the
- * channel supports given DMA direction. Only M2P channels have such
- * limitation, for M2M channels the direction is configurable.
- */
-static inline enum dma_transfer_direction
-ep93xx_dma_chan_direction(struct dma_chan *chan)
-{
- if (!ep93xx_dma_chan_is_m2p(chan))
- return DMA_TRANS_NONE;
-
- /* even channels are for TX, odd for RX */
- return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
-}
-
-#endif /* __ASM_ARCH_DMA_H */
--
2.41.0
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [PATCH v9 38/38] dma: cirrus: remove platform code
2024-03-26 9:19 ` [PATCH v9 38/38] dma: cirrus: remove platform code Nikita Shubin via B4 Relay
@ 2024-03-28 4:44 ` Vinod Koul
2024-03-28 6:59 ` Alexander Sverdlin
0 siblings, 1 reply; 19+ messages in thread
From: Vinod Koul @ 2024-03-28 4:44 UTC (permalink / raw)
To: nikita.shubin; +Cc: Alexander Sverdlin, linux-kernel, dmaengine, Arnd Bergmann
On 26-03-24, 12:19, Nikita Shubin via B4 Relay wrote:
> From: Nikita Shubin <nikita.shubin@maquefel.me>
s/dma/dmaengine is subject line
>
> Remove DMA platform header, from now on we use device tree for DMA
> clients.
>
> Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
> ---
> drivers/dma/ep93xx_dma.c | 48 ++++++++++++++-
> include/linux/platform_data/dma-ep93xx.h | 100 -------------------------------
> 2 files changed, 46 insertions(+), 102 deletions(-)
>
> diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
> index 17c8e2badee2..43c4241af7f5 100644
> --- a/drivers/dma/ep93xx_dma.c
> +++ b/drivers/dma/ep93xx_dma.c
> @@ -17,6 +17,7 @@
> #include <linux/clk.h>
> #include <linux/init.h>
> #include <linux/interrupt.h>
> +#include <linux/dma-mapping.h>
> #include <linux/dmaengine.h>
> #include <linux/module.h>
> #include <linux/mod_devicetable.h>
> @@ -25,8 +26,6 @@
> #include <linux/platform_device.h>
> #include <linux/slab.h>
>
> -#include <linux/platform_data/dma-ep93xx.h>
> -
> #include "dmaengine.h"
>
> /* M2P registers */
> @@ -106,6 +105,26 @@
> #define DMA_MAX_CHAN_BYTES 0xffff
> #define DMA_MAX_CHAN_DESCRIPTORS 32
>
> +/*
> + * M2P channels.
> + *
> + * Note that these values are also directly used for setting the PPALLOC
> + * register.
> + */
> +#define EP93XX_DMA_I2S1 0
> +#define EP93XX_DMA_I2S2 1
> +#define EP93XX_DMA_AAC1 2
> +#define EP93XX_DMA_AAC2 3
> +#define EP93XX_DMA_AAC3 4
> +#define EP93XX_DMA_I2S3 5
> +#define EP93XX_DMA_UART1 6
> +#define EP93XX_DMA_UART2 7
> +#define EP93XX_DMA_UART3 8
> +#define EP93XX_DMA_IRDA 9
> +/* M2M channels */
> +#define EP93XX_DMA_SSP 10
> +#define EP93XX_DMA_IDE 11
> +
> enum ep93xx_dma_type {
> M2P_DMA,
> M2M_DMA,
> @@ -242,6 +261,31 @@ static struct ep93xx_dma_chan *to_ep93xx_dma_chan(struct dma_chan *chan)
> return container_of(chan, struct ep93xx_dma_chan, chan);
> }
>
> +static inline bool ep93xx_dma_chan_is_m2p(struct dma_chan *chan)
> +{
> + if (device_is_compatible(chan->device->dev, "cirrus,ep9301-dma-m2p"))
> + return true;
> +
> + return !strcmp(dev_name(chan->device->dev), "ep93xx-dma-m2p");
> +}
> +
> +/*
> + * ep93xx_dma_chan_direction - returns direction the channel can be used
> + *
> + * This function can be used in filter functions to find out whether the
> + * channel supports given DMA direction. Only M2P channels have such
> + * limitation, for M2M channels the direction is configurable.
> + */
> +static inline enum dma_transfer_direction
> +ep93xx_dma_chan_direction(struct dma_chan *chan)
> +{
> + if (!ep93xx_dma_chan_is_m2p(chan))
> + return DMA_TRANS_NONE;
> +
> + /* even channels are for TX, odd for RX */
Is this a SW limitation and HW one?
> + return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
> +}
> +
> /**
> * ep93xx_dma_set_active - set new active descriptor chain
> * @edmac: channel
> diff --git a/include/linux/platform_data/dma-ep93xx.h b/include/linux/platform_data/dma-ep93xx.h
> deleted file mode 100644
> index 9ec5cdd5a1eb..000000000000
> --- a/include/linux/platform_data/dma-ep93xx.h
> +++ /dev/null
> @@ -1,100 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef __ASM_ARCH_DMA_H
> -#define __ASM_ARCH_DMA_H
> -
> -#include <linux/types.h>
> -#include <linux/device.h>
> -#include <linux/dmaengine.h>
> -#include <linux/dma-mapping.h>
> -#include <linux/property.h>
> -#include <linux/string.h>
> -
> -/*
> - * M2P channels.
> - *
> - * Note that these values are also directly used for setting the PPALLOC
> - * register.
> - */
> -#define EP93XX_DMA_I2S1 0
> -#define EP93XX_DMA_I2S2 1
> -#define EP93XX_DMA_AAC1 2
> -#define EP93XX_DMA_AAC2 3
> -#define EP93XX_DMA_AAC3 4
> -#define EP93XX_DMA_I2S3 5
> -#define EP93XX_DMA_UART1 6
> -#define EP93XX_DMA_UART2 7
> -#define EP93XX_DMA_UART3 8
> -#define EP93XX_DMA_IRDA 9
> -/* M2M channels */
> -#define EP93XX_DMA_SSP 10
> -#define EP93XX_DMA_IDE 11
> -
> -/**
> - * struct ep93xx_dma_data - configuration data for the EP93xx dmaengine
> - * @port: peripheral which is requesting the channel
> - * @direction: TX/RX channel
> - * @name: optional name for the channel, this is displayed in /proc/interrupts
> - *
> - * This information is passed as private channel parameter in a filter
> - * function. Note that this is only needed for slave/cyclic channels. For
> - * memcpy channels %NULL data should be passed.
> - */
> -struct ep93xx_dma_data {
> - int port;
> - enum dma_transfer_direction direction;
> - const char *name;
> -};
> -
> -/**
> - * struct ep93xx_dma_chan_data - platform specific data for a DMA channel
> - * @name: name of the channel, used for getting the right clock for the channel
> - * @base: mapped registers
> - * @irq: interrupt number used by this channel
> - */
> -struct ep93xx_dma_chan_data {
> - const char *name;
> - void __iomem *base;
> - int irq;
> -};
> -
> -/**
> - * struct ep93xx_dma_platform_data - platform data for the dmaengine driver
> - * @channels: array of channels which are passed to the driver
> - * @num_channels: number of channels in the array
> - *
> - * This structure is passed to the DMA engine driver via platform data. For
> - * M2P channels, contract is that even channels are for TX and odd for RX.
> - * There is no requirement for the M2M channels.
> - */
> -struct ep93xx_dma_platform_data {
> - struct ep93xx_dma_chan_data *channels;
> - size_t num_channels;
> -};
> -
> -static inline bool ep93xx_dma_chan_is_m2p(struct dma_chan *chan)
> -{
> - if (device_is_compatible(chan->device->dev, "cirrus,ep9301-dma-m2p"))
> - return true;
> -
> - return !strcmp(dev_name(chan->device->dev), "ep93xx-dma-m2p");
> -}
> -
> -/**
> - * ep93xx_dma_chan_direction - returns direction the channel can be used
> - * @chan: channel
> - *
> - * This function can be used in filter functions to find out whether the
> - * channel supports given DMA direction. Only M2P channels have such
> - * limitation, for M2M channels the direction is configurable.
> - */
> -static inline enum dma_transfer_direction
> -ep93xx_dma_chan_direction(struct dma_chan *chan)
> -{
> - if (!ep93xx_dma_chan_is_m2p(chan))
> - return DMA_TRANS_NONE;
> -
> - /* even channels are for TX, odd for RX */
> - return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
> -}
> -
> -#endif /* __ASM_ARCH_DMA_H */
>
> --
> 2.41.0
>
--
~Vinod
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [PATCH v9 38/38] dma: cirrus: remove platform code
2024-03-28 4:44 ` Vinod Koul
@ 2024-03-28 6:59 ` Alexander Sverdlin
0 siblings, 0 replies; 19+ messages in thread
From: Alexander Sverdlin @ 2024-03-28 6:59 UTC (permalink / raw)
To: Vinod Koul, nikita.shubin; +Cc: linux-kernel, dmaengine, Arnd Bergmann
Hi Vinod!
On Thu, 2024-03-28 at 10:14 +0530, Vinod Koul wrote:
> > From: Nikita Shubin <nikita.shubin@maquefel.me>
>
> s/dma/dmaengine is subject line
>
> >
> > Remove DMA platform header, from now on we use device tree for DMA
> > clients.
> >
> > Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
> > ---
> > drivers/dma/ep93xx_dma.c | 48 ++++++++++++++-
> > include/linux/platform_data/dma-ep93xx.h | 100 -------------------------------
> > 2 files changed, 46 insertions(+), 102 deletions(-)
> >
> > diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
> > index 17c8e2badee2..43c4241af7f5 100644
> > --- a/drivers/dma/ep93xx_dma.c
> > +++ b/drivers/dma/ep93xx_dma.c
[...]
> > +/*
> > + * ep93xx_dma_chan_direction - returns direction the channel can be used
> > + *
> > + * This function can be used in filter functions to find out whether the
> > + * channel supports given DMA direction. Only M2P channels have such
> > + * limitation, for M2M channels the direction is configurable.
> > + */
> > +static inline enum dma_transfer_direction
> > +ep93xx_dma_chan_direction(struct dma_chan *chan)
> > +{
> > + if (!ep93xx_dma_chan_is_m2p(chan))
> > + return DMA_TRANS_NONE;
> > +
> > + /* even channels are for TX, odd for RX */
>
> Is this a SW limitation and HW one?
The numbering scheme is defined in HW:
https://cdn.embeddedts.com/resource-attachments/ts-7000_ep9301-ug.pdf
"7.2.2 Internal M2P/P2M Channel Register Map" -> "PPALLOC"
"NOTE: The naming convention used for channels and
ports is as follows - even numbers correspond to transmit
channels/ports and odd numbers correspond to receive
channels/ports."
> > + return (chan->chan_id % 2 == 0) ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
> > +}
--
Alexander Sverdlin.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v9 00/38] ep93xx device tree conversion
2024-03-26 9:18 [PATCH v9 00/38] ep93xx device tree conversion Nikita Shubin via B4 Relay
` (2 preceding siblings ...)
2024-03-26 9:19 ` [PATCH v9 38/38] dma: cirrus: remove platform code Nikita Shubin via B4 Relay
@ 2024-03-26 10:07 ` Arnd Bergmann
2024-04-13 8:48 ` Uwe Kleine-König
2024-03-26 10:19 ` Krzysztof Kozlowski
2024-03-26 14:53 ` Andy Shevchenko
5 siblings, 1 reply; 19+ messages in thread
From: Arnd Bergmann @ 2024-03-26 10:07 UTC (permalink / raw)
To: Nikita Shubin, Hartley Sweeten, Alexander Sverdlin, Russell King,
Lukasz Majewski, Linus Walleij, Bartosz Golaszewski,
Andy Shevchenko, Michael Turquette, Stephen Boyd,
Sebastian Reichel, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Vinod Koul, Wim Van Sebroeck, Guenter Roeck, Thierry Reding,
Uwe Kleine-König, Mark Brown, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Miquel Raynal, Richard Weinberger,
Vignesh Raghavendra, Damien Le Moal, Sergey Shtylyov,
Dmitry Torokhov, Liam Girdwood, Jaroslav Kysela, Takashi Iwai,
Ralf Baechle, Aaron Wu, Lee Jones, Olof Johansson, Niklas Cassel
Cc: linux-arm-kernel, linux-kernel, open list:GPIO SUBSYSTEM,
linux-clk, linux-pm, devicetree, dmaengine, linux-watchdog,
linux-pwm, linux-spi, Netdev, linux-mtd, linux-ide, linux-input,
linux-sound, Bartosz Golaszewski, Krzysztof Kozlowski,
Andy Shevchenko, Andrew Lunn, Andy Shevchenko
On Tue, Mar 26, 2024, at 10:18, Nikita Shubin via B4 Relay wrote:
> The goal is to recieve ACKs for all patches in series to merge it via
> Arnd branch.
Thank you for the continued updates, I really hope we can merge
it all for 6.10. I've looked through it again and I'm pretty much
ready to just merge it, though I admit that the process is not
working out that great, and it would probably have been quicker
to add DT support to drivers individually through the subsystem
trees.
> Stephen Boyd, Vinod Koul PLEASE! give some comments on following, couse
> i hadn't one for a couple of iterations already:
>
> Following patches require attention from Stephen Boyd, as they were
> converted to aux_dev as suggested:
>
> - ARM: ep93xx: add regmap aux_dev
> - clk: ep93xx: add DT support for Cirrus EP93xx
>
> Following patches require attention from Vinod Koul:
>
> - dma: cirrus: Convert to DT for Cirrus EP93xx
> - dma: cirrus: remove platform code
I suspect that Stephen and Vinod may be missing this, as reviewing
a 38 patch series tends to be a lot of work, and they may have
missed that they are on the critical path here. I certainly
tend to just ignore an entire thread when it looks like I'm not
immediately going to be reviewing it all and other people are
likely to have more comments first, so I'm not blaming them.
To better catch their attention, I would suggest you repost the
two smaller sets of patches as a separate series, with only the
relevant people on Cc. Please also include the respective
bindings when you send send these patches to Stephen and
Vinod.
Arnd
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [PATCH v9 00/38] ep93xx device tree conversion
2024-03-26 10:07 ` [PATCH v9 00/38] ep93xx device tree conversion Arnd Bergmann
@ 2024-04-13 8:48 ` Uwe Kleine-König
0 siblings, 0 replies; 19+ messages in thread
From: Uwe Kleine-König @ 2024-04-13 8:48 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Nikita Shubin, Hartley Sweeten, Alexander Sverdlin, Russell King,
Lukasz Majewski, Linus Walleij, Bartosz Golaszewski,
Andy Shevchenko, Michael Turquette, Stephen Boyd,
Sebastian Reichel, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Vinod Koul, Wim Van Sebroeck, Guenter Roeck, Thierry Reding,
Mark Brown, David S . Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Miquel Raynal, Richard Weinberger,
Vignesh Raghavendra, Damien Le Moal, Sergey Shtylyov,
Dmitry Torokhov, Liam Girdwood, Jaroslav Kysela, Takashi Iwai,
Ralf Baechle, Aaron Wu, Lee Jones, Olof Johansson, Niklas Cassel,
linux-arm-kernel, linux-kernel, open list:GPIO SUBSYSTEM,
linux-clk, linux-pm, devicetree, dmaengine, linux-watchdog,
linux-pwm, linux-spi, Netdev, linux-mtd, linux-ide, linux-input,
linux-sound, Bartosz Golaszewski, Krzysztof Kozlowski,
Andy Shevchenko, Andrew Lunn, Andy Shevchenko
[-- Attachment #1: Type: text/plain, Size: 2501 bytes --]
Hello Arnd,
On Tue, Mar 26, 2024 at 11:07:06AM +0100, Arnd Bergmann wrote:
> On Tue, Mar 26, 2024, at 10:18, Nikita Shubin via B4 Relay wrote:
> > The goal is to recieve ACKs for all patches in series to merge it via
> > Arnd branch.
>
> Thank you for the continued updates, I really hope we can merge
> it all for 6.10. I've looked through it again and I'm pretty much
> ready to just merge it, though I admit that the process is not
> working out that great, and it would probably have been quicker
> to add DT support to drivers individually through the subsystem
> trees.
>
> > Stephen Boyd, Vinod Koul PLEASE! give some comments on following, couse
> > i hadn't one for a couple of iterations already:
> >
> > Following patches require attention from Stephen Boyd, as they were
> > converted to aux_dev as suggested:
> >
> > - ARM: ep93xx: add regmap aux_dev
> > - clk: ep93xx: add DT support for Cirrus EP93xx
> >
> > Following patches require attention from Vinod Koul:
> >
> > - dma: cirrus: Convert to DT for Cirrus EP93xx
> > - dma: cirrus: remove platform code
>
> I suspect that Stephen and Vinod may be missing this, as reviewing
> a 38 patch series tends to be a lot of work, and they may have
> missed that they are on the critical path here. I certainly
> tend to just ignore an entire thread when it looks like I'm not
> immediately going to be reviewing it all and other people are
> likely to have more comments first, so I'm not blaming them.
>
> To better catch their attention, I would suggest you repost the
> two smaller sets of patches as a separate series, with only the
> relevant people on Cc. Please also include the respective
> bindings when you send send these patches to Stephen and
> Vinod.
It seems this happend for the clock series; it's at
https://lore.kernel.org/all/20240408-ep93xx-clk-v1-0-1d0f4c324647@maquefel.me/
and received an ack by Stephen.
Vinod gave some feedback in this thread with some remarks that need
addressing.
With the latter I wonder if the plan to get this as a whole into v6.10
is screwed and if I should pick up the PWM bits (patches #12, #13 and
maybe #38) via my tree. Patch #38 touches arch/arm and
include/linux/soc, so I wouldn't pick that one up without an explicit
ack by (I guess) Arnd.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | https://www.pengutronix.de/ |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v9 00/38] ep93xx device tree conversion
2024-03-26 9:18 [PATCH v9 00/38] ep93xx device tree conversion Nikita Shubin via B4 Relay
` (3 preceding siblings ...)
2024-03-26 10:07 ` [PATCH v9 00/38] ep93xx device tree conversion Arnd Bergmann
@ 2024-03-26 10:19 ` Krzysztof Kozlowski
2024-03-26 14:49 ` Andy Shevchenko
2024-03-26 14:53 ` Andy Shevchenko
5 siblings, 1 reply; 19+ messages in thread
From: Krzysztof Kozlowski @ 2024-03-26 10:19 UTC (permalink / raw)
To: nikita.shubin, Hartley Sweeten, Alexander Sverdlin, Russell King,
Lukasz Majewski, Linus Walleij, Bartosz Golaszewski,
Andy Shevchenko, Michael Turquette, Stephen Boyd,
Sebastian Reichel, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Vinod Koul, Wim Van Sebroeck, Guenter Roeck, Thierry Reding,
Uwe Kleine-König, Mark Brown, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Miquel Raynal, Richard Weinberger,
Vignesh Raghavendra, Damien Le Moal, Sergey Shtylyov,
Dmitry Torokhov, Liam Girdwood, Jaroslav Kysela, Takashi Iwai,
Ralf Baechle, Wu, Aaron, Lee Jones, Olof Johansson, Niklas Cassel
Cc: linux-arm-kernel, linux-kernel, linux-gpio, linux-clk, linux-pm,
devicetree, dmaengine, linux-watchdog, linux-pwm, linux-spi,
netdev, linux-mtd, linux-ide, linux-input, linux-sound,
Arnd Bergmann, Bartosz Golaszewski, Andy Shevchenko, Andrew Lunn,
Andy Shevchenko
On 26/03/2024 10:18, Nikita Shubin via B4 Relay wrote:
> The goal is to recieve ACKs for all patches in series to merge it via Arnd branch.
>
> Some changes since last version (v8):
>
> - Most important, fixed bug in Device Tree resulting in CS4271 not working by Alexander Sverdlin.
> - added #interrupt-cells to gpio nodes with interrupts-controller
> - fixed some EOF in dtsi files
> - fixed identation and type in ep93xx-keypad thanks to Andy Shevchenko
>
> Stephen Boyd, Vinod Koul PLEASE! give some comments on following, couse i hadn't one for a couple of iterations already:
>
> Following patches require attention from Stephen Boyd, as they were converted to aux_dev as suggested:
>
> - ARM: ep93xx: add regmap aux_dev
> - clk: ep93xx: add DT support for Cirrus EP93xx
>
> Following patches require attention from Vinod Koul:
>
> - dma: cirrus: Convert to DT for Cirrus EP93xx
> - dma: cirrus: remove platform code
A lot of this could have been already merged if you split it... Just
saying...
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [PATCH v9 00/38] ep93xx device tree conversion
2024-03-26 10:19 ` Krzysztof Kozlowski
@ 2024-03-26 14:49 ` Andy Shevchenko
2024-03-27 5:07 ` Krzysztof Kozlowski
0 siblings, 1 reply; 19+ messages in thread
From: Andy Shevchenko @ 2024-03-26 14:49 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: nikita.shubin, Hartley Sweeten, Alexander Sverdlin, Russell King,
Lukasz Majewski, Linus Walleij, Bartosz Golaszewski,
Michael Turquette, Stephen Boyd, Sebastian Reichel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul, Wim Van Sebroeck,
Guenter Roeck, Thierry Reding, Uwe Kleine-König, Mark Brown,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Damien Le Moal, Sergey Shtylyov, Dmitry Torokhov, Liam Girdwood,
Jaroslav Kysela, Takashi Iwai, Ralf Baechle, Wu, Aaron, Lee Jones,
Olof Johansson, Niklas Cassel, linux-arm-kernel, linux-kernel,
linux-gpio, linux-clk, linux-pm, devicetree, dmaengine,
linux-watchdog, linux-pwm, linux-spi, netdev, linux-mtd,
linux-ide, linux-input, linux-sound, Arnd Bergmann,
Bartosz Golaszewski, Andrew Lunn
On Tue, Mar 26, 2024 at 11:19:54AM +0100, Krzysztof Kozlowski wrote:
> On 26/03/2024 10:18, Nikita Shubin via B4 Relay wrote:
> > The goal is to recieve ACKs for all patches in series to merge it via Arnd branch.
> >
> > Some changes since last version (v8):
> >
> > - Most important, fixed bug in Device Tree resulting in CS4271 not working by Alexander Sverdlin.
> > - added #interrupt-cells to gpio nodes with interrupts-controller
> > - fixed some EOF in dtsi files
> > - fixed identation and type in ep93xx-keypad thanks to Andy Shevchenko
> >
> > Stephen Boyd, Vinod Koul PLEASE! give some comments on following, couse i hadn't one for a couple of iterations already:
> >
> > Following patches require attention from Stephen Boyd, as they were converted to aux_dev as suggested:
> >
> > - ARM: ep93xx: add regmap aux_dev
> > - clk: ep93xx: add DT support for Cirrus EP93xx
> >
> > Following patches require attention from Vinod Koul:
> >
> > - dma: cirrus: Convert to DT for Cirrus EP93xx
> > - dma: cirrus: remove platform code
>
> A lot of this could have been already merged if you split it... Just
> saying...
But you able to apply DT schema patches if you wish.
Just doing? :-)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v9 00/38] ep93xx device tree conversion
2024-03-26 14:49 ` Andy Shevchenko
@ 2024-03-27 5:07 ` Krzysztof Kozlowski
2024-03-27 10:59 ` Andy Shevchenko
0 siblings, 1 reply; 19+ messages in thread
From: Krzysztof Kozlowski @ 2024-03-27 5:07 UTC (permalink / raw)
To: Andy Shevchenko
Cc: nikita.shubin, Hartley Sweeten, Alexander Sverdlin, Russell King,
Lukasz Majewski, Linus Walleij, Bartosz Golaszewski,
Michael Turquette, Stephen Boyd, Sebastian Reichel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul, Wim Van Sebroeck,
Guenter Roeck, Thierry Reding, Uwe Kleine-König, Mark Brown,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Damien Le Moal, Sergey Shtylyov, Dmitry Torokhov, Liam Girdwood,
Jaroslav Kysela, Takashi Iwai, Ralf Baechle, Wu, Aaron, Lee Jones,
Olof Johansson, Niklas Cassel, linux-arm-kernel, linux-kernel,
linux-gpio, linux-clk, linux-pm, devicetree, dmaengine,
linux-watchdog, linux-pwm, linux-spi, netdev, linux-mtd,
linux-ide, linux-input, linux-sound, Arnd Bergmann,
Bartosz Golaszewski, Andrew Lunn
On 26/03/2024 15:49, Andy Shevchenko wrote:
> On Tue, Mar 26, 2024 at 11:19:54AM +0100, Krzysztof Kozlowski wrote:
>> On 26/03/2024 10:18, Nikita Shubin via B4 Relay wrote:
>>> The goal is to recieve ACKs for all patches in series to merge it via Arnd branch.
>>>
>>> Some changes since last version (v8):
>>>
>>> - Most important, fixed bug in Device Tree resulting in CS4271 not working by Alexander Sverdlin.
>>> - added #interrupt-cells to gpio nodes with interrupts-controller
>>> - fixed some EOF in dtsi files
>>> - fixed identation and type in ep93xx-keypad thanks to Andy Shevchenko
>>>
>>> Stephen Boyd, Vinod Koul PLEASE! give some comments on following, couse i hadn't one for a couple of iterations already:
>>>
>>> Following patches require attention from Stephen Boyd, as they were converted to aux_dev as suggested:
>>>
>>> - ARM: ep93xx: add regmap aux_dev
>>> - clk: ep93xx: add DT support for Cirrus EP93xx
>>>
>>> Following patches require attention from Vinod Koul:
>>>
>>> - dma: cirrus: Convert to DT for Cirrus EP93xx
>>> - dma: cirrus: remove platform code
>>
>> A lot of this could have been already merged if you split it... Just
>> saying...
>
> But you able to apply DT schema patches if you wish.
> Just doing? :-)
Me? Why? DT bindings are supposed to go via subsystem maintainers, not
DT tree. Plus, I do not apply any bindings patches, except for managed
subsystems and none of them are touched here.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v9 00/38] ep93xx device tree conversion
2024-03-27 5:07 ` Krzysztof Kozlowski
@ 2024-03-27 10:59 ` Andy Shevchenko
0 siblings, 0 replies; 19+ messages in thread
From: Andy Shevchenko @ 2024-03-27 10:59 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Andy Shevchenko, nikita.shubin, Hartley Sweeten,
Alexander Sverdlin, Russell King, Lukasz Majewski, Linus Walleij,
Bartosz Golaszewski, Michael Turquette, Stephen Boyd,
Sebastian Reichel, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Vinod Koul, Wim Van Sebroeck, Guenter Roeck, Thierry Reding,
Uwe Kleine-König, Mark Brown, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Miquel Raynal, Richard Weinberger,
Vignesh Raghavendra, Damien Le Moal, Sergey Shtylyov,
Dmitry Torokhov, Liam Girdwood, Jaroslav Kysela, Takashi Iwai,
Ralf Baechle, Wu, Aaron, Lee Jones, Olof Johansson, Niklas Cassel,
linux-arm-kernel, linux-kernel, linux-gpio, linux-clk, linux-pm,
devicetree, dmaengine, linux-watchdog, linux-pwm, linux-spi,
netdev, linux-mtd, linux-ide, linux-input, linux-sound,
Arnd Bergmann, Bartosz Golaszewski, Andrew Lunn
On Wed, Mar 27, 2024 at 7:07 AM Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:
> On 26/03/2024 15:49, Andy Shevchenko wrote:
> > On Tue, Mar 26, 2024 at 11:19:54AM +0100, Krzysztof Kozlowski wrote:
> >> On 26/03/2024 10:18, Nikita Shubin via B4 Relay wrote:
...
> >> A lot of this could have been already merged if you split it... Just
> >> saying...
> >
> > But you able to apply DT schema patches if you wish.
> > Just doing? :-)
>
> Me? Why? DT bindings are supposed to go via subsystem maintainers, not
> DT tree.
Okay, I never remembered this rule, thank you for clarifying.
> Plus, I do not apply any bindings patches, except for managed
> subsystems and none of them are touched here.
Good to know!
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v9 00/38] ep93xx device tree conversion
2024-03-26 9:18 [PATCH v9 00/38] ep93xx device tree conversion Nikita Shubin via B4 Relay
` (4 preceding siblings ...)
2024-03-26 10:19 ` Krzysztof Kozlowski
@ 2024-03-26 14:53 ` Andy Shevchenko
5 siblings, 0 replies; 19+ messages in thread
From: Andy Shevchenko @ 2024-03-26 14:53 UTC (permalink / raw)
To: nikita.shubin
Cc: Alexander Sverdlin, Michael Turquette, Stephen Boyd, Vinod Koul,
linux-kernel, linux-clk, dmaengine, Arnd Bergmann
On Tue, Mar 26, 2024 at 12:18:27PM +0300, Nikita Shubin via B4 Relay wrote:
> The goal is to recieve ACKs for all patches in series to merge it via Arnd branch.
>
> Some changes since last version (v8):
>
> - Most important, fixed bug in Device Tree resulting in CS4271 not working by Alexander Sverdlin.
> - added #interrupt-cells to gpio nodes with interrupts-controller
> - fixed some EOF in dtsi files
> - fixed identation and type in ep93xx-keypad thanks to Andy Shevchenko
>
> Stephen Boyd, Vinod Koul PLEASE! give some comments on following, couse i
> hadn't one for a couple of iterations already:
> clk: ep93xx: add DT support for Cirrus EP93xx
> dma: cirrus: Convert to DT for Cirrus EP93xx
Thanks for pursuing this!
I just left the respective patches (I hope I haven't missed anything) that you
are waiting for the review.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 19+ messages in thread