Răsfoiți Sursa

strmhz(): Round numbers when printing clock frequencies

Round clock frequencies for printing.

Many boards printed off clock frequencies like 399 MHz instead of the
exact 400 MHz because numberes were not rounded. This is fixed now.

Signed-off-by: Wolfgang Denk <wd@denx.de>
Wolfgang Denk 16 ani în urmă
părinte
comite
d50c7d4be1
2 a modificat fișierele cu 7 adăugiri și 4 ștergeri
  1. 3 2
      include/common.h
  2. 4 2
      lib_generic/strmhz.c

+ 3 - 2
include/common.h

@@ -692,8 +692,9 @@ void __attribute__((weak)) show_boot_progress (int val);
 
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 
-#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
-#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
+#define DIV_ROUND(n,d)		(((n) + ((d)/2)) / (d))
+#define DIV_ROUND_UP(n,d)	(((n) + (d) - 1) / (d))
+#define roundup(x, y)		((((x) + ((y) - 1)) / (y)) * (y))
 
 #define ALIGN(x,a)		__ALIGN_MASK((x),(typeof(x))(a)-1)
 #define __ALIGN_MASK(x,mask)	(((x)+(mask))&~(mask))

+ 4 - 2
lib_generic/strmhz.c

@@ -27,9 +27,11 @@ char *strmhz (char *buf, long hz)
 	long l, n;
 	long m;
 
-	n = hz / 1000000L;
+	n = DIV_ROUND(hz, 1000000L);
 	l = sprintf (buf, "%ld", n);
-	m = (hz % 1000000L) / 1000L;
+
+	hz -= n * 1000000L;
+	m = DIV_ROUND(hz, 1000L);
 	if (m != 0)
 		sprintf (buf + l, ".%03ld", m);
 	return (buf);