]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/arm/cache.c: Add v5 write-through cache support.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 3 Oct 2013 21:29:57 +0000 (23:29 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 3 Oct 2013 21:29:57 +0000 (23:29 +0200)
ChangeLog
grub-core/kern/arm/cache.c

index 7314426a611a798385cea44b9c728219e148d7c4..0a3da2a46a40639563dc4524b27978930f81e6cf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-10-03  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/arm/cache.c: Add v5 write-through cache support.
+
 2013-10-03  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * po/exclude.pot: Add several strings to exclude.
index 88054f3fce4a37e71d50d3a5115f9b067be78084..e9271049b55575c1d0512d6ff99ac5621ec136f9 100644 (file)
@@ -7,6 +7,7 @@
 static enum
   {
     ARCH_UNKNOWN,
+    ARCH_ARMV5_WRITE_THROUGH,
     ARCH_ARMV6,
     ARCH_ARMV6_UNIFIED,
     ARCH_ARMV7
@@ -29,14 +30,30 @@ probe_caches (void)
   /* Read main ID Register */
   asm volatile ("mrc   p15, 0, %0, c0, c0, 0": "=r"(main_id));
 
-  if (((main_id >> 16) & 0x7) != 0x7)
-    grub_fatal ("Unsupported ARM ID 0x%x", main_id);
+  switch ((main_id >> 16) & 0xf)
+    {
+    case 0x3:
+    case 0x4:
+    case 0x5:
+    case 0x6:
+    case 0x7:
+    case 0xf:
+      break;
+    default:
+      grub_fatal ("Unsupported ARM ID 0x%x", main_id);
+    }
 
   /* Read Cache Type Register */
   asm volatile ("mrc   p15, 0, %0, c0, c0, 1": "=r"(cache_type));
 
   switch (cache_type >> 24)
     {
+    case 0x00:
+    case 0x01:
+      grub_arch_cache_dlinesz = 8 << ((cache_type >> 12) & 3);
+      grub_arch_cache_ilinesz = 8 << (cache_type & 3);
+      type = ARCH_ARMV5_WRITE_THROUGH;
+      break;
     case 0x04:
     case 0x0a:
     case 0x0c:
@@ -79,6 +96,7 @@ grub_arch_sync_caches (void *address, grub_size_t len)
       grub_arch_sync_caches_armv7 (address, len);
       break;
       /* Nothing to do.  */
+    case ARCH_ARMV5_WRITE_THROUGH:
     case ARCH_ARMV6_UNIFIED:
       break;
       /* Pacify GCC.  */
@@ -100,6 +118,9 @@ grub_arm_disable_caches_mmu (void)
       break;
     case ARCH_ARMV7:
       grub_arm_disable_caches_mmu_armv7 ();
+      break;
+      /* Nothing to do.  */
+    case ARCH_ARMV5_WRITE_THROUGH:
       break;
       /* Pacify GCC.  */
     case ARCH_UNKNOWN: