[OpenBIOS] [PATCH] Add USB OHCI + HID driver

Alexander Graf agraf at suse.de
Mon Jun 2 14:07:37 CEST 2014


On 01.06.14 23:55, BALATON Zoltan wrote:
> This driver is ported from CoreBoot's libpayload and fixed to work on
> big endian CPUs (tested on PPC with QEMU). It is enough to support a
> USB keyboard on an Apple Keylargo OHCI compliant USB host and makes
> OpenBIOS usable on qemu-system-ppc64 with mac99 machine type as well
> as allows to emulate PowerMac3,1 better.
>
> Signed-off-by: BALATON Zoltan <balaton at eik.bme.hu>
> ---
>   openbios-devel/config/examples/ppc_config.xml |   3 +
>   openbios-devel/drivers/Kconfig                |  20 +
>   openbios-devel/drivers/build.xml              |   4 +
>   openbios-devel/drivers/pci.c                  |  18 +
>   openbios-devel/drivers/pci.h                  |   1 +
>   openbios-devel/drivers/pci_database.c         |  18 +-
>   openbios-devel/drivers/pci_database.h         |   1 +
>   openbios-devel/drivers/usb.c                  | 587 ++++++++++++++++
>   openbios-devel/drivers/usb.h                  | 357 ++++++++++
>   openbios-devel/drivers/usbhid.c               | 579 ++++++++++++++++
>   openbios-devel/drivers/usbohci.c              | 920 ++++++++++++++++++++++++++
>   openbios-devel/drivers/usbohci.h              |  45 ++
>   openbios-devel/drivers/usbohci_private.h      | 270 ++++++++
>   openbios-devel/drivers/usbohci_rh.c           | 212 ++++++
>   openbios-devel/include/drivers/pci.h          |   1 +
>   openbios-devel/include/drivers/usb.h          |   8 +
>   16 files changed, 3043 insertions(+), 1 deletion(-)
>   create mode 100644 openbios-devel/drivers/usb.c
>   create mode 100644 openbios-devel/drivers/usb.h
>   create mode 100644 openbios-devel/drivers/usbhid.c
>   create mode 100644 openbios-devel/drivers/usbohci.c
>   create mode 100644 openbios-devel/drivers/usbohci.h
>   create mode 100644 openbios-devel/drivers/usbohci_private.h
>   create mode 100644 openbios-devel/drivers/usbohci_rh.c
>   create mode 100644 openbios-devel/include/drivers/usb.h
>
> diff --git a/openbios-devel/config/examples/ppc_config.xml b/openbios-devel/config/examples/ppc_config.xml
> index 621b65d..4c14eb6 100644
> --- a/openbios-devel/config/examples/ppc_config.xml
> +++ b/openbios-devel/config/examples/ppc_config.xml
> @@ -80,3 +80,6 @@
>     <option name="CONFIG_DRIVER_ESCC" type="boolean" value="true"/>
>     <option name="CONFIG_DRIVER_FW_CFG" type="boolean" value="true"/>
>     <option name="CONFIG_FW_CFG_ADDR" type="integer" value="0xf0000510"/>
> +  <option name="CONFIG_DRIVER_USB" type="boolean" value="true"/>
> +  <option name="CONFIG_DEBUG_USB" type="boolean" value="false"/>
> +  <option name="CONFIG_USB_HID" type="boolean" value="true"/>
> diff --git a/openbios-devel/drivers/Kconfig b/openbios-devel/drivers/Kconfig
> index 7be334b..ce7e7ac 100644
> --- a/openbios-devel/drivers/Kconfig
> +++ b/openbios-devel/drivers/Kconfig
> @@ -36,4 +36,24 @@ config DEBUG_IDE
>   	help
>   	  Debug IDE driver
>   	
> +config DRIVER_USB
> +	bool "USB Support"
> +	default n
> +	help
> +	  If you want to be able to use USB devices, enable this option.
> +
> +config DEBUG_USB
> +	depends DRIVER_USB
> +	bool "Debug USB driver"
> +	default n
> +	help
> +	  Debug USB driver
> +	
> +config USB_HID
> +	depends DRIVER_USB
> +	bool "USB driver for HID devices"
> +	default n
> +	help
> +	  If you want to be able to use USB keyboard, enable this option.
> +	
>   endmenu
> diff --git a/openbios-devel/drivers/build.xml b/openbios-devel/drivers/build.xml
> index edec6b5..bd1abd3 100644
> --- a/openbios-devel/drivers/build.xml
> +++ b/openbios-devel/drivers/build.xml
> @@ -22,6 +22,10 @@
>     <object source="pc_serial.c" condition="DRIVER_PC_SERIAL"/>
>     <object source="escc.c" condition="DRIVER_ESCC"/>
>     <object source="fw_cfg.c" condition="DRIVER_FW_CFG"/>
> +  <object source="usb.c" condition="DRIVER_USB"/>
> +  <object source="usbhid.c" condition="USB_HID"/>
> +  <object source="usbohci.c" condition="DRIVER_USB"/>
> +  <object source="usbohci_rh.c" condition="DRIVER_USB"/>
>    </library>
>   
>    <dictionary name="openbios" target="forth">
> diff --git a/openbios-devel/drivers/pci.c b/openbios-devel/drivers/pci.c
> index ca92d63..ca4de87 100644
> --- a/openbios-devel/drivers/pci.c
> +++ b/openbios-devel/drivers/pci.c
> @@ -34,6 +34,9 @@
>   #include "cuda.h"
>   #include "macio.h"
>   #endif
> +#ifdef CONFIG_DRIVER_USB
> +#include "drivers/usb.h"
> +#endif
>   
>   #if defined (CONFIG_DEBUG_PCI)
>   # define PCI_DPRINTF(format, ...) printk(format, ## __VA_ARGS__)
> @@ -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?

> +    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?

Apart from these minor nits I am in favor of this patch, but would like 
an ack from Mark before I apply it ;).


Alex

> +    pci_config_write16(addr, PCI_COMMAND, cmd);
> +
> +    ob_usb_ohci_init(config->path, config->assigned[0] & ~0x0000000F);
> +#endif
> +    return 0;
> +}
> +
>   static void ob_pci_add_properties(phandle_t phandle,
>                                     pci_addr addr, const pci_dev_t *pci_dev,
>                                     const pci_config_t *config, int num_bars)
>




More information about the OpenBIOS mailing list