Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Sat, 9 Feb 2002 22:13:16 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Sat, 9 Feb 2002 22:13:07 -0500 Received: from ylug.mozilla.gr.jp ([203.141.142.92]:23306 "HELO maison.kyo-ko.org") by vger.kernel.org with SMTP id ; Sat, 9 Feb 2002 22:12:48 -0500 X-Mailer: cmail 2.61.1+20011011 on GNU Emacs 20.7.2 / Mule 4.1 =?ISO-2022-JP?B?KBskQjAqGyhCKQ==?= In-Reply-To: <20020209041425.95409118231@triton2> From: Hiroshi MIURA To: macro@ds2.pg.gda.pl, Alan Cox Cc: linux-kernel@vger.kernel.org, "Ian S. Nelson" In-Reply-To: Hiroshi MIURA's message of "Sat, 9 Feb 2002 13:14:25 +0900 (JST)" <20020209041425.95409118231@triton2> Subject: Re: [PATCH] NSC Geode Companion chip workaround User-Agent: SEMI/1.14.3 (=?ISO-2022-JP?B?GyRCNW0lTkMrGyhC?=) FLIM/1.14.3 (=?ISO-2022-JP?B?GyRCQCZLNThmTk1BMBsoQg==?=) APEL/10.3 Emacs/20.7 (i386-debian-linux-gnu) MULE/4.1 (=?ISO-2022-JP?B?GyRCMCobKEI=?=) MIME-Version: 1.0 (generated by SEMI 1.14.3 - =?ISO-2022-JP?B?IhskQjVtGyhC?= =?ISO-2022-JP?B?GyRCJU5DKxsoQiI=?=) Content-Type: text/plain; charset=US-ASCII Message-Id: <20020210042402.B893E11825D@triton2> Date: Sun, 10 Feb 2002 13:24:02 +0900 (JST) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org the MediaGX/Geode companion chip CS5520 fails the latch with the read-back 8254 command as well as 8253 latch command. test program: kernel configuration: CONFIG_M586 kernel code with read-back command: test results: 1. kernel 2.4.16 (without any fix, TSC disable) fails iteration: 500-1,500 value of '(now - prev)' when fail: -100 - -200 micro sec 2. kernel 2.4.16 (with my patch) fails iteration: 35,000-70,000 error value: -10 - -20 micro sec 3. kernel 2.4.16 (with read-back command, TSC enable) fails iteration: 5,000-7,000 error value: about -20,000 micro sec 4. kernel 2.4.16 (without any fix but TSC enable) fails iteration: 5,000-7,000 error value: about -20,000 micro sec these means 'read-back command' fails as well as 'latch command'. and my patch is better than others. In message "Re: [PATCH] NSC Geode Companion chip workaround" on 02/02/09, Hiroshi MIURA writes: > In message "Re: [PATCH] NSC Geode Companion chip workaround" > on 02/02/06, "Maciej W. Rozycki" writes: > > On Wed, 6 Feb 2002, Hiroshi MIURA wrote: > > > > > I've tryed several month with this patch, It seems good for me. > > > trial machine: Casio CASSIOPEIA FIVA 101 and Fiva 103. > > > MediaGX 200MHz and NSC Geode 300MHz. > > > > Does the chip fail with the readback 8254 command as well? If not, it > > would be a less intrusive change. > > OK, I want to try 8254 readback command. I will report after weekend. ---------------- #include #include #include int main(void) { struct timeval tv[2]; struct timeval *now, *prev; int iterations = 0; now = &tv[0]; prev = &tv[1]; gettimeofday(prev, NULL); for (;;) { struct timeval *tmp; gettimeofday(now, NULL); if (!((now->tv_sec > prev->tv_sec) || (now->tv_sec == prev->tv_sec && now->tv_usec >= prev->tv_usec))) printf ("Err: prev: %d, %d, now: %d, %d, iter: %d\n", prev->tv_sec, prev->tv_usec, now->tv_sec, now->tv_usec, iterations); tmp = prev; prev = now; now = tmp; iterations++; } return iterations; } ---------------- ---------------- --- /usr/src/linux/arch/i386/kernel/time.c.multiread Sat Feb 9 22:24:51 2002 +++ /usr/src/linux/arch/i386/kernel/time.c.readback Sat Feb 9 20:36:41 2002 @@ -474,6 +474,7 @@ #ifdef CONFIG_CS5520 int count1, count2, count3; int n1, n2, n3; + int i, cont, status; #endif /* @@ -517,6 +518,26 @@ do_timer_interrupt(irq, NULL, regs); #else +#if 1 + for (i = 0, cont = 1; cont && ( i < 3 ); i++) { + spin_lock(&i8253_lock); + outb_p(0xf2, 0x43); /* read-back command */ + status = inb_p(0x40); + count = inb_p(0x40); + count |= inb_p(0x40) << 8; + spin_unlock(&i8253_lock); + + cont = status & (1 << 6); + } + + if (cont) + printk("PIT latch fails 3 times.\n"); + + count = ((LATCH-1) - count) * TICK_SIZE; + delay_at_last_interrupt = (count + LATCH/2) / LATCH; + } + do_timer_interrupt(irq, NULL, regs); +#else spin_lock(&i8253_lock); outb_p(0x00, 0x43); /* latch the count ASAP */ /* this codes comes from FreeBSD */ @@ -568,6 +589,7 @@ } do_timer_interrupt(irq, NULL, regs); +#endif #endif write_unlock(&xtime_lock); -- Hiroshi Miura --- miura@da-cha.org http://www.da-cha.org/ CCNA, Oracle Silver Master, Network Specialist(JITEC) My interest: http://www.cis.com.tw/Product/WS-U50R.htm - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/