Skip to content

Commit

Permalink
sparc32: srmmu_probe now knows about leon too
Browse files Browse the repository at this point in the history
Signed-off-by: Sam Ravnborg <[email protected]>
Cc: Daniel Hellstrom <[email protected]>
Cc: Konrad Eisele <[email protected]>
  • Loading branch information
sravnborg authored and davem330 committed May 28, 2012
1 parent b0acd24 commit 805918f
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 23 deletions.
2 changes: 1 addition & 1 deletion arch/sparc/include/asm/leon.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ static inline int sparc_leon3_cpuid(void)
#ifndef __ASSEMBLY__
struct vm_area_struct;

extern unsigned long srmmu_swprobe(unsigned long vaddr, unsigned long *paddr);
extern unsigned long leon_swprobe(unsigned long vaddr, unsigned long *paddr);
extern void leon_flush_icache_all(void);
extern void leon_flush_dcache_all(void);
extern void leon_flush_cache_all(void);
Expand Down
17 changes: 0 additions & 17 deletions arch/sparc/include/asm/pgtsrmmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,23 +166,6 @@ static inline void srmmu_flush_whole_tlb(void)

}

/* These flush types are not available on all chips... */
#ifndef CONFIG_SPARC_LEON
static inline unsigned long srmmu_hwprobe(unsigned long vaddr)
{
unsigned long retval;

vaddr &= PAGE_MASK;
__asm__ __volatile__("lda [%1] %2, %0\n\t" :
"=r" (retval) :
"r" (vaddr | 0x400), "i" (ASI_M_FLUSH_PROBE));

return retval;
}
#else
#define srmmu_hwprobe(addr) srmmu_swprobe(addr, 0)
#endif

static inline int
srmmu_get_pte (unsigned long addr)
{
Expand Down
2 changes: 1 addition & 1 deletion arch/sparc/mm/leon_mm.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static inline unsigned long leon_get_ctable_ptr(void)
}


unsigned long srmmu_swprobe(unsigned long vaddr, unsigned long *paddr)
unsigned long leon_swprobe(unsigned long vaddr, unsigned long *paddr)
{

unsigned int ctxtbl;
Expand Down
25 changes: 21 additions & 4 deletions arch/sparc/mm/srmmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -646,6 +646,23 @@ static void __init srmmu_allocate_ptable_skeleton(unsigned long start,
}
}

/* These flush types are not available on all chips... */
static inline unsigned long srmmu_probe(unsigned long vaddr)
{
unsigned long retval;

if (sparc_cpu_model != sparc_leon) {

vaddr &= PAGE_MASK;
__asm__ __volatile__("lda [%1] %2, %0\n\t" :
"=r" (retval) :
"r" (vaddr | 0x400), "i" (ASI_M_FLUSH_PROBE));
} else {
retval = leon_swprobe(vaddr, 0);
}
return retval;
}

/*
* This is much cleaner than poking around physical address space
* looking at the prom's page table directly which is what most
Expand All @@ -665,7 +682,7 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
break; /* probably wrap around */
if(start == 0xfef00000)
start = KADB_DEBUGGER_BEGVM;
if(!(prompte = srmmu_hwprobe(start))) {
if(!(prompte = srmmu_probe(start))) {
start += PAGE_SIZE;
continue;
}
Expand All @@ -674,12 +691,12 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
what = 0;

if(!(start & ~(SRMMU_REAL_PMD_MASK))) {
if(srmmu_hwprobe((start-PAGE_SIZE) + SRMMU_REAL_PMD_SIZE) == prompte)
if(srmmu_probe((start-PAGE_SIZE) + SRMMU_REAL_PMD_SIZE) == prompte)
what = 1;
}

if(!(start & ~(SRMMU_PGDIR_MASK))) {
if(srmmu_hwprobe((start-PAGE_SIZE) + SRMMU_PGDIR_SIZE) ==
if(srmmu_probe((start-PAGE_SIZE) + SRMMU_PGDIR_SIZE) ==
prompte)
what = 2;
}
Expand Down Expand Up @@ -1156,7 +1173,7 @@ static void turbosparc_flush_page_to_ram(unsigned long page)
#ifdef TURBOSPARC_WRITEBACK
volatile unsigned long clear;

if (srmmu_hwprobe(page))
if (srmmu_probe(page))
turbosparc_flush_page_cache(page);
clear = srmmu_get_fstatus();
#endif
Expand Down

0 comments on commit 805918f

Please sign in to comment.