[U-Boot-Users] [PATCH v3] 85xx: Round up frequency calculations to get reasonable output

Kumar Gala galak at kernel.crashing.org
Mon Apr 21 16:28:36 CEST 2008


eg. because of rounding error we can get 799Mhz instead of 800Mhz.

Introduced DIV_ROUND_UP and roundup taken from linux kernel.

Signed-off-by: Dejan Minic <minic at freescale.com>
Signed-off-by: Srikanth Srinivasan <srikanth.srinivasan at freescale.com>
Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
---

Lets see if this version works for people.  Introduced a generic
DIV_ROUND_UP taken from the kernel.

 cpu/mpc85xx/cpu.c |   13 ++++++-------
 include/common.h  |    3 +++
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/cpu/mpc85xx/cpu.c b/cpu/mpc85xx/cpu.c
index dcd8817..74b210c 100644
--- a/cpu/mpc85xx/cpu.c
+++ b/cpu/mpc85xx/cpu.c
@@ -116,22 +116,21 @@ int checkcpu (void)
 	get_sys_info(&sysinfo);

 	puts("Clock Configuration:\n");
-	printf("       CPU:%4lu MHz, ", sysinfo.freqProcessor / 1000000);
-	printf("CCB:%4lu MHz,\n", sysinfo.freqSystemBus / 1000000);
-
+	printf("       CPU:%4lu MHz, ", DIV_ROUND_UP(sysinfo.freqProcessor,1000000));
+	printf("CCB:%4lu MHz,\n", DIV_ROUND_UP(sysinfo.freqSystemBus,1000000));
 	ddr_ratio = ((gur->porpllsr) & 0x00003e00) >> 9;
 	switch (ddr_ratio) {
 	case 0x0:
 		printf("       DDR:%4lu MHz (%lu MT/s data rate), ",
-		sysinfo.freqDDRBus / 2000000, sysinfo.freqDDRBus / 1000000);
+		DIV_ROUND_UP(sysinfo.freqDDRBus,2000000), DIV_ROUND_UP(sysinfo.freqDDRBus,1000000));
 		break;
 	case 0x7:
 		printf("       DDR:%4lu MHz (%lu MT/s data rate) (Synchronous), ",
-		sysinfo.freqDDRBus / 2000000, sysinfo.freqDDRBus / 1000000);
+		DIV_ROUND_UP(sysinfo.freqDDRBus, 2000000), DIV_ROUND_UP(sysinfo.freqDDRBus, 1000000));
 		break;
 	default:
 		printf("       DDR:%4lu MHz (%lu MT/s data rate) (Asynchronous), ",
-		sysinfo.freqDDRBus / 2000000, sysinfo.freqDDRBus / 1000000);
+		DIV_ROUND_UP(sysinfo.freqDDRBus, 2000000), DIV_ROUND_UP(sysinfo.freqDDRBus,1000000));
 		break;
 	}

@@ -154,7 +153,7 @@ int checkcpu (void)
 		 clkdiv *= 2;
 #endif
 		printf("LBC:%4lu MHz\n",
-		       sysinfo.freqSystemBus / 1000000 / clkdiv);
+		       DIV_ROUND_UP(sysinfo.freqSystemBus, 1000000) / clkdiv);
 	} else {
 		printf("LBC: unknown (lcrr: 0x%08x)\n", lcrr);
 	}
diff --git a/include/common.h b/include/common.h
index 8630780..348a0cb 100644
--- a/include/common.h
+++ b/include/common.h
@@ -670,6 +670,9 @@ void inline 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))
+
 /* Multicore arch functions */
 #ifdef CONFIG_MP
 int cpu_status(int nr);
-- 
1.5.4.1





More information about the U-Boot mailing list