aboutsummaryrefslogtreecommitdiff
path: root/drivers/dma/ste_dma40.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dma/ste_dma40.c')
-rw-r--r--drivers/dma/ste_dma40.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index b630323fc905..cdbde5582e81 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -1840,6 +1840,8 @@ static int d40_allocate_channel(struct d40_chan *d40c, bool *first_phy_user)
bool is_src;
bool is_log = d40c->dma_cfg.mode == STEDMA40_MODE_LOGICAL;
+ dev_info(chan2dev(d40c), "ENTER %s\n", __func__);
+
phys = d40c->base->phy_res;
num_phy_chans = d40c->base->num_phy_chans;
@@ -1950,6 +1952,8 @@ out:
else
d40c->base->lookup_phy_chans[d40c->phy_chan->num] = d40c;
+ dev_info(chan2dev(d40c), "EXIT OK %s\n", __func__);
+
return 0;
}
@@ -1958,6 +1962,8 @@ static int d40_config_memcpy(struct d40_chan *d40c)
{
dma_cap_mask_t cap = d40c->chan.device->cap_mask;
+ dev_info(chan2dev(d40c), "ENTER %s\n", __func__);
+
if (dma_has_cap(DMA_MEMCPY, cap) && !dma_has_cap(DMA_SLAVE, cap)) {
d40c->dma_cfg = dma40_memcpy_conf_log;
d40c->dma_cfg.dev_type = dma40_memcpy_channels[d40c->chan.chan_id];
@@ -1977,10 +1983,12 @@ static int d40_config_memcpy(struct d40_chan *d40c)
d40c->dst_def_cfg |= BIT(D40_SREG_CFG_EIM_POS);
} else {
- chan_err(d40c, "No memcpy\n");
+ chan_err(d40c, "EXIT No memcpy\n");
return -EINVAL;
}
+ dev_info(chan2dev(d40c), "EXIT OK %s\n", __func__);
+
return 0;
}
@@ -2273,6 +2281,7 @@ bool stedma40_filter(struct dma_chan *chan, void *data)
int err;
if (data) {
+ dev_info(chan2dev(d40c), "VALIDATE CONF %s\n", __func__);
err = d40_validate_conf(d40c, info);
if (!err)
d40c->dma_cfg = *info;
@@ -2355,17 +2364,25 @@ static struct dma_chan *d40_xlate(struct of_phandle_args *dma_spec,
flags = dma_spec->args[2];
switch (D40_DT_FLAGS_MODE(flags)) {
- case 0: cfg.mode = STEDMA40_MODE_LOGICAL; break;
- case 1: cfg.mode = STEDMA40_MODE_PHYSICAL; break;
+ case 0:
+ cfg.mode = STEDMA40_MODE_LOGICAL;
+ pr_info("d40_xlate: logical channel device %d\n", cfg.dev_type);
+ break;
+ case 1:
+ cfg.mode = STEDMA40_MODE_PHYSICAL;
+ pr_info("d40_xlate: physical channel device %d\n", cfg.dev_type);
+ break;
}
switch (D40_DT_FLAGS_DIR(flags)) {
case 0:
cfg.dir = DMA_MEM_TO_DEV;
+ pr_info("d40_xlate: memory to device\n");
cfg.dst_info.big_endian = D40_DT_FLAGS_BIG_ENDIAN(flags);
break;
case 1:
cfg.dir = DMA_DEV_TO_MEM;
+ pr_info("d40_xlate: device to memory\n");
cfg.src_info.big_endian = D40_DT_FLAGS_BIG_ENDIAN(flags);
break;
}
@@ -2373,10 +2390,15 @@ static struct dma_chan *d40_xlate(struct of_phandle_args *dma_spec,
if (D40_DT_FLAGS_FIXED_CHAN(flags)) {
cfg.phy_channel = dma_spec->args[1];
cfg.use_fixed_channel = true;
+ pr_info("d40_xlate: use fixed physical channel %d\n", cfg.phy_channel);
+ } else {
+ pr_info("d40_xlate: use any channel, ignore arg %d\n", dma_spec->args[1]);
}
- if (D40_DT_FLAGS_HIGH_PRIO(flags))
+ if (D40_DT_FLAGS_HIGH_PRIO(flags)) {
+ pr_info("d40_xlate: high prio channel\n");
cfg.high_priority = true;
+ }
return dma_request_channel(cap, stedma40_filter, &cfg);
}
@@ -2389,6 +2411,9 @@ static int d40_alloc_chan_resources(struct dma_chan *chan)
struct d40_chan *d40c =
container_of(chan, struct d40_chan, chan);
bool is_free_phy;
+
+ dev_info(chan2dev(d40c), "ENTER %s\n", __func__);
+
spin_lock_irqsave(&d40c->lock, flags);
dma_cookie_init(chan);
@@ -2444,6 +2469,7 @@ static int d40_alloc_chan_resources(struct dma_chan *chan)
pm_runtime_mark_last_busy(d40c->base->dev);
pm_runtime_put_autosuspend(d40c->base->dev);
spin_unlock_irqrestore(&d40c->lock, flags);
+ dev_info(chan2dev(d40c), "EXIT %s %d\n", __func__, err);
return err;
}