]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Fix accidental disable of Geode UARTs
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 24 Jan 2011 00:46:00 +0000 (01:46 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 24 Jan 2011 00:46:00 +0000 (01:46 +0100)
grub-core/boot/mips/yeeloong/fwstart.S
grub-core/bus/cs5536.c
include/grub/cs5536.h

index 995aa507199459cb839bbeac02692efcf2b7a8fc..d25ff1a5b8d61be0d6bce18a5c9f615fd0870426 100644 (file)
@@ -254,7 +254,12 @@ serial_hw_init:
 #ifdef FULOONG
        lui $a0, %hi(GRUB_CS5536_MSR_DIVIL_LEG_IO)
        addiu $a0, $a0, %lo(GRUB_CS5536_MSR_DIVIL_LEG_IO)
-       li $a1, 0x04570003
+       li $a1, (GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3    \
+                | GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP     \
+                | GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86    \
+                | GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1  \
+                | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0 \
+                | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1)
        bal wrmsr
         move $a2, $zero
 
index 690b8f29a788f3d0074f41cdb88b9816351ff62c..f5b2089e3ace584795690c984463e0fb87d1cc82 100644 (file)
@@ -21,6 +21,7 @@
 #include <grub/pci.h>
 #include <grub/time.h>
 #include <grub/ata.h>
+#include <grub/machine/kernel.h>
 
 int
 grub_cs5536_find (grub_pci_device_t *devp)
@@ -264,11 +265,25 @@ grub_cs5536_init_geode (grub_pci_device_t dev)
                         GRUB_CS5536_LBAR_TURN_ON | GRUB_CS5536_LBAR_PM);
 
   /* Setup DIVIL.  */
-  grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LEG_IO,
-                        GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86
-                        | GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP
-                        | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0
-                        | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1);
+  switch (grub_arch_machine)
+    {
+    case GRUB_ARCH_MACHINE_YEELOONG:
+      grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LEG_IO,
+                            GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1);
+      break;
+    case GRUB_ARCH_MACHINE_FULOONG:
+      grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LEG_IO,
+                            GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0
+                            | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1);
+      break;
+    }
   grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_PRIMARY_MASK,
                         (~GRUB_CS5536_DIVIL_LPC_INTERRUPTS) & 0xffff);
   grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_LPC_MASK,
index 90a39df44afc5b257cdc6994ec52881ffdcad467..103b306336b925b54f1bbc3fed92b023c8852d50 100644 (file)
@@ -75,6 +75,8 @@
 #define GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1 0x00000002
 #define GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86    0x10000000
 #define GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP     0x04000000
+#define GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1  0x00070000
+#define GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3  0x00500000
 #define GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_PRIMARY_MASK 0x80000024
 #define GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_LPC_MASK 0x80000025
 #define GRUB_CS5536_DIVIL_LPC_INTERRUPTS 0x1002