diff options
Diffstat (limited to 'recipes-kernel/linux/linux-fslc-imx-rt')
-rw-r--r-- | recipes-kernel/linux/linux-fslc-imx-rt/0002-no-split-ptlocks.patch (renamed from recipes-kernel/linux/linux-fslc-imx-rt/0003-no-split-ptlocks.patch) | 0 | ||||
-rw-r--r-- | recipes-kernel/linux/linux-fslc-imx-rt/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch (renamed from recipes-kernel/linux/linux-fslc-imx-rt/0004-imx-sdma-channel-use-raw-spinlock.patch) | 53 | ||||
-rw-r--r-- | recipes-kernel/linux/linux-fslc-imx-rt/defconfig | 81 |
3 files changed, 94 insertions, 40 deletions
diff --git a/recipes-kernel/linux/linux-fslc-imx-rt/0003-no-split-ptlocks.patch b/recipes-kernel/linux/linux-fslc-imx-rt/0002-no-split-ptlocks.patch index 40c012a5..40c012a5 100644 --- a/recipes-kernel/linux/linux-fslc-imx-rt/0003-no-split-ptlocks.patch +++ b/recipes-kernel/linux/linux-fslc-imx-rt/0002-no-split-ptlocks.patch 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/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch index da36213c..93200c62 100644 --- a/recipes-kernel/linux/linux-fslc-imx-rt/0004-imx-sdma-channel-use-raw-spinlock.patch +++ b/recipes-kernel/linux/linux-fslc-imx-rt/0003-Work-around-CPU-stalls-in-the-imx-sdma-driver.patch @@ -1,9 +1,16 @@ -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. +From f7cba8d49a980909cea48c5b9dcfefc6e13fef0b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dominic=20Sacr=C3=A9?= <dominic.sacre@gmx.de> +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 iMX6Q Sabre SD board: +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 @@ -34,12 +41,15 @@ fee0: 285190f0 00000000 00000000 a840ff00 8006d04c 806f3070 20030113 ffffffff Upstream-Status: Pending Signed-off-by: Dominic Sacré <dominic.sacre@gmx.de> +--- + 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 bae2ea8..74ff5a0 100644 +index 31b7fed..bb7d6aa 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c -@@ -343,7 +343,7 @@ struct sdma_engine { +@@ -408,7 +408,7 @@ struct sdma_engine { struct dma_device dma_device; struct clk *clk_ipg; struct clk *clk_ahb; @@ -48,7 +58,7 @@ index bae2ea8..74ff5a0 100644 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, +@@ -700,7 +700,7 @@ static int sdma_load_script(struct sdma_engine *sdma, void *buf, int size, return -ENOMEM; } @@ -57,7 +67,7 @@ index bae2ea8..74ff5a0 100644 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, +@@ -712,7 +712,7 @@ static int sdma_load_script(struct sdma_engine *sdma, void *buf, int size, ret = sdma_run_channel0(sdma); @@ -66,7 +76,7 @@ index bae2ea8..74ff5a0 100644 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) +@@ -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]); @@ -75,16 +85,34 @@ index bae2ea8..74ff5a0 100644 memset(context, 0, sizeof(*context)); context->channel_state.pc = load_address; -@@ -906,7 +906,7 @@ static int sdma_load_context(struct sdma_channel *sdmac) +@@ -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; } -@@ -1881,7 +1881,7 @@ static int __init sdma_probe(struct platform_device *pdev) +@@ -2152,7 +2152,7 @@ static int sdma_probe(struct platform_device *pdev) if (!sdma) return -ENOMEM; @@ -93,3 +121,6 @@ index bae2ea8..74ff5a0 100644 sdma->dev = &pdev->dev; sdma->drvdata = drvdata; +-- +2.8.1 + diff --git a/recipes-kernel/linux/linux-fslc-imx-rt/defconfig b/recipes-kernel/linux/linux-fslc-imx-rt/defconfig index e741b19f..05d15d05 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 |