114cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras/* 214cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * Declarations of procedures and variables shared between files 314cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * in arch/ppc/mm/. 414cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * 514cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * Derived from arch/ppc/mm/init.c: 614cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) 714cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * 814cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * Modifications by Paul Mackerras (PowerMac) (paulus@cs.anu.edu.au) 914cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * and Cort Dougan (PReP) (cort@cs.nmt.edu) 1014cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * Copyright (C) 1996 Paul Mackerras 1114cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * 1214cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * Derived from "arch/i386/mm/init.c" 1314cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 1414cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * 1514cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * This program is free software; you can redistribute it and/or 1614cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * modify it under the terms of the GNU General Public License 1714cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * as published by the Free Software Foundation; either version 1814cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * 2 of the License, or (at your option) any later version. 1914cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * 2014cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras */ 21621023072524fc0155ed16490255e1ea3aa11585David Gibson#include <linux/mm.h> 2214cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras#include <asm/tlbflush.h> 2314cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras#include <asm/mmu.h> 2414cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras 252a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#ifdef CONFIG_PPC_MMU_NOHASH 262a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt 272a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt/* 282a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt * On 40x and 8xx, we directly inline tlbia and tlbivax 292a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt */ 302a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#if defined(CONFIG_40x) || defined(CONFIG_8xx) 312a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidtstatic inline void _tlbil_all(void) 322a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt{ 334a0826824beb28390651a962987b0681b9e7fe93Benjamin Herrenschmidt asm volatile ("sync; tlbia; isync" : : : "memory"); 342a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt} 352a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidtstatic inline void _tlbil_pid(unsigned int pid) 362a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt{ 374a0826824beb28390651a962987b0681b9e7fe93Benjamin Herrenschmidt asm volatile ("sync; tlbia; isync" : : : "memory"); 382a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt} 39d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt#define _tlbil_pid_noind(pid) _tlbil_pid(pid) 40d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt 412a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#else /* CONFIG_40x || CONFIG_8xx */ 422a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidtextern void _tlbil_all(void); 432a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidtextern void _tlbil_pid(unsigned int pid); 4425d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt#ifdef CONFIG_PPC_BOOK3E 4525d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidtextern void _tlbil_pid_noind(unsigned int pid); 4625d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt#else 47d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt#define _tlbil_pid_noind(pid) _tlbil_pid(pid) 4825d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt#endif 492a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#endif /* !(CONFIG_40x || CONFIG_8xx) */ 502a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt 512a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt/* 522a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt * On 8xx, we directly inline tlbie, on others, it's extern 532a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt */ 542a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#ifdef CONFIG_8xx 55d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidtstatic inline void _tlbil_va(unsigned long address, unsigned int pid, 56d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt unsigned int tsize, unsigned int ind) 572a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt{ 584a0826824beb28390651a962987b0681b9e7fe93Benjamin Herrenschmidt asm volatile ("tlbie %0; sync" : : "r" (address) : "memory"); 592a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt} 6025d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt#elif defined(CONFIG_PPC_BOOK3E) 6125d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidtextern void _tlbil_va(unsigned long address, unsigned int pid, 6225d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt unsigned int tsize, unsigned int ind); 6325d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt#else 64d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidtextern void __tlbil_va(unsigned long address, unsigned int pid); 65d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidtstatic inline void _tlbil_va(unsigned long address, unsigned int pid, 66d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt unsigned int tsize, unsigned int ind) 67d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt{ 68d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt __tlbil_va(address, pid); 69d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt} 702a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#endif /* CONIFG_8xx */ 712a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt 72e7f75ad01d590243904c2d95ab47e6b2e9ef6dadDave Kleikamp#if defined(CONFIG_PPC_BOOK3E) || defined(CONFIG_PPC_47x) 7325d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidtextern void _tlbivax_bcast(unsigned long address, unsigned int pid, 7425d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt unsigned int tsize, unsigned int ind); 7525d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt#else 76d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidtstatic inline void _tlbivax_bcast(unsigned long address, unsigned int pid, 77d4e167da4cb60910f6ac305aee03714937f70b71Benjamin Herrenschmidt unsigned int tsize, unsigned int ind) 782a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt{ 792a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt BUG(); 802a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt} 8125d21ad6e799cccd097b9df2a2fefe19a7e1dfcfBenjamin Herrenschmidt#endif 822a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt 832a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#else /* CONFIG_PPC_MMU_NOHASH */ 842a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt 85ee4f2ea48674b6c9d91bc854edc51a3e6a7168c4Benjamin Herrenschmidtextern void hash_preload(struct mm_struct *mm, unsigned long ea, 86ee4f2ea48674b6c9d91bc854edc51a3e6a7168c4Benjamin Herrenschmidt unsigned long access, unsigned long trap); 87ee4f2ea48674b6c9d91bc854edc51a3e6a7168c4Benjamin Herrenschmidt 88ee4f2ea48674b6c9d91bc854edc51a3e6a7168c4Benjamin Herrenschmidt 892a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidtextern void _tlbie(unsigned long address); 902a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidtextern void _tlbia(void); 912a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt 922a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt#endif /* CONFIG_PPC_MMU_NOHASH */ 932a4aca1144394653269720ffbb5a325a77abd5faBenjamin Herrenschmidt 94ab1f9dac6eea25ee59e4c8e1cf0b7476afbbfe07Paul Mackerras#ifdef CONFIG_PPC32 9519f5465e823858a2f0b0e9a92e52816ba3ee70bbTrent Piepho 9614cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern void mapin_ram(void); 9714cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern int map_page(unsigned long va, phys_addr_t pa, int flags); 987c5c4325d2d911fe54db3bc14149bfa558ae0acbBecky Bruceextern void setbat(int index, unsigned long virt, phys_addr_t phys, 9914cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras unsigned int size, int flags); 10014cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras 10114cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern int __map_without_bats; 102c5df7f775148723de39274537a886e9502eef336Albert Herranzextern int __allow_ioremap_reserved; 10314cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern unsigned long ioremap_base; 10414cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern unsigned int rtas_data, rtas_size; 10514cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras 1068e561e7eda02819c711a75b64a000bf34948cdbbDavid Gibsonstruct hash_pte; 1078e561e7eda02819c711a75b64a000bf34948cdbbDavid Gibsonextern struct hash_pte *Hash, *Hash_end; 10814cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern unsigned long Hash_size, Hash_mask; 10932a74949b7337726e76d69f51c48715431126c6cBenjamin Herrenschmidt 11032a74949b7337726e76d69f51c48715431126c6cBenjamin Herrenschmidt#endif /* CONFIG_PPC32 */ 11132a74949b7337726e76d69f51c48715431126c6cBenjamin Herrenschmidt 11232a74949b7337726e76d69f51c48715431126c6cBenjamin Herrenschmidt#ifdef CONFIG_PPC64 11332a74949b7337726e76d69f51c48715431126c6cBenjamin Herrenschmidtextern int map_kernel_page(unsigned long ea, unsigned long pa, int flags); 11432a74949b7337726e76d69f51c48715431126c6cBenjamin Herrenschmidt#endif /* CONFIG_PPC64 */ 115ab1f9dac6eea25ee59e4c8e1cf0b7476afbbfe07Paul Mackerras 116800fc3eeb0eed3bf98d621c0da24d68cabcf6526David Gibsonextern unsigned long ioremap_bot; 117ab1f9dac6eea25ee59e4c8e1cf0b7476afbbfe07Paul Mackerrasextern unsigned long __max_low_memory; 11809b5e63f827016732d956abb7a4c74a312d20521Kumar Galaextern phys_addr_t __initial_memory_limit_addr; 1192bf3016f89344d4cd8b2c96bbec2b642a2bde413Stefan Roeseextern phys_addr_t total_memory; 1202bf3016f89344d4cd8b2c96bbec2b642a2bde413Stefan Roeseextern phys_addr_t total_lowmem; 12199c62dd773797b68f3b1ca6bb3274725d1852fa2Kumar Galaextern phys_addr_t memstart_addr; 122d7917ba7051e3fd12ebe2d5a09b29fb3a2b38190Kumar Galaextern phys_addr_t lowmem_end_addr; 12314cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras 124de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranz#ifdef CONFIG_WII 125de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranzextern unsigned long wii_hole_start; 126de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranzextern unsigned long wii_hole_size; 127de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranz 128de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranzextern unsigned long wii_mmu_mapin_mem2(unsigned long top); 129de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranzextern void wii_memory_fixups(void); 130de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranz#endif 131de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranz 13214cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras/* ...and now those things that may be slightly different between processor 13314cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras * architectures. -- Dan 13414cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras */ 13514cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras#if defined(CONFIG_8xx) 13614cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras#define MMU_init_hw() do { } while(0) 137ae4cec4736969ec2196a6bbce4ab263ff7cb7eefStephen Rothwell#define mmu_mapin_ram(top) (0UL) 13814cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras 13914cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras#elif defined(CONFIG_4xx) 14014cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern void MMU_init_hw(void); 141ae4cec4736969ec2196a6bbce4ab263ff7cb7eefStephen Rothwellextern unsigned long mmu_mapin_ram(unsigned long top); 14214cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras 14355fd766b5fad8240b7a6e994b5779a46d28f73d4Kumar Gala#elif defined(CONFIG_PPC_FSL_BOOK3E) 14455fd766b5fad8240b7a6e994b5779a46d28f73d4Kumar Galaextern unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx); 1451dc91c3eb374ca01ec99dc0ca2a38babc509beb3Kumar Galaextern unsigned long calc_cam_sz(unsigned long ram, unsigned long virt, 1461dc91c3eb374ca01ec99dc0ca2a38babc509beb3Kumar Gala phys_addr_t phys); 14755fd766b5fad8240b7a6e994b5779a46d28f73d4Kumar Gala#ifdef CONFIG_PPC32 14814cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern void MMU_init_hw(void); 149ae4cec4736969ec2196a6bbce4ab263ff7cb7eefStephen Rothwellextern unsigned long mmu_mapin_ram(unsigned long top); 15014cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern void adjust_total_lowmem(void); 15178a235efdc42ff363de81fdbc171385e8b86b69bKevin Haoextern int switch_to_as1(void); 1520be7d969b0efef085ed6497d462ba16a875ca737Kevin Haoextern void restore_to_as0(int esel, int offset, void *dt_ptr, int bootcpu); 15355fd766b5fad8240b7a6e994b5779a46d28f73d4Kumar Gala#endif 15478f622377f7d31d988db350a43c5689dd5f31876Kumar Galaextern void loadcam_entry(unsigned int index); 15578f622377f7d31d988db350a43c5689dd5f31876Kumar Gala 15678f622377f7d31d988db350a43c5689dd5f31876Kumar Galastruct tlbcam { 15778f622377f7d31d988db350a43c5689dd5f31876Kumar Gala u32 MAS0; 15878f622377f7d31d988db350a43c5689dd5f31876Kumar Gala u32 MAS1; 15978f622377f7d31d988db350a43c5689dd5f31876Kumar Gala unsigned long MAS2; 16078f622377f7d31d988db350a43c5689dd5f31876Kumar Gala u32 MAS3; 16178f622377f7d31d988db350a43c5689dd5f31876Kumar Gala u32 MAS7; 16278f622377f7d31d988db350a43c5689dd5f31876Kumar Gala}; 163ab1f9dac6eea25ee59e4c8e1cf0b7476afbbfe07Paul Mackerras#elif defined(CONFIG_PPC32) 164ab1f9dac6eea25ee59e4c8e1cf0b7476afbbfe07Paul Mackerras/* anything 32-bit except 4xx or 8xx */ 16514cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerrasextern void MMU_init_hw(void); 166de32400dd26e743c5d500aa42d8d6818b79edb73Albert Herranzextern unsigned long mmu_mapin_ram(unsigned long top); 16714cf11af6cf608eb8c23e989ddb17a715ddce109Paul Mackerras#endif 168