Subject: Re: spontaneous reboot only once after power-up
To: None <port-dreamcast@netbsd.org, port-sh3@netbsd.org>
From: ITOH Yasufumi <itohy@netbsd.org>
List: port-dreamcast
Date: 11/03/2002 19:25:37
In article <200211030521.gA35LGt07808@mirage.ceres.dti.ne.jp>
tsutsui@ceres.dti.ne.jp writes:

> In article <200211030456.gA34u7h16089@pl374.nas911.nara.nttpc.ne.jp>
> itohy@netbsd.org wrote:
> 
> > > (1) it does not clear VPN
> > 
> > I don't think it is a problem.
> > The V (valid) and D (dirty) bits are cleared by either way,
> > and the VPN shall not make sense if an entry is not valid
> 
> Yeah, but I just think it is safe and is the difference
> between AA and DA1.
> 
> > Possibly, an errata or something?
> 
> AFAIK, there is no errata on the Hitachi's web site.

Hm, anyway, uninitialized "data array 1" seems problematic....
I'm going to commit this change to work around it.
-- 
ITOH Yasufumi

--- sys/arch/sh3/sh3/mmu_sh4.c.orig	Sat Jun 29 11:22:59 2002
+++ sys/arch/sh3/sh3/mmu_sh4.c	Sun Nov  3 18:49:27 2002
@@ -129,8 +129,14 @@ sh4_tlb_invalidate_all()
 	for (e = 0; e < eend; e++) {
 		a = SH4_UTLB_AA | (e << SH4_UTLB_E_SHIFT);
 		_reg_write_4(a, 0);
+		a = SH4_UTLB_DA1 | (e << SH4_UTLB_E_SHIFT);
+		_reg_write_4(a, 0);
 	}
 	__sh4_itlb_invalidate_all();
+	_reg_write_4(SH4_ITLB_DA1, 0);
+	_reg_write_4(SH4_ITLB_DA1 | (1 << SH4_ITLB_E_SHIFT), 0);
+	_reg_write_4(SH4_ITLB_DA1 | (2 << SH4_ITLB_E_SHIFT), 0);
+	_reg_write_4(SH4_ITLB_DA1 | (3 << SH4_ITLB_E_SHIFT), 0);
 	RUN_P1;
 }