From: kernel test robot <lkp@intel.com>
To: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Ulf Hansson <ulf.hansson@linaro.org>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>
Subject: drivers/pmdomain/mediatek/mtk-mfg-pmdomain.c:418:26: sparse: sparse: incorrect type in initializer (different base types)
Date: Wed, 15 Apr 2026 20:59:05 +0800 [thread overview]
Message-ID: <202604152003.Ca4OTE4b-lkp@intel.com> (raw)
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
reply other threads:[~2026-04-15 13:00 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202604152003.Ca4OTE4b-lkp@intel.com \
--to=lkp@intel.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.frattaroli@collabora.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.