Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: pciide: DMA vs. ATA133

6 views
Skip to first unread message

Sebastian Dehne

unread,
Nov 9, 2005, 9:55:52 AM11/9/05
to
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.

Tony Lambiris

unread,
Nov 9, 2005, 11:42:00 AM11/9/05
to
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

0 new messages