diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2003-02-20 22:07:22 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2003-02-20 22:07:22 +0000 |
commit | d49389adb995168842d8f5b967945f6bbb281244 (patch) | |
tree | 7035607055dbc6c107416c594e7baefb89e69332 /c/src/lib/libcpu/powerpc/mpc6xx/mmu/bat.c | |
parent | 2003-02-20 Till Straumann <strauman@slac.stanford.edu> (diff) | |
download | rtems-d49389adb995168842d8f5b967945f6bbb281244.tar.bz2 |
2003-02-20 Till Straumann <strauman@slac.stanford.edu>
PR 349/bsps
* mpc6xx/exceptions/raw_exception.c, mpc6xx/mmu/bat.c,
mpc6xx/mmu/pte121.c, shared/include/cpuIdent.c,
shared/include/cpuIdent.h, shared/src/Makefile.am, shared/src/stack.c,
shared/src/stackTrace.h, powerpc/registers.h:
- undo improper 'fix' who broke mpc604r identification
- fix: 7400 identification PVR value was wrong
- enhance 'setdbat()' to switch OFF a given BAT if called with 0 size
- fix: page table support bugfix
- enhancement: provide routines to take and print stack trace
snapshots
- add definitions for HID1 and DABR SPRs
Diffstat (limited to 'c/src/lib/libcpu/powerpc/mpc6xx/mmu/bat.c')
-rw-r--r-- | c/src/lib/libcpu/powerpc/mpc6xx/mmu/bat.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/c/src/lib/libcpu/powerpc/mpc6xx/mmu/bat.c b/c/src/lib/libcpu/powerpc/mpc6xx/mmu/bat.c index 4e49bcc07e..9c2df3f03f 100644 --- a/c/src/lib/libcpu/powerpc/mpc6xx/mmu/bat.c +++ b/c/src/lib/libcpu/powerpc/mpc6xx/mmu/bat.c @@ -43,7 +43,7 @@ void setdbat(int bat_index, unsigned long virt, unsigned long phys, int wimgxpp; ubat bat; - bl = (size >> 17) - 1; + bl = (size >= (1<<17)) ? (size >> 17) - 1 : 0; /* 603, 604, etc. */ wimgxpp = flags & (_PAGE_WRITETHRU | _PAGE_NO_CACHE | _PAGE_COHERENT | _PAGE_GUARDED); @@ -53,8 +53,13 @@ void setdbat(int bat_index, unsigned long virt, unsigned long phys, if (flags & _PAGE_USER) bat.bat.batu.vp = 1; bat_addrs[bat_index].start = virt; - bat_addrs[bat_index].limit = virt + ((bl + 1) << 17) - 1; + bat_addrs[bat_index].limit = virt + (bl ? ((bl + 1) << 17) - 1 : 0); bat_addrs[bat_index].phys = phys; + if ( 0 == bl ) { + /* size of 0 tells us to switch it off */ + bat.bat.batu.vp = 0; + bat.bat.batu.vs = 0; + } switch (bat_index) { case 0 : asm_setdbat0(bat.word[0], bat.word[1]); break; case 1 : asm_setdbat1(bat.word[0], bat.word[1]); break; |