]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dmaengine: at_hdmac: extend hardware handshaking interface identification
authorNicolas Ferre <nicolas.ferre@atmel.com>
Fri, 10 May 2013 13:19:14 +0000 (15:19 +0200)
committerVinod Koul <vinod.koul@intel.com>
Wed, 12 Jun 2013 02:18:51 +0000 (07:48 +0530)
Peripheral handshaking identification numbers can be bigger than 15, so new
fields have been created in the CFG register.
Add macros to take this modification into account and use them in
at_dma_xlate() function.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/at_hdmac.c
include/linux/platform_data/dma-atmel.h

index cd494209352a1eef9cb81523f792402c94538874..78c3fb4b4e4053a9000d925d546b898b0bce9784 100644 (file)
@@ -1230,6 +1230,8 @@ static struct dma_chan *at_dma_xlate(struct of_phandle_args *dma_spec,
        per_id = dma_spec->args[1];
        atslave->cfg = ATC_FIFOCFG_HALFFIFO | ATC_DST_H2SEL_HW
                      | ATC_SRC_H2SEL_HW | ATC_DST_PER(per_id)
+                     | ATC_DST_PER_MSB(per_id)
+                     | ATC_SRC_PER_MSB(per_id)
                      | ATC_SRC_PER(per_id);
        atslave->dma_dev = &dmac_pdev->dev;
 
index cab0997be3de20ff6b574e9c3a4173b9268166b9..e95f19c65873d4f89d34fa1e7cc4f4e7a8185afc 100644 (file)
@@ -35,16 +35,20 @@ struct at_dma_slave {
 
 
 /* Platform-configurable bits in CFG */
+#define ATC_PER_MSB(h) ((0x30U & (h)) >> 4)    /* Extract most significant bits of a handshaking identifier */
+
 #define        ATC_SRC_PER(h)          (0xFU & (h))    /* Channel src rq associated with periph handshaking ifc h */
 #define        ATC_DST_PER(h)          ((0xFU & (h)) <<  4)    /* Channel dst rq associated with periph handshaking ifc h */
 #define        ATC_SRC_REP             (0x1 <<  8)     /* Source Replay Mod */
 #define        ATC_SRC_H2SEL           (0x1 <<  9)     /* Source Handshaking Mod */
 #define                ATC_SRC_H2SEL_SW        (0x0 <<  9)
 #define                ATC_SRC_H2SEL_HW        (0x1 <<  9)
+#define        ATC_SRC_PER_MSB(h)      (ATC_PER_MSB(h) << 10)  /* Channel src rq (most significant bits) */
 #define        ATC_DST_REP             (0x1 << 12)     /* Destination Replay Mod */
 #define        ATC_DST_H2SEL           (0x1 << 13)     /* Destination Handshaking Mod */
 #define                ATC_DST_H2SEL_SW        (0x0 << 13)
 #define                ATC_DST_H2SEL_HW        (0x1 << 13)
+#define        ATC_DST_PER_MSB(h)      (ATC_PER_MSB(h) << 14)  /* Channel dst rq (most significant bits) */
 #define        ATC_SOD                 (0x1 << 16)     /* Stop On Done */
 #define        ATC_LOCK_IF             (0x1 << 20)     /* Interface Lock */
 #define        ATC_LOCK_B              (0x1 << 21)     /* AHB Bus Lock */