diff options
| author | Yan He <yanhe@codeaurora.org> | 2015-09-23 19:06:50 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:17:01 -0700 |
| commit | 043d337047f6e266465b6ed1c1fdf0c4a6c9b3a6 (patch) | |
| tree | dfcd005949dae15af3643f1987cad9c139af53b4 /drivers/platform | |
| parent | 6fd817114cf4cc90ad61070eb8dd927a995901ce (diff) | |
msm: sps: update SPS logging
Update the logging in SPS driver to catch additional info for
the interaction between SPS driver and BAM client drivers.
Change-Id: Icd5955d2d4dd83124f47e60e052ec3b3a2611025
Signed-off-by: Yan He <yanhe@codeaurora.org>
Diffstat (limited to 'drivers/platform')
| -rw-r--r-- | drivers/platform/msm/sps/bam.c | 8 | ||||
| -rw-r--r-- | drivers/platform/msm/sps/sps.c | 16 | ||||
| -rw-r--r-- | drivers/platform/msm/sps/sps_bam.c | 66 |
3 files changed, 76 insertions, 14 deletions
diff --git a/drivers/platform/msm/sps/bam.c b/drivers/platform/msm/sps/bam.c index e3b38fb9c5f8..3aef2060ab52 100644 --- a/drivers/platform/msm/sps/bam.c +++ b/drivers/platform/msm/sps/bam.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1505,8 +1505,10 @@ void bam_pipe_set_irq(void *base, u32 pipe, enum bam_enable irq_en, __func__, base); return; } - SPS_DBG2(dev, "sps:%s:bam=%pa 0x%p(va).pipe=%d.", - __func__, BAM_ID(dev), dev->base, pipe); + SPS_DBG2(dev, + "sps:%s:bam=%pa 0x%p(va).pipe=%d; irq_en:%d; src_mask:0x%x; ee:%d.\n", + __func__, BAM_ID(dev), dev->base, pipe, + irq_en, src_mask, ee); if (src_mask & BAM_PIPE_IRQ_RST_ERROR) { if (enhd_pipe) bam_write_reg_field(base, IRQ_EN, 0, diff --git a/drivers/platform/msm/sps/sps.c b/drivers/platform/msm/sps/sps.c index 4f1c57f734e3..e9b0945f0782 100644 --- a/drivers/platform/msm/sps/sps.c +++ b/drivers/platform/msm/sps/sps.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2016 , The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1825,8 +1825,10 @@ int sps_get_config(struct sps_pipe *h, struct sps_connect *config) if (pipe->bam == NULL) SPS_DBG(sps, "sps:%s.\n", __func__); else - SPS_DBG(pipe->bam, "sps:%s; BAM: %pa; pipe index:%d.\n", - __func__, BAM_ID(pipe->bam), pipe->pipe_index); + SPS_DBG(pipe->bam, + "sps:%s; BAM: %pa; pipe index:%d; options:0x%x.\n", + __func__, BAM_ID(pipe->bam), pipe->pipe_index, + pipe->connect.options); /* Copy current client connection state */ *config = pipe->connect; @@ -1854,11 +1856,13 @@ int sps_set_config(struct sps_pipe *h, struct sps_connect *config) } bam = sps_bam_lock(pipe); - if (bam == NULL) + if (bam == NULL) { + SPS_ERR(sps, "sps:%s:BAM is NULL.\n", __func__); return SPS_ERROR; + } - SPS_DBG(bam, "sps:%s; BAM: %pa; pipe index:%d.\n", - __func__, BAM_ID(bam), pipe->pipe_index); + SPS_DBG(bam, "sps:%s; BAM: %pa; pipe index:%d, config-options:0x%x.\n", + __func__, BAM_ID(bam), pipe->pipe_index, config->options); result = sps_bam_pipe_set_params(bam, pipe->pipe_index, config->options); diff --git a/drivers/platform/msm/sps/sps_bam.c b/drivers/platform/msm/sps/sps_bam.c index e81de23502e9..f34242f29e2b 100644 --- a/drivers/platform/msm/sps/sps_bam.c +++ b/drivers/platform/msm/sps/sps_bam.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -840,6 +840,11 @@ int sps_bam_pipe_connect(struct sps_pipe *bam_pipe, /* Process map parameters */ dev = map_pipe->bam; pipe_index = map_pipe->pipe_index; + + SPS_DBG2(dev, + "sps:BAM %pa; pipe %d; mode:%d; options:0x%x.\n", + BAM_ID(dev), pipe_index, params->mode, params->options); + if (pipe_index >= dev->props.num_pipes) { SPS_ERR(dev, "sps:Invalid BAM %pa pipe: %d\n", BAM_ID(dev), pipe_index); @@ -1046,6 +1051,11 @@ int sps_bam_pipe_connect(struct sps_pipe *bam_pipe, dev->pipe_active_mask |= 1UL << pipe_index; list_add_tail(&bam_pipe->list, &dev->pipes_q); + SPS_DBG2(dev, + "sps:BAM %pa; pipe %d; pipe_index_mask:0x%x; pipe_active_mask:0x%x.\n", + BAM_ID(dev), pipe_index, + bam_pipe->pipe_index_mask, dev->pipe_active_mask); + bam_pipe->state |= BAM_STATE_INIT; result = 0; exit_err: @@ -1138,6 +1148,11 @@ static void pipe_set_irq(struct sps_bam *dev, u32 pipe_index, struct sps_pipe *pipe = dev->pipes[pipe_index]; enum bam_enable irq_enable; + SPS_DBG2(dev, + "sps:BAM:%pa; pipe %d; poll:%d, irq_mask:0x%x; pipe state:0x%x; dev state:0x%x.\n", + BAM_ID(dev), pipe_index, poll, pipe->irq_mask, + pipe->state, dev->state); + if (poll == 0 && pipe->irq_mask != 0 && (dev->state & BAM_STATE_IRQ)) { if ((pipe->state & BAM_STATE_BAM2BAM) != 0 && @@ -1184,6 +1199,9 @@ int sps_bam_pipe_set_params(struct sps_bam *dev, u32 pipe_index, u32 options) u32 size; int n; + SPS_DBG2(dev, "sps:BAM %pa pipe %d opt 0x%x\n", + BAM_ID(dev), pipe_index, options); + /* Capture some options */ wake_up_is_one_shot = ((options & SPS_O_WAKEUP_IS_ONESHOT)); no_queue = ((options & SPS_O_NO_Q)); @@ -1749,6 +1767,9 @@ static void pipe_handler_wakeup(struct sps_bam *dev, struct sps_pipe *pipe) u32 pipe_index = pipe->pipe_index; if (pipe->wake_up_is_one_shot) { + SPS_DBG2(dev, + "sps:BAM:%pa pipe %d wake_up_is_one_shot; irq_mask:0x%x.\n", + BAM_ID(dev), pipe_index, pipe->irq_mask); /* Disable the pipe WAKEUP interrupt source */ pipe->irq_mask &= ~BAM_PIPE_IRQ_WAKE; pipe_set_irq(dev, pipe_index, pipe->polled); @@ -1790,13 +1811,17 @@ static void pipe_handler_eot(struct sps_bam *dev, struct sps_pipe *pipe) u32 enabled; int producer = (pipe->mode == SPS_MODE_SRC); - if (pipe->sys.handler_eot) + if (pipe->sys.handler_eot) { /* * This can happen if the pipe is configured for polling * (IRQ disabled) and callback event generation. * The client may perform a get_iovec() inside the callback. */ + SPS_DBG(dev, + "sps:%s; still handling EOT for pipe %d.\n", + __func__, pipe->pipe_index); return; + } pipe->sys.handler_eot = true; @@ -1835,6 +1860,9 @@ static void pipe_handler_eot(struct sps_bam *dev, struct sps_pipe *pipe) pipe->sys.acked_offset = end_offset; } pipe->sys.handler_eot = false; + SPS_DBG(dev, + "sps:%s; pipe %d has no queue.\n", + __func__, pipe->pipe_index); return; } @@ -1853,6 +1881,9 @@ static void pipe_handler_eot(struct sps_bam *dev, struct sps_pipe *pipe) /* Are there any completed descriptors to process? */ if (offset == end_offset) { pipe->sys.handler_eot = false; + SPS_DBG(dev, + "sps:%s; there is no completed desc to process for pipe %d.\n", + __func__, pipe->pipe_index); return; } @@ -1903,9 +1934,10 @@ static void pipe_handler_eot(struct sps_bam *dev, struct sps_pipe *pipe) user = &pipe->sys.user_ptrs[offset / sizeof(struct sps_iovec)]; for (;;) { SPS_DBG(dev, - "sps:%s; pipe index:%d; iovec addr:0x%x; size:0x%x; flags:0x%x.\n", + "sps:%s; pipe index:%d; iovec addr:0x%x; size:0x%x; flags:0x%x; enabled:0x%x; *user is %s NULL.\n", __func__, pipe->pipe_index, cache->addr, - cache->size, cache->flags); + cache->size, cache->flags, enabled, + (*user == NULL) ? "" : "not"); /* * Increment offset to next descriptor and update pipe offset @@ -1945,6 +1977,10 @@ static void pipe_handler_eot(struct sps_bam *dev, struct sps_pipe *pipe) event->notify.event_id = event_id; event->notify.user = event_reg->user; trigger_event(dev, pipe, event_reg, event); + } else { + SPS_ERR(dev, + "sps: %s: pipe %d: event is NULL.\n", + __func__, pipe->pipe_index); } #ifdef SPS_BAM_STATISTICS if (*user != NULL) @@ -2149,8 +2185,13 @@ int sps_bam_pipe_get_iovec(struct sps_bam *dev, u32 pipe_index, } /* If pipe is polled and queue is enabled, perform polling operation */ - if ((pipe->polled || pipe->hybrid) && !pipe->sys.no_queue) + if ((pipe->polled || pipe->hybrid) && !pipe->sys.no_queue) { + SPS_DBG(dev, + "sps:%s; BAM: %pa; pipe index:%d; polled is %d; hybrid is %d.\n", + __func__, BAM_ID(dev), pipe_index, + pipe->polled, pipe->hybrid); pipe_handler_eot(dev, pipe); + } /* Is there a completed descriptor? */ if (pipe->sys.no_queue) @@ -2162,6 +2203,9 @@ int sps_bam_pipe_get_iovec(struct sps_bam *dev, u32 pipe_index, if (read_offset == pipe->sys.acked_offset) { /* No, so clear the iovec to indicate FIFO is empty */ memset(iovec, 0, sizeof(*iovec)); + SPS_DBG(dev, + "sps:%s; BAM: %pa; pipe index:%d; no iovec to process.\n", + __func__, BAM_ID(dev), pipe_index); return 0; } @@ -2178,6 +2222,11 @@ int sps_bam_pipe_get_iovec(struct sps_bam *dev, u32 pipe_index, if (pipe->sys.acked_offset >= pipe->desc_size) pipe->sys.acked_offset = 0; + SPS_DBG(dev, + "sps:%s; pipe index:%d; iovec addr:0x%x; size:0x%x; flags:0x%x; acked_offset:0x%x.\n", + __func__, pipe->pipe_index, desc->addr, + desc->size, desc->flags, pipe->sys.acked_offset); + return 0; } @@ -2217,6 +2266,9 @@ int sps_bam_pipe_is_empty(struct sps_bam *dev, u32 pipe_index, } else { if ((pipe->state & BAM_STATE_BAM2BAM) == 0) { *empty = false; + SPS_DBG1(dev, + "sps:%s; pipe index:%d; this sys2bam pipe is NOT empty.\n", + __func__, pipe->pipe_index); return 0; } if (bam_pipe_check_zlt(&dev->base, pipe_index)) { @@ -2244,6 +2296,10 @@ int sps_bam_pipe_is_empty(struct sps_bam *dev, u32 pipe_index, } } + SPS_DBG1(dev, + "sps:%s; pipe index:%d; this pipe is %s empty.\n", + __func__, pipe->pipe_index, *empty ? "" : "NOT"); + return 0; } |
