In the dwc3 driver, calls of dwc3_flush_cache() pass addr and length as
longs. Unfortunately, this function converts long on 64 bit machines
to 32 bit int.
This causes "Synchronous Abort" exceptions on 64 bit machines.
To alleviate this problem we accept long arguments to dwc3_flush_cache()
and then explicitly covert them to unsigned types required by
flush_dcache_range().
Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
static inline void dwc3_flush_cache(uintptr_t addr, int length)
{
- flush_dcache_range(addr, addr + ROUND(length, CACHELINE_SIZE));
+ flush_dcache_range((unsigned long) addr,
+ (unsigned long) addr
+ + ROUND(length, CACHELINE_SIZE));
}
#endif /* __DRIVERS_USB_DWC3_IO_H */