Victor Balada Diaz wrote:
Digging at linux source code i've found that they do some special things
for this chipset that i've been unable to find on our code. This is
linux code for my chipset:

371                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL |
372                                  AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_MSI |
373                                  AHCI_HFLAG_SECT255),

File and the rest of the code in here[3].

As i saw AHCI_HFLAG_NO_MSI i tried doing the easiest thing i could
think of, switching MSI and MSI-x off for the whole system, so
i added to /boot/loader.conf this tunables:

FreeBSD's ata(4) driver doesn't support MSI. This flag in linux's libata used in

    if ((hpriv->flags & AHCI_HFLAG_NO_MSI) || pci_enable_msi(pdev))
                pci_intx(pdev, 1);

In FreeBSD's code we have the same:

    /* enable PCI interrupt */
    pci_write_config(dev, PCIR_COMMAND,
                     pci_read_config(dev, PCIR_COMMAND, 2) & ~0x0400, 2);

AHCI_HFLAG_IGN_SERR_INTERNAL flag targeted to ignore SERR_INTERNAL errors.
FreeBSD's ata(4) driver ignores they too.

AHCI_HFLAG_32BIT_ONLY flag limits to use 32-bit DMA only.
If AHCI CAP register reports that controller supports 64-bit DMA driver will 
use 64-bit.
So i think there can be added one quirk for you, but i'm not sure that problem 
is here..

AHCI_HFLAG_SECT255 flag limits I/O operation to 255 sectors, FreeBSD uses 
128-limit
by default.

--
WBR, Andrey V. Elsukov

_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to