[PATCH v3] dmaengine: driver support for FSL RaidEngine device.
Dan Williams
dan.j.williams at intel.com
Sat Apr 12 03:45:19 EST 2014
On Fri, Apr 11, 2014 at 10:42 AM, Dan Williams <dan.j.williams at intel.com> wrote:
> A few more comments:
>
> On Fri, Apr 11, 2014 at 12:41 AM, <xuelin.shi at freescale.com> wrote:
>> From: Xuelin Shi <xuelin.shi at freescale.com>
>>
>> The RaidEngine is a new FSL hardware used for Raid5/6 acceration.
>>
>> This patch enables the RaidEngine functionality and provides
>> hardware offloading capability for memcpy, xor and pq computation.
>> It works with async_tx.
>>
>> Signed-off-by: Harninder Rai <harninder.rai at freescale.com>
>> Signed-off-by: Naveen Burmi <naveenburmi at freescale.com>
>> Signed-off-by: Xuelin Shi <xuelin.shi at freescale.com>
>> ---
>> changes for v3:
>> - fix memory allocation flag GFP_xxx usage.
>> - add re_jr_issue_pending call in cleanup.
>> - remove unnecessary dma_run_dependencies(...).
>> - use dma_cookie_complete(...) instead of direct updating cookie.
>>
>> drivers/dma/Kconfig | 11 +
>> drivers/dma/Makefile | 1 +
>> drivers/dma/fsl_raid.c | 878 +++++++++++++++++++++++++++++++++++++++++++++++++
>> drivers/dma/fsl_raid.h | 308 +++++++++++++++++
>> 4 files changed, 1198 insertions(+)
>> create mode 100644 drivers/dma/fsl_raid.c
>> create mode 100644 drivers/dma/fsl_raid.h
>>
>> diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
>> index 605b016..829f41c 100644
>> --- a/drivers/dma/Kconfig
>> +++ b/drivers/dma/Kconfig
>> @@ -100,6 +100,17 @@ config FSL_DMA
>> EloPlus is on mpc85xx and mpc86xx and Pxxx parts, and the Elo3 is on
>> some Txxx and Bxxx parts.
>>
>> +config FSL_RAID
>> + tristate "Freescale RAID engine Support"
>> + depends on FSL_SOC && !FSL_DMA
>
> This won't work in the case where FSL_DMA=m.
>
> Instead, I think you want to use "depends on
> !ASYNC_TX_ENABLE_CHANNEL_SWITCH" which is the actual dependency.
>
>> + select DMA_ENGINE
>> + select DMA_ENGINE_RAID
>> + ---help---
>> + Enable support for Freescale RAID Engine. RAID Engine is
>> + available on some QorIQ SoCs (like P5020). It has
>> + the capability to offload memcpy, xor and pq computation
>> + for raid5/6.
>> +
> [..]
>> diff --git a/drivers/dma/fsl_raid.c b/drivers/dma/fsl_raid.c
>> new file mode 100644
>> index 0000000..4b389b1
>> --- /dev/null
>> +++ b/drivers/dma/fsl_raid.c
>> @@ -0,0 +1,878 @@
> [..]
>> +void fill_cfd_frame(struct cmpnd_frame *cf, u8 index,
>> + size_t length, dma_addr_t addr, bool final)
>> +{
>> + u32 efrl = length & CF_LENGTH_MASK;
>> + efrl |= final << CF_FINAL_SHIFT;
>> + cf[index].efrl32 = efrl;
>> + cf[index].addr_high = (addr >> 32) & HWDESC_ADDR_HIGH_MASK;
>
> Use "upper_32_bits()" here otherwise:
>
> drivers/dma/fsl_raid.c: In function 'fill_cfd_frame':
> drivers/dma/fsl_raid.c:258:2: warning: right shift count >= width of type
>
>> + cf[index].addr_low = (u32)addr;
>
> Use lower_32_bits() here to be symmetrical.
>
>> +}
>> +
>> +static struct fsl_re_dma_async_tx_desc *re_jr_init_desc(struct re_jr *jr,
>> + struct fsl_re_dma_async_tx_desc *desc, void *cf, dma_addr_t paddr)
>> +{
>> + desc->jr = jr;
>> + desc->async_tx.tx_submit = re_jr_tx_submit;
>> + dma_async_tx_descriptor_init(&desc->async_tx, &jr->chan);
>> + INIT_LIST_HEAD(&desc->node);
>> +
>> + desc->hwdesc.fmt32 = FRAME_FORMAT << HWDESC_FMT_SHIFT;
>> + desc->hwdesc.lbea32 = (paddr >> 32) & HWDESC_ADDR_HIGH_MASK;
>
> Same comment/warning as above...
>
>> + desc->hwdesc.addr_low = (u32)paddr;
>
> ditto.
Oh, and be mindful of checkpatch output:
ERROR: trailing whitespace
#35: FILE: drivers/dma/Kconfig:106:
+ select DMA_ENGINE $
ERROR: trailing whitespace
#42: FILE: drivers/dma/Kconfig:113:
+ $
total: 2 errors, 0 warnings, 1207 lines checked
More information about the Linuxppc-dev
mailing list