From: kernel test robot <lkp@intel.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Linus Walleij <linus.walleij@linaro.org>,
Jianqun Xu <jay.xu@rock-chips.com>,
linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
Bartosz Golaszewski <brgl@bgdev.pl>,
Heiko Stuebner <heiko@sntech.de>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: Re: [PATCH v2 1/1] gpio: rockchip: Switch to use fwnode instead of of_node
Date: Thu, 1 Sep 2022 03:51:39 +0800 [thread overview]
Message-ID: <202209010355.qwMuqR06-lkp@intel.com> (raw)
In-Reply-To: <20220831134516.78108-1-andriy.shevchenko@linux.intel.com>
Hi Andy,
I love your patch! Yet something to improve:
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on linus/master v6.0-rc3 next-20220831]
[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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/gpio-rockchip-Switch-to-use-fwnode-instead-of-of_node/20220831-214721
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: arm-randconfig-r036-20220830 (https://download.01.org/0day-ci/archive/20220901/202209010355.qwMuqR06-lkp@intel.com/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 1c66bacd6cde1f37d6ac96c45b389666a1334ec0)
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 arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/intel-lab-lkp/linux/commit/1adf1d7efa2837b148a47d10749922358e6f1b8f
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Andy-Shevchenko/gpio-rockchip-Switch-to-use-fwnode-instead-of-of_node/20220831-214721
git checkout 1adf1d7efa2837b148a47d10749922358e6f1b8f
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/gpio/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
>> drivers/gpio/gpio-rockchip.c:611:11: error: incompatible pointer types assigning to 'struct pinctrl_dev *' from 'struct pinctrl *' [-Werror,-Wincompatible-pointer-types]
pctldev = pinctrl_get(bank->dev->parent);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:639:33: error: call to undeclared function 'to_platform_device'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
struct platform_device *pdev = to_platform_device(bank->dev);
^
>> drivers/gpio/gpio-rockchip.c:639:26: error: incompatible integer to pointer conversion initializing 'struct platform_device *' with an expression of type 'int' [-Wint-conversion]
struct platform_device *pdev = to_platform_device(bank->dev);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:644:19: error: call to undeclared function 'devm_platform_ioremap_resource'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
^
drivers/gpio/gpio-rockchip.c:644:19: note: did you mean 'devm_ioremap_resource'?
include/linux/device.h:235:15: note: 'devm_ioremap_resource' declared here
void __iomem *devm_ioremap_resource(struct device *dev,
^
>> drivers/gpio/gpio-rockchip.c:644:17: error: incompatible integer to pointer conversion assigning to 'void *' from 'int' [-Wint-conversion]
bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:648:14: error: call to undeclared function 'platform_get_irq'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
bank->irq = platform_get_irq(pdev, 0);
^
drivers/gpio/gpio-rockchip.c:641:18: warning: unused variable 'res' [-Wunused-variable]
struct resource res;
^
>> drivers/gpio/gpio-rockchip.c:696:39: warning: declaration of 'struct platform_device' will not be visible outside of this function [-Wvisibility]
static int rockchip_gpio_probe(struct platform_device *pdev)
^
>> drivers/gpio/gpio-rockchip.c:698:28: error: incomplete definition of type 'struct platform_device'
struct device *dev = &pdev->dev;
~~~~^
drivers/gpio/gpio-rockchip.c:696:39: note: forward declaration of 'struct platform_device'
static int rockchip_gpio_probe(struct platform_device *pdev)
^
drivers/gpio/gpio-rockchip.c:709:10: error: incompatible pointer types assigning to 'struct pinctrl_dev *' from 'struct pinctrl *' [-Werror,-Wincompatible-pointer-types]
pctldev = pinctrl_get(dev->parent);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:768:2: error: call to undeclared function 'platform_set_drvdata'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
platform_set_drvdata(pdev, bank);
^
drivers/gpio/gpio-rockchip.c:774:40: warning: declaration of 'struct platform_device' will not be visible outside of this function [-Wvisibility]
static int rockchip_gpio_remove(struct platform_device *pdev)
^
>> drivers/gpio/gpio-rockchip.c:776:35: error: call to undeclared function 'platform_get_drvdata'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
^
>> drivers/gpio/gpio-rockchip.c:776:28: error: incompatible integer to pointer conversion initializing 'struct rockchip_pin_bank *' with an expression of type 'int' [-Wint-conversion]
struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:790:31: error: variable has incomplete type 'struct platform_driver'
static struct platform_driver rockchip_gpio_driver = {
^
drivers/gpio/gpio-rockchip.c:790:15: note: forward declaration of 'struct platform_driver'
static struct platform_driver rockchip_gpio_driver = {
^
>> drivers/gpio/gpio-rockchip.c:801:9: error: call to undeclared function 'platform_driver_register'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
return platform_driver_register(&rockchip_gpio_driver);
^
>> drivers/gpio/gpio-rockchip.c:807:2: error: call to undeclared function 'platform_driver_unregister'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
platform_driver_unregister(&rockchip_gpio_driver);
^
3 warnings and 14 errors generated.
vim +611 drivers/gpio/gpio-rockchip.c
577
578 static int rockchip_gpiolib_register(struct rockchip_pin_bank *bank)
579 {
580 struct gpio_chip *gc;
581 int ret;
582
583 bank->gpio_chip = rockchip_gpiolib_chip;
584
585 gc = &bank->gpio_chip;
586 gc->base = bank->pin_base;
587 gc->ngpio = bank->nr_pins;
588 gc->label = bank->name;
589 gc->parent = bank->dev;
590
591 ret = gpiochip_add_data(gc, bank);
592 if (ret) {
593 dev_err(bank->dev, "failed to add gpiochip %s, %d\n",
594 gc->label, ret);
595 return ret;
596 }
597
598 /*
599 * For DeviceTree-supported systems, the gpio core checks the
600 * pinctrl's device node for the "gpio-ranges" property.
601 * If it is present, it takes care of adding the pin ranges
602 * for the driver. In this case the driver can skip ahead.
603 *
604 * In order to remain compatible with older, existing DeviceTree
605 * files which don't set the "gpio-ranges" property or systems that
606 * utilize ACPI the driver has to call gpiochip_add_pin_range().
607 */
608 if (!device_property_read_bool(bank->dev, "gpio-ranges")) {
609 struct pinctrl_dev *pctldev = NULL;
610
> 611 pctldev = pinctrl_get(bank->dev->parent);
612 if (!pctldev)
613 return -ENODEV;
614
615 ret = gpiochip_add_pin_range(gc, dev_name(pctldev->dev), 0,
616 gc->base, gc->ngpio);
617 if (ret) {
618 dev_err(bank->dev, "Failed to add pin range\n");
619 goto fail;
620 }
621 }
622
623 ret = rockchip_interrupts_register(bank);
624 if (ret) {
625 dev_err(bank->dev, "failed to register interrupt, %d\n", ret);
626 goto fail;
627 }
628
629 return 0;
630
631 fail:
632 gpiochip_remove(&bank->gpio_chip);
633
634 return ret;
635 }
636
637 static int rockchip_get_bank_data(struct rockchip_pin_bank *bank)
638 {
> 639 struct platform_device *pdev = to_platform_device(bank->dev);
640 struct device_node *np = bank->dev->of_node;
641 struct resource res;
642 int id = 0;
643
> 644 bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
645 if (IS_ERR(bank->reg_base))
646 return PTR_ERR(bank->reg_base);
647
> 648 bank->irq = platform_get_irq(pdev, 0);
649 if (!bank->irq)
650 return -EINVAL;
651
652 bank->clk = of_clk_get(np, 0);
653 if (IS_ERR(bank->clk))
654 return PTR_ERR(bank->clk);
655
656 clk_prepare_enable(bank->clk);
657 id = readl(bank->reg_base + gpio_regs_v2.version_id);
658
659 /* If not gpio v2, that is default to v1. */
660 if (id == GPIO_TYPE_V2 || id == GPIO_TYPE_V2_1) {
661 bank->gpio_regs = &gpio_regs_v2;
662 bank->gpio_type = GPIO_TYPE_V2;
663 bank->db_clk = of_clk_get(np, 1);
664 if (IS_ERR(bank->db_clk)) {
665 dev_err(bank->dev, "cannot find debounce clk\n");
666 clk_disable_unprepare(bank->clk);
667 return -EINVAL;
668 }
669 } else {
670 bank->gpio_regs = &gpio_regs_v1;
671 bank->gpio_type = GPIO_TYPE_V1;
672 }
673
674 return 0;
675 }
676
677 static struct rockchip_pin_bank *
678 rockchip_gpio_find_bank(struct pinctrl_dev *pctldev, int id)
679 {
680 struct rockchip_pinctrl *info;
681 struct rockchip_pin_bank *bank;
682 int i, found = 0;
683
684 info = pinctrl_dev_get_drvdata(pctldev);
685 bank = info->ctrl->pin_banks;
686 for (i = 0; i < info->ctrl->nr_banks; i++, bank++) {
687 if (bank->bank_num == id) {
688 found = 1;
689 break;
690 }
691 }
692
693 return found ? bank : NULL;
694 }
695
> 696 static int rockchip_gpio_probe(struct platform_device *pdev)
697 {
> 698 struct device *dev = &pdev->dev;
699 struct device_node *np = dev->of_node;
700 struct pinctrl_dev *pctldev = NULL;
701 struct rockchip_pin_bank *bank = NULL;
702 struct rockchip_pin_deferred *cfg;
703 static int gpio;
704 int id, ret;
705
706 if (!dev->parent)
707 return -ENODEV;
708
709 pctldev = pinctrl_get(dev->parent);
710 if (!pctldev)
711 return -EPROBE_DEFER;
712
713 id = of_alias_get_id(np, "gpio");
714 if (id < 0)
715 id = gpio++;
716
717 bank = rockchip_gpio_find_bank(pctldev, id);
718 if (!bank)
719 return -EINVAL;
720
721 bank->dev = dev;
722
723 raw_spin_lock_init(&bank->slock);
724
725 ret = rockchip_get_bank_data(bank);
726 if (ret)
727 return ret;
728
729 /*
730 * Prevent clashes with a deferred output setting
731 * being added right at this moment.
732 */
733 mutex_lock(&bank->deferred_lock);
734
735 ret = rockchip_gpiolib_register(bank);
736 if (ret) {
737 clk_disable_unprepare(bank->clk);
738 mutex_unlock(&bank->deferred_lock);
739 return ret;
740 }
741
742 while (!list_empty(&bank->deferred_pins)) {
743 cfg = list_first_entry(&bank->deferred_pins,
744 struct rockchip_pin_deferred, head);
745 list_del(&cfg->head);
746
747 switch (cfg->param) {
748 case PIN_CONFIG_OUTPUT:
749 ret = rockchip_gpio_direction_output(&bank->gpio_chip, cfg->pin, cfg->arg);
750 if (ret)
751 dev_warn(dev, "setting output pin %u to %u failed\n", cfg->pin,
752 cfg->arg);
753 break;
754 case PIN_CONFIG_INPUT_ENABLE:
755 ret = rockchip_gpio_direction_input(&bank->gpio_chip, cfg->pin);
756 if (ret)
757 dev_warn(dev, "setting input pin %u failed\n", cfg->pin);
758 break;
759 default:
760 dev_warn(dev, "unknown deferred config param %d\n", cfg->param);
761 break;
762 }
763 kfree(cfg);
764 }
765
766 mutex_unlock(&bank->deferred_lock);
767
> 768 platform_set_drvdata(pdev, bank);
769 dev_info(dev, "probed %pfw\n", dev_fwnode(dev));
770
771 return 0;
772 }
773
774 static int rockchip_gpio_remove(struct platform_device *pdev)
775 {
> 776 struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
777
778 clk_disable_unprepare(bank->clk);
779 gpiochip_remove(&bank->gpio_chip);
780
781 return 0;
782 }
783
784 static const struct of_device_id rockchip_gpio_match[] = {
785 { .compatible = "rockchip,gpio-bank", },
786 { .compatible = "rockchip,rk3188-gpio-bank0" },
787 { },
788 };
789
> 790 static struct platform_driver rockchip_gpio_driver = {
791 .probe = rockchip_gpio_probe,
792 .remove = rockchip_gpio_remove,
793 .driver = {
794 .name = "rockchip-gpio",
795 .of_match_table = rockchip_gpio_match,
796 },
797 };
798
799 static int __init rockchip_gpio_init(void)
800 {
> 801 return platform_driver_register(&rockchip_gpio_driver);
802 }
803 postcore_initcall(rockchip_gpio_init);
804
805 static void __exit rockchip_gpio_exit(void)
806 {
> 807 platform_driver_unregister(&rockchip_gpio_driver);
808 }
809 module_exit(rockchip_gpio_exit);
810
--
0-DAY CI Kernel Test Service
https://01.org/lkp
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Linus Walleij <linus.walleij@linaro.org>,
Jianqun Xu <jay.xu@rock-chips.com>,
linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
Bartosz Golaszewski <brgl@bgdev.pl>,
Heiko Stuebner <heiko@sntech.de>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: Re: [PATCH v2 1/1] gpio: rockchip: Switch to use fwnode instead of of_node
Date: Thu, 1 Sep 2022 03:51:39 +0800 [thread overview]
Message-ID: <202209010355.qwMuqR06-lkp@intel.com> (raw)
In-Reply-To: <20220831134516.78108-1-andriy.shevchenko@linux.intel.com>
Hi Andy,
I love your patch! Yet something to improve:
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on linus/master v6.0-rc3 next-20220831]
[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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/gpio-rockchip-Switch-to-use-fwnode-instead-of-of_node/20220831-214721
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: arm-randconfig-r036-20220830 (https://download.01.org/0day-ci/archive/20220901/202209010355.qwMuqR06-lkp@intel.com/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 1c66bacd6cde1f37d6ac96c45b389666a1334ec0)
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 arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/intel-lab-lkp/linux/commit/1adf1d7efa2837b148a47d10749922358e6f1b8f
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Andy-Shevchenko/gpio-rockchip-Switch-to-use-fwnode-instead-of-of_node/20220831-214721
git checkout 1adf1d7efa2837b148a47d10749922358e6f1b8f
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/gpio/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
>> drivers/gpio/gpio-rockchip.c:611:11: error: incompatible pointer types assigning to 'struct pinctrl_dev *' from 'struct pinctrl *' [-Werror,-Wincompatible-pointer-types]
pctldev = pinctrl_get(bank->dev->parent);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:639:33: error: call to undeclared function 'to_platform_device'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
struct platform_device *pdev = to_platform_device(bank->dev);
^
>> drivers/gpio/gpio-rockchip.c:639:26: error: incompatible integer to pointer conversion initializing 'struct platform_device *' with an expression of type 'int' [-Wint-conversion]
struct platform_device *pdev = to_platform_device(bank->dev);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:644:19: error: call to undeclared function 'devm_platform_ioremap_resource'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
^
drivers/gpio/gpio-rockchip.c:644:19: note: did you mean 'devm_ioremap_resource'?
include/linux/device.h:235:15: note: 'devm_ioremap_resource' declared here
void __iomem *devm_ioremap_resource(struct device *dev,
^
>> drivers/gpio/gpio-rockchip.c:644:17: error: incompatible integer to pointer conversion assigning to 'void *' from 'int' [-Wint-conversion]
bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:648:14: error: call to undeclared function 'platform_get_irq'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
bank->irq = platform_get_irq(pdev, 0);
^
drivers/gpio/gpio-rockchip.c:641:18: warning: unused variable 'res' [-Wunused-variable]
struct resource res;
^
>> drivers/gpio/gpio-rockchip.c:696:39: warning: declaration of 'struct platform_device' will not be visible outside of this function [-Wvisibility]
static int rockchip_gpio_probe(struct platform_device *pdev)
^
>> drivers/gpio/gpio-rockchip.c:698:28: error: incomplete definition of type 'struct platform_device'
struct device *dev = &pdev->dev;
~~~~^
drivers/gpio/gpio-rockchip.c:696:39: note: forward declaration of 'struct platform_device'
static int rockchip_gpio_probe(struct platform_device *pdev)
^
drivers/gpio/gpio-rockchip.c:709:10: error: incompatible pointer types assigning to 'struct pinctrl_dev *' from 'struct pinctrl *' [-Werror,-Wincompatible-pointer-types]
pctldev = pinctrl_get(dev->parent);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:768:2: error: call to undeclared function 'platform_set_drvdata'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
platform_set_drvdata(pdev, bank);
^
drivers/gpio/gpio-rockchip.c:774:40: warning: declaration of 'struct platform_device' will not be visible outside of this function [-Wvisibility]
static int rockchip_gpio_remove(struct platform_device *pdev)
^
>> drivers/gpio/gpio-rockchip.c:776:35: error: call to undeclared function 'platform_get_drvdata'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
^
>> drivers/gpio/gpio-rockchip.c:776:28: error: incompatible integer to pointer conversion initializing 'struct rockchip_pin_bank *' with an expression of type 'int' [-Wint-conversion]
struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:790:31: error: variable has incomplete type 'struct platform_driver'
static struct platform_driver rockchip_gpio_driver = {
^
drivers/gpio/gpio-rockchip.c:790:15: note: forward declaration of 'struct platform_driver'
static struct platform_driver rockchip_gpio_driver = {
^
>> drivers/gpio/gpio-rockchip.c:801:9: error: call to undeclared function 'platform_driver_register'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
return platform_driver_register(&rockchip_gpio_driver);
^
>> drivers/gpio/gpio-rockchip.c:807:2: error: call to undeclared function 'platform_driver_unregister'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
platform_driver_unregister(&rockchip_gpio_driver);
^
3 warnings and 14 errors generated.
vim +611 drivers/gpio/gpio-rockchip.c
577
578 static int rockchip_gpiolib_register(struct rockchip_pin_bank *bank)
579 {
580 struct gpio_chip *gc;
581 int ret;
582
583 bank->gpio_chip = rockchip_gpiolib_chip;
584
585 gc = &bank->gpio_chip;
586 gc->base = bank->pin_base;
587 gc->ngpio = bank->nr_pins;
588 gc->label = bank->name;
589 gc->parent = bank->dev;
590
591 ret = gpiochip_add_data(gc, bank);
592 if (ret) {
593 dev_err(bank->dev, "failed to add gpiochip %s, %d\n",
594 gc->label, ret);
595 return ret;
596 }
597
598 /*
599 * For DeviceTree-supported systems, the gpio core checks the
600 * pinctrl's device node for the "gpio-ranges" property.
601 * If it is present, it takes care of adding the pin ranges
602 * for the driver. In this case the driver can skip ahead.
603 *
604 * In order to remain compatible with older, existing DeviceTree
605 * files which don't set the "gpio-ranges" property or systems that
606 * utilize ACPI the driver has to call gpiochip_add_pin_range().
607 */
608 if (!device_property_read_bool(bank->dev, "gpio-ranges")) {
609 struct pinctrl_dev *pctldev = NULL;
610
> 611 pctldev = pinctrl_get(bank->dev->parent);
612 if (!pctldev)
613 return -ENODEV;
614
615 ret = gpiochip_add_pin_range(gc, dev_name(pctldev->dev), 0,
616 gc->base, gc->ngpio);
617 if (ret) {
618 dev_err(bank->dev, "Failed to add pin range\n");
619 goto fail;
620 }
621 }
622
623 ret = rockchip_interrupts_register(bank);
624 if (ret) {
625 dev_err(bank->dev, "failed to register interrupt, %d\n", ret);
626 goto fail;
627 }
628
629 return 0;
630
631 fail:
632 gpiochip_remove(&bank->gpio_chip);
633
634 return ret;
635 }
636
637 static int rockchip_get_bank_data(struct rockchip_pin_bank *bank)
638 {
> 639 struct platform_device *pdev = to_platform_device(bank->dev);
640 struct device_node *np = bank->dev->of_node;
641 struct resource res;
642 int id = 0;
643
> 644 bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
645 if (IS_ERR(bank->reg_base))
646 return PTR_ERR(bank->reg_base);
647
> 648 bank->irq = platform_get_irq(pdev, 0);
649 if (!bank->irq)
650 return -EINVAL;
651
652 bank->clk = of_clk_get(np, 0);
653 if (IS_ERR(bank->clk))
654 return PTR_ERR(bank->clk);
655
656 clk_prepare_enable(bank->clk);
657 id = readl(bank->reg_base + gpio_regs_v2.version_id);
658
659 /* If not gpio v2, that is default to v1. */
660 if (id == GPIO_TYPE_V2 || id == GPIO_TYPE_V2_1) {
661 bank->gpio_regs = &gpio_regs_v2;
662 bank->gpio_type = GPIO_TYPE_V2;
663 bank->db_clk = of_clk_get(np, 1);
664 if (IS_ERR(bank->db_clk)) {
665 dev_err(bank->dev, "cannot find debounce clk\n");
666 clk_disable_unprepare(bank->clk);
667 return -EINVAL;
668 }
669 } else {
670 bank->gpio_regs = &gpio_regs_v1;
671 bank->gpio_type = GPIO_TYPE_V1;
672 }
673
674 return 0;
675 }
676
677 static struct rockchip_pin_bank *
678 rockchip_gpio_find_bank(struct pinctrl_dev *pctldev, int id)
679 {
680 struct rockchip_pinctrl *info;
681 struct rockchip_pin_bank *bank;
682 int i, found = 0;
683
684 info = pinctrl_dev_get_drvdata(pctldev);
685 bank = info->ctrl->pin_banks;
686 for (i = 0; i < info->ctrl->nr_banks; i++, bank++) {
687 if (bank->bank_num == id) {
688 found = 1;
689 break;
690 }
691 }
692
693 return found ? bank : NULL;
694 }
695
> 696 static int rockchip_gpio_probe(struct platform_device *pdev)
697 {
> 698 struct device *dev = &pdev->dev;
699 struct device_node *np = dev->of_node;
700 struct pinctrl_dev *pctldev = NULL;
701 struct rockchip_pin_bank *bank = NULL;
702 struct rockchip_pin_deferred *cfg;
703 static int gpio;
704 int id, ret;
705
706 if (!dev->parent)
707 return -ENODEV;
708
709 pctldev = pinctrl_get(dev->parent);
710 if (!pctldev)
711 return -EPROBE_DEFER;
712
713 id = of_alias_get_id(np, "gpio");
714 if (id < 0)
715 id = gpio++;
716
717 bank = rockchip_gpio_find_bank(pctldev, id);
718 if (!bank)
719 return -EINVAL;
720
721 bank->dev = dev;
722
723 raw_spin_lock_init(&bank->slock);
724
725 ret = rockchip_get_bank_data(bank);
726 if (ret)
727 return ret;
728
729 /*
730 * Prevent clashes with a deferred output setting
731 * being added right at this moment.
732 */
733 mutex_lock(&bank->deferred_lock);
734
735 ret = rockchip_gpiolib_register(bank);
736 if (ret) {
737 clk_disable_unprepare(bank->clk);
738 mutex_unlock(&bank->deferred_lock);
739 return ret;
740 }
741
742 while (!list_empty(&bank->deferred_pins)) {
743 cfg = list_first_entry(&bank->deferred_pins,
744 struct rockchip_pin_deferred, head);
745 list_del(&cfg->head);
746
747 switch (cfg->param) {
748 case PIN_CONFIG_OUTPUT:
749 ret = rockchip_gpio_direction_output(&bank->gpio_chip, cfg->pin, cfg->arg);
750 if (ret)
751 dev_warn(dev, "setting output pin %u to %u failed\n", cfg->pin,
752 cfg->arg);
753 break;
754 case PIN_CONFIG_INPUT_ENABLE:
755 ret = rockchip_gpio_direction_input(&bank->gpio_chip, cfg->pin);
756 if (ret)
757 dev_warn(dev, "setting input pin %u failed\n", cfg->pin);
758 break;
759 default:
760 dev_warn(dev, "unknown deferred config param %d\n", cfg->param);
761 break;
762 }
763 kfree(cfg);
764 }
765
766 mutex_unlock(&bank->deferred_lock);
767
> 768 platform_set_drvdata(pdev, bank);
769 dev_info(dev, "probed %pfw\n", dev_fwnode(dev));
770
771 return 0;
772 }
773
774 static int rockchip_gpio_remove(struct platform_device *pdev)
775 {
> 776 struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
777
778 clk_disable_unprepare(bank->clk);
779 gpiochip_remove(&bank->gpio_chip);
780
781 return 0;
782 }
783
784 static const struct of_device_id rockchip_gpio_match[] = {
785 { .compatible = "rockchip,gpio-bank", },
786 { .compatible = "rockchip,rk3188-gpio-bank0" },
787 { },
788 };
789
> 790 static struct platform_driver rockchip_gpio_driver = {
791 .probe = rockchip_gpio_probe,
792 .remove = rockchip_gpio_remove,
793 .driver = {
794 .name = "rockchip-gpio",
795 .of_match_table = rockchip_gpio_match,
796 },
797 };
798
799 static int __init rockchip_gpio_init(void)
800 {
> 801 return platform_driver_register(&rockchip_gpio_driver);
802 }
803 postcore_initcall(rockchip_gpio_init);
804
805 static void __exit rockchip_gpio_exit(void)
806 {
> 807 platform_driver_unregister(&rockchip_gpio_driver);
808 }
809 module_exit(rockchip_gpio_exit);
810
--
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Linus Walleij <linus.walleij@linaro.org>,
Jianqun Xu <jay.xu@rock-chips.com>,
linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
Bartosz Golaszewski <brgl@bgdev.pl>,
Heiko Stuebner <heiko@sntech.de>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: Re: [PATCH v2 1/1] gpio: rockchip: Switch to use fwnode instead of of_node
Date: Thu, 1 Sep 2022 03:51:39 +0800 [thread overview]
Message-ID: <202209010355.qwMuqR06-lkp@intel.com> (raw)
In-Reply-To: <20220831134516.78108-1-andriy.shevchenko@linux.intel.com>
Hi Andy,
I love your patch! Yet something to improve:
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on linus/master v6.0-rc3 next-20220831]
[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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/gpio-rockchip-Switch-to-use-fwnode-instead-of-of_node/20220831-214721
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: arm-randconfig-r036-20220830 (https://download.01.org/0day-ci/archive/20220901/202209010355.qwMuqR06-lkp@intel.com/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 1c66bacd6cde1f37d6ac96c45b389666a1334ec0)
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 arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/intel-lab-lkp/linux/commit/1adf1d7efa2837b148a47d10749922358e6f1b8f
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Andy-Shevchenko/gpio-rockchip-Switch-to-use-fwnode-instead-of-of_node/20220831-214721
git checkout 1adf1d7efa2837b148a47d10749922358e6f1b8f
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/gpio/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
>> drivers/gpio/gpio-rockchip.c:611:11: error: incompatible pointer types assigning to 'struct pinctrl_dev *' from 'struct pinctrl *' [-Werror,-Wincompatible-pointer-types]
pctldev = pinctrl_get(bank->dev->parent);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:639:33: error: call to undeclared function 'to_platform_device'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
struct platform_device *pdev = to_platform_device(bank->dev);
^
>> drivers/gpio/gpio-rockchip.c:639:26: error: incompatible integer to pointer conversion initializing 'struct platform_device *' with an expression of type 'int' [-Wint-conversion]
struct platform_device *pdev = to_platform_device(bank->dev);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:644:19: error: call to undeclared function 'devm_platform_ioremap_resource'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
^
drivers/gpio/gpio-rockchip.c:644:19: note: did you mean 'devm_ioremap_resource'?
include/linux/device.h:235:15: note: 'devm_ioremap_resource' declared here
void __iomem *devm_ioremap_resource(struct device *dev,
^
>> drivers/gpio/gpio-rockchip.c:644:17: error: incompatible integer to pointer conversion assigning to 'void *' from 'int' [-Wint-conversion]
bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:648:14: error: call to undeclared function 'platform_get_irq'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
bank->irq = platform_get_irq(pdev, 0);
^
drivers/gpio/gpio-rockchip.c:641:18: warning: unused variable 'res' [-Wunused-variable]
struct resource res;
^
>> drivers/gpio/gpio-rockchip.c:696:39: warning: declaration of 'struct platform_device' will not be visible outside of this function [-Wvisibility]
static int rockchip_gpio_probe(struct platform_device *pdev)
^
>> drivers/gpio/gpio-rockchip.c:698:28: error: incomplete definition of type 'struct platform_device'
struct device *dev = &pdev->dev;
~~~~^
drivers/gpio/gpio-rockchip.c:696:39: note: forward declaration of 'struct platform_device'
static int rockchip_gpio_probe(struct platform_device *pdev)
^
drivers/gpio/gpio-rockchip.c:709:10: error: incompatible pointer types assigning to 'struct pinctrl_dev *' from 'struct pinctrl *' [-Werror,-Wincompatible-pointer-types]
pctldev = pinctrl_get(dev->parent);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:768:2: error: call to undeclared function 'platform_set_drvdata'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
platform_set_drvdata(pdev, bank);
^
drivers/gpio/gpio-rockchip.c:774:40: warning: declaration of 'struct platform_device' will not be visible outside of this function [-Wvisibility]
static int rockchip_gpio_remove(struct platform_device *pdev)
^
>> drivers/gpio/gpio-rockchip.c:776:35: error: call to undeclared function 'platform_get_drvdata'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
^
>> drivers/gpio/gpio-rockchip.c:776:28: error: incompatible integer to pointer conversion initializing 'struct rockchip_pin_bank *' with an expression of type 'int' [-Wint-conversion]
struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-rockchip.c:790:31: error: variable has incomplete type 'struct platform_driver'
static struct platform_driver rockchip_gpio_driver = {
^
drivers/gpio/gpio-rockchip.c:790:15: note: forward declaration of 'struct platform_driver'
static struct platform_driver rockchip_gpio_driver = {
^
>> drivers/gpio/gpio-rockchip.c:801:9: error: call to undeclared function 'platform_driver_register'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
return platform_driver_register(&rockchip_gpio_driver);
^
>> drivers/gpio/gpio-rockchip.c:807:2: error: call to undeclared function 'platform_driver_unregister'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
platform_driver_unregister(&rockchip_gpio_driver);
^
3 warnings and 14 errors generated.
vim +611 drivers/gpio/gpio-rockchip.c
577
578 static int rockchip_gpiolib_register(struct rockchip_pin_bank *bank)
579 {
580 struct gpio_chip *gc;
581 int ret;
582
583 bank->gpio_chip = rockchip_gpiolib_chip;
584
585 gc = &bank->gpio_chip;
586 gc->base = bank->pin_base;
587 gc->ngpio = bank->nr_pins;
588 gc->label = bank->name;
589 gc->parent = bank->dev;
590
591 ret = gpiochip_add_data(gc, bank);
592 if (ret) {
593 dev_err(bank->dev, "failed to add gpiochip %s, %d\n",
594 gc->label, ret);
595 return ret;
596 }
597
598 /*
599 * For DeviceTree-supported systems, the gpio core checks the
600 * pinctrl's device node for the "gpio-ranges" property.
601 * If it is present, it takes care of adding the pin ranges
602 * for the driver. In this case the driver can skip ahead.
603 *
604 * In order to remain compatible with older, existing DeviceTree
605 * files which don't set the "gpio-ranges" property or systems that
606 * utilize ACPI the driver has to call gpiochip_add_pin_range().
607 */
608 if (!device_property_read_bool(bank->dev, "gpio-ranges")) {
609 struct pinctrl_dev *pctldev = NULL;
610
> 611 pctldev = pinctrl_get(bank->dev->parent);
612 if (!pctldev)
613 return -ENODEV;
614
615 ret = gpiochip_add_pin_range(gc, dev_name(pctldev->dev), 0,
616 gc->base, gc->ngpio);
617 if (ret) {
618 dev_err(bank->dev, "Failed to add pin range\n");
619 goto fail;
620 }
621 }
622
623 ret = rockchip_interrupts_register(bank);
624 if (ret) {
625 dev_err(bank->dev, "failed to register interrupt, %d\n", ret);
626 goto fail;
627 }
628
629 return 0;
630
631 fail:
632 gpiochip_remove(&bank->gpio_chip);
633
634 return ret;
635 }
636
637 static int rockchip_get_bank_data(struct rockchip_pin_bank *bank)
638 {
> 639 struct platform_device *pdev = to_platform_device(bank->dev);
640 struct device_node *np = bank->dev->of_node;
641 struct resource res;
642 int id = 0;
643
> 644 bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
645 if (IS_ERR(bank->reg_base))
646 return PTR_ERR(bank->reg_base);
647
> 648 bank->irq = platform_get_irq(pdev, 0);
649 if (!bank->irq)
650 return -EINVAL;
651
652 bank->clk = of_clk_get(np, 0);
653 if (IS_ERR(bank->clk))
654 return PTR_ERR(bank->clk);
655
656 clk_prepare_enable(bank->clk);
657 id = readl(bank->reg_base + gpio_regs_v2.version_id);
658
659 /* If not gpio v2, that is default to v1. */
660 if (id == GPIO_TYPE_V2 || id == GPIO_TYPE_V2_1) {
661 bank->gpio_regs = &gpio_regs_v2;
662 bank->gpio_type = GPIO_TYPE_V2;
663 bank->db_clk = of_clk_get(np, 1);
664 if (IS_ERR(bank->db_clk)) {
665 dev_err(bank->dev, "cannot find debounce clk\n");
666 clk_disable_unprepare(bank->clk);
667 return -EINVAL;
668 }
669 } else {
670 bank->gpio_regs = &gpio_regs_v1;
671 bank->gpio_type = GPIO_TYPE_V1;
672 }
673
674 return 0;
675 }
676
677 static struct rockchip_pin_bank *
678 rockchip_gpio_find_bank(struct pinctrl_dev *pctldev, int id)
679 {
680 struct rockchip_pinctrl *info;
681 struct rockchip_pin_bank *bank;
682 int i, found = 0;
683
684 info = pinctrl_dev_get_drvdata(pctldev);
685 bank = info->ctrl->pin_banks;
686 for (i = 0; i < info->ctrl->nr_banks; i++, bank++) {
687 if (bank->bank_num == id) {
688 found = 1;
689 break;
690 }
691 }
692
693 return found ? bank : NULL;
694 }
695
> 696 static int rockchip_gpio_probe(struct platform_device *pdev)
697 {
> 698 struct device *dev = &pdev->dev;
699 struct device_node *np = dev->of_node;
700 struct pinctrl_dev *pctldev = NULL;
701 struct rockchip_pin_bank *bank = NULL;
702 struct rockchip_pin_deferred *cfg;
703 static int gpio;
704 int id, ret;
705
706 if (!dev->parent)
707 return -ENODEV;
708
709 pctldev = pinctrl_get(dev->parent);
710 if (!pctldev)
711 return -EPROBE_DEFER;
712
713 id = of_alias_get_id(np, "gpio");
714 if (id < 0)
715 id = gpio++;
716
717 bank = rockchip_gpio_find_bank(pctldev, id);
718 if (!bank)
719 return -EINVAL;
720
721 bank->dev = dev;
722
723 raw_spin_lock_init(&bank->slock);
724
725 ret = rockchip_get_bank_data(bank);
726 if (ret)
727 return ret;
728
729 /*
730 * Prevent clashes with a deferred output setting
731 * being added right at this moment.
732 */
733 mutex_lock(&bank->deferred_lock);
734
735 ret = rockchip_gpiolib_register(bank);
736 if (ret) {
737 clk_disable_unprepare(bank->clk);
738 mutex_unlock(&bank->deferred_lock);
739 return ret;
740 }
741
742 while (!list_empty(&bank->deferred_pins)) {
743 cfg = list_first_entry(&bank->deferred_pins,
744 struct rockchip_pin_deferred, head);
745 list_del(&cfg->head);
746
747 switch (cfg->param) {
748 case PIN_CONFIG_OUTPUT:
749 ret = rockchip_gpio_direction_output(&bank->gpio_chip, cfg->pin, cfg->arg);
750 if (ret)
751 dev_warn(dev, "setting output pin %u to %u failed\n", cfg->pin,
752 cfg->arg);
753 break;
754 case PIN_CONFIG_INPUT_ENABLE:
755 ret = rockchip_gpio_direction_input(&bank->gpio_chip, cfg->pin);
756 if (ret)
757 dev_warn(dev, "setting input pin %u failed\n", cfg->pin);
758 break;
759 default:
760 dev_warn(dev, "unknown deferred config param %d\n", cfg->param);
761 break;
762 }
763 kfree(cfg);
764 }
765
766 mutex_unlock(&bank->deferred_lock);
767
> 768 platform_set_drvdata(pdev, bank);
769 dev_info(dev, "probed %pfw\n", dev_fwnode(dev));
770
771 return 0;
772 }
773
774 static int rockchip_gpio_remove(struct platform_device *pdev)
775 {
> 776 struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
777
778 clk_disable_unprepare(bank->clk);
779 gpiochip_remove(&bank->gpio_chip);
780
781 return 0;
782 }
783
784 static const struct of_device_id rockchip_gpio_match[] = {
785 { .compatible = "rockchip,gpio-bank", },
786 { .compatible = "rockchip,rk3188-gpio-bank0" },
787 { },
788 };
789
> 790 static struct platform_driver rockchip_gpio_driver = {
791 .probe = rockchip_gpio_probe,
792 .remove = rockchip_gpio_remove,
793 .driver = {
794 .name = "rockchip-gpio",
795 .of_match_table = rockchip_gpio_match,
796 },
797 };
798
799 static int __init rockchip_gpio_init(void)
800 {
> 801 return platform_driver_register(&rockchip_gpio_driver);
802 }
803 postcore_initcall(rockchip_gpio_init);
804
805 static void __exit rockchip_gpio_exit(void)
806 {
> 807 platform_driver_unregister(&rockchip_gpio_driver);
808 }
809 module_exit(rockchip_gpio_exit);
810
--
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-08-31 19:52 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-31 13:45 [PATCH v2 1/1] gpio: rockchip: Switch to use fwnode instead of of_node Andy Shevchenko
2022-08-31 13:45 ` Andy Shevchenko
2022-08-31 13:45 ` Andy Shevchenko
2022-08-31 15:11 ` Bartosz Golaszewski
2022-08-31 15:11 ` Bartosz Golaszewski
2022-08-31 15:11 ` Bartosz Golaszewski
2022-08-31 19:03 ` Andy Shevchenko
2022-08-31 19:03 ` Andy Shevchenko
2022-08-31 19:03 ` Andy Shevchenko
2022-09-01 1:47 ` jay.xu
2022-09-01 1:47 ` jay.xu
2022-09-01 7:08 ` Bartosz Golaszewski
2022-09-01 7:08 ` Bartosz Golaszewski
2022-09-01 7:08 ` Bartosz Golaszewski
2022-09-01 7:25 ` jay.xu
2022-09-01 7:25 ` jay.xu
2022-09-22 8:34 ` Bartosz Golaszewski
2022-09-22 8:34 ` Bartosz Golaszewski
2022-09-22 8:34 ` Bartosz Golaszewski
2022-08-31 19:30 ` kernel test robot
2022-08-31 19:30 ` kernel test robot
2022-08-31 19:30 ` kernel test robot
2022-08-31 19:51 ` kernel test robot [this message]
2022-08-31 19:51 ` kernel test robot
2022-08-31 19:51 ` kernel test robot
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=202209010355.qwMuqR06-lkp@intel.com \
--to=lkp@intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=brgl@bgdev.pl \
--cc=heiko@sntech.de \
--cc=jay.xu@rock-chips.com \
--cc=kbuild-all@lists.01.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=llvm@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 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.