diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2015-06-19 02:17:35 +0300 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2015-06-19 02:17:35 +0300 |
commit | e193cd15ae98817ad82cc8bad61a200ac561e98c (patch) | |
tree | a4b645de8fe35f75e3d9459461bb89e8ffc41979 /include/acpi/acpi_bus.h | |
parent | 4def8a360fc6119e09916708cca0977a1495ccf4 (diff) | |
parent | e144cd045e123757b6b5f732c420b94dd5544407 (diff) | |
download | linux-e193cd15ae98817ad82cc8bad61a200ac561e98c.tar.xz |
Merge branch 'acpi-cca'
* acpi-cca:
ufs: fix TRUE and FALSE re-define build error
megaraid_sas: fix TRUE and FALSE re-define build error
amd-xgbe: Unify coherency checking logic with device_dma_is_coherent()
crypto: ccp - Unify coherency checking logic with device_dma_is_coherent()
device property: Introduces device_dma_is_coherent()
arm64 : Introduce support for ACPI _CCA object
ACPI / scan: Parse _CCA and setup device coherency
Diffstat (limited to 'include/acpi/acpi_bus.h')
-rw-r--r-- | include/acpi/acpi_bus.h | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 5dec08d7aa64..b43276f339ef 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -209,7 +209,9 @@ struct acpi_device_flags { u32 hotplug_notify:1; u32 is_dock_station:1; u32 of_compatible_ok:1; - u32 reserved:22; + u32 coherent_dma:1; + u32 cca_seen:1; + u32 reserved:20; }; /* File System */ @@ -380,6 +382,39 @@ struct acpi_device { void (*remove)(struct acpi_device *); }; +static inline bool acpi_check_dma(struct acpi_device *adev, bool *coherent) +{ + bool ret = false; + + if (!adev) + return ret; + + /** + * Currently, we only support _CCA=1 (i.e. coherent_dma=1) + * This should be equivalent to specifyig dma-coherent for + * a device in OF. + * + * For the case when _CCA=0 (i.e. coherent_dma=0 && cca_seen=1), + * There are two cases: + * case 1. Do not support and disable DMA. + * case 2. Support but rely on arch-specific cache maintenance for + * non-coherence DMA operations. + * Currently, we implement case 1 above. + * + * For the case when _CCA is missing (i.e. cca_seen=0) and + * platform specifies ACPI_CCA_REQUIRED, we do not support DMA, + * and fallback to arch-specific default handling. + * + * See acpi_init_coherency() for more info. + */ + if (adev->flags.coherent_dma) { + ret = true; + if (coherent) + *coherent = adev->flags.coherent_dma; + } + return ret; +} + static inline bool is_acpi_node(struct fwnode_handle *fwnode) { return fwnode && fwnode->type == FWNODE_ACPI; |