提交 3084cdb7 编写于 作者: C Christophe Leroy 提交者: Scott Wood

powerpc32: refactor x_mapped_by_bats() and x_mapped_by_tlbcam() together

x_mapped_by_bats() and x_mapped_by_tlbcam() serve the same kind of
purpose, and are never defined at the same time.
So rename them x_block_mapped() and define them in the relevant
places
Signed-off-by: NChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: NScott Wood <oss@buserror.net>
上级 be00ed72
...@@ -72,10 +72,11 @@ unsigned long tlbcam_sz(int idx) ...@@ -72,10 +72,11 @@ unsigned long tlbcam_sz(int idx)
return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1; return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1;
} }
#ifdef CONFIG_FSL_BOOKE
/* /*
* Return PA for this VA if it is mapped by a CAM, or 0 * Return PA for this VA if it is mapped by a CAM, or 0
*/ */
phys_addr_t v_mapped_by_tlbcam(unsigned long va) phys_addr_t v_block_mapped(unsigned long va)
{ {
int b; int b;
for (b = 0; b < tlbcam_index; ++b) for (b = 0; b < tlbcam_index; ++b)
...@@ -87,7 +88,7 @@ phys_addr_t v_mapped_by_tlbcam(unsigned long va) ...@@ -87,7 +88,7 @@ phys_addr_t v_mapped_by_tlbcam(unsigned long va)
/* /*
* Return VA for a given PA or 0 if not mapped * Return VA for a given PA or 0 if not mapped
*/ */
unsigned long p_mapped_by_tlbcam(phys_addr_t pa) unsigned long p_block_mapped(phys_addr_t pa)
{ {
int b; int b;
for (b = 0; b < tlbcam_index; ++b) for (b = 0; b < tlbcam_index; ++b)
...@@ -97,6 +98,7 @@ unsigned long p_mapped_by_tlbcam(phys_addr_t pa) ...@@ -97,6 +98,7 @@ unsigned long p_mapped_by_tlbcam(phys_addr_t pa)
return tlbcam_addrs[b].start+(pa-tlbcam_addrs[b].phys); return tlbcam_addrs[b].start+(pa-tlbcam_addrs[b].phys);
return 0; return 0;
} }
#endif
/* /*
* Set up a variable-size TLB entry (tlbcam). The parameters are not checked; * Set up a variable-size TLB entry (tlbcam). The parameters are not checked;
......
...@@ -159,3 +159,13 @@ struct tlbcam { ...@@ -159,3 +159,13 @@ struct tlbcam {
u32 MAS7; u32 MAS7;
}; };
#endif #endif
#if defined(CONFIG_6xx) || defined(CONFIG_FSL_BOOKE)
/* 6xx have BATS */
/* FSL_BOOKE have TLBCAM */
phys_addr_t v_block_mapped(unsigned long va);
unsigned long p_block_mapped(phys_addr_t pa);
#else
static inline phys_addr_t v_block_mapped(unsigned long va) { return 0; }
static inline unsigned long p_block_mapped(phys_addr_t pa) { return 0; }
#endif
...@@ -41,32 +41,8 @@ unsigned long ioremap_base; ...@@ -41,32 +41,8 @@ unsigned long ioremap_base;
unsigned long ioremap_bot; unsigned long ioremap_bot;
EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */ EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */
#ifdef CONFIG_6xx
#define HAVE_BATS 1
#endif
#if defined(CONFIG_FSL_BOOKE)
#define HAVE_TLBCAM 1
#endif
extern char etext[], _stext[]; extern char etext[], _stext[];
#ifdef HAVE_BATS
extern phys_addr_t v_mapped_by_bats(unsigned long va);
extern unsigned long p_mapped_by_bats(phys_addr_t pa);
#else /* !HAVE_BATS */
#define v_mapped_by_bats(x) (0UL)
#define p_mapped_by_bats(x) (0UL)
#endif /* HAVE_BATS */
#ifdef HAVE_TLBCAM
extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
#else /* !HAVE_TLBCAM */
#define v_mapped_by_tlbcam(x) (0UL)
#define p_mapped_by_tlbcam(x) (0UL)
#endif /* HAVE_TLBCAM */
#define PGDIR_ORDER (32 + PGD_T_LOG2 - PGDIR_SHIFT) #define PGDIR_ORDER (32 + PGD_T_LOG2 - PGDIR_SHIFT)
#ifndef CONFIG_PPC_4K_PAGES #ifndef CONFIG_PPC_4K_PAGES
...@@ -228,19 +204,10 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags, ...@@ -228,19 +204,10 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags,
/* /*
* Is it already mapped? Perhaps overlapped by a previous * Is it already mapped? Perhaps overlapped by a previous
* BAT mapping. If the whole area is mapped then we're done, * mapping.
* otherwise remap it since we want to keep the virt addrs for
* each request contiguous.
*
* We make the assumption here that if the bottom and top
* of the range we want are mapped then it's mapped to the
* same virt address (and this is contiguous).
* -- Cort
*/ */
if ((v = p_mapped_by_bats(p)) /*&& p_mapped_by_bats(p+size-1)*/ ) v = p_block_mapped(p);
goto out; if (v)
if ((v = p_mapped_by_tlbcam(p)))
goto out; goto out;
if (slab_is_available()) { if (slab_is_available()) {
...@@ -278,7 +245,8 @@ void iounmap(volatile void __iomem *addr) ...@@ -278,7 +245,8 @@ void iounmap(volatile void __iomem *addr)
* If mapped by BATs then there is nothing to do. * If mapped by BATs then there is nothing to do.
* Calling vfree() generates a benign warning. * Calling vfree() generates a benign warning.
*/ */
if (v_mapped_by_bats((unsigned long)addr)) return; if (v_block_mapped((unsigned long)addr))
return;
if (addr > high_memory && (unsigned long) addr < ioremap_bot) if (addr > high_memory && (unsigned long) addr < ioremap_bot)
vunmap((void *) (PAGE_MASK & (unsigned long)addr)); vunmap((void *) (PAGE_MASK & (unsigned long)addr));
...@@ -403,7 +371,7 @@ static int __change_page_attr(struct page *page, pgprot_t prot) ...@@ -403,7 +371,7 @@ static int __change_page_attr(struct page *page, pgprot_t prot)
BUG_ON(PageHighMem(page)); BUG_ON(PageHighMem(page));
address = (unsigned long)page_address(page); address = (unsigned long)page_address(page);
if (v_mapped_by_bats(address) || v_mapped_by_tlbcam(address)) if (v_block_mapped(address))
return 0; return 0;
if (!get_pteptr(&init_mm, address, &kpte, &kpmd)) if (!get_pteptr(&init_mm, address, &kpte, &kpmd))
return -EINVAL; return -EINVAL;
......
...@@ -49,7 +49,7 @@ struct batrange { /* stores address ranges mapped by BATs */ ...@@ -49,7 +49,7 @@ struct batrange { /* stores address ranges mapped by BATs */
/* /*
* Return PA for this VA if it is mapped by a BAT, or 0 * Return PA for this VA if it is mapped by a BAT, or 0
*/ */
phys_addr_t v_mapped_by_bats(unsigned long va) phys_addr_t v_block_mapped(unsigned long va)
{ {
int b; int b;
for (b = 0; b < 4; ++b) for (b = 0; b < 4; ++b)
...@@ -61,7 +61,7 @@ phys_addr_t v_mapped_by_bats(unsigned long va) ...@@ -61,7 +61,7 @@ phys_addr_t v_mapped_by_bats(unsigned long va)
/* /*
* Return VA for a given PA or 0 if not mapped * Return VA for a given PA or 0 if not mapped
*/ */
unsigned long p_mapped_by_bats(phys_addr_t pa) unsigned long p_block_mapped(phys_addr_t pa)
{ {
int b; int b;
for (b = 0; b < 4; ++b) for (b = 0; b < 4; ++b)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册