[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <201902040059.IqLvyYFo%fengguang.wu@intel.com>
Date: Mon, 4 Feb 2019 00:04:15 +0800
From: kbuild test robot <lkp@...el.com>
To: Joe Perches <joe@...ches.com>
Cc: kbuild-all@...org, Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] device.h: Add __cold to dev_<level> logging functions
Hi Joe,
I love your patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.0-rc4 next-20190201]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Joe-Perches/device-h-Add-__cold-to-dev_-level-logging-functions/20190203-211040
config: i386-randconfig-c0-01290401 (attached as .config)
compiler: gcc-8 (Debian 8.2.0-14) 8.2.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings
All warnings (new ones prefixed by >>):
drivers/staging/axis-fifo/axis-fifo.c: In function 'axis_fifo_probe':
drivers/staging/axis-fifo/axis-fifo.c:900:5: warning: 'rxd_tdata_width' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (rxd_tdata_width != 32) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:907:5: warning: 'txd_tdata_width' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (txd_tdata_width != 32) {
^
drivers/staging/axis-fifo/axis-fifo.c:914:5: warning: 'has_tdest' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (has_tdest) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:919:5: warning: 'has_tid' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (has_tid) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:924:5: warning: 'has_tkeep' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (has_tkeep) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:929:5: warning: 'has_tstrb' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (has_tstrb) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:934:5: warning: 'has_tuser' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (has_tuser) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:939:5: warning: 'use_rx_cut_through' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (use_rx_cut_through) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:944:5: warning: 'use_tx_cut_through' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (use_tx_cut_through) {
^
>> drivers/staging/axis-fifo/axis-fifo.c:949:5: warning: 'use_tx_control' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (use_tx_control) {
^
drivers/staging/axis-fifo/axis-fifo.c:962:22: warning: 'rx_fifo_depth' may be used uninitialized in this function [-Wmaybe-uninitialized]
fifo->rx_fifo_depth = rx_fifo_depth;
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
drivers/staging/axis-fifo/axis-fifo.c:964:38: warning: 'tx_fifo_depth' may be used uninitialized in this function [-Wmaybe-uninitialized]
fifo->tx_fifo_depth = tx_fifo_depth - 4;
~~~~~~~~~~~~~~^~~
drivers/staging/axis-fifo/axis-fifo.c:965:20: warning: 'use_rx_data' may be used uninitialized in this function [-Wmaybe-uninitialized]
fifo->has_rx_fifo = use_rx_data;
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
drivers/staging/axis-fifo/axis-fifo.c:966:20: warning: 'use_tx_data' may be used uninitialized in this function [-Wmaybe-uninitialized]
fifo->has_tx_fifo = use_tx_data;
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
vim +/txd_tdata_width +907 drivers/staging/axis-fifo/axis-fifo.c
4a965c5f8 Jacob Feder 2018-07-22 703
4a965c5f8 Jacob Feder 2018-07-22 704 static int axis_fifo_probe(struct platform_device *pdev)
4a965c5f8 Jacob Feder 2018-07-22 705 {
4a965c5f8 Jacob Feder 2018-07-22 706 struct resource *r_irq; /* interrupt resources */
4a965c5f8 Jacob Feder 2018-07-22 707 struct resource *r_mem; /* IO mem resources */
4a965c5f8 Jacob Feder 2018-07-22 708 struct device *dev = &pdev->dev; /* OS device (from device tree) */
4a965c5f8 Jacob Feder 2018-07-22 709 struct axis_fifo *fifo = NULL;
4a965c5f8 Jacob Feder 2018-07-22 710
4a965c5f8 Jacob Feder 2018-07-22 711 char device_name[32];
4a965c5f8 Jacob Feder 2018-07-22 712
4a965c5f8 Jacob Feder 2018-07-22 713 int rc = 0; /* error return value */
4a965c5f8 Jacob Feder 2018-07-22 714
4a965c5f8 Jacob Feder 2018-07-22 715 /* IP properties from device tree */
4a965c5f8 Jacob Feder 2018-07-22 716 unsigned int rxd_tdata_width;
4a965c5f8 Jacob Feder 2018-07-22 717 unsigned int txc_tdata_width;
4a965c5f8 Jacob Feder 2018-07-22 718 unsigned int txd_tdata_width;
4a965c5f8 Jacob Feder 2018-07-22 719 unsigned int tdest_width;
4a965c5f8 Jacob Feder 2018-07-22 720 unsigned int tid_width;
4a965c5f8 Jacob Feder 2018-07-22 721 unsigned int tuser_width;
4a965c5f8 Jacob Feder 2018-07-22 722 unsigned int data_interface_type;
4a965c5f8 Jacob Feder 2018-07-22 723 unsigned int has_tdest;
4a965c5f8 Jacob Feder 2018-07-22 724 unsigned int has_tid;
4a965c5f8 Jacob Feder 2018-07-22 725 unsigned int has_tkeep;
4a965c5f8 Jacob Feder 2018-07-22 726 unsigned int has_tstrb;
4a965c5f8 Jacob Feder 2018-07-22 727 unsigned int has_tuser;
4a965c5f8 Jacob Feder 2018-07-22 728 unsigned int rx_fifo_depth;
4a965c5f8 Jacob Feder 2018-07-22 729 unsigned int rx_programmable_empty_threshold;
4a965c5f8 Jacob Feder 2018-07-22 730 unsigned int rx_programmable_full_threshold;
4a965c5f8 Jacob Feder 2018-07-22 731 unsigned int axi_id_width;
4a965c5f8 Jacob Feder 2018-07-22 732 unsigned int axi4_data_width;
4a965c5f8 Jacob Feder 2018-07-22 733 unsigned int select_xpm;
4a965c5f8 Jacob Feder 2018-07-22 734 unsigned int tx_fifo_depth;
4a965c5f8 Jacob Feder 2018-07-22 735 unsigned int tx_programmable_empty_threshold;
4a965c5f8 Jacob Feder 2018-07-22 736 unsigned int tx_programmable_full_threshold;
4a965c5f8 Jacob Feder 2018-07-22 737 unsigned int use_rx_cut_through;
4a965c5f8 Jacob Feder 2018-07-22 738 unsigned int use_rx_data;
4a965c5f8 Jacob Feder 2018-07-22 739 unsigned int use_tx_control;
4a965c5f8 Jacob Feder 2018-07-22 740 unsigned int use_tx_cut_through;
4a965c5f8 Jacob Feder 2018-07-22 741 unsigned int use_tx_data;
4a965c5f8 Jacob Feder 2018-07-22 742
4a965c5f8 Jacob Feder 2018-07-22 743 /* ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 744 * init wrapper device
4a965c5f8 Jacob Feder 2018-07-22 745 * ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 746 */
4a965c5f8 Jacob Feder 2018-07-22 747
4a965c5f8 Jacob Feder 2018-07-22 748 /* allocate device wrapper memory */
4a965c5f8 Jacob Feder 2018-07-22 749 fifo = devm_kmalloc(dev, sizeof(*fifo), GFP_KERNEL);
4a965c5f8 Jacob Feder 2018-07-22 750 if (!fifo)
4a965c5f8 Jacob Feder 2018-07-22 751 return -ENOMEM;
4a965c5f8 Jacob Feder 2018-07-22 752
4a965c5f8 Jacob Feder 2018-07-22 753 dev_set_drvdata(dev, fifo);
4a965c5f8 Jacob Feder 2018-07-22 754 fifo->dt_device = dev;
4a965c5f8 Jacob Feder 2018-07-22 755
4a965c5f8 Jacob Feder 2018-07-22 756 init_waitqueue_head(&fifo->read_queue);
4a965c5f8 Jacob Feder 2018-07-22 757 init_waitqueue_head(&fifo->write_queue);
4a965c5f8 Jacob Feder 2018-07-22 758
4a965c5f8 Jacob Feder 2018-07-22 759 spin_lock_init(&fifo->read_queue_lock);
4a965c5f8 Jacob Feder 2018-07-22 760 spin_lock_init(&fifo->write_queue_lock);
4a965c5f8 Jacob Feder 2018-07-22 761
4a965c5f8 Jacob Feder 2018-07-22 762 /* ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 763 * init device memory space
4a965c5f8 Jacob Feder 2018-07-22 764 * ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 765 */
4a965c5f8 Jacob Feder 2018-07-22 766
4a965c5f8 Jacob Feder 2018-07-22 767 /* get iospace for the device */
4a965c5f8 Jacob Feder 2018-07-22 768 r_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
4a965c5f8 Jacob Feder 2018-07-22 769 if (!r_mem) {
4a965c5f8 Jacob Feder 2018-07-22 770 dev_err(fifo->dt_device, "invalid address\n");
4a965c5f8 Jacob Feder 2018-07-22 771 rc = -ENODEV;
4a965c5f8 Jacob Feder 2018-07-22 772 goto err_initial;
4a965c5f8 Jacob Feder 2018-07-22 773 }
4a965c5f8 Jacob Feder 2018-07-22 774
4a965c5f8 Jacob Feder 2018-07-22 775 fifo->mem = r_mem;
4a965c5f8 Jacob Feder 2018-07-22 776
4a965c5f8 Jacob Feder 2018-07-22 777 /* request physical memory */
4a965c5f8 Jacob Feder 2018-07-22 778 if (!request_mem_region(fifo->mem->start, resource_size(fifo->mem),
4a965c5f8 Jacob Feder 2018-07-22 779 DRIVER_NAME)) {
4a965c5f8 Jacob Feder 2018-07-22 780 dev_err(fifo->dt_device,
4a965c5f8 Jacob Feder 2018-07-22 781 "couldn't lock memory region at 0x%pa\n",
4a965c5f8 Jacob Feder 2018-07-22 782 &fifo->mem->start);
4a965c5f8 Jacob Feder 2018-07-22 783 rc = -EBUSY;
4a965c5f8 Jacob Feder 2018-07-22 784 goto err_initial;
4a965c5f8 Jacob Feder 2018-07-22 785 }
4a965c5f8 Jacob Feder 2018-07-22 786 dev_dbg(fifo->dt_device, "got memory location [0x%pa - 0x%pa]\n",
4a965c5f8 Jacob Feder 2018-07-22 787 &fifo->mem->start, &fifo->mem->end);
4a965c5f8 Jacob Feder 2018-07-22 788
4a965c5f8 Jacob Feder 2018-07-22 789 /* map physical memory to kernel virtual address space */
4a965c5f8 Jacob Feder 2018-07-22 790 fifo->base_addr = ioremap(fifo->mem->start, resource_size(fifo->mem));
4a965c5f8 Jacob Feder 2018-07-22 791 if (!fifo->base_addr) {
4a965c5f8 Jacob Feder 2018-07-22 792 dev_err(fifo->dt_device, "couldn't map physical memory\n");
4a965c5f8 Jacob Feder 2018-07-22 793 rc = -ENOMEM;
4a965c5f8 Jacob Feder 2018-07-22 794 goto err_mem;
4a965c5f8 Jacob Feder 2018-07-22 795 }
4a965c5f8 Jacob Feder 2018-07-22 796 dev_dbg(fifo->dt_device, "remapped memory to 0x%p\n", fifo->base_addr);
4a965c5f8 Jacob Feder 2018-07-22 797
4a965c5f8 Jacob Feder 2018-07-22 798 /* create unique device name */
4a965c5f8 Jacob Feder 2018-07-22 799 snprintf(device_name, sizeof(device_name), "%s_%pa",
4a965c5f8 Jacob Feder 2018-07-22 800 DRIVER_NAME, &fifo->mem->start);
4a965c5f8 Jacob Feder 2018-07-22 801
4a965c5f8 Jacob Feder 2018-07-22 802 dev_dbg(fifo->dt_device, "device name [%s]\n", device_name);
4a965c5f8 Jacob Feder 2018-07-22 803
4a965c5f8 Jacob Feder 2018-07-22 804 /* ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 805 * init IP
4a965c5f8 Jacob Feder 2018-07-22 806 * ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 807 */
4a965c5f8 Jacob Feder 2018-07-22 808
4a965c5f8 Jacob Feder 2018-07-22 809 /* retrieve device tree properties */
4a965c5f8 Jacob Feder 2018-07-22 810 rc = get_dts_property(fifo, "xlnx,axi-str-rxd-tdata-width",
4a965c5f8 Jacob Feder 2018-07-22 811 &rxd_tdata_width);
4a965c5f8 Jacob Feder 2018-07-22 812 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 813 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 814 rc = get_dts_property(fifo, "xlnx,axi-str-txc-tdata-width",
4a965c5f8 Jacob Feder 2018-07-22 815 &txc_tdata_width);
4a965c5f8 Jacob Feder 2018-07-22 816 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 817 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 818 rc = get_dts_property(fifo, "xlnx,axi-str-txd-tdata-width",
4a965c5f8 Jacob Feder 2018-07-22 819 &txd_tdata_width);
4a965c5f8 Jacob Feder 2018-07-22 820 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 821 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 822 rc = get_dts_property(fifo, "xlnx,axis-tdest-width", &tdest_width);
4a965c5f8 Jacob Feder 2018-07-22 823 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 824 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 825 rc = get_dts_property(fifo, "xlnx,axis-tid-width", &tid_width);
4a965c5f8 Jacob Feder 2018-07-22 826 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 827 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 828 rc = get_dts_property(fifo, "xlnx,axis-tuser-width", &tuser_width);
4a965c5f8 Jacob Feder 2018-07-22 829 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 830 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 831 rc = get_dts_property(fifo, "xlnx,data-interface-type",
4a965c5f8 Jacob Feder 2018-07-22 832 &data_interface_type);
4a965c5f8 Jacob Feder 2018-07-22 833 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 834 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 835 rc = get_dts_property(fifo, "xlnx,has-axis-tdest", &has_tdest);
4a965c5f8 Jacob Feder 2018-07-22 836 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 837 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 838 rc = get_dts_property(fifo, "xlnx,has-axis-tid", &has_tid);
4a965c5f8 Jacob Feder 2018-07-22 839 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 840 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 841 rc = get_dts_property(fifo, "xlnx,has-axis-tkeep", &has_tkeep);
4a965c5f8 Jacob Feder 2018-07-22 842 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 843 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 844 rc = get_dts_property(fifo, "xlnx,has-axis-tstrb", &has_tstrb);
4a965c5f8 Jacob Feder 2018-07-22 845 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 846 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 847 rc = get_dts_property(fifo, "xlnx,has-axis-tuser", &has_tuser);
4a965c5f8 Jacob Feder 2018-07-22 848 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 849 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 850 rc = get_dts_property(fifo, "xlnx,rx-fifo-depth", &rx_fifo_depth);
4a965c5f8 Jacob Feder 2018-07-22 851 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 852 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 853 rc = get_dts_property(fifo, "xlnx,rx-fifo-pe-threshold",
4a965c5f8 Jacob Feder 2018-07-22 854 &rx_programmable_empty_threshold);
4a965c5f8 Jacob Feder 2018-07-22 855 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 856 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 857 rc = get_dts_property(fifo, "xlnx,rx-fifo-pf-threshold",
4a965c5f8 Jacob Feder 2018-07-22 858 &rx_programmable_full_threshold);
4a965c5f8 Jacob Feder 2018-07-22 859 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 860 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 861 rc = get_dts_property(fifo, "xlnx,s-axi-id-width", &axi_id_width);
4a965c5f8 Jacob Feder 2018-07-22 862 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 863 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 864 rc = get_dts_property(fifo, "xlnx,s-axi4-data-width", &axi4_data_width);
4a965c5f8 Jacob Feder 2018-07-22 865 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 866 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 867 rc = get_dts_property(fifo, "xlnx,select-xpm", &select_xpm);
4a965c5f8 Jacob Feder 2018-07-22 868 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 869 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 870 rc = get_dts_property(fifo, "xlnx,tx-fifo-depth", &tx_fifo_depth);
4a965c5f8 Jacob Feder 2018-07-22 871 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 872 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 873 rc = get_dts_property(fifo, "xlnx,tx-fifo-pe-threshold",
4a965c5f8 Jacob Feder 2018-07-22 874 &tx_programmable_empty_threshold);
4a965c5f8 Jacob Feder 2018-07-22 875 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 876 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 877 rc = get_dts_property(fifo, "xlnx,tx-fifo-pf-threshold",
4a965c5f8 Jacob Feder 2018-07-22 878 &tx_programmable_full_threshold);
4a965c5f8 Jacob Feder 2018-07-22 879 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 880 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 881 rc = get_dts_property(fifo, "xlnx,use-rx-cut-through",
4a965c5f8 Jacob Feder 2018-07-22 882 &use_rx_cut_through);
4a965c5f8 Jacob Feder 2018-07-22 883 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 884 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 885 rc = get_dts_property(fifo, "xlnx,use-rx-data", &use_rx_data);
4a965c5f8 Jacob Feder 2018-07-22 886 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 887 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 888 rc = get_dts_property(fifo, "xlnx,use-tx-ctrl", &use_tx_control);
4a965c5f8 Jacob Feder 2018-07-22 889 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 890 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 891 rc = get_dts_property(fifo, "xlnx,use-tx-cut-through",
4a965c5f8 Jacob Feder 2018-07-22 892 &use_tx_cut_through);
4a965c5f8 Jacob Feder 2018-07-22 893 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 894 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 895 rc = get_dts_property(fifo, "xlnx,use-tx-data", &use_tx_data);
4a965c5f8 Jacob Feder 2018-07-22 896 if (rc)
4a965c5f8 Jacob Feder 2018-07-22 897 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 898
4a965c5f8 Jacob Feder 2018-07-22 899 /* check validity of device tree properties */
4a965c5f8 Jacob Feder 2018-07-22 @900 if (rxd_tdata_width != 32) {
4a965c5f8 Jacob Feder 2018-07-22 901 dev_err(fifo->dt_device,
4a965c5f8 Jacob Feder 2018-07-22 902 "rxd_tdata_width width [%u] unsupported\n",
4a965c5f8 Jacob Feder 2018-07-22 903 rxd_tdata_width);
4a965c5f8 Jacob Feder 2018-07-22 904 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 905 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 906 }
4a965c5f8 Jacob Feder 2018-07-22 @907 if (txd_tdata_width != 32) {
4a965c5f8 Jacob Feder 2018-07-22 908 dev_err(fifo->dt_device,
4a965c5f8 Jacob Feder 2018-07-22 909 "txd_tdata_width width [%u] unsupported\n",
4a965c5f8 Jacob Feder 2018-07-22 910 txd_tdata_width);
4a965c5f8 Jacob Feder 2018-07-22 911 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 912 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 913 }
4a965c5f8 Jacob Feder 2018-07-22 @914 if (has_tdest) {
4a965c5f8 Jacob Feder 2018-07-22 915 dev_err(fifo->dt_device, "tdest not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 916 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 917 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 918 }
4a965c5f8 Jacob Feder 2018-07-22 @919 if (has_tid) {
4a965c5f8 Jacob Feder 2018-07-22 920 dev_err(fifo->dt_device, "tid not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 921 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 922 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 923 }
4a965c5f8 Jacob Feder 2018-07-22 @924 if (has_tkeep) {
4a965c5f8 Jacob Feder 2018-07-22 925 dev_err(fifo->dt_device, "tkeep not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 926 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 927 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 928 }
4a965c5f8 Jacob Feder 2018-07-22 @929 if (has_tstrb) {
4a965c5f8 Jacob Feder 2018-07-22 930 dev_err(fifo->dt_device, "tstrb not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 931 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 932 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 933 }
4a965c5f8 Jacob Feder 2018-07-22 @934 if (has_tuser) {
4a965c5f8 Jacob Feder 2018-07-22 935 dev_err(fifo->dt_device, "tuser not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 936 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 937 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 938 }
4a965c5f8 Jacob Feder 2018-07-22 @939 if (use_rx_cut_through) {
4a965c5f8 Jacob Feder 2018-07-22 940 dev_err(fifo->dt_device, "rx cut-through not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 941 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 942 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 943 }
4a965c5f8 Jacob Feder 2018-07-22 @944 if (use_tx_cut_through) {
4a965c5f8 Jacob Feder 2018-07-22 945 dev_err(fifo->dt_device, "tx cut-through not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 946 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 947 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 948 }
4a965c5f8 Jacob Feder 2018-07-22 @949 if (use_tx_control) {
4a965c5f8 Jacob Feder 2018-07-22 950 dev_err(fifo->dt_device, "tx control not supported\n");
4a965c5f8 Jacob Feder 2018-07-22 951 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 952 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 953 }
4a965c5f8 Jacob Feder 2018-07-22 954
4a965c5f8 Jacob Feder 2018-07-22 955 /* TODO
4a965c5f8 Jacob Feder 2018-07-22 956 * these exist in the device tree but it's unclear what they do
4a965c5f8 Jacob Feder 2018-07-22 957 * - select-xpm
4a965c5f8 Jacob Feder 2018-07-22 958 * - data-interface-type
4a965c5f8 Jacob Feder 2018-07-22 959 */
4a965c5f8 Jacob Feder 2018-07-22 960
4a965c5f8 Jacob Feder 2018-07-22 961 /* set device wrapper properties based on IP config */
4a965c5f8 Jacob Feder 2018-07-22 962 fifo->rx_fifo_depth = rx_fifo_depth;
4a965c5f8 Jacob Feder 2018-07-22 963 /* IP sets TDFV to fifo depth - 4 so we will do the same */
4a965c5f8 Jacob Feder 2018-07-22 964 fifo->tx_fifo_depth = tx_fifo_depth - 4;
4a965c5f8 Jacob Feder 2018-07-22 965 fifo->has_rx_fifo = use_rx_data;
4a965c5f8 Jacob Feder 2018-07-22 966 fifo->has_tx_fifo = use_tx_data;
4a965c5f8 Jacob Feder 2018-07-22 967
4a965c5f8 Jacob Feder 2018-07-22 968 reset_ip_core(fifo);
4a965c5f8 Jacob Feder 2018-07-22 969
4a965c5f8 Jacob Feder 2018-07-22 970 /* ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 971 * init device interrupts
4a965c5f8 Jacob Feder 2018-07-22 972 * ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 973 */
4a965c5f8 Jacob Feder 2018-07-22 974
4a965c5f8 Jacob Feder 2018-07-22 975 /* get IRQ resource */
4a965c5f8 Jacob Feder 2018-07-22 976 r_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
4a965c5f8 Jacob Feder 2018-07-22 977 if (!r_irq) {
4a965c5f8 Jacob Feder 2018-07-22 978 dev_err(fifo->dt_device, "no IRQ found for 0x%pa\n",
4a965c5f8 Jacob Feder 2018-07-22 979 &fifo->mem->start);
4a965c5f8 Jacob Feder 2018-07-22 980 rc = -EIO;
4a965c5f8 Jacob Feder 2018-07-22 981 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 982 }
4a965c5f8 Jacob Feder 2018-07-22 983
4a965c5f8 Jacob Feder 2018-07-22 984 /* request IRQ */
4a965c5f8 Jacob Feder 2018-07-22 985 fifo->irq = r_irq->start;
4a965c5f8 Jacob Feder 2018-07-22 986 rc = request_irq(fifo->irq, &axis_fifo_irq, 0, DRIVER_NAME, fifo);
4a965c5f8 Jacob Feder 2018-07-22 987 if (rc) {
4a965c5f8 Jacob Feder 2018-07-22 988 dev_err(fifo->dt_device, "couldn't allocate interrupt %i\n",
4a965c5f8 Jacob Feder 2018-07-22 989 fifo->irq);
4a965c5f8 Jacob Feder 2018-07-22 990 goto err_unmap;
4a965c5f8 Jacob Feder 2018-07-22 991 }
4a965c5f8 Jacob Feder 2018-07-22 992
4a965c5f8 Jacob Feder 2018-07-22 993 /* ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 994 * init char device
4a965c5f8 Jacob Feder 2018-07-22 995 * ----------------------------
4a965c5f8 Jacob Feder 2018-07-22 996 */
4a965c5f8 Jacob Feder 2018-07-22 997
4a965c5f8 Jacob Feder 2018-07-22 998 /* allocate device number */
4a965c5f8 Jacob Feder 2018-07-22 999 rc = alloc_chrdev_region(&fifo->devt, 0, 1, DRIVER_NAME);
4a965c5f8 Jacob Feder 2018-07-22 1000 if (rc < 0)
4a965c5f8 Jacob Feder 2018-07-22 1001 goto err_irq;
4a965c5f8 Jacob Feder 2018-07-22 1002 dev_dbg(fifo->dt_device, "allocated device number major %i minor %i\n",
4a965c5f8 Jacob Feder 2018-07-22 1003 MAJOR(fifo->devt), MINOR(fifo->devt));
4a965c5f8 Jacob Feder 2018-07-22 1004
4a965c5f8 Jacob Feder 2018-07-22 1005 /* create driver file */
4a965c5f8 Jacob Feder 2018-07-22 1006 fifo->device = device_create(axis_fifo_driver_class, NULL, fifo->devt,
4a965c5f8 Jacob Feder 2018-07-22 1007 NULL, device_name);
6d4abf1c0 Wei Yongjun 2018-07-27 1008 if (IS_ERR(fifo->device)) {
4a965c5f8 Jacob Feder 2018-07-22 1009 dev_err(fifo->dt_device,
4a965c5f8 Jacob Feder 2018-07-22 1010 "couldn't create driver file\n");
6d4abf1c0 Wei Yongjun 2018-07-27 1011 rc = PTR_ERR(fifo->device);
4a965c5f8 Jacob Feder 2018-07-22 1012 goto err_chrdev_region;
4a965c5f8 Jacob Feder 2018-07-22 1013 }
4a965c5f8 Jacob Feder 2018-07-22 1014 dev_set_drvdata(fifo->device, fifo);
4a965c5f8 Jacob Feder 2018-07-22 1015
4a965c5f8 Jacob Feder 2018-07-22 1016 /* create character device */
4a965c5f8 Jacob Feder 2018-07-22 1017 cdev_init(&fifo->char_device, &fops);
4a965c5f8 Jacob Feder 2018-07-22 1018 rc = cdev_add(&fifo->char_device, fifo->devt, 1);
4a965c5f8 Jacob Feder 2018-07-22 1019 if (rc < 0) {
4a965c5f8 Jacob Feder 2018-07-22 1020 dev_err(fifo->dt_device, "couldn't create character device\n");
4a965c5f8 Jacob Feder 2018-07-22 1021 goto err_dev;
4a965c5f8 Jacob Feder 2018-07-22 1022 }
4a965c5f8 Jacob Feder 2018-07-22 1023
4a965c5f8 Jacob Feder 2018-07-22 1024 /* create sysfs entries */
4a965c5f8 Jacob Feder 2018-07-22 1025 rc = sysfs_create_group(&fifo->device->kobj, &axis_fifo_attrs_group);
4a965c5f8 Jacob Feder 2018-07-22 1026 if (rc < 0) {
4a965c5f8 Jacob Feder 2018-07-22 1027 dev_err(fifo->dt_device, "couldn't register sysfs group\n");
4a965c5f8 Jacob Feder 2018-07-22 1028 goto err_cdev;
4a965c5f8 Jacob Feder 2018-07-22 1029 }
4a965c5f8 Jacob Feder 2018-07-22 1030
4a965c5f8 Jacob Feder 2018-07-22 1031 dev_info(fifo->dt_device, "axis-fifo created at %pa mapped to 0x%pa, irq=%i, major=%i, minor=%i\n",
4a965c5f8 Jacob Feder 2018-07-22 1032 &fifo->mem->start, &fifo->base_addr, fifo->irq,
4a965c5f8 Jacob Feder 2018-07-22 1033 MAJOR(fifo->devt), MINOR(fifo->devt));
4a965c5f8 Jacob Feder 2018-07-22 1034
4a965c5f8 Jacob Feder 2018-07-22 1035 return 0;
4a965c5f8 Jacob Feder 2018-07-22 1036
4a965c5f8 Jacob Feder 2018-07-22 1037 err_cdev:
4a965c5f8 Jacob Feder 2018-07-22 1038 cdev_del(&fifo->char_device);
4a965c5f8 Jacob Feder 2018-07-22 1039 err_dev:
4a965c5f8 Jacob Feder 2018-07-22 1040 device_destroy(axis_fifo_driver_class, fifo->devt);
4a965c5f8 Jacob Feder 2018-07-22 1041 err_chrdev_region:
4a965c5f8 Jacob Feder 2018-07-22 1042 unregister_chrdev_region(fifo->devt, 1);
4a965c5f8 Jacob Feder 2018-07-22 1043 err_irq:
4a965c5f8 Jacob Feder 2018-07-22 1044 free_irq(fifo->irq, fifo);
4a965c5f8 Jacob Feder 2018-07-22 1045 err_unmap:
4a965c5f8 Jacob Feder 2018-07-22 1046 iounmap(fifo->base_addr);
4a965c5f8 Jacob Feder 2018-07-22 1047 err_mem:
4a965c5f8 Jacob Feder 2018-07-22 1048 release_mem_region(fifo->mem->start, resource_size(fifo->mem));
4a965c5f8 Jacob Feder 2018-07-22 1049 err_initial:
4a965c5f8 Jacob Feder 2018-07-22 1050 dev_set_drvdata(dev, NULL);
4a965c5f8 Jacob Feder 2018-07-22 1051 return rc;
4a965c5f8 Jacob Feder 2018-07-22 1052 }
4a965c5f8 Jacob Feder 2018-07-22 1053
:::::: The code at line 907 was first introduced by commit
:::::: 4a965c5f89decd636129cddc47e5f2c61e8f13e6 staging: add driver for Xilinx AXI-Stream FIFO v4.1 IP core
:::::: TO: Jacob Feder <jacobsfeder@...il.com>
:::::: CC: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Download attachment ".config.gz" of type "application/gzip" (26842 bytes)
Powered by blists - more mailing lists