drm/exynos/iommu: move IOMMU specific stuff into exynos_drm_iommu.c
Since __exynos_iommu* functions are used only in exynos_drm_iommu.c we can move them there. Signed-off-by: Andrzej Hajda <a.hajda@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
parent
237556962e
commit
a0b68a710b
|
@ -18,6 +18,78 @@
|
|||
#include "exynos_drm_drv.h"
|
||||
#include "exynos_drm_iommu.h"
|
||||
|
||||
#define EXYNOS_DEV_ADDR_START 0x20000000
|
||||
#define EXYNOS_DEV_ADDR_SIZE 0x40000000
|
||||
|
||||
#if defined(CONFIG_ARM_DMA_USE_IOMMU)
|
||||
#include <asm/dma-iommu.h>
|
||||
|
||||
static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv,
|
||||
unsigned long start, unsigned long size)
|
||||
{
|
||||
priv->mapping = arm_iommu_create_mapping(&platform_bus_type, start,
|
||||
size);
|
||||
return IS_ERR(priv->mapping);
|
||||
}
|
||||
|
||||
static inline void
|
||||
__exynos_iommu_release_mapping(struct exynos_drm_private *priv)
|
||||
{
|
||||
arm_iommu_release_mapping(priv->mapping);
|
||||
}
|
||||
|
||||
static inline int __exynos_iommu_attach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
if (dev->archdata.mapping)
|
||||
arm_iommu_detach_device(dev);
|
||||
|
||||
return arm_iommu_attach_device(dev, priv->mapping);
|
||||
}
|
||||
|
||||
static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
arm_iommu_detach_device(dev);
|
||||
}
|
||||
|
||||
#elif defined(CONFIG_IOMMU_DMA)
|
||||
#include <linux/dma-iommu.h>
|
||||
|
||||
static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv,
|
||||
unsigned long start, unsigned long size)
|
||||
{
|
||||
priv->mapping = iommu_get_domain_for_dev(priv->dma_dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void __exynos_iommu_release_mapping(struct exynos_drm_private *priv)
|
||||
{
|
||||
priv->mapping = NULL;
|
||||
}
|
||||
|
||||
static inline int __exynos_iommu_attach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
struct iommu_domain *domain = priv->mapping;
|
||||
|
||||
if (dev != priv->dma_dev)
|
||||
return iommu_attach_device(domain, dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
struct iommu_domain *domain = priv->mapping;
|
||||
|
||||
if (dev != priv->dma_dev)
|
||||
iommu_detach_device(domain, dev);
|
||||
}
|
||||
#else
|
||||
#error Unsupported architecture and IOMMU/DMA-mapping glue code
|
||||
#endif
|
||||
|
||||
static inline int configure_dma_max_seg_size(struct device *dev)
|
||||
{
|
||||
if (!dev->dma_parms)
|
||||
|
|
|
@ -12,80 +12,8 @@
|
|||
#ifndef _EXYNOS_DRM_IOMMU_H_
|
||||
#define _EXYNOS_DRM_IOMMU_H_
|
||||
|
||||
#define EXYNOS_DEV_ADDR_START 0x20000000
|
||||
#define EXYNOS_DEV_ADDR_SIZE 0x40000000
|
||||
|
||||
#ifdef CONFIG_EXYNOS_IOMMU
|
||||
|
||||
#if defined(CONFIG_ARM_DMA_USE_IOMMU)
|
||||
#include <asm/dma-iommu.h>
|
||||
|
||||
static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv,
|
||||
unsigned long start, unsigned long size)
|
||||
{
|
||||
priv->mapping = arm_iommu_create_mapping(&platform_bus_type, start,
|
||||
size);
|
||||
return IS_ERR(priv->mapping);
|
||||
}
|
||||
|
||||
static inline void
|
||||
__exynos_iommu_release_mapping(struct exynos_drm_private *priv)
|
||||
{
|
||||
arm_iommu_release_mapping(priv->mapping);
|
||||
}
|
||||
|
||||
static inline int __exynos_iommu_attach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
if (dev->archdata.mapping)
|
||||
arm_iommu_detach_device(dev);
|
||||
|
||||
return arm_iommu_attach_device(dev, priv->mapping);
|
||||
}
|
||||
|
||||
static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
arm_iommu_detach_device(dev);
|
||||
}
|
||||
|
||||
#elif defined(CONFIG_IOMMU_DMA)
|
||||
#include <linux/dma-iommu.h>
|
||||
|
||||
static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv,
|
||||
unsigned long start, unsigned long size)
|
||||
{
|
||||
priv->mapping = iommu_get_domain_for_dev(priv->dma_dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void __exynos_iommu_release_mapping(struct exynos_drm_private *priv)
|
||||
{
|
||||
priv->mapping = NULL;
|
||||
}
|
||||
|
||||
static inline int __exynos_iommu_attach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
struct iommu_domain *domain = priv->mapping;
|
||||
|
||||
if (dev != priv->dma_dev)
|
||||
return iommu_attach_device(domain, dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
|
||||
struct device *dev)
|
||||
{
|
||||
struct iommu_domain *domain = priv->mapping;
|
||||
|
||||
if (dev != priv->dma_dev)
|
||||
iommu_detach_device(domain, dev);
|
||||
}
|
||||
#else
|
||||
#error Unsupported architecture and IOMMU/DMA-mapping glue code
|
||||
#endif
|
||||
|
||||
int drm_create_iommu_mapping(struct drm_device *drm_dev);
|
||||
|
||||
void drm_release_iommu_mapping(struct drm_device *drm_dev);
|
||||
|
|
Loading…
Reference in a new issue