* drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:418:26: sparse: sparse: incorrect type in initializer (different base types)
@ 2026-04-15 12:59 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-04-15 12:59 UTC (permalink / raw)
To: Nicolas Frattaroli
Cc: oe-kbuild-all, linux-kernel, Ulf Hansson,
AngeloGioacchino Del Regno
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 1f5ffc672165ff851063a5fd044b727ab2517ae3
commit: f08e7a4e8d6ac4de677727af352ea33c6ce9f444 pmdomain: mediatek: Add support for MFlexGraphics
date: 5 months ago
config: arm64-randconfig-r113-20260415 (https://download.01.org/0day-ci/archive/20260415/202604152003.Ca4OTE4b-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 8.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260415/202604152003.Ca4OTE4b-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
| Fixes: f08e7a4e8d6a ("pmdomain: mediatek: Add support for MFlexGraphics")
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202604152003.Ca4OTE4b-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:418:26: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __le32 [usertype] magic @@ got unsigned long @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:418:26: sparse: expected restricted __le32 [usertype] magic
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:418:26: sparse: got unsigned long
>> drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:458:20: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] magic @@ got unsigned int [usertype] ipi_magic @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:458:20: sparse: expected restricted __le32 [usertype] magic
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:458:20: sparse: got unsigned int [usertype] ipi_magic
>> drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:472:19: sparse: sparse: restricted signed int degrades to integer
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:490:31: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le64 [assigned] [usertype] base @@ got unsigned long long [usertype] shared_mem_phys @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:490:31: sparse: expected restricted __le64 [assigned] [usertype] base
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:490:31: sparse: got unsigned long long [usertype] shared_mem_phys
>> drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:491:31: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [assigned] [usertype] size @@ got unsigned int shared_mem_size @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:491:31: sparse: expected restricted __le32 [assigned] [usertype] size
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:491:31: sparse: got unsigned int shared_mem_size
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:509:17: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cmd @@ got int @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:509:17: sparse: expected restricted __le32 [usertype] cmd
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:509:17: sparse: got int
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:510:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] power_state @@ got int @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:510:27: sparse: expected restricted __le32 [usertype] power_state
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:510:27: sparse: got int
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:523:17: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cmd @@ got int @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:523:17: sparse: expected restricted __le32 [usertype] cmd
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:523:17: sparse: got int
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:524:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted signed int [usertype] gpu_oppidx @@ got unsigned int opp_idx @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:524:38: sparse: expected restricted signed int [usertype] gpu_oppidx
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:524:38: sparse: got unsigned int opp_idx
>> drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:525:40: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted signed int [usertype] stack_oppidx @@ got unsigned int opp_idx @@
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:525:40: sparse: expected restricted signed int [usertype] stack_oppidx
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:525:40: sparse: got unsigned int opp_idx
>> drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:578:42: sparse: sparse: restricted __le32 degrades to integer
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:579:44: sparse: sparse: restricted __le32 degrades to integer
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:593:44: sparse: sparse: restricted __le32 degrades to integer
drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:594:46: sparse: sparse: restricted __le32 degrades to integer
vim +418 drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c
411
412 static int mtk_mfg_eb_off(struct mtk_mfg *mfg)
413 {
414 struct device *dev = &mfg->pdev->dev;
415 struct mtk_mfg_ipi_sleep_msg msg = {
416 .event = 0,
417 .state = 0,
> 418 .magic = GPUEB_SLEEP_MAGIC
419 };
420 u32 val;
421 int ret;
422
423 ret = mbox_send_message(mfg->slp_mbox->ch, &msg);
424 if (ret < 0) {
425 dev_err(dev, "Cannot send sleep command: %pe\n", ERR_PTR(ret));
426 return ret;
427 }
428
429 ret = readl_poll_timeout(mfg->rpc + RPC_PWR_CON, val,
430 !(val & PWR_ACK_M), GPUEB_POLL_US,
431 GPUEB_TIMEOUT_US);
432
433 if (ret) {
434 dev_err(dev, "Timed out waiting for EB to power off, val=0x%08X\n", val);
435 return ret;
436 }
437
438 return 0;
439 }
440
441 /**
442 * mtk_mfg_send_ipi - synchronously send an IPI message on the gpufreq channel
443 * @mfg: pointer to this driver instance's private &struct mtk_mfg
444 * @msg: pointer to a message to send; will have magic filled and response assigned
445 *
446 * Send an IPI message on the gpufreq channel, and wait for a response. Once a
447 * response is received, assign a pointer to the response buffer (valid until
448 * next response is received) to @msg.
449 *
450 * Returns 0 on success, negative errno on failure.
451 */
452 static int mtk_mfg_send_ipi(struct mtk_mfg *mfg, struct mtk_mfg_ipi_msg *msg)
453 {
454 struct device *dev = &mfg->pdev->dev;
455 unsigned long wait;
456 int ret;
457
> 458 msg->magic = mfg->ipi_magic;
459
460 ret = mbox_send_message(mfg->gf_mbox->ch, msg);
461 if (ret < 0) {
462 dev_err(dev, "Cannot send GPUFreq IPI command: %pe\n", ERR_PTR(ret));
463 return ret;
464 }
465
466 wait = wait_for_completion_timeout(&mfg->gf_mbox->rx_done, msecs_to_jiffies(500));
467 if (!wait)
468 return -ETIMEDOUT;
469
470 msg = mfg->gf_mbox->rx_data;
471
> 472 if (msg->u.return_value < 0) {
473 dev_err(dev, "IPI return: %d\n", msg->u.return_value);
474 return -EPROTO;
475 }
476
477 return 0;
478 }
479
480 static int mtk_mfg_init_shared_mem(struct mtk_mfg *mfg)
481 {
482 struct device *dev = &mfg->pdev->dev;
483 struct mtk_mfg_ipi_msg msg = {};
484 int ret;
485
486 dev_dbg(dev, "clearing GPUEB shared memory, 0x%X bytes\n", mfg->shared_mem_size);
487 memset_io(mfg->shared_mem, 0, mfg->shared_mem_size);
488
489 msg.cmd = CMD_INIT_SHARED_MEM;
490 msg.u.shared_mem.base = mfg->shared_mem_phys;
> 491 msg.u.shared_mem.size = mfg->shared_mem_size;
492
493 ret = mtk_mfg_send_ipi(mfg, &msg);
494 if (ret)
495 return ret;
496
497 if (readl(mfg->shared_mem + GF_REG_MAGIC) != GPUEB_MEM_MAGIC) {
498 dev_err(dev, "EB did not initialise shared memory correctly\n");
499 return -EIO;
500 }
501
502 return 0;
503 }
504
505 static int mtk_mfg_power_control(struct mtk_mfg *mfg, bool enabled)
506 {
507 struct mtk_mfg_ipi_msg msg = {};
508
509 msg.cmd = CMD_POWER_CONTROL;
510 msg.u.power_state = enabled ? 1 : 0;
511
512 return mtk_mfg_send_ipi(mfg, &msg);
513 }
514
515 static int mtk_mfg_set_oppidx(struct mtk_mfg *mfg, unsigned int opp_idx)
516 {
517 struct mtk_mfg_ipi_msg msg = {};
518 int ret;
519
520 if (opp_idx >= mfg->num_gpu_opps)
521 return -EINVAL;
522
523 msg.cmd = CMD_FIX_DUAL_TARGET_OPPIDX;
524 msg.u.dual_commit.gpu_oppidx = opp_idx;
> 525 msg.u.dual_commit.stack_oppidx = opp_idx;
526
527 ret = mtk_mfg_send_ipi(mfg, &msg);
528 if (ret) {
529 dev_err(&mfg->pdev->dev, "Failed to set OPP %u: %pe\n",
530 opp_idx, ERR_PTR(ret));
531 return ret;
532 }
533
534 return 0;
535 }
536
537 static int mtk_mfg_read_opp_tables(struct mtk_mfg *mfg)
538 {
539 struct device *dev = &mfg->pdev->dev;
540 struct mtk_mfg_opp_entry e = {};
541 unsigned int i;
542
543 mfg->num_gpu_opps = readl(mfg->shared_mem + GF_REG_GPU_OPP_NUM);
544 mfg->num_stack_opps = readl(mfg->shared_mem + GF_REG_STK_OPP_NUM);
545
546 if (mfg->num_gpu_opps > MAX_OPP_NUM || mfg->num_gpu_opps == 0) {
547 dev_err(dev, "GPU OPP count (%u) out of range %u >= count > 0\n",
548 mfg->num_gpu_opps, MAX_OPP_NUM);
549 return -EINVAL;
550 }
551
552 if (mfg->num_stack_opps && mfg->num_stack_opps > MAX_OPP_NUM) {
553 dev_err(dev, "Stack OPP count (%u) out of range %u >= count >= 0\n",
554 mfg->num_stack_opps, MAX_OPP_NUM);
555 return -EINVAL;
556 }
557
558 mfg->gpu_opps = devm_kcalloc(dev, mfg->num_gpu_opps,
559 sizeof(struct dev_pm_opp_data), GFP_KERNEL);
560 if (!mfg->gpu_opps)
561 return -ENOMEM;
562
563 if (mfg->num_stack_opps) {
564 mfg->stack_opps = devm_kcalloc(dev, mfg->num_stack_opps,
565 sizeof(struct dev_pm_opp_data), GFP_KERNEL);
566 if (!mfg->stack_opps)
567 return -ENOMEM;
568 }
569
570 for (i = 0; i < mfg->num_gpu_opps; i++) {
571 memcpy_fromio(&e, mfg->shared_mem + GF_REG_OPP_TABLE_GPU + i * sizeof(e),
572 sizeof(e));
573 if (mem_is_zero(&e, sizeof(e))) {
574 dev_err(dev, "ran into an empty GPU OPP at index %u\n",
575 i);
576 return -EINVAL;
577 }
> 578 mfg->gpu_opps[i].freq = e.freq_khz * HZ_PER_KHZ;
579 mfg->gpu_opps[i].u_volt = e.voltage_core * 10;
580 mfg->gpu_opps[i].level = i;
581 if (i < mfg->variant->turbo_below)
582 mfg->gpu_opps[i].turbo = true;
583 }
584
585 for (i = 0; i < mfg->num_stack_opps; i++) {
586 memcpy_fromio(&e, mfg->shared_mem + GF_REG_OPP_TABLE_STK + i * sizeof(e),
587 sizeof(e));
588 if (mem_is_zero(&e, sizeof(e))) {
589 dev_err(dev, "ran into an empty Stack OPP at index %u\n",
590 i);
591 return -EINVAL;
592 }
593 mfg->stack_opps[i].freq = e.freq_khz * HZ_PER_KHZ;
594 mfg->stack_opps[i].u_volt = e.voltage_core * 10;
595 mfg->stack_opps[i].level = i;
596 if (i < mfg->variant->turbo_below)
597 mfg->stack_opps[i].turbo = true;
598 }
599
600 return 0;
601 }
602
--
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-04-15 13:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-15 12:59 drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:418:26: sparse: sparse: incorrect type in initializer (different base types) kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox