Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp889096imu; Wed, 23 Jan 2019 07:25:31 -0800 (PST) X-Google-Smtp-Source: ALg8bN5lOy99UX5KJM4shgCOBQ8P1om/+rOYWoSky2TRscy8WDic/S2VImszYUYTknqZosvqx13Q X-Received: by 2002:a62:f54f:: with SMTP id n76mr2360934pfh.59.1548257131396; Wed, 23 Jan 2019 07:25:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548257131; cv=none; d=google.com; s=arc-20160816; b=QYxvHScPSTVCpDKxtDiEDVipf92Mu2AFLmOn9N8UmKlG3LtTSzmRnZgxcFiUqepQXC FXtxzW9xa+/+dl0iZSk8OucsL/HAw95yFUHDotFo3WKkCmexdrnvQd9crg+Xowe/7mgA hZMh8Y3X6ObAc/ih/JyPjKYGsaKSd6YLKmH8u+H27GupAP59HB0I0eTqs3+N/02OKw/m ukH3HYG4laW4nqJjhRQDYmmazPF1tsD2RBsVS/Qbjo46CWNMEuogemKMizCUvFV7hCGx wBb2srjS8rbMtvEziZ6MT4Km3Wn09Yf0FvsWgcT6A62XMhuPapTM+41jQZa7bn5MwYWd QZYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:dkim-signature; bh=1lElNF08mp9a3DZ/4zcDEhQNOkQuIGLji0OR564dzrM=; b=wd/zjBVHE3nIPFQn5ttzeym4hSQiB3u4bdAsJunlbb2x1PSIWYVigMSP96I3b+7VxN IsX3LkXt/GXAVetE9qQb6JilrRfErjfwT1aSZsgAMiI3YfjI4KkeU9og95lWvXglG3Ku zFw94Na5dZQswPUP641qEkLmU2K6fYxHHtNerVPVXla1bFhFF6a/mCOK9Z6HiCWlFANv kHx1ODv2vG8B5dxbeLCp2VGv8Fj5XuGnkBonz/N0Rxqy0xi4XeKOZToGX0MMv81/R2lC YA6xleapxzAbx1C2Otc5dBxt2mCnuBiv2o3HiQ0c+ZTgvEx0WLMGkqhh17xZTbPerKtK 8bfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@akkea.ca header.s=mail header.b=NFOSey2f; dkim=pass header.i=@akkea.ca header.s=mail header.b=NFOSey2f; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t61si19181820plb.339.2019.01.23.07.25.10; Wed, 23 Jan 2019 07:25:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@akkea.ca header.s=mail header.b=NFOSey2f; dkim=pass header.i=@akkea.ca header.s=mail header.b=NFOSey2f; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726243AbfAWPX7 (ORCPT + 99 others); Wed, 23 Jan 2019 10:23:59 -0500 Received: from node.akkea.ca ([192.155.83.177]:52780 "EHLO node.akkea.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726042AbfAWPXs (ORCPT ); Wed, 23 Jan 2019 10:23:48 -0500 Received: from localhost (localhost [127.0.0.1]) by node.akkea.ca (Postfix) with ESMTP id B41F34E2062; Wed, 23 Jan 2019 15:23:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akkea.ca; s=mail; t=1548257026; bh=1lElNF08mp9a3DZ/4zcDEhQNOkQuIGLji0OR564dzrM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=NFOSey2fO3EXGvDMhqZQRXLx2sZZ3LBGMHmeNE9CUukyJY8J0zsWlxRqwCwPOyVLS 5kpc1GmooWOwIRURuB5L5hBMboRl8wZaaPgzTgn7zSQih++sK2+CstufmH4ILXAsMm CP2LYkUCYSwWVkC6Qt639gbXY54cCvlBGd9xAK54= X-Virus-Scanned: Debian amavisd-new at mail.akkea.ca Received: from node.akkea.ca ([127.0.0.1]) by localhost (mail.akkea.ca [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id mTilSCM7ID1V; Wed, 23 Jan 2019 15:23:46 +0000 (UTC) Received: from localhost.localdomain (198-48-167-13.cpe.pppoe.ca [198.48.167.13]) by node.akkea.ca (Postfix) with ESMTPSA id B448F4E204E; Wed, 23 Jan 2019 15:23:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akkea.ca; s=mail; t=1548257026; bh=1lElNF08mp9a3DZ/4zcDEhQNOkQuIGLji0OR564dzrM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=NFOSey2fO3EXGvDMhqZQRXLx2sZZ3LBGMHmeNE9CUukyJY8J0zsWlxRqwCwPOyVLS 5kpc1GmooWOwIRURuB5L5hBMboRl8wZaaPgzTgn7zSQih++sK2+CstufmH4ILXAsMm CP2LYkUCYSwWVkC6Qt639gbXY54cCvlBGd9xAK54= From: "Angus Ainslie (Purism)" To: angus@akkea.ca Cc: angus.ainslie@puri.sm, Vinod Koul , dmaengine@vger.kernel.org, NXP Linux Team , Pengutronix Kernel Team , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Lucas Stach , Daniel Baluta Subject: [PATCH v3 4/5] dma: imx-sdma: add an index for imx8mq multi sdma devices Date: Wed, 23 Jan 2019 08:23:09 -0700 Message-Id: <20190123152310.11680-5-angus@akkea.ca> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190123152310.11680-1-angus@akkea.ca> References: <20190120023150.17138-1-angus@akkea.ca> <20190123152310.11680-1-angus@akkea.ca> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On i.mx8mq, there are two sdma instances, and the common dma framework will get a channel dynamically from any available sdma instance whether it's the first sdma device or the second sdma device. Some IPs like SAI only work with sdma2 not sdma1. To make sure the sdma channel is from the correct sdma device, use an index to match. Based on MLK-16104-2 by Robin Gong Signed-off-by: Angus Ainslie (Purism) --- drivers/dma/imx-sdma.c | 12 ++++++++++++ include/linux/platform_data/dma-imx.h | 1 + 2 files changed, 13 insertions(+) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 2e691b1cd0eb..bf3752a6a64f 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -442,6 +442,7 @@ struct sdma_engine { struct sdma_buffer_descriptor *bd0; /* clock ratio for AHB:SDMA core. 1:1 is 1, 2:1 is 0*/ bool clk_ratio; + int idx; }; static int sdma_config_write(struct dma_chan *chan, @@ -606,6 +607,8 @@ static const struct of_device_id sdma_dt_ids[] = { }; MODULE_DEVICE_TABLE(of, sdma_dt_ids); +static int sdma_dev_idx; + #define SDMA_H_CONFIG_DSPDMA BIT(12) /* indicates if the DSPDMA is used */ #define SDMA_H_CONFIG_RTD_PINS BIT(11) /* indicates if Real-Time Debug pins are enabled */ #define SDMA_H_CONFIG_ACR BIT(4) /* indicates if AHB freq /core freq = 2 or 1 */ @@ -1934,6 +1937,11 @@ static bool sdma_filter_fn(struct dma_chan *chan, void *fn_param) if (!imx_dma_is_general_purpose(chan)) return false; + /* return false if it's not the right device */ + if ((sdmac->sdma->drvdata == &sdma_imx8mq) + && (sdmac->sdma->idx != data->idx)) + return false; + sdmac->data = *data; chan->private = &sdmac->data; @@ -1961,6 +1969,7 @@ static struct dma_chan *sdma_xlate(struct of_phandle_args *dma_spec, * be set to sdmac->event_id1. */ data.dma_request2 = 0; + data.idx = sdma->idx; return dma_request_channel(mask, sdma_filter_fn, &data); } @@ -2149,6 +2158,9 @@ static int sdma_probe(struct platform_device *pdev) of_node_put(spba_bus); } + /* There maybe multi sdma devices such as i.mx8mq */ + sdma->idx = sdma_dev_idx++; + return 0; err_register: diff --git a/include/linux/platform_data/dma-imx.h b/include/linux/platform_data/dma-imx.h index 7d964e787299..843faf081282 100644 --- a/include/linux/platform_data/dma-imx.h +++ b/include/linux/platform_data/dma-imx.h @@ -55,6 +55,7 @@ struct imx_dma_data { int dma_request2; /* secondary DMA request line */ enum sdma_peripheral_type peripheral_type; int priority; + int idx; }; static inline int imx_dma_is_ipu(struct dma_chan *chan) -- 2.17.1