10519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae/* exynos_drm_iommu.h 20519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae * 30519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae * Copyright (c) 2012 Samsung Electronics Co., Ltd. 40519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae * Authoer: Inki Dae <inki.dae@samsung.com> 50519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae * 6d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * This program is free software; you can redistribute it and/or modify it 7d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * under the terms of the GNU General Public License as published by the 8d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * Free Software Foundation; either version 2 of the License, or (at your 9d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * option) any later version. 100519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae */ 110519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 120519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#ifndef _EXYNOS_DRM_IOMMU_H_ 130519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#define _EXYNOS_DRM_IOMMU_H_ 140519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 150519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#define EXYNOS_DEV_ADDR_START 0x20000000 160519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#define EXYNOS_DEV_ADDR_SIZE 0x40000000 170519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 180519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#ifdef CONFIG_DRM_EXYNOS_IOMMU 190519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 200519f9a12d0113caab78980c48a7902d2bd40c2cInki Daeint drm_create_iommu_mapping(struct drm_device *drm_dev); 210519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 220519f9a12d0113caab78980c48a7902d2bd40c2cInki Daevoid drm_release_iommu_mapping(struct drm_device *drm_dev); 230519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 240519f9a12d0113caab78980c48a7902d2bd40c2cInki Daeint drm_iommu_attach_device(struct drm_device *drm_dev, 250519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae struct device *subdrv_dev); 260519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 270519f9a12d0113caab78980c48a7902d2bd40c2cInki Daevoid drm_iommu_detach_device(struct drm_device *dev_dev, 280519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae struct device *subdrv_dev); 290519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 300519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline bool is_drm_iommu_supported(struct drm_device *drm_dev) 310519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{ 320519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#ifdef CONFIG_ARM_DMA_USE_IOMMU 330519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae struct device *dev = drm_dev->dev; 340519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 350519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae return dev->archdata.mapping ? true : false; 360519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#else 370519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae return false; 380519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#endif 390519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae} 400519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 410519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#else 420519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 430519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestruct dma_iommu_mapping; 440519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline int drm_create_iommu_mapping(struct drm_device *drm_dev) 450519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{ 460519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae return 0; 470519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae} 480519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 490519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline void drm_release_iommu_mapping(struct drm_device *drm_dev) 500519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{ 510519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae} 520519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 530519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline int drm_iommu_attach_device(struct drm_device *drm_dev, 540519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae struct device *subdrv_dev) 550519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{ 560519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae return 0; 570519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae} 580519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 590519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline void drm_iommu_detach_device(struct drm_device *drm_dev, 600519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae struct device *subdrv_dev) 610519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{ 620519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae} 630519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 640519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline bool is_drm_iommu_supported(struct drm_device *drm_dev) 650519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{ 660519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae return false; 670519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae} 680519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae 690519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#endif 700519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#endif 71