Author: hailfinger
Date: Thu Sep 30 01:37:24 2010
New Revision: 1183
URL: http://flashrom.org/trac/flashrom/changeset/1183

Log:
Support for Loongson-2F (MIPS) flashing.

Signed-off-by: Vladimir 'phcoder' Serbinenko <[email protected]>
Acked-by: Carl-Daniel Hailfinger <[email protected]>

Modified:
   trunk/internal.c
   trunk/processor_enable.c

Modified: trunk/internal.c
==============================================================================
--- trunk/internal.c    Sun Sep 26 23:43:53 2010        (r1182)
+++ trunk/internal.c    Thu Sep 30 01:37:24 2010        (r1183)
@@ -244,7 +244,7 @@
         * The error code might have been a warning only.
         * Besides that, we don't check the board enable return code either.
         */
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__i386__) || defined(__x86_64__) || defined (__mips)
        return 0;
 #else
        msg_perr("Your platform is not supported yet for the internal "

Modified: trunk/processor_enable.c
==============================================================================
--- trunk/processor_enable.c    Sun Sep 26 23:43:53 2010        (r1182)
+++ trunk/processor_enable.c    Thu Sep 30 01:37:24 2010        (r1183)
@@ -37,8 +37,59 @@
 
 #else
 
+#if defined (__MIPSEL__) && defined (__linux)
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+static int is_loongson(void)
+{
+       FILE *cpuinfo;
+       cpuinfo = fopen("/proc/cpuinfo", "rb");
+       if (!cpuinfo)
+               return 0;
+       while (!feof(cpuinfo)) {
+               char line[512], *ptr;
+               if (fgets(line, sizeof(line), cpuinfo) == NULL)
+                       break;
+               ptr = line;
+               while (*ptr && isspace(*ptr))
+                       ptr++;
+               /* "cpu" part appears only with some Linux versions.  */
+               if (strncmp(ptr, "cpu", sizeof("cpu") - 1) == 0)
+                       ptr += sizeof("cpu") - 1;
+               while (*ptr && isspace(*ptr))
+                       ptr++;
+               if (strncmp(ptr, "model", sizeof("model") - 1) != 0)
+                       continue;
+               ptr += sizeof("model") - 1;
+               while (*ptr && isspace(*ptr))
+                       ptr++;
+               if (*ptr != ':')
+                       continue;
+               ptr++;
+               while (*ptr && isspace(*ptr))
+                       ptr++;
+               fclose(cpuinfo);
+               return (strncmp(ptr, "ICT Loongson-2 V0.3",
+                               sizeof("ICT Loongson-2 V0.3") - 1) == 0)
+                   || (strncmp(ptr, "Godson2 V0.3  FPU V0.1",
+                               sizeof("Godson2 V0.3  FPU V0.1") - 1) == 0);
+       }
+       fclose(cpuinfo);
+       return 0;
+}
+#endif
+
 int processor_flash_enable(void)
 {
+       /* FIXME: detect loongson on FreeBSD and OpenBSD as well.  */
+#if defined (__MIPSEL__) && defined (__linux)
+       if (is_loongson()) {
+               flashbase = 0x1fc00000;
+               return 0;
+       }
+#endif
        /* Not implemented yet. Oh well. */
        return 1;
 }

_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to