[PATCH 0/7] [RFC] drm/exynos: Add IOMMU support to DRM

Subash Patel subash.ramaswamy at linaro.org
Thu Jul 12 23:57:36 PDT 2012


On 07/13/2012 12:09 PM, Inki Dae wrote:
>
>> -----Original Message-----
>> From: Prathyush K [mailto:prathyush.k at samsung.com]
>> Sent: Wednesday, July 11, 2012 6:40 PM
>> To: dri-devel at lists.freedesktop.org
>> Cc: prathyush at chromium.org; m.szyprowski at samsung.com;
> inki.dae at samsung.com;
>> subash.ramaswamy at linaro.org
>> Subject: [PATCH 0/7] [RFC] drm/exynos: Add IOMMU support to DRM
>>
>> The dma-mapping framework needs a IOMMU mapping to be created for the
>> device which allocates/maps/frees the non-contig buffer. In the DRM
>> framework, a gem buffer is created by the DRM virtual device and not
>> directly by any of the physical devices (FIMD, HDMI etc). Each gem object
>> can be set as a framebuffer to one or many of the drm devices. So a gem
>> object cannot be allocated for any one device. All the DRM devices should
>> be able to access this buffer.
>>
> It's good to use unified iommu table so I agree to your opinion but we don't
> decide whether we use dma mapping api or not. now dma mapping api has one
> issue.
> in case of using iommu with dma mapping api, we couldn't use physically
> contiguous memory region with iommu. for this, there is a case that we
> should use physically contiguous memory region with iommu. it is because we
> sometime may use mfc(hw video codec) with secure zone such as ARM TrustZone.
> Then, it needs physically contiguous memory region.
>
> Thanks,
> Inki Dae
I agree. In the mainline code, as of now only the arm_dma_ops has the 
support allocating
from the CMA. But in the function arm_iommu_alloc_attrs(), there is no 
way to know if the
device had declared a contiguous memory range. The reason, we don't 
store that cookie
into the device during the dma_declare_contiguous(). So is it advisable 
to store such information
like mapping(in the iommu operations) in the device.archdata?

Regards,
Subash
>
>> The proposed method is to create a common IOMMU mapping during drm init.
>> This
>> mapping is then attached to all of the drm devices including the drm
>> device.
>> [PATCH 1/7] drm/exynos: create common IOMMU mapping for DRM
>>
>> During the probe of drm fimd, the driver retrieves a 'sysmmu' field
>> in the device node for fimd. If such a field exists, the driver retrieves
>> the
>> platform device of the sysmmu device. This sysmmu is set as the sysmmu
>> for fimd. The common mapping created is then attached to fimd.
>> This needs to be done for all the other devices (hdmi, vidi etc).
>> [PATCH 2/7] ARM: EXYNOS5: add sysmmu field to fimd device node
>> [PATCH 3/7] drm/exynos: add IOMMU support to drm fimd
>>
>> During DRM's probe which happens last, the common mapping is set to its
>> archdata
>> and iommu ops are set as its dma ops. This requires a modification in the
>> dma-mapping framework so that the iommu ops can be visible to all drivers.
>> [PATCH 4/7] ARM: dma-mapping: rename and export iommu_ops
>> [PATCH 5/7] drm/exynos: attach drm device with common drm mapping
>>
>> Currently allocation and free use the iommu framework by calling
>> dma_alloc_writecombine and dma_free_writecombine respectively.
>> For mapping the buffers to user space, the mmap functions assume that
>> the buffer is contiguous. This is modified by calling
>> dma_mmap_writecombine.
>> [PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function
>> [PATCH 7/7] Add IOMMU support for mapping gem object
>>
>> The device tree based patches are based on Leela's patch which was posted
>> last week for adding DT support to DRM FIMD. The patch to add sysmmu
>> field is for reference only and will be posted to the device tree
>> mailing list. Same with the rename and export iommu_ops patch.
>>
>> These patches are tested on Exynos5250 SMDK board and tested with modetest
>> from libdrm tests.
>>
>> Prathyush K (7):
>>    drm/exynos: create common IOMMU mapping for DRM
>>    ARM: EXYNOS5: add sysmmu field to fimd device node
>>    drm/exynos: add IOMMU support to drm fimd
>>    ARM: dma-mapping: rename and export iommu_ops
>>    drm/exynos: attach drm device with common drm mapping
>>    drm/exynos: Add exynos drm specific fb_mmap function
>>    drm/exynos: Add IOMMU support for mapping gem object
>>
>>   arch/arm/boot/dts/exynos5250.dtsi         |    1 +
>>   arch/arm/include/asm/dma-mapping.h        |    1 +
>>   arch/arm/mm/dma-mapping.c                 |    5 ++-
>>   drivers/gpu/drm/exynos/exynos_drm_core.c  |    3 ++
>>   drivers/gpu/drm/exynos/exynos_drm_drv.c   |   30 ++++++++++++++++
>>   drivers/gpu/drm/exynos/exynos_drm_drv.h   |   10 +++++
>>   drivers/gpu/drm/exynos/exynos_drm_fbdev.c |   16 ++++++++
>>   drivers/gpu/drm/exynos/exynos_drm_fimd.c  |   54
>> ++++++++++++++++++++++++++++-
>>   drivers/gpu/drm/exynos/exynos_drm_gem.c   |   35 ++++++++----------
>>   9 files changed, 133 insertions(+), 22 deletions(-)



More information about the dri-devel mailing list