All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/gpu/drm/mediatek/mtk_disp_dsc.c:161:16: error: implicit declaration of function 'FIELD_PREP'
@ 2026-09-23  8:11 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-09-23  8:11 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno; +Cc: oe-kbuild-all, 0day robot

tree:   https://github.com/intel-lab-lkp/linux/commits/AngeloGioacchino-Del-Regno/dt-bindings-display-mediatek-dsc-Add-MT8196-compatible/20260916-130813
head:   3c22fbab525978f915acc148875de1c4b7c78f5d
commit: 3d42094c53aebd08d6d4c0fd2539de44f28421c2 drm/mediatek: Implement Display Stream Compression support
date:   7 days ago
config: loongarch-randconfig-r2105-20260923 (https://download.01.org/0day-ci/archive/20260923/202609231011.atHABTCC-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260923/202609231011.atHABTCC-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609231011.atHABTCC-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/gpu/drm/mediatek/mtk_disp_dsc.c: In function 'mtk_dsc_pps_setup':
>> drivers/gpu/drm/mediatek/mtk_disp_dsc.c:161:16: error: implicit declaration of function 'FIELD_PREP' [-Wimplicit-function-declaration]
     161 |         data = FIELD_PREP(DSC_P0_UP_LINE_BUF_DEPTH, dsc_cfg->line_buf_depth);
         |                ^~~~~~~~~~
   drivers/gpu/drm/mediatek/mtk_disp_dsc.c: In function 'mtk_dsc_setup':
>> drivers/gpu/drm/mediatek/mtk_disp_dsc.c:305:33: error: implicit declaration of function 'FIELD_PREP_CONST' [-Wimplicit-function-declaration]
     305 |                 dsc_cfg_rval |= FIELD_PREP_CONST(DSC_CFG_FLATNESS_DET_THRES,
         |                                 ^~~~~~~~~~~~~~~~


vim +/FIELD_PREP +161 drivers/gpu/drm/mediatek/mtk_disp_dsc.c

   152	
   153	static void mtk_dsc_pps_setup(struct mtk_dsc *disp_dsc, struct drm_dsc_config *dsc_cfg)
   154	{
   155		struct drm_dsc_rc_range_parameters *rcrp = dsc_cfg->rc_range_params;
   156		u16 *rbt = dsc_cfg->rc_buf_thresh;
   157		u32 data;
   158		int i, j;
   159	
   160		/* PPS 0 - Note: Fractional BPP is not supported! */
 > 161		data = FIELD_PREP(DSC_P0_UP_LINE_BUF_DEPTH, dsc_cfg->line_buf_depth);
   162		data |= FIELD_PREP(DSC_P0_BPC, dsc_cfg->bits_per_component);
   163		data |= FIELD_PREP(DSC_P0_BPP, dsc_cfg->bits_per_pixel);
   164		data |= DSC_P0_RCT_ON | DSC_P0_BLOCK_PRED_EN;
   165		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(0));
   166	
   167		/* PPS 1 */
   168		data = FIELD_PREP(DSC_P1_INITIAL_XMIT_DELAY, dsc_cfg->initial_xmit_delay);
   169		data |= FIELD_PREP(DSC_P1_INITIAL_DEC_DELAY, dsc_cfg->initial_dec_delay);
   170		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(1));
   171	
   172		/* PPS 2 */
   173		data = FIELD_PREP(DSC_P2_INITIAL_SCALE_VALUE, dsc_cfg->initial_scale_value);
   174		data |= FIELD_PREP(DSC_P2_SCALE_INCR_INTERVAL, dsc_cfg->scale_increment_interval);
   175		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(2));
   176	
   177		/* PPS 3 */
   178		data = FIELD_PREP(DSC_P3_SCALE_DECR_INTERVAL, dsc_cfg->scale_decrement_interval);
   179		data |= FIELD_PREP(DSC_P3_FIRST_LINE_BPG_OFFSET, dsc_cfg->first_line_bpg_offset);
   180		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(3));
   181	
   182		/* PPS 4 */
   183		data = FIELD_PREP(DSC_P4_NFL_BPG_OFFSET, dsc_cfg->nfl_bpg_offset);
   184		data |= FIELD_PREP(DSC_P4_SLICE_BPG_OFFSET, dsc_cfg->slice_bpg_offset);
   185		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(4));
   186	
   187		/* PPS 5 */
   188		data = FIELD_PREP(DSC_P5_INITIAL_OFFSET, dsc_cfg->initial_offset);
   189		data |= FIELD_PREP(DSC_P5_FINAL_OFFSET, dsc_cfg->final_offset);
   190		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(5));
   191	
   192		/* PPS 6 */
   193		data = FIELD_PREP(DSC_P6_FLATNESS_MIN_QP, dsc_cfg->flatness_min_qp);
   194		data |= FIELD_PREP(DSC_P6_FLATNESS_MAX_QP, dsc_cfg->flatness_max_qp);
   195		data |= FIELD_PREP(DSC_P6_RC_MODEL_SIZE, dsc_cfg->rc_model_size);
   196		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(6));
   197	
   198		/* PPS 7 */
   199		data = FIELD_PREP(DSC_P7_RC_EDGE_FACTOR, dsc_cfg->rc_edge_factor);
   200		data |= FIELD_PREP(DSC_P7_RC_QUANT_INCR_LIMIT0, dsc_cfg->rc_quant_incr_limit0);
   201		data |= FIELD_PREP(DSC_P7_RC_QUANT_INCR_LIMIT1, dsc_cfg->rc_quant_incr_limit1);
   202		data |= FIELD_PREP(DSC_P7_RC_TGT_OFFSET_HI, dsc_cfg->rc_tgt_offset_high);
   203		data |= FIELD_PREP(DSC_P7_RC_TGT_OFFSET_LO, dsc_cfg->rc_tgt_offset_low);
   204		writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(7));
   205	
   206		/* PPS 8..11 - Each register holds 4 RC buffer thresholds (PPS 11 has two) */
   207		for (i = 0; i < 4; i++) {
   208			u8 block_num = i * 4;
   209			data = 0;
   210	
   211			for (j = 0; j < 4; j++) {
   212				u8 buf_index = block_num + j;
   213				u8 data_shift = j * 8;
   214	
   215				/* rc_buf_thresh holds 14 elements in total */
   216				if (buf_index > 13)
   217					break;
   218	
   219				data |= (rbt[buf_index] & DSC_P8_RC_BUF_THR_X) << data_shift;
   220			}
   221			writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(8 + i));
   222		}
   223	
   224		/* PPS 12..18 - Each register holds two sets of RC range parameters */
   225		for (i = 0; i < 7; i++) {
   226			u8 block_num = i * 2;
   227			data = 0;
   228	
   229			for (j = 0; j < 2; j++) {
   230				u8 buf_index = block_num + j;
   231				u8 data_shift = j * 16;
   232				u32 range_data;
   233	
   234				range_data = FIELD_PREP(DSC_P12_RC_RANGE_MIN_QP,
   235							 rcrp[buf_index].range_min_qp);
   236				range_data |= FIELD_PREP(DSC_P12_RC_RANGE_MAX_QP,
   237							 rcrp[buf_index].range_max_qp);
   238				range_data |= FIELD_PREP(DSC_P12_RC_RANGE_BPG_OFFSET,
   239							 rcrp[buf_index].range_bpg_offset);
   240				data |= range_data << data_shift;
   241	
   242				/* rc_range_params holds 15 elements in total */
   243				if (buf_index == 13)
   244					break;
   245			}
   246			writel(data, disp_dsc->reg + DISP_REG_DSC_PPS(12 + i));
   247		}
   248	
   249		/* PPS 19 - Last RC range register, holds only one set of parameters */
   250		writel(FIELD_PREP(DSC_P12_RC_RANGE_MIN_QP, rcrp[14].range_min_qp) |
   251		       FIELD_PREP(DSC_P12_RC_RANGE_MAX_QP, rcrp[14].range_max_qp) |
   252		       FIELD_PREP(DSC_P12_RC_RANGE_BPG_OFFSET, rcrp[14].range_bpg_offset),
   253		       disp_dsc->reg + DISP_REG_DSC_PPS(19));
   254	}
   255	
   256	void mtk_dsc_setup(struct device *dev, struct drm_dsc_config *dsc_cfg)
   257	{
   258		struct mtk_dsc *disp_dsc = dev_get_drvdata(dev);
   259		u32 dsc_slice_w, dsc_slice_h, dsc_mode, dsc_cfg_rval, dsc_shadow;
   260		u32 dsc_dbg_con, dsc_con, dsc_enc_width, dsc_pic_w, dsc_pic_h;
   261		u32 pic_group_width, pic_height_ext_num, slice_group_width;
   262		u32 chunk_size, dsc_pad_num, dsc_pre_pad_sz;
   263		bool dsc_en_bit;
   264	
   265		pic_height_ext_num = dsc_cfg->pic_height + dsc_cfg->slice_height - 1;
   266		pic_group_width = (dsc_cfg->slice_width * 4) / 3;
   267		slice_group_width = (dsc_cfg->slice_width + 2) / 3;
   268	
   269		if (dsc_cfg->slice_chunk_size)
   270			chunk_size = dsc_cfg->slice_chunk_size;
   271		else
   272			chunk_size = dsc_cfg->slice_width * dsc_cfg->bits_per_pixel / 8 / 16;
   273	
   274		dsc_enc_width = FIELD_PREP(DSC_ENC_WIDTH_PIC, dsc_cfg->pic_width) |
   275				FIELD_PREP(DSC_ENC_WIDTH_SLICE, dsc_cfg->slice_width);
   276	
   277		dsc_pic_w = FIELD_PREP(DSC_PIC_GROUP_WIDTH_M1, pic_group_width - 1);
   278		dsc_pic_w |= FIELD_PREP(DSC_PIC_WIDTH, dsc_cfg->pic_width);
   279		dsc_pic_h = FIELD_PREP(DSC_PIC_HEIGHT_EXT_M1, pic_height_ext_num - 1);
   280		dsc_pic_h |= FIELD_PREP(DSC_PIC_HEIGHT, dsc_cfg->pic_height - 1);
   281	
   282		dsc_slice_w = FIELD_PREP(DSC_SLICE_GROUP_WIDTH_M1, slice_group_width - 1);
   283		dsc_slice_w |= FIELD_PREP(DSC_SLICE_WIDTH, dsc_cfg->slice_width);
   284		dsc_slice_h = FIELD_PREP(DSC_SLICE_WIDTH_MOD3, dsc_cfg->slice_width % 3);
   285		dsc_slice_h |= FIELD_PREP(DSC_SLICE_NUM_M1,
   286					  (pic_height_ext_num / dsc_cfg->slice_height) - 1);
   287		dsc_slice_h |= FIELD_PREP(DSC_SLICE_HEIGHT_M1, dsc_cfg->slice_height - 1);
   288	
   289		dsc_pad_num = (3 - ((chunk_size * 2) % 3)) % 3;
   290		dsc_pad_num = FIELD_PREP(DSC_PAD_NUMBER, dsc_pad_num);
   291	
   292		dsc_pre_pad_sz = FIELD_PREP(DSC_PIC_PREPAD_HEIGHT, dsc_cfg->pic_height);
   293		dsc_pre_pad_sz |= FIELD_PREP(DSC_PIC_PREPAD_WIDTH, dsc_cfg->pic_width);
   294	
   295		dsc_mode = FIELD_PREP(DSC_INIT_DELAY_HEIGHT, 4);
   296		dsc_mode |= FIELD_PREP(DSC_RGB_SWAP, 0);
   297		dsc_mode |= FIELD_PREP(DSC_TWO_SLICE_MODE, (dsc_cfg->slice_count == 2));
   298	
   299		/* Must enable checksum calc in DBG if enabling core checksum in CFG */
   300		dsc_cfg_rval = DSC_CFG_ICH_EN | DSC_CFG_CRC_EN | DSC_CFG_DSC12_BUGFIX |
   301			       DSC_CFG_CORE_CHECKSUM;
   302		dsc_dbg_con = DSC_CKSM_CAL_EN;
   303	
   304		if (dsc_cfg->bits_per_component == 8)
 > 305			dsc_cfg_rval |= FIELD_PREP_CONST(DSC_CFG_FLATNESS_DET_THRES,
   306							 DSC_CFG_FLATNESS_8BITS);
   307		else
   308			dsc_cfg_rval |= FIELD_PREP_CONST(DSC_CFG_FLATNESS_DET_THRES,
   309							 DSC_CFG_FLATNESS_10BITS);
   310	
   311		dsc_shadow = FIELD_PREP(DSC_SHADOW_DSC_VERSION_MINOR,
   312					dsc_cfg->dsc_version_minor);
   313		dsc_shadow |= DSC_FORCE_COMMIT | DSC_BYPASS_SHADOW;
   314	
   315		/* If DSC is currently enabled, disable it before setup and re-enable after */
   316		dsc_con = readl(disp_dsc->reg + DISP_REG_DSC_CON);
   317		if (dsc_con & DSC_EN) {
   318			dsc_en_bit = true;
   319			writel(dsc_con & ~DSC_EN, disp_dsc->reg + DISP_REG_DSC_CON);
   320		} else {
   321			dsc_en_bit = false;
   322		}
   323	
   324		writel(0, disp_dsc->reg + DISP_REG_DSC_SPR);
   325		writel(dsc_enc_width, disp_dsc->reg + DISP_REG_DSC_ENC_WIDTH);
   326		writel(dsc_pic_w, disp_dsc->reg + DISP_REG_DSC_PIC_W);
   327		writel(dsc_pic_h, disp_dsc->reg + DISP_REG_DSC_PIC_H);
   328		writel(dsc_slice_w, disp_dsc->reg + DISP_REG_DSC_SLICE_W);
   329		writel(dsc_slice_h, disp_dsc->reg + DISP_REG_DSC_SLICE_H);
   330		writel(((chunk_size * 4) / 3) << 16 | chunk_size,
   331		       disp_dsc->reg + DISP_REG_DSC_CHUNK_SIZE);
   332		writel(dsc_pre_pad_sz, disp_dsc->reg + DISP_REG_DSC_PIC_PRE_PAD_SIZE);
   333		writel(dsc_pad_num, disp_dsc->reg + DISP_REG_DSC_PAD);
   334		writel(FIELD_PREP(DISP_DSC_BUF_SIZE_MASK, chunk_size * dsc_cfg->slice_height),
   335		       disp_dsc->reg + DISP_REG_DSC_BUF_SIZE);
   336		writel(dsc_mode, disp_dsc->reg + DISP_REG_DSC_MODE);
   337		writel(dsc_cfg_rval, disp_dsc->reg + DISP_REG_DSC_CFG);
   338		writel(dsc_dbg_con, disp_dsc->reg + DISP_REG_DSC_DBG_CON);
   339		writel(FIELD_PREP_CONST(DSC_OBUF_SIZE, 1040), disp_dsc->reg + DISP_REG_DSC_OUTBUF);
   340		writel(dsc_shadow, disp_dsc->reg + DISP_REG_DSC_SHADOW);
   341	
   342		/* Set PPS registers configuration */
   343		mtk_dsc_pps_setup(disp_dsc, dsc_cfg);
   344	
   345		dsc_con = FIELD_PREP_CONST(DSC_EMPTY_FLAG_SEL, DSC_EMPTY_FLAG_ALWAYS_LOW);
   346		dsc_con |= DSC_V1_1_EXT | DSC_UFOE_SEL | DSC_PT_MEM_EN;
   347		dsc_con |= DSC_ZERO_FIFO_STALL_DISABLE;
   348	
   349		if (dsc_en_bit)
   350			dsc_con |= DSC_EN;
   351	
   352		writel(dsc_con, disp_dsc->reg + DISP_REG_DSC_CON);
   353	
   354		disp_dsc->dsc_config_done = true;
   355	}
   356	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-09-23  8:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-23  8:11 drivers/gpu/drm/mediatek/mtk_disp_dsc.c:161:16: error: implicit declaration of function 'FIELD_PREP' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.