Skip to content

Commit

Permalink
iommu/shmobile: Add iommu driver for Renesas IPMMU modules
Browse files Browse the repository at this point in the history
This is the Renesas IPMMU driver and IOMMU API implementation.

The IPMMU module supports the MMU function and the PMB function.  The
MMU function provides address translation by pagetable compatible with
ARMv6.  The PMB function provides address translation including
tile-linear translation.  This patch implements the MMU function.

The iommu driver does not register a platform driver directly because:
- the register space of the MMU function and the PMB function
  have a common register (used for settings flush), so they should ideally
  have a way to appropriately share this register.
- the MMU function uses the IOMMU API while the PMB function does not.
- the two functions may be used independently.

Signed-off-by: Hideki EIRAKU <hdk@igel.co.jp>
Signed-off-by: Joerg Roedel <joro@8bytes.org>
  • Loading branch information
Hideki EIRAKU authored and Joerg Roedel committed Feb 6, 2013
1 parent 88b62b9 commit c2c460f
Show file tree
Hide file tree
Showing 6 changed files with 659 additions and 0 deletions.
74 changes: 74 additions & 0 deletions drivers/iommu/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -187,4 +187,78 @@ config EXYNOS_IOMMU_DEBUG

Say N unless you need kernel log message for IOMMU debugging

config SHMOBILE_IPMMU
bool

config SHMOBILE_IPMMU_TLB
bool

config SHMOBILE_IOMMU
bool "IOMMU for Renesas IPMMU/IPMMUI"
default n
depends on (ARM && ARCH_SHMOBILE)
select IOMMU_API
select ARM_DMA_USE_IOMMU
select SHMOBILE_IPMMU
select SHMOBILE_IPMMU_TLB
help
Support for Renesas IPMMU/IPMMUI. This option enables
remapping of DMA memory accesses from all of the IP blocks
on the ICB.

Warning: Drivers (including userspace drivers of UIO
devices) of the IP blocks on the ICB *must* use addresses
allocated from the IPMMU (iova) for DMA with this option
enabled.

If unsure, say N.

choice
prompt "IPMMU/IPMMUI address space size"
default SHMOBILE_IOMMU_ADDRSIZE_2048MB
depends on SHMOBILE_IOMMU
help
This option sets IPMMU/IPMMUI address space size by
adjusting the 1st level page table size. The page table size
is calculated as follows:

page table size = number of page table entries * 4 bytes
number of page table entries = address space size / 1 MiB

For example, when the address space size is 2048 MiB, the
1st level page table size is 8192 bytes.

config SHMOBILE_IOMMU_ADDRSIZE_2048MB
bool "2 GiB"

config SHMOBILE_IOMMU_ADDRSIZE_1024MB
bool "1 GiB"

config SHMOBILE_IOMMU_ADDRSIZE_512MB
bool "512 MiB"

config SHMOBILE_IOMMU_ADDRSIZE_256MB
bool "256 MiB"

config SHMOBILE_IOMMU_ADDRSIZE_128MB
bool "128 MiB"

config SHMOBILE_IOMMU_ADDRSIZE_64MB
bool "64 MiB"

config SHMOBILE_IOMMU_ADDRSIZE_32MB
bool "32 MiB"

endchoice

config SHMOBILE_IOMMU_L1SIZE
int
default 8192 if SHMOBILE_IOMMU_ADDRSIZE_2048MB
default 4096 if SHMOBILE_IOMMU_ADDRSIZE_1024MB
default 2048 if SHMOBILE_IOMMU_ADDRSIZE_512MB
default 1024 if SHMOBILE_IOMMU_ADDRSIZE_256MB
default 512 if SHMOBILE_IOMMU_ADDRSIZE_128MB
default 256 if SHMOBILE_IOMMU_ADDRSIZE_64MB
default 128 if SHMOBILE_IOMMU_ADDRSIZE_32MB

endif # IOMMU_SUPPORT
2 changes: 2 additions & 0 deletions drivers/iommu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ obj-$(CONFIG_OMAP_IOMMU_DEBUG) += omap-iommu-debug.o
obj-$(CONFIG_TEGRA_IOMMU_GART) += tegra-gart.o
obj-$(CONFIG_TEGRA_IOMMU_SMMU) += tegra-smmu.o
obj-$(CONFIG_EXYNOS_IOMMU) += exynos-iommu.o
obj-$(CONFIG_SHMOBILE_IOMMU) += shmobile-iommu.o
obj-$(CONFIG_SHMOBILE_IPMMU) += shmobile-ipmmu.o
Loading

0 comments on commit c2c460f

Please sign in to comment.