]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Fuloong shutdown support
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 18 Jan 2011 18:39:12 +0000 (19:39 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 18 Jan 2011 18:39:12 +0000 (19:39 +0100)
grub-core/kern/mips/yeeloong/init.c
include/grub/mips/loongson.h

index b444caf066b5b4117bf0273461f46b33bf33fdc3..7526111cc1e928ffeb1c495125dcabc3f2135f9e 100644 (file)
@@ -226,10 +226,28 @@ grub_machine_fini (void)
 void
 grub_halt (void)
 {
-  grub_outb (grub_inb (GRUB_CPU_LOONGSON_GPIOCFG)
-            & ~GRUB_CPU_LOONGSON_SHUTDOWN_GPIO, GRUB_CPU_LOONGSON_GPIOCFG);
-
-  grub_millisleep (1500);
+  switch (grub_arch_machine)
+    {
+    case GRUB_ARCH_MACHINE_FULOONG:
+      {
+       grub_pci_device_t dev;
+       grub_port_t p;
+       if (grub_cs5536_find (&dev))
+         {
+           p = (grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_GPIO_BAR)
+                & GRUB_CS5536_LBAR_ADDR_MASK) + GRUB_MACHINE_PCI_IO_BASE;
+           grub_outl ((1 << 13), p + 4);
+           grub_outl ((1 << 29), p);
+           grub_millisleep (5000);
+         }
+      }
+      break;
+    case GRUB_ARCH_MACHINE_YEELOONG:
+      grub_outb (grub_inb (GRUB_CPU_LOONGSON_GPIOCFG)
+                & ~GRUB_CPU_YEELOONG_SHUTDOWN_GPIO, GRUB_CPU_LOONGSON_GPIOCFG);
+      grub_millisleep (1500);
+      break;
+    }
 
   grub_printf ("Shutdown failed\n");
   grub_refresh ();
index 6cb1178d52e6a280e546ba3de8899972aeb905f2..e9f1583abe9fc88e2325c4a26bf91b863ab7da51 100644 (file)
@@ -85,6 +85,6 @@
 #define GRUB_CPU_LOONGSON_PCI_HIT1_SEL_HI   0xbfe00154
 
 #define GRUB_CPU_LOONGSON_GPIOCFG  0xbfe00120
-#define GRUB_CPU_LOONGSON_SHUTDOWN_GPIO 1
+#define GRUB_CPU_YEELOONG_SHUTDOWN_GPIO 1
 
 #endif