[PATCH v7 16/18] drm/mediatek: Support CRC in display driver
kernel test robot
lkp at intel.com
Sat May 4 07:22:19 PDT 2024
Hi Shawn,
kernel test robot noticed the following build errors:
[auto build test ERROR on next-20240501]
[cannot apply to v6.9-rc6 v6.9-rc5 v6.9-rc4 linus/master v6.9-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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Shawn-Sung/soc-mediatek-Disable-9-bit-alpha-in-ETHDR/20240502-184103
base: next-20240501
patch link: https://lore.kernel.org/r/20240502103848.5845-17-shawn.sung%40mediatek.com
patch subject: [PATCH v7 16/18] drm/mediatek: Support CRC in display driver
config: arm64-defconfig (https://download.01.org/0day-ci/archive/20240504/202405042214.VhrmelKu-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240504/202405042214.VhrmelKu-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 at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202405042214.VhrmelKu-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/gpu/drm/mediatek/mtk_crtc.c: In function 'mtk_crtc_create_crc_cmdq':
>> drivers/gpu/drm/mediatek/mtk_crtc.c:1362:9: error: too few arguments to function 'cmdq_pkt_jump'
1362 | cmdq_pkt_jump(&crc->cmdq_handle, crc->cmdq_handle.pa_base);
| ^~~~~~~~~~~~~
In file included from drivers/gpu/drm/mediatek/mtk_crtc.c:11:
include/linux/soc/mediatek/mtk-cmdq.h:319:19: note: declared here
319 | static inline int cmdq_pkt_jump(struct cmdq_pkt *pkt, dma_addr_t addr, u8 shift_pa)
| ^~~~~~~~~~~~~
vim +/cmdq_pkt_jump +1362 drivers/gpu/drm/mediatek/mtk_crtc.c
1267
1268 #if IS_REACHABLE(CONFIG_MTK_CMDQ)
1269 /**
1270 * mtk_crtc_create_crc_cmdq - Create a CMDQ thread for syncing the CRCs
1271 * @dev: Kernel device node of the CRC provider
1272 * @crc: Pointer of the CRC to init
1273 *
1274 * This function will create a looping thread on GCE (Global Command Engine) to
1275 * keep the CRC up to date by monitoring the assigned event (usually the frame
1276 * done event) of the CRC provider, and read the CRCs from the registers to a
1277 * shared memory for the workqueue to read. To start/stop the looping thread,
1278 * please call `mtk_crtc_start_crc_cmdq()` and `mtk_crtc_stop_crc_cmdq()`
1279 * defined blow.
1280 *
1281 * The reason why we don't update the CRCs with CPU is that the front porch of
1282 * 4K60 timing in CEA-861 is less than 60us, and register read/write speed is
1283 * relatively unreliable comparing to GCE due to the bus design.
1284 *
1285 * We must create a new thread instead of using the original one for plane
1286 * update is because:
1287 * 1. We cannot add another wait-for-event command at the end of cmdq packet, or
1288 * the cmdq callback will delay for too long
1289 * 2. Will get the CRC of the previous frame if using the existed wait-for-event
1290 * command which is at the beginning of the packet
1291 */
1292 void mtk_crtc_create_crc_cmdq(struct device *dev, struct mtk_crtc_crc *crc)
1293 {
1294 int i;
1295
1296 if (!crc->cnt) {
1297 dev_warn(dev, "%s: not support\n", __func__);
1298 goto cleanup;
1299 }
1300
1301 if (!crc->ofs) {
1302 dev_warn(dev, "%s: not defined\n", __func__);
1303 goto cleanup;
1304 }
1305
1306 crc->cmdq_client.client.dev = dev;
1307 crc->cmdq_client.client.tx_block = false;
1308 crc->cmdq_client.client.knows_txdone = true;
1309 crc->cmdq_client.client.rx_callback = NULL;
1310 crc->cmdq_client.chan = mbox_request_channel(&crc->cmdq_client.client, 0);
1311 if (IS_ERR(crc->cmdq_client.chan)) {
1312 dev_warn(dev, "%s: failed to create mailbox client\n", __func__);
1313 crc->cmdq_client.chan = NULL;
1314 goto cleanup;
1315 }
1316
1317 if (mtk_drm_cmdq_pkt_create(&crc->cmdq_client, &crc->cmdq_handle, PAGE_SIZE)) {
1318 dev_warn(dev, "%s: failed to create cmdq packet\n", __func__);
1319 goto cleanup;
1320 }
1321
1322 if (!crc->va) {
1323 dev_warn(dev, "%s: no memory\n", __func__);
1324 goto cleanup;
1325 }
1326
1327 /* map the entry to get a dma address for cmdq to store the crc */
1328 crc->pa = dma_map_single(crc->cmdq_client.chan->mbox->dev,
1329 crc->va, crc->cnt * sizeof(*crc->va),
1330 DMA_FROM_DEVICE);
1331
1332 if (dma_mapping_error(crc->cmdq_client.chan->mbox->dev, crc->pa)) {
1333 dev_err(dev, "%s: failed to map dma\n", __func__);
1334 goto cleanup;
1335 }
1336
1337 if (crc->cmdq_event)
1338 cmdq_pkt_wfe(&crc->cmdq_handle, crc->cmdq_event, true);
1339
1340 for (i = 0; i < crc->cnt; i++) {
1341 /* put crc to spr1 register */
1342 cmdq_pkt_read_s(&crc->cmdq_handle, crc->cmdq_reg->subsys,
1343 crc->cmdq_reg->offset + crc->ofs[i],
1344 CMDQ_THR_SPR_IDX1);
1345
1346 /* copy spr1 register to physical address of the crc */
1347 cmdq_pkt_assign(&crc->cmdq_handle, CMDQ_THR_SPR_IDX0,
1348 CMDQ_ADDR_HIGH(crc->pa + i * sizeof(*crc->va)));
1349 cmdq_pkt_write_s(&crc->cmdq_handle, CMDQ_THR_SPR_IDX0,
1350 CMDQ_ADDR_LOW(crc->pa + i * sizeof(*crc->va)),
1351 CMDQ_THR_SPR_IDX1);
1352 }
1353 /* reset crc */
1354 mtk_ddp_write_mask(&crc->cmdq_handle, ~0, crc->cmdq_reg, 0,
1355 crc->rst_ofs, crc->rst_msk);
1356
1357 /* clear reset bit */
1358 mtk_ddp_write_mask(&crc->cmdq_handle, 0, crc->cmdq_reg, 0,
1359 crc->rst_ofs, crc->rst_msk);
1360
1361 /* jump to head of the cmdq packet */
> 1362 cmdq_pkt_jump(&crc->cmdq_handle, crc->cmdq_handle.pa_base);
1363
1364 return;
1365 cleanup:
1366 mtk_crtc_destroy_crc(crc);
1367 }
1368
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
More information about the linux-arm-kernel
mailing list