Alison Schofield wrote: > On Fri, Apr 14, 2023 at 11:54:00AM -0700, Dan Williams wrote: > > The CXL specification mandates that 4-byte registers must be accessed > > with 4-byte access cycles. CXL 3.0 8.2.3 "Component Register Layout and > > Definition" states that the behavior is undefined if (2) 32-bit > > registers are accessed as an 8-byte quantity. It turns out that at least > > one hardware implementation is sensitive to this in practice. The @size > > variable results in zero with: > > > > size = readq(hdm + CXL_HDM_DECODER0_SIZE_LOW_OFFSET(which)); > > > > ...and the correct size with: > > > > lo = readl(hdm + CXL_HDM_DECODER0_SIZE_LOW_OFFSET(which)); > > hi = readl(hdm + CXL_HDM_DECODER0_SIZE_HIGH_OFFSET(which)); > > size = (hi << 32) + lo; > > > > Fixes: d17d0540a0db ("cxl/core/hdm: Add CXL standard decoder enumeration to the core") > > Cc: <stable@xxxxxxxxxxxxxxx> > > Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> > > I see you got rid of ioread64_hi_lo(), so this can't be > happening anywhere else. Are all the other readl, writel > usages known to be OK, or do you need review help against > the spec? Good question. That's what I looked to answer in patch3. As far as I can see all the other readq() usage in the driver is for registers defined as 64-bit, so that patch ended up only being a deletion of unneeded includes.