Message ID | 20220419102709.26432-3-josua@solid-run.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | adin: add support for clock output | expand |
Context | Check | Description |
---|---|---|
netdev/fixes_present | success | Fixes tag not required for -next series |
netdev/subject_prefix | success | Link |
netdev/cover_letter | success | Series has a cover letter |
netdev/patch_count | success | Link |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | fail | Errors and warnings before: 0 this patch: 1 |
netdev/cc_maintainers | success | CCed 8 of 8 maintainers |
netdev/build_clang | success | Errors and warnings before: 0 this patch: 0 |
netdev/module_param | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/verify_fixes | success | No Fixes tag |
netdev/build_allmodconfig_warn | fail | Errors and warnings before: 0 this patch: 1 |
netdev/checkpatch | fail | ERROR: space required before the open parenthesis '(' |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
netdev/tree_selection | success | Guessing tree name failed - patch did not apply |
Hi Josua, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on robh/for-next] [also build test WARNING on net/master net-next/master v5.18-rc3 next-20220420] [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] url: https://github.com/intel-lab-lkp/linux/commits/Josua-Mayer/dt-bindings-net-adin-document-phy-clock-output-properties/20220419-192719 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next config: openrisc-randconfig-s032-20220420 (https://download.01.org/0day-ci/archive/20220421/202204211324.qgcPMycQ-lkp@intel.com/config) compiler: or1k-linux-gcc (GCC) 11.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-dirty # https://github.com/intel-lab-lkp/linux/commit/74d856f1c89a6534fd58889f20ad4b481b8191c9 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Josua-Mayer/dt-bindings-net-adin-document-phy-clock-output-properties/20220419-192719 git checkout 74d856f1c89a6534fd58889f20ad4b481b8191c9 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=openrisc SHELL=/bin/bash drivers/net/phy/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> sparse warnings: (new ones prefixed by >>) >> drivers/net/phy/adin.c:448:27: sparse: sparse: Using plain integer as NULL pointer vim +448 drivers/net/phy/adin.c 444 445 static int adin_config_clk_out(struct phy_device *phydev) 446 { 447 struct device *dev = &phydev->mdio.dev; > 448 const char *val = 0; 449 u8 sel = 0; 450 451 device_property_read_string(dev, "adi,phy-output-clock", &val); 452 if(!val) { 453 /* property not present, do not enable GP_CLK pin */ 454 } else if(strcmp(val, "25mhz-reference") == 0) { 455 sel |= ADIN1300_GE_CLK_CFG_25; 456 } else if(strcmp(val, "125mhz-free-running") == 0) { 457 sel |= ADIN1300_GE_CLK_CFG_FREE_125; 458 } else if(strcmp(val, "125mhz-recovered") == 0) { 459 sel |= ADIN1300_GE_CLK_CFG_RCVR_125; 460 } else if(strcmp(val, "adaptive-free-running") == 0) { 461 sel |= ADIN1300_GE_CLK_CFG_HRT_FREE; 462 } else if(strcmp(val, "adaptive-recovered") == 0) { 463 sel |= ADIN1300_GE_CLK_CFG_HRT_RCVR; 464 } else { 465 phydev_err(phydev, "invalid adi,phy-output-clock\n"); 466 return -EINVAL; 467 } 468 469 if(device_property_read_bool(dev, "adi,phy-output-reference-clock")) 470 sel |= ADIN1300_GE_CLK_CFG_REF_EN; 471 472 return phy_modify_mmd(phydev, MDIO_MMD_VEND1, ADIN1300_GE_CLK_CFG_REG, 473 ADIN1300_GE_CLK_CFG_MASK, sel); 474 } 475
\o/ I am going to fix this by using NULL in v3. Is there any other feedback I should take into account on this patch? - Josua Mayer Am 21.04.22 um 09:45 schrieb kernel test robot: > Hi Josua, > > Thank you for the patch! Perhaps something to improve: > > [auto build test WARNING on robh/for-next] > [also build test WARNING on net/master net-next/master v5.18-rc3 next-20220420] > [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] > > url: https://github.com/intel-lab-lkp/linux/commits/Josua-Mayer/dt-bindings-net-adin-document-phy-clock-output-properties/20220419-192719 > base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next > config: openrisc-randconfig-s032-20220420 (https://download.01.org/0day-ci/archive/20220421/202204211324.qgcPMycQ-lkp@intel.com/config) > compiler: or1k-linux-gcc (GCC) 11.2.0 > reproduce: > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # apt-get install sparse > # sparse version: v0.6.4-dirty > # https://github.com/intel-lab-lkp/linux/commit/74d856f1c89a6534fd58889f20ad4b481b8191c9 > git remote add linux-review https://github.com/intel-lab-lkp/linux > git fetch --no-tags linux-review Josua-Mayer/dt-bindings-net-adin-document-phy-clock-output-properties/20220419-192719 > git checkout 74d856f1c89a6534fd58889f20ad4b481b8191c9 > # save the config file > mkdir build_dir && cp config build_dir/.config > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=openrisc SHELL=/bin/bash drivers/net/phy/ > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <lkp@intel.com> > > > sparse warnings: (new ones prefixed by >>) >>> drivers/net/phy/adin.c:448:27: sparse: sparse: Using plain integer as NULL pointer > vim +448 drivers/net/phy/adin.c > > 444 > 445 static int adin_config_clk_out(struct phy_device *phydev) > 446 { > 447 struct device *dev = &phydev->mdio.dev; > > 448 const char *val = 0; > 449 u8 sel = 0; > 450 > 451 device_property_read_string(dev, "adi,phy-output-clock", &val); > 452 if(!val) { > 453 /* property not present, do not enable GP_CLK pin */ > 454 } else if(strcmp(val, "25mhz-reference") == 0) { > 455 sel |= ADIN1300_GE_CLK_CFG_25; > 456 } else if(strcmp(val, "125mhz-free-running") == 0) { > 457 sel |= ADIN1300_GE_CLK_CFG_FREE_125; > 458 } else if(strcmp(val, "125mhz-recovered") == 0) { > 459 sel |= ADIN1300_GE_CLK_CFG_RCVR_125; > 460 } else if(strcmp(val, "adaptive-free-running") == 0) { > 461 sel |= ADIN1300_GE_CLK_CFG_HRT_FREE; > 462 } else if(strcmp(val, "adaptive-recovered") == 0) { > 463 sel |= ADIN1300_GE_CLK_CFG_HRT_RCVR; > 464 } else { > 465 phydev_err(phydev, "invalid adi,phy-output-clock\n"); > 466 return -EINVAL; > 467 } > 468 > 469 if(device_property_read_bool(dev, "adi,phy-output-reference-clock")) > 470 sel |= ADIN1300_GE_CLK_CFG_REF_EN; > 471 > 472 return phy_modify_mmd(phydev, MDIO_MMD_VEND1, ADIN1300_GE_CLK_CFG_REG, > 473 ADIN1300_GE_CLK_CFG_MASK, sel); > 474 } > 475 >
diff --git a/drivers/net/phy/adin.c b/drivers/net/phy/adin.c index 5ce6da62cc8e..e7150a8e34d2 100644 --- a/drivers/net/phy/adin.c +++ b/drivers/net/phy/adin.c @@ -99,6 +99,15 @@ #define ADIN1300_GE_SOFT_RESET_REG 0xff0c #define ADIN1300_GE_SOFT_RESET BIT(0) +#define ADIN1300_GE_CLK_CFG_REG 0xff1f +#define ADIN1300_GE_CLK_CFG_MASK GENMASK(5, 0) +#define ADIN1300_GE_CLK_CFG_RCVR_125 BIT(5) +#define ADIN1300_GE_CLK_CFG_FREE_125 BIT(4) +#define ADIN1300_GE_CLK_CFG_REF_EN BIT(3) +#define ADIN1300_GE_CLK_CFG_HRT_RCVR BIT(2) +#define ADIN1300_GE_CLK_CFG_HRT_FREE BIT(1) +#define ADIN1300_GE_CLK_CFG_25 BIT(0) + #define ADIN1300_GE_RGMII_CFG_REG 0xff23 #define ADIN1300_GE_RGMII_RX_MSK GENMASK(8, 6) #define ADIN1300_GE_RGMII_RX_SEL(x) \ @@ -433,6 +442,37 @@ static int adin_set_tunable(struct phy_device *phydev, } } +static int adin_config_clk_out(struct phy_device *phydev) +{ + struct device *dev = &phydev->mdio.dev; + const char *val = 0; + u8 sel = 0; + + device_property_read_string(dev, "adi,phy-output-clock", &val); + if(!val) { + /* property not present, do not enable GP_CLK pin */ + } else if(strcmp(val, "25mhz-reference") == 0) { + sel |= ADIN1300_GE_CLK_CFG_25; + } else if(strcmp(val, "125mhz-free-running") == 0) { + sel |= ADIN1300_GE_CLK_CFG_FREE_125; + } else if(strcmp(val, "125mhz-recovered") == 0) { + sel |= ADIN1300_GE_CLK_CFG_RCVR_125; + } else if(strcmp(val, "adaptive-free-running") == 0) { + sel |= ADIN1300_GE_CLK_CFG_HRT_FREE; + } else if(strcmp(val, "adaptive-recovered") == 0) { + sel |= ADIN1300_GE_CLK_CFG_HRT_RCVR; + } else { + phydev_err(phydev, "invalid adi,phy-output-clock\n"); + return -EINVAL; + } + + if(device_property_read_bool(dev, "adi,phy-output-reference-clock")) + sel |= ADIN1300_GE_CLK_CFG_REF_EN; + + return phy_modify_mmd(phydev, MDIO_MMD_VEND1, ADIN1300_GE_CLK_CFG_REG, + ADIN1300_GE_CLK_CFG_MASK, sel); +} + static int adin_config_init(struct phy_device *phydev) { int rc; @@ -455,6 +495,10 @@ static int adin_config_init(struct phy_device *phydev) if (rc < 0) return rc; + rc = adin_config_clk_out(phydev); + if (rc < 0) + return rc; + phydev_dbg(phydev, "PHY is using mode '%s'\n", phy_modes(phydev->interface));