diff options
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/mm/pmb.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index 9a516b89839a..9429355c18ca 100644 --- a/arch/sh/mm/pmb.c +++ b/arch/sh/mm/pmb.c | |||
@@ -68,6 +68,8 @@ static DEFINE_RWLOCK(pmb_rwlock); | |||
68 | static struct pmb_entry pmb_entry_list[NR_PMB_ENTRIES]; | 68 | static struct pmb_entry pmb_entry_list[NR_PMB_ENTRIES]; |
69 | static DECLARE_BITMAP(pmb_map, NR_PMB_ENTRIES); | 69 | static DECLARE_BITMAP(pmb_map, NR_PMB_ENTRIES); |
70 | 70 | ||
71 | static unsigned int pmb_iomapping_enabled; | ||
72 | |||
71 | static __always_inline unsigned long mk_pmb_entry(unsigned int entry) | 73 | static __always_inline unsigned long mk_pmb_entry(unsigned int entry) |
72 | { | 74 | { |
73 | return (entry & PMB_E_MASK) << PMB_E_SHIFT; | 75 | return (entry & PMB_E_MASK) << PMB_E_SHIFT; |
@@ -284,6 +286,9 @@ void __iomem *pmb_remap_caller(phys_addr_t phys, unsigned long size, | |||
284 | unsigned long aligned; | 286 | unsigned long aligned; |
285 | struct vm_struct *area; | 287 | struct vm_struct *area; |
286 | 288 | ||
289 | if (!pmb_iomapping_enabled) | ||
290 | return NULL; | ||
291 | |||
287 | /* | 292 | /* |
288 | * Small mappings need to go through the TLB. | 293 | * Small mappings need to go through the TLB. |
289 | */ | 294 | */ |
@@ -684,6 +689,18 @@ static void __init pmb_resize(void) | |||
684 | } | 689 | } |
685 | #endif | 690 | #endif |
686 | 691 | ||
692 | static int __init early_pmb(char *p) | ||
693 | { | ||
694 | if (!p) | ||
695 | return 0; | ||
696 | |||
697 | if (strstr(p, "iomap")) | ||
698 | pmb_iomapping_enabled = 1; | ||
699 | |||
700 | return 0; | ||
701 | } | ||
702 | early_param("pmb", early_pmb); | ||
703 | |||
687 | void __init pmb_init(void) | 704 | void __init pmb_init(void) |
688 | { | 705 | { |
689 | /* Synchronize software state */ | 706 | /* Synchronize software state */ |