Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[sfrench/cifs-2.6.git] / arch / blackfin / kernel / bfin_dma_5xx.c
index 9f9b82816652d6bddc4c67199699d9ba22647e1f..384868dedac3771c2de63a42829129706e88f39b 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/cacheflush.h>
 #include <asm/dma.h>
 #include <asm/uaccess.h>
+#include <asm/early_printk.h>
 
 /*
  * To make sure we work around 05000119 - we always check DMA_DONE bit,
@@ -146,8 +147,8 @@ EXPORT_SYMBOL(request_dma);
 
 int set_dma_callback(unsigned int channel, irq_handler_t callback, void *data)
 {
-       BUG_ON(!(dma_ch[channel].chan_status != DMA_CHANNEL_FREE
-              && channel < MAX_DMA_CHANNELS));
+       BUG_ON(channel >= MAX_DMA_CHANNELS ||
+                       dma_ch[channel].chan_status == DMA_CHANNEL_FREE);
 
        if (callback != NULL) {
                int ret;
@@ -181,8 +182,8 @@ static void clear_dma_buffer(unsigned int channel)
 void free_dma(unsigned int channel)
 {
        pr_debug("freedma() : BEGIN \n");
-       BUG_ON(!(dma_ch[channel].chan_status != DMA_CHANNEL_FREE
-              && channel < MAX_DMA_CHANNELS));
+       BUG_ON(channel >= MAX_DMA_CHANNELS ||
+                       dma_ch[channel].chan_status == DMA_CHANNEL_FREE);
 
        /* Halt the DMA */
        disable_dma(channel);
@@ -236,6 +237,7 @@ void blackfin_dma_resume(void)
  */
 void __init blackfin_dma_early_init(void)
 {
+       early_shadow_stamp();
        bfin_write_MDMA_S0_CONFIG(0);
        bfin_write_MDMA_S1_CONFIG(0);
 }
@@ -246,6 +248,8 @@ void __init early_dma_memcpy(void *pdst, const void *psrc, size_t size)
        unsigned long src = (unsigned long)psrc;
        struct dma_register *dst_ch, *src_ch;
 
+       early_shadow_stamp();
+
        /* We assume that everything is 4 byte aligned, so include
         * a basic sanity check
         */
@@ -300,6 +304,8 @@ void __init early_dma_memcpy(void *pdst, const void *psrc, size_t size)
 
 void __init early_dma_memcpy_done(void)
 {
+       early_shadow_stamp();
+
        while ((bfin_read_MDMA_S0_CONFIG() && !(bfin_read_MDMA_D0_IRQ_STATUS() & DMA_DONE)) ||
               (bfin_read_MDMA_S1_CONFIG() && !(bfin_read_MDMA_D1_IRQ_STATUS() & DMA_DONE)))
                continue;