From: Ariel Elior <ariel.el...@cavium.com> Date: Mon, 22 Oct 2018 19:40:40 +0300
> > +#ifndef writeq > +#define writeq writeq > +static inline void writeq(u64 val, void __iomem *reg) > +{ > + writel(val & 0xffffffff, reg); > + writel(val >> 32, reg + 0x4UL); > +} > +#endif Please use the appropriate generic header file to achieve this, do not reimplement it. See include/linux/io-64-nonatomic*.h and think very carefully about which one is appropriate. Specifically, if a register read has side effects but only if you read the lower or upper half you want to make sure that you use the implementation that reads the half the doesn't trigger the side effects first. This way the whole 64-bit value can be sampled before status bits clear, or whatever. Likewise for which half of a register, when written, commits the results. If both halfs trigger the side effect or the commit of the write, you cannot enable your driver on 32-bit architectures. So this is not such a simple fix where you just hack the build to pass, you have to really think hard about what the code does, how the hardware works, and if this can even work properly on 32-bit platforms. Thank you.