On Thu, Feb 10, 2022 at 08:42:02PM +0900, Damien Le Moal wrote: > struct sas_phy *phy = sas_phy->phy; > - uint32_t *qp = (uint32_t *)(((char *) > - pm8001_ha->io_mem[2].memvirtaddr) > - + 0x1034 + (0x4000 * (phy_id & 3))); > + unsigned long vaddr = (unsigned long) > + pm8001_ha->io_mem[2].memvirtaddr; > + uint32_t *qp = (uint32_t *) > + (vaddr + 0x1034 + (0x4000 * (phy_id & 3))); This just removes the warning, but does not actually fix the issue. Both long_vaddr and qp need to be __iomem pointers... > > phy->invalid_dword_count = qp[0]; > phy->running_disparity_error_count = qp[1]; ... and reads from qp need to use readl.