On Thu, Apr 25, 2013 at 3:44 PM, Lee Jones <lee.jones@xxxxxxxxxx> wrote: > On Thu, 25 Apr 2013, Linus Walleij wrote: >> On Thu, Apr 18, 2013 at 12:27 PM, Lee Jones <lee.jones@xxxxxxxxxx> wrote: >> >> > The DMA controller currently takes configuration information from >> > information passed though dma_channel_request(), but it shouldn't. >> > Using the API, the DMA channel should only be configured during >> > a dma_slave_config() call. >> > >> > Cc: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> >> > Cc: David S. Miller <davem@xxxxxxxxxxxxx> >> > Cc: Andreas Westin <andreas.westin@xxxxxxxxxxxxxx> >> > Cc: linux-crypto@xxxxxxxxxxxxxxx >> > Signed-off-by: Lee Jones <lee.jones@xxxxxxxxxx> >> >> (...) >> > /* Cryp DMA interface */ >> > +#define HASH_DMA_TX_FIFO 0x08 >> > +#define HASH_DMA_RX_FIFO 0x10 >> >> Yes, this is nice address notation :-) >> >> > /** >> > * struct cryp_device_data - structure for a cryp device. >> > - * @base: Pointer to the hardware base address. >> > + * @base: Pointer to virtual base address of the cryp device. >> > + * @phybase: Pointer to physical memory location of the cryp device. >> > * @dev: Pointer to the devices dev structure. >> > * @clk: Pointer to the device's clock control. >> > * @pwr_regulator: Pointer to the device's power control. >> > @@ -232,6 +236,7 @@ struct cryp_dma { >> > */ >> > struct cryp_device_data { >> > struct cryp_register __iomem *base; >> > + phys_addr_t phybase; >> >> Use dma_addr_t. Maybe "phybase" is misleading, >> "dmabase" is probably better. (Also applies to the >> cryp patch). > > Accept it's not the dmabase. > > It's the phybase (U8500_CRYP1_BASE) i.e. the physical base address of > the device's regs. So when you assign the src_addr or dst_addr in struct dmaengine_slave_config in this code, you notice that this looks like so: struct dma_slave_config { enum dma_transfer_direction direction; dma_addr_t src_addr; dma_addr_t dst_addr; enum dma_slave_buswidth src_addr_width; enum dma_slave_buswidth dst_addr_width; u32 src_maxburst; u32 dst_maxburst; bool device_fc; }; So when you do this: + struct dma_slave_config mem2cryp = { + .direction = DMA_MEM_TO_DEV, + .dst_addr = device_data->phybase + HASH_DMA_TX_FIFO, + .dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES, + .dst_maxburst = 4, + }; on .dst_addr you are effectively casting a phys_addr_t into a dma_addr_t. But we must do this at some point, and now I think that doing it here may be just as good (because we might just add a physical-to-dma memory translation if need be). So allright. Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html