Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 01 Jul 2009 08:39:00 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        neelnatu@yahoo.com
Cc:        freebsd-mips@freebsd.org
Subject:   Re: Machine Check exception during bootup
Message-ID:  <20090701.083900.1346819654.imp@bsdimp.com>
In-Reply-To: <14584.70267.qm@web34403.mail.mud.yahoo.com>
References:  <14584.70267.qm@web34403.mail.mud.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <14584.70267.qm@web34403.mail.mud.yahoo.com>
            Neelkanth Natu <neelnatu@yahoo.com> writes:
: r02.eng.netapp.com/vol/home24/neelnatu/p4/freebsd_sibyte/src/sys/mips/mips/tlb.S ====
: @@ -81,14 +81,14 @@
:  #define	_MFC0	dmfc0
:  #define	_MTC0	dmtc0
:  #define WIRED_SHIFT 34
: -#define PAGE_SHIFT 34
: +#define PAGE_SHIFT 12
:  #else
:  #define _SLL	sll
:  #define	_SRL	srl
:  #define	_MFC0	mfc0
:  #define	_MTC0	mtc0
:  #define WIRED_SHIFT 2
: -#define PAGE_SHIFT 2
: +#define PAGE_SHIFT 12
:  #endif

These are wrong.  PAGE_SHIFT is supposed to be the bit position in the
TLB, not the size of the page for multiplication.  At least in thoery,
but looking at the manual doesn't even bear that out...

However, it appears it isn't used that way at all in the rest of the
code.  This means we should move it outside of the #ifdef, since it
has nothing to do with ISA we're compiling for.

:  	.set	noreorder			# Noreorder is default style!
:  #if defined(ISA_MIPS32)
: @@ -232,22 +232,30 @@
:  	mtc0	zero, COP_0_STATUS_REG		# Disable interrupts
:  	ITLBNOPFIX
:  	mfc0	t1, COP_0_TLB_WIRED
: -	li	v0, MIPS_KSEG3_START + 0x0fff0000 # invalid address
:  	_MFC0	t0, COP_0_TLB_HI		# Save the PID
:  
: -	_MTC0	v0, COP_0_TLB_HI		# Mark entry high as invalid
:  	_MTC0	zero, COP_0_TLB_LO0		# Zero out low entry0.
:  	_MTC0	zero, COP_0_TLB_LO1		# Zero out low entry1.
:  	mtc0	zero, COP_0_TLB_PG_MASK 	# Zero out mask entry.
: +
: +	#
: +	# Load invalid entry, each TLB entry should have it's own bogus 
: +	# address calculated by following expression:
: +	# MIPS_KSEG0_START + 0x0fff0000 + 2 * i * PAGE_SIZE;
: +	# One bogus value for every TLB entry might cause MCHECK exception
: +	#
: +	sll	t3, t1, PAGE_SHIFT + 1
: +	li	v0, MIPS_KSEG0_START + 0x0fff0000	# invalid address
: +	addu	v0, t3

I'll note that NetBSD doesn't add the 0x0fff0000 on the end here.  I
don't understand why we do it, even though I likely added this to the
port.  Does it work without it?

Warner



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090701.083900.1346819654.imp>