ARM: rpi: fix RPi1 board rev detection for warranty bit
authorStephen Warren <swarren@wwwdotorg.org>
Tue, 24 Mar 2015 05:00:25 +0000 (23:00 -0600)
committerTom Rini <trini@konsulko.com>
Tue, 24 Mar 2015 14:52:18 +0000 (10:52 -0400)
Apparently the firmware's board rev response includes both the board
revision and some other data even on the RPi1. In particular, the
"warranty bit" is bit 24. We need to mask that out when looking up the
board ID.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
board/raspberrypi/rpi/rpi.c

index 50a699bb9e0c3dbd6d5f0505a0b1e55c77222245..a105953541bec89ee9759edfc7966af4327a34de 100644 (file)
@@ -278,10 +278,17 @@ static void get_board_rev(void)
         * https://github.com/pimoroni/RPi.version/blob/master/RPi/version.py
         * http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=99293&p=690282
         * (a few posts down)
+        *
+        * For the RPi 1, bit 24 is the "warranty bit", so we mask off just the
+        * lower byte to use as the board rev:
+        * http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=98367&start=250
+        * http://www.raspberrypi.org/forums/viewtopic.php?f=31&t=20594
         */
        rpi_board_rev = msg->get_board_rev.body.resp.rev;
        if (rpi_board_rev & 0x800000)
                rpi_board_rev = (rpi_board_rev >> 4) & 0xff;
+       else
+               rpi_board_rev &= 0xff;
        if (rpi_board_rev >= ARRAY_SIZE(models)) {
                printf("RPI: Board rev %u outside known range\n",
                       rpi_board_rev);