On Mon, 08 Jan 2007 01:00:00 +0900
Hiroshi Miura <[EMAIL PROTECTED]> wrote:

> Hi Takada-san,
> 
> It is  obviously bad.
> These part is added several years ago by my post.
> A cyrix.c try to find chip because of chip hardware bug affected
> to timer which has started early.
> 
> Now, these chips have already been obsolete.
> There are 2 options. One is simply remove these functionality.
> The other is to move it to compile time ifdef that is off by default.
> 
> For user who use in embbeded environment,
> I wanna change it to ifdef.
> 
> Thank you for report!
> 
> Hiroshi

What do the you think of this as a solution ?

Signed-off-by: Alan Cox <[EMAIL PROTECTED]>

--- linux.vanilla-2.6.20-rc4/arch/i386/kernel/cpu/cyrix.c       2007-01-01 
21:40:52.000000000 +0000
+++ linux-2.6.20-rc4/arch/i386/kernel/cpu/cyrix.c       2007-01-08 
16:36:31.762654720 +0000
@@ -196,6 +196,7 @@
        unsigned char dir0, dir0_msn, dir0_lsn, dir1 = 0;
        char *buf = c->x86_model_id;
        const char *p = NULL;
+       u16 vendor, device;
 
        /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
           3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
@@ -257,7 +258,6 @@
                break;
 
        case 4: /* MediaGX/GXm or Geode GXM/GXLV/GX1 */
-#ifdef CONFIG_PCI
                /* It isn't really a PCI quirk directly, but the cure is the
                   same. The MediaGX has deep magic SMM stuff that handles the
                   SB emulation. It thows away the fifo on disable_dma() which
@@ -265,22 +265,26 @@
 
                   Bug2: VSA1 has a wrap bug so that using maximum sized DMA 
                   causes bad things. According to NatSemi VSA2 has another
-                  bug to do with 'hlt'. I've not seen any boards using VSA2
-                  and X doesn't seem to support it either so who cares 8).
-                  VSA1 we work around however.
+                  bug to do with 'hlt'.
                */
 
                printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA 
bugs.\n");
                isa_dma_bridge_buggy = 2;
-
+               
+               /* We do this before the PCI layer is running. However we 
+                  are safe here as we know the bridge must be a Cyrix 
+                  companion and must be present */
+                  
+               pci_conf1_read(0, 0, PCI_DEVFN(0x12, 0), 0, 4, &vendor);
+               pci_conf1_read(0, 0, PCI_DEVFN(0x12, 0), 4, 4, &device);
 
                /*
                 *  The 5510/5520 companion chips have a funky PIT.
                 */  
-               if (pci_dev_present(cyrix_55x0))
+               if (vendor == PCI_VENDOR_ID_CYRIX && (device == 
PCI_DEVICE_ID_CYRIX_5510 || device == PCI_DEVICE_ID_CYRIX_5520))
                        pit_latch_buggy = 1;
-#endif
-               c->x86_cache_size=16;   /* Yep 16K integrated cache thats it */
+
+               c->x86_cache_size=16;   /* Yep 16K integrated cache thats it 
(12K in X) */
 
                /* GXm supports extended cpuid levels 'ala' AMD */
                if (c->cpuid_level == 2) {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to