Re: [PATCH] Synthesize TLB refill handler at runtime

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 24 Nov 2004, Maciej W. Rozycki wrote:

>  Agreed.  We should probably verify these few "traditional" CPUs to be
> handled explicitly ourselves, though, as there is no one else to look 
> after them.

 Here's my proposal.  It doesn't handle MIPS*R2 processors implicitly yet
as that asks for a clean implementation of MIPS architecture
determination.  I'll do that in a separate step and adjust this code 
afterwards.  For now it should be OK.  Agreed?

 Note, these panic()s really beg for early printk() support -- but doesn't
everyone have it already? ;-)

  Maciej

patch-mips-2.6.10-rc1-20041112-mips-tlbwr-0
diff -up --recursive --new-file linux-mips-2.6.10-rc1-20041112.macro/arch/mips/mm/tlbex.c linux-mips-2.6.10-rc1-20041112/arch/mips/mm/tlbex.c
--- linux-mips-2.6.10-rc1-20041112.macro/arch/mips/mm/tlbex.c	Tue Nov 23 20:55:14 2004
+++ linux-mips-2.6.10-rc1-20041112/arch/mips/mm/tlbex.c	Wed Nov 24 20:15:35 2004
@@ -761,10 +761,22 @@ static __init void build_tlb_write_rando
 
 	case CPU_R4600:
 	case CPU_R4700:
+	case CPU_R5000:
+	case CPU_5KC:
 		i_nop(p);
 		i_tlbwr(p);
 		break;
 
+	case CPU_R10000:
+	case CPU_R12000:
+	case CPU_4KC:
+	case CPU_SB1:
+	case CPU_4KSC:
+	case CPU_20KC:
+	case CPU_25KF:
+		i_tlbwr(p);
+		break;
+
 	case CPU_NEVADA:
 		i_nop(p); /* QED specifies 2 nops hazard */
 		/*
@@ -776,6 +788,12 @@ static __init void build_tlb_write_rando
 		l_tlbwr_hazard(l, *p);
 		break;
 
+	case CPU_4KEC:
+	case CPU_24K:
+		i_ehb(p);
+		i_tlbwr(p);
+		break;
+
 	case CPU_RM9000:
 		/*
 		 * When the JTLB is updated by tlbwi or tlbwr, a subsequent
@@ -794,21 +812,9 @@ static __init void build_tlb_write_rando
 		i_ssnop(p);
 		break;
 
-	case CPU_R10000:
-	case CPU_R12000:
-	case CPU_SB1:
-		i_tlbwr(p);
-		break;
-
 	default:
-		/*
-		 * Others are assumed to have one cycle mtc0 hazard,
-		 * and one cycle tlbwr hazard or to understand ehb.
-		 * XXX: This might be overly general.
-		 */
-		i_ehb(p);
-		i_tlbwr(p);
-		i_ehb(p);
+		panic("No TLB refill handler yet (CPU type: %d)",
+		      current_cpu_data.cputype);
 		break;
 	}
 }


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux