Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755316AbbLDDk3 (ORCPT ); Thu, 3 Dec 2015 22:40:29 -0500 Received: from mail-bn1on0076.outbound.protection.outlook.com ([157.56.110.76]:22448 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755235AbbLDDkW (ORCPT ); Thu, 3 Dec 2015 22:40:22 -0500 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; 8bytes.org; dkim=none (message not signed) header.d=none;8bytes.org; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NYTDJF-07-26Z-02 X-M-MSG: From: Wang Hongcheng To: Vinod Koul , Mika Westerberg , Joerg Roedel , "Greg Kroah-Hartman" , "Rafael J. Wysocki" CC: , , , , , Borislav Petkov , Huang Rui , Wan Zongshun , Ken Xue , Tony Li , Wang Hongcheng Subject: [PATCH 5/9] dmaengine: pl330: provide ACPI dmaengine interface Date: Fri, 4 Dec 2015 11:24:22 +0800 Message-ID: <1449199466-6081-6-git-send-email-annie.wang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1449199466-6081-1-git-send-email-annie.wang@amd.com> References: <1449199466-6081-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.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(189002)(199003)(53416004)(50986999)(229853001)(575784001)(47776003)(76176999)(5003940100001)(19580405001)(106466001)(97736004)(105586002)(5003600100002)(33646002)(87936001)(5001770100001)(2950100001)(48376002)(50226001)(189998001)(586003)(1096002)(11100500001)(92566002)(50466002)(1220700001)(5008740100001)(19580395003)(86362001)(101416001)(36756003)(77096005);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR12MB0708;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0708;2:hfEfg1Oj+CdKwlVaWUbE2D+ASB0axignM+FRL21DPVfjh9vZPyJ6Csx7evZwRDMjK51+ty1JHTXzC8Od7tSGIBzdryTm+EZ3dd7dI4yrmgeK6gn9Wrs68jYPKhz+6DsH5bKPLdK0iAC1yUzZfgQQew==;3:rvWAZ3JO2gMILLVtFtEkNb15vVvgxulDS5ZBNIfmZwl337j6uYFTWy759+6l7FabkleUdhvm45A665E/UI1DSeTnvTZlv1lu0vrre9uRZh8FQuaSEhjZf2zFSlDdr6DjZ8VkpzlT/k0Pb6auqNLb/fFS4SPqpaehQRMjZwzfXtlZBRSb1+MmrvKGeWufZSnHm7wWe3/88Xc0nBEflAYVdMe3A5lYKklEqZ+6/croI5g=;25:vXujnez38tcPr7IiSAWS7ETjodWbixHY2uxATWGVNXMsqTqUT2PVsNnCeLHKYXMUYaAtvljEDf3oTezp4CwtFUUZq6cE+rvXI9pJcutNn5beo4OSM6BGj08tST1Oqf8tM2SBUOHMWFFIJ+297fu9nhR42b/6ijKPNzLpcm9MqYdQEtScAsypOeqx/CiVBOi1KKh7GBF9hI/dkVUQugQuhnyQyztsy8feQ2nA/8b0o9JNhrmJobO0XZcKjtyTLCCYQ8Yv12UJqN/s3sww46eYHw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0708; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0708;20:65TisdIrNzxdoeuC8PFqlcxAkl5JITn/pvhXbiwyR9oOqLWMmthpNM2Yfp7mq0diiGCiW8gTIyXWxGMf9uPDJ/gwad0bVxRhPDWP7A5a7DZEuOCdVv64fFH8b9bddMmjtn6i162FwQNdCWsEIUgOgpY2bIMULlWHNyzBFPDyMlyAcx+vZl2eEP+qZdwV7ub+lMcI6JoUXsUb0SwgJHZ5TVRem9Sw3SFsrcQkqA6JtOk6ZIvPSWWccsJyD6543BOiMVPp/ksaqw9/K4Tck2PEDE0H+SpuNxoJsWXiGWYxSPyOC9UK2hWUhzu8C0dMBKVTgUxUkKcTRjmE2Wl+F8fosq4CSJwOVKQaE/OJrRss7MuF3LYfXYPtiJVZ5scdAkOq9Zr4eGZ7xwCNCnPNZ4tTugFuEFyIV4mTNvPzlgGEZ2/Yn5fLXApNHLqDUXG2FJc7I5JtIQ8JiXwUHQWmYMBnOSnt76E41LU7QEycDM0Pz131+UQ/AXE/VV5HpUugn6LK;4:UdnRI37VsQv158tfozZ/BtgONo9KX9ZKdVEcCP2/Sc77h6c9TOvkP/lqTBdD4MY4BdQ23n3aLRb1nYy2a17ZsoSPro+Jl8mQyQnwBxLRuPcxq6QbwC3u6m51IvLuoyP1TrOTL4Z9M2TAgP9DGFZhZ5u6XzaB4aR5rAZSLfH0VO/ZTYzq45WrpvMW8g4XEw5GBkJHhlksI5kCniAX6sf2mrjpCc0wBgINk4WwEjDOAK2r7hV4WrvdohXFDKri19Twe5Np+0SQDg1kZ5rlpjtJiAvKoJcKMfcGi5lyefD9/Wf0JvtqVNZ4fMybixtheKJ2Mhd6PZAqgH6ZLZzBcR63bhtZ4gjOLEFaIWLqqv0BxQ/JHj0gdBoKC/c20+DMVDHn/EOloVds1OBYWJlu4H+otfJ+ZrtrhukTnxw2Ky7zs/U= 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)(8121501046)(5005006)(10201501046)(3002001);SRVR:BLUPR12MB0708;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0708; X-Forefront-PRVS: 07807C55DC X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR12MB0708;23:FDtrqhaH6F/30P2X2eKI1edBCdJaeDlKkGFc1cu8j?= =?us-ascii?Q?PDadCO+ibKjTaL68KPn7vcOVmphMygsz36UYj41N0Tw58tOOAZ4Ps7uy0O2g?= =?us-ascii?Q?ljLQw2lngG+RXerXhR/kl6PWvu0MiM6OeqO7iJuv0M7PK7UUZSDwBGc8HRXg?= =?us-ascii?Q?ZI1XqFNx06GMpbrPjMSpUx7FyM/UkagAdX/+TRWsksbYJq31oyY4hWocY4S3?= =?us-ascii?Q?R+eJ4Mlm/FQwesMmpnZZps20dpr63jCZnpvRbPFaL67RM5kGB/IY7QLUS2q+?= =?us-ascii?Q?PlSKeLAxoKwUpgqoCGV8Ev6BvFJPJWWjgaixNGyq+CZmt+McDfilYenPV85N?= =?us-ascii?Q?gHuOLNW7brB/1uPSV2akEqMtxCdFHSYLmXJu9K8R4jaTr9xwL+SUi2QVcsnB?= =?us-ascii?Q?mmoWlwRAU/IWQHSkO3mn2Gy3s31xYgHQN4XGXtUg7SMvQPG5NsSYAnR7dJnM?= =?us-ascii?Q?66365RBDb7gUOb8kVXHZho/V6brNIo2NSPzRXBKm1vmE2jNsFnqgfDXAi69g?= =?us-ascii?Q?5jjubmsp8mV0H4YoH0TNsMGSHnMx8J9HGlKjtj2a7JmGvUE1jotiqH2KDLSG?= =?us-ascii?Q?px716qlSjVCSz4EslbemUZ/ELj0eXdtitizZ94EPeNRf9uBz3TpiiCe15s0/?= =?us-ascii?Q?ruRNsQhlmcR1+/e65KoGavgJU1buudFY9c2WoSVAyi7W22GYMoyDVqVZQbTd?= =?us-ascii?Q?C8wwFItfVXARRgvBJ5twEzEp2RW7HWNQgb5N/oIY333rgbKW+sK4RJRdgv8X?= =?us-ascii?Q?d4XViqVAhePaJ/08c+8geNL8YTC3+St5eK8iDrke235hXHfcaFtY02DTbt90?= =?us-ascii?Q?BxwlQgV+RUxqsedqCyR5dEu8pFr1+ItsYs0x/FRhSvehbfdbfox6LWGiuXTz?= =?us-ascii?Q?D/LZCXZ6Is3zsiKFiZLDsibz1TawiHg3tzwqHMl7ReY6km3qIKsty0qmbBGn?= =?us-ascii?Q?X9zBcuWikizXw5ZvsewcTFJNtSLlX9MgKsdzYpgbeLAqMHsSZfIoWyBQsVRy?= =?us-ascii?Q?IY=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0708;5:mri/fmuQiyL7VrByKCZSAzYKnT8IeAOeiSFGQjeDDtOuHsmtMtgHQg3vx75H7HEy7CTsZGscQjsJL5LIRsdf02iI9+NnEc4UPf4fWbTJ1cvzGAWmY/zVpsblD9ehjUME6cImxmRgqXiwdMlusvssLA==;24:i84gjjAJHcZ3gGKLrvHszf4e7K+OsG7PdF9Mallmkp4AwyYmlDVQd33VLbxd9+WSWlRyObFBo72C+o2Q4mii5GMS5ZSudz0QeSLnX/F/xoM=;20:JIfOP21DeCVZ4q+I6NCRBoJGzeXbfNAA1E6vnwwW0Wpvj+CIfu7+etosKDEqC225z/oySywlHFWe3f1gtqgsNx1877tX+nihNILr+8VHVxqSvUjSImGS8aGqYSYLqA7uzEcIu5KNI+eSz8RwVsgE5TFWaVMb6zEq+Ah6aYDp4Sqw4z02iqHMFbOxmmyU9DuIVFQ4ghEI5ubrfCEMRw6JdqqBJoLw/27gRmCksr++BbeVrMLMUdvxaaTMsI2Ng4EW SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2015 03:26:05.9666 (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.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR12MB0708 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3460 Lines: 124 register acpi_dma controller, so ACPI devices can request pl330 DMA channel. A filter is added in private data for Carrizo specific hardware design Signed-off-by: Wang Hongcheng --- drivers/acpi/acpi_apd.c | 12 ++++++++++++ drivers/dma/pl330.c | 38 ++++++++++++++++++++++++++++++++++++++ include/linux/amba/pl330.h | 1 + 3 files changed, 51 insertions(+) diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c index 7a582f5..906a20f 100644 --- a/drivers/acpi/acpi_apd.c +++ b/drivers/acpi/acpi_apd.c @@ -38,12 +38,15 @@ struct apd_private_data; static u8 peri_id[2] = { 0, 1 }; +static int apd_acpi_xlate_filter(int slave_id, struct device *dev); + static struct dma_pl330_platdata amd_pl330 = { .nr_valid_peri = 2, .peri_id = peri_id, .has_no_cap_mask = true, .mcbuf_sz = 0, .flags = IRQF_SHARED, + .acpi_xlate_filter = apd_acpi_xlate_filter, }; /** @@ -68,6 +71,15 @@ struct apd_private_data { const struct apd_device_desc *dev_desc; }; +int apd_acpi_xlate_filter(int slave_id, struct device *dev) +{ + if (((slave_id == 1) && (!strcmp(dev_name(dev), "AMD0020:00DMA"))) + || ((slave_id == 2) && (!strcmp(dev_name(dev), "AMD0020:01DMA")))) + return 0; + + return 1; +} + #ifdef CONFIG_X86_AMD_PLATFORM_DEVICE #define APD_ADDR(desc) ((unsigned long)&desc) diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 8300969..9d7af0d 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -2079,6 +2079,35 @@ static struct dma_chan *of_dma_pl330_xlate(struct of_phandle_args *dma_spec, return dma_get_slave_channel(&pl330->peripherals[chan_id].chan); } +static struct dma_chan *acpi_dma_pl330_xlate(struct acpi_dma_spec *dma_spec, + struct acpi_dma *adma) +{ + struct pl330_dmac *pl330 = adma->data; + struct dma_pl330_platdata *pdat; + unsigned int chan_id; + int ret; + + if (!dma_spec) + return NULL; + + if (!adma) + return NULL; + + pdat = dev_get_platdata(adma->dev); + + chan_id = dma_spec->chan_id; + if (chan_id >= pl330->num_peripherals) + return NULL; + + if (pdat->acpi_xlate_filter) { + ret = pdat->acpi_xlate_filter(dma_spec->slave_id, adma->dev); + if (ret) + return NULL; + } + + return dma_get_slave_channel(&pl330->peripherals[chan_id].chan); +} + static int pl330_alloc_chan_resources(struct dma_chan *chan) { struct dma_pl330_chan *pch = to_pchan(chan); @@ -2918,6 +2947,15 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) } } + if (ACPI_HANDLE(&adev->dev)) { + ret = acpi_dma_controller_register(&adev->dev, + acpi_dma_pl330_xlate, pl330); + if (ret) { + dev_err(&adev->dev, + "unable to register DMA to the generic ACPI DMA helpers\n"); + } + } + adev->dev.dma_parms = &pl330->dma_parms; /* diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h index 605d00f..85bebbb 100644 --- a/include/linux/amba/pl330.h +++ b/include/linux/amba/pl330.h @@ -32,6 +32,7 @@ struct dma_pl330_platdata { unsigned mcbuf_sz; /*flags for irq sharing, default is non-shared*/ unsigned flags; + int (*acpi_xlate_filter)(int slave_id, struct device *dev); }; extern bool pl330_filter(struct dma_chan *chan, void *param); -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/