MIPS: Initialise MAARs
Add initialisation for Memory Accessibility Attribute Registers. Generic code cannot know the platform-specific requirements with regards to speculative accesses, so it simply calls a platform_maar_init function which platforms with MAARs are expected to implement by calling the provided write_maar_pair function & returning the number of MAAR pairs used. A weak default implementation will simply use no MAAR pairs. Any present but unused MAAR pairs are then marked invalid, effectively disabling them. The end result of this patch is that MAARs are all marked invalid, until platforms implement the platform_maar_init function. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/7331/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
此提交包含在:
@@ -325,6 +325,38 @@ static inline void mem_init_free_highmem(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned __weak platform_maar_init(unsigned num_maars)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void maar_init(void)
|
||||
{
|
||||
unsigned num_maars, used, i;
|
||||
|
||||
if (!cpu_has_maar)
|
||||
return;
|
||||
|
||||
/* Detect the number of MAARs */
|
||||
write_c0_maari(~0);
|
||||
back_to_back_c0_hazard();
|
||||
num_maars = read_c0_maari() + 1;
|
||||
|
||||
/* MAARs should be in pairs */
|
||||
WARN_ON(num_maars % 2);
|
||||
|
||||
/* Configure the required MAARs */
|
||||
used = platform_maar_init(num_maars / 2);
|
||||
|
||||
/* Disable any further MAARs */
|
||||
for (i = (used * 2); i < num_maars; i++) {
|
||||
write_c0_maari(i);
|
||||
back_to_back_c0_hazard();
|
||||
write_c0_maar(0);
|
||||
back_to_back_c0_hazard();
|
||||
}
|
||||
}
|
||||
|
||||
void __init mem_init(void)
|
||||
{
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
@@ -337,6 +369,7 @@ void __init mem_init(void)
|
||||
#endif
|
||||
high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
|
||||
|
||||
maar_init();
|
||||
free_all_bootmem();
|
||||
setup_zero_pages(); /* Setup zeroed pages. */
|
||||
mem_init_free_highmem();
|
||||
|
新增問題並參考
封鎖使用者