[net-next PATCH v10 9/9] net: phy: Add Airoha AN8855 Internal Switch Gigabit PHY

kernel test robot lkp at intel.com
Sun Dec 8 20:39:54 PST 2024


Hi Christian,

kernel test robot noticed the following build errors:

[auto build test ERROR on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Christian-Marangi/dt-bindings-nvmem-Document-support-for-Airoha-AN8855-Switch-EFUSE/20241208-082533
base:   net-next/main
patch link:    https://lore.kernel.org/r/20241208002105.18074-10-ansuelsmth%40gmail.com
patch subject: [net-next PATCH v10 9/9] net: phy: Add Airoha AN8855 Internal Switch Gigabit PHY
config: sh-allmodconfig (https://download.01.org/0day-ci/archive/20241208/202412081155.xp97LlzV-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241208/202412081155.xp97LlzV-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202412081155.xp97LlzV-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   drivers/net/phy/air_an8855.c: In function 'an8855_probe':
>> drivers/net/phy/air_an8855.c:100:13: warning: unused variable 'ret' [-Wunused-variable]
     100 |         int ret;
         |             ^~~
   drivers/net/phy/air_an8855.c: In function 'an8855_config_init':
>> drivers/net/phy/air_an8855.c:154:45: error: 'dev' undeclared (first use in this function); did you mean 'cdev'?
     154 |                 ret = en8855_get_r50ohm_val(dev, "tx_a", &calibration_data[0]);
         |                                             ^~~
         |                                             cdev
   drivers/net/phy/air_an8855.c:154:45: note: each undeclared identifier is reported only once for each function it appears in


vim +154 drivers/net/phy/air_an8855.c

    94	
    95	static int an8855_probe(struct phy_device *phydev)
    96	{
    97		struct device *dev = &phydev->mdio.dev;
    98		struct device_node *node = dev->of_node;
    99		struct air_an8855_priv *priv;
 > 100		int ret;
   101	
   102		/* If we don't have a node, skip calib */
   103		if (!node)
   104			return 0;
   105	
   106		priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
   107		if (!priv)
   108			return -ENOMEM;
   109	
   110		phydev->priv = priv;
   111	
   112		return 0;
   113	}
   114	
   115	static int an8855_get_downshift(struct phy_device *phydev, u8 *data)
   116	{
   117		int val;
   118	
   119		val = phy_read_paged(phydev, AN8855_PHY_PAGE_EXTENDED_1, AN8855_PHY_EXT_REG_14);
   120		if (val < 0)
   121			return val;
   122	
   123		*data = val & AN8855_PHY_EN_DOWN_SHIFT ? DOWNSHIFT_DEV_DEFAULT_COUNT :
   124							 DOWNSHIFT_DEV_DISABLE;
   125	
   126		return 0;
   127	}
   128	
   129	static int an8855_set_downshift(struct phy_device *phydev, u8 cnt)
   130	{
   131		u16 ds = cnt != DOWNSHIFT_DEV_DISABLE ? AN8855_PHY_EN_DOWN_SHIFT : 0;
   132	
   133		return phy_modify_paged(phydev, AN8855_PHY_PAGE_EXTENDED_1,
   134					AN8855_PHY_EXT_REG_14, AN8855_PHY_EN_DOWN_SHIFT,
   135					ds);
   136	}
   137	
   138	static int an8855_config_init(struct phy_device *phydev)
   139	{
   140		struct air_an8855_priv *priv = phydev->priv;
   141		int ret;
   142	
   143		/* Enable HW auto downshift */
   144		ret = an8855_set_downshift(phydev, DOWNSHIFT_DEV_DEFAULT_COUNT);
   145		if (ret)
   146			return ret;
   147	
   148		/* Apply calibration values, if needed.
   149		 * AN8855_PHY_FLAGS_EN_CALIBRATION signal this.
   150		 */
   151		if (priv && phydev->dev_flags & AN8855_PHY_FLAGS_EN_CALIBRATION) {
   152			u8 *calibration_data = priv->calibration_data;
   153	
 > 154			ret = en8855_get_r50ohm_val(dev, "tx_a", &calibration_data[0]);
   155			if (ret)
   156				return ret;
   157	
   158			ret = en8855_get_r50ohm_val(dev, "tx_b", &calibration_data[1]);
   159			if (ret)
   160				return ret;
   161	
   162			ret = en8855_get_r50ohm_val(dev, "tx_c", &calibration_data[2]);
   163			if (ret)
   164				return ret;
   165	
   166			ret = en8855_get_r50ohm_val(dev, "tx_d", &calibration_data[3]);
   167			if (ret)
   168				return ret;
   169	
   170			ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, AN8855_PHY_R500HM_RSEL_TX_AB,
   171					     AN8855_PHY_R50OHM_RSEL_TX_A | AN8855_PHY_R50OHM_RSEL_TX_B,
   172					     FIELD_PREP(AN8855_PHY_R50OHM_RSEL_TX_A, calibration_data[0]) |
   173					     FIELD_PREP(AN8855_PHY_R50OHM_RSEL_TX_B, calibration_data[1]));
   174			if (ret)
   175				return ret;
   176			ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, AN8855_PHY_R500HM_RSEL_TX_CD,
   177					     AN8855_PHY_R50OHM_RSEL_TX_C | AN8855_PHY_R50OHM_RSEL_TX_D,
   178					     FIELD_PREP(AN8855_PHY_R50OHM_RSEL_TX_C, calibration_data[2]) |
   179					     FIELD_PREP(AN8855_PHY_R50OHM_RSEL_TX_D, calibration_data[3]));
   180			if (ret)
   181				return ret;
   182		}
   183	
   184		/* Apply values to reduce signal noise */
   185		ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, AN8855_PHY_TX_PAIR_DLY_SEL_GBE,
   186				    FIELD_PREP(AN8855_PHY_CR_DA_TX_PAIR_DELKAY_SEL_A_GBE, 0x4) |
   187				    FIELD_PREP(AN8855_PHY_CR_DA_TX_PAIR_DELKAY_SEL_C_GBE, 0x4));
   188		if (ret)
   189			return ret;
   190		ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, AN8855_PHY_RXADC_CTRL,
   191				    AN8855_PHY_RG_AD_SAMNPLE_PHSEL_A |
   192				    AN8855_PHY_RG_AD_SAMNPLE_PHSEL_C);
   193		if (ret)
   194			return ret;
   195		ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, AN8855_PHY_RXADC_REV_0,
   196				    FIELD_PREP(AN8855_PHY_RG_AD_RESERVE0_A, 0x1));
   197		if (ret)
   198			return ret;
   199		ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, AN8855_PHY_RXADC_REV_1,
   200				    FIELD_PREP(AN8855_PHY_RG_AD_RESERVE0_C, 0x1));
   201		if (ret)
   202			return ret;
   203	
   204		return 0;
   205	}
   206	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki



More information about the Linux-mediatek mailing list