Re: [PATCH 9/9] drm: mxsfb: Add support for i.MX8MP LCDIF variant
Hi Marek, Thanks for your patch! Perhaps something to improve: [auto build test WARNING on drm-intel/for-linux-next] [also build test WARNING on drm-exynos/exynos-drm-next next-20220225] [cannot apply to drm/drm-next drm-tip/drm-tip tegra-drm/drm/tegra/for-next v5.17-rc6] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Marek-Vasut/dt-bindings-mxsfb-Add-compatible-for-i-MX8MP/20220228-084809 base: git://anongit.freedesktop.org/drm-intel for-linux-next config: mips-randconfig-c004-20220227 (https://download.01.org/0day-ci/archive/20220301/202203010150.l57eax3w-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install mips cross compiling tool for clang build # apt-get install binutils-mips-linux-gnu # https://github.com/0day-ci/linux/commit/d6832d6fb879aabce18d9b451ed1ead1da38c333 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Marek-Vasut/dt-bindings-mxsfb-Add-compatible-for-i-MX8MP/20220228-084809 git checkout d6832d6fb879aabce18d9b451ed1ead1da38c333 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot clang-analyzer warnings: (new ones prefixed by >>) drivers/gpu/drm/mxsfb/mxsfb_kms.c:258:8: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign] ctrl |= CTRL_INV_HS; ^ vim +258 drivers/gpu/drm/mxsfb/mxsfb_kms.c 56c727244a47cf Marek Vasut 2022-02-28 251 d6832d6fb879aa Marek Vasut 2022-02-28 252 static void mxsfb_v8_set_mode(struct mxsfb_drm_private *mxsfb, u32 bus_flags) d6832d6fb879aa Marek Vasut 2022-02-28 253 { d6832d6fb879aa Marek Vasut 2022-02-28 254 struct drm_display_mode *m = >crtc.state->adjusted_mode; d6832d6fb879aa Marek Vasut 2022-02-28 @255 u32 ctrl; d6832d6fb879aa Marek Vasut 2022-02-28 256 d6832d6fb879aa Marek Vasut 2022-02-28 257 if (m->flags & DRM_MODE_FLAG_PHSYNC) d6832d6fb879aa Marek Vasut 2022-02-28 @258 ctrl |= CTRL_INV_HS; d6832d6fb879aa Marek Vasut 2022-02-28 259 if (m->flags & DRM_MODE_FLAG_PVSYNC) d6832d6fb879aa Marek Vasut 2022-02-28 260 ctrl |= CTRL_INV_VS; d6832d6fb879aa Marek Vasut 2022-02-28 261 /* Make sure Data Enable is high active by default */ d6832d6fb879aa Marek Vasut 2022-02-28 262 if (!(bus_flags & DRM_BUS_FLAG_DE_LOW)) d6832d6fb879aa Marek Vasut 2022-02-28 263 ctrl |= CTRL_INV_DE; d6832d6fb879aa Marek Vasut 2022-02-28 264 if (bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE) d6832d6fb879aa Marek Vasut 2022-02-28 265 ctrl |= CTRL_INV_PXCK; d6832d6fb879aa Marek Vasut 2022-02-28 266 d6832d6fb879aa Marek Vasut 2022-02-28 267 writel(ctrl, mxsfb->base + LCDC_CTRL); d6832d6fb879aa Marek Vasut 2022-02-28 268 d6832d6fb879aa Marek Vasut 2022-02-28 269 writel(DISP_SIZE_DELTA_Y(m->crtc_vdisplay) | d6832d6fb879aa Marek Vasut 2022-02-28 270 DISP_SIZE_DELTA_X(m->crtc_hdisplay), d6832d6fb879aa Marek Vasut 2022-02-28 271 mxsfb->base + LCDC_V8_DISP_SIZE); d6832d6fb879aa Marek Vasut 2022-02-28 272 d6832d6fb879aa Marek Vasut 2022-02-28 273 writel(HSYN_PARA_BP_H(m->htotal - m->hsync_end) | d6832d6fb879aa Marek Vasut 2022-02-28 274 HSYN_PARA_FP_H(m->hsync_start - m->hdisplay), d6832d6fb879aa Marek Vasut 2022-02-28 275 mxsfb->base + LCDC_V8_HSYN_PARA); d6832d6fb879aa Marek Vasut 2022-02-28 276 d6832d6fb879aa Marek Vasut 2022-02-28 277 writel(VSYN_PARA_BP_V(m->vtotal - m->vsync_end) | d6832d6fb879aa Marek Vasut 2022-02-28 278 VSYN_PARA_FP_V(m->vsync_start - m->vdisplay), d6832d6fb879aa Marek Vasut 2022-02-28 279 mxsfb->base + LCDC_V8_VSYN_PARA); d6832d6fb879aa Marek Vasut 2022-02-28 280 d6832d6fb879aa Marek Vasut 2022-02-28 281 writel(VSYN_HSYN_WIDTH_PW_V(m->vsync_end - m->vsync_start) | d6832d6fb879aa Marek Vasut 2022-02-28 282 VSYN_HSYN_WIDTH_PW_H(m->hsync_end - m->hsync_start), d6832d6fb879aa Marek Vasut 2022-02-28 283 mxsfb->base + LCDC_V8_VSYN_HSYN_WIDTH); d6832d6fb879aa Marek Vasut 2022-02-28 284 d6832d6fb879aa Marek Vasut 2022-02-28 285 writel(CTRLDESCL0_1_HEIGHT(m->crtc_vdisplay) | d6832d6fb879aa Marek Vasut 2022-02-28 286
Re: [PATCH 9/9] drm: mxsfb: Add support for i.MX8MP LCDIF variant
Hi Marek, I love your patch! Perhaps something to improve: [auto build test WARNING on drm-intel/for-linux-next] [also build test WARNING on drm-exynos/exynos-drm-next next-20220225] [cannot apply to drm/drm-next drm-tip/drm-tip tegra-drm/drm/tegra/for-next v5.17-rc6] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Marek-Vasut/dt-bindings-mxsfb-Add-compatible-for-i-MX8MP/20220228-084809 base: git://anongit.freedesktop.org/drm-intel for-linux-next config: i386-randconfig-a002-20220228 (https://download.01.org/0day-ci/archive/20220228/202202281124.rfkje01p-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/d6832d6fb879aabce18d9b451ed1ead1da38c333 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Marek-Vasut/dt-bindings-mxsfb-Add-compatible-for-i-MX8MP/20220228-084809 git checkout d6832d6fb879aabce18d9b451ed1ead1da38c333 # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/mxsfb/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> drivers/gpu/drm/mxsfb/mxsfb_kms.c:258:3: warning: variable 'ctrl' is >> uninitialized when used here [-Wuninitialized] ctrl |= CTRL_INV_HS; ^~~~ drivers/gpu/drm/mxsfb/mxsfb_kms.c:255:10: note: initialize the variable 'ctrl' to silence this warning u32 ctrl; ^ = 0 1 warning generated. vim +/ctrl +258 drivers/gpu/drm/mxsfb/mxsfb_kms.c 251 252 static void mxsfb_v8_set_mode(struct mxsfb_drm_private *mxsfb, u32 bus_flags) 253 { 254 struct drm_display_mode *m = >crtc.state->adjusted_mode; 255 u32 ctrl; 256 257 if (m->flags & DRM_MODE_FLAG_PHSYNC) > 258 ctrl |= CTRL_INV_HS; 259 if (m->flags & DRM_MODE_FLAG_PVSYNC) 260 ctrl |= CTRL_INV_VS; 261 /* Make sure Data Enable is high active by default */ 262 if (!(bus_flags & DRM_BUS_FLAG_DE_LOW)) 263 ctrl |= CTRL_INV_DE; 264 if (bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE) 265 ctrl |= CTRL_INV_PXCK; 266 267 writel(ctrl, mxsfb->base + LCDC_CTRL); 268 269 writel(DISP_SIZE_DELTA_Y(m->crtc_vdisplay) | 270 DISP_SIZE_DELTA_X(m->crtc_hdisplay), 271 mxsfb->base + LCDC_V8_DISP_SIZE); 272 273 writel(HSYN_PARA_BP_H(m->htotal - m->hsync_end) | 274 HSYN_PARA_FP_H(m->hsync_start - m->hdisplay), 275 mxsfb->base + LCDC_V8_HSYN_PARA); 276 277 writel(VSYN_PARA_BP_V(m->vtotal - m->vsync_end) | 278 VSYN_PARA_FP_V(m->vsync_start - m->vdisplay), 279 mxsfb->base + LCDC_V8_VSYN_PARA); 280 281 writel(VSYN_HSYN_WIDTH_PW_V(m->vsync_end - m->vsync_start) | 282 VSYN_HSYN_WIDTH_PW_H(m->hsync_end - m->hsync_start), 283 mxsfb->base + LCDC_V8_VSYN_HSYN_WIDTH); 284 285 writel(CTRLDESCL0_1_HEIGHT(m->crtc_vdisplay) | 286 CTRLDESCL0_1_WIDTH(m->crtc_hdisplay), 287 mxsfb->base + LCDC_V8_CTRLDESCL0_1); 288 289 writel(CTRLDESCL0_3_PITCH(mxsfb->crtc.primary->state->fb->pitches[0]), 290 mxsfb->base + LCDC_V8_CTRLDESCL0_3); 291 } 292 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
[PATCH 9/9] drm: mxsfb: Add support for i.MX8MP LCDIF variant
Add support for i.MX8MP LCDIF variant. This is called LCDIFv3 and is completely different from the LCDIFv3 found in i.MX23 in that it has a completely scrambled register layout compared to all previous LCDIF variants. The new LCDIFv3 also supports 36bit address space. However, except for the complete bit reshuffling, this is still LCDIF and it still works like one, the boilerplate code is also the same, hence it is part of this driver. This is probably still a bit better than a separate driver with a lot of duplicated code. Signed-off-by: Marek Vasut Cc: Alexander Stein Cc: Laurent Pinchart Cc: Lucas Stach Cc: Peng Fan Cc: Robby Cai Cc: Sam Ravnborg Cc: Stefan Agner --- drivers/gpu/drm/mxsfb/mxsfb_drv.c | 34 - drivers/gpu/drm/mxsfb/mxsfb_drv.h | 1 + drivers/gpu/drm/mxsfb/mxsfb_kms.c | 219 +++-- drivers/gpu/drm/mxsfb/mxsfb_regs.h | 136 ++ 4 files changed, 374 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c index 11298df50917c..7fd7fd1496f7d 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c @@ -40,6 +40,8 @@ enum mxsfb_devtype { * i.MX family number as the version. */ MXSFB_V6, + /* Starting at i.MX8MP the register layout is scrambled. */ + MXSFB_V8, }; static const struct mxsfb_devdata mxsfb_devdata[] = { @@ -51,6 +53,7 @@ static const struct mxsfb_devdata mxsfb_devdata[] = { .hs_wdth_shift = 24, .has_overlay= false, .has_ctrl2 = false, + .has_regsv8 = false, }, [MXSFB_V4] = { .transfer_count = LCDC_V4_TRANSFER_COUNT, @@ -60,6 +63,7 @@ static const struct mxsfb_devdata mxsfb_devdata[] = { .hs_wdth_shift = 18, .has_overlay= false, .has_ctrl2 = true, + .has_regsv8 = false, }, [MXSFB_V6] = { .transfer_count = LCDC_V4_TRANSFER_COUNT, @@ -69,6 +73,13 @@ static const struct mxsfb_devdata mxsfb_devdata[] = { .hs_wdth_shift = 18, .has_overlay= true, .has_ctrl2 = true, + .has_regsv8 = false, + }, + [MXSFB_V8] = { + /* Old register layout details do not apply here. */ + .has_overlay= false, + .has_ctrl2 = false, + .has_regsv8 = true, }, }; @@ -156,6 +167,22 @@ static irqreturn_t mxsfb_irq_handler(int irq, void *data) return IRQ_HANDLED; } +static irqreturn_t mxsfb_v8_irq_handler(int irq, void *data) +{ + struct drm_device *drm = data; + struct mxsfb_drm_private *mxsfb = drm->dev_private; + u32 reg; + + reg = readl(mxsfb->base + LCDC_V8_INT_STATUS_D0); + + if (reg & INT_STATUS_D0_VS_BLANK) + drm_crtc_handle_vblank(>crtc); + + writel(INT_STATUS_D0_VS_BLANK, mxsfb->base + LCDC_V8_INT_STATUS_D0); + + return IRQ_HANDLED; +} + static int mxsfb_load(struct drm_device *drm, const struct mxsfb_devdata *devdata) { @@ -191,7 +218,8 @@ static int mxsfb_load(struct drm_device *drm, platform_set_drvdata(pdev, drm); - ret = dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32)); + ret = dma_set_mask_and_coherent(drm->dev, + DMA_BIT_MASK(devdata->has_regsv8 ? 36 : 32)); if (ret) return ret; @@ -234,7 +262,8 @@ static int mxsfb_load(struct drm_device *drm, return ret; mxsfb->irq = ret; - ret = request_irq(mxsfb->irq, mxsfb_irq_handler, 0, + ret = request_irq(mxsfb->irq, devdata->has_regsv8 ? + mxsfb_v8_irq_handler : mxsfb_irq_handler, 0, drm->driver->name, drm); if (ret < 0) { dev_err(drm->dev, "Failed to install IRQ handler\n"); @@ -286,6 +315,7 @@ static const struct of_device_id mxsfb_dt_ids[] = { { .compatible = "fsl,imx23-lcdif", .data = _devdata[MXSFB_V3], }, { .compatible = "fsl,imx28-lcdif", .data = _devdata[MXSFB_V4], }, { .compatible = "fsl,imx6sx-lcdif", .data = _devdata[MXSFB_V6], }, + { .compatible = "fsl,imx8mp-lcdif", .data = _devdata[MXSFB_V8], }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, mxsfb_dt_ids); diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h index ddb5b0417a82c..74c5e6013ca43 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h @@ -23,6 +23,7 @@ struct mxsfb_devdata { unsigned inths_wdth_shift; boolhas_overlay; boolhas_ctrl2; + boolhas_regsv8; }; struct mxsfb_drm_private { diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c index