From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754825AbcAVTvx (ORCPT ); Fri, 22 Jan 2016 14:51:53 -0500 Received: from mail-pf0-f179.google.com ([209.85.192.179]:34028 "EHLO mail-pf0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754575AbcAVTvs (ORCPT ); Fri, 22 Jan 2016 14:51:48 -0500 From: Shraddha Barke To: Greg Kroah-Hartman , Dan Carpenter , Joe Perches , linux-kernel@vger.kernel.org Cc: Peter Senna Tschudin , Julia Lawall , Shraddha Barke Subject: [PATCH] Platform: goldfish: goldfish_pipe.c: Add DMA support using managed version Date: Sat, 23 Jan 2016 01:21:32 +0530 Message-Id: <1453492292-17279-1-git-send-email-shraddha.6596@gmail.com> X-Mailer: git-send-email 2.1.4 X-Cyberoam-smtpxy-version: 1.0.6.3 X-Cyberoam-AV-Policy: default X-CTCH-PVer: 0000001 X-CTCH-Spam: Unknown X-CTCH-VOD: Unknown X-CTCH-Flags: 0 X-CTCH-RefID: str=0001.0A150205.56A28851.0084,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0 X-CTCH-Score: 0.000 X-CTCH-ScoreCust: 0.000 X-CTCH-Rules: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Function setup_access_params_addr is called only from probe function, hence managed version dmam_alloc_coherent is used. setup_access_params_addr has 2 goals- -Initialize the access_params field so that it can be used to send and read commands from the device in access_with_param -Get a bus address for the allocated memory to transfer to the device. Replace the combination of devm_kzalloc and _pa() with dmam_alloc_coherent. Coherent mapping guarantees that the device and CPU are in sync. Signed-off-by: Shraddha Barke --- drivers/platform/goldfish/goldfish_pipe.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c index e7a29e2..fb982ac 100644 --- a/drivers/platform/goldfish/goldfish_pipe.c +++ b/drivers/platform/goldfish/goldfish_pipe.c @@ -57,6 +57,7 @@ #include #include #include +#include /* * IMPORTANT: The following constants must match the ones used and defined @@ -217,17 +218,19 @@ static int valid_batchbuffer_addr(struct goldfish_pipe_dev *dev, static int setup_access_params_addr(struct platform_device *pdev, struct goldfish_pipe_dev *dev) { - u64 paddr; + dma_addr_t dma_handle; struct access_params *aps; - aps = devm_kzalloc(&pdev->dev, sizeof(struct access_params), GFP_KERNEL); - if (!aps) - return -1; + aps = dmam_alloc_coherent(&pdev->dev, sizeof(struct access_params), + &dma_handle, GFP_KERNEL); + if (!aps) { + dev_err(&pdev->dev, "allocate buffer failed\n"); + return -ENOMEM; + } - /* FIXME */ - paddr = __pa(aps); - writel((u32)(paddr >> 32), dev->base + PIPE_REG_PARAMS_ADDR_HIGH); - writel((u32)paddr, dev->base + PIPE_REG_PARAMS_ADDR_LOW); + writel((u32)((u64)dma_handle >> 32), dev->base + + PIPE_REG_PARAMS_ADDR_HIGH); + writel((u32)dma_handle, dev->base + PIPE_REG_PARAMS_ADDR_LOW); if (valid_batchbuffer_addr(dev, aps)) { dev->aps = aps; -- 2.1.4