minskey guo wrote:
> Christian Kaiser 写道:
>> Garrett D'Amore wrote:
>>  
>>> Christian Kaiser wrote:
>>>    
>>>> Hi all,
>>>>
>>>> I am currently porting a driver from Linux to Solaris.
>>>>
>>>> The BAR description in the PCI config space looks like this:
>>>>
>>>> BAR0, Offset 0x10, Value 0xcbdc0000
>>>> BAR1, Offset 0x14, Value 0x00000000
>>>> BAR2, Offset 0x18, Value 0xc4000000
>>>> BAR3, Offset 0x1c, Value 0xc0000000
>>>> BAR4, Offset 0x20, Value 0xbc000000
>>>> BAR5, Offset 0x24, Value 0xb8000000
>>>>
>>>> ddi_dev_nregs returns 6 register sets what is correct but for 
>>>> ddi_dev_regsize I don't get the zero size value for BAR1 (which 
>>>> would be correct) but the size of BAR2. I get an error running 
>>>> ddi_dev_regsize with rnumber=6. It seems that Solaris renumbers the 
>>>> register sets in my special case where one BAR1 value is 0x0 and the 
>>>> size is 0. The same applies to ddi_regs_map_setup.
>>>>
>>>> Is my assumption concerning the renumbering correct? Isn't that 
>>>> confusing?
>>>>
>>>> Regards,
>>>> Christian
>>>>
>>>>         
>>> For PCI devices, the starting index is 1, not 0.  (0 is reserved to 
>>> indicate PCI configuration space.)
>>>     
>>
>> And I am aware of this.
>>
>>  
>>> I don't know why with rnumber 6 you get an error -- that's 
>>> surprising.  I'd have expected rnumber 6 to return the settings for 
>>> BAR5 above.
>>>     
>>
>> OK, let me clarify this:
>>
>> BAR layout
>> ==========
>>
>> BAR 0  Offset 0x10  Value 0xcbdc0000  Size 256K
>> BAR 1  Offset 0x14  Value 0x00000000  Size    0
>> BAR 2  Offset 0x18  Value 0xc4000000  Size  64M
>> BAR 3  Offset 0x1c  Value 0xc0000000  Size  64M
>> BAR 4  Offset 0x20  Value 0xbc000000  Size  64M
>> BAR 5  Offset 0x24  Value 0xb8000000  Size  64M
>>
>> Using ddi_dev_regsize()
>> =======================
>>
>> rnumber=1  Size 256K
>> rnumber=2  Size  64M
>> rnumber=3  Size  64M
>> rnumber=4  Size  64M
>> rnumber=5  Size  64M
>> rnumber=6  n/a (error)
>>
>> Do you understand now what I meant by "renumbering"?
>>
>>   
> 
> It's weird. Is it possible that this hardware supports 64bit addressing.
> What's the exact value if you do pci read from BAR0 ? Are the bit2:1
> of BAR0 10B ? Or can you post the prtconf -vp for your device ?
> 

The spec says: "32-bit or 64-bit BARs supported" and you can see that 
all offsets (see above) of the BARs are 64bit.

OK... I dont't understand this at all. I did a 32-bit read on all BARs. 
Maybe you can explain me this?

0x10 0xc8300000
0x12 0xbeefc830
0x14 0x0
0x16 0x0
0x18 0xd8000000
0x20 0xd0000000
0x22 0xbeefd000
0x24 0xcc000000
0x26 0xcc00

However, this is what I get from prtconf -vp

             Node 0x000020
                 assigned-addresses: 
82050010.00000000.c8300000.00000000.00040000.82050018.00000000.d8000000.00000000.04000000.8205001c.00000000.d4000000.00000000.04000000.82050020.00000000.d0000000.00000000.04000000.82050024.00000000.cc000000.00000000.04000000
                 reg: 
00050000.00000000.00000000.00000000.00000000.02050010.00000000.00000000.00000000.00040000.02050018.00000000.00000000.00000000.04000000.0205001c.00000000.00000000.00000000.04000000.02050020.00000000.00000000.00000000.04000000.02050024.00000000.00000000.00000000.04000000
                 compatible: 'pciex9902,101.2' + 'pciex9902,101' + 
'pciexclass,068000' + 'pciexclass,0680' + 'pci9902,101.2' + 
'pci9902,101' + 'pciclass,068000' + 'pciclass,0680'
                 model:  'Bridge device'
                 power-consumption:  00000001.00000001
                 devsel-speed:  00000000
                 interrupts:  00000001
                 unit-address:  '0'
                 class-code:  00068000
                 revision-id:  00000002
                 vendor-id:  00009902
                 device-id:  00000101
                 pcie-capid-pointer:  00000060
                 pcie-capid-reg:  00000001
                 name:  'pci9902,101'


Christian

-- 
Christian Kaiser, Software Engineer, Dolphin Interconnect Solutions
http//www.dolphinics.com
_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to