From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755841AbbJUPz0 (ORCPT ); Wed, 21 Oct 2015 11:55:26 -0400 Received: from mail-by2on0080.outbound.protection.outlook.com ([207.46.100.80]:49504 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755135AbbJUPxF (ORCPT ); Wed, 21 Oct 2015 11:53:05 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NWKUSB-07-H0T-02 X-M-MSG: From: Suravee Suthikulpanit To: , , , , CC: , , , , , , , , Suravee Suthikulpanit Subject: [PATCH V4 3/8] acpi: Adding DMA Attribute APIs for ACPI Device Date: Wed, 21 Oct 2015 08:52:06 -0700 Message-ID: <1445442731-28819-4-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1445442731-28819-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1445442731-28819-1-git-send-email-Suravee.Suthikulpanit@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)(199003)(189002)(36756003)(19580405001)(86362001)(64706001)(229853001)(5008740100001)(50986999)(5003600100002)(87936001)(76176999)(92566002)(47776003)(2201001)(5001770100001)(5003940100001)(97736004)(189998001)(46102003)(77096005)(11100500001)(19580395003)(106466001)(53416004)(105586002)(101416001)(50466002)(2950100001)(48376002)(5007970100001)(50226001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR12MB0858;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0858;2:qiqKof/ADR9u61d10DtJwPPoc849L4iAVvpmZdWzHf5v6F7IXNsSfTkGdUxdUNW6jE+h87FnTMDDHex/xvKUzyFMkpOEQDHJPpG3fNVQowmynwBkwcBvEjoiTbHEk3SFnRG092e7n7uYM/di9OYJ4XCjxlxQhc351EysKI4R5sU=;3:NIyqOEDh8xypJd+yJuwBKkrXMawc0wiDYFQ7KafJNBIAhL4y0V+jMiqA92khKTgfHCEzLYNoeAGNyNF0WkZJaFytfPGtjv2+QnDsLHURNQyLEXnubdzDuujsuiSv2czupVmlekcx5x4L58uweTx1cy57gI5UB4d31tYYICC05toNYjaLpO5YFPaWYhCN+EFeMI2RL4nXGPpm+RpjczhIwB7DuyTeHS4eUeCvD7fBzOs2yXZjKRsV4+KD5qSHIMig;25:XkOnAUh5LYwoWCZhklBwlhBscxombAqZUbpJKln5+j5YCXUq8OYewE5/oDtlFQCHKwh9yHxf1YU0PerbM/b2ESA9xoCkdBD1mnYUtrXnmXh408ddCHVpfmrRzId1Ah0NmzNCFIjjDaXKzm+aXXcd1MvIjEZs1AJdMG5FMCo+RX/W2fjsspFDmgUaCuVC8rupmTMu1CDcv/596g0guFquawyAhH/BmDDg6u6wiKCLjH86IpI7qO7N7at/GiK4DhGv61Sp3wvIDv0JNl4ZHmvkMA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0858; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0858;20:ijvcLoPktY4ZiawSltHHxJqhL6IYc6NwX8zqpZckGsTXBR4pbyw+i1IZem+bneijd9h8rEJwEU0sTWG6L7GgF3tUcsWSXgXxBdW6FF+Oxm60HUabzvA+pXeAJEkfAWKUWVS6g5inEIosnKSkZlgBdskMoyJhrgfw0JQYQq+95q6HKSVHHaKOAL+1O7MXzl0f983jmi17z7Bbso1hBM9t8Qc1HRPS5yM0MAhmhn7/M2O2xR1E7I7JgGt8PJvOqSpupNldUAuFZqI8eKTHOPblyg0KMwdxgxKq/alq3ZTTOOGSOMsY2Nh3SG9lrbMFY3xH/QkLWaQmj9Qb0HEsbJf3dDBKKMPqLT1YPj7BRuS/8+PZRdyB9WODkA+jYOJlCUje3kVo9rthCGCGTwpfOVbkQX2egW0UUFMqxV3Wsq7qDuKnolRRc2JbtjdVVDhxUnZE42x+a0a8uk468UK3zmUUxLBIr33CDN6/GES4QQcTE6wiqUApX8PY13+Sr6vwgblS;4:QEk+NF9fDzTJsvBmnoQ76IL9y7fNFzsZj6XrrM2D2n6AndRlWpP2qcbBZO+ZcyHchrNoNDS+cTYANBFr+iGrsGAou+Q4Ux2BsFPuAD/KRMPwPQr+2ffsYeBRlxdGurHFuW6dsxKS/mAC9ri/7op7UZjgSo3tg8ISTFnVze0WklJA+vBVroBrPsLSE5yJOR3sStUtNPfl/AbqAILCvt6zWXSRnnXFltD819K85Qt2QJseJq5T9hrqSvswjZcInyF8c3wxm8ATE6nwwJiTsOjyIUyYLPTO16N0Rk+sE1o67MebhVm3l6yfb0SwfQkkjKRoEa7Yt37uGrqWYauCXd8kED1arhGboCD1oJpi8HyzO7RLIVNv9QOzQC3R0Yhwu1OE 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)(5005006)(520078)(3002001)(102115026);SRVR:DM3PR12MB0858;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0858; X-Forefront-PRVS: 073631BD3D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR12MB0858;23:IGHQ4y2Lgfh980LZppfzxp9cz2lFXZlzc7YLF9dRw?= =?us-ascii?Q?NNaFeCfkJpMlPPVV17OYOsfpZistQwkvpa6GD9JWFXvJfXEP9ZNSesPjMrVy?= =?us-ascii?Q?XevbHB4UbEr83jk3tGG+9kwVag2cTjw3g2okokSohsa0hGkpVzgTIWFxR04U?= =?us-ascii?Q?HToFhMgFUJ9ygZQ4I7Iuz+OH4jK+Shqhyc7Favb4Dl3aZc0GnsaIs++2P8UG?= =?us-ascii?Q?03U09dbTjz+Cdyw5RG1zhK9kxxE2DHZ213aKTOVqABktzpRd/a45z5NrpcgT?= =?us-ascii?Q?h8Dg5rMP/6EsFO/9qy2fJbHSppBc/827W96h0fQyn30N+MvXHoCMI0bhDAku?= =?us-ascii?Q?5/pdkmRDMEb9g1YJWRIgtE7t4hDrmaX+kQYvsPTC94A/mOkFiRjI2qPB0r9O?= =?us-ascii?Q?AY8zTdZu7PrSAtReAOCLX5tjkTbXLZhqAeQMk9mZHDAPH0jkVlFUboTPVxSi?= =?us-ascii?Q?z1BurkMG3AbLDfOe+M/7iR5l0cVJd+dwImIorPxP1tEUhE2RbRSiyIBO+Pbt?= =?us-ascii?Q?u8MOxF+ZhTVtoEOcxIsxDQ07rUP+TsttHbaJSmn6lqrySiJj2PgFDeOVZ/jN?= =?us-ascii?Q?V1K6ymIPcKel9NATZAocppYh+NWZ+9DKWQKLCpcADtLryyHJGw+w3JEjNe/x?= =?us-ascii?Q?+9Y7Yx+mhLeXDkB8/HtQFPCxeENR8KR2g/XJ81CCUNnLqXrcOR090jtP3bcS?= =?us-ascii?Q?KKZX4Lt0AlS3mLMaodFK+NuOszLvlOg3eWqqStHPk10XiHEUmoZlu8dh23PA?= =?us-ascii?Q?E4vk+XuHYfXHYyEVs2JaZEf0jRgL9NIDL+9hi1Uj4pCKwRiMAjPF+6tijA6P?= =?us-ascii?Q?+I6V6wdqZyMIL+FGzmM3sZQhAJK7/1uy9xKlNzWlkl4NzBYSYY9CErRkHtRS?= =?us-ascii?Q?9PgQ3o3Mq0g9fKxsrnsK508b/UqDsPeNtRyKGVYkyY4tKow0N5lr3o1Mhl45?= =?us-ascii?Q?Q1FUfx9nNHFL0CcsV5iZBd+r0hU9ZOEIi9yWjrZsN7ajwhMLDqaa9RXz/zF9?= =?us-ascii?Q?/Q=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0858;5:Q2DKxTRhT5W5KXjK25hRrt2z1shDwWXpPOSzfa4GRdkbZWGXAnpHOApxOPnYbKSSndF/gW4nynCEcRxmDwzi0xS6FilKPfotOYoJbS7kDuHiU40kxbABtURBXbY34cN5hH55i+HsP4z+vRrHNIkQ8Q==;24:yXztJ7zGmFyRwgHx9wrbf5z4lu9WIap9UX1dfB51HVt8R0Y2BTo9mJaj2hnY8pU6upxEU4WpE0pxrEm6iuToxBC2bqfJTz89ui0qTEAYHGE=;20:0kO44eI929ns+rxnz2n7qQE9edlxBATYl2aKax5nYbgsrdcSqSmRyH0IwzX0tCGjIsF4zFgJcfC+ghP4Vjtl39cPS6Ka5djjSoseZVtLXyDeGbMPa/kr5ZRrBbyLtwT4Y18gb+lx8PXXvqo+OMgiRARdR9f9y0DMAyWjQMlQkFut8bZh2Em+F8FcduyM7YvS4Nq810M8iyjE36i7WYzuSB0W1W3hqqIajALRNzs2CnhqQOlEAz6S8Of7GqopHwWy SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2015 15:53:01.6284 (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: DM3PR12MB0858 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Adding acpi_get_dma_attr() to query DMA attributes of ACPI devices. It returns the enum dev_dma_attr, which communicates DMA information more clearly. This API replaces the acpi_check_dma(), which will be removed in subsequent patch. This patch also provides a convenient function, acpi_dma_supported(), to check DMA support of the specified ACPI device. Signed-off-by: Suravee Suthikulpanit Suggested-by: Bjorn Helgaas CC: Rafael J. Wysocki --- drivers/acpi/scan.c | 42 ++++++++++++++++++++++++++++++++++++++++++ include/acpi/acpi_bus.h | 3 +++ include/linux/acpi.h | 10 ++++++++++ 3 files changed, 55 insertions(+) diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 01136b8..3be213e 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -1328,6 +1328,48 @@ void acpi_free_pnp_ids(struct acpi_device_pnp *pnp) kfree(pnp->unique_id); } +/** + * acpi_dma_supported - Check DMA support for the specified device. + * @adev: The pointer to acpi device + * + * Return false if DMA is not supported. Otherwise, return true + */ +bool acpi_dma_supported(struct acpi_device *adev) +{ + if (!adev) + return false; + + if (adev->flags.cca_seen) + return true; + + /* + * Per ACPI 6.0 sec 6.2.17, assume devices can do cache-coherent + * DMA on "Intel platforms". Presumably that includes all x86 and + * ia64, and other arches will set CONFIG_ACPI_CCA_REQUIRED=y. + */ + if (!IS_ENABLED(CONFIG_ACPI_CCA_REQUIRED)) + return true; + + return false; +} + +/** + * acpi_get_dma_attr - Check the supported DMA attr for the specified device. + * @adev: The pointer to acpi device + * + * Return enum dev_dma_attr. + */ +enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev) +{ + if (!acpi_dma_supported(adev)) + return DEV_DMA_NOT_SUPPORTED; + + if (adev->flags.coherent_dma) + return DEV_DMA_COHERENT; + else + return DEV_DMA_NON_COHERENT; +} + static void acpi_init_coherency(struct acpi_device *adev) { unsigned long long cca = 0; diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 5a42204..13417d0 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -567,6 +567,9 @@ struct acpi_pci_root { /* helper */ +bool acpi_dma_supported(struct acpi_device *adev); +enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev); + struct acpi_device *acpi_find_child_device(struct acpi_device *parent, u64 address, bool check_children); int acpi_is_root_bridge(acpi_handle); diff --git a/include/linux/acpi.h b/include/linux/acpi.h index dd39202..c47892c 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -569,6 +569,16 @@ static inline bool acpi_check_dma(struct acpi_device *adev, bool *coherent) return false; } +static inline bool acpi_dma_supported(struct acpi_device *adev) +{ + return false; +} + +static inline enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev) +{ + return DEV_DMA_NOT_SUPPORTED; +} + #define ACPI_PTR(_ptr) (NULL) #endif /* !CONFIG_ACPI */ -- 2.1.0