Re: pciide: DMA vs. ATA133

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: pciide: DMA vs. ATA133

Sebastian Dehne-3
Hi Tony,

It turns I'm having the same problem and saw you've done some research.

# dmesg| grep DMA
pciide0 at pci0 dev 15 function 0 "VIA VT82C571 IDE" rev 0x06: DMA,
channel 0 configured to compatibility, channel 1 configured to compatibility
wd0(pciide0:0:0): using PIO mode 4, DMA mode 2
wd1(pciide0:0:1): using PIO mode 4, DMA mode 2
wd2(pciide0:1:1): using PIO mode 4, DMA mode 2

What exact changes did you make to pciide.c in order to enable
Ultra-DMA? I see the switch at around line 2610 in pciide.c, but cannot
work out how to add PCI_PRODUCT_VIATECH_VT82C571.

I'm running 3.8.

thanks,

Sebastian

Tony Lambiris wrote:

> Man I must need sleep or something... this doesn't fix my problem, I
> forgot I had the extra case in the switch statement still in pciide.c.
> That did work, however, adding PCI_PRODUCT_VIATECH_VT82C571 as a case.
> Like I said before I don't know if this is the right way to do this, but
> it's a temporary fix for me.
>
> Over and out, sorry again for the noise.
>
> Tony Lambiris wrote:
>> Sorry for all the noise, this seems to have fixed it (from NetBSD):
>>
>> --- via82c586.c.orig    Mon Sep 12 19:38:35 2005
>> +++ via82c586.c Mon Sep 12 20:27:28 2005
>> @@ -256,9 +256,10 @@
>>                         reg = pci_conf_read(ph->ph_pc, ph->ph_tag,
>>                             VP3_CFG_PIRQ_REG);
>>                         shift = vp3_cfg_trigger_shift[i];
>> -                       /* XXX we only upgrade the trigger here */
>>                         if (trigger == IST_LEVEL)
>>                                 reg &= ~(VP3_CFG_TRIGGER_MASK << shift);
>> +                       else
>> +                               reg |= (VP3_CFG_TRIGGER_EDGE << shift);
>>                         pci_conf_write(ph->ph_pc, ph->ph_tag,
>>                             VP3_CFG_PIRQ_REG, reg);
>>                         break;
>>
>> Tony Lambiris wrote:
>>
>>> I forgot to ask, would it be bad practice to just add
>>> PCI_PRODUCT_VIATECH_VT82C571 to one of the cases in the switch
>>> statement? It seems like this might go a little deeper....
>>>
>>> Tony Lambiris wrote:
>>>
>>>> Well I thought I knew what the problem was (nope).. I found something
>>>> interesting though...
>>>>
>>>> The motherboards that don't setup UDMA properly uses a "VIA VT8237
>>>> ISA" for pcib; the one's that setup UDMA properly uses a "VIA VT8235
>>>> ISA". I added some debugging in pciide.c in function apollo_chip_map
>>>> on the switch statement, and the pcib_id it's switching on is 0x0571,
>>>> which in pcidevs is "VT82C571 IDE". Does that mean somewhere the
>>>> VT8237 chipset isn't being setup correctly or something?
>>>>
>>>> I'm a little confused at this juncture, any light that can be shed
>>>> would be greatly appriciated.
>>>>
>>>> Thanks.
>>>>
>>>> Tony Lambiris wrote:
>>>>
>>>>> I (think I) found the problem... I will be posting a patch shortly
>>>>> if I confirm my suspicions.
>>>>>
>>>>> Thanks.
>>>>>
>>>>> Tony Lambiris wrote:
>>>>>
>>>>>> We have some motherboards with (what we think) are the same chips
>>>>>> and revisions with the same hard drives, but some drives are being
>>>>>> detected as DMA and others as ATA133. Here is an example:
>>>>>>
>>>>>> pciide0 at pci0 dev 17 function 1 "VIA VT82C571 IDE" rev 0x06:
>>>>>> ATA133, channel 0 configured to compatibility, channel 1 configured
>>>>>> to compatibility
>>>>>> wd0 at pciide0 channel 0 drive 0: <WDC WD800BB-75JHC0>
>>>>>> wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 5
>>>>>>
>>>>>> pciide0 at pci0 dev 15 function 0 "VIA VT82C571 IDE" rev 0x06: DMA,
>>>>>> channel 0 configured to compatibility, channel 1 configured to
>>>>>> compatibility
>>>>>> wd0 at pciide0 channel 0 drive 0: <WDC WD800BB-75JHC0>
>>>>>> wd0(pciide0:0:0): using PIO mode 4, DMA mode 2
>>>>>>
>>>>>> As you can see it's the same IDE chipset, same revision, same
>>>>>> drives.. the only thing I can think of is it's an IDE ribbon issue,
>>>>>> but the ribbons we used (which were mixed from the cases and the
>>>>>> motherboard boxes), were brand new.
>>>>>>
>>>>>> Any suggestions?
>>>>>>
>>>>>> TIA.

Reply | Threaded
Open this post in threaded view
|

Re: pciide: DMA vs. ATA133

Tony Lambiris
It's due to chipset detection, so in the interm, I added this:
/usr/src/sys/dev/pci/pciide.c -- line 2650
case PCI_PRODUCT_VIATECH_VT82C571:

Or a diff:
--- pciide.c.orig       Wed Nov  9 10:35:24 2005
+++ pciide.c    Wed Nov  9 10:35:43 2005
@@ -2648,6 +2648,7 @@
                 sc->sc_wdcdev.UDMA_cap = 6;
                 break;
         case PCI_PRODUCT_VIATECH_VT8235_ISA:
+       case PCI_PRODUCT_VIATECH_VT82C571:
                 printf(": ATA133");
                 sc->sc_wdcdev.UDMA_cap = 6;
                 break;

You can copy/paste that in a file and run patch -p0 < file.diff

This isnt correct at all, but it works.



Sebastian Dehne wrote

> Hi Tony,
>
> It turns I'm having the same problem and saw you've done some research.
>
> # dmesg| grep DMA
> pciide0 at pci0 dev 15 function 0 "VIA VT82C571 IDE" rev 0x06: DMA,
> channel 0 configured to compatibility, channel 1 configured to compatibility
> wd0(pciide0:0:0): using PIO mode 4, DMA mode 2
> wd1(pciide0:0:1): using PIO mode 4, DMA mode 2
> wd2(pciide0:1:1): using PIO mode 4, DMA mode 2
>
> What exact changes did you make to pciide.c in order to enable
> Ultra-DMA? I see the switch at around line 2610 in pciide.c, but cannot
> work out how to add PCI_PRODUCT_VIATECH_VT82C571.
>
> I'm running 3.8.
>
> thanks,
>
> Sebastian
>
> Tony Lambiris wrote:
>
>>Man I must need sleep or something... this doesn't fix my problem, I
>>forgot I had the extra case in the switch statement still in pciide.c.
>>That did work, however, adding PCI_PRODUCT_VIATECH_VT82C571 as a case.
>>Like I said before I don't know if this is the right way to do this, but
>>it's a temporary fix for me.
>>
>>Over and out, sorry again for the noise.
>>
>>Tony Lambiris wrote:
>>
>>>Sorry for all the noise, this seems to have fixed it (from NetBSD):
>>>
>>>--- via82c586.c.orig    Mon Sep 12 19:38:35 2005
>>>+++ via82c586.c Mon Sep 12 20:27:28 2005
>>>@@ -256,9 +256,10 @@
>>>                        reg = pci_conf_read(ph->ph_pc, ph->ph_tag,
>>>                            VP3_CFG_PIRQ_REG);
>>>                        shift = vp3_cfg_trigger_shift[i];
>>>-                       /* XXX we only upgrade the trigger here */
>>>                        if (trigger == IST_LEVEL)
>>>                                reg &= ~(VP3_CFG_TRIGGER_MASK << shift);
>>>+                       else
>>>+                               reg |= (VP3_CFG_TRIGGER_EDGE << shift);
>>>                        pci_conf_write(ph->ph_pc, ph->ph_tag,
>>>                            VP3_CFG_PIRQ_REG, reg);
>>>                        break;
>>>
>>>Tony Lambiris wrote:
>>>
>>>
>>>>I forgot to ask, would it be bad practice to just add
>>>>PCI_PRODUCT_VIATECH_VT82C571 to one of the cases in the switch
>>>>statement? It seems like this might go a little deeper....
>>>>
>>>>Tony Lambiris wrote:
>>>>
>>>>
>>>>>Well I thought I knew what the problem was (nope).. I found something
>>>>>interesting though...
>>>>>
>>>>>The motherboards that don't setup UDMA properly uses a "VIA VT8237
>>>>>ISA" for pcib; the one's that setup UDMA properly uses a "VIA VT8235
>>>>>ISA". I added some debugging in pciide.c in function apollo_chip_map
>>>>>on the switch statement, and the pcib_id it's switching on is 0x0571,
>>>>>which in pcidevs is "VT82C571 IDE". Does that mean somewhere the
>>>>>VT8237 chipset isn't being setup correctly or something?
>>>>>
>>>>>I'm a little confused at this juncture, any light that can be shed
>>>>>would be greatly appriciated.
>>>>>
>>>>>Thanks.
>>>>>
>>>>>Tony Lambiris wrote:
>>>>>
>>>>>
>>>>>>I (think I) found the problem... I will be posting a patch shortly
>>>>>>if I confirm my suspicions.
>>>>>>
>>>>>>Thanks.
>>>>>>
>>>>>>Tony Lambiris wrote:
>>>>>>
>>>>>>
>>>>>>>We have some motherboards with (what we think) are the same chips
>>>>>>>and revisions with the same hard drives, but some drives are being
>>>>>>>detected as DMA and others as ATA133. Here is an example:
>>>>>>>
>>>>>>>pciide0 at pci0 dev 17 function 1 "VIA VT82C571 IDE" rev 0x06:
>>>>>>>ATA133, channel 0 configured to compatibility, channel 1 configured
>>>>>>>to compatibility
>>>>>>>wd0 at pciide0 channel 0 drive 0: <WDC WD800BB-75JHC0>
>>>>>>>wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 5
>>>>>>>
>>>>>>>pciide0 at pci0 dev 15 function 0 "VIA VT82C571 IDE" rev 0x06: DMA,
>>>>>>>channel 0 configured to compatibility, channel 1 configured to
>>>>>>>compatibility
>>>>>>>wd0 at pciide0 channel 0 drive 0: <WDC WD800BB-75JHC0>
>>>>>>>wd0(pciide0:0:0): using PIO mode 4, DMA mode 2
>>>>>>>
>>>>>>>As you can see it's the same IDE chipset, same revision, same
>>>>>>>drives.. the only thing I can think of is it's an IDE ribbon issue,
>>>>>>>but the ribbons we used (which were mixed from the cases and the
>>>>>>>motherboard boxes), were brand new.
>>>>>>>
>>>>>>>Any suggestions?
>>>>>>>
>>>>>>>TIA.