From 4196b9bc5ca8c5dd3a0939cb18ee3bf2a9ab87bc Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 15 Oct 2013 15:19:12 +0200 Subject: [PATCH] fb & exynos5: avoid USB HID problems with FOC USB HID gets stuck due to strange kernel error as HDMI starts simulatnously. This workaround delays HDMI init by a second (only in case we build for Exynos5 & FOC with USB) to let scenarious like demo get their USB HID started without much CPU load. ref #796 --- os/src/drivers/framebuffer/exynos5/driver.cc | 5 ++++ .../framebuffer/exynos5/foc_usb/quirks.cc | 23 +++++++++++++++++++ os/src/drivers/framebuffer/exynos5/quirks.cc | 19 +++++++++++++++ os/src/drivers/framebuffer/exynos5/target.mk | 16 +++++++++++-- 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 os/src/drivers/framebuffer/exynos5/foc_usb/quirks.cc create mode 100644 os/src/drivers/framebuffer/exynos5/quirks.cc diff --git a/os/src/drivers/framebuffer/exynos5/driver.cc b/os/src/drivers/framebuffer/exynos5/driver.cc index 4e72d508b6..9c32aa37eb 100644 --- a/os/src/drivers/framebuffer/exynos5/driver.cc +++ b/os/src/drivers/framebuffer/exynos5/driver.cc @@ -1107,9 +1107,14 @@ static Hdmi * hdmi() ** Framebuffer::Driver ** *************************/ +void prepare_fb_driver_init(Mmio::Delayer * const d); + int Framebuffer::Driver::init_drv(size_t width, size_t height, Format format, Output output, addr_t fb_phys) { + /* FIXME: hook for scenario/platform dependent quirks */ + prepare_fb_driver_init(delayer()); + _fb_width = width; _fb_height = height; _fb_format = format; diff --git a/os/src/drivers/framebuffer/exynos5/foc_usb/quirks.cc b/os/src/drivers/framebuffer/exynos5/foc_usb/quirks.cc new file mode 100644 index 0000000000..5558936b7f --- /dev/null +++ b/os/src/drivers/framebuffer/exynos5/foc_usb/quirks.cc @@ -0,0 +1,23 @@ +/* + * \brief Framebuffer driver quirks for FOC with USB + * \author Martin Stein + * \date 2013-08-09 + */ + +/* + * Copyright (C) 2013 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +/* Genode includes */ +#include + +using namespace Genode; + +void prepare_fb_driver_init(Mmio::Delayer * const d) +{ + /* FIXME: on Fiasco.OC USB HID gets stuck if HDMI starts simulatnously */ + d->usleep(1000000); +} diff --git a/os/src/drivers/framebuffer/exynos5/quirks.cc b/os/src/drivers/framebuffer/exynos5/quirks.cc new file mode 100644 index 0000000000..17e143d604 --- /dev/null +++ b/os/src/drivers/framebuffer/exynos5/quirks.cc @@ -0,0 +1,19 @@ +/* + * \brief Dummies for framebuffer-driver quirks + * \author Martin Stein + * \date 2013-08-09 + */ + +/* + * Copyright (C) 2013 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +/* Genode includes */ +#include + +using namespace Genode; + +void prepare_fb_driver_init(Mmio::Delayer * const) { } diff --git a/os/src/drivers/framebuffer/exynos5/target.mk b/os/src/drivers/framebuffer/exynos5/target.mk index 42de981ab0..3fd0e1c5e7 100644 --- a/os/src/drivers/framebuffer/exynos5/target.mk +++ b/os/src/drivers/framebuffer/exynos5/target.mk @@ -1,5 +1,17 @@ TARGET = fb_drv REQUIRES = exynos5 -SRC_CC = main.cc driver.cc -LIBS = base config +SRC_CC += main.cc driver.cc +SRC_CC += quirks.cc +LIBS += base config INC_DIR += $(PRG_DIR) + +ifneq ($(filter foc_arm, $(SPECS)),) +ifneq ($(filter usb, $(SPECS)),) +SPECS += exynos5_fb_foc_usb_quirk +endif +endif +ifneq ($(filter exynos5_fb_foc_usb_quirk, $(SPECS)),) +vpath quirks.cc $(PRG_DIR)/foc_usb +else +vpath quirks.cc $(PRG_DIR) +endif