void __init cpu_cache_init(void) { compute_alias(&boot_cpu_data.icache); compute_alias(&boot_cpu_data.dcache); compute_alias(&boot_cpu_data.scache); __flush_wback_region = noop__flush_region; __flush_purge_region = noop__flush_region; __flush_invalidate_region = noop__flush_region; if (boot_cpu_data.family == CPU_FAMILY_SH2) { extern void __weak sh2_cache_init(void); sh2_cache_init(); } if (boot_cpu_data.family == CPU_FAMILY_SH2A) { extern void __weak sh2a_cache_init(void); sh2a_cache_init(); } if (boot_cpu_data.family == CPU_FAMILY_SH3) { extern void __weak sh3_cache_init(void); sh3_cache_init(); if ((boot_cpu_data.type == CPU_SH7705) && (boot_cpu_data.dcache.sets == 512)) { extern void __weak sh7705_cache_init(void); sh7705_cache_init(); } } if ((boot_cpu_data.family == CPU_FAMILY_SH4) || (boot_cpu_data.family == CPU_FAMILY_SH4A) || (boot_cpu_data.family == CPU_FAMILY_SH4AL_DSP)) { extern void __weak sh4_cache_init(void); sh4_cache_init(); } if (boot_cpu_data.family == CPU_FAMILY_SH5) { extern void __weak sh5_cache_init(void); sh5_cache_init(); } emit_cache_params(); }
void __init cpu_cache_init(void) { unsigned int cache_disabled = 0; #ifdef SH_CCR cache_disabled = !(__raw_readl(SH_CCR) & CCR_CACHE_ENABLE); #endif compute_alias(&boot_cpu_data.icache); compute_alias(&boot_cpu_data.dcache); compute_alias(&boot_cpu_data.scache); __flush_wback_region = noop__flush_region; __flush_purge_region = noop__flush_region; __flush_invalidate_region = noop__flush_region; /* * No flushing is necessary in the disabled cache case so we can * just keep the noop functions in local_flush_..() and __flush_..() */ if (unlikely(cache_disabled)) goto skip; if (boot_cpu_data.family == CPU_FAMILY_SH2) { extern void __weak sh2_cache_init(void); sh2_cache_init(); } if (boot_cpu_data.family == CPU_FAMILY_SH2A) { extern void __weak sh2a_cache_init(void); sh2a_cache_init(); } if (boot_cpu_data.family == CPU_FAMILY_SH3) { extern void __weak sh3_cache_init(void); sh3_cache_init(); if ((boot_cpu_data.type == CPU_SH7705) && (boot_cpu_data.dcache.sets == 512)) { extern void __weak sh7705_cache_init(void); sh7705_cache_init(); } } if ((boot_cpu_data.family == CPU_FAMILY_SH4) || (boot_cpu_data.family == CPU_FAMILY_SH4A) || (boot_cpu_data.family == CPU_FAMILY_SH4AL_DSP)) { extern void __weak sh4_cache_init(void); sh4_cache_init(); if ((boot_cpu_data.type == CPU_SH7786) || (boot_cpu_data.type == CPU_SHX3)) { extern void __weak shx3_cache_init(void); shx3_cache_init(); } } if (boot_cpu_data.family == CPU_FAMILY_SH5) { extern void __weak sh5_cache_init(void); sh5_cache_init(); } skip: emit_cache_params(); }