From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wang Hongcheng Subject: [PATCH 4/9] dmaengine: pl330: add new items for pl330 private data Date: Fri, 4 Dec 2015 11:24:21 +0800 Message-ID: <1449199466-6081-5-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 Return-path: Received: from mail-by2on0060.outbound.protection.outlook.com ([207.46.100.60]:21884 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755184AbbLDDlg (ORCPT ); Thu, 3 Dec 2015 22:41:36 -0500 In-Reply-To: <1449199466-6081-1-git-send-email-annie.wang@amd.com> Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: Vinod Koul , Mika Westerberg , Joerg Roedel , Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, dmaengine@vger.kernel.org, iommu@lists.linux-foundation.org, Borislav Petkov , Huang Rui , Wan Zongshun , Ken Xue , Tony Li , Wang Hongcheng has_no_cap_mask means this device has no preset cap mask. mcbuf_sz means bytes to allocate for MC buffer. flags is for irq sharing, default is non-shared, in AMD Carrizo, pl330 shares IRQ with its corresponding UART device. Signed-off-by: Wang Hongcheng --- drivers/acpi/acpi_apd.c | 13 ++++++++++++- drivers/dma/pl330.c | 19 +++++++++++++------ include/linux/amba/pl330.h | 3 +++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c index eb3316a..7a582f5 100644 --- a/drivers/acpi/acpi_apd.c +++ b/drivers/acpi/acpi_apd.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include "internal.h" @@ -35,6 +36,16 @@ struct apd_private_data; #define ACPI_APD_SYSFS BIT(0) #define ACPI_APD_PM BIT(1) +static u8 peri_id[2] = { 0, 1 }; + +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, +}; + /** * struct apd_device_desc - a descriptor for apd device. * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM; @@ -146,7 +157,7 @@ static int acpi_apd_create_device(struct acpi_device *adev, amba_dev = acpi_create_amba_device(pdata->adev, 0x00041330, 48000000, - NULL, + &amd_pl330, &amba_quirks); if (IS_ERR_OR_NULL(amba_dev)) goto err_out; diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 17ee758..8300969 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include #include @@ -488,6 +490,9 @@ struct pl330_dmac { /* Peripheral channels connected to this DMAC */ unsigned int num_peripherals; struct dma_pl330_chan *peripherals; /* keep at end */ + + /*IRQ register flags */ + unsigned int flags; }; struct dma_pl330_desc { @@ -2800,6 +2805,8 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) pl330->mcbufsz = pdat ? pdat->mcbuf_sz : 0; + pl330->flags = pdat ? pdat->flags : IRQF_TRIGGER_NONE; + res = &adev->res; pl330->base = devm_ioremap_resource(&adev->dev, res); if (IS_ERR(pl330->base)) @@ -2811,7 +2818,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) irq = adev->irq[i]; if (irq) { ret = devm_request_irq(&adev->dev, irq, - pl330_irq_handler, 0, + pl330_irq_handler, pl330->flags, dev_name(&adev->dev), pl330); if (ret) return ret; @@ -2870,7 +2877,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) list_add_tail(&pch->chan.device_node, &pd->channels); } - if (pdat) { + if (pdat && !pdat->has_no_cap_mask) { pd->cap_mask = pdat->cap_mask; } else { dma_cap_set(DMA_MEMCPY, pd->cap_mask); @@ -2923,11 +2930,11 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) dev_info(&adev->dev, - "Loaded driver for PL330 DMAC-%x\n", adev->periphid); + "Loaded driver for PL330 DMAC-%x\n", adev->periphid); dev_info(&adev->dev, - "\tDBUFF-%ux%ubytes Num_Chans-%u Num_Peri-%u Num_Events-%u\n", - pcfg->data_buf_dep, pcfg->data_bus_width / 8, pcfg->num_chan, - pcfg->num_peri, pcfg->num_events); + "\tDBUFF-%ux%ubytes Num_Chans-%u Num_Peri-%u Num_Events-%u\n", + pcfg->data_buf_dep, pcfg->data_bus_width / 8, pcfg->num_chan, + pcfg->num_peri, pcfg->num_events); pm_runtime_irq_safe(&adev->dev); pm_runtime_use_autosuspend(&adev->dev); diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h index fe93758..605d00f 100644 --- a/include/linux/amba/pl330.h +++ b/include/linux/amba/pl330.h @@ -26,9 +26,12 @@ struct dma_pl330_platdata { /* Array of valid peripherals */ u8 *peri_id; /* Operational capabilities */ + bool has_no_cap_mask; dma_cap_mask_t cap_mask; /* Bytes to allocate for MC buffer */ unsigned mcbuf_sz; + /*flags for irq sharing, default is non-shared*/ + unsigned flags; }; extern bool pl330_filter(struct dma_chan *chan, void *param); -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755418AbbLDDlo (ORCPT ); Thu, 3 Dec 2015 22:41:44 -0500 Received: from mail-by2on0060.outbound.protection.outlook.com ([207.46.100.60]:21884 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755184AbbLDDlg (ORCPT ); Thu, 3 Dec 2015 22:41:36 -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: 0NYTDJ7-07-26G-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 4/9] dmaengine: pl330: add new items for pl330 private data Date: Fri, 4 Dec 2015 11:24:21 +0800 Message-ID: <1449199466-6081-5-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)(76176999)(5003940100001)(5001770100001)(50986999)(229853001)(97736004)(33646002)(189998001)(106466001)(19580405001)(36756003)(92566002)(101416001)(50226001)(105586002)(19580395003)(11100500001)(586003)(5003600100002)(77096005)(87936001)(1220700001)(2950100001)(47776003)(53416004)(1096002)(5008740100001)(86362001)(48376002)(50466002);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR12MB0710;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0710;2:ExvgUes4GPjVoRuevUvLs8/miPI68ZzsaeYqqrxeZHEBBgCs2b6eZqyk2HyO4LQ1cdislaSBhxIOa1BygGAnw8gsRj/3AXozTZ8wOIiUksdmISf+ZVrFBgsduOl3Egs4sHxOoeSXq56OUnfHQTHpfQ==;3:hYfuQXru1DnNe1eXNbs0HfJ/8YljsrTONLPE6PG1BB79UR9ZDcWxj8I6E/MwhZTJ642QrxlHGP/OwRlcV9/fdLS++I5NICRmrdej2FXOQNo18nIDVxMq2nes/4zfxWuSjubGMuskLqpOVkjca02IcAQiIxewfdwiqrbsoQ+fa9pX9ChpJxA6bnB9E/LHFjz4J3ZqGVZH5Hu06sRpBypTAqOji4DLW1HiBOIp+xL/IIk=;25:lHETi36c8r178QjZImTW7UNVPIbouSWnpYsXXZrhwjryGud2CVzyxFDLDSo/tCDNN4by2NbMD+VzPmtT8CLBtIopQoolQ7DLf3rDxf/tnCM9hlsCqJC3y1BaumMlakvieD7zuWnIhXfe89glbYgZcrhgxwC0hkPx3SfjbEt1lR+uepopmHNi3GPIHPwO0JGB+bTgGKldXhOjiC3BH907v0VR/zXVwMIIjLBM5tzsOHB5XTVxqQtD2V+6Ot+qe96vVnjau38PHtkJ9LJG915EfA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0710; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0710;20:BzlNgYEuv/gDkC2w2Y/WwJO0B0pyIzZghy6Pa8MOQzQHBaqQEIDGBKyb/CMb+ky5MLV8ahvpbuDD2y9mkO3q4+lX2L66PT0LwaxRgNp4fBMO634thyE+Jl9YyRFYdqREUEzbNK0ZDhAXuFAqD0lN3SNTs9cHu5ZgP1duAhCeM54T1xcM4MztYzgh+snFyKopp2kFpJJzKjd4KHiT7YhEW2BTtdjg3w3iuvmwzB70RT+fKx0BFujmO2pafqLWj2axOcK1XTcMlNGpUIghtvDrr8Bq/83pNx66IaUQO23ZNl8XQSockllvq2XKTk0JzVeuO3qEgVN9xVATaT59fcTsqbxZDzlxU7F+trREQI6hVJX/lHAwOTFYwEV/mpDtxs0qsp47/jhnTY8KSyK2/7Lm70zB5Fxso5iAprLb7KUHhuomrL8dQCNkqvRU/QKIwF2/A20iPAGoY/PC9gp7IF5fiNVauSFsZ45rWJ36NiW4OiiXxA3t/dTVw9VOX+np4abq;4:7IHcFp8QEjMw442JKo00bZfzIMjioxOmbbhSOghMz/afAJAr9zgoRVfxmN1T9UHzT0KrMPSGlszfXN/oueR9NmKNCmYdwkvqpHl+DF+xBjmSrnM/pw2Fl/RXmbKcELZHI0MfkS6ncIJWrYT4OOxg1STIZBO0RimfNKC9cme+RcTvC62kMavvV8K/Kv6jsNQQUHlEZY0q3rSwtzrf8FUkRSAFWAe/kpTB3QCAFZ7pyF6I+aiMYzwl8a10Y7KmZ3fBHW5JSAFqeldNokib1Piv0SmRfNJjSEVgSUkikUcQDj26kORm9dd6WLI2y22I2DrEbw4P/LasB/xSrS+IknRHFrmReR2zIMKcjJWbywjUSe8rH8yvIpr3iP6eYdp5BzbyON15R7yBBJUXzJkukROdn6mStPO3qJW2I36eoG9HW+I= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001)(10201501046);SRVR:BY2PR12MB0710;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0710; X-Forefront-PRVS: 07807C55DC X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR12MB0710;23:CNciKg56lo4abvExVoay5gP1cQFSJJeDsMxzFvZ3y?= =?us-ascii?Q?9mPmZnsXopyxH5YKUIaFXM/ZOhpg5bCppFpZ4sNs9GOskk+b9GbR8Mts2hXn?= =?us-ascii?Q?TjMz+4K7ba08vDHFwS/lA0y9HK8YHLgkb8X/x05AokzSZn0tYi6C5wu4RZ0S?= =?us-ascii?Q?EEgl1xIJUJjSylqBmVAGqebwNUVft4r9T4q6mqp+Er9ZgIfQqUQS6e47E2K/?= =?us-ascii?Q?+mMUxn58u8jbBOKauzYpKog7OjTfkNkYuiwAQURxSB/BmjuNjk5EVByP4lYN?= =?us-ascii?Q?xRW6wgoLr3qAAiWPahQ4zhk0oYRYEuoQ+Sx9tLXVy6uuUYorAn96iluCAaSp?= =?us-ascii?Q?cVP9TNHXfP218/q6UEZJZmgmxnMVc+mB1ko/qjm2l7kjJ8D+M03c2uaQeycY?= =?us-ascii?Q?s4vCMtYPNjGqEdMt6jfA1ZC0a1UztwWFCQwaqfpnIpNGAR2+kTmbR0wWATv1?= =?us-ascii?Q?Vb5CmaEs0axVw6AhO1b7LVlicsEryBG+eSP5CG5k7d7rVtR0VXnl+H9bP/Te?= =?us-ascii?Q?7rahAZbfwzrEIJUpztlrWZkjt0FPSphkmHTbCiBTLVkSQcCQH7isbFXLRJO7?= =?us-ascii?Q?wAx/Exctn2wkI5a8TYAx4ml0t6dQQONhrQFeKnylVyZVxO++0TZf6jo907/j?= =?us-ascii?Q?8Rif533+UtChZiHF2C6trpG8pOGxk7N6NlJ9VSzt5DiSuoXJIIJK5u95q25c?= =?us-ascii?Q?Zxv0/wtrPE8AiyIIezNC3lf8/UQ7sseqVczLT4TAEDyOWByB2P5U76+UE1j8?= =?us-ascii?Q?3YyjjCtN1bSgWkd+XNjxWFpBRjCOc2q90v5YTfJYNZk84MFkifNq4bPe1Yha?= =?us-ascii?Q?bpSAL3Uzae1NwQaQZDLHcku+SVbCc6DgmG7Pq/oqtIYcnXiFHGFzg4MwUgWf?= =?us-ascii?Q?iyA5msWIryFWVPQe9oxXWJ4M/amfkZOQOpicYVOMEYWaarHG0OzfmVib+aXm?= =?us-ascii?Q?PGPdYjM5ZisJ+LVqICDIAVSyDyJeAhbGkkdEPhkDA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0710;5:shSL3Y5MAxqEW52qR44NW26o1/Ws9iBY6LNVxQ27PkEr0S1AN/U4+BxiKa1hyGZV30y4fRMSr0h43ox3XP+EoYxGTqYIwxow2XVWbiRCjbvqykD1jT3iJ/UlekcUzabw5pnfeEsh6FgyS3/21bimEA==;24:cX85bt4Eax2IjDmMGbtf0LnVNf3q3uYGWLhiluXWYIUvOwp4+1qXwZowBmRZ9ZUz3C56t6KpZ4SdrpccHGkr0SLulc26V/VM6D76SX9UtSs=;20:sQegWZAJHJEbxnTlm81Noe0f7j/v4J+RNdn85+cGyaL/N/WPwPO1NYsXcVXRCIaWVaDOWDzKAAcB2GpQ8DlvM93slbXzxcTidZaurJcnUBDFK8NKJh1gFDTHBl1SvcYh1au37OE3qXR/wT/uGENnLo2YD4jwt2qBU/mbrskR5nqnF35N6JRjsQ1GU5/6jvNkfHkjehinbDUSgHBwiMDcIgjLk5zTJnmXYUnt3iVqsHh9Z1k2+aMeqm+c793y1uxQ SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2015 03:25:57.3904 (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: BY2PR12MB0710 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org has_no_cap_mask means this device has no preset cap mask. mcbuf_sz means bytes to allocate for MC buffer. flags is for irq sharing, default is non-shared, in AMD Carrizo, pl330 shares IRQ with its corresponding UART device. Signed-off-by: Wang Hongcheng --- drivers/acpi/acpi_apd.c | 13 ++++++++++++- drivers/dma/pl330.c | 19 +++++++++++++------ include/linux/amba/pl330.h | 3 +++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c index eb3316a..7a582f5 100644 --- a/drivers/acpi/acpi_apd.c +++ b/drivers/acpi/acpi_apd.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include "internal.h" @@ -35,6 +36,16 @@ struct apd_private_data; #define ACPI_APD_SYSFS BIT(0) #define ACPI_APD_PM BIT(1) +static u8 peri_id[2] = { 0, 1 }; + +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, +}; + /** * struct apd_device_desc - a descriptor for apd device. * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM; @@ -146,7 +157,7 @@ static int acpi_apd_create_device(struct acpi_device *adev, amba_dev = acpi_create_amba_device(pdata->adev, 0x00041330, 48000000, - NULL, + &amd_pl330, &amba_quirks); if (IS_ERR_OR_NULL(amba_dev)) goto err_out; diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 17ee758..8300969 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include #include @@ -488,6 +490,9 @@ struct pl330_dmac { /* Peripheral channels connected to this DMAC */ unsigned int num_peripherals; struct dma_pl330_chan *peripherals; /* keep at end */ + + /*IRQ register flags */ + unsigned int flags; }; struct dma_pl330_desc { @@ -2800,6 +2805,8 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) pl330->mcbufsz = pdat ? pdat->mcbuf_sz : 0; + pl330->flags = pdat ? pdat->flags : IRQF_TRIGGER_NONE; + res = &adev->res; pl330->base = devm_ioremap_resource(&adev->dev, res); if (IS_ERR(pl330->base)) @@ -2811,7 +2818,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) irq = adev->irq[i]; if (irq) { ret = devm_request_irq(&adev->dev, irq, - pl330_irq_handler, 0, + pl330_irq_handler, pl330->flags, dev_name(&adev->dev), pl330); if (ret) return ret; @@ -2870,7 +2877,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) list_add_tail(&pch->chan.device_node, &pd->channels); } - if (pdat) { + if (pdat && !pdat->has_no_cap_mask) { pd->cap_mask = pdat->cap_mask; } else { dma_cap_set(DMA_MEMCPY, pd->cap_mask); @@ -2923,11 +2930,11 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) dev_info(&adev->dev, - "Loaded driver for PL330 DMAC-%x\n", adev->periphid); + "Loaded driver for PL330 DMAC-%x\n", adev->periphid); dev_info(&adev->dev, - "\tDBUFF-%ux%ubytes Num_Chans-%u Num_Peri-%u Num_Events-%u\n", - pcfg->data_buf_dep, pcfg->data_bus_width / 8, pcfg->num_chan, - pcfg->num_peri, pcfg->num_events); + "\tDBUFF-%ux%ubytes Num_Chans-%u Num_Peri-%u Num_Events-%u\n", + pcfg->data_buf_dep, pcfg->data_bus_width / 8, pcfg->num_chan, + pcfg->num_peri, pcfg->num_events); pm_runtime_irq_safe(&adev->dev); pm_runtime_use_autosuspend(&adev->dev); diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h index fe93758..605d00f 100644 --- a/include/linux/amba/pl330.h +++ b/include/linux/amba/pl330.h @@ -26,9 +26,12 @@ struct dma_pl330_platdata { /* Array of valid peripherals */ u8 *peri_id; /* Operational capabilities */ + bool has_no_cap_mask; dma_cap_mask_t cap_mask; /* Bytes to allocate for MC buffer */ unsigned mcbuf_sz; + /*flags for irq sharing, default is non-shared*/ + unsigned flags; }; extern bool pl330_filter(struct dma_chan *chan, void *param); -- 1.9.1