c2c460f7c1
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>
34 lines
877 B
C
34 lines
877 B
C
/* shmobile-ipmmu.h
|
|
*
|
|
* Copyright (C) 2012 Hideki EIRAKU
|
|
*
|
|
* 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; version 2 of the License.
|
|
*/
|
|
|
|
#ifndef __SHMOBILE_IPMMU_H__
|
|
#define __SHMOBILE_IPMMU_H__
|
|
|
|
struct shmobile_ipmmu {
|
|
struct device *dev;
|
|
void __iomem *ipmmu_base;
|
|
int tlb_enabled;
|
|
struct mutex flush_lock;
|
|
const char * const *dev_names;
|
|
unsigned int num_dev_names;
|
|
};
|
|
|
|
#ifdef CONFIG_SHMOBILE_IPMMU_TLB
|
|
void ipmmu_tlb_flush(struct shmobile_ipmmu *ipmmu);
|
|
void ipmmu_tlb_set(struct shmobile_ipmmu *ipmmu, unsigned long phys, int size,
|
|
int asid);
|
|
int ipmmu_iommu_init(struct shmobile_ipmmu *ipmmu);
|
|
#else
|
|
static inline int ipmmu_iommu_init(struct shmobile_ipmmu *ipmmu)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
#endif
|
|
|
|
#endif /* __SHMOBILE_IPMMU_H__ */
|