Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Jan 2010 09:31:25 -0700 (MST)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        neelnatu@yahoo.com
Cc:        freebsd-mips@FreeBSD.org
Subject:   Re: AR71XX RTC
Message-ID:  <20100125.093125.200754749998835802.imp@bsdimp.com>
In-Reply-To: <434364.57659.qm@web34405.mail.mud.yahoo.com>
References:  <1264351951.2647.93.camel@brain.lan.terror.local> <434364.57659.qm@web34405.mail.mud.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <434364.57659.qm@web34405.mail.mud.yahoo.com>
            Neelkanth Natu <neelnatu@yahoo.com> writes:
: Hi Flo,
: =

: Can you try the following patch and see if it helps with the =

: hang-followed-by-trap problem?
: =

: I am seeing a similar problem on the Sibyte and this patch gets me
: past it.
: =

: best
: Neel
: =

: Index: swtch.S
: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
: --- swtch.S	(revision 202961)
: +++ swtch.S	(working copy)
: @@ -323,7 +323,7 @@
:  	 * to be saved with the other registers do so here.
:  	 */
:  =

: -	sw	a3, TD_LOCK(a0)			# Switchout td_lock =

: +	sw	a2, TD_LOCK(a3)			# Switchout td_lock =

:  =

:  mips_sw1:
:  #if defined(SMP) && defined(SCHED_ULE)

I really like this patch.  For the OCTEON I went from having all kinds
of head-scratcher problems on boot that I was about to look at
instruction traces in the simulator to try to track down to an
immediate mountroot> prompt.  So after reading the code, my first
reaction is "how the heck did the old code work as well as it did?"
and my second reaction is "This is obviously the right fix since a3 is
a saved copy of a0, and a0 points to the pcb at this point, not the
old thread."

I've touched up the comments a bit.  Maybe the register assignments is
a bit of overkill, but this is a complicated function that's very
tricky.  What do you think of this patch:

Index: sys/mips/mips/swtch.S
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/mips/mips/swtch.S	(revision 202867)
+++ sys/mips/mips/swtch.S	(working copy)
@@ -282,9 +282,10 @@
 END(mips_cpu_throw)
 =

 /*
- *XXX Fixme:	should be written to new interface that requires lock
- *		storage.  We fake it for now.
- * cpu_switch(struct thread *old, struct thread *new);
+ * cpu_switch(struct thread *old, struct thread *new, struct mutex *mt=
x);
+ *	a0 - old
+ *	a1 - new
+ *	a2 - mtx
  * Find the highest priority process and resume it.
  */
 NON_LEAF(cpu_switch, STAND_FRAME_SIZE, ra)
@@ -323,7 +324,7 @@
 	 * to be saved with the other registers do so here.
 	 */
 =

-	sw	a3, TD_LOCK(a0)			# Switchout td_lock =

+	sw	a2, TD_LOCK(a3)			# Switchout td_lock =

 =

 mips_sw1:
 #if defined(SMP) && defined(SCHED_ULE)


Thanks for saving me hours of debugging. :)

Warner


: --- On Sun, 1/24/10, Florian Kruegl <smeagle@bsdler.de> wrote:
: =

: > From: Florian Kruegl <smeagle@bsdler.de>
: > Subject: Re: AR71XX RTC
: > To: "Oleksandr Tymoshenko" <gonzo@bluezbox.com>
: > Cc: freebsd-mips@freebsd.org
: > Date: Sunday, January 24, 2010, 8:52 AM
: > Hi,
: > =

: > On Sun, 2010-01-24 at 02:41 +0100, Florian Kruegl wrote:
: > > On Sat, 2010-01-23 at 16:53 -0800, Oleksandr
: > Tymoshenko wrote:
: > > > On 2010-01-23, at 4:44 PM, Florian Kruegl wrote:
: > > > =

: > > > > Hi,
: > > > > =

: > > > > On Sat, 2010-01-23 at 16:21 -0800, Oleksandr
: > Tymoshenko wrote:
: > > > >> On 2010-01-23, at 4:00 PM, Florian
: > Kruegl wrote:
: > > > >> =

: > > > >>> Hi,
: > > > >>> =

: > > > >>> anyone working on pfc2123 driver for
: > RouterStation Pro? =

: > > > >>> Seems quite well documented, one
: > issue might be CS hack, but the rest
: > > > >>> should be straight.
: > > > >>=A0 =A0 Driver was commited
: > yesterday:
: > > > >> http://svn.freebsd.org/viewvc/base?view=3Drevision&revision=3D=
202839
: > > > >> =

: > > > >> And yes, CS hack is the problem. I'm
: > trying to figure out how to fit it into FreeBSD
: > > > >> SPI framework. =

: > > > > =

: > > > > sounds good, will do an update as soon as i
: > removed me work from code.
: > > > > My CS "solution" was more than crude, but
: > the frames simply didn't
: > > > > fit... so I am looking forward for a
: > different one :) =

: > > > =

: > > >=A0 =A0=A0=A0Yeah, my CS solution was
: > dirty hack too. If for "didn't fit" you mean missing last =

: > > > byte of frame then this problem was solved to.
: > Bug was in AR71XX SPI code: falling =

: > > > edge was not provided for last byte in transfer
: > in time and RTC chip acts of falling edge. =

: > > > Fix was committed before driver.
: > > > =

: > > > =

: > > > =

: > > =

: > > code looks similar, can't tell much about result as
: > kernel hangs for a
: > > while before getting this:
: > >
: > <<<<<<<<<<<<<<<<<<<<<<<<<<<
: > schnipp
: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
: > > Trap cause =3D 2 (TLB miss (load or instr. fetch) -
: > kernel mode)
: > > [thread pid 4 tid 100009 ]
: > > Stopped at=A0 =A0 =A0
: > _thread_lock_flags+0x150:=A0 =A0
: > =A0=A0=A0lw=A0 =A0 =A0 v0,60(a3)
: > > db> bt
: > > Tracing pid 4 tid 100009 td 0xc0c47270
: > > db_trace_thread+30 (?,?,?,?) ra 800a6c10 sz 24
: > > 800a6af4+11c (0,?,ffffffff,?) ra 800a6604 sz 32
: > > 800a6270+394 (?,?,?,?) ra 800a6794 sz 168
: > > db_command_loop+78 (?,?,?,?) ra 800a8e68 sz 24
: > > 800a8d60+108 (?,?,?,?) ra 80215ff8 sz 424
: > > kdb_trap+f8 (?,?,?,?) ra 80474350 sz 32
: > > trap+134c (?,?,?,?) ra 8046b7fc sz 176
: > > MipsKernGenException+100 (b,173,804d5de8,deadc0d8) ra
: > 801c593c sz 200
: > > _thread_lock_flags+130 (?,?,?,?) ra 80221f18 sz 56
: > > sleepq_broadcast+ac (?,?,?,?) ra 801e5f20 sz 40
: > > wakeup+2c (?,?,?,?) ra 8016de18 sz 32
: > > g_io_deliver+198 (?,?,?,?) ra 8016bbd4 sz 80
: > > 8016b590+644 (?,?,?,?) ra 8016e184 sz 104
: > > g_io_schedule_down+2ec (?,?,?,?) ra 8016eb94 sz 64
: > > 8016eb18+7c (?,?,?,?) ra 801a331c sz 24
: > > fork_exit+a0 (?,?,?,?) ra 80478f10 sz 48
: > > fork_trampoline+10 (?,?,?,?) ra 0 sz 0
: > > pid 4
: > >
: > <<<<<<<<<<<<<<<<<<<<<<<<<<<
: > schnapp
: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
: > > =

: > > will use AR71XX as config file tomorrow, mine has many
: > additional devs
: > > configured for booting from usb devices.
: > > =

: > [...]
: > =

: > seems to make no difference. removed all mini pci
: > devs=A0 and most code
: > changes. kernel hangs during bootup for a while. then gets
: > a trap. =

: > =

: > Source Info:
: > =

: > -------------------------- schnipp
: > --------------------------
: > brain:head> svn info
: > Path: .
: > URL: svn://svn.freebsd.org/base/head
: > Repository Root: svn://svn.freebsd.org/base
: > Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
: > Revision: 202904
: > Node Kind: directory
: > Schedule: normal
: > Last Changed Author: marcel
: > Last Changed Rev: 202904
: > Last Changed Date: 2010-01-24 00:16:50 +0100 (Sun, 24 Jan
: > 2010)
: > -------------------------- schnapp
: > --------------------------
: > =

: > -------------------------- schnipp
: > --------------------------
: > brain:head> svn stat
: > ?=A0 =A0 =A0=A0=A0GRTAGS
: > ?=A0 =A0 =A0=A0=A0GSYMS
: > ?=A0 =A0 =A0=A0=A0GTAGS
: > ?=A0 =A0 =A0=A0=A0GPATH
: > M=A0 =A0 =A0=A0=A0sys/kern/vfs_mount.c
: > M=A0 =A0 =A0=A0=A0sys/mips/conf/AR71XX
: > ?=A0 =A0 =A0=A0=A0sys/dev/pfc2123
: > -------------------------- schnapp
: > --------------------------
: > =

: > - vfs_mount should be far away. =

: > - sys/dev/pfc2123 is no longer used.
: > - sys/mips/conf/AR71XX altered to include pfc2123_rtc
: > =

: > =

: > -------------------------- schnipp
: > --------------------------
: > FreeBSD 9.0-CURRENT #1: Sun Jan 24 15:58:37 UTC 2010
: > =

: > root@pinky.lan.terror.local:/home/smeagle/obj/mips/mips/home/smeagl=
e/src/freebsd/head/sys/AR71XX
: > mips
: > real memory=A0 =3D 134217728 (131072K bytes)
: > avail memory =3D 125689856 (119MB)
: > nexus0: <MIPS32 root nexus>
: > clock0: <Generic MIPS32 ticker> on nexus0
: > clock0: [FILTER]
: > apb0 at irq 4 on nexus0
: > apb0: [FILTER]
: > uart0: <16550 or compatible> on apb0
: > uart0: [FILTER]
: > uart0: console (115200,n,8,1)
: > pcib0 at irq 0 on nexus0
: > pcib0: [FILTER]
: > pci0: <PCI bus> on pcib0
: > pci0: <old, non-VGA display device> at device 0.0 (no
: > driver attached)
: > pci0: <processor> at device 17.0 (no driver
: > attached)
: > arge0: <Atheros AR71xx built-in ethernet interface>
: > at mem
: > 0x19000000-0x19000fff irq 2 on nexus0
: > miibus0: <MII bus> on arge0
: > ukphy0: <Generic IEEE 802.3u media interface> PHY 4
: > on miibus0
: > ukphy0:=A0 10baseT, 10baseT-FDX, 100baseTX,
: > 100baseTX-FDX, 1000baseT-FDX,
: > auto
: > arge0: Ethernet address: 00:00:00:00:46:61
: > arge0: [FILTER+ITHREAD]
: > arge1: <Atheros AR71xx built-in ethernet interface>
: > at mem
: > 0x1a000000-0x1a000fff irq 3 on nexus0
: > arge1: Ethernet address: 00:00:00:00:46:62
: > arge1: [FILTER+ITHREAD]
: > spi0: <AR71XX SPI> at mem 0x1f000000-0x1f00000f on
: > nexus0
: > spibus0: <spibus bus> on spi0
: > mx25l0: <M25Pxx Flash Family> at cs 0 on spibus0
: > mx25l0: mx25ll128, sector 65536 bytes, 256 sectors
: > ar71xx_wdog0: <Atheros AR71XX watchdog timer> on
: > nexus0
: > Timecounter "MIPS32" frequency 360000000 Hz quality 800
: > Timecounters tick every 1.000 msec
: > bootpc_init: wired to interface 'arge0'
: > Sending DHCP Discover packet from interface arge0
: > (00:00:00:00:46:61)
: > arge0: link state changed to DOWN
: > Trap cause =3D 2 (TLB miss (load or instr. fetch) - kernel
: > mode)
: > [thread pid 4 tid 100008 ]
: > Stopped at=A0 =A0 =A0
: > _thread_lock_flags+0x150:=A0 =A0
: > =A0=A0=A0lw=A0 =A0 =A0 v0,60(a3)
: > db> bt
: > Tracing pid 4 tid 100008 td 0xc0c414e0
: > db_trace_thread+30 (?,?,?,?) ra 80055900 sz 24
: > 800557e4+11c (0,?,ffffffff,?) ra 800552f4 sz 32
: > 80054f60+394 (?,?,?,?) ra 80055484 sz 168
: > db_command_loop+78 (?,?,?,?) ra 80057b58 sz 24
: > 80057a50+108 (?,?,?,?) ra 8017b7d8 sz 424
: > kdb_trap+f8 (?,?,?,?) ra 8035ab40 sz 32
: > trap+134c (?,?,?,?) ra 80351fec sz 176
: > MipsKernGenException+100 (b,173,8039ce74,deadc0d8) ra
: > 8012c92c sz 200
: > _thread_lock_flags+130 (?,?,?,?) ra 801876f8 sz 56
: > sleepq_broadcast+ac (?,?,?,?) ra 8014b700 sz 40
: > wakeup+2c (?,?,?,?) ra 800d6ba8 sz 32
: > g_io_deliver+198 (?,?,?,?) ra 800d4964 sz 80
: > 800d4320+644 (?,?,?,?) ra 800d6f14 sz 104
: > g_io_schedule_down+2ec (?,?,?,?) ra 800d7924 sz 64
: > 800d78a8+7c (?,?,?,?) ra 8010c0ac sz 24
: > fork_exit+a0 (?,?,?,?) ra 8035f700 sz 48
: > fork_trampoline+10 (?,?,?,?) ra 0 sz 0
: > pid 4
: > -------------------------- schnapp
: > --------------------------
: > =

: > =

: > =

: > =

: > Flo
: > =

: > _______________________________________________
: > freebsd-mips@freebsd.org
: > mailing list
: > http://lists.freebsd.org/mailman/listinfo/freebsd-mips
: > To unsubscribe, send any mail to "freebsd-mips-unsubscribe@freebsd.=
org"
: > =

: =

: =

:       =

: _______________________________________________
: freebsd-mips@freebsd.org mailing list
: http://lists.freebsd.org/mailman/listinfo/freebsd-mips
: To unsubscribe, send any mail to "freebsd-mips-unsubscribe@freebsd.or=
g"
: =

: =




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