Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 81027
b: refs/heads/master
c: 584f8b7
h: refs/heads/master
i:
  81025: 4c56c2a
  81023: 8ca99a4
v: v3
  • Loading branch information
Michael Neuling authored and Paul Mackerras committed Dec 11, 2007
1 parent a9063ec commit 3edfc57
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 44ef339073f67d4abcc62ae52a5fbc069d7a4d29
refs/heads/master: 584f8b71a2e8abdaeb4b6f4fddaf542b61392453
15 changes: 15 additions & 0 deletions trunk/arch/powerpc/kernel/prom.c
Original file line number Diff line number Diff line change
Expand Up @@ -583,6 +583,20 @@ static void __init check_cpu_pa_features(unsigned long node)
ibm_pa_features, ARRAY_SIZE(ibm_pa_features));
}

#ifdef CONFIG_PPC64
static void __init check_cpu_slb_size(unsigned long node)
{
u32 *slb_size_ptr;

slb_size_ptr = of_get_flat_dt_prop(node, "ibm,slb-size", NULL);
if (slb_size_ptr != NULL) {
mmu_slb_size = *slb_size_ptr;
}
}
#else
#define check_cpu_slb_size(node) do { } while(0)
#endif

static struct feature_property {
const char *name;
u32 min_value;
Expand Down Expand Up @@ -713,6 +727,7 @@ static int __init early_init_dt_scan_cpus(unsigned long node,

check_cpu_feature_properties(node);
check_cpu_pa_features(node);
check_cpu_slb_size(node);

#ifdef CONFIG_PPC_PSERIES
if (nthreads > 1)
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/powerpc/mm/hash_utils_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ int mmu_vmalloc_psize = MMU_PAGE_4K;
int mmu_io_psize = MMU_PAGE_4K;
int mmu_kernel_ssize = MMU_SEGSIZE_256M;
int mmu_highuser_ssize = MMU_SEGSIZE_256M;
u16 mmu_slb_size = 64;
#ifdef CONFIG_HUGETLB_PAGE
int mmu_huge_psize = MMU_PAGE_16M;
unsigned int HPAGE_SHIFT;
Expand Down
3 changes: 3 additions & 0 deletions trunk/arch/powerpc/mm/slb.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ void slb_initialize(void)
static int slb_encoding_inited;
extern unsigned int *slb_miss_kernel_load_linear;
extern unsigned int *slb_miss_kernel_load_io;
extern unsigned int *slb_compare_rr_to_size;

/* Prepare our SLB miss handler based on our page size */
linear_llp = mmu_psize_defs[mmu_linear_psize].sllp;
Expand All @@ -269,6 +270,8 @@ void slb_initialize(void)
SLB_VSID_KERNEL | linear_llp);
patch_slb_encoding(slb_miss_kernel_load_io,
SLB_VSID_KERNEL | io_llp);
patch_slb_encoding(slb_compare_rr_to_size,
mmu_slb_size);

DBG("SLB: linear LLP = %04x\n", linear_llp);
DBG("SLB: io LLP = %04x\n", io_llp);
Expand Down
5 changes: 3 additions & 2 deletions trunk/arch/powerpc/mm/slb_low.S
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,9 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)

7: ld r10,PACASTABRR(r13)
addi r10,r10,1
/* use a cpu feature mask if we ever change our slb size */
cmpldi r10,SLB_NUM_ENTRIES
/* This gets soft patched on boot. */
_GLOBAL(slb_compare_rr_to_size)
cmpldi r10,0

blt+ 4f
li r10,SLB_NUM_BOLTED
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/powerpc/platforms/pasemi/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <asm/mpic.h>
#include <asm/smp.h>
#include <asm/time.h>
#include <asm/mmu.h>

#include <pcmcia/ss.h>
#include <pcmcia/cistpl.h>
Expand Down Expand Up @@ -302,7 +303,7 @@ static int pas_machine_check_handler(struct pt_regs *regs)
int i;

printk(KERN_ERR "slb contents:\n");
for (i = 0; i < SLB_NUM_ENTRIES; i++) {
for (i = 0; i < mmu_slb_size; i++) {
asm volatile("slbmfee %0,%1" : "=r" (e) : "r" (i));
asm volatile("slbmfev %0,%1" : "=r" (v) : "r" (i));
printk(KERN_ERR "%02d %016lx %016lx\n", i, e, v);
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/powerpc/xmon/xmon.c
Original file line number Diff line number Diff line change
Expand Up @@ -2543,7 +2543,7 @@ static void dump_slb(void)

printf("SLB contents of cpu %x\n", smp_processor_id());

for (i = 0; i < SLB_NUM_ENTRIES; i++) {
for (i = 0; i < mmu_slb_size; i++) {
asm volatile("slbmfee %0,%1" : "=r" (tmp) : "r" (i));
printf("%02d %016lx ", i, tmp);

Expand Down
1 change: 1 addition & 0 deletions trunk/include/asm-powerpc/mmu-hash64.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ extern int mmu_vmalloc_psize;
extern int mmu_io_psize;
extern int mmu_kernel_ssize;
extern int mmu_highuser_ssize;
extern u16 mmu_slb_size;

/*
* If the processor supports 64k normal pages but not 64k cache
Expand Down
6 changes: 0 additions & 6 deletions trunk/include/asm-powerpc/reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -691,12 +691,6 @@
#define PV_BE 0x0070
#define PV_PA6T 0x0090

/*
* Number of entries in the SLB. If this ever changes we should handle
* it with a use a cpu feature fixup.
*/
#define SLB_NUM_ENTRIES 64

/* Macros for setting and retrieving special purpose registers */
#ifndef __ASSEMBLY__
#define mfmsr() ({unsigned long rval; \
Expand Down

0 comments on commit 3edfc57

Please sign in to comment.