[U-Boot-Users] Please explain this code in drivers/pci.c

Donald White
2003-05-18T23:39:38Z

Group,

Please help me to understand the following code. It occurs in drivers/pci.c in the
function pci_hose_config_device(). I have ported U-Boot 0.3.0 and HHL 2.0 to our
custom MPC8265A board. It has one device on the PCI bus. The driver develop was
wanting a specific memory space allocation for the device. So I created a PCI
configuration table with the memory base of 0x90000000. The card wants 4 regions 0f
0x8000 bytes in size. The driver writer thinks this should be 0x90000000,
0x90008000, 0x90010000 and 0x90018000. This brings us to the code snippet:

bar_size = ~(bar_response & PCI_BASE_ADDRESS_MEM_MASK) + 1;
bar_value = mem;

mem = ((mem - 1) | (bar_size - 1)) + 1;

The value of bar_response is 0xffff8008 which looks good. This gives bar size of
0x8000 which also looks good. The value of mem is initially 0x90000000. So,
(mem - 1) = 0x8fffffff and (bar_size - 1) = 0x7fff). When these are or'd one gets
0x8fffffff and adding 1 gives 0x90000000. This result is that the card is given 4
address bases all at 0x90000000.

Thanks for any help,

Don