]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Move GPIO init to fwstart.S for convenience
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 23 Jan 2011 23:38:30 +0000 (00:38 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 23 Jan 2011 23:38:30 +0000 (00:38 +0100)
grub-core/boot/mips/yeeloong/fwstart.S
grub-core/bus/cs5536.c

index 184aff5d26c75b95bc1cbf3af6d02d415395ad45..41559ffa4c10c1f159ff19e49240a2f22da804be 100644 (file)
@@ -65,7 +65,6 @@ retry_cs5536:
        bal printhex
         move $a0, $t4
 
-       /* Initialise SMBus controller.  */
        lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE)
        li  $t1, GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED
        sw  $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0)
@@ -79,6 +78,10 @@ retry_cs5536:
         ori $a2, $zero, ((GRUB_CS5536_LBAR_MASK_MASK \
                          | GRUB_CS5536_LBAR_ENABLE) >> 32)
 
+       bal gpio_init
+        nop
+
+       /* Initialise SMBus controller.  */
        /* Set SMBUS LBAR.  */
        lui $a0, %hi(GRUB_CS5536_MSR_SMB_BAR)
        addiu $a0, $a0, %lo(GRUB_CS5536_MSR_SMB_BAR)
@@ -92,14 +95,6 @@ retry_cs5536:
        bal message
          addiu $a0, $a0, %lo(smbus_enabled)
 
-       /* Enable SMBus controller pins.  */
-       lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO)
-       ori $t1, $zero, GRUB_GPIO_SMBUS_PINS
-       sw  $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO + GRUB_GPIO_REG_OUT_EN) ($t0)
-       sw  $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO + GRUB_GPIO_REG_OUT_AUX1) ($t0)
-       sw  $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO + GRUB_GPIO_REG_IN_EN) ($t0)
-       sw  $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO + GRUB_GPIO_REG_IN_AUX1) ($t0)
-
        lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS)
 
        /* Disable SMB.  */
@@ -215,6 +210,24 @@ other_exception:
        b fatal
         addiu $a0, $a0, %lo(unhandled_exception)
 
+gpio_init:
+       lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO)
+       addiu  $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO)
+       lui $t1, %hi (gpio_dump)
+       addiu $t1, $t1, %lo (gpio_dump)
+
+1:     
+       lw $t2, 0($t1)
+       sw $t2, 0($t0)
+       addiu $t0, $t0, 4
+       addiu $t1, $t1, 4
+       lui $t2, %hi (gpio_dump_end)
+       addiu $t2, $t2, %lo (gpio_dump_end)
+       bne $t1, $t2, 1b
+        nop
+       jr $ra
+        nop
+
        /* Same as similarly named C function but in asm since
           we need it early.  */
        /* In: none. Out: none. Clobbered: $t0, $t1, $a0.  */
@@ -434,6 +447,45 @@ regdump:
        .quad 0 /* 1b */
        .quad 0 /* 1c */
 
+/* Dump of GPIO connections. FIXME: Remove useless and macroify.  */
+gpio_dump:
+#ifdef FULOONG
+       .long 0xffff0000, 0x2eefd110, 0xffff0000, 0xffff0000
+       .long 0x2eefd110, 0xffff0000, 0x1000efff, 0xefff1000
+       .long 0x3df3c20c, 0xffff0000, 0xffff0000, 0xffff0000
+       .long 0x7df3820c, 0x3df3c20c, 0xffff0000, 0x00000000
+       .long 0xffff0000, 0xffff0000, 0x3de3c21c, 0x3d83c27c
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0xffff0000, 0xffff0000, 0xffff0000, 0xffff0000
+       .long 0xffff0000, 0xffff0000, 0x0000ffff, 0xffff0000
+       .long 0xefff1000, 0xffff0000, 0xffff0000, 0xffff0000
+       .long 0xefff1000, 0xefff1000, 0xffff0000, 0x00000000
+       .long 0xffff0000, 0xffff0000, 0xefff1000, 0xefff1000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+#else
+       .long 0xffff0000, 0x2ffdd002, 0xffff0000, 0xffff0000
+       .long 0x2fffd000, 0xffff0000, 0x1000efff, 0xefff1000
+       .long 0x3ffbc004, 0xffff0000, 0xffff0000, 0xffff0000
+       .long 0x3ffbc004, 0x3ffbc004, 0xffff0000, 0x00000000
+       .long 0xffff0000, 0xffff0000, 0x3ffbc004, 0x3f9bc064
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0xffff0000, 0xffff0000, 0xffff0000, 0xffff0000
+       .long 0xffff0000, 0xffff0000, 0x0000ffff, 0xffff0000
+       .long 0xefff1000, 0xffff0000, 0xffff0000, 0xffff0000
+       .long 0xefff1000, 0xefff1000, 0xffff0000, 0x00000000
+       .long 0xffff0000, 0xffff0000, 0xefff1000, 0xffff0000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x00000000, 0x00000000, 0x00000000
+       .long 0x00000000, 0x50000000, 0x00000000, 0x00000000
+#endif
+gpio_dump_end: 
+
        .p2align
 
 write_dumpreg: 
index 088f4dfc1d52cf6da4e46a0c7ffd2a9661e29848..690b8f29a788f3d0074f41cdb88b9816351ff62c 100644 (file)
@@ -213,26 +213,6 @@ grub_cs5536_read_spd (grub_port_t smbbase, grub_uint8_t dev,
   return GRUB_ERR_NONE;
 }
 
-/* Dump of GPIO connections. FIXME: Remove useless and macroify.  */
-static grub_uint32_t gpiodump[] = {
-  0xffff0000, 0x2ffdd002, 0xffff0000, 0xffff0000,
-  0x2fffd000, 0xffff0000, 0x1000efff, 0xefff1000,
-  0x3ffbc004, 0xffff0000, 0xffff0000, 0xffff0000,
-  0x3ffbc004, 0x3ffbc004, 0xffff0000, 0x00000000,
-  0xffff0000, 0xffff0000, 0x3ffbc004, 0x3f9bc064,
-  0x00000000, 0x00000000, 0x00000000, 0x00000000,
-  0x00000000, 0x00000000, 0x00000000, 0x00000000,
-  0x00000000, 0x00000000, 0x00000000, 0x00000000,
-  0xffff0000, 0xffff0000, 0xffff0000, 0xffff0000,
-  0xffff0000, 0xffff0000, 0x0000ffff, 0xffff0000,
-  0xefff1000, 0xffff0000, 0xffff0000, 0xffff0000,
-  0xefff1000, 0xefff1000, 0xffff0000, 0x00000000,
-  0xffff0000, 0xffff0000, 0xefff1000, 0xffff0000,
-  0x00000000, 0x00000000, 0x00000000, 0x00000000,
-  0x00000000, 0x00000000, 0x00000000, 0x00000000,
-  0x00000000, 0x50000000, 0x00000000, 0x00000000,
-};
-
 static inline void
 set_io_space (grub_pci_device_t dev, int num, grub_uint16_t start,
              grub_uint16_t len)
@@ -273,17 +253,6 @@ set_p2d (grub_pci_device_t dev, int num, int dest, grub_uint32_t start)
 void
 grub_cs5536_init_geode (grub_pci_device_t dev)
 {
-  int i;
-
-  /* Make sure GPIO is where we expect it to be.  */
-  grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_GPIO_BAR,
-                        GRUB_CS5536_LBAR_TURN_ON | GRUB_CS5536_LBAR_GPIO);
-
-  /* Setup GPIO.  */
-  for (i = 0; i < (int) ARRAY_SIZE (gpiodump); i++)
-    ((volatile grub_uint32_t *) (GRUB_MACHINE_PCI_IO_BASE 
-                                + GRUB_CS5536_LBAR_GPIO)) [i] = gpiodump[i];
-
   /* Enable more BARs.  */
   grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_IRQ_MAP_BAR,
                         GRUB_CS5536_LBAR_TURN_ON | GRUB_CS5536_LBAR_IRQ_MAP);