提交 d24bd1d0 编写于 作者: M Mike Frysinger 提交者: Linus Torvalds

Blackfin SPI Driver: add a few more DMA debug messages

Because of DMA hardware issue, we were trying to use software workaround.
This patch add some useful debug messages to help us debugging the DMA
code.
Signed-off-by: NMike Frysinger <vapier.adi@gmail.com>
Signed-off-by: NBryan Wu <cooloney@kernel.org>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 59bfcc66
...@@ -559,9 +559,13 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id) ...@@ -559,9 +559,13 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
struct driver_data *drv_data = dev_id; struct driver_data *drv_data = dev_id;
struct chip_data *chip = drv_data->cur_chip; struct chip_data *chip = drv_data->cur_chip;
struct spi_message *msg = drv_data->cur_msg; struct spi_message *msg = drv_data->cur_msg;
unsigned short dmastat = get_dma_curr_irqstat(drv_data->dma_channel);
u16 spistat = read_STAT(drv_data); u16 spistat = read_STAT(drv_data);
dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n"); dev_dbg(&drv_data->pdev->dev,
"in dma_irq_handler dmastat:0x%x spistat:0x%x\n",
dmastat, spistat);
clear_dma_irqstat(drv_data->dma_channel); clear_dma_irqstat(drv_data->dma_channel);
/* Wait for DMA to complete */ /* Wait for DMA to complete */
...@@ -631,6 +635,7 @@ static void pump_transfers(unsigned long data) ...@@ -631,6 +635,7 @@ static void pump_transfers(unsigned long data)
/* Handle for abort */ /* Handle for abort */
if (message->state == ERROR_STATE) { if (message->state == ERROR_STATE) {
dev_dbg(&drv_data->pdev->dev, "transfer: we've hit an error\n");
message->status = -EIO; message->status = -EIO;
giveback(drv_data); giveback(drv_data);
return; return;
...@@ -638,6 +643,7 @@ static void pump_transfers(unsigned long data) ...@@ -638,6 +643,7 @@ static void pump_transfers(unsigned long data)
/* Handle end of message */ /* Handle end of message */
if (message->state == DONE_STATE) { if (message->state == DONE_STATE) {
dev_dbg(&drv_data->pdev->dev, "transfer: all done!\n");
message->status = 0; message->status = 0;
giveback(drv_data); giveback(drv_data);
return; return;
...@@ -645,6 +651,7 @@ static void pump_transfers(unsigned long data) ...@@ -645,6 +651,7 @@ static void pump_transfers(unsigned long data)
/* Delay if requested at end of transfer */ /* Delay if requested at end of transfer */
if (message->state == RUNNING_STATE) { if (message->state == RUNNING_STATE) {
dev_dbg(&drv_data->pdev->dev, "transfer: still running ...\n");
previous = list_entry(transfer->transfer_list.prev, previous = list_entry(transfer->transfer_list.prev,
struct spi_transfer, transfer_list); struct spi_transfer, transfer_list);
if (previous->delay_usecs) if (previous->delay_usecs)
...@@ -806,7 +813,8 @@ static void pump_transfers(unsigned long data) ...@@ -806,7 +813,8 @@ static void pump_transfers(unsigned long data)
dma_config = (RESTART | dma_width | DI_EN); dma_config = (RESTART | dma_width | DI_EN);
if (drv_data->rx != NULL) { if (drv_data->rx != NULL) {
/* set transfer mode, and enable SPI */ /* set transfer mode, and enable SPI */
dev_dbg(&drv_data->pdev->dev, "doing DMA in.\n"); dev_dbg(&drv_data->pdev->dev, "doing DMA in to %p (size %zx)\n",
drv_data->rx, drv_data->len_in_bytes);
/* invalidate caches, if needed */ /* invalidate caches, if needed */
if (bfin_addr_dcachable((unsigned long) drv_data->rx)) if (bfin_addr_dcachable((unsigned long) drv_data->rx))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册