From 9dfb5f8e6250927eed942f3900fb93f7f8533e6b Mon Sep 17 00:00:00 2001 From: Elson Roy Serrao Date: Fri, 22 May 2020 04:56:58 -0700 Subject: [PATCH] usb: dwc3: debugfs: Add support for 64bit division on 32bit chipsets This change adds support for 64bit division on 32bit LE targets using do_div() api. Change-Id: I30247f514e13bcba80f707acccd65878de38dff5 Signed-off-by: Elson Roy Serrao --- drivers/usb/dwc3/debugfs.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c index 2bff76f8cd2b..2348a31d857b 100644 --- a/drivers/usb/dwc3/debugfs.c +++ b/drivers/usb/dwc3/debugfs.c @@ -57,7 +57,7 @@ #define ep_event_rate(ev, c, p, dt) \ - ((dt) ? ((c.ev - p.ev) * (MSEC_PER_SEC)) / (dt) : 0) + ((dt) ? (calc_evt_rate(c.ev, p.ev, dt)) : 0) static const struct debugfs_reg32 dwc3_regs[] = { dump_register(GSBUSCFG0), @@ -1044,6 +1044,15 @@ static ssize_t dwc3_gadget_int_events_store(struct file *file, return count; } +static inline u64 calc_evt_rate(unsigned int c, unsigned int p, s64 dt) +{ + u64 ev_val; + + ev_val = (u64)((c-p)*(MSEC_PER_SEC)); + do_div(ev_val, (u64)dt); + return ev_val; +} + static int dwc3_gadget_int_events_show(struct seq_file *s, void *unused) { unsigned long flags;