Re: [PATCH 9/9] drm: mxsfb: Add support for i.MX8MP LCDIF variant

2022-03-01 Thread kernel test robot

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

2022-02-27 Thread kernel test robot
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

2022-02-27 Thread Marek Vasut
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