Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp199526pxb; Thu, 12 Nov 2020 01:09:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJxHjdryQGo6Btq9/CMEf8Jtq4EHgWeg4GRuatmJNs8xpOOUtPyUc5wGs/fjZ975FkZsVxtm X-Received: by 2002:a17:906:9457:: with SMTP id z23mr27981790ejx.296.1605172166134; Thu, 12 Nov 2020 01:09:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605172166; cv=none; d=google.com; s=arc-20160816; b=v0wuWQBNp70PRwvIoYrbSSEPj+D1/cNp6c9yPV3S62934EXLGi4cGAHq4hFB/pmYxs wb+hf+PD5NBJGm254HcnGMb45ia0gbT9YRqmm7qrqhCAu3WXA9cr4u7IR5ka9Z5toIza wwZTJzjd5JySCFJRezs9E/YewD8s29Tt5GF2hx7UuTQQUO5TRDkGBWfbklA/pJcpQy4/ z1KykVEizoury2idkna8JhRY0AFeMws9UlrTIqhX38Hr2u050IDt/FDE1VQeHs5fA0V2 qgiXiKZsJTWQ2uZdaL1ndvLUB3QZkfZTwcOjA+5gtCyvpMLhvMbe7CQeyYIX3dL9NSQE cLhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:ironport-sdr:ironport-sdr; bh=Zn/afpuJ9jMm4jOKkrAb7NKp4H1mfNaFZfjQ/J7TmfQ=; b=LbXeGGt1uWg0nlWahUlPVQ0OVFdciv3Vi71NOSPu51hHOEqFIXf4DWny0SbkffZZUo LF+UAy2jbU0DuML4NnGXhqyaZ0OhRbCYMD5f1dzdmjztFRuwk8Ji16dYtg8dJ61u5cVc b7tolUvujq51Dc70QJTMLKjtyejsGhQ4hhB/vH8dFyH5g9816sVFqf/p3LBFKNudY4CZ fR5/rQTsx9zsaB0C+rK/QdurN7VQxZx4AJnYzHVt+nGQe4742qKFp2aWh3vpJ9K9jwso XuvNg6XUIcvEXKedvouprpNZIaqPGt2icgTEjpijccSJvVeRnoNv5gdqBUmuWhRMIEWo DPgQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f23si1870937ejc.182.2020.11.12.01.09.03; Thu, 12 Nov 2020 01:09:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727835AbgKLJHH (ORCPT + 99 others); Thu, 12 Nov 2020 04:07:07 -0500 Received: from mga11.intel.com ([192.55.52.93]:53006 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727647AbgKLJG6 (ORCPT ); Thu, 12 Nov 2020 04:06:58 -0500 IronPort-SDR: TacjRZfVVOwqGU57R+3O0LqFBNO8Yy+YGSYmm5G7de4/5dClaH2O75ecAqEO+Qg4iqtOVfbcY5 8yb5GMlrUbQQ== X-IronPort-AV: E=McAfee;i="6000,8403,9802"; a="166773072" X-IronPort-AV: E=Sophos;i="5.77,471,1596524400"; d="scan'208";a="166773072" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Nov 2020 01:06:44 -0800 IronPort-SDR: qCE7LZRJO09eCMKze+rxUqWrC6oDoIaWdISpd4MGYrIrbHAIbkDr2SqKSBPvZl8RsKmpLJqqfC sMYuoHt8mL9A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,471,1596524400"; d="scan'208";a="360911628" Received: from jsia-hp-z620-workstation.png.intel.com ([10.221.118.135]) by fmsmga002.fm.intel.com with ESMTP; 12 Nov 2020 01:06:42 -0800 From: Sia Jee Heng To: vkoul@kernel.org, Eugeniy.Paltsev@synopsys.com, robh+dt@kernel.org Cc: andriy.shevchenko@linux.intel.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v3 08/15] dmaengine: dw-axi-dmac: Support of_dma_controller_register() Date: Thu, 12 Nov 2020 16:49:46 +0800 Message-Id: <20201112084953.21629-9-jee.heng.sia@intel.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20201112084953.21629-1-jee.heng.sia@intel.com> References: <20201112084953.21629-1-jee.heng.sia@intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for of_dma_controller_register() so that DMA clients can pass in device handshake number to the AxiDMA driver. DMA clients shall code the device handshake number in the Device tree. When DMA activities are needed, DMA clients shall invoke OF helper function to pass in the device handshake number to the AxiDMA. Without register to the of_dma_controller_register(), data transfer between memory to device and device to memory operations would failed. Reviewed-by: Andy Shevchenko Signed-off-by: Sia Jee Heng --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 26 +++++++++++++++++++ drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 + 2 files changed, 27 insertions(+) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c index 6ead1a804905..19fc6d2dfd5c 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -1050,6 +1051,22 @@ static int __maybe_unused axi_dma_runtime_resume(struct device *dev) return axi_dma_resume(chip); } +static struct dma_chan *dw_axi_dma_of_xlate(struct of_phandle_args *dma_spec, + struct of_dma *ofdma) +{ + struct dw_axi_dma *dw = ofdma->of_dma_data; + struct axi_dma_chan *chan; + struct dma_chan *dchan; + + dchan = dma_get_any_slave_channel(&dw->dma); + if (!dchan) + return NULL; + + chan = dchan_to_axi_dma_chan(dchan); + chan->hw_hs_num = dma_spec->args[0]; + return dchan; +} + static int parse_device_properties(struct axi_dma_chip *chip) { struct device *dev = chip->dev; @@ -1239,6 +1256,13 @@ static int dw_probe(struct platform_device *pdev) if (ret) goto err_pm_disable; + /* Register with OF helpers for DMA lookups */ + ret = of_dma_controller_register(pdev->dev.of_node, + dw_axi_dma_of_xlate, dw); + if (ret < 0) + dev_warn(&pdev->dev, + "Failed to register OF DMA controller, fallback to MEM_TO_MEM mode\n"); + dev_info(chip->dev, "DesignWare AXI DMA Controller, %d channels\n", dw->hdata->nr_channels); @@ -1272,6 +1296,8 @@ static int dw_remove(struct platform_device *pdev) devm_free_irq(chip->dev, chip->irq, chip); + of_dma_controller_free(chip->dev->of_node); + list_for_each_entry_safe(chan, _chan, &dw->dma.channels, vc.chan.device_node) { list_del(&chan->vc.chan.device_node); diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h index a26b0a242a93..651874e5c88f 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -37,6 +37,7 @@ struct axi_dma_chan { struct axi_dma_chip *chip; void __iomem *chan_regs; u8 id; + u8 hw_hs_num; atomic_t descs_allocated; struct dma_pool *desc_pool; -- 2.18.0