Re: [RESEND PATCH v10 07/10] phy: samsung-ufs: add UFS PHY driver for samsung SoC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Alim,

I love your patch! Perhaps something to improve:

[auto build test WARNING on 0e698dfa282211e414076f9dc7e83c1c288314fd]

url:    https://github.com/0day-ci/linux/commits/Alim-Akhtar/exynos-ufs-Add-support-for-UFS-HCI/20200613-110608
base:    0e698dfa282211e414076f9dc7e83c1c288314fd
config: x86_64-allyesconfig (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project d7e6f116f4517952fbdf5ad4b5ff67e378600c60)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>, old ones prefixed by <<):

>> drivers/phy/samsung/phy-samsung-ufs.c:47:5: warning: no previous prototype for function 'samsung_ufs_phy_wait_for_lock_acq' [-Wmissing-prototypes]
int samsung_ufs_phy_wait_for_lock_acq(struct phy *phy)
^
drivers/phy/samsung/phy-samsung-ufs.c:47:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int samsung_ufs_phy_wait_for_lock_acq(struct phy *phy)
^
static
>> drivers/phy/samsung/phy-samsung-ufs.c:77:5: warning: no previous prototype for function 'samsung_ufs_phy_calibrate' [-Wmissing-prototypes]
int samsung_ufs_phy_calibrate(struct phy *phy)
^
drivers/phy/samsung/phy-samsung-ufs.c:77:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int samsung_ufs_phy_calibrate(struct phy *phy)
^
static
2 warnings generated.

vim +/samsung_ufs_phy_wait_for_lock_acq +47 drivers/phy/samsung/phy-samsung-ufs.c

    46	
  > 47	int samsung_ufs_phy_wait_for_lock_acq(struct phy *phy)
    48	{
    49		struct samsung_ufs_phy *ufs_phy = get_samsung_ufs_phy(phy);
    50		const unsigned int timeout_us = 100000;
    51		const unsigned int sleep_us = 10;
    52		u32 val;
    53		int err;
    54	
    55		err = readl_poll_timeout(
    56				ufs_phy->reg_pma + PHY_APB_ADDR(PHY_PLL_LOCK_STATUS),
    57				val, (val & PHY_PLL_LOCK_BIT), sleep_us, timeout_us);
    58		if (err) {
    59			dev_err(ufs_phy->dev,
    60				"failed to get phy pll lock acquisition %d\n", err);
    61			goto out;
    62		}
    63	
    64		err = readl_poll_timeout(
    65				ufs_phy->reg_pma + PHY_APB_ADDR(PHY_CDR_LOCK_STATUS),
    66				val, (val & PHY_CDR_LOCK_BIT), sleep_us, timeout_us);
    67		if (err) {
    68			dev_err(ufs_phy->dev,
    69				"failed to get phy cdr lock acquisition %d\n", err);
    70			goto out;
    71		}
    72	
    73	out:
    74		return err;
    75	}
    76	
  > 77	int samsung_ufs_phy_calibrate(struct phy *phy)
    78	{
    79		struct samsung_ufs_phy *ufs_phy = get_samsung_ufs_phy(phy);
    80		struct samsung_ufs_phy_cfg **cfgs = ufs_phy->cfg;
    81		const struct samsung_ufs_phy_cfg *cfg;
    82		int i;
    83		int err = 0;
    84	
    85		if (unlikely(ufs_phy->ufs_phy_state < CFG_PRE_INIT ||
    86			     ufs_phy->ufs_phy_state >= CFG_TAG_MAX)) {
    87			dev_err(ufs_phy->dev, "invalid phy config index %d\n",
    88								ufs_phy->ufs_phy_state);
    89			return -EINVAL;
    90		}
    91	
    92		if (ufs_phy->is_pre_init)
    93			ufs_phy->is_pre_init = false;
    94		if (ufs_phy->is_post_init) {
    95			ufs_phy->is_post_init = false;
    96			ufs_phy->ufs_phy_state = CFG_POST_INIT;
    97		}
    98		if (ufs_phy->is_pre_pmc) {
    99			ufs_phy->is_pre_pmc = false;
   100			ufs_phy->ufs_phy_state = CFG_PRE_PWR_HS;
   101		}
   102		if (ufs_phy->is_post_pmc) {
   103			ufs_phy->is_post_pmc = false;
   104			ufs_phy->ufs_phy_state = CFG_POST_PWR_HS;
   105		}
   106	
   107		switch (ufs_phy->ufs_phy_state) {
   108		case CFG_PRE_INIT:
   109			ufs_phy->is_post_init = true;
   110			break;
   111		case CFG_POST_INIT:
   112			ufs_phy->is_pre_pmc = true;
   113			break;
   114		case CFG_PRE_PWR_HS:
   115			ufs_phy->is_post_pmc = true;
   116			break;
   117		case CFG_POST_PWR_HS:
   118			break;
   119		default:
   120			dev_err(ufs_phy->dev, "wrong state for phy calibration\n");
   121		}
   122	
   123		cfg = cfgs[ufs_phy->ufs_phy_state];
   124		if (!cfg)
   125			goto out;
   126	
   127		for_each_phy_cfg(cfg) {
   128			for_each_phy_lane(ufs_phy, i) {
   129				samsung_ufs_phy_config(ufs_phy, cfg, i);
   130			}
   131		}
   132	
   133		if (ufs_phy->ufs_phy_state == CFG_POST_PWR_HS)
   134			err = samsung_ufs_phy_wait_for_lock_acq(phy);
   135	out:
   136		return err;
   137	}
   138	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux