patch-2.2.17 linux/arch/ppc/mm/init.c
Next file: linux/arch/ppc/pmac_defconfig
Previous file: linux/arch/ppc/mm/fault.c
Back to the patch index
Back to the overall index
- Lines: 95
- Date:
Mon Sep 4 18:39:16 2000
- Orig file:
v2.2.16/arch/ppc/mm/init.c
- Orig date:
Mon Sep 4 18:37:47 2000
diff -u --recursive --new-file v2.2.16/arch/ppc/mm/init.c linux/arch/ppc/mm/init.c
@@ -416,7 +416,12 @@
void iounmap(void *addr)
{
- /* XXX todo */
+ /* For support of dynamic hot swap on the cPCI bus this routine
+ is now necessary. This has been well tested on a Motorola
+ MPC750 (Mesquite) processor board. Johnnie Peters
+ */
+ if (addr > high_memory && (unsigned long) addr < ioremap_bot)
+ return vfree((void *) (PAGE_MASK & (unsigned long) addr));
}
unsigned long iopa(unsigned long addr)
@@ -928,15 +933,21 @@
/* On the powerpc, no user access
forces R/W kernel access */
f |= _PAGE_USER;
+ map_page(v, p, f);
+ v += PAGE_SIZE;
+ p += PAGE_SIZE;
+ }
+ }
+
#else /* CONFIG_8xx */
- for (i = 0; i < phys_mem.n_regions; ++i) {
- v = (ulong)__va(phys_mem.regions[i].address);
- p = phys_mem.regions[i].address;
- for (s = 0; s < phys_mem.regions[i].size; s += PAGE_SIZE) {
+ for (i = 0; i < phys_mem.n_regions; ++i) {
+ v = (ulong)__va(phys_mem.regions[i].address);
+ p = phys_mem.regions[i].address;
+ for (s = 0; s < phys_mem.regions[i].size; s += PAGE_SIZE) {
/* On the MPC8xx, we want the page shared so we
* don't get ASID compares on kernel space.
*/
- f = _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_SHARED;
+ f = _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_SHARED;
/* I don't really need the rest of this code, but
* I grabbed it because I think the line:
@@ -946,14 +957,14 @@
* the MPC8xx, the PAGE_DIRTY takes care of that
* for us (along with the RW software state).
*/
- if ((char *) v < _stext || (char *) v >= etext)
- f |= _PAGE_RW | _PAGE_DIRTY | _PAGE_HWWRITE;
-#endif /* CONFIG_8xx */
+ if ((char *) v < _stext || (char *) v >= etext)
+ f |= _PAGE_RW | _PAGE_DIRTY | _PAGE_HWWRITE;
map_page(v, p, f);
v += PAGE_SIZE;
p += PAGE_SIZE;
}
- }
+ }
+#endif /* CONFIG_8xx */
}
/* This can get called from ioremap, so don't make it an initfunc, OK? */
@@ -1052,7 +1063,6 @@
#endif /* CONFIG_GEMINI */
else /* prep */
end_of_DRAM = prep_find_end_of_memory();
-*(unsigned long *)(KERNELBASE) = 0xdeadbeef;
hash_init();
_SDR1 = __pa(Hash) | (Hash_mask >> 10);
ioremap_base = 0xf8000000;
@@ -1252,8 +1262,8 @@
#endif /* CONFIG_BLK_DEV_INITRD */
#ifndef CONFIG_8xx
if ( !rtas_data ||
- addr < (rtas_data & PAGE_MASK) ||
- addr >= (rtas_data+rtas_size))
+ addr < (rtas_data + KERNELBASE) ||
+ addr >= (rtas_data + KERNELBASE + rtas_size))
#endif /* CONFIG_8xx */
free_page(addr);
}
@@ -1314,6 +1324,7 @@
return ret;
}
#endif /* CONFIG_MBX */
+
#ifndef CONFIG_8xx
/*
* On systems with Open Firmware, collect information about
@@ -1380,6 +1391,7 @@
if (boot_infos == 0) {
/* record which bits the prom is using */
get_mem_prop("available", &phys_avail);
+ remove_mem_piece(&phys_avail, __max_memory, ~__max_memory, 0);
prom_mem = phys_mem;
for (i = 0; i < phys_avail.n_regions; ++i)
remove_mem_piece(&prom_mem,
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)