From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752952AbcADFe3 (ORCPT ); Mon, 4 Jan 2016 00:34:29 -0500 Received: from mail-bl2on0069.outbound.protection.outlook.com ([65.55.169.69]:2048 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752789AbcADFde (ORCPT ); Mon, 4 Jan 2016 00:33:34 -0500 Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=amd.com; alien8.de; dkim=none (message not signed) header.d=none;alien8.de; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0O0EY3L-08-6AY-02 X-M-MSG: From: Wang Hongcheng To: Andy Shevchenko , Vinod Koul , Mika Westerberg , Greg Kroah-Hartman , "Rafael J. Wysocki" CC: , , , , Borislav Petkov , Huang Rui , Wan Zongshun , Ken Xue , Robin Murphy , Graeme Gregory , Tony Li , Xiangliang Yu , Wang Hongcheng Subject: [PATCH 3/6] ACPI: add 2 parameters to function acpi dma controller register Date: Mon, 4 Jan 2016 13:31:38 +0800 Message-ID: <1451885501-2710-4-git-send-email-annie.wang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1451885501-2710-1-git-send-email-annie.wang@amd.com> References: <1451885501-2710-1-git-send-email-annie.wang@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.222;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(189002)(199003)(36756003)(229853001)(19580405001)(50986999)(76176999)(87936001)(53416004)(19580395003)(86362001)(4326007)(33646002)(106466001)(105586002)(77096005)(101416001)(48376002)(50466002)(2950100001)(92566002)(5003600100002)(5001770100001)(50226001)(47776003)(5008740100001)(97736004)(575784001)(1220700001)(11100500001)(189998001)(5003940100001)(586003)(1096002);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR1201MB1079;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR1201MB1079;2:B3jTDWoSCgthMDYFrNcYVq9WI+5025HMCGIgiSBohDY1rQu4r3ls1Ml9kePKvTccrmSPo8WBIHARmzO6F4CugqJxDpJyxZ092l/FIBe1Wnwwy3pCUffAqUlMCSBqkqNqRX5MQXEFF6IctrcLYdYbyg==;3:10muGRVlr2XPDKKZxe3u6VaoBZ9HA6LY7ZyZO9ALM653FolcM4TAzQctpjOgh/biqfS+Lg9qQkKg2FfL7HvviDClZTrY8K4+DozlSQrzMW3ys+whvz9xyrvZLyVG+jHHHJhMyV7edDVOuSv6qqWyd6kA2KLUPvgvlfiL6D3NeXZtpabhy/1ZCm4l1c3vxqHaDuK/4AJqK82SHjaHYx/qWXh652/vTIU79Kr4E3uWgPA=;25:VQ64IidWtiKW8V8z8uR4MeHDs3K6vWsL3uJbPHs4gqNcenexcqqe4ppR26lZLRmZT4l6axsAha1O3GcjzV3ZQnwSfz+HLY90vfcej/F+/8RaL67eg36DOoO5JKSq1Aunx18U7NLyNufkjpfv55NXg8QJa7vxbwLmEyhPQe6EzZwtnxg1P/vZeWj+KPpz7JEHWCR62pjWi9uZxznIuicg0vbDb8lAt/xuJHI9S9uG8pRewDYnjNHxZVCy3yVixVh1F0gbuxUuH3MSMaU9ya7XSw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR1201MB1079; X-Microsoft-Exchange-Diagnostics: 1;BY2PR1201MB1079;20:RWJzokga8uxaobg627+Ij8eWMrdh+Df0qj5yfcXGvNvm8cNBvS7Hh7Enlt51jga7UaWu+x+RQI2pgCGzOFpOO/BNfLG/caeeDvxwIhSjOHv6mB+7TIp+Bgtc5xm2O/0Kcc3HKr80jb8qwMmf/wwfJeMyAogNaksokUBWeqmPXFrrI/aLqEi+VGArew+HDTbqsFqIlPReumrRjsmV0URkiPnfiVdH7BAQ3f5wXnWvlBh1BbZdeE95ZJ7zQq6minVUIcNj1dZqVOn6kK5cIh5m/SdlrqghDch3iSa7R2UUF8EX9K4Qva4SCn6TzABuMUPwynJaUlwmKntN5jETtA0H5kpC/fTkd/toM9nGwZt2EtvWLr5+WGsCiXGBLd3I07IXQfTSUAi8dRIyUjx9Xn8HYMOPNDIAFJDiV17OG2M9sTKY3DIsvhZiAVgnFRRGzJzE0TQyFEXWsRZDUCezez9T/WSUB2q+jmSKIjSpDmtpF9QzrDq2MfVfpldU0yvy9e+i;4:V+IfvknR9SfNMfsaict3VzFxSQXABVpjuiB9eh7bCb12uVoLrlWRr8a6JoJCa/IpqNEXHkogqxHpJGzrRU/53w9/HBzhPFNG+s61nsuwc++gBFk+IQyL8GgQpRfzca0KsW3lkgRWuguN03PrejOe1L24710kAkGT99eqr4Ez7V4ZDhc6fK/A9zwi5qNOo2BZ5kKFSXnCOa2AFEOPGcxQEGsPKAdaaNmt+J0JExjMmTa4/znrmR582dujC1vRFod0qPriA9k5wH16RVBqZEDhahWjiHRJRwoTBs7Kit3wdjpWGmmHhehuOjy/E/KQ9LVrQAB26Hl9i6m8RrgoFKhWokDQxD5alCoAKP4kniS4RdvicdiTie2VKDo/VOB93z/qrwmAgBV4CE+Sd7bRRSl11YKj6dxJA/knNnwttecJYJU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(10201501046)(3002001);SRVR:BY2PR1201MB1079;BCL:0;PCL:0;RULEID:;SRVR:BY2PR1201MB1079; X-Forefront-PRVS: 08118EFC2B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR1201MB1079;23:56gWy62jFTRxjpTHTSTs2UGuTWPs5JEeOp9siPX?= =?us-ascii?Q?VlbYEYkEJxYkWQBx84JHjm3NX+TBwNK4t40NfUtUOvx14zbpXpRNT60U3zWY?= =?us-ascii?Q?BSe/Uu7ZCgXK5AvSfX1y2t5WJTGiL8i4btImc5C9ZCiPBsXocFDB5pjTE0GO?= =?us-ascii?Q?C6BwvkYW8LVgJRgVMlJdDscN/9iy2Sn2Ze3VKir1GEU6WRHCbrJHvsaNYEsd?= =?us-ascii?Q?FyNDfNqNDumUKqSJIGKzLsCpeK9nb2wIsroXFBhIRsL3c4V4tAV9Q9+qZFLg?= =?us-ascii?Q?PNyiR/rLYM4jwvnzwF8kQj6ewqP7CeAuCdbxWoFyauJjxqifUh01+zNNmpOv?= =?us-ascii?Q?6DP7ZiNtu0vm/43pKIJdjgTsqGdMOZTsguOMDC9fdqfIqiJUxmALF46DzCqu?= =?us-ascii?Q?g45h8iyuFH2/u9GzvIccU8iho0gTPrueh2wXIc1OiGNr9H383r2JQ/qXe7hr?= =?us-ascii?Q?obji2zNeebghRR/rWWiMVtBAmCtkDLS7MJX3aWkYMKmw7t7bneqBG+Xcc7Oj?= =?us-ascii?Q?7I2DyTbUvEB8CG8A0DrskLoFTeiNVA20mXG9cxIGemf6K92NHT2UIfUEa/mB?= =?us-ascii?Q?vMrX4w4Hm9zIBqZG8BhPBPFXU06kxCZz3934uoKpd9qiIt943BI0UOHXkIR9?= =?us-ascii?Q?BmoQe4Y5rGA7G15CkMZYqwzVMG1rmJnDFfJP9g+yUHTmjRyieLgS/v3DhbDg?= =?us-ascii?Q?YZTMQGBmD2y869VgOI1Enc0sWA9u3AO+yLTuKhHAA74dAUTwpJFkBoF800kU?= =?us-ascii?Q?0RtxcqHCVoEjA9/Yh/ip+mVgtzUctjYafarHiDpmVGWgrYAjWGjibhkq2jVV?= =?us-ascii?Q?UtqxTKed5vPaFE/rh1yJHdB+JSHyJsUVB2wQbVGNzixrLQs2+kjb+lDChXJR?= =?us-ascii?Q?B/EcTKH4YVGE6s/8J6BvH0VApx+LlbbpQUeLOsAmbDREIZtlFyfzd2v+EKal?= =?us-ascii?Q?QXMFq+YhIs+1gqS1UwhOY81L0AymAuh+sJQkF5LZZZqTbwp/XTISsSi04nGL?= =?us-ascii?Q?+1XrLE1gZ3oEmPSFWcxRWPCeN?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR1201MB1079;5:2/lVgUwxtptr36RJgphs4XeB+8An395b4grizBJjYqWisLio/YH08LogTvvfnShJ77+kfm1TKZTglOzyUSPsGY3N2PVPzLGiAh7wqjLANo2Y3q64RAROSBFFQ6pHcdhV0Fmsbaw952MO/PWBTLrBLQ==;24:mmoQxzQS9dswfcVEqCmLXElMr9vaQ3hpeRRdU82g7UZy4Sb06fDDO74dvAyFKBQqECG/0jecTbsY3c8SuHT9+7t5GhPdcZ1prUH78ZoiUL0=;20:rTIJUdNBkoYAQ0w9W+L61ZUrBnOiO5IHGrJb2QIPfLuZYrzl/Okmc2P9aYkzhUmSCwFCSBKfjZZofsMbtyeJR4jfgmIlR61pfzkAHzk+t+qbqVc/wIVtZhP7Ep9YD9JQdcLpailRO1JY083A0ZBJd5hTXmJadKYkmGwkKtHWFSjmxUYKBcCOqzGvCDwpTR4rnZndOBurUzHVofYvEX2bhFwHBqAy9PzNjuxaw3JaNLWfeZQ9t9nhZZE91o71Op5n SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2016 05:33:23.6815 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.222];Helo=[atltwp02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR1201MB1079 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As CSRT table will not always work, 2 arguments, base_request_line and num are added to acpi dma controller register as another way to get device request line. Signed-off-by: Wang Hongcheng --- drivers/dma/acpi-dma.c | 25 ++++++++++++++++++++----- drivers/dma/dw/platform.c | 2 +- include/linux/acpi_dma.h | 6 ++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/dma/acpi-dma.c b/drivers/dma/acpi-dma.c index 16d0daa..e2c27c3 100644 --- a/drivers/dma/acpi-dma.c +++ b/drivers/dma/acpi-dma.c @@ -105,7 +105,7 @@ static int acpi_dma_parse_resource_group(const struct acpi_csrt_group *grp, * We are using this table to get the request line range of the specific DMA * controller to be used later. */ -static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma) +static int acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma) { struct acpi_csrt_group *grp, *end; struct acpi_table_csrt *csrt; @@ -117,7 +117,7 @@ static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma) if (ACPI_FAILURE(status)) { if (status != AE_NOT_FOUND) dev_warn(&adev->dev, "failed to get the CSRT table\n"); - return; + return -ENOENT; } grp = (struct acpi_csrt_group *)(csrt + 1); @@ -128,11 +128,12 @@ static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma) if (ret < 0) { dev_warn(&adev->dev, "error in parsing resource group\n"); - return; + return -EINVAL; } grp = (struct acpi_csrt_group *)((void *)grp + grp->length); } + return 0; } /** @@ -140,6 +141,8 @@ static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma) * @dev: struct device of DMA controller * @acpi_dma_xlate: translation function which converts a dma specifier * into a dma_chan structure + * @base_request_line: device request line base + * @num: device request line range * @data pointer to controller specific data to be used by * translation function * @@ -152,10 +155,13 @@ static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma) int acpi_dma_controller_register(struct device *dev, struct dma_chan *(*acpi_dma_xlate) (struct acpi_dma_spec *, struct acpi_dma *), + unsigned short base_request_line, + unsigned short num, void *data) { struct acpi_device *adev; struct acpi_dma *adma; + int ret; if (!dev || !acpi_dma_xlate) return -EINVAL; @@ -173,7 +179,12 @@ int acpi_dma_controller_register(struct device *dev, adma->acpi_dma_xlate = acpi_dma_xlate; adma->data = data; - acpi_dma_parse_csrt(adev, adma); + ret = acpi_dma_parse_csrt(adev, adma); + + if (ret < 0) { + adma->base_request_line = base_request_line; + adma->end_request_line = base_request_line + num; + } /* Now queue acpi_dma controller structure in list */ mutex_lock(&acpi_dma_lock); @@ -236,6 +247,8 @@ static void devm_acpi_dma_release(struct device *dev, void *res) int devm_acpi_dma_controller_register(struct device *dev, struct dma_chan *(*acpi_dma_xlate) (struct acpi_dma_spec *, struct acpi_dma *), + unsigned short base_request_line, + unsigned short num, void *data) { void *res; @@ -245,7 +258,9 @@ int devm_acpi_dma_controller_register(struct device *dev, if (!res) return -ENOMEM; - ret = acpi_dma_controller_register(dev, acpi_dma_xlate, data); + ret = acpi_dma_controller_register(dev, acpi_dma_xlate, + base_request_line, + num, data); if (ret) { devres_free(res); return ret; diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c index 68a4815..54b898d 100644 --- a/drivers/dma/dw/platform.c +++ b/drivers/dma/dw/platform.c @@ -88,7 +88,7 @@ static void dw_dma_acpi_controller_register(struct dw_dma *dw) info->filter_fn = dw_dma_acpi_filter; ret = devm_acpi_dma_controller_register(dev, acpi_dma_simple_xlate, - info); + 0, 0, info); if (ret) dev_err(dev, "could not register acpi_dma_controller\n"); } diff --git a/include/linux/acpi_dma.h b/include/linux/acpi_dma.h index 329436d..d90febe 100644 --- a/include/linux/acpi_dma.h +++ b/include/linux/acpi_dma.h @@ -62,11 +62,15 @@ struct acpi_dma_filter_info { int acpi_dma_controller_register(struct device *dev, struct dma_chan *(*acpi_dma_xlate) (struct acpi_dma_spec *, struct acpi_dma *), + unsigned short base_request_line, + unsigned short num, void *data); int acpi_dma_controller_free(struct device *dev); int devm_acpi_dma_controller_register(struct device *dev, struct dma_chan *(*acpi_dma_xlate) (struct acpi_dma_spec *, struct acpi_dma *), + unsigned short base_request_line, + unsigned short num, void *data); void devm_acpi_dma_controller_free(struct device *dev); @@ -82,6 +86,8 @@ struct dma_chan *acpi_dma_simple_xlate(struct acpi_dma_spec *dma_spec, static inline int acpi_dma_controller_register(struct device *dev, struct dma_chan *(*acpi_dma_xlate) (struct acpi_dma_spec *, struct acpi_dma *), + unsigned short base_request_line, + unsigned short num, void *data) { return -ENODEV; -- 1.9.1