From patchwork Fri Jan 4 20:56:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 10748833 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DC76F746 for ; Fri, 4 Jan 2019 20:57:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CD90328599 for ; Fri, 4 Jan 2019 20:57:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C137728676; Fri, 4 Jan 2019 20:57:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9EFC028599 for ; Fri, 4 Jan 2019 20:57:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726243AbfADU5T (ORCPT ); Fri, 4 Jan 2019 15:57:19 -0500 Received: from mail-pl1-f193.google.com ([209.85.214.193]:33550 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726233AbfADU4h (ORCPT ); Fri, 4 Jan 2019 15:56:37 -0500 Received: by mail-pl1-f193.google.com with SMTP id z23so17925630plo.0 for ; Fri, 04 Jan 2019 12:56:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7PoOlpFQPsMjakXihA1LLc08Bpkr7q8xCpQ3M2g6csg=; b=OPJpGAYSmyme1wm2pNRYFlKfBrH/jBcgmLWLGhlShFq2CZVk/aZ0HTjiA7Iypf850I gc7dnajTLdoDGRTBkKLJEwILJOw+SCY9T52VBqurC7UPLYSytV2WZveFs3LzUwlANFCd 0Sx+eOlBCvjbduggdL8tnvgQ1P+s5k68N2NPA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7PoOlpFQPsMjakXihA1LLc08Bpkr7q8xCpQ3M2g6csg=; b=c7d2vM9ZzIaXDTT0EOeahKkAS/+uUML7SfzJDCuT8ZknnwK/RQqjhPbeNrtJSekA+L nc/lFuyIwUb+AzR2W4WfQ/4RH6l34SMWT03nJm0paA7nkVNhodNb9Vk1VRUDpO0Nih4B xRPt2Rcho3MA0w5Xo01q2a181makC/g6jJmalUDt178zWw3Db2HACfk3APTN/jQKjtAk nXK42qDIaD/AJIfkK94yf/PVNwqqeKsHO9o8F/flmsEZAeFYic8gjahdR5yeB7gZ7yWk +OqiPr437tRZvq+P5miHCwuJWAfXI5wgBE/kULhYdz2wSQNZPAmyjcDnm7PH3OQqPEbV iwzA== X-Gm-Message-State: AJcUukdyxAPL5NwtH2kz/1tw2qVgm845L3eCnzEX5MpSP75TnboM48fc aQpeRw0Uv0HvFVFwpWbhgBfsuQ== X-Google-Smtp-Source: ALg8bN4bfl6pWNWbydF8wvNL7jKqslDcpZM8jK1Ofpx3+3pmhd1ZTgbsOyuKDh2o74j2jLYtZvtsTQ== X-Received: by 2002:a17:902:50e3:: with SMTP id c32mr52616262plj.318.1546635397174; Fri, 04 Jan 2019 12:56:37 -0800 (PST) Received: from localhost.localdomain ([2601:1c2:680:1319:4e72:b9ff:fe99:466a]) by smtp.gmail.com with ESMTPSA id l3sm98058334pga.92.2019.01.04.12.56.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 04 Jan 2019 12:56:36 -0800 (PST) From: John Stultz To: lkml Cc: Youlin Wang , Dan Williams , Vinod Koul , Zhuangluan Su , Ryan Grachek , Manivannan Sadhasivam , dmaengine@vger.kernel.org, Tanglei Han , John Stultz Subject: [PATCH 3/8 v2] dma: k3dma: Upgrade k3dma driver to support hisi_asp_dma hardware Date: Fri, 4 Jan 2019 12:56:23 -0800 Message-Id: <1546635388-13795-4-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1546635388-13795-1-git-send-email-john.stultz@linaro.org> References: <1546635388-13795-1-git-send-email-john.stultz@linaro.org> Sender: dmaengine-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dmaengine@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Youlin Wang There is an new "hisi-pcm-asp-dma-1.0" device added in "arch/arm64/boot/dts/hisilicon/hi3660.dtsi". So we have to add a matching id in the driver file: .compatible = "hisilicon,hisi-pcm-asp-dma-1.0" And also hisi-pcm-asp dma device needs no setting to the clock. So we skip this by adding and using soc data flags. After above this driver will support both k3 and hisi_asp dma hardware. Cc: Dan Williams Cc: Vinod Koul Cc: Zhuangluan Su Cc: Ryan Grachek Cc: Manivannan Sadhasivam Cc: dmaengine@vger.kernel.org Signed-off-by: Youlin Wang Signed-off-by: Tanglei Han [jstultz: Reworked to use of_match_data] Signed-off-by: John Stultz Acked-by: Manivannan Sadhasivam --- v2: * Reworked to use of_match_data --- drivers/dma/k3dma.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c index fdec2b6..df61406 100644 --- a/drivers/dma/k3dma.c +++ b/drivers/dma/k3dma.c @@ -116,6 +116,13 @@ struct k3_dma_dev { unsigned int irq; }; + +#define K3_FLAG_NOCLK (1<<0) +struct k3dma_soc_data { + unsigned long flags; +}; + + #define to_k3_dma(dmadev) container_of(dmadev, struct k3_dma_dev, slave) static int k3_dma_config_write(struct dma_chan *chan, @@ -790,8 +797,21 @@ static int k3_dma_transfer_resume(struct dma_chan *chan) return 0; } +static const struct k3dma_soc_data k3_v1_dma_data = { + .flags = 0, +}; + +static const struct k3dma_soc_data asp_v1_dma_data = { + .flags = K3_FLAG_NOCLK, +}; + static const struct of_device_id k3_pdma_dt_ids[] = { - { .compatible = "hisilicon,k3-dma-1.0", }, + { .compatible = "hisilicon,k3-dma-1.0", + .data = &k3_v1_dma_data + }, + { .compatible = "hisilicon,hisi-pcm-asp-dma-1.0", + .data = &asp_v1_dma_data + }, {} }; MODULE_DEVICE_TABLE(of, k3_pdma_dt_ids); @@ -810,6 +830,7 @@ static struct dma_chan *k3_of_dma_simple_xlate(struct of_phandle_args *dma_spec, static int k3_dma_probe(struct platform_device *op) { + const struct k3dma_soc_data *soc_data; struct k3_dma_dev *d; const struct of_device_id *of_id; struct resource *iores; @@ -823,6 +844,10 @@ static int k3_dma_probe(struct platform_device *op) if (!d) return -ENOMEM; + soc_data = device_get_match_data(&op->dev); + if (!soc_data) + return -EINVAL; + d->base = devm_ioremap_resource(&op->dev, iores); if (IS_ERR(d->base)) return PTR_ERR(d->base); @@ -835,10 +860,12 @@ static int k3_dma_probe(struct platform_device *op) "dma-requests", &d->dma_requests); } - d->clk = devm_clk_get(&op->dev, NULL); - if (IS_ERR(d->clk)) { - dev_err(&op->dev, "no dma clk\n"); - return PTR_ERR(d->clk); + if (!(soc_data->flags & K3_FLAG_NOCLK)) { + d->clk = devm_clk_get(&op->dev, NULL); + if (IS_ERR(d->clk)) { + dev_err(&op->dev, "no dma clk\n"); + return PTR_ERR(d->clk); + } } irq = platform_get_irq(op, 0);