CC: kbuild-all(a)lists.01.org CC: linux-arm-kernel(a)lists.infradead.org TO: Saurabh Sengar CC: Michal Simek CC: Appana Durga Kedareswara Rao CC: Radhey Shyam Pandey tree: https://github.com/Xilinx/linux-xlnx master head: d3774573d5a9700273bd0c3ff82af157107f7fa6 commit: 0f447249ba48721e24292b1ddacf1b4b4e21d9a7 [9663/10510] net: axienet: added multichannel DMA support :::::: branch date: 5 days ago :::::: commit date: 12 months ago config: i386-randconfig-m021-20210209 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter New smatch warnings: drivers/net/ethernet/xilinx/xilinx_axienet_main.c:2948 axienet_probe() warn: missing error code 'ret' Old smatch warnings: drivers/net/ethernet/xilinx/xilinx_axienet_main.c:204 axienet_dma_bd_init() error: uninitialized symbol 'ret'. drivers/net/ethernet/xilinx/xilinx_axienet_main.c:1373 axienet_mii_init() warn: inconsistent returns 'lp->mii_bus->mdio_lock'. vim +/ret +2948 drivers/net/ethernet/xilinx/xilinx_axienet_main.c 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2705 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2706 /** 2be586205ca2b8 Srikanth Thokala 2015-05-05 2707 * axienet_probe - Axi Ethernet probe function. 95219aa538e11d Srikanth Thokala 2015-05-05 2708 * @pdev: Pointer to platform device structure. 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2709 * b0d081c524b46c Michal Simek 2015-05-05 2710 * Return: 0, on success 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2711 * Non-zero error value on failure. 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2712 * 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2713 * This is the probe routine for Axi Ethernet driver. This is called before 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2714 * any other driver routines are invoked. It allocates and sets up the Ethernet 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2715 * device. Parses through device tree and populates fields of 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2716 * axienet_local. It registers the Ethernet device. 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2717 */ 2be586205ca2b8 Srikanth Thokala 2015-05-05 2718 static int axienet_probe(struct platform_device *pdev) 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2719 { b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2720 int (*axienet_clk_init)(struct platform_device *pdev, b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2721 struct clk **axi_aclk, struct clk **axis_clk, b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2722 struct clk **ref_clk, struct clk **tmpclk) = b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2723 axienet_clk_init; f74b2e947664be Appana Durga Kedareswara Rao 2020-01-24 2724 int ret = 0; 0f447249ba4872 Saurabh Sengar 2020-01-24 2725 #ifdef CONFIG_XILINX_AXI_EMAC_HWTSTAMP 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2726 struct device_node *np; 0f447249ba4872 Saurabh Sengar 2020-01-24 2727 #endif 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2728 struct axienet_local *lp; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2729 struct net_device *ndev; da90e38003e2f0 Tobias Klauser 2016-12-07 2730 const void *mac_addr; 0f447249ba4872 Saurabh Sengar 2020-01-24 2731 struct resource *ethres; 8495659bf93c8e Srikanth Thokala 2015-05-05 2732 u32 value; 0f447249ba4872 Saurabh Sengar 2020-01-24 2733 u16 num_queues = XAE_MAX_QUEUES; 0f447249ba4872 Saurabh Sengar 2020-01-24 2734 bool slave = false; 0f447249ba4872 Saurabh Sengar 2020-01-24 2735 0f447249ba4872 Saurabh Sengar 2020-01-24 2736 ret = of_property_read_u16(pdev->dev.of_node, "xlnx,num-queues", 0f447249ba4872 Saurabh Sengar 2020-01-24 2737 &num_queues); 0f447249ba4872 Saurabh Sengar 2020-01-24 2738 if (ret) { 0f447249ba4872 Saurabh Sengar 2020-01-24 2739 #ifndef CONFIG_AXIENET_HAS_MCDMA 0f447249ba4872 Saurabh Sengar 2020-01-24 2740 num_queues = 1; 0f447249ba4872 Saurabh Sengar 2020-01-24 2741 #endif 0f447249ba4872 Saurabh Sengar 2020-01-24 2742 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2743 0f447249ba4872 Saurabh Sengar 2020-01-24 2744 ndev = alloc_etherdev_mq(sizeof(*lp), num_queues); 41de8d4cff21a2 Joe Perches 2012-01-29 2745 if (!ndev) 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2746 return -ENOMEM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2747 95219aa538e11d Srikanth Thokala 2015-05-05 2748 platform_set_drvdata(pdev, ndev); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2749 95219aa538e11d Srikanth Thokala 2015-05-05 2750 SET_NETDEV_DEV(ndev, &pdev->dev); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2751 ndev->flags &= ~IFF_MULTICAST; /* clear multicast */ 28e24c62ab3062 Eric Dumazet 2013-12-02 2752 ndev->features = NETIF_F_SG; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2753 ndev->netdev_ops = &axienet_netdev_ops; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2754 ndev->ethtool_ops = &axienet_ethtool_ops; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2755 d894be57ca92c8 Jarod Wilson 2016-10-20 2756 /* MTU range: 64 - 9000 */ d894be57ca92c8 Jarod Wilson 2016-10-20 2757 ndev->min_mtu = 64; d894be57ca92c8 Jarod Wilson 2016-10-20 2758 ndev->max_mtu = XAE_JUMBO_MTU; d894be57ca92c8 Jarod Wilson 2016-10-20 2759 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2760 lp = netdev_priv(ndev); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2761 lp->ndev = ndev; 95219aa538e11d Srikanth Thokala 2015-05-05 2762 lp->dev = &pdev->dev; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2763 lp->options = XAE_OPTION_DEFAULTS; 0f447249ba4872 Saurabh Sengar 2020-01-24 2764 lp->num_tx_queues = num_queues; 0f447249ba4872 Saurabh Sengar 2020-01-24 2765 lp->num_rx_queues = num_queues; 8b09ca823ffb4e Robert Hancock 2019-06-06 2766 lp->rx_bd_num = RX_BD_NUM_DEFAULT; 8b09ca823ffb4e Robert Hancock 2019-06-06 2767 lp->tx_bd_num = TX_BD_NUM_DEFAULT; 0f447249ba4872 Saurabh Sengar 2020-01-24 2768 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2769 /* Map device registers */ 46aa27df885321 Srikanth Thokala 2015-05-05 2770 ethres = platform_get_resource(pdev, IORESOURCE_MEM, 0); 46aa27df885321 Srikanth Thokala 2015-05-05 2771 lp->regs = devm_ioremap_resource(&pdev->dev, ethres); fcc028c106e575 Krzysztof Kozlowski 2015-07-09 2772 if (IS_ERR(lp->regs)) { fcc028c106e575 Krzysztof Kozlowski 2015-07-09 2773 ret = PTR_ERR(lp->regs); 46aa27df885321 Srikanth Thokala 2015-05-05 2774 goto free_netdev; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2775 } 7fa0043d5c74c6 Robert Hancock 2019-06-11 2776 lp->regs_start = ethres->start; 46aa27df885321 Srikanth Thokala 2015-05-05 2777 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2778 /* Setup checksum offload, but default to off if not specified */ 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2779 lp->features = 0; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2780 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2781 if (pdev->dev.of_node) { 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2782 const struct of_device_id *match; 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2783 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2784 match = of_match_node(axienet_of_match, pdev->dev.of_node); b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2785 if (match && match->data) { 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2786 lp->axienet_config = match->data; b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2787 axienet_clk_init = lp->axienet_config->clk_init; b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2788 } 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2789 } 27a4863f9f2dcd Appana Durga Kedareswara Rao 2020-01-24 2790 8495659bf93c8e Srikanth Thokala 2015-05-05 2791 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,txcsum", &value); 8495659bf93c8e Srikanth Thokala 2015-05-05 2792 if (!ret) { f74b2e947664be Appana Durga Kedareswara Rao 2020-01-24 2793 dev_info(&pdev->dev, "TX_CSUM %d\n", value); f74b2e947664be Appana Durga Kedareswara Rao 2020-01-24 2794 8495659bf93c8e Srikanth Thokala 2015-05-05 2795 switch (value) { 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2796 case 1: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2797 lp->csum_offload_on_tx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2798 XAE_FEATURE_PARTIAL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2799 lp->features |= XAE_FEATURE_PARTIAL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2800 /* Can checksum TCP/UDP over IPv4. */ f74b2e947664be Appana Durga Kedareswara Rao 2020-01-24 2801 ndev->features |= NETIF_F_IP_CSUM | NETIF_F_SG; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2802 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2803 case 2: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2804 lp->csum_offload_on_tx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2805 XAE_FEATURE_FULL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2806 lp->features |= XAE_FEATURE_FULL_TX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2807 /* Can checksum TCP/UDP over IPv4. */ f74b2e947664be Appana Durga Kedareswara Rao 2020-01-24 2808 ndev->features |= NETIF_F_IP_CSUM | NETIF_F_SG; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2809 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2810 default: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2811 lp->csum_offload_on_tx_path = XAE_NO_CSUM_OFFLOAD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2812 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2813 } 8495659bf93c8e Srikanth Thokala 2015-05-05 2814 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,rxcsum", &value); 8495659bf93c8e Srikanth Thokala 2015-05-05 2815 if (!ret) { f74b2e947664be Appana Durga Kedareswara Rao 2020-01-24 2816 dev_info(&pdev->dev, "RX_CSUM %d\n", value); f74b2e947664be Appana Durga Kedareswara Rao 2020-01-24 2817 8495659bf93c8e Srikanth Thokala 2015-05-05 2818 switch (value) { 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2819 case 1: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2820 lp->csum_offload_on_rx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2821 XAE_FEATURE_PARTIAL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2822 lp->features |= XAE_FEATURE_PARTIAL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2823 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2824 case 2: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2825 lp->csum_offload_on_rx_path = 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2826 XAE_FEATURE_FULL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2827 lp->features |= XAE_FEATURE_FULL_RX_CSUM; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2828 break; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2829 default: 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2830 lp->csum_offload_on_rx_path = XAE_NO_CSUM_OFFLOAD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2831 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2832 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2833 /* For supporting jumbo frames, the Axi Ethernet hardware must have f080a8c35d8932 Srikanth Thokala 2015-05-05 2834 * a larger Rx/Tx Memory. Typically, the size must be large so that f080a8c35d8932 Srikanth Thokala 2015-05-05 2835 * we can enable jumbo option and start supporting jumbo frames. f080a8c35d8932 Srikanth Thokala 2015-05-05 2836 * Here we check for memory allocated for Rx/Tx in the hardware from f080a8c35d8932 Srikanth Thokala 2015-05-05 2837 * the device-tree and accordingly set flags. f080a8c35d8932 Srikanth Thokala 2015-05-05 2838 */ 8495659bf93c8e Srikanth Thokala 2015-05-05 2839 of_property_read_u32(pdev->dev.of_node, "xlnx,rxmem", &lp->rxmem); ee06b1728b9564 Alvaro G. M 2017-07-17 2840 ee06b1728b9564 Alvaro G. M 2017-07-17 2841 /* Start with the proprietary, and broken phy_type */ ee06b1728b9564 Alvaro G. M 2017-07-17 2842 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,phy-type", &value); ee06b1728b9564 Alvaro G. M 2017-07-17 2843 if (!ret) { ee06b1728b9564 Alvaro G. M 2017-07-17 2844 switch (value) { ee06b1728b9564 Alvaro G. M 2017-07-17 2845 case XAE_PHY_TYPE_MII: ee06b1728b9564 Alvaro G. M 2017-07-17 2846 lp->phy_mode = PHY_INTERFACE_MODE_MII; ee06b1728b9564 Alvaro G. M 2017-07-17 2847 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2848 case XAE_PHY_TYPE_GMII: ee06b1728b9564 Alvaro G. M 2017-07-17 2849 lp->phy_mode = PHY_INTERFACE_MODE_GMII; ee06b1728b9564 Alvaro G. M 2017-07-17 2850 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2851 case XAE_PHY_TYPE_RGMII_2_0: ee06b1728b9564 Alvaro G. M 2017-07-17 2852 lp->phy_mode = PHY_INTERFACE_MODE_RGMII_ID; ee06b1728b9564 Alvaro G. M 2017-07-17 2853 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2854 case XAE_PHY_TYPE_SGMII: ee06b1728b9564 Alvaro G. M 2017-07-17 2855 lp->phy_mode = PHY_INTERFACE_MODE_SGMII; ee06b1728b9564 Alvaro G. M 2017-07-17 2856 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2857 case XAE_PHY_TYPE_1000BASE_X: ee06b1728b9564 Alvaro G. M 2017-07-17 2858 lp->phy_mode = PHY_INTERFACE_MODE_1000BASEX; ee06b1728b9564 Alvaro G. M 2017-07-17 2859 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2860 default: 9e8ce9d565663f Appana Durga Kedareswara Rao 2020-01-24 2861 /* Don't error out as phy-type is an optional property */ 9e8ce9d565663f Appana Durga Kedareswara Rao 2020-01-24 2862 break; ee06b1728b9564 Alvaro G. M 2017-07-17 2863 } ee06b1728b9564 Alvaro G. M 2017-07-17 2864 } else { ee06b1728b9564 Alvaro G. M 2017-07-17 2865 lp->phy_mode = of_get_phy_mode(pdev->dev.of_node); 73e211e11be867 Dan Carpenter 2019-09-25 2866 if ((int)lp->phy_mode < 0) { 9e8ce9d565663f Appana Durga Kedareswara Rao 2020-01-24 2867 dev_warn(&pdev->dev, "couldn't find phy i/f\n"); ee06b1728b9564 Alvaro G. M 2017-07-17 2868 } ee06b1728b9564 Alvaro G. M 2017-07-17 2869 } 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2870 d8d52edc0088c9 Appana Durga Kedareswara Rao 2020-01-24 2871 lp->eth_hasnobuf = of_property_read_bool(pdev->dev.of_node, d8d52edc0088c9 Appana Durga Kedareswara Rao 2020-01-24 2872 "xlnx,eth-hasnobuf"); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2873 lp->eth_hasptp = of_property_read_bool(pdev->dev.of_node, 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2874 "xlnx,eth-hasptp"); d8d52edc0088c9 Appana Durga Kedareswara Rao 2020-01-24 2875 9e8ce9d565663f Appana Durga Kedareswara Rao 2020-01-24 2876 if ((lp->axienet_config->mactype == XAXIENET_1G) && !lp->eth_hasnobuf) 9e8ce9d565663f Appana Durga Kedareswara Rao 2020-01-24 2877 lp->eth_irq = platform_get_irq(pdev, 0); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2878 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2879 #ifdef CONFIG_XILINX_AXI_EMAC_HWTSTAMP 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2880 struct resource txtsres, rxtsres; 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2881 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2882 /* Find AXI Stream FIFO */ 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2883 np = of_parse_phandle(pdev->dev.of_node, "axififo-connected", 0); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2884 if (IS_ERR(np)) { 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2885 dev_err(&pdev->dev, "could not find TX Timestamp FIFO\n"); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2886 ret = PTR_ERR(np); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2887 goto free_netdev; 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2888 } 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2889 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2890 ret = of_address_to_resource(np, 0, &txtsres); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2891 if (ret) { 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2892 dev_err(&pdev->dev, "unable to get Tx Timestamp resource\n"); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2893 goto free_netdev; 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2894 } 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2895 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2896 lp->tx_ts_regs = devm_ioremap_resource(&pdev->dev, &txtsres); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2897 if (IS_ERR(lp->tx_ts_regs)) { 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2898 dev_err(&pdev->dev, "could not map Tx Timestamp regs\n"); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2899 ret = PTR_ERR(lp->tx_ts_regs); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2900 goto free_netdev; 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2901 } 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2902 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2903 if (lp->axienet_config->mactype == XAXIENET_10G_25G) { 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2904 np = of_parse_phandle(pdev->dev.of_node, "xlnx,rxtsfifo", 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2905 0); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2906 if (IS_ERR(np)) { 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2907 dev_err(&pdev->dev, 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2908 "couldn't find rx-timestamp FIFO\n"); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2909 ret = PTR_ERR(np); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2910 goto free_netdev; 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2911 } 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2912 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2913 ret = of_address_to_resource(np, 0, &rxtsres); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2914 if (ret) { 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2915 dev_err(&pdev->dev, 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2916 "unable to get rx-timestamp resource\n"); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2917 goto free_netdev; 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2918 } 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2919 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2920 lp->rx_ts_regs = devm_ioremap_resource(&pdev->dev, &rxtsres); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2921 if (IS_ERR(lp->rx_ts_regs)) { 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2922 dev_err(&pdev->dev, "couldn't map rx-timestamp regs\n"); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2923 ret = PTR_ERR(lp->rx_ts_regs); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2924 goto free_netdev; 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2925 } 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2926 lp->tx_ptpheader = devm_kzalloc(&pdev->dev, 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2927 XXVENET_TS_HEADER_LEN, 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2928 GFP_KERNEL); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2929 } 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2930 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2931 of_node_put(np); 6a8544f2f4d900 Appana Durga Kedareswara Rao 2020-01-24 2932 #endif 0f447249ba4872 Saurabh Sengar 2020-01-24 2933 if (!slave) { 0f447249ba4872 Saurabh Sengar 2020-01-24 2934 #ifdef CONFIG_AXIENET_HAS_MCDMA 0f447249ba4872 Saurabh Sengar 2020-01-24 2935 ret = axienet_mcdma_probe(pdev, lp, ndev); 0f447249ba4872 Saurabh Sengar 2020-01-24 2936 #else 0f447249ba4872 Saurabh Sengar 2020-01-24 2937 ret = axienet_dma_probe(pdev, ndev); 0f447249ba4872 Saurabh Sengar 2020-01-24 2938 #endif b482f0a0aa9973 Radhey Shyam Pandey 2020-01-24 2939 if (ret) { 0f447249ba4872 Saurabh Sengar 2020-01-24 2940 pr_err("Getting DMA resource failed\n"); 46aa27df885321 Srikanth Thokala 2015-05-05 2941 goto free_netdev; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2942 } 9e8ce9d565663f Appana Durga Kedareswara Rao 2020-01-24 2943 0f447249ba4872 Saurabh Sengar 2020-01-24 2944 if (dma_set_mask_and_coherent(lp->dev, DMA_BIT_MASK(lp->dma_mask)) != 0) { 0f447249ba4872 Saurabh Sengar 2020-01-24 2945 dev_warn(&pdev->dev, "default to %d-bit dma mask\n", XAE_DMA_MASK_MIN); 0f447249ba4872 Saurabh Sengar 2020-01-24 2946 if (dma_set_mask_and_coherent(lp->dev, DMA_BIT_MASK(XAE_DMA_MASK_MIN)) != 0) { 0f447249ba4872 Saurabh Sengar 2020-01-24 2947 dev_err(&pdev->dev, "dma_set_mask_and_coherent failed, aborting\n"); 46aa27df885321 Srikanth Thokala 2015-05-05 @2948 goto free_netdev; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2949 } 0f447249ba4872 Saurabh Sengar 2020-01-24 2950 } 57b6ef54c85dd8 Appana Durga Kedareswara Rao 2020-01-24 2951 b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2952 ret = axienet_dma_clk_init(pdev); b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2953 if (ret) { b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2954 if (ret != -EPROBE_DEFER) b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2955 dev_err(&pdev->dev, "DMA clock init failed %d\n", ret); b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2956 goto free_netdev; b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2957 } 0f447249ba4872 Saurabh Sengar 2020-01-24 2958 } b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2959 b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2960 ret = axienet_clk_init(pdev, &lp->aclk, &lp->eth_sclk, b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2961 &lp->eth_refclk, &lp->eth_dclk); b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2962 if (ret) { b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2963 if (ret != -EPROBE_DEFER) b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2964 dev_err(&pdev->dev, "Ethernet clock init failed %d\n", ret); b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2965 goto err_disable_clk; b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2966 } b5d3f74c95f046 Appana Durga Kedareswara Rao 2020-01-24 2967 0f447249ba4872 Saurabh Sengar 2020-01-24 2968 lp->eth_irq = platform_get_irq(pdev, 0); 0f447249ba4872 Saurabh Sengar 2020-01-24 2969 /* Check for Ethernet core IRQ (optional) */ 0f447249ba4872 Saurabh Sengar 2020-01-24 2970 if (lp->eth_irq <= 0) 0f447249ba4872 Saurabh Sengar 2020-01-24 2971 dev_info(&pdev->dev, "Ethernet core IRQ not defined\n"); 0f447249ba4872 Saurabh Sengar 2020-01-24 2972 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2973 /* Retrieve the MAC address */ da90e38003e2f0 Tobias Klauser 2016-12-07 2974 mac_addr = of_get_mac_address(pdev->dev.of_node); a51645f70f6384 Petr Štetiar 2019-05-06 2975 if (IS_ERR(mac_addr)) { d05a9ed5c3a773 Robert Hancock 2019-06-06 2976 dev_warn(&pdev->dev, "could not find MAC address property: %ld\n", d05a9ed5c3a773 Robert Hancock 2019-06-06 2977 PTR_ERR(mac_addr)); d05a9ed5c3a773 Robert Hancock 2019-06-06 2978 mac_addr = NULL; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2979 } da90e38003e2f0 Tobias Klauser 2016-12-07 2980 axienet_set_mac_address(ndev, mac_addr); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2981 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2982 lp->coalesce_count_rx = XAXIDMA_DFT_RX_THRESHOLD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2983 lp->coalesce_count_tx = XAXIDMA_DFT_TX_THRESHOLD; 8a3b7a252dca9f Daniel Borkmann 2012-01-19 2984 95219aa538e11d Srikanth Thokala 2015-05-05 2985 lp->phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); 46aa27df885321 Srikanth Thokala 2015-05-05 2986 if (lp->phy_node) { 09a0354cadec26 Robert Hancock 2019-06-06 2987 lp->clk = devm_clk_get(&pdev->dev, NULL); 09a0354cadec26 Robert Hancock 2019-06-06 2988 if (IS_ERR(lp->clk)) { 09a0354cadec26 Robert Hancock 2019-06-06 2989 dev_warn(&pdev->dev, "Failed to get clock: %ld\n", 09a0354cadec26 Robert Hancock 2019-06-06 2990 PTR_ERR(lp->clk)); 09a0354cadec26 Robert Hancock 2019-06-06 2991 lp->clk = NULL; 09a0354cadec26 Robert Hancock 2019-06-06 2992 } else { 09a0354cadec26 Robert Hancock 2019-06-06 2993 ret = clk_prepare_enable(lp->clk); 09a0354cadec26 Robert Hancock 2019-06-06 2994 if (ret) { 09a0354cadec26 Robert Hancock 2019-06-06 2995 dev_err(&pdev->dev, "Unable to enable clock: %d\n", 09a0354cadec26 Robert Hancock 2019-06-06 2996 ret); 09a0354cadec26 Robert Hancock 2019-06-06 2997 goto free_netdev; 09a0354cadec26 Robert Hancock 2019-06-06 2998 } 09a0354cadec26 Robert Hancock 2019-06-06 2999 } 09a0354cadec26 Robert Hancock 2019-06-06 3000 09a0354cadec26 Robert Hancock 2019-06-06 3001 ret = axienet_mdio_setup(lp); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3002 if (ret) 09a0354cadec26 Robert Hancock 2019-06-06 3003 dev_warn(&pdev->dev, 09a0354cadec26 Robert Hancock 2019-06-06 3004 "error registering MDIO bus: %d\n", ret); 8a3b7a252dca9f Daniel Borkmann 2012-01-19 3005 f5203a3d9b25fa Robert Hancock 2019-06-06 3006 lp->phylink_config.dev = &ndev->dev; f5203a3d9b25fa Robert Hancock 2019-06-06 3007 lp->phylink_config.type = PHYLINK_NETDEV; f5203a3d9b25fa Robert Hancock 2019-06-06 3008 f5203a3d9b25fa Robert Hancock 2019-06-06 3009 lp->phylink = phylink_create(&lp->phylink_config, pdev->dev.fwnode, f5203a3d9b25fa Robert Hancock 2019-06-06 3010 lp->phy_mode, f5203a3d9b25fa Robert Hancock 2019-06-06 3011 &axienet_phylink_ops); f5203a3d9b25fa Robert Hancock 2019-06-06 3012 if (IS_ERR(lp->phylink)) { f5203a3d9b25fa Robert Hancock 2019-06-06 3013 ret = PTR_ERR(lp->phylink); f5203a3d9b25fa Robert Hancock 2019-06-06 3014 dev_err(&pdev->dev, "phylink_create error (%i)\n", ret); f5203a3d9b25fa Robert Hancock 2019-06-06 3015 goto free_netdev; f5203a3d9b25fa Robert Hancock 2019-06-06 3016 } 73308b8fbe6790 Appana Durga Kedareswara Rao 2020-01-24 3017 } f5203a3d9b25fa Robert Hancock 2019-06-06 3018 :::::: The code at line 2948 was first introduced by commit :::::: 46aa27df88532146974628602b6f5cc587422388 net: axienet: Use devm_* calls :::::: TO: Srikanth Thokala :::::: CC: David S. Miller --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org