Hi Biwen, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on abelloni/rtc-next] [also build test WARNING on v5.10-rc6 next-20201201] [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] url: https://github.com/0day-ci/linux/commits/Biwen-Li/rtc-pcf2127-clear-the-flag-TSF1-before-enabling-interrupt-generation/20201201-165409 base: https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next config: arm64-randconfig-r014-20201202 (attached as .config) compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 2671fccf0381769276ca8246ec0499adcb9b0355) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm64 cross compiling tool for clang build # apt-get install binutils-aarch64-linux-gnu # https://github.com/0day-ci/linux/commit/54db60db88e4fd3ab6ac26f9a5b4768316347f95 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Biwen-Li/rtc-pcf2127-clear-the-flag-TSF1-before-enabling-interrupt-generation/20201201-165409 git checkout 54db60db88e4fd3ab6ac26f9a5b4768316347f95 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): >> drivers/rtc/rtc-pcf2127.c:629:16: warning: operator '?:' has lower precedence than '|'; '|' will be evaluated first [-Wbitwise-conditional-parentheses] has_nvmem ? (PCF2127_BIT_WD_CTL_CD0) : (0) | ~~~~~~~~~ ^ drivers/rtc/rtc-pcf2127.c:629:16: note: place parentheses around the '|' expression to silence this warning has_nvmem ? (PCF2127_BIT_WD_CTL_CD0) : (0) | ~~~~~~~~~ ^ drivers/rtc/rtc-pcf2127.c:629:16: note: place parentheses around the '?:' expression to evaluate it first has_nvmem ? (PCF2127_BIT_WD_CTL_CD0) : (0) | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. vim +629 drivers/rtc/rtc-pcf2127.c 560 561 static int pcf2127_probe(struct device *dev, struct regmap *regmap, 562 int alarm_irq, const char *name, bool has_nvmem) 563 { 564 struct pcf2127 *pcf2127; 565 int ret = 0; 566 567 dev_dbg(dev, "%s\n", __func__); 568 569 pcf2127 = devm_kzalloc(dev, sizeof(*pcf2127), GFP_KERNEL); 570 if (!pcf2127) 571 return -ENOMEM; 572 573 pcf2127->regmap = regmap; 574 575 dev_set_drvdata(dev, pcf2127); 576 577 pcf2127->rtc = devm_rtc_allocate_device(dev); 578 if (IS_ERR(pcf2127->rtc)) 579 return PTR_ERR(pcf2127->rtc); 580 581 pcf2127->rtc->ops = &pcf2127_rtc_ops; 582 pcf2127->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 583 pcf2127->rtc->range_max = RTC_TIMESTAMP_END_2099; 584 pcf2127->rtc->set_start_time = true; /* Sets actual start to 1970 */ 585 pcf2127->rtc->uie_unsupported = 1; 586 587 if (alarm_irq > 0) { 588 ret = devm_request_threaded_irq(dev, alarm_irq, NULL, 589 pcf2127_rtc_irq, 590 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 591 dev_name(dev), dev); 592 if (ret) { 593 dev_err(dev, "failed to request alarm irq\n"); 594 return ret; 595 } 596 } 597 598 if (alarm_irq > 0 || device_property_read_bool(dev, "wakeup-source")) { 599 device_init_wakeup(dev, true); 600 pcf2127->rtc->ops = &pcf2127_rtc_alrm_ops; 601 } 602 603 if (has_nvmem) { 604 struct nvmem_config nvmem_cfg = { 605 .priv = pcf2127, 606 .reg_read = pcf2127_nvmem_read, 607 .reg_write = pcf2127_nvmem_write, 608 .size = 512, 609 }; 610 611 ret = devm_rtc_nvmem_register(pcf2127->rtc, &nvmem_cfg); 612 } 613 614 /* 615 * Watchdog timer enabled and reset pin /RST activated when timed out. 616 * Select 1Hz clock source for watchdog timer. 617 * Note: Countdown timer disabled and not available. 618 * For pca2129, pcf2129, only bit[7] is for Symbol WD_CD 619 * of register watchdg_tim_ctl. The bit[6] is labeled 620 * as T. Bits labeled as T must always be written with 621 * logic 0. 622 */ 623 ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_WD_CTL, 624 PCF2127_BIT_WD_CTL_CD1 | 625 PCF2127_BIT_WD_CTL_CD0 | 626 PCF2127_BIT_WD_CTL_TF1 | 627 PCF2127_BIT_WD_CTL_TF0, 628 PCF2127_BIT_WD_CTL_CD1 | > 629 has_nvmem ? (PCF2127_BIT_WD_CTL_CD0) : (0) | 630 PCF2127_BIT_WD_CTL_TF1); 631 if (ret) { 632 dev_err(dev, "%s: watchdog config (wd_ctl) failed\n", __func__); 633 return ret; 634 } 635 636 pcf2127_watchdog_init(dev, pcf2127); 637 638 /* 639 * Disable battery low/switch-over timestamp and interrupts. 640 * Clear battery interrupt flags which can block new trigger events. 641 * Note: This is the default chip behaviour but added to ensure 642 * correct tamper timestamp and interrupt function. 643 */ 644 ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3, 645 PCF2127_BIT_CTRL3_BTSE | 646 PCF2127_BIT_CTRL3_BIE | 647 PCF2127_BIT_CTRL3_BLIE, 0); 648 if (ret) { 649 dev_err(dev, "%s: interrupt config (ctrl3) failed\n", 650 __func__); 651 return ret; 652 } 653 654 /* 655 * Enable timestamp function and store timestamp of first trigger 656 * event until TSF1 and TFS2 interrupt flags are cleared. 657 */ 658 ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_TS_CTRL, 659 PCF2127_BIT_TS_CTRL_TSOFF | 660 PCF2127_BIT_TS_CTRL_TSM, 661 PCF2127_BIT_TS_CTRL_TSM); 662 if (ret) { 663 dev_err(dev, "%s: tamper detection config (ts_ctrl) failed\n", 664 __func__); 665 return ret; 666 } 667 668 /* 669 * Clear TSF1 field of ctrl1 register to clear interrupt 670 * before enabling interrupt generation when 671 * timestamp flag set. Unless the flag TSF1 won't 672 * be cleared and the interrupt(INT pin) is 673 * triggered continueously. 674 */ 675 ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL1, 676 PCF2127_BIT_CTRL1_TSF1, 677 0); 678 if (ret) { 679 dev_err(dev, "%s: control and status register 1 (ctrl1) failed, ret = 0x%x\n", 680 __func__, ret); 681 return ret; 682 } 683 /* 684 * Enable interrupt generation when TSF1 or TSF2 timestamp flags 685 * are set. Interrupt signal is an open-drain output and can be 686 * left floating if unused. 687 */ 688 ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL2, 689 PCF2127_BIT_CTRL2_TSIE, 690 PCF2127_BIT_CTRL2_TSIE); 691 if (ret) { 692 dev_err(dev, "%s: tamper detection config (ctrl2) failed\n", 693 __func__); 694 return ret; 695 } 696 697 ret = rtc_add_group(pcf2127->rtc, &pcf2127_attr_group); 698 if (ret) { 699 dev_err(dev, "%s: tamper sysfs registering failed\n", 700 __func__); 701 return ret; 702 } 703 704 return devm_rtc_register_device(pcf2127->rtc); 705 } 706 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip