From: Biju Das <biju.das.jz@bp.renesas.com>
To: kernel test robot <lkp@intel.com>
Cc: "oe-kbuild-all@lists.linux.dev" <oe-kbuild-all@lists.linux.dev>,
Linux Memory Management List <linux-mm@kvack.org>,
Lee Jones <lee@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>
Subject: RE: [linux-next:master 1582/5027] drivers/counter/rz-mtu3-cnt.c:602: undefined reference to `rz_mtu3_shared_reg_update_bit'
Date: Fri, 28 Jul 2023 06:55:11 +0000 [thread overview]
Message-ID: <OS0PR01MB5922EDD75757A7C96E4B7EF08606A@OS0PR01MB5922.jpnprd01.prod.outlook.com> (raw)
In-Reply-To: <202307280957.1acIz9dc-lkp@intel.com>
Hi kernel test robot,
This should be fixed by [1]
[1] https://lore.kernel.org/all/20230719090430.1925182-1-arnd@kernel.org/
Can you please try after applying this patch?
Cheers,
Biju
> Subject: [linux-next:master 1582/5027] drivers/counter/rz-mtu3-
> cnt.c:602: undefined reference to `rz_mtu3_shared_reg_update_bit'
>
> 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:
>
> All errors (new ones prefixed by >>):
>
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_ext_input_phase_clock_select_set':
> >> drivers/counter/rz-mtu3-cnt.c:602: undefined reference to
> `rz_mtu3_shared_reg_update_bit'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_cascade_counts_enable_set':
> drivers/counter/rz-mtu3-cnt.c:563: undefined reference to
> `rz_mtu3_shared_reg_update_bit'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_ext_input_phase_clock_select_get':
> >> drivers/counter/rz-mtu3-cnt.c:583: undefined reference to
> `rz_mtu3_shared_reg_read'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_cascade_counts_enable_get':
> drivers/counter/rz-mtu3-cnt.c:544: undefined reference to
> `rz_mtu3_shared_reg_read'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_lock_if_counter_is_valid':
> drivers/counter/rz-mtu3-cnt.c:111: undefined reference to
> `rz_mtu3_shared_reg_read'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_direction_read':
> >> drivers/counter/rz-mtu3-cnt.c:304: undefined reference to
> `rz_mtu3_8bit_ch_read'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_function_write':
> >> drivers/counter/rz-mtu3-cnt.c:283: undefined reference to
> `rz_mtu3_8bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_function_read':
> drivers/counter/rz-mtu3-cnt.c:208: undefined reference to
> `rz_mtu3_8bit_ch_read'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_write':
> >> drivers/counter/rz-mtu3-cnt.c:194: undefined reference to
> `rz_mtu3_16bit_ch_write'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:192: undefined reference
> to `rz_mtu3_32bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_read':
> >> drivers/counter/rz-mtu3-cnt.c:172: undefined reference to
> `rz_mtu3_16bit_ch_read'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:170: undefined reference
> to `rz_mtu3_32bit_ch_read'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_enable_read':
> >> drivers/counter/rz-mtu3-cnt.c:488: undefined reference to
> `rz_mtu3_is_enabled'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:486: undefined reference
> to `rz_mtu3_is_enabled'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:486: undefined reference
> to `rz_mtu3_is_enabled'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_ceiling_write':
> drivers/counter/rz-mtu3-cnt.c:384: undefined reference to
> `rz_mtu3_16bit_ch_write'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:386: undefined reference
> to `rz_mtu3_8bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:382: undefined reference
> to `rz_mtu3_32bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_action_read':
> drivers/counter/rz-mtu3-cnt.c:208: undefined reference to
> `rz_mtu3_8bit_ch_read'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:653: undefined reference
> to `rz_mtu3_shared_reg_read'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_initialize_counter':
> drivers/counter/rz-mtu3-cnt.c:413: undefined reference to
> `rz_mtu3_8bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:415: undefined reference
> to `rz_mtu3_8bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:416: undefined reference
> to `rz_mtu3_8bit_ch_write'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:417: undefined reference
> to `rz_mtu3_enable'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:399: undefined reference
> to `rz_mtu3_8bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:401: undefined reference
> to `rz_mtu3_8bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:402: undefined reference
> to `rz_mtu3_8bit_ch_write'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:404: undefined reference
> to `rz_mtu3_enable'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:405: undefined reference
> to `rz_mtu3_enable'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_enable_write':
> >> drivers/counter/rz-mtu3-cnt.c:468: undefined reference to
> `rz_mtu3_disable'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:464: undefined reference
> to `rz_mtu3_disable'
> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:465: undefined reference
> to `rz_mtu3_disable'
>
>
> vim +602 drivers/counter/rz-mtu3-cnt.c
>
> 0be8907359df4c6 Biju Das 2023-03-30 407
> 0be8907359df4c6 Biju Das 2023-03-30 408 static void
> rz_mtu3_16bit_cnt_setting(struct counter_device *counter, int id)
> 0be8907359df4c6 Biju Das 2023-03-30 409 {
> 0be8907359df4c6 Biju Das 2023-03-30 410 struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30 411
> 0be8907359df4c6 Biju Das 2023-03-30 412 /* Phase counting mode 1
> is used as default in initialization. */
> 0be8907359df4c6 Biju Das 2023-03-30 413 rz_mtu3_8bit_ch_write(ch,
> RZ_MTU3_TMDR1, RZ_MTU3_TMDR1_PH_CNT_MODE_1);
> 0be8907359df4c6 Biju Das 2023-03-30 414
> 0be8907359df4c6 Biju Das 2023-03-30 415 rz_mtu3_8bit_ch_write(ch,
> RZ_MTU3_TCR, RZ_MTU3_TCR_CCLR_TGRA);
> 0be8907359df4c6 Biju Das 2023-03-30 416 rz_mtu3_8bit_ch_write(ch,
> RZ_MTU3_TIOR, RZ_MTU3_TIOR_NO_OUTPUT);
> 0be8907359df4c6 Biju Das 2023-03-30 @417 rz_mtu3_enable(ch);
> 0be8907359df4c6 Biju Das 2023-03-30 418 }
> 0be8907359df4c6 Biju Das 2023-03-30 419
> 0be8907359df4c6 Biju Das 2023-03-30 420 static int
> rz_mtu3_initialize_counter(struct counter_device *counter, int id)
> 0be8907359df4c6 Biju Das 2023-03-30 421 {
> 0be8907359df4c6 Biju Das 2023-03-30 422 struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30 423 struct rz_mtu3_channel
> *const ch1 = rz_mtu3_get_ch(counter, 0);
> 0be8907359df4c6 Biju Das 2023-03-30 424 struct rz_mtu3_channel
> *const ch2 = rz_mtu3_get_ch(counter, 1);
> 0be8907359df4c6 Biju Das 2023-03-30 425
> 0be8907359df4c6 Biju Das 2023-03-30 426 switch (id) {
> 0be8907359df4c6 Biju Das 2023-03-30 427 case
> RZ_MTU3_16_BIT_MTU1_CH:
> 0be8907359df4c6 Biju Das 2023-03-30 428 case
> RZ_MTU3_16_BIT_MTU2_CH:
> 0be8907359df4c6 Biju Das 2023-03-30 429 if
> (!rz_mtu3_request_channel(ch))
> 0be8907359df4c6 Biju Das 2023-03-30 430 return -
> EBUSY;
> 0be8907359df4c6 Biju Das 2023-03-30 431
> 0be8907359df4c6 Biju Das 2023-03-30 432
> rz_mtu3_16bit_cnt_setting(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30 433 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 434 case RZ_MTU3_32_BIT_CH:
> 0be8907359df4c6 Biju Das 2023-03-30 435 /*
> 0be8907359df4c6 Biju Das 2023-03-30 436 * 32-bit phase
> counting need MTU1 and MTU2 to create 32-bit
> 0be8907359df4c6 Biju Das 2023-03-30 437 * cascade counter.
> 0be8907359df4c6 Biju Das 2023-03-30 438 */
> 0be8907359df4c6 Biju Das 2023-03-30 439 if
> (!rz_mtu3_request_channel(ch1))
> 0be8907359df4c6 Biju Das 2023-03-30 440 return -
> EBUSY;
> 0be8907359df4c6 Biju Das 2023-03-30 441
> 0be8907359df4c6 Biju Das 2023-03-30 442 if
> (!rz_mtu3_request_channel(ch2)) {
> 0be8907359df4c6 Biju Das 2023-03-30 443
> rz_mtu3_release_channel(ch1);
> 0be8907359df4c6 Biju Das 2023-03-30 444 return -
> EBUSY;
> 0be8907359df4c6 Biju Das 2023-03-30 445 }
> 0be8907359df4c6 Biju Das 2023-03-30 446
> 0be8907359df4c6 Biju Das 2023-03-30 447
> rz_mtu3_32bit_cnt_setting(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 448 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 449 default:
> 0be8907359df4c6 Biju Das 2023-03-30 450 /* should never
> reach this path */
> 0be8907359df4c6 Biju Das 2023-03-30 451 return -EINVAL;
> 0be8907359df4c6 Biju Das 2023-03-30 452 }
> 0be8907359df4c6 Biju Das 2023-03-30 453 }
> 0be8907359df4c6 Biju Das 2023-03-30 454
> 0be8907359df4c6 Biju Das 2023-03-30 455 static void
> rz_mtu3_terminate_counter(struct counter_device *counter, int id)
> 0be8907359df4c6 Biju Das 2023-03-30 456 {
> 0be8907359df4c6 Biju Das 2023-03-30 457 struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30 458 struct rz_mtu3_channel
> *const ch1 = rz_mtu3_get_ch(counter, 0);
> 0be8907359df4c6 Biju Das 2023-03-30 459 struct rz_mtu3_channel
> *const ch2 = rz_mtu3_get_ch(counter, 1);
> 0be8907359df4c6 Biju Das 2023-03-30 460
> 0be8907359df4c6 Biju Das 2023-03-30 461 if (id ==
> RZ_MTU3_32_BIT_CH) {
> 0be8907359df4c6 Biju Das 2023-03-30 462
> rz_mtu3_release_channel(ch2);
> 0be8907359df4c6 Biju Das 2023-03-30 463
> rz_mtu3_release_channel(ch1);
> 0be8907359df4c6 Biju Das 2023-03-30 @464
> rz_mtu3_disable(ch2);
> 0be8907359df4c6 Biju Das 2023-03-30 465
> rz_mtu3_disable(ch1);
> 0be8907359df4c6 Biju Das 2023-03-30 466 } else {
> 0be8907359df4c6 Biju Das 2023-03-30 467
> rz_mtu3_release_channel(ch);
> 0be8907359df4c6 Biju Das 2023-03-30 @468
> rz_mtu3_disable(ch);
> 0be8907359df4c6 Biju Das 2023-03-30 469 }
> 0be8907359df4c6 Biju Das 2023-03-30 470 }
> 0be8907359df4c6 Biju Das 2023-03-30 471
> 0be8907359df4c6 Biju Das 2023-03-30 472 static int
> rz_mtu3_count_enable_read(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30 473
> struct counter_count *count, u8 *enable)
> 0be8907359df4c6 Biju Das 2023-03-30 474 {
> 0be8907359df4c6 Biju Das 2023-03-30 475 struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30 476 struct rz_mtu3_channel
> *const ch1 = rz_mtu3_get_ch(counter, 0);
> 0be8907359df4c6 Biju Das 2023-03-30 477 struct rz_mtu3_channel
> *const ch2 = rz_mtu3_get_ch(counter, 1);
> 0be8907359df4c6 Biju Das 2023-03-30 478 struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 479 int ret;
> 0be8907359df4c6 Biju Das 2023-03-30 480
> 0be8907359df4c6 Biju Das 2023-03-30 481 ret =
> rz_mtu3_lock_if_count_is_enabled(ch, priv, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30 482 if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30 483 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 484
> 0be8907359df4c6 Biju Das 2023-03-30 485 if (count->id ==
> RZ_MTU3_32_BIT_CH)
> 0be8907359df4c6 Biju Das 2023-03-30 @486 *enable =
> rz_mtu3_is_enabled(ch1) && rz_mtu3_is_enabled(ch2);
> 0be8907359df4c6 Biju Das 2023-03-30 487 else
> 0be8907359df4c6 Biju Das 2023-03-30 @488 *enable =
> rz_mtu3_is_enabled(ch);
> 0be8907359df4c6 Biju Das 2023-03-30 489
> 0be8907359df4c6 Biju Das 2023-03-30 490 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 491
> 0be8907359df4c6 Biju Das 2023-03-30 492 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 493 }
> 0be8907359df4c6 Biju Das 2023-03-30 494
> 0be8907359df4c6 Biju Das 2023-03-30 495 static int
> rz_mtu3_count_enable_write(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30 496
> struct counter_count *count, u8 enable)
> 0be8907359df4c6 Biju Das 2023-03-30 497 {
> 0be8907359df4c6 Biju Das 2023-03-30 498 struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30 499 struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 500 int ret = 0;
> 0be8907359df4c6 Biju Das 2023-03-30 501
> 0be8907359df4c6 Biju Das 2023-03-30 502 if (enable) {
> 0be8907359df4c6 Biju Das 2023-03-30 503
> pm_runtime_get_sync(ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30 504 mutex_lock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 505 ret =
> rz_mtu3_initialize_counter(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30 506 if (ret == 0)
> 0be8907359df4c6 Biju Das 2023-03-30 507 priv-
> >count_is_enabled[count->id] = true;
> 0be8907359df4c6 Biju Das 2023-03-30 508 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 509 } else {
> 0be8907359df4c6 Biju Das 2023-03-30 510 mutex_lock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 511
> rz_mtu3_terminate_counter(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30 512 priv-
> >count_is_enabled[count->id] = false;
> 0be8907359df4c6 Biju Das 2023-03-30 513 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 514 pm_runtime_put(ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30 515 }
> 0be8907359df4c6 Biju Das 2023-03-30 516
> 0be8907359df4c6 Biju Das 2023-03-30 517 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 518 }
> 0be8907359df4c6 Biju Das 2023-03-30 519
> 0be8907359df4c6 Biju Das 2023-03-30 520 static int
> rz_mtu3_lock_if_ch0_is_enabled(struct rz_mtu3_cnt *const priv)
> 0be8907359df4c6 Biju Das 2023-03-30 521 {
> 0be8907359df4c6 Biju Das 2023-03-30 522 mutex_lock(&priv->lock);
> 0be8907359df4c6 Biju Das 2023-03-30 523 if (priv->ch->is_busy
> && !(priv->count_is_enabled[RZ_MTU3_16_BIT_MTU1_CH] ||
> 0be8907359df4c6 Biju Das 2023-03-30 524
> priv->count_is_enabled[RZ_MTU3_32_BIT_CH])) {
> 0be8907359df4c6 Biju Das 2023-03-30 525 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 526 return -EINVAL;
> 0be8907359df4c6 Biju Das 2023-03-30 527 }
> 0be8907359df4c6 Biju Das 2023-03-30 528
> 0be8907359df4c6 Biju Das 2023-03-30 529 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 530 }
> 0be8907359df4c6 Biju Das 2023-03-30 531
> 0be8907359df4c6 Biju Das 2023-03-30 532 static int
> rz_mtu3_cascade_counts_enable_get(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30 533
> u8 *cascade_enable)
> 0be8907359df4c6 Biju Das 2023-03-30 534 {
> 0be8907359df4c6 Biju Das 2023-03-30 535 struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 536 unsigned long tmdr;
> 0be8907359df4c6 Biju Das 2023-03-30 537 int ret;
> 0be8907359df4c6 Biju Das 2023-03-30 538
> 0be8907359df4c6 Biju Das 2023-03-30 539 ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30 540 if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30 541 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 542
> 0be8907359df4c6 Biju Das 2023-03-30 543 pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30 544 tmdr =
> rz_mtu3_shared_reg_read(priv->ch, RZ_MTU3_TMDR3);
> 0be8907359df4c6 Biju Das 2023-03-30 545 pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30 546 *cascade_enable =
> test_bit(RZ_MTU3_TMDR3_LWA, &tmdr);
> 0be8907359df4c6 Biju Das 2023-03-30 547 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 548
> 0be8907359df4c6 Biju Das 2023-03-30 549 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 550 }
> 0be8907359df4c6 Biju Das 2023-03-30 551
> 0be8907359df4c6 Biju Das 2023-03-30 552 static int
> rz_mtu3_cascade_counts_enable_set(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30 553
> u8 cascade_enable)
> 0be8907359df4c6 Biju Das 2023-03-30 554 {
> 0be8907359df4c6 Biju Das 2023-03-30 555 struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 556 int ret;
> 0be8907359df4c6 Biju Das 2023-03-30 557
> 0be8907359df4c6 Biju Das 2023-03-30 558 ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30 559 if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30 560 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 561
> 0be8907359df4c6 Biju Das 2023-03-30 562 pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30 563
> rz_mtu3_shared_reg_update_bit(priv->ch, RZ_MTU3_TMDR3,
> 0be8907359df4c6 Biju Das 2023-03-30 564
> RZ_MTU3_TMDR3_LWA, cascade_enable);
> 0be8907359df4c6 Biju Das 2023-03-30 565 pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30 566 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 567
> 0be8907359df4c6 Biju Das 2023-03-30 568 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 569 }
> 0be8907359df4c6 Biju Das 2023-03-30 570
> 0be8907359df4c6 Biju Das 2023-03-30 571 static int
> rz_mtu3_ext_input_phase_clock_select_get(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30 572
> u32 *ext_input_phase_clock_select)
> 0be8907359df4c6 Biju Das 2023-03-30 573 {
> 0be8907359df4c6 Biju Das 2023-03-30 574 struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 575 unsigned long tmdr;
> 0be8907359df4c6 Biju Das 2023-03-30 576 int ret;
> 0be8907359df4c6 Biju Das 2023-03-30 577
> 0be8907359df4c6 Biju Das 2023-03-30 578 ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30 579 if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30 580 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 581
> 0be8907359df4c6 Biju Das 2023-03-30 582 pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30 @583 tmdr =
> rz_mtu3_shared_reg_read(priv->ch, RZ_MTU3_TMDR3);
> 0be8907359df4c6 Biju Das 2023-03-30 584 pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30 585
> *ext_input_phase_clock_select = test_bit(RZ_MTU3_TMDR3_PHCKSEL,
> &tmdr);
> 0be8907359df4c6 Biju Das 2023-03-30 586 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 587
> 0be8907359df4c6 Biju Das 2023-03-30 588 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 589 }
> 0be8907359df4c6 Biju Das 2023-03-30 590
> 0be8907359df4c6 Biju Das 2023-03-30 591 static int
> rz_mtu3_ext_input_phase_clock_select_set(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30 592
> u32 ext_input_phase_clock_select)
> 0be8907359df4c6 Biju Das 2023-03-30 593 {
> 0be8907359df4c6 Biju Das 2023-03-30 594 struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 595 int ret;
> 0be8907359df4c6 Biju Das 2023-03-30 596
> 0be8907359df4c6 Biju Das 2023-03-30 597 ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30 598 if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30 599 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 600
> 0be8907359df4c6 Biju Das 2023-03-30 601 pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30 @602
> rz_mtu3_shared_reg_update_bit(priv->ch, RZ_MTU3_TMDR3,
> 0be8907359df4c6 Biju Das 2023-03-30 603
> RZ_MTU3_TMDR3_PHCKSEL,
> 0be8907359df4c6 Biju Das 2023-03-30 604
> ext_input_phase_clock_select);
> 0be8907359df4c6 Biju Das 2023-03-30 605 pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30 606 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 607
> 0be8907359df4c6 Biju Das 2023-03-30 608 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 609 }
> 0be8907359df4c6 Biju Das 2023-03-30 610
> 0be8907359df4c6 Biju Das 2023-03-30 611 static struct counter_comp
> rz_mtu3_count_ext[] = {
> 0be8907359df4c6 Biju Das 2023-03-30 612
> COUNTER_COMP_DIRECTION(rz_mtu3_count_direction_read),
> 0be8907359df4c6 Biju Das 2023-03-30 613
> COUNTER_COMP_ENABLE(rz_mtu3_count_enable_read,
> 0be8907359df4c6 Biju Das 2023-03-30 614
> rz_mtu3_count_enable_write),
> 0be8907359df4c6 Biju Das 2023-03-30 615
> COUNTER_COMP_CEILING(rz_mtu3_count_ceiling_read,
> 0be8907359df4c6 Biju Das 2023-03-30 616
> rz_mtu3_count_ceiling_write),
> 0be8907359df4c6 Biju Das 2023-03-30 617 };
> 0be8907359df4c6 Biju Das 2023-03-30 618
> 0be8907359df4c6 Biju Das 2023-03-30 619 static const enum
> counter_synapse_action rz_mtu3_synapse_actions[] = {
> 0be8907359df4c6 Biju Das 2023-03-30 620
> COUNTER_SYNAPSE_ACTION_BOTH_EDGES,
> 0be8907359df4c6 Biju Das 2023-03-30 621
> COUNTER_SYNAPSE_ACTION_RISING_EDGE,
> 0be8907359df4c6 Biju Das 2023-03-30 622
> COUNTER_SYNAPSE_ACTION_NONE,
> 0be8907359df4c6 Biju Das 2023-03-30 623 };
> 0be8907359df4c6 Biju Das 2023-03-30 624
> 0be8907359df4c6 Biju Das 2023-03-30 625 static int
> rz_mtu3_action_read(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30 626 struct
> counter_count *count,
> 0be8907359df4c6 Biju Das 2023-03-30 627 struct
> counter_synapse *synapse,
> 0be8907359df4c6 Biju Das 2023-03-30 628 enum
> counter_synapse_action *action)
> 0be8907359df4c6 Biju Das 2023-03-30 629 {
> 0be8907359df4c6 Biju Das 2023-03-30 630 const bool is_signal_ab =
> (synapse->signal->id == SIGNAL_A_ID) ||
> 0be8907359df4c6 Biju Das 2023-03-30 631
> (synapse->signal->id == SIGNAL_B_ID);
> 0be8907359df4c6 Biju Das 2023-03-30 632 struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30 633 struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30 634 enum counter_function
> function;
> 0be8907359df4c6 Biju Das 2023-03-30 635 bool mtclkc_mtclkd;
> 0be8907359df4c6 Biju Das 2023-03-30 636 unsigned long tmdr;
> 0be8907359df4c6 Biju Das 2023-03-30 637 int ret;
> 0be8907359df4c6 Biju Das 2023-03-30 638
> 0be8907359df4c6 Biju Das 2023-03-30 639 ret =
> rz_mtu3_lock_if_count_is_enabled(ch, priv, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30 640 if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30 641 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 642
> 0be8907359df4c6 Biju Das 2023-03-30 643 ret =
> rz_mtu3_count_function_read_helper(ch, priv, &function);
> 0be8907359df4c6 Biju Das 2023-03-30 644 if (ret) {
> 0be8907359df4c6 Biju Das 2023-03-30 645 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 646 return ret;
> 0be8907359df4c6 Biju Das 2023-03-30 647 }
> 0be8907359df4c6 Biju Das 2023-03-30 648
> 0be8907359df4c6 Biju Das 2023-03-30 649 /* Default action mode */
> 0be8907359df4c6 Biju Das 2023-03-30 650 *action =
> COUNTER_SYNAPSE_ACTION_NONE;
> 0be8907359df4c6 Biju Das 2023-03-30 651
> 0be8907359df4c6 Biju Das 2023-03-30 652 if (count->id !=
> RZ_MTU3_16_BIT_MTU1_CH) {
> 0be8907359df4c6 Biju Das 2023-03-30 @653 tmdr =
> rz_mtu3_shared_reg_read(priv->ch, RZ_MTU3_TMDR3);
> 0be8907359df4c6 Biju Das 2023-03-30 654 mtclkc_mtclkd =
> test_bit(RZ_MTU3_TMDR3_PHCKSEL, &tmdr);
> 0be8907359df4c6 Biju Das 2023-03-30 655 if ((mtclkc_mtclkd
> && is_signal_ab) ||
> 0be8907359df4c6 Biju Das 2023-03-30 656 (!mtclkc_mtclkd
> && !is_signal_ab)) {
> 0be8907359df4c6 Biju Das 2023-03-30 657
> mutex_unlock(&priv->lock);
> 0be8907359df4c6 Biju Das 2023-03-30 658 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 659 }
> 0be8907359df4c6 Biju Das 2023-03-30 660 }
> 0be8907359df4c6 Biju Das 2023-03-30 661
> 0be8907359df4c6 Biju Das 2023-03-30 662 switch (function) {
> 0be8907359df4c6 Biju Das 2023-03-30 663 case
> COUNTER_FUNCTION_PULSE_DIRECTION:
> 0be8907359df4c6 Biju Das 2023-03-30 664 /*
> 0be8907359df4c6 Biju Das 2023-03-30 665 * Rising edges on
> signal A (signal C) updates the respective
> 0be8907359df4c6 Biju Das 2023-03-30 666 * count. The input
> level of signal B (signal D) determines
> 0be8907359df4c6 Biju Das 2023-03-30 667 * direction.
> 0be8907359df4c6 Biju Das 2023-03-30 668 */
> 0be8907359df4c6 Biju Das 2023-03-30 669 if (synapse-
> >signal->id == SIGNAL_A_ID ||
> 0be8907359df4c6 Biju Das 2023-03-30 670 synapse-
> >signal->id == SIGNAL_C_ID)
> 0be8907359df4c6 Biju Das 2023-03-30 671 *action =
> COUNTER_SYNAPSE_ACTION_RISING_EDGE;
> 0be8907359df4c6 Biju Das 2023-03-30 672 break;
> 0be8907359df4c6 Biju Das 2023-03-30 673 case
> COUNTER_FUNCTION_QUADRATURE_X2_B:
> 0be8907359df4c6 Biju Das 2023-03-30 674 /*
> 0be8907359df4c6 Biju Das 2023-03-30 675 * Any state
> transition on quadrature pair signal B (signal D)
> 0be8907359df4c6 Biju Das 2023-03-30 676 * updates the
> respective count.
> 0be8907359df4c6 Biju Das 2023-03-30 677 */
> 0be8907359df4c6 Biju Das 2023-03-30 678 if (synapse-
> >signal->id == SIGNAL_B_ID ||
> 0be8907359df4c6 Biju Das 2023-03-30 679 synapse-
> >signal->id == SIGNAL_D_ID)
> 0be8907359df4c6 Biju Das 2023-03-30 680 *action =
> COUNTER_SYNAPSE_ACTION_BOTH_EDGES;
> 0be8907359df4c6 Biju Das 2023-03-30 681 break;
> 0be8907359df4c6 Biju Das 2023-03-30 682 case
> COUNTER_FUNCTION_QUADRATURE_X4:
> 0be8907359df4c6 Biju Das 2023-03-30 683 /* counts up/down
> on both edges of A (C) and B (D) signal */
> 0be8907359df4c6 Biju Das 2023-03-30 684 *action =
> COUNTER_SYNAPSE_ACTION_BOTH_EDGES;
> 0be8907359df4c6 Biju Das 2023-03-30 685 break;
> 0be8907359df4c6 Biju Das 2023-03-30 686 default:
> 0be8907359df4c6 Biju Das 2023-03-30 687 /* should never
> reach this path */
> 0be8907359df4c6 Biju Das 2023-03-30 688 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 689 return -EINVAL;
> 0be8907359df4c6 Biju Das 2023-03-30 690 }
> 0be8907359df4c6 Biju Das 2023-03-30 691
> 0be8907359df4c6 Biju Das 2023-03-30 692 mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30 693
> 0be8907359df4c6 Biju Das 2023-03-30 694 return 0;
> 0be8907359df4c6 Biju Das 2023-03-30 695 }
> 0be8907359df4c6 Biju Das 2023-03-30 696
>
> :::::: The code at line 602 was first introduced by commit
> :::::: 0be8907359df4c62319f5cb2c6981ff0d9ebf35a counter: Add Renesas
> RZ/G2L MTU3a counter driver
>
> :::::: TO: Biju Das <biju.das.jz@bp.renesas.com>
> :::::: CC: Lee Jones <lee@kernel.org>
next prev parent reply other threads:[~2023-07-28 6:55 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-28 1:33 kernel test robot
2023-07-28 6:55 ` Biju Das [this message]
2023-07-31 3:01 ` Liu, Yujie
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=OS0PR01MB5922EDD75757A7C96E4B7EF08606A@OS0PR01MB5922.jpnprd01.prod.outlook.com \
--to=biju.das.jz@bp.renesas.com \
--cc=geert+renesas@glider.be \
--cc=lee@kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox