All of lore.kernel.org
 help / color / mirror / Atom feed
From: thomas schorpp <t.schorpp@gmx.de>
To: linux-kernel@vger.kernel.org
Subject: [BUG][x86_64]pci layer may report wrong iomem resources data to drivers
Date: Fri, 23 Mar 2007 20:35:44 +0100	[thread overview]
Message-ID: <46042C10.3080407@gmx.de> (raw)

lo,

aic7xxx driver mmio / dma on x86_64 linux broken here.

i need some comments and further investigation advice on this:

(resend, mozilla misconfig )

> thomas schorpp wrote:
>> James Bottomley wrote:
>>> On Fri, 2007-03-23 at 17:28 +0100, thomas schorpp wrote:
>>>>> i agree for this to be a 32bit dma busmaster chip,
>>>>> since pci_resource_flags and lspci say 64bit mem resource type
>>>>>
>>>>> aic7xxx: pci_resource_start fffff000 *maddr 20000 mem64 4
>>>>>
>>
>> static int
>> ahc_linux_pci_reserve_mem_region(struct ahc_softc *ahc,
>>                                 u_long *bus_addr,
>>                                 uint8_t __iomem **maddr)
>> {
>> //      u_long  start;
>>        u_long  len;
>>        int     error;
>>        uint64_t start;
>> ...
>>        printk(KERN_WARNING "aic7xxx: pci_resource_start 0x%llx mem64 0x%lx\n", start, pci_resource_flags(ahc->dev_softc, 1) & PCI_BASE_ADDRESS_MEM_TYPE_64 ); //schorpp
>>        return (error);
>>
>> aic7xxx: pci_resource_start 0xffffff000 mem64 0x4
>> -----------------------------------------------^
>>
>> just to doublecheck the situation, posted lspci already.
>>
>> will check next, if
>>       len = pci_resource_len(ahc->dev_softc, 1);
>>        if (start != 0) {
>>                *bus_addr = start;
>> //              if (request_mem_region(start, 0x1000, "aic7xxx") == 0)
>>                if (request_mem_region(start, len, "aic7xxx") == 0)
>>
>> succeeds.
> 
> no. so the pci layer reports wrong start:
> 
>        start = pci_resource_start(ahc->dev_softc, 1);
>        len = pci_resource_len(ahc->dev_softc, 1);
>        if (start != 0) {
>                *bus_addr = start;
> //              if (request_mem_region(start, 0x1000, "aic7xxx") == 0)
>                if (request_mem_region(start, len, "aic7xxx") == 0)
>                        error = ENOMEM;
>        printk(KERN_WARNING "aic7xxx: req_mem_region 0x%x memlen 0x%lx \n", error, len ); //schorpp
> 
> tom1:~# dmesg |grep aic
> aic7xxx: DMA_32BIT_MASK
> aic7xxx: req_mem_region 0x0 memlen 0x1000
> aic7xxx: pci_resource_start 0xffffff000 *maddr 0x20000 mem64 0x4
> aic7xxx: PCI Device 0:6:0 failed memory mapped test.  Using PIO.
>        aic7892: Ultra160 Wide Channel A, SCSI Id=7, 32/253 SCBs
> 
> 
>>
>>>>> we've a bug in the x86_64 linux pci config, BIOS is ok, the hardware worked fine in a winxp_x64 test setup a few months ago.
>>>>>
>>>>> will ask LKML.
>>>>>
>>>>> y
>>>>> tom
>>>> sorry, wrong according to http://download.adaptec.com/pdfs/aic7892.pdf.
>>>>
>>>> "66 MHz, 64-bit, PCI interface that
>>>> supports zero wait-state memory;
>>>> also operates on 33 MHz, 32-bit
>>>> PCI busses"
>>>>
>>>> this chip is capable of 64bit addressing, as pci_resource_nnnn (checking this) on x86_64 platform and lspci on x86_64 *and* AMDK7 configured kernels reports, even on PCI/32, right?
>>>> or is it impossible to do multiplexed 64bit mem addressing on PCI/32?
>>>
>>> It can only do 37 bit addressing ... only the aic79xx can do the full 64
>>> bits, so I suspect it should never get a 64 bit BAR, since it wouldn't
>>> be able to decode the full 32 bits.  I can fix the mmio check not to
>>> hang, but the card won't actually work mmio until whatever's assigning
>>> the BAR above 32 bits is fixed (that could either be a kernel PCI bug or
>>> a BIOS bug).
>>>
>>
>> ok, i trust in that. adaptor bios and mainboard bios *are* out, winxp_x64 driver handled all.
>> so agree on kernel pci hal issue.
>> but what for         const uint64_t   mask_39bit = 0x7FFFFFFFFFULL;
>> then?
>>
>>>>
>>>> can adaptec.inc pls comment? since the aha19160 card is still in production state, i assume they want to have a linux x86_64 dma capable driver. so far it is not, or can other users having this card pls confirm my pci system broken?
>>>
>>> James
>>>
>>>
>>
>> y
>> tom
>>
>> -
>> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


             reply	other threads:[~2007-03-23 19:35 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-23 19:35 thomas schorpp [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-03-23 19:28 [BUG][x86_64]pci layer may report wrong iomem resources data to drivers thomas schorpp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46042C10.3080407@gmx.de \
    --to=t.schorpp@gmx.de \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.