Merge of rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

+36
+11
arch/sparc64/kernel/setup.c
··· 383 /* Use PROM debug console. */ 384 register_console(&prom_debug_console); 385 break; 386 default: 387 printk("Unknown boot switch (-%c)\n", c); 388 break;
··· 383 /* Use PROM debug console. */ 384 register_console(&prom_debug_console); 385 break; 386 + case 'P': 387 + /* Force UltraSPARC-III P-Cache on. */ 388 + if (tlb_type != cheetah) { 389 + printk("BOOT: Ignoring P-Cache force option.\n"); 390 + break; 391 + } 392 + cheetah_pcache_forced_on = 1; 393 + add_taint(TAINT_MACHINE_CHECK); 394 + cheetah_enable_pcache(); 395 + break; 396 + 397 default: 398 printk("Unknown boot switch (-%c)\n", c); 399 break;
+3
arch/sparc64/kernel/smp.c
··· 123 124 smp_setup_percpu_timer(); 125 126 local_irq_enable(); 127 128 calibrate_delay();
··· 123 124 smp_setup_percpu_timer(); 125 126 + if (cheetah_pcache_forced_on) 127 + cheetah_enable_pcache(); 128 + 129 local_irq_enable(); 130 131 calibrate_delay();
+19
arch/sparc64/kernel/traps.c
··· 421 } 422 } 423 424 /* Cheetah error trap handling. */ 425 static unsigned long ecache_flush_physbase; 426 static unsigned long ecache_flush_linesize;
··· 421 } 422 } 423 424 + int cheetah_pcache_forced_on; 425 + 426 + void cheetah_enable_pcache(void) 427 + { 428 + unsigned long dcr; 429 + 430 + printk("CHEETAH: Enabling P-Cache on cpu %d.\n", 431 + smp_processor_id()); 432 + 433 + __asm__ __volatile__("ldxa [%%g0] %1, %0" 434 + : "=r" (dcr) 435 + : "i" (ASI_DCU_CONTROL_REG)); 436 + dcr |= (DCU_PE | DCU_HPE | DCU_SPE | DCU_SL); 437 + __asm__ __volatile__("stxa %0, [%%g0] %1\n\t" 438 + "membar #Sync" 439 + : /* no outputs */ 440 + : "r" (dcr), "i" (ASI_DCU_CONTROL_REG)); 441 + } 442 + 443 /* Cheetah error trap handling. */ 444 static unsigned long ecache_flush_physbase; 445 static unsigned long ecache_flush_linesize;
+3
include/asm-sparc64/spitfire.h
··· 48 49 extern enum ultra_tlb_layout tlb_type; 50 51 #define sparc64_highest_locked_tlbent() \ 52 (tlb_type == spitfire ? \ 53 SPITFIRE_HIGHEST_LOCKED_TLBENT : \
··· 48 49 extern enum ultra_tlb_layout tlb_type; 50 51 + extern int cheetah_pcache_forced_on; 52 + extern void cheetah_enable_pcache(void); 53 + 54 #define sparc64_highest_locked_tlbent() \ 55 (tlb_type == spitfire ? \ 56 SPITFIRE_HIGHEST_LOCKED_TLBENT : \