From a3a91dc1ef6d1dc42e284248b09dd474ba2cef80 Mon Sep 17 00:00:00 2001 From: Dominic Sacré Date: Wed, 4 May 2016 17:43:20 +0200 Subject: linux-fslc-imx-rt: Upgrade to 4.1.15-1.0.0 GA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use patch 4.1.19-rt22 (which applies cleanly) despite the fact that the kernel is currently based on 4.1.20, because 4.1.20-rt23 is not yet available at a stable URL. The same issues that needed to be patched in 3.14 are still present in 4.1, so update the patches and defconfig accordingly to apply to the new kernel. Signed-off-by: Dominic Sacré Signed-off-by: Otavio Salvador --- .../linux-fslc-imx-rt/0002-no-split-ptlocks.patch | 85 ++++++++++++++ ...-around-CPU-stalls-in-the-imx-sdma-driver.patch | 126 +++++++++++++++++++++ .../linux-fslc-imx-rt/0003-no-split-ptlocks.patch | 85 -------------- .../0004-imx-sdma-channel-use-raw-spinlock.patch | 95 ---------------- recipes-kernel/linux/linux-fslc-imx-rt/defconfig | 81 ++++++++----- .../linux/linux-fslc-imx-rt_3.14-1.1.x.bb | 31 ----- .../linux/linux-fslc-imx-rt_4.1-1.0.x.bb | 31 +++++ 7 files changed, 294 insertions(+), 240 deletions(-) create mode 100644 recipes-kernel/linux/linux-fslc-imx-rt/0002-no-split-ptlocks.patch create mode 100644 recipes-kernel/linux/linux-fslc-imx-rt/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch delete mode 100644 recipes-kernel/linux/linux-fslc-imx-rt/0003-no-split-ptlocks.patch delete mode 100644 recipes-kernel/linux/linux-fslc-imx-rt/0004-imx-sdma-channel-use-raw-spinlock.patch delete mode 100644 recipes-kernel/linux/linux-fslc-imx-rt_3.14-1.1.x.bb create mode 100644 recipes-kernel/linux/linux-fslc-imx-rt_4.1-1.0.x.bb diff --git a/recipes-kernel/linux/linux-fslc-imx-rt/0002-no-split-ptlocks.patch b/recipes-kernel/linux/linux-fslc-imx-rt/0002-no-split-ptlocks.patch new file mode 100644 index 0000000..40c012a --- /dev/null +++ b/recipes-kernel/linux/linux-fslc-imx-rt/0002-no-split-ptlocks.patch @@ -0,0 +1,85 @@ +Work around the oops below by disabling split ptlocks + +Upstream-Status: Inappropriate [disable feature] + +Signed-off-by: Jacob Kroon +Signed-off-by: Dominic Sacré [updated for 3.14.28] + +Unable to handle kernel NULL pointer dereference at virtual address 00000000 +pgd = ac5a8000 +[00000000] *pgd=3c8db831, *pte=00000000, *ppte=00000000 +Internal error: Oops: 17 [#1] PREEMPT SMP ARM +Modules linked in: +CPU: 1 PID: 277 Comm: test-qt5 Not tainted 3.10.17-rt12-monkey+gec1af9f #2 +task: ac65df80 ti: ac968000 task.ti: ac968000 +PC is at _raw_spin_lock+0x10/0x4c +LR is at get_parent_ip+0x10/0x2c +pc : [<80623fd4>] lr : [<8004ef18>] psr: 60010013 +sp : ac969c38 ip : 80c44404 fp : 00000000 +r10: ac65df80 r9 : ac969cd8 r8 : 00000000 +r7 : 00000054 r6 : afffe000 r5 : 00000000 r4 : 00000000 +r3 : ac65df80 r2 : 00000001 r1 : 00000000 r0 : 00000000 +Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user +Control: 10c53c7d Table: 3c5a804a DAC: 00000015 +Process test-qt5 (pid: 277, stack limit = 0xac968238) +Stack: (0xac969c38 to 0xac96a000) +9c20: b00549a8 806235e0 +9c40: 00000000 ac968000 812f9a00 80017cec ac969c74 fffffffe 00000000 00005000 +9c60: 00000000 80017e6c ac968000 ac65df80 00000000 00000000 00000001 ac968001 +9c80: ac65df80 b00549a8 00000000 afffe000 00000054 00000000 ac969cd8 afffe150 +9ca0: b0054bf8 8044e540 ac969cd8 b00549a8 ac0b8180 00000230 ac8fd000 00000230 +9cc0: 00000000 8044f6f4 ac155700 ac969cf4 ac155700 804605b8 ac155700 ac969d8c +9ce0: 00000002 ac969d24 b0054bf8 804607f4 7ef1fcd0 80450078 ac0b8180 ac155700 +9d00: ac969d8c 00000002 ac8fd000 8045f1a0 ac969d24 00000000 ac8fd01c b00549a8 +9d20: b0050000 00000008 ac969d98 ac0b8300 ac969d8c 00000115 ac969d98 ac969e00 +9d40: ac155600 ac3985f0 7ef1fcd0 8045661c 00000115 00000000 00000001 00000000 +9d60: 00007530 80454144 80c32e18 00000001 81518e18 806237dc 00000001 ac968038 +9d80: 00000000 00000000 00000000 00000000 00000115 806237dc ac6f5688 ac968018 +9da0: 812e1640 00000000 00000001 ac968000 ac969dc4 8004efe4 ac968008 ac39a000 +9dc0: ac744400 ac968020 00007530 ac968000 ac968000 ac3985f0 7ef1fcd0 8044d374 +9de0: 7ef1fd20 00000000 000000f8 00000000 7ef1fd20 00000000 000000f8 00000000 +9e00: 00000028 00000002 00000000 6437d1dd 7ef1fddc 76f9c030 7ef1fd88 76fb9abc +9e20: 00000320 00005007 e02c7eca c1399eff 020fb2db 00000000 00000000 00000000 +9e40: 00000001 00000040 00000400 00000004 00000010 00000400 00000002 00000100 +9e60: 00000100 00000008 00000008 00000000 ffffffff 00000000 7588e180 76fb1000 +9e80: 08000000 00000000 00000000 76fb11b8 000000af 760b6cd8 ffffffff 7431d4c0 +9ea0: 000cb1ac 75889000 00000000 00000001 000000b0 00000000 00000000 76fa0da0 +9ec0: 00000000 00000001 00000001 00000000 00000000 7588cb40 00000001 75957ecc +9ee0: 00000001 7ef1fe7c 75953e94 7ef1fedc 00000002 76fa789c 00007530 ac6813c0 +9f00: 00000000 7ef1fcd0 ac6813c0 ac968000 ac3985f0 800d68fc 00000001 ac968000 +9f20: ac969f34 8004efe4 ac4f71d4 6c31d000 00000000 80623fd4 00000000 80623578 +9f40: ac4f71d4 800a3d40 00000001 00000000 ac969f5c 00000003 ac6813c8 00000000 +9f60: 00000001 00007530 00000003 00000000 7ef1fcd0 ac6813c0 ac968000 00000000 +9f80: 00000000 800d6afc ac4f7180 00000000 00002710 00007530 75957e40 00000036 +9fa0: 8000e2c4 8000e140 00002710 00007530 00000003 00007530 7ef1fcd0 01bc3008 +9fc0: 00002710 00007530 75957e40 00000036 01bd2e70 00000001 7ef1fd20 00000000 +9fe0: 759540c4 7ef1fcbc 7593f698 760a0ccc 20010010 00000003 00000000 00000000 +[<80623fd4>] (_raw_spin_lock+0x10/0x4c) from [<806235e0>] (rt_spin_lock_slowlock+0x34/0x29c) +[<806235e0>] (rt_spin_lock_slowlock+0x34/0x29c) from [<8044e540>] (_QueryProcessPageTable+0x8c/0xdc) +[<8044e540>] (_QueryProcessPageTable+0x8c/0xdc) from [<8044f6f4>] (gckOS_GetPhysicalAddress+0x20/0x58) +[<8044f6f4>] (gckOS_GetPhysicalAddress+0x20/0x58) from [<804605b8>] (gckHARDWARE_ConvertLogical+0x2c/0x90) +[<804605b8>] (gckHARDWARE_ConvertLogical+0x2c/0x90) from [<804607f4>] (gckHARDWARE_Link+0x60/0x104) +[<804607f4>] (gckHARDWARE_Link+0x60/0x104) from [<8045f1a0>] (gckCONTEXT_Construct+0x264/0x2bc) +[<8045f1a0>] (gckCONTEXT_Construct+0x264/0x2bc) from [<8045661c>] (gckCOMMAND_Attach+0x44/0x88) +[<8045661c>] (gckCOMMAND_Attach+0x44/0x88) from [<80454144>] (gckKERNEL_Dispatch+0x358/0x12c8) +[<80454144>] (gckKERNEL_Dispatch+0x358/0x12c8) from [<8044d374>] (drv_ioctl+0x120/0x284) +[<8044d374>] (drv_ioctl+0x120/0x284) from [<800d68fc>] (do_vfs_ioctl+0x408/0x5d0) +[<800d68fc>] (do_vfs_ioctl+0x408/0x5d0) from [<800d6afc>] (SyS_ioctl+0x38/0x64) +[<800d6afc>] (SyS_ioctl+0x38/0x64) from [<8000e140>] (ret_fast_syscall+0x0/0x30) +Code: e92d4010 e1a04000 e3a00001 ebe8abd7 (e1943f9f) +---[ end trace 0000000000000002 ]--- +note: test-qt5[277] exited with preempt_count 1 + +diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h +index 6c1dc6c..8c00faf 100644 +--- a/include/linux/mm_types.h ++++ b/include/linux/mm_types.h +@@ -24,7 +24,7 @@ + + struct address_space; + +-#define USE_SPLIT_PTE_PTLOCKS (NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS) ++#define USE_SPLIT_PTE_PTLOCKS (0) + #define USE_SPLIT_PMD_PTLOCKS (USE_SPLIT_PTE_PTLOCKS && \ + IS_ENABLED(CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK)) + #define ALLOC_SPLIT_PTLOCKS (SPINLOCK_SIZE > BITS_PER_LONG/8) diff --git a/recipes-kernel/linux/linux-fslc-imx-rt/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch b/recipes-kernel/linux/linux-fslc-imx-rt/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch new file mode 100644 index 0000000..93200c6 --- /dev/null +++ b/recipes-kernel/linux/linux-fslc-imx-rt/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch @@ -0,0 +1,126 @@ +From f7cba8d49a980909cea48c5b9dcfefc6e13fef0b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dominic=20Sacr=C3=A9?= +Date: Fri, 29 Apr 2016 15:48:40 +0200 +Subject: [PATCH] Work around CPU stalls in the imx-sdma driver +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Replace spinlocks with raw spinlocks. This prevents preemption during +the spinlock's critical section, as is the case on non PREEMPT_RT kernels. + +Without this patch, the following error can occur, for example when +using the audio codec on an i.MX6Q SabreSD board: + +INFO: rcu_preempt self-detected stall on CPU { 0} (t=2100 jiffies g=106 c=105 q=93) +CPU: 0 PID: 120 Comm: irq/34-sdma Not tainted 3.14.28-rt25-1.0.0_ga+g91cf351 #1 +[<80014a8c>] (unwind_backtrace) from [<8001173c>] (show_stack+0x10/0x14) +[<8001173c>] (show_stack) from [<806ee750>] (dump_stack+0x7c/0xc8) +[<806ee750>] (dump_stack) from [<800771c8>] (rcu_check_callbacks+0x454/0x888) +[<800771c8>] (rcu_check_callbacks) from [<80037f28>] (update_process_times+0x40/0x5c) +[<80037f28>] (update_process_times) from [<80082230>] (tick_sched_timer+0x4c/0x78) +[<80082230>] (tick_sched_timer) from [<8004bf30>] (__run_hrtimer.isra.34+0x74/0x124) +[<8004bf30>] (__run_hrtimer.isra.34) from [<8004cbb0>] (hrtimer_interrupt+0x154/0x3ac) +[<8004cbb0>] (hrtimer_interrupt) from [<80014464>] (twd_handler+0x30/0x38) +[<80014464>] (twd_handler) from [<8006fa2c>] (handle_percpu_devid_irq+0x6c/0x84) +[<8006fa2c>] (handle_percpu_devid_irq) from [<8006bc64>] (generic_handle_irq+0x2c/0x3c) +[<8006bc64>] (generic_handle_irq) from [<8000ed8c>] (handle_IRQ+0x40/0x90) +[<8000ed8c>] (handle_IRQ) from [<8000856c>] (gic_handle_irq+0x2c/0x5c) +[<8000856c>] (gic_handle_irq) from [<80012240>] (__irq_svc+0x40/0x84) +Exception stack(0xa840feb8 to 0xa840ff00) +fea0: a8007a28 00000002 +fec0: 00000001 0000a6a6 a80079c0 a8007a28 a83ea080 00000000 a80079c0 a83ea080 +fee0: 285190f0 00000000 00000000 a840ff00 8006d04c 806f3070 20030113 ffffffff +[<80012240>] (__irq_svc) from [<806f3070>] (_raw_spin_unlock_irq+0x20/0x60) +[<806f3070>] (_raw_spin_unlock_irq) from [<8006d04c>] (irq_finalize_oneshot.part.37+0x70/0xcc) +[<8006d04c>] (irq_finalize_oneshot.part.37) from [<8006d148>] (irq_forced_thread_fn+0x60/0x64) +[<8006d148>] (irq_forced_thread_fn) from [<8006d3dc>] (irq_thread+0x138/0x1a4) +[<8006d3dc>] (irq_thread) from [<8004913c>] (kthread+0xbc/0xd4) +[<8004913c>] (kthread) from [<8000e538>] (ret_from_fork+0x14/0x3c) + +Upstream-Status: Pending + +Signed-off-by: Dominic Sacré +--- + drivers/dma/imx-sdma.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c +index 31b7fed..bb7d6aa 100644 +--- a/drivers/dma/imx-sdma.c ++++ b/drivers/dma/imx-sdma.c +@@ -408,7 +408,7 @@ struct sdma_engine { + struct dma_device dma_device; + struct clk *clk_ipg; + struct clk *clk_ahb; +- spinlock_t channel_0_lock; ++ raw_spinlock_t channel_0_lock; + u32 script_number; + struct sdma_script_start_addrs *script_addrs; + const struct sdma_driver_data *drvdata; +@@ -700,7 +700,7 @@ static int sdma_load_script(struct sdma_engine *sdma, void *buf, int size, + return -ENOMEM; + } + +- spin_lock_irqsave(&sdma->channel_0_lock, flags); ++ raw_spin_lock_irqsave(&sdma->channel_0_lock, flags); + + bd0->mode.command = C0_SETPM; + bd0->mode.status = BD_DONE | BD_INTR | BD_WRAP | BD_EXTD; +@@ -712,7 +712,7 @@ static int sdma_load_script(struct sdma_engine *sdma, void *buf, int size, + + ret = sdma_run_channel0(sdma); + +- spin_unlock_irqrestore(&sdma->channel_0_lock, flags); ++ raw_spin_unlock_irqrestore(&sdma->channel_0_lock, flags); + + if (use_iram) + gen_pool_free(sdma->iram_pool, (unsigned long)buf_virt, size); +@@ -979,7 +979,7 @@ static int sdma_load_context(struct sdma_channel *sdmac) + dev_dbg(sdma->dev, "event_mask0 = 0x%08x\n", (u32)sdmac->event_mask[0]); + dev_dbg(sdma->dev, "event_mask1 = 0x%08x\n", (u32)sdmac->event_mask[1]); + +- spin_lock_irqsave(&sdma->channel_0_lock, flags); ++ raw_spin_lock_irqsave(&sdma->channel_0_lock, flags); + + memset(context, 0, sizeof(*context)); + context->channel_state.pc = load_address; +@@ -1005,7 +1005,7 @@ static int sdma_load_context(struct sdma_channel *sdmac) + bd0->ext_buffer_addr = 2048 + (sizeof(*context) / 4) * channel; + ret = sdma_run_channel0(sdma); + +- spin_unlock_irqrestore(&sdma->channel_0_lock, flags); ++ raw_spin_unlock_irqrestore(&sdma->channel_0_lock, flags); + + sdmac->context_loaded = true; + +@@ -1019,7 +1019,7 @@ static int sdma_save_restore_context(struct sdma_engine *sdma, bool save) + unsigned long flags; + int ret; + +- spin_lock_irqsave(&sdma->channel_0_lock, flags); ++ raw_spin_lock_irqsave(&sdma->channel_0_lock, flags); + + if (save) + bd0->mode.command = C0_GETDM; +@@ -1032,7 +1032,7 @@ static int sdma_save_restore_context(struct sdma_engine *sdma, bool save) + bd0->ext_buffer_addr = 2048; + ret = sdma_run_channel0(sdma); + +- spin_unlock_irqrestore(&sdma->channel_0_lock, flags); ++ raw_spin_unlock_irqrestore(&sdma->channel_0_lock, flags); + + return ret; + } +@@ -2152,7 +2152,7 @@ static int sdma_probe(struct platform_device *pdev) + if (!sdma) + return -ENOMEM; + +- spin_lock_init(&sdma->channel_0_lock); ++ raw_spin_lock_init(&sdma->channel_0_lock); + + sdma->dev = &pdev->dev; + sdma->drvdata = drvdata; +-- +2.8.1 + diff --git a/recipes-kernel/linux/linux-fslc-imx-rt/0003-no-split-ptlocks.patch b/recipes-kernel/linux/linux-fslc-imx-rt/0003-no-split-ptlocks.patch deleted file mode 100644 index 40c012a..0000000 --- a/recipes-kernel/linux/linux-fslc-imx-rt/0003-no-split-ptlocks.patch +++ /dev/null @@ -1,85 +0,0 @@ -Work around the oops below by disabling split ptlocks - -Upstream-Status: Inappropriate [disable feature] - -Signed-off-by: Jacob Kroon -Signed-off-by: Dominic Sacré [updated for 3.14.28] - -Unable to handle kernel NULL pointer dereference at virtual address 00000000 -pgd = ac5a8000 -[00000000] *pgd=3c8db831, *pte=00000000, *ppte=00000000 -Internal error: Oops: 17 [#1] PREEMPT SMP ARM -Modules linked in: -CPU: 1 PID: 277 Comm: test-qt5 Not tainted 3.10.17-rt12-monkey+gec1af9f #2 -task: ac65df80 ti: ac968000 task.ti: ac968000 -PC is at _raw_spin_lock+0x10/0x4c -LR is at get_parent_ip+0x10/0x2c -pc : [<80623fd4>] lr : [<8004ef18>] psr: 60010013 -sp : ac969c38 ip : 80c44404 fp : 00000000 -r10: ac65df80 r9 : ac969cd8 r8 : 00000000 -r7 : 00000054 r6 : afffe000 r5 : 00000000 r4 : 00000000 -r3 : ac65df80 r2 : 00000001 r1 : 00000000 r0 : 00000000 -Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user -Control: 10c53c7d Table: 3c5a804a DAC: 00000015 -Process test-qt5 (pid: 277, stack limit = 0xac968238) -Stack: (0xac969c38 to 0xac96a000) -9c20: b00549a8 806235e0 -9c40: 00000000 ac968000 812f9a00 80017cec ac969c74 fffffffe 00000000 00005000 -9c60: 00000000 80017e6c ac968000 ac65df80 00000000 00000000 00000001 ac968001 -9c80: ac65df80 b00549a8 00000000 afffe000 00000054 00000000 ac969cd8 afffe150 -9ca0: b0054bf8 8044e540 ac969cd8 b00549a8 ac0b8180 00000230 ac8fd000 00000230 -9cc0: 00000000 8044f6f4 ac155700 ac969cf4 ac155700 804605b8 ac155700 ac969d8c -9ce0: 00000002 ac969d24 b0054bf8 804607f4 7ef1fcd0 80450078 ac0b8180 ac155700 -9d00: ac969d8c 00000002 ac8fd000 8045f1a0 ac969d24 00000000 ac8fd01c b00549a8 -9d20: b0050000 00000008 ac969d98 ac0b8300 ac969d8c 00000115 ac969d98 ac969e00 -9d40: ac155600 ac3985f0 7ef1fcd0 8045661c 00000115 00000000 00000001 00000000 -9d60: 00007530 80454144 80c32e18 00000001 81518e18 806237dc 00000001 ac968038 -9d80: 00000000 00000000 00000000 00000000 00000115 806237dc ac6f5688 ac968018 -9da0: 812e1640 00000000 00000001 ac968000 ac969dc4 8004efe4 ac968008 ac39a000 -9dc0: ac744400 ac968020 00007530 ac968000 ac968000 ac3985f0 7ef1fcd0 8044d374 -9de0: 7ef1fd20 00000000 000000f8 00000000 7ef1fd20 00000000 000000f8 00000000 -9e00: 00000028 00000002 00000000 6437d1dd 7ef1fddc 76f9c030 7ef1fd88 76fb9abc -9e20: 00000320 00005007 e02c7eca c1399eff 020fb2db 00000000 00000000 00000000 -9e40: 00000001 00000040 00000400 00000004 00000010 00000400 00000002 00000100 -9e60: 00000100 00000008 00000008 00000000 ffffffff 00000000 7588e180 76fb1000 -9e80: 08000000 00000000 00000000 76fb11b8 000000af 760b6cd8 ffffffff 7431d4c0 -9ea0: 000cb1ac 75889000 00000000 00000001 000000b0 00000000 00000000 76fa0da0 -9ec0: 00000000 00000001 00000001 00000000 00000000 7588cb40 00000001 75957ecc -9ee0: 00000001 7ef1fe7c 75953e94 7ef1fedc 00000002 76fa789c 00007530 ac6813c0 -9f00: 00000000 7ef1fcd0 ac6813c0 ac968000 ac3985f0 800d68fc 00000001 ac968000 -9f20: ac969f34 8004efe4 ac4f71d4 6c31d000 00000000 80623fd4 00000000 80623578 -9f40: ac4f71d4 800a3d40 00000001 00000000 ac969f5c 00000003 ac6813c8 00000000 -9f60: 00000001 00007530 00000003 00000000 7ef1fcd0 ac6813c0 ac968000 00000000 -9f80: 00000000 800d6afc ac4f7180 00000000 00002710 00007530 75957e40 00000036 -9fa0: 8000e2c4 8000e140 00002710 00007530 00000003 00007530 7ef1fcd0 01bc3008 -9fc0: 00002710 00007530 75957e40 00000036 01bd2e70 00000001 7ef1fd20 00000000 -9fe0: 759540c4 7ef1fcbc 7593f698 760a0ccc 20010010 00000003 00000000 00000000 -[<80623fd4>] (_raw_spin_lock+0x10/0x4c) from [<806235e0>] (rt_spin_lock_slowlock+0x34/0x29c) -[<806235e0>] (rt_spin_lock_slowlock+0x34/0x29c) from [<8044e540>] (_QueryProcessPageTable+0x8c/0xdc) -[<8044e540>] (_QueryProcessPageTable+0x8c/0xdc) from [<8044f6f4>] (gckOS_GetPhysicalAddress+0x20/0x58) -[<8044f6f4>] (gckOS_GetPhysicalAddress+0x20/0x58) from [<804605b8>] (gckHARDWARE_ConvertLogical+0x2c/0x90) -[<804605b8>] (gckHARDWARE_ConvertLogical+0x2c/0x90) from [<804607f4>] (gckHARDWARE_Link+0x60/0x104) -[<804607f4>] (gckHARDWARE_Link+0x60/0x104) from [<8045f1a0>] (gckCONTEXT_Construct+0x264/0x2bc) -[<8045f1a0>] (gckCONTEXT_Construct+0x264/0x2bc) from [<8045661c>] (gckCOMMAND_Attach+0x44/0x88) -[<8045661c>] (gckCOMMAND_Attach+0x44/0x88) from [<80454144>] (gckKERNEL_Dispatch+0x358/0x12c8) -[<80454144>] (gckKERNEL_Dispatch+0x358/0x12c8) from [<8044d374>] (drv_ioctl+0x120/0x284) -[<8044d374>] (drv_ioctl+0x120/0x284) from [<800d68fc>] (do_vfs_ioctl+0x408/0x5d0) -[<800d68fc>] (do_vfs_ioctl+0x408/0x5d0) from [<800d6afc>] (SyS_ioctl+0x38/0x64) -[<800d6afc>] (SyS_ioctl+0x38/0x64) from [<8000e140>] (ret_fast_syscall+0x0/0x30) -Code: e92d4010 e1a04000 e3a00001 ebe8abd7 (e1943f9f) ----[ end trace 0000000000000002 ]--- -note: test-qt5[277] exited with preempt_count 1 - -diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h -index 6c1dc6c..8c00faf 100644 ---- a/include/linux/mm_types.h -+++ b/include/linux/mm_types.h -@@ -24,7 +24,7 @@ - - struct address_space; - --#define USE_SPLIT_PTE_PTLOCKS (NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS) -+#define USE_SPLIT_PTE_PTLOCKS (0) - #define USE_SPLIT_PMD_PTLOCKS (USE_SPLIT_PTE_PTLOCKS && \ - IS_ENABLED(CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK)) - #define ALLOC_SPLIT_PTLOCKS (SPINLOCK_SIZE > BITS_PER_LONG/8) diff --git a/recipes-kernel/linux/linux-fslc-imx-rt/0004-imx-sdma-channel-use-raw-spinlock.patch b/recipes-kernel/linux/linux-fslc-imx-rt/0004-imx-sdma-channel-use-raw-spinlock.patch deleted file mode 100644 index da36213..0000000 --- a/recipes-kernel/linux/linux-fslc-imx-rt/0004-imx-sdma-channel-use-raw-spinlock.patch +++ /dev/null @@ -1,95 +0,0 @@ -Work around CPU stalls in the imx-sdma driver by replacing spinlocks -with raw spinlocks. This prevents preemption during the spinlock's -critical section, as is the case on non PREEMPT_RT kernels. - -Without this patch, the following error can occur, for example when -using the audio codec on an iMX6Q Sabre SD board: - -INFO: rcu_preempt self-detected stall on CPU { 0} (t=2100 jiffies g=106 c=105 q=93) -CPU: 0 PID: 120 Comm: irq/34-sdma Not tainted 3.14.28-rt25-1.0.0_ga+g91cf351 #1 -[<80014a8c>] (unwind_backtrace) from [<8001173c>] (show_stack+0x10/0x14) -[<8001173c>] (show_stack) from [<806ee750>] (dump_stack+0x7c/0xc8) -[<806ee750>] (dump_stack) from [<800771c8>] (rcu_check_callbacks+0x454/0x888) -[<800771c8>] (rcu_check_callbacks) from [<80037f28>] (update_process_times+0x40/0x5c) -[<80037f28>] (update_process_times) from [<80082230>] (tick_sched_timer+0x4c/0x78) -[<80082230>] (tick_sched_timer) from [<8004bf30>] (__run_hrtimer.isra.34+0x74/0x124) -[<8004bf30>] (__run_hrtimer.isra.34) from [<8004cbb0>] (hrtimer_interrupt+0x154/0x3ac) -[<8004cbb0>] (hrtimer_interrupt) from [<80014464>] (twd_handler+0x30/0x38) -[<80014464>] (twd_handler) from [<8006fa2c>] (handle_percpu_devid_irq+0x6c/0x84) -[<8006fa2c>] (handle_percpu_devid_irq) from [<8006bc64>] (generic_handle_irq+0x2c/0x3c) -[<8006bc64>] (generic_handle_irq) from [<8000ed8c>] (handle_IRQ+0x40/0x90) -[<8000ed8c>] (handle_IRQ) from [<8000856c>] (gic_handle_irq+0x2c/0x5c) -[<8000856c>] (gic_handle_irq) from [<80012240>] (__irq_svc+0x40/0x84) -Exception stack(0xa840feb8 to 0xa840ff00) -fea0: a8007a28 00000002 -fec0: 00000001 0000a6a6 a80079c0 a8007a28 a83ea080 00000000 a80079c0 a83ea080 -fee0: 285190f0 00000000 00000000 a840ff00 8006d04c 806f3070 20030113 ffffffff -[<80012240>] (__irq_svc) from [<806f3070>] (_raw_spin_unlock_irq+0x20/0x60) -[<806f3070>] (_raw_spin_unlock_irq) from [<8006d04c>] (irq_finalize_oneshot.part.37+0x70/0xcc) -[<8006d04c>] (irq_finalize_oneshot.part.37) from [<8006d148>] (irq_forced_thread_fn+0x60/0x64) -[<8006d148>] (irq_forced_thread_fn) from [<8006d3dc>] (irq_thread+0x138/0x1a4) -[<8006d3dc>] (irq_thread) from [<8004913c>] (kthread+0xbc/0xd4) -[<8004913c>] (kthread) from [<8000e538>] (ret_from_fork+0x14/0x3c) - -Upstream-Status: Pending - -Signed-off-by: Dominic Sacré - -diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c -index bae2ea8..74ff5a0 100644 ---- a/drivers/dma/imx-sdma.c -+++ b/drivers/dma/imx-sdma.c -@@ -343,7 +343,7 @@ struct sdma_engine { - struct dma_device dma_device; - struct clk *clk_ipg; - struct clk *clk_ahb; -- spinlock_t channel_0_lock; -+ raw_spinlock_t channel_0_lock; - u32 script_number; - struct sdma_script_start_addrs *script_addrs; - const struct sdma_driver_data *drvdata; -@@ -593,7 +593,7 @@ static int sdma_load_script(struct sdma_engine *sdma, void *buf, int size, - return -ENOMEM; - } - -- spin_lock_irqsave(&sdma->channel_0_lock, flags); -+ raw_spin_lock_irqsave(&sdma->channel_0_lock, flags); - - bd0->mode.command = C0_SETPM; - bd0->mode.status = BD_DONE | BD_INTR | BD_WRAP | BD_EXTD; -@@ -605,7 +605,7 @@ static int sdma_load_script(struct sdma_engine *sdma, void *buf, int size, - - ret = sdma_run_channel0(sdma); - -- spin_unlock_irqrestore(&sdma->channel_0_lock, flags); -+ raw_spin_unlock_irqrestore(&sdma->channel_0_lock, flags); - - if (use_iram) - gen_pool_free(sdma->iram_pool, (unsigned long)buf_virt, size); -@@ -880,7 +880,7 @@ static int sdma_load_context(struct sdma_channel *sdmac) - dev_dbg(sdma->dev, "event_mask0 = 0x%08x\n", (u32)sdmac->event_mask[0]); - dev_dbg(sdma->dev, "event_mask1 = 0x%08x\n", (u32)sdmac->event_mask[1]); - -- spin_lock_irqsave(&sdma->channel_0_lock, flags); -+ raw_spin_lock_irqsave(&sdma->channel_0_lock, flags); - - memset(context, 0, sizeof(*context)); - context->channel_state.pc = load_address; -@@ -906,7 +906,7 @@ static int sdma_load_context(struct sdma_channel *sdmac) - bd0->ext_buffer_addr = 2048 + (sizeof(*context) / 4) * channel; - ret = sdma_run_channel0(sdma); - -- spin_unlock_irqrestore(&sdma->channel_0_lock, flags); -+ raw_spin_unlock_irqrestore(&sdma->channel_0_lock, flags); - - return ret; - } -@@ -1881,7 +1881,7 @@ static int __init sdma_probe(struct platform_device *pdev) - if (!sdma) - return -ENOMEM; - -- spin_lock_init(&sdma->channel_0_lock); -+ raw_spin_lock_init(&sdma->channel_0_lock); - - sdma->dev = &pdev->dev; - sdma->drvdata = drvdata; diff --git a/recipes-kernel/linux/linux-fslc-imx-rt/defconfig b/recipes-kernel/linux/linux-fslc-imx-rt/defconfig index e741b19..05d15d0 100644 --- a/recipes-kernel/linux/linux-fslc-imx-rt/defconfig +++ b/recipes-kernel/linux/linux-fslc-imx-rt/defconfig @@ -1,7 +1,10 @@ +CONFIG_LOCALVERSION="-fslc" CONFIG_KERNEL_LZO=y CONFIG_SYSVIPC=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=18 CONFIG_CGROUPS=y CONFIG_RELAY=y @@ -16,25 +19,24 @@ CONFIG_MODULE_UNLOAD=y CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_BLK_DEV_BSG is not set -CONFIG_GPIO_PCA953X=y CONFIG_ARCH_MXC=y -CONFIG_MACH_IMX51_DT=y -CONFIG_MACH_EUKREA_CPUIMX51SD=y CONFIG_SOC_IMX50=y CONFIG_SOC_IMX53=y CONFIG_SOC_IMX6Q=y CONFIG_SOC_IMX6SL=y CONFIG_SOC_IMX6SX=y +CONFIG_SOC_IMX6UL=y +CONFIG_SOC_IMX7D=y CONFIG_SOC_VF610=y # CONFIG_SWP_EMULATE is not set CONFIG_SMP=y +CONFIG_HAVE_ARM_ARCH_TIMER=y CONFIG_VMSPLIT_2G=y CONFIG_PREEMPT_RT_FULL=y CONFIG_AEABI=y CONFIG_HIGHMEM=y CONFIG_CMA=y CONFIG_CMDLINE="noinitrd console=ttymxc0,115200" -CONFIG_KEXEC=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_USERSPACE=y @@ -42,11 +44,11 @@ CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPU_FREQ_GOV_INTERACTIVE=y CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y CONFIG_ARM_IMX6Q_CPUFREQ=y +CONFIG_ARM_IMX7D_CPUFREQ=y CONFIG_CPU_IDLE=y CONFIG_VFP=y CONFIG_NEON=y CONFIG_BINFMT_MISC=m -CONFIG_PM_RUNTIME=y CONFIG_PM_DEBUG=y CONFIG_PM_TEST_SUSPEND=y CONFIG_NET=y @@ -60,7 +62,6 @@ CONFIG_IP_PNP_DHCP=y # CONFIG_INET_XFRM_MODE_BEET is not set # CONFIG_INET_LRO is not set CONFIG_IPV6=y -CONFIG_NETFILTER=y CONFIG_VLAN_8021Q=y CONFIG_LLC2=y CONFIG_CAN=y @@ -74,9 +75,7 @@ CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=y CONFIG_BT_HCIBTUSB=y -CONFIG_BT_HCIBTSDIO=y CONFIG_BT_HCIUART=y -CONFIG_BT_HCIUART_H4=y CONFIG_BT_HCIUART_BCSP=y CONFIG_BT_HCIUART_ATH3K=y CONFIG_BT_HCIBCM203X=y @@ -87,7 +86,7 @@ CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y # CONFIG_STANDALONE is not set CONFIG_DMA_CMA=y -CONFIG_CMA_SIZE_MBYTES=320 +CONFIG_CMA_SIZE_MBYTES=0 CONFIG_IMX_WEIM=y CONFIG_CONNECTOR=y CONFIG_MTD=y @@ -111,11 +110,12 @@ CONFIG_MTD_UBI=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_SENSORS_FXOS8700=y +CONFIG_SENSORS_FXAS2100X=y CONFIG_EEPROM_AT24=y CONFIG_EEPROM_AT25=y # CONFIG_SCSI_PROC_FS is not set CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_LOGGING=y CONFIG_SCSI_SCAN_ASYNC=y @@ -139,32 +139,37 @@ CONFIG_SMC91X=y CONFIG_SMC911X=y CONFIG_SMSC911X=y # CONFIG_NET_VENDOR_STMICRO is not set +CONFIG_MICREL_PHY=y CONFIG_USB_PEGASUS=m CONFIG_USB_RTL8150=m CONFIG_USB_RTL8152=m CONFIG_USB_USBNET=m CONFIG_USB_NET_CDC_EEM=m -CONFIG_ATH_CARDS=y -CONFIG_ATH6KL=m -CONFIG_ATH6KL_SDIO=m -CONFIG_BRCMFMAC=m +CONFIG_BCMDHD=m +CONFIG_BCMDHD_SDIO=y +CONFIG_BCMDHD_FW_PATH="/lib/firmware/bcm/fw_bcmdhd.bin" +CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/bcm/bcmdhd.cal" +# CONFIG_RTL_CARDS is not set # CONFIG_INPUT_MOUSEDEV_PSAUX is not set CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVBUG=m CONFIG_KEYBOARD_GPIO=y -CONFIG_KEYBOARD_SNVS_PWRKEY=y CONFIG_KEYBOARD_IMX=y CONFIG_MOUSE_PS2=m CONFIG_MOUSE_PS2_ELANTECH=y CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ADS7846=y CONFIG_TOUCHSCREEN_EGALAX=y -CONFIG_TOUCHSCREEN_ELAN=y +CONFIG_TOUCHSCREEN_ELAN_TS=y CONFIG_TOUCHSCREEN_MAX11801=y +CONFIG_TOUCHSCREEN_IMX6UL_TSC=y CONFIG_TOUCHSCREEN_MC13783=y CONFIG_TOUCHSCREEN_TSC2007=y CONFIG_TOUCHSCREEN_STMPE=y CONFIG_INPUT_MISC=y CONFIG_INPUT_MMA8450=y +CONFIG_INPUT_MPL3115=y +CONFIG_SENSOR_FXLS8471=y CONFIG_INPUT_ISL29023=y CONFIG_SERIO_SERPORT=m # CONFIG_LEGACY_PTYS is not set @@ -181,10 +186,16 @@ CONFIG_I2C_ALGOPCF=m CONFIG_I2C_ALGOPCA=m CONFIG_I2C_IMX=y CONFIG_SPI=y +CONFIG_SPI_GPIO=y CONFIG_SPI_IMX=y CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_MAX732X=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_74X164=y CONFIG_POWER_SUPPLY=y CONFIG_SABRESD_MAX8903=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y CONFIG_SENSORS_MAX17135=y CONFIG_SENSORS_MAG3110=y CONFIG_THERMAL=y @@ -203,6 +214,7 @@ CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_ANATOP=y CONFIG_REGULATOR_DA9052=y +CONFIG_REGULATOR_GPIO=y CONFIG_REGULATOR_MAX17135=y CONFIG_REGULATOR_MC13783=y CONFIG_REGULATOR_MC13892=y @@ -227,6 +239,8 @@ CONFIG_VIDEO_MXC_IPU_OUTPUT=y CONFIG_VIDEO_MXC_PXP_V4L2=y CONFIG_VIDEO_MXC_CSI_CAMERA=m CONFIG_MXC_VADC=m +CONFIG_MXC_MIPI_CSI=m +CONFIG_MXC_CAMERA_OV5647_MIPI=m CONFIG_SOC_CAMERA=y CONFIG_VIDEO_MX3=y CONFIG_V4L_MEM2MEM_DRIVERS=y @@ -237,21 +251,21 @@ CONFIG_DRM=y CONFIG_DRM_VIVANTE=y CONFIG_FB=y CONFIG_FB_MXS=y -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=y -CONFIG_LCD_L4F00242T03=y -CONFIG_LCD_PLATFORM=y -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_PWM=y CONFIG_FB_MXC_SYNC_PANEL=y -CONFIG_FB_MXC_LDB=y CONFIG_FB_MXC_MIPI_DSI=y +CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y +CONFIG_FB_MXC_LDB=y CONFIG_FB_MXC_HDMI=y -CONFIG_FB_MXC_EINK_PANEL=y CONFIG_FB_MXS_SII902X=y CONFIG_FB_MXC_DCIC=m CONFIG_HANNSTAR_CABC=y +CONFIG_FB_MXC_EINK_PANEL=y +CONFIG_FB_MXC_EINK_V2_PANEL=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_L4F00242T03=y +CONFIG_LCD_PLATFORM=y +CONFIG_BACKLIGHT_PWM=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y CONFIG_LOGO=y @@ -261,17 +275,23 @@ CONFIG_SND_USB_AUDIO=m CONFIG_SND_SOC=y CONFIG_SND_IMX_SOC=y CONFIG_SND_SOC_EUKREA_TLV320=y +CONFIG_SND_SOC_IMX_WM8960=y +CONFIG_SND_SOC_IMX_SII902X=y +CONFIG_SND_SOC_IMX_WM8958=y CONFIG_SND_SOC_IMX_CS42888=y CONFIG_SND_SOC_IMX_WM8962=y CONFIG_SND_SOC_IMX_SGTL5000=y CONFIG_SND_SOC_IMX_MQS=y CONFIG_SND_SOC_IMX_SPDIF=y CONFIG_SND_SOC_IMX_MC13783=y -CONFIG_SND_SOC_IMX_HDMI=y CONFIG_SND_SOC_IMX_SI476X=y +CONFIG_SND_SOC_IMX_HDMI=y CONFIG_USB=y +CONFIG_USB_OTG_WHITELIST=y +CONFIG_USB_OTG_FSM=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_MXC=y +CONFIG_USB_HCD_TEST_MODE=y CONFIG_USB_ACM=m CONFIG_USB_STORAGE=y CONFIG_USB_CHIPIDEA=y @@ -281,7 +301,7 @@ CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_GENERIC=y CONFIG_USB_SERIAL_FTDI_SIO=m CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_EHSET_TEST_FIXTURE=m +CONFIG_USB_EHSET_TEST_FIXTURE=y CONFIG_NOP_USB_XCEIV=y CONFIG_USB_MXS_PHY=y CONFIG_USB_GADGET=y @@ -304,14 +324,15 @@ CONFIG_USB_GADGETFS=m CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_MMC=y -CONFIG_MMC_UNSAFE_RESUME=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_ESDHC_IMX=y CONFIG_MXC_IPU=y +CONFIG_MXC_IPU_V3_PRE=y CONFIG_MXC_GPU_VIV=y +CONFIG_MXC_SIM=y CONFIG_MXC_MIPI_CSI2=y -CONFIG_MXC_MLB150=m +CONFIG_MXC_HDMI_CEC=y CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y CONFIG_LEDS_GPIO=y @@ -328,12 +349,15 @@ CONFIG_RTC_DRV_MXC=y CONFIG_RTC_DRV_SNVS=y CONFIG_DMADEVICES=y CONFIG_MXC_PXP_V2=y +CONFIG_MXC_PXP_V3=y CONFIG_IMX_SDMA=y CONFIG_MXS_DMA=y +CONFIG_DMATEST=m CONFIG_STAGING=y CONFIG_STAGING_MEDIA=y # CONFIG_IOMMU_SUPPORT is not set CONFIG_IIO=y +CONFIG_IMX7D_ADC=y CONFIG_VF610_ADC=y CONFIG_PWM=y CONFIG_PWM_IMX=y @@ -379,7 +403,6 @@ CONFIG_MAGIC_SYSRQ=y CONFIG_SECURITYFS=y CONFIG_CRYPTO_USER=y CONFIG_CRYPTO_TEST=m -CONFIG_CRYPTO_GCM=y CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_CTS=y CONFIG_CRYPTO_LRW=y diff --git a/recipes-kernel/linux/linux-fslc-imx-rt_3.14-1.1.x.bb b/recipes-kernel/linux/linux-fslc-imx-rt_3.14-1.1.x.bb deleted file mode 100644 index 450fc5b..0000000 --- a/recipes-kernel/linux/linux-fslc-imx-rt_3.14-1.1.x.bb +++ /dev/null @@ -1,31 +0,0 @@ -SUMMARY = "Realtime version of the FSL Community BSP i.MX6 Linux kernel with backported features and fixes" -DESCRIPTION = "Linux kernel based on Freescale 3.14.52-1.1.0 GA release, used by FSL Community BSP in order to \ -provide support for i.MX6 based platforms and include official Linux kernel stable updates, backported \ -features and fixes coming from the vendors, kernel community or FSL Community itself. \ -In addition, this kernel has the realtime patch (PREEMPT_RT) applied." - -include linux-fslc.inc - -PV .= "+git${SRCPV}" - -SRCBRANCH = "3.14-1.1.x-imx" -SRCREV = "327d5c9063b715c91a88655533d5e477a0afe218" - -SRC_URI += " \ - https://www.kernel.org/pub/linux/kernel/projects/rt/3.14/older/patch-3.14.61-rt62.patch.gz;name=patch-3.14.61-rt62.patch \ - file://0001-fix-build.patch \ - file://0003-no-split-ptlocks.patch \ - file://0004-imx-sdma-channel-use-raw-spinlock.patch \ -" - -SRC_URI[patch-3.14.61-rt62.patch.md5sum] = "d275057ffe5e6dac3c3d8704773c0aee" -SRC_URI[patch-3.14.61-rt62.patch.sha256sum] = "48df9b6e76f24aa1d6fcd5ab150d26830da35c630acba73bf8c81dd341c31951" - -python () { - using_builtin_driver = (d.getVar("MACHINE_USES_VIVANTE_KERNEL_DRIVER_MODULE", True) or "") != "1" - if not using_builtin_driver: - raise bb.parse.SkipPackage('You must use the builtin driver with the Linux RT patch as the external module does not yet include support for it. Set "MACHINE_USES_VIVANTE_KERNEL_DRIVER_MODULE" accordingly.') -} - - -COMPATIBLE_MACHINE = "(mx6|mx7)" diff --git a/recipes-kernel/linux/linux-fslc-imx-rt_4.1-1.0.x.bb b/recipes-kernel/linux/linux-fslc-imx-rt_4.1-1.0.x.bb new file mode 100644 index 0000000..d40c4cf --- /dev/null +++ b/recipes-kernel/linux/linux-fslc-imx-rt_4.1-1.0.x.bb @@ -0,0 +1,31 @@ +SUMMARY = "Realtime version of the FSL Community BSP i.MX6 Linux kernel with backported features and fixes" +DESCRIPTION = "Linux kernel based on Freescale 3.14.52-1.1.0 GA release, used by FSL Community BSP in order to \ +provide support for i.MX6 based platforms and include official Linux kernel stable updates, backported \ +features and fixes coming from the vendors, kernel community or FSL Community itself. \ +In addition, this kernel has the realtime patch (PREEMPT_RT) applied." + +include linux-fslc.inc + +PV .= "+git${SRCPV}" + +SRCBRANCH = "4.1-1.0.x-imx" +SRCREV = "445b81a703861b3c146ccd074cb5c14a5363c6d3" + +SRC_URI += " \ + https://www.kernel.org/pub/linux/kernel/projects/rt/4.1/older/patch-4.1.19-rt22.patch.gz;name=patch-4.1.19-rt22.patch \ + file://0001-fix-build.patch \ + file://0002-no-split-ptlocks.patch \ + file://0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch \ +" + +SRC_URI[patch-4.1.19-rt22.patch.md5sum] = "20a893d189c619ea3e7489f870478e7a" +SRC_URI[patch-4.1.19-rt22.patch.sha256sum] = "81a6429eb03f085e7f58a669eb23719ae14876c14fe244f5aac909c28ee4104e" + +python () { + using_builtin_driver = (d.getVar("MACHINE_USES_VIVANTE_KERNEL_DRIVER_MODULE", True) or "") != "1" + if not using_builtin_driver: + raise bb.parse.SkipPackage('You must use the builtin driver with the Linux RT patch as the external module does not yet include support for it. Set "MACHINE_USES_VIVANTE_KERNEL_DRIVER_MODULE" accordingly.') +} + + +COMPATIBLE_MACHINE = "(mx6|mx7)" -- cgit v1.2.3-54-g00ecf