![Marek Szyprowski](/assets/img/avatar_default.png)
The 'order' parameter for IOMMU-aware dma-mapping implementation was introduced mainly as a hack to reduce size of the bitmap used for tracking IO virtual address space. Since now it is possible to dynamically resize the bitmap, this hack is not needed and can be removed without any impact on the client devices. This way the parameters for arm_iommu_create_mapping() becomes much easier to understand. 'size' parameter now means the maximum supported IO address space size. The code will allocate (resize) bitmap in chunks, ensuring that a single chunk is not larger than a single memory page to avoid unreliable allocations of size larger than PAGE_SIZE in atomic context. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
71 lines
1.6 KiB
C
71 lines
1.6 KiB
C
/* exynos_drm_iommu.h
|
|
*
|
|
* Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
|
* Authoer: Inki Dae <inki.dae@samsung.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*/
|
|
|
|
#ifndef _EXYNOS_DRM_IOMMU_H_
|
|
#define _EXYNOS_DRM_IOMMU_H_
|
|
|
|
#define EXYNOS_DEV_ADDR_START 0x20000000
|
|
#define EXYNOS_DEV_ADDR_SIZE 0x40000000
|
|
|
|
#ifdef CONFIG_DRM_EXYNOS_IOMMU
|
|
|
|
int drm_create_iommu_mapping(struct drm_device *drm_dev);
|
|
|
|
void drm_release_iommu_mapping(struct drm_device *drm_dev);
|
|
|
|
int drm_iommu_attach_device(struct drm_device *drm_dev,
|
|
struct device *subdrv_dev);
|
|
|
|
void drm_iommu_detach_device(struct drm_device *dev_dev,
|
|
struct device *subdrv_dev);
|
|
|
|
static inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
|
|
{
|
|
#ifdef CONFIG_ARM_DMA_USE_IOMMU
|
|
struct device *dev = drm_dev->dev;
|
|
|
|
return dev->archdata.mapping ? true : false;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
#else
|
|
|
|
struct dma_iommu_mapping;
|
|
static inline int drm_create_iommu_mapping(struct drm_device *drm_dev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void drm_release_iommu_mapping(struct drm_device *drm_dev)
|
|
{
|
|
}
|
|
|
|
static inline int drm_iommu_attach_device(struct drm_device *drm_dev,
|
|
struct device *subdrv_dev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void drm_iommu_detach_device(struct drm_device *drm_dev,
|
|
struct device *subdrv_dev)
|
|
{
|
|
}
|
|
|
|
static inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
#endif
|
|
#endif
|