Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1J433l-0003j2-OD for qemu-devel@nongnu.org; Sun, 16 Dec 2007 18:38:13 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1J433l-0003io-68 for qemu-devel@nongnu.org; Sun, 16 Dec 2007 18:38:13 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1J433k-0003il-V0 for qemu-devel@nongnu.org; Sun, 16 Dec 2007 18:38:12 -0500 Received: from pop-cowbird.atl.sa.earthlink.net ([207.69.195.68]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1J433k-0007Ql-Om for qemu-devel@nongnu.org; Sun, 16 Dec 2007 18:38:12 -0500 Received: from user-142h2k8.cable.mindspring.com ([72.40.138.136] helo=earthlink.net) by pop-cowbird.atl.sa.earthlink.net with esmtp (Exim 3.36 #1) id 1J433j-00012J-00 for qemu-devel@nongnu.org; Sun, 16 Dec 2007 18:38:11 -0500 Message-ID: <4765B6E3.7090707@earthlink.net> Date: Sun, 16 Dec 2007 18:38:11 -0500 From: Robert Reif MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000306040608010203000206" Subject: [Qemu-devel] [PATCH] sparc32: fix setting counter limit to 0 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------000306040608010203000206 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Set the proper limit when set to 0. --------------000306040608010203000206 Content-Type: text/plain; name="timer1.diff.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="timer1.diff.txt" Index: hw/slavio_timer.c =================================================================== RCS file: /sources/qemu/qemu/hw/slavio_timer.c,v retrieving revision 1.21 diff -p -u -r1.21 slavio_timer.c --- hw/slavio_timer.c 1 Dec 2007 15:58:22 -0000 1.21 +++ hw/slavio_timer.c 16 Dec 2007 23:28:13 -0000 @@ -174,7 +175,6 @@ static void slavio_timer_mem_writel(void { SLAVIO_TIMERState *s = opaque; uint32_t saddr; - int reload = 0; DPRINTF("write " TARGET_FMT_plx " %08x\n", addr, val); saddr = (addr & TIMER_MAXADDR) >> 2; @@ -190,9 +190,10 @@ static void slavio_timer_mem_writel(void // set limit, reset counter qemu_irq_lower(s->irq); s->limit = val & TIMER_MAX_COUNT32; - if (!s->limit) - s->limit = TIMER_MAX_COUNT32; - ptimer_set_limit(s->timer, s->limit >> 9, 1); + if (s->limit == 0) /* free-run */ + ptimer_set_limit(s->timer, LIMIT_TO_PERIODS(TIMER_MAX_COUNT32), 1); + else + ptimer_set_limit(s->timer, LIMIT_TO_PERIODS(s->limit), 1); } break; case TIMER_COUNTER: @@ -208,9 +209,10 @@ static void slavio_timer_mem_writel(void case TIMER_COUNTER_NORST: // set limit without resetting counter s->limit = val & TIMER_MAX_COUNT32; - if (!s->limit) - s->limit = TIMER_MAX_COUNT32; - ptimer_set_limit(s->timer, LIMIT_TO_PERIODS(s->limit), reload); + if (s->limit == 0) /* free-run */ + ptimer_set_limit(s->timer, LIMIT_TO_PERIODS(TIMER_MAX_COUNT32), 0); + else + ptimer_set_limit(s->timer, LIMIT_TO_PERIODS(s->limit), 0); break; case TIMER_STATUS: if (slavio_timer_is_user(s)) { --------------000306040608010203000206--