[OpenBIOS] [PATCH] Add USB OHCI + HID driver
BALATON Zoltan
balaton at eik.bme.hu
Mon Jun 2 21:24:16 CEST 2014
On Mon, 2 Jun 2014, Alexander Graf wrote:
>> @@ -883,6 +886,21 @@ int i82378_config_cb(const pci_config_t *config)
>> return 0;
>> }
>> +int usb_ohci_config_cb(const pci_config_t *config)
>> +{
>> +#ifdef CONFIG_DRIVER_USB
>> + pci_addr addr = 0x80000000u | config->dev;
>
> Where does this offset come from? Don't we have proper helpers for this?
In include/arch/ppc/pci.h:
#define PCI_ADDR(bus, dev, fn) \
((pci_addr) (0x80000000u \
| (uint32_t) (bus) << 16 \
| (uint32_t) (dev) << 11 \
| (uint32_t) (fn) << 8))
#define PCI_BUS(pcidev) ((uint8_t) ((pcidev) >> 16))
#define PCI_DEV(pcidev) ((uint8_t) ((pcidev) >> 11) & 0x1f)
#define PCI_FN(pcidev) ((uint8_t) ((pcidev) >> 8) & 7)
In drivers/pci.c:ob_configure_pci_device()
config.dev = addr & 0x00FFFFFF;
A possible alternative would be
PCI_ADDR(PCI_BUS(config->dev), PCI_DEV(config->dev), PCI_FN(config->dev))
Is that any better?
>> + 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.)
Regards,
BALATON Zoltan
More information about the OpenBIOS
mailing list