On Thu, Feb 27, 2020 at 12:51:46PM +0100, Marek Szyprowski wrote: > Some older compilers have no implementation for the helper for 64-bit > unsigned division/modulo, so linking pcie-brcmstb driver causes the > "undefined reference to `__aeabi_uldivmod'" error. > > *rc_bar2_size is always a power of two, because it is calculated as: > "1ULL << fls64(entry->res->end - entry->res->start)", so the modulo > operation in the subsequent check can be replaced by a simple logical > AND with a proper mask. > > Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> Applied to for-linus for v5.6, thanks! I added acks from Nicolas and Lorenzo and also the Fixes: tag from Lorenzo. > --- > drivers/pci/controller/pcie-brcmstb.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/pci/controller/pcie-brcmstb.c b/drivers/pci/controller/pcie-brcmstb.c > index d20aabc26273..3a10e678c7f4 100644 > --- a/drivers/pci/controller/pcie-brcmstb.c > +++ b/drivers/pci/controller/pcie-brcmstb.c > @@ -670,7 +670,7 @@ static inline int brcm_pcie_get_rc_bar2_size_and_offset(struct brcm_pcie *pcie, > * outbound memory @ 3GB). So instead it will start at the 1x > * multiple of its size > */ > - if (!*rc_bar2_size || *rc_bar2_offset % *rc_bar2_size || > + if (!*rc_bar2_size || (*rc_bar2_offset & (*rc_bar2_size - 1)) || > (*rc_bar2_offset < SZ_4G && *rc_bar2_offset > SZ_2G)) { > dev_err(dev, "Invalid rc_bar2_offset/size: size 0x%llx, off 0x%llx\n", > *rc_bar2_size, *rc_bar2_offset); > -- > 2.17.1 >