Hi Biju, On Fri, 2023-07-28 at 06:55 +0000, Biju Das wrote: > Hi kernel test robot, > > This should be fixed by [1] > > [1] > https://lore.kernel.org/all/20230719090430.1925182-1-arnd@xxxxxxxxxx/ > > Can you please try after applying this patch? After applying the patch [1], RZ_MTU3_CNT is consistent with its core driver config RZ_MTU3 regardless of COMPILE_TEST, and the link failure is gone in our build test. Tested-by: Yujie Liu <yujie.liu@xxxxxxxxx> Thanks, Yujie > 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@xxxxxxxxx> > > > 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@xxxxxxxxxxxxxx> > > :::::: CC: Lee Jones <lee@xxxxxxxxxx> > >