-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This patch adds support System MMU which supports address transition from virtual address to physical address. Basically, each hardware block is connected System MMU block can use directly vitrual address when it accesses physical memory not using physical address. Signed-off-by: Donguk Ryu <du.ryu@samsung.com> Signed-off-by: Sangbeom Kim <sbkim73@samsung.com> [kgene.kim@samsung.com: removed useless codes] Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
- Loading branch information
Donguk Ryu
authored and
Kukjin Kim
committed
Jan 13, 2011
1 parent
2cf0c58
commit b55f685
Showing
8 changed files
with
548 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
/* linux/arch/arm/mach-s5pv310/include/mach/regs-sysmmu.h | ||
* | ||
* Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
* http://www.samsung.com | ||
* | ||
* S5PV310 - System MMU register | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifndef __ASM_ARCH_REGS_SYSMMU_H | ||
#define __ASM_ARCH_REGS_SYSMMU_H __FILE__ | ||
|
||
#define S5P_MMU_CTRL 0x000 | ||
#define S5P_MMU_CFG 0x004 | ||
#define S5P_MMU_STATUS 0x008 | ||
#define S5P_MMU_FLUSH 0x00C | ||
#define S5P_PT_BASE_ADDR 0x014 | ||
#define S5P_INT_STATUS 0x018 | ||
#define S5P_PAGE_FAULT_ADDR 0x024 | ||
|
||
#endif /* __ASM_ARCH_REGS_SYSMMU_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
/* linux/arch/arm/mach-s5pv310/include/mach/sysmmu.h | ||
* | ||
* Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
* http://www.samsung.com/ | ||
* | ||
* Samsung sysmmu driver for S5PV310 | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifndef __ASM_ARM_ARCH_SYSMMU_H | ||
#define __ASM_ARM_ARCH_SYSMMU_H __FILE__ | ||
|
||
enum s5pv310_sysmmu_ips { | ||
SYSMMU_MDMA, | ||
SYSMMU_SSS, | ||
SYSMMU_FIMC0, | ||
SYSMMU_FIMC1, | ||
SYSMMU_FIMC2, | ||
SYSMMU_FIMC3, | ||
SYSMMU_JPEG, | ||
SYSMMU_FIMD0, | ||
SYSMMU_FIMD1, | ||
SYSMMU_PCIe, | ||
SYSMMU_G2D, | ||
SYSMMU_ROTATOR, | ||
SYSMMU_MDMA2, | ||
SYSMMU_TV, | ||
SYSMMU_MFC_L, | ||
SYSMMU_MFC_R, | ||
}; | ||
|
||
static char *sysmmu_ips_name[S5P_SYSMMU_TOTAL_IPNUM] = { | ||
"SYSMMU_MDMA" , | ||
"SYSMMU_SSS" , | ||
"SYSMMU_FIMC0" , | ||
"SYSMMU_FIMC1" , | ||
"SYSMMU_FIMC2" , | ||
"SYSMMU_FIMC3" , | ||
"SYSMMU_JPEG" , | ||
"SYSMMU_FIMD0" , | ||
"SYSMMU_FIMD1" , | ||
"SYSMMU_PCIe" , | ||
"SYSMMU_G2D" , | ||
"SYSMMU_ROTATOR", | ||
"SYSMMU_MDMA2" , | ||
"SYSMMU_TV" , | ||
"SYSMMU_MFC_L" , | ||
"SYSMMU_MFC_R" , | ||
}; | ||
|
||
typedef enum s5pv310_sysmmu_ips sysmmu_ips; | ||
|
||
struct sysmmu_tt_info { | ||
unsigned long *pgd; | ||
unsigned long pgd_paddr; | ||
unsigned long *pte; | ||
}; | ||
|
||
struct sysmmu_controller { | ||
const char *name; | ||
|
||
/* channels registers */ | ||
void __iomem *regs; | ||
|
||
/* channel irq */ | ||
unsigned int irq; | ||
|
||
sysmmu_ips ips; | ||
|
||
/* Translation Table Info. */ | ||
struct sysmmu_tt_info *tt_info; | ||
|
||
struct resource *mem; | ||
struct device *dev; | ||
|
||
/* SysMMU controller enable - true : enable */ | ||
bool enable; | ||
}; | ||
|
||
/** | ||
* s5p_sysmmu_enable() - enable system mmu of ip | ||
* @ips: The ip connected system mmu. | ||
* | ||
* This function enable system mmu to transfer address | ||
* from virtual address to physical address | ||
*/ | ||
int s5p_sysmmu_enable(sysmmu_ips ips); | ||
|
||
/** | ||
* s5p_sysmmu_disable() - disable sysmmu mmu of ip | ||
* @ips: The ip connected system mmu. | ||
* | ||
* This function disable system mmu to transfer address | ||
* from virtual address to physical address | ||
*/ | ||
int s5p_sysmmu_disable(sysmmu_ips ips); | ||
|
||
/** | ||
* s5p_sysmmu_set_tablebase_pgd() - set page table base address to refer page table | ||
* @ips: The ip connected system mmu. | ||
* @pgd: The page table base address. | ||
* | ||
* This function set page table base address | ||
* When system mmu transfer address from virtaul address to physical address, | ||
* system mmu refer address information from page table | ||
*/ | ||
int s5p_sysmmu_set_tablebase_pgd(sysmmu_ips ips, unsigned long pgd); | ||
|
||
/** | ||
* s5p_sysmmu_tlb_invalidate() - flush all TLB entry in system mmu | ||
* @ips: The ip connected system mmu. | ||
* | ||
* This function flush all TLB entry in system mmu | ||
*/ | ||
int s5p_sysmmu_tlb_invalidate(sysmmu_ips ips); | ||
#endif /* __ASM_ARM_ARCH_SYSMMU_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* linux/arch/arm/plat-s5p/include/plat/sysmmu.h | ||
* | ||
* Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
* http://www.samsung.com/ | ||
* | ||
* Samsung sysmmu driver | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifndef __ASM_PLAT_S5P_SYSMMU_H | ||
#define __ASM_PLAT_S5P_SYSMMU_H __FILE__ | ||
|
||
/* debug macro */ | ||
#ifdef CONFIG_S5P_SYSMMU_DEBUG | ||
#define sysmmu_debug(fmt, arg...) printk(KERN_INFO "[%s] " fmt, __func__, ## arg) | ||
#else | ||
#define sysmmu_debug(fmt, arg...) do { } while (0) | ||
#endif | ||
|
||
#endif /* __ASM_PLAT_S5P_SYSMMU_H */ |
Oops, something went wrong.