From: Arnaud Degroote Date: Fri, 23 Jan 2015 15:11:53 +0000 (+0100) Subject: Initial porting of xenomai on exynos4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a246d035a06c3ff8dc1a05ed5c8ecbc3cda09bd3;p=platform%2Fkernel%2Flinux-exynos.git Initial porting of xenomai on exynos4 Based on patch from kinsamanka Signed-off-by: Arnaud Degroote [patch taken from https://github.com/adegroote/linux.git linux-stable-xenomai-odroid-3.18.y branch, adapted to v4.14 IPIPE changes (added IRQCHIP_PIPELINE_SAFE flags to irqchips)] Signed-off-by: Marek Szyprowski --- diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c index 429ca8ed7e51..ceadb18265bf 100644 --- a/drivers/base/regmap/regmap-irq.c +++ b/drivers/base/regmap/regmap-irq.c @@ -267,6 +267,7 @@ static const struct irq_chip regmap_irq_chip = { .irq_enable = regmap_irq_enable, .irq_set_type = regmap_irq_set_type, .irq_set_wake = regmap_irq_set_wake, + .flags = IRQCHIP_PIPELINE_SAFE, }; static irqreturn_t regmap_irq_thread(int irq, void *d) diff --git a/drivers/irqchip/exynos-combiner.c b/drivers/irqchip/exynos-combiner.c index b78a169c9c83..2c5fc74ad69c 100644 --- a/drivers/irqchip/exynos-combiner.c +++ b/drivers/irqchip/exynos-combiner.c @@ -20,6 +20,7 @@ #include #include #include +#include #define COMBINER_ENABLE_SET 0x0 #define COMBINER_ENABLE_CLEAR 0x4 @@ -27,7 +28,7 @@ #define IRQ_IN_COMBINER 8 -static DEFINE_SPINLOCK(irq_controller_lock); +static IPIPE_DEFINE_SPINLOCK(irq_controller_lock); struct combiner_chip_data { unsigned int hwirq_offset; @@ -88,7 +89,7 @@ static void combiner_handle_cascade_irq(struct irq_desc *desc) if (unlikely(!cascade_irq)) handle_bad_irq(desc); else - generic_handle_irq(cascade_irq); + ipipe_handle_demuxed_irq(cascade_irq); out: chained_irq_exit(chip, desc); diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c index c8d0de7ea160..4a2aaceef834 100644 --- a/drivers/pinctrl/samsung/pinctrl-exynos.c +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -216,6 +217,7 @@ static struct exynos_irq_chip exynos_gpio_irq_chip = { .irq_set_type = exynos_irq_set_type, .irq_request_resources = exynos_irq_request_resources, .irq_release_resources = exynos_irq_release_resources, + .flags = IRQCHIP_PIPELINE_SAFE, }, .eint_con = EXYNOS_GPIO_ECON_OFFSET, .eint_mask = EXYNOS_GPIO_EMASK_OFFSET, @@ -258,7 +260,7 @@ static irqreturn_t exynos_eint_gpio_irq(int irq, void *data) virq = irq_linear_revmap(bank->irq_domain, pin); if (!virq) return IRQ_NONE; - generic_handle_irq(virq); + ipipe_handle_demuxed_irq(virq); return IRQ_HANDLED; } @@ -361,6 +363,7 @@ static const struct exynos_irq_chip exynos4210_wkup_irq_chip __initconst = { .irq_set_wake = exynos_wkup_irq_set_wake, .irq_request_resources = exynos_irq_request_resources, .irq_release_resources = exynos_irq_release_resources, + .flags = IRQCHIP_PIPELINE_SAFE, }, .eint_con = EXYNOS_WKUP_ECON_OFFSET, .eint_mask = EXYNOS_WKUP_EMASK_OFFSET, @@ -377,6 +380,7 @@ static const struct exynos_irq_chip exynos7_wkup_irq_chip __initconst = { .irq_set_wake = exynos_wkup_irq_set_wake, .irq_request_resources = exynos_irq_request_resources, .irq_release_resources = exynos_irq_release_resources, + .flags = IRQCHIP_PIPELINE_SAFE, }, .eint_con = EXYNOS7_WKUP_ECON_OFFSET, .eint_mask = EXYNOS7_WKUP_EMASK_OFFSET, @@ -403,7 +407,7 @@ static void exynos_irq_eint0_15(struct irq_desc *desc) chained_irq_enter(chip, desc); eint_irq = irq_linear_revmap(bank->irq_domain, eintd->irq); - generic_handle_irq(eint_irq); + ipipe_handle_demuxed_irq(eint_irq); chained_irq_exit(chip, desc); } @@ -415,7 +419,7 @@ static inline void exynos_irq_demux_eint(unsigned long pend, while (pend) { irq = fls(pend) - 1; - generic_handle_irq(irq_find_mapping(domain, irq)); + ipipe_handle_demuxed_irq(irq_find_mapping(domain, irq)); pend &= ~(1 << irq); } } diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h b/drivers/pinctrl/samsung/pinctrl-samsung.h index 9af07af6cad6..9f2eb54d90c5 100644 --- a/drivers/pinctrl/samsung/pinctrl-samsung.h +++ b/drivers/pinctrl/samsung/pinctrl-samsung.h @@ -175,7 +175,7 @@ struct samsung_pin_bank { struct gpio_chip gpio_chip; struct pinctrl_gpio_range grange; struct exynos_irq_chip *irq_chip; - spinlock_t slock; + ipipe_spinlock_t slock; u32 pm_save[PINCFG_TYPE_NUM + 1]; /* +1 to handle double CON registers*/ };