[coreboot-gerrit] New patch to review for coreboot: db89495 Avoid 64bit math on MIPS platforms

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Mon Mar 30 13:08:07 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9162

-gerrit

commit db89495bb6f939e9cdf49e6b2b8492b1ea5dca9a
Author: Vadim Bendebury <vbendeb at chromium.org>
Date:   Sat Nov 29 22:05:09 2014 -0800

    Avoid 64bit math on MIPS platforms
    
    Low level 64 bit division and modulo functions are not available for
    MIPS platforms, but are required by the printk formatter.
    
    Modify the code to avoid 64 bit math when building for MIPS. In case
    the user does print a value exceeding 2^32, send a few junk characters
    to the output to indicate a corrupted value printed.
    
    [pg: add the printed sequence to the comment, so git grep can find it]
    
    BRANCH=none
    BUG=none
    TEST=startup code on Urara properly prints CBFS address values which
         are passed as 64 bit integers.
    
    Change-Id: Ie777019cd8d55c53d5e816fbacfe79893c3d64c7
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 8347f914a9cceca017668f8387ba679c2c79e66d
    Original-Change-Id: I25b8a900b3ba4ec1da3446dcc5f03101d5cdb757
    Original-Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/232294
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/console/vtxprintf.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/console/vtxprintf.c b/src/console/vtxprintf.c
index b515fb8..2fcefd2 100644
--- a/src/console/vtxprintf.c
+++ b/src/console/vtxprintf.c
@@ -10,6 +10,10 @@
 
 #define call_tx(x) tx_byte(x, data)
 
+#if !CONFIG_ARCH_MIPS
+#define SUPPORT_64BIT_INTS
+#endif
+
 /* haha, don't need ctype.c */
 #define isdigit(c)	((c) >= '0' && (c) <= '9')
 #define is_digit isdigit
@@ -33,13 +37,25 @@ static int skip_atoi(const char **s)
 #define LARGE	64		/* use 'ABCDEF' instead of 'abcdef' */
 
 static int number(void (*tx_byte)(unsigned char byte, void *data),
-	unsigned long long num, int base, int size, int precision, int type,
+	unsigned long long inum, int base, int size, int precision, int type,
 	void *data)
 {
 	char c,sign,tmp[66];
 	const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
 	int i;
 	int count = 0;
+#ifdef SUPPORT_64BIT_INTS
+	unsigned long long num = inum;
+#else
+	unsigned long num = (long)inum;
+
+	if (num != inum) {
+		/* Alert user to an incorrect result by printing #^!. */
+		call_tx('#');
+		call_tx('^');
+		call_tx('!');
+	}
+#endif
 
 	if (type & LARGE)
 		digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";



More information about the coreboot-gerrit mailing list