Help with RaspberryPI USB on Fiasco.OC+Genode
Reinier Millo Sánchez
rmillo at ...210...
Tue Mar 24 05:20:18 CET 2015
Hi Norman
Thanks for your suggestions. I have reviewed the interrupt controller on
Fiasco.OC and have tried to compare it with the interrupt controller on
base-hw. After that and a little search on Google about the
RaspberryPI's interrupts
(http://xinu.mscs.mu.edu/BCM2835_Interrupt_Controller), I have
understood the problem, and fixed it.
On 03/23/2015 08:08 AM, Norman Feske wrote:
> Hello Reinier,
>
>> After that, I have tried to log the USB driver IRQ, setting
>>
>> #define DEBUG_IRQ 1
>>
>> in the file
>>
>> repos/dde_linux/src/lib/usb/include/lx_emul.h
>>
>> Setting this value, the USB driver will log every IRQ handled by the
>> function *_handle()* and *_handle_one()***in the USB driver. In the
>> Genode bare metal hardware it works fine, but when tried it with
>> Fiasco.OC, the IRQ handler *_handle()* and *_handle_one()* are never logged.
> apparently, the USB driver initializes the USB controller (so the SoF
> interrupts start appearing at the kernel) but it never receives any
> interrupt. The issue could be the way of how IRQs are named by Fiasco.OC
> and base-hw. Because of the hierarchic way of how the BCM's IRQ
> controller works, the OS kernel developer has to come up with an
> enumeration scheme. The scheme I introduced for the base-hw kernel is
> defined at repos/base/include/platform/rpi/drivers/board_base.h:
>
>
> https://github.com/genodelabs/genode/blob/master/repos/base/include/platform/rpi/drivers/board_base.h
>
> /*
> * IRQ numbers 0..7 refer to the basic IRQs.
> * IRQ numbers 8..39 refer to GPU IRQs 0..31.
> * IRQ numbers 40..71 refer to GPU IRQs 32..63.
> */
Fiasco.OC use an scheme very similar to base-hw but change the
numeration of the interrupts. In Fiasco.OC the USB interrupt correspond
to number 9, not 17.
> The DWC-OTG controller uses IRQ 17. So it is not a basic IRQ. Hence, its
> number is subjected to the enumeration scheme above. I do not know how
> Fiasco.OC's naming scheme for IRQs on the Raspberry Pi looks like but it
> may be different. To investigate, I'd recommend you to instrument both
> kernels to log the accesses to the interrupt-controller registers. Look
> if each of them touch the same bits once the USB driver is started.
>
> Cheers
> Norman
>
There is a patch with small changes on Genode to allow compile the USB
Driver for base-hw y foc-rpi:
------------- repos/base/include/platform/rpi/drivers/board_base.h
-------------
index 2cca3f6..139337f 100644
@@ -23,7 +23,7 @@ namespace Genode
{
enum {
RAM_0_BASE = 0x00000000,
- RAM_0_SIZE = 0x10000000, /* XXX ? */
+ RAM_0_SIZE = 0x20000000, /* XXX ? */
MMIO_0_BASE = 0x20000000,
MMIO_0_SIZE = 0x02000000,
---------------- repos/dde_linux/include/usb/foc_rpi/usb_irq.h
----------------
new file mode 100644
index 0000000..a99b10a
@@ -0,0 +1,14 @@
+/*
+ * \brief USB: DWC-OTG RaspberryPI Interrupt (base-foc)
+ * \author Reinier Millo Sánchez
+ * \date 2015-03-23
+ */
+
+#ifndef _INCLUDE_USB_IRQ_H_
+#define _INCLUDE_USB_IRQ_H_
+
+enum{
+ DWC_IRQ = 9,
+};
+
+#endif /* _INCLUDE_USB_IRQ_H_ */
----------------- repos/dde_linux/include/usb/hw_rpi/usb_irq.h
-----------------
new file mode 100644
index 0000000..bcf7913
@@ -0,0 +1,14 @@
+/*
+ * \brief USB: DWC-OTG RaspberryPI Interrupt (base-hw)
+ * \author Reinier Millo Sánchez
+ * \date 2015-03-23
+ */
+
+#ifndef _INCLUDE_USB_IRQ_H_
+#define _INCLUDE_USB_IRQ_H_
+
+enum{
+ DWC_IRQ = 17,
+};
+
+#endif /* _INCLUDE_USB_IRQ_H_ */
-------------------- repos/dde_linux/lib/mk/foc_rpi/usb.mk
--------------------
new file mode 100644
index 0000000..df03613
@@ -0,0 +1,3 @@
+include $(REP_DIR)/lib/mk/usb_rpi.inc
+
+INC_DIR += $(REP_DIR)/include/usb/foc_rpi
\ No newline at end of file
------------------ repos/dde_linux/lib/mk/platform_rpi/usb.mk
------------------
index 4021104..5a7f1ea 100644
@@ -1,48 +1,3 @@
-SRC_C += \
- usb/host/dwc_otg/dwc_otg/dwc_otg_adp.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_attr.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_cfi.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_cil.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_cil_intr.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_driver.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_hcd.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_hcd_ddma.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_hcd_intr.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_hcd_linux.c \
- usb/host/dwc_otg/dwc_otg/dwc_otg_hcd_queue.c
+include $(REP_DIR)/lib/mk/usb_rpi.inc
-SRC_C += \
- usb/host/dwc_otg/dwc_common_port/dwc_cc.c \
- usb/host/dwc_otg/dwc_common_port/dwc_common_linux.c \
- usb/host/dwc_otg/dwc_common_port/dwc_crypto.c \
- usb/host/dwc_otg/dwc_common_port/dwc_dh.c \
- usb/host/dwc_otg/dwc_common_port/dwc_mem.c \
- usb/host/dwc_otg/dwc_common_port/dwc_modpow.c \
- usb/host/dwc_otg/dwc_common_port/dwc_notifier.c
-
-SRC_C += net/usb/usbnet.c net/usb/smsc95xx.c
-
-include $(REP_DIR)/lib/mk/usb.inc
-include $(REP_DIR)/lib/mk/armv6/usb.inc
-
-CC_OPT += -DDWC_LINUX -DPLATFORM_INTERFACE
-
-# needed for 'ehci-hcd.c', which we don't use on the rpi, but it is
still
-# part of the generic usb USB driver
-CC_OPT += -DCONFIG_USB_EHCI_PCI=1
-
-# for 'dwc_otg_hcd_linux.c' for enabling the FIQ, which we don't
use anyway
-CC_OPT += -DINTERRUPT_VC_USB=9
-
-# for 'dwc_otg_driver.c' for preventing calls to set_irq_type
-CC_OPT += -DIRQF_TRIGGER_LOW=1
-
-INC_DIR += $(LX_CONTRIB_DIR)/drivers/usb/host/dwc_otg/dwc_common_port \
- $(LX_CONTRIB_DIR)/drivers/usb/host/dwc_otg/dwc_otg
-SRC_CC += platform.cc
-
-vpath platform.cc $(LIB_DIR)/arm/platform_rpi
-vpath %.c $(LX_CONTRIB_DIR)/drivers/net/usb
-
-# enable C++11 support
-CC_CXX_OPT += -std=gnu++11
+INC_DIR += $(REP_DIR)/include/usb/hw_rpi
\ No newline at end of file
---------------------- repos/dde_linux/lib/mk/usb_rpi.inc
----------------------
similarity index 100%
copy from repos/dde_linux/lib/mk/platform_rpi/usb.mk
copy to repos/dde_linux/lib/mk/usb_rpi.inc
----------------------- repos/dde_linux/run/usb_hid.run
-----------------------
index 714d55d..a3ced48 100644
@@ -13,6 +13,7 @@ lappend_if [have_spec acpi] build_components
drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci
lappend_if [have_spec pci] build_components
drivers/pci/device_pd
lappend_if [have_spec platform_arndale] build_components
drivers/platform
+lappend_if [have_spec platform_rpi] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio
build $build_components
@@ -48,6 +49,13 @@ append_if [have_spec platform_arndale] config {
<provides><service name="Regulator"/></provides>
</start>}
+append_if [have_spec platform_rpi] config {
+ <start name="platform_drv">
+ <resource name="RAM" quantum="1M"/>
+ <provides><service name="Platform"/></provides>
+ <config/>
+ </start>}
+
append_if [have_spec gpio] config {
<start name="gpio_drv">
<resource name="RAM" quantum="4M"/>
@@ -107,6 +115,7 @@ lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec platform_arndale] boot_modules platform_drv
+lappend_if [have_spec platform_rpi] boot_modules platform_drv
lappend_if [have_spec gpio] boot_modules gpio_drv
build_boot_image $boot_modules
----------- repos/dde_linux/src/lib/usb/arm/platform_rpi/platform.cc
-----------
index ae7654f..4c0a05d 100644
@@ -29,6 +29,9 @@
#include <dwc_otg_dbg.h>
#undef new
+#include <usb_irq.h>
+
+
using namespace Genode;
@@ -39,8 +42,6 @@ using namespace Genode;
enum {
DWC_BASE = 0x20980000,
DWC_SIZE = 0x20000,
-
- DWC_IRQ = 17,
};
Now I'll try more complex examples on Fiasco.OC+Genode.
Best regards
--
Lic. Reinier Millo Sánchez
Centro de Estudios de Informática
Universidad Central "Marta Abreu" de Las Villas
"antes de discutir ... respira;
antes de hablar ... escucha;
antes de escribir ... piensa;
antes de herir ... siente;
antes de rendirte ... intenta;
antes de morir ... vive"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.genode.org/pipermail/users/attachments/20150324/56cfd342/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rmillo.vcf
Type: text/x-vcard
Size: 519 bytes
Desc: not available
URL: <http://lists.genode.org/pipermail/users/attachments/20150324/56cfd342/attachment.vcf>
More information about the users
mailing list