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: m68k-allmodconfig (attached as .config) compiler: m68k-linux-gcc (GCC) 9.3.0 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 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>, old ones prefixed by <<): In file included from arch/m68k/include/asm/io_mm.h:25, from arch/m68k/include/asm/io.h:8, from include/linux/io.h:13, from drivers/phy/samsung/phy-samsung-ufs.c:14: arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsb': arch/m68k/include/asm/raw_io.h:83:7: warning: variable '__w' set but not used [-Wunused-but-set-variable] 83 | ({u8 __w, __v = (b); u32 _addr = ((u32) (addr)); | ^~~ arch/m68k/include/asm/raw_io.h:430:3: note: in expansion of macro 'rom_out_8' 430 | rom_out_8(port, *buf++); | ^~~~~~~~~ arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw': arch/m68k/include/asm/raw_io.h:86:8: warning: variable '__w' set but not used [-Wunused-but-set-variable] 86 | ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); | ^~~ arch/m68k/include/asm/raw_io.h:448:3: note: in expansion of macro 'rom_out_be16' 448 | rom_out_be16(port, *buf++); | ^~~~~~~~~~~~ arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw_swapw': arch/m68k/include/asm/raw_io.h:90:8: warning: variable '__w' set but not used [-Wunused-but-set-variable] 90 | ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); | ^~~ arch/m68k/include/asm/raw_io.h:466:3: note: in expansion of macro 'rom_out_le16' 466 | rom_out_le16(port, *buf++); | ^~~~~~~~~~~~ drivers/phy/samsung/phy-samsung-ufs.c: At top level: >> drivers/phy/samsung/phy-samsung-ufs.c:47:5: warning: no previous prototype for 'samsung_ufs_phy_wait_for_lock_acq' [-Wmissing-prototypes] 47 | int samsung_ufs_phy_wait_for_lock_acq(struct phy *phy) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/phy/samsung/phy-samsung-ufs.c:77:5: warning: no previous prototype for 'samsung_ufs_phy_calibrate' [-Wmissing-prototypes] 77 | int samsung_ufs_phy_calibrate(struct phy *phy) | ^~~~~~~~~~~~~~~~~~~~~~~~~ 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@lists.01.org