2009-10-16 Jennifer Averett <jennifer.averett@OARcorp.com>

* mpc6xx/mmu/bat.c: Resolved bug: It is not an overlap if the batindex
	being set is the batindex of the overlap.
This commit is contained in:
Joel Sherrill
2009-10-16 16:13:30 +00:00
parent fda16849d6
commit db4903f61e
2 changed files with 12 additions and 6 deletions

View File

@@ -1,3 +1,8 @@
2009-10-16 Jennifer Averett <jennifer.averett@OARcorp.com>
* mpc6xx/mmu/bat.c: Resolved bug: It is not an overlap if the batindex
being set is the batindex of the overlap.
2009-09-25 Joel Sherrill <joel.sherrill@oarcorp.com> 2009-09-25 Joel Sherrill <joel.sherrill@oarcorp.com>
* shared/include/io.h, shared/include/mmu.h: Change extern inline to * shared/include/io.h, shared/include/mmu.h: Change extern inline to

View File

@@ -8,7 +8,7 @@
* *
* MPC750 * MPC750
* Risc Microporcessor User's Manual * Risc Microporcessor User's Manual
* Motorola REF : MPC750UM/AD 8/97 * Mtorola REF : MPC750UM/AD 8/97
* *
* Copyright (C) 1999 Eric Valette (valette@crf.canon.fr) * Copyright (C) 1999 Eric Valette (valette@crf.canon.fr)
* Canon Centre Recherche France. * Canon Centre Recherche France.
@@ -160,7 +160,7 @@ bat_addrs_put (ubat * bat, int typ, int idx)
* cache. * cache.
*/ */
static void static void
bat_addrs_init (void) bat_addrs_init ()
{ {
ubat bat; ubat bat;
@@ -204,7 +204,7 @@ bat_addrs_init (void)
} }
static void static void
do_dssall (void) do_dssall ()
{ {
/* Before changing BATs, 'dssall' must be issued. /* Before changing BATs, 'dssall' must be issued.
* We check MSR for MSR_VE and issue a 'dssall' if * We check MSR for MSR_VE and issue a 'dssall' if
@@ -227,7 +227,7 @@ do_dssall (void)
/* Clear I/D bats 4..7 ONLY ON 7455 etc. */ /* Clear I/D bats 4..7 ONLY ON 7455 etc. */
static void static void
clear_hi_bats (void) clear_hi_bats ()
{ {
do_dssall (); do_dssall ();
CLRBAT (DBAT4); CLRBAT (DBAT4);
@@ -380,8 +380,9 @@ setbat (int typ, int bat_index, unsigned long virt, unsigned long phys,
init_done = 1; init_done = 1;
} }
} }
if (size >= (1 << 17) && (err = check_overlap (typ, virt, size)) >= 0) { err = check_overlap (typ, virt, size);
if ((size >= (1 << 17)) && (err >= 0) && (err != bat_index)) {
rtems_interrupt_enable (level); rtems_interrupt_enable (level);
printk ("BATs must not overlap; area 0x%08x..0x%08x hits %cBAT %i\n", printk ("BATs must not overlap; area 0x%08x..0x%08x hits %cBAT %i\n",
virt, virt + size, (TYP_I == typ ? 'I' : 'D'), err); virt, virt + size, (TYP_I == typ ? 'I' : 'D'), err);