CC: kbuild-all(a)lists.01.org In-Reply-To: <1614138270-2374-3-git-send-email-bbhatt@codeaurora.org> References: <1614138270-2374-3-git-send-email-bbhatt@codeaurora.org> TO: Bhaumik Bhatt TO: manivannan.sadhasivam(a)linaro.org CC: linux-arm-msm(a)vger.kernel.org CC: hemantk(a)codeaurora.org CC: jhugo(a)codeaurora.org CC: linux-kernel(a)vger.kernel.org CC: loic.poulain(a)linaro.org CC: carl.yin(a)quectel.com CC: naveen.kumar(a)quectel.com CC: Bhaumik Bhatt Hi Bhaumik, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linus/master] [also build test WARNING on v5.11 next-20210224] [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/0day-ci/linux/commits/Bhaumik-Bhatt/Polling-for-MHI-ready/20210224-114954 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git c03c21ba6f4e95e406a1a7b4c34ef334b977c194 :::::: branch date: 9 hours ago :::::: commit date: 9 hours ago config: riscv-randconfig-m031-20210224 (attached as .config) compiler: riscv64-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter New smatch warnings: drivers/bus/mhi/core/pm.c:239 mhi_ready_state_transition() warn: inconsistent returns '&mhi_cntrl->pm_lock'. Old smatch warnings: drivers/bus/mhi/core/pm.c:308 mhi_pm_m0_transition() warn: inconsistent returns '&mhi_cntrl->pm_lock'. drivers/bus/mhi/core/pm.c:442 mhi_pm_mission_mode_transition() warn: inconsistent returns '&mhi_cntrl->pm_lock'. drivers/bus/mhi/core/pm.c:859 mhi_pm_suspend() warn: inconsistent returns '&mhi_cntrl->pm_lock'. arch/riscv/include/asm/atomic.h:204 atomic_fetch_add_unless() warn: inconsistent indenting vim +239 drivers/bus/mhi/core/pm.c 3000f85b8f47b2 Manivannan Sadhasivam 2020-02-20 152 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 153 /* Handle device ready state transition */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 154 int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl) a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 155 { a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 156 struct mhi_event *mhi_event; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 157 enum mhi_pm_state cur_state; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 158 struct device *dev = &mhi_cntrl->mhi_dev->dev; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 159 int ret, i; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 160 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 161 /* Check if device entered error state */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 162 if (MHI_PM_IN_FATAL_STATE(mhi_cntrl->pm_state)) { a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 163 dev_err(dev, "Device link is not accessible\n"); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 164 return -EIO; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 165 } a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 166 112aa8cd374eda Bhaumik Bhatt 2021-02-23 167 /* Wait for RESET to be cleared and READY bit to be set by the device */ 112aa8cd374eda Bhaumik Bhatt 2021-02-23 168 ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL, 112aa8cd374eda Bhaumik Bhatt 2021-02-23 169 MHICTRL_RESET_MASK, MHICTRL_RESET_SHIFT, 0, 112aa8cd374eda Bhaumik Bhatt 2021-02-23 170 25000); 112aa8cd374eda Bhaumik Bhatt 2021-02-23 171 if (ret) { 112aa8cd374eda Bhaumik Bhatt 2021-02-23 172 dev_err(dev, "Device failed to clear MHI Reset\n"); 112aa8cd374eda Bhaumik Bhatt 2021-02-23 173 return -ETIMEDOUT; 112aa8cd374eda Bhaumik Bhatt 2021-02-23 174 } 112aa8cd374eda Bhaumik Bhatt 2021-02-23 175 112aa8cd374eda Bhaumik Bhatt 2021-02-23 176 ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHISTATUS, 112aa8cd374eda Bhaumik Bhatt 2021-02-23 177 MHISTATUS_READY_MASK, MHISTATUS_READY_SHIFT, 1, 112aa8cd374eda Bhaumik Bhatt 2021-02-23 178 25000); 112aa8cd374eda Bhaumik Bhatt 2021-02-23 179 if (ret) { 112aa8cd374eda Bhaumik Bhatt 2021-02-23 180 dev_err(dev, "Device failed to enter MHI Ready\n"); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 181 return -ETIMEDOUT; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 182 } a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 183 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 184 dev_dbg(dev, "Device in READY State\n"); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 185 write_lock_irq(&mhi_cntrl->pm_lock); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 186 cur_state = mhi_tryset_pm_state(mhi_cntrl, MHI_PM_POR); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 187 mhi_cntrl->dev_state = MHI_STATE_READY; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 188 write_unlock_irq(&mhi_cntrl->pm_lock); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 189 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 190 if (cur_state != MHI_PM_POR) { a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 191 dev_err(dev, "Error moving to state %s from %s\n", a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 192 to_mhi_pm_state_str(MHI_PM_POR), a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 193 to_mhi_pm_state_str(cur_state)); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 194 return -EIO; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 195 } a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 196 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 197 read_lock_bh(&mhi_cntrl->pm_lock); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 198 if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 199 dev_err(dev, "Device registers not accessible\n"); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 200 goto error_mmio; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 201 } a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 202 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 203 /* Configure MMIO registers */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 204 ret = mhi_init_mmio(mhi_cntrl); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 205 if (ret) { a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 206 dev_err(dev, "Error configuring MMIO registers\n"); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 207 goto error_mmio; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 208 } a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 209 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 210 /* Add elements to all SW event rings */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 211 mhi_event = mhi_cntrl->mhi_event; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 212 for (i = 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) { a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 213 struct mhi_ring *ring = &mhi_event->ring; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 214 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 215 /* Skip if this is an offload or HW event */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 216 if (mhi_event->offload_ev || mhi_event->hw_ring) a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 217 continue; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 218 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 219 ring->wp = ring->base + ring->len - ring->el_size; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 220 *ring->ctxt_wp = ring->iommu_base + ring->len - ring->el_size; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 221 /* Update all cores */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 222 smp_wmb(); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 223 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 224 /* Ring the event ring db */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 225 spin_lock_irq(&mhi_event->lock); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 226 mhi_ring_er_db(mhi_event); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 227 spin_unlock_irq(&mhi_event->lock); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 228 } a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 229 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 230 /* Set MHI to M0 state */ a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 231 mhi_set_mhi_state(mhi_cntrl, MHI_STATE_M0); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 232 read_unlock_bh(&mhi_cntrl->pm_lock); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 233 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 234 return 0; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 235 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 236 error_mmio: a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 237 read_unlock_bh(&mhi_cntrl->pm_lock); a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 238 a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 @239 return -EIO; a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 240 } a6e2e3522f2914 Manivannan Sadhasivam 2020-02-20 241 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org