Broadcom MMIO base address
Posted: Thu Apr 30, 2015 5:54 pm
Hi,
I am trying to configure the Broadcom Netxtream II 57xx network card on an IBM x3650 M2.
The problem I have is in detecting the Memory base address of the card.
When I read the PCI device header I have the following:
Device ID: 0x164C
Vendor ID: 0x14E4
Header: 0x0
BAR0: 0xce0d -> 0b1100111000001101
Memory Space Indicator: I/O
Type: Anywhere in 64-bit Address (How ??)
Prefetchable: Enabled
BAR1: 0xf000ff54: 0b11110000000000001111111101010100
Memory Space Indicator: Memory
Type: Anywhere in 64-bit Address
Prefetchable: Enabled
Intr: 0xB
The values in the BAR does not work with me, the card does not respond to the drivers command when I issue them to the memory space I detected in BAR1.
I did something sneaky; I started up Linux on the same machine and issued lspci -vvv and I got the memory base address to be 0xce000000.
I hard wired this value into my code and I loaded my OS and the card started responding to the driver.
My problem is that I don't know how Linux got the 0xce000000 address.
Bar0 looks close to the address but it is 32-bit.
The same PCI header code works with the Intel e1000/e network cards with no problems, and detect the addresses correctly.
Any ideas ?
Thanks,
Karim.
I am trying to configure the Broadcom Netxtream II 57xx network card on an IBM x3650 M2.
The problem I have is in detecting the Memory base address of the card.
When I read the PCI device header I have the following:
Device ID: 0x164C
Vendor ID: 0x14E4
Header: 0x0
BAR0: 0xce0d -> 0b1100111000001101
Memory Space Indicator: I/O
Type: Anywhere in 64-bit Address (How ??)
Prefetchable: Enabled
BAR1: 0xf000ff54: 0b11110000000000001111111101010100
Memory Space Indicator: Memory
Type: Anywhere in 64-bit Address
Prefetchable: Enabled
Intr: 0xB
The values in the BAR does not work with me, the card does not respond to the drivers command when I issue them to the memory space I detected in BAR1.
I did something sneaky; I started up Linux on the same machine and issued lspci -vvv and I got the memory base address to be 0xce000000.
I hard wired this value into my code and I loaded my OS and the card started responding to the driver.
My problem is that I don't know how Linux got the 0xce000000 address.
Bar0 looks close to the address but it is 32-bit.
The same PCI header code works with the Intel e1000/e network cards with no problems, and detect the addresses correctly.
Any ideas ?
Thanks,
Karim.