On 06/03/2014 01:26 AM, BALATON Zoltan wrote:
On Tue, 3 Jun 2014, Alexander Graf wrote:
How about we leave the PCI magic be PCI magic and just provide a function that enables bus mastering?
- uint16_t cmd;
- cmd = pci_config_read16(addr, PCI_COMMAND);
- cmd |= PCI_COMMAND_BUS_MASTER;
Is this really the only bit that should be enabled? Who maps the BARs?
The existing code already takes care of configuring pci devices but did not set the bus master bit. (I also had to do the same for the network card for DMA to work correctly. This will be in a separate patch.)
Ok, I think this might fall apart on real hardware, but I doubt anyone really cares these days, so just setting BUS_MASTER works for me.
Sorry but I'm not sure I can follow what you mean. Why setting BUS_MASTER in PCI config would fail on real hardware?
See Segher's reply :). Bus mastering is non-trivial on real hardware, especially when you're firmware.
How and where could a function be provided that enables bus mastering?
Add pci details should just remain in pci.c. Export a function to enable bus mastering inside there and we should be safe from an abstraction level pov.
Alex