tree: https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git topic/phy-reset-v3 head: a1d46e588cf5f3554d849614ae91db6f30933ea5 commit: 155bdea9cfe35268946786014dc01998acb7edbd [1/4] phylib: Add device reset GPIO support config: powerpc-mpc8315_rdb_defconfig (attached as .config) compiler: powerpc-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout 155bdea9cfe35268946786014dc01998acb7edbd # save the attached .config to linux build tree make.cross ARCH=powerpc All errors (new ones prefixed by >>): drivers//of/of_mdio.c: In function 'of_mdiobus_register_phy': >> drivers//of/of_mdio.c:60:10: error: implicit declaration of function 'fwnode_get_named_gpiod' [-Werror=implicit-function-declaration] gpiod = fwnode_get_named_gpiod(&child->fwnode, "reset-gpios", 0, ^~~~~~~~~~~~~~~~~~~~~~ >> drivers//of/of_mdio.c:61:12: error: 'GPIOD_OUT_LOW' undeclared (first use in this function) GPIOD_OUT_LOW, "PHY reset"); ^~~~~~~~~~~~~ drivers//of/of_mdio.c:61:12: note: each undeclared identifier is reported only once for each function it appears in drivers//of/of_mdio.c:65:10: warning: 'return' with a value, in function returning void return PTR_ERR(gpiod); ^~~~~~~~~~~~~~ drivers//of/of_mdio.c:47:13: note: declared here static void of_mdiobus_register_phy(struct mii_bus *mdio, ^~~~~~~~~~~~~~~~~~~~~~~ >> drivers//of/of_mdio.c:73:2: error: implicit declaration of function 'gpiod_set_value' [-Werror=implicit-function-declaration] gpiod_set_value(gpiod, 1); ^~~~~~~~~~~~~~~ drivers//of/of_mdio.c: In function 'of_mdiobus_register_device': >> drivers//of/of_mdio.c:126:12: error: 'GPIOD_ASIS' undeclared (first use in this function) GPIOD_ASIS, "PHY reset"); ^~~~~~~~~~ drivers//of/of_mdio.c:130:10: warning: 'return' with a value, in function returning void return PTR_ERR(gpiod); ^~~~~~~~~~~~~~ drivers//of/of_mdio.c:108:13: note: declared here static void of_mdiobus_register_device(struct mii_bus *mdio, ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers//of/of_mdio.c:130:10: warning: ignoring return value of 'PTR_ERR', declared with attribute warn_unused_result [-Wunused-result] return PTR_ERR(gpiod); ^~~~~~~~~~~~~~ drivers//of/of_mdio.c: In function 'of_mdiobus_register_phy': drivers//of/of_mdio.c:65:10: warning: ignoring return value of 'PTR_ERR', declared with attribute warn_unused_result [-Wunused-result] return PTR_ERR(gpiod); ^~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/fwnode_get_named_gpiod +60 drivers//of/of_mdio.c 46 > 47 static void of_mdiobus_register_phy(struct mii_bus *mdio, 48 struct device_node *child, u32 addr) 49 { 50 struct gpio_desc *gpiod; 51 struct phy_device *phy; 52 bool is_c45; 53 int rc; 54 u32 phy_id; 55 56 is_c45 = of_device_is_compatible(child, 57 "ethernet-phy-ieee802.3-c45"); 58 59 /* Deassert the optional reset signal */ > 60 gpiod = fwnode_get_named_gpiod(&child->fwnode, "reset-gpios", 0, > 61 GPIOD_OUT_LOW, "PHY reset"); 62 if (PTR_ERR(gpiod) == -ENOENT) 63 gpiod = NULL; 64 else if (IS_ERR(gpiod)) 65 return PTR_ERR(gpiod); 66 67 if (!is_c45 && !of_get_phy_id(child, &phy_id)) 68 phy = phy_device_create(mdio, addr, phy_id, 0, NULL); 69 else 70 phy = get_phy_device(mdio, addr, is_c45); 71 72 /* Assert the reset signal again */ > 73 gpiod_set_value(gpiod, 1); 74 75 if (IS_ERR(phy)) 76 return; 77 78 rc = irq_of_parse_and_map(child, 0); 79 if (rc > 0) { 80 phy->irq = rc; 81 mdio->irq[addr] = rc; 82 } else { 83 phy->irq = mdio->irq[addr]; 84 } 85 86 if (of_property_read_bool(child, "broken-turn-around")) 87 mdio->phy_ignore_ta_mask |= 1 << addr; 88 89 /* Associate the OF node with the device structure so it 90 * can be looked up later */ 91 of_node_get(child); 92 phy->mdio.dev.of_node = child; 93 phy->mdio.reset = gpiod; 94 95 /* All data is now stored in the phy struct; 96 * register it */ 97 rc = phy_device_register(phy); 98 if (rc) { 99 phy_device_free(phy); 100 of_node_put(child); 101 return; 102 } 103 104 dev_dbg(&mdio->dev, "registered phy %s at address %i\n", 105 child->name, addr); 106 } 107 108 static void of_mdiobus_register_device(struct mii_bus *mdio, 109 struct device_node *child, u32 addr) 110 { 111 struct mdio_device *mdiodev; 112 struct gpio_desc *gpiod; 113 int rc; 114 115 mdiodev = mdio_device_create(mdio, addr); 116 if (IS_ERR(mdiodev)) 117 return; 118 119 /* Associate the OF node with the device structure so it 120 * can be looked up later. 121 */ 122 of_node_get(child); 123 mdiodev->dev.of_node = child; 124 125 gpiod = fwnode_get_named_gpiod(&child->fwnode, "reset-gpios", 0, > 126 GPIOD_ASIS, "PHY reset"); 127 if (PTR_ERR(gpiod) == -ENOENT) 128 gpiod = NULL; 129 else if (IS_ERR(gpiod)) 130 return PTR_ERR(gpiod); 131 mdiodev->reset = gpiod; 132 133 /* All data is now stored in the mdiodev struct; register it. */ 134 rc = mdio_device_register(mdiodev); 135 if (rc) { 136 mdio_device_free(mdiodev); 137 of_node_put(child); 138 return; 139 } 140 141 dev_dbg(&mdio->dev, "registered mdio device %s at address %i\n", 142 child->name, addr); 143 } 144 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip