Message ID | 20220911153734.24243-5-jason-jh.lin@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add gamma lut support for mt8195 | expand |
Hi Jason-JH.Lin", Thank you for the patch! Perhaps something to improve: [auto build test WARNING on next-20220909] [also build test WARNING on v6.0-rc4] [cannot apply to drm-misc/drm-misc-next robh/for-next drm/drm-next linus/master v6.0-rc4 v6.0-rc3 v6.0-rc2] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jason-JH-Lin/Add-gamma-lut-support-for-mt8195/20220911-233949 base: 9a82ccda91ed2b40619cb3c10d446ae1f97bab6e config: arm-allyesconfig (https://download.01.org/0day-ci/archive/20220912/202209120412.a3tFZuO9-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 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/intel-lab-lkp/linux/commit/1d5b909c49fd62f1e6055fd3d077b9c5fae53e00 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Jason-JH-Lin/Add-gamma-lut-support-for-mt8195/20220911-233949 git checkout 1d5b909c49fd62f1e6055fd3d077b9c5fae53e00 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/gpu/drm/mediatek/mtk_disp_gamma.c:59:14: warning: no previous prototype for 'mtk_gamma_get_size' [-Wmissing-prototypes] 59 | unsigned int mtk_gamma_get_size(struct device *dev) | ^~~~~~~~~~~~~~~~~~ vim +/mtk_gamma_get_size +59 drivers/gpu/drm/mediatek/mtk_disp_gamma.c 58 > 59 unsigned int mtk_gamma_get_size(struct device *dev) 60 { 61 struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); 62 unsigned int lut_size = LUT_SIZE_DEFAULT; 63 64 if (gamma && gamma->data) 65 lut_size = gamma->data->lut_size; 66 67 return lut_size; 68 } 69
Il 11/09/22 17:37, Jason-JH.Lin ha scritto: > 1. Add mtk_drm_gamma_get_lut_size() and remove MTK_LUT_SIZE macro. > 2. Add lut_size to gamma driver data for different SoC. > > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > --- > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + > drivers/gpu/drm/mediatek/mtk_disp_gamma.c | 22 +++++++++++++++++++-- > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 4 ++-- > drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 1 - > drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h | 9 +++++++++ > 5 files changed, 32 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > index a83e5fbc8724..6a05bb56e693 100644 > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > @@ -51,6 +51,7 @@ void mtk_gamma_clk_disable(struct device *dev); > void mtk_gamma_config(struct device *dev, unsigned int w, > unsigned int h, unsigned int vrefresh, > unsigned int bpc, struct cmdq_pkt *cmdq_pkt); > +unsigned int mtk_gamma_get_lut_size(struct device *dev); > void mtk_gamma_set(struct device *dev, struct drm_crtc_state *state); > void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crtc_state *state); > void mtk_gamma_start(struct device *dev); > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > index f54a6a618348..e69d0b205b9a 100644 > --- a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > +++ b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > @@ -24,10 +24,12 @@ > #define DISP_GAMMA_LUT 0x0700 > > #define LUT_10BIT_MASK 0x03ff > +#define LUT_SIZE_DEFAULT 512 /* for setting gamma lut from AAL */ > > struct mtk_disp_gamma_data { > bool has_dither; > bool lut_diff; > + u16 lut_size; > }; > > /* > @@ -54,18 +56,32 @@ void mtk_gamma_clk_disable(struct device *dev) > clk_disable_unprepare(gamma->clk); > } > > +unsigned int mtk_gamma_get_size(struct device *dev) > +{ > + struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); > + unsigned int lut_size = LUT_SIZE_DEFAULT; > + > + if (gamma && gamma->data) > + lut_size = gamma->data->lut_size; > + > + return lut_size; > +} > + > void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crtc_state *state) > { > struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); > bool lut_diff = false; > + u16 lut_size = LUT_SIZE_DEFAULT; This makes us get a double assignment in case gamma->data is populated. > unsigned int i, reg; > struct drm_color_lut *lut; > void __iomem *lut_base; > u32 word; > u32 diff[3] = {0}; > > - if (gamma && gamma->data) > + if (gamma && gamma->data) { > lut_diff = gamma->data->lut_diff; > + lut_size = gamma->data->lut_size; > + } ...you can avoid it like that: } else { lut_size = LUT_SIZE_DEFAULT; } Regards, Angelo
On Mon, 2022-09-12 at 12:24 +0200, AngeloGioacchino Del Regno wrote: > Il 11/09/22 17:37, Jason-JH.Lin ha scritto: > > 1. Add mtk_drm_gamma_get_lut_size() and remove MTK_LUT_SIZE macro. > > 2. Add lut_size to gamma driver data for different SoC. > > > > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > > --- > > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + > > drivers/gpu/drm/mediatek/mtk_disp_gamma.c | 22 > > +++++++++++++++++++-- > > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 4 ++-- > > drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 1 - > > drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h | 9 +++++++++ > > 5 files changed, 32 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > index a83e5fbc8724..6a05bb56e693 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > @@ -51,6 +51,7 @@ void mtk_gamma_clk_disable(struct device *dev); > > void mtk_gamma_config(struct device *dev, unsigned int w, > > unsigned int h, unsigned int vrefresh, > > unsigned int bpc, struct cmdq_pkt *cmdq_pkt); > > +unsigned int mtk_gamma_get_lut_size(struct device *dev); > > void mtk_gamma_set(struct device *dev, struct drm_crtc_state > > *state); > > void mtk_gamma_set_common(struct device *dev, void __iomem *regs, > > struct drm_crtc_state *state); > > void mtk_gamma_start(struct device *dev); > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > index f54a6a618348..e69d0b205b9a 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > @@ -24,10 +24,12 @@ > > #define DISP_GAMMA_LUT 0x0700 > > > > #define LUT_10BIT_MASK 0x03ff > > +#define LUT_SIZE_DEFAULT 512 /* for setting > > gamma lut from AAL */ > > > > struct mtk_disp_gamma_data { > > bool has_dither; > > bool lut_diff; > > + u16 lut_size; > > }; > > > > /* > > @@ -54,18 +56,32 @@ void mtk_gamma_clk_disable(struct device *dev) > > clk_disable_unprepare(gamma->clk); > > } > > > > +unsigned int mtk_gamma_get_size(struct device *dev) > > +{ > > + struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); > > + unsigned int lut_size = LUT_SIZE_DEFAULT; > > + > > + if (gamma && gamma->data) > > + lut_size = gamma->data->lut_size; > > + > > + return lut_size; > > +} > > + > > void mtk_gamma_set_common(struct device *dev, void __iomem *regs, > > struct drm_crtc_state *state) > > { > > struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); > > bool lut_diff = false; > > + u16 lut_size = LUT_SIZE_DEFAULT; > > This makes us get a double assignment in case gamma->data is > populated. > > > unsigned int i, reg; > > struct drm_color_lut *lut; > > void __iomem *lut_base; > > u32 word; > > u32 diff[3] = {0}; > > > > - if (gamma && gamma->data) > > + if (gamma && gamma->data) { > > lut_diff = gamma->data->lut_diff; > > + lut_size = gamma->data->lut_size; > > + } > > ...you can avoid it like that: > > } else { > lut_size = LUT_SIZE_DEFAULT; > } > > > Regards, > Angelo > >
Hi Angelo, Thanks for the reviews. On Mon, 2022-09-12 at 12:24 +0200, AngeloGioacchino Del Regno wrote: > Il 11/09/22 17:37, Jason-JH.Lin ha scritto: > > 1. Add mtk_drm_gamma_get_lut_size() and remove MTK_LUT_SIZE macro. > > 2. Add lut_size to gamma driver data for different SoC. > > > > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > > --- > > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + > > drivers/gpu/drm/mediatek/mtk_disp_gamma.c | 22 > > +++++++++++++++++++-- > > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 4 ++-- > > drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 1 - > > drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h | 9 +++++++++ > > 5 files changed, 32 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > index a83e5fbc8724..6a05bb56e693 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > @@ -51,6 +51,7 @@ void mtk_gamma_clk_disable(struct device *dev); > > void mtk_gamma_config(struct device *dev, unsigned int w, > > unsigned int h, unsigned int vrefresh, > > unsigned int bpc, struct cmdq_pkt *cmdq_pkt); > > +unsigned int mtk_gamma_get_lut_size(struct device *dev); > > void mtk_gamma_set(struct device *dev, struct drm_crtc_state > > *state); > > void mtk_gamma_set_common(struct device *dev, void __iomem *regs, > > struct drm_crtc_state *state); > > void mtk_gamma_start(struct device *dev); > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > index f54a6a618348..e69d0b205b9a 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c > > @@ -24,10 +24,12 @@ > > #define DISP_GAMMA_LUT 0x0700 > > > > #define LUT_10BIT_MASK 0x03ff > > +#define LUT_SIZE_DEFAULT 512 /* for setting > > gamma lut from AAL */ > > > > struct mtk_disp_gamma_data { > > bool has_dither; > > bool lut_diff; > > + u16 lut_size; > > }; > > > > /* > > @@ -54,18 +56,32 @@ void mtk_gamma_clk_disable(struct device *dev) > > clk_disable_unprepare(gamma->clk); > > } > > > > +unsigned int mtk_gamma_get_size(struct device *dev) > > +{ > > + struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); > > + unsigned int lut_size = LUT_SIZE_DEFAULT; > > + > > + if (gamma && gamma->data) > > + lut_size = gamma->data->lut_size; > > + > > + return lut_size; > > +} > > + > > void mtk_gamma_set_common(struct device *dev, void __iomem *regs, > > struct drm_crtc_state *state) > > { > > struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); > > bool lut_diff = false; > > + u16 lut_size = LUT_SIZE_DEFAULT; > > This makes us get a double assignment in case gamma->data is > populated. > > > unsigned int i, reg; > > struct drm_color_lut *lut; > > void __iomem *lut_base; > > u32 word; > > u32 diff[3] = {0}; > > > > - if (gamma && gamma->data) > > + if (gamma && gamma->data) { > > lut_diff = gamma->data->lut_diff; > > + lut_size = gamma->data->lut_size; > > + } > > ...you can avoid it like that: > > } else { > lut_size = LUT_SIZE_DEFAULT; > } > > > Regards, > Angelo > OK, I'll fix it, but I'll move the gamma priv data handling to the mtk_gamma_set. Regards, Jason-JH.Lin >
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h b/drivers/gpu/drm/mediatek/mtk_disp_drv.h index a83e5fbc8724..6a05bb56e693 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h @@ -51,6 +51,7 @@ void mtk_gamma_clk_disable(struct device *dev); void mtk_gamma_config(struct device *dev, unsigned int w, unsigned int h, unsigned int vrefresh, unsigned int bpc, struct cmdq_pkt *cmdq_pkt); +unsigned int mtk_gamma_get_lut_size(struct device *dev); void mtk_gamma_set(struct device *dev, struct drm_crtc_state *state); void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crtc_state *state); void mtk_gamma_start(struct device *dev); diff --git a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c index f54a6a618348..e69d0b205b9a 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c @@ -24,10 +24,12 @@ #define DISP_GAMMA_LUT 0x0700 #define LUT_10BIT_MASK 0x03ff +#define LUT_SIZE_DEFAULT 512 /* for setting gamma lut from AAL */ struct mtk_disp_gamma_data { bool has_dither; bool lut_diff; + u16 lut_size; }; /* @@ -54,18 +56,32 @@ void mtk_gamma_clk_disable(struct device *dev) clk_disable_unprepare(gamma->clk); } +unsigned int mtk_gamma_get_size(struct device *dev) +{ + struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); + unsigned int lut_size = LUT_SIZE_DEFAULT; + + if (gamma && gamma->data) + lut_size = gamma->data->lut_size; + + return lut_size; +} + void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crtc_state *state) { struct mtk_disp_gamma *gamma = dev_get_drvdata(dev); bool lut_diff = false; + u16 lut_size = LUT_SIZE_DEFAULT; unsigned int i, reg; struct drm_color_lut *lut; void __iomem *lut_base; u32 word; u32 diff[3] = {0}; - if (gamma && gamma->data) + if (gamma && gamma->data) { lut_diff = gamma->data->lut_diff; + lut_size = gamma->data->lut_size; + } if (state->gamma_lut) { reg = readl(regs + DISP_GAMMA_CFG); @@ -73,7 +89,7 @@ void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crt writel(reg, regs + DISP_GAMMA_CFG); lut_base = regs + DISP_GAMMA_LUT; lut = (struct drm_color_lut *)state->gamma_lut->data; - for (i = 0; i < MTK_LUT_SIZE; i++) { + for (i = 0; i < lut_size; i++) { if (!lut_diff || (i % 2 == 0)) { word = (((lut[i].red >> 6) & LUT_10BIT_MASK) << 20) + @@ -192,10 +208,12 @@ static int mtk_disp_gamma_remove(struct platform_device *pdev) static const struct mtk_disp_gamma_data mt8173_gamma_driver_data = { .has_dither = true, + .lut_size = 512, }; static const struct mtk_disp_gamma_data mt8183_gamma_driver_data = { .lut_diff = true, + .lut_size = 512, }; static const struct of_device_id mtk_disp_gamma_driver_dt_match[] = { diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index 112615817dcb..fc845490fbb4 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -929,8 +929,8 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, mtk_crtc->ddp_comp[i] = comp; if (comp->funcs) { - if (comp->funcs->gamma_set) - gamma_lut_size = MTK_LUT_SIZE; + if (comp->funcs->gamma_set && comp->funcs->gamma_get_lut_size) + gamma_lut_size = mtk_ddp_gamma_get_lut_size(comp); if (comp->funcs->ctm_set) has_ctm = true; diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h index cb9a36c48d4f..1799853ef89a 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h @@ -10,7 +10,6 @@ #include "mtk_drm_ddp_comp.h" #include "mtk_drm_plane.h" -#define MTK_LUT_SIZE 512 #define MTK_MAX_BPC 10 #define MTK_MIN_BPC 3 diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h index 2d0052c23dcb..ab589ea11ba7 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h @@ -65,6 +65,7 @@ struct mtk_ddp_comp_funcs { void (*layer_config)(struct device *dev, unsigned int idx, struct mtk_plane_state *state, struct cmdq_pkt *cmdq_pkt); + unsigned int (*gamma_get_lut_size)(struct device *dev); void (*gamma_set)(struct device *dev, struct drm_crtc_state *state); void (*bgclr_in_on)(struct device *dev); @@ -177,6 +178,14 @@ static inline void mtk_ddp_comp_layer_config(struct mtk_ddp_comp *comp, comp->funcs->layer_config(comp->dev, idx, state, cmdq_pkt); } +static inline unsigned int mtk_ddp_gamma_get_lut_size(struct mtk_ddp_comp *comp) +{ + if (comp->funcs && comp->funcs->gamma_get_lut_size) + return comp->funcs->gamma_get_lut_size(comp->dev); + + return 0; +} + static inline void mtk_ddp_gamma_set(struct mtk_ddp_comp *comp, struct drm_crtc_state *state) {
1. Add mtk_drm_gamma_get_lut_size() and remove MTK_LUT_SIZE macro. 2. Add lut_size to gamma driver data for different SoC. Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> --- drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + drivers/gpu/drm/mediatek/mtk_disp_gamma.c | 22 +++++++++++++++++++-- drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 4 ++-- drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 1 - drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h | 9 +++++++++ 5 files changed, 32 insertions(+), 5 deletions(-)