]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - board/ti/beagle/beagle.c
Merge branch 'rmobile' of git://git.denx.de/u-boot-sh
[karo-tx-uboot.git] / board / ti / beagle / beagle.c
index 62e9beaef35a6dd5ef8d8b1600ee10b8942a89fa..7b37fbe299e58bb9aa9f3552f49e42d06b75d8c9 100644 (file)
@@ -14,6 +14,8 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 #include <common.h>
+#include <dm.h>
+#include <ns16550.h>
 #ifdef CONFIG_STATUS_LED
 #include <status_led.h>
 #endif
@@ -70,6 +72,17 @@ static struct {
        char env_setting[64];
 } expansion_config;
 
+static const struct ns16550_platdata beagle_serial = {
+       OMAP34XX_UART3,
+       2,
+       V_NS16550_CLK
+};
+
+U_BOOT_DEVICE(beagle_uart) = {
+       "serial_omap",
+       &beagle_serial
+};
+
 /*
  * Routine: board_init
  * Description: Early hardware init.
@@ -103,22 +116,22 @@ int board_init(void)
  */
 static int get_board_revision(void)
 {
-       int revision;
-
-       if (!gpio_request(171, "") &&
-           !gpio_request(172, "") &&
-           !gpio_request(173, "")) {
-
-               gpio_direction_input(171);
-               gpio_direction_input(172);
-               gpio_direction_input(173);
-
-               revision = gpio_get_value(173) << 2 |
-                          gpio_get_value(172) << 1 |
-                          gpio_get_value(171);
-       } else {
-               printf("Error: unable to acquire board revision GPIOs\n");
-               revision = -1;
+       static int revision = -1;
+
+       if (revision == -1) {
+               if (!gpio_request(171, "rev0") &&
+                   !gpio_request(172, "rev1") &&
+                   !gpio_request(173, "rev2")) {
+                       gpio_direction_input(171);
+                       gpio_direction_input(172);
+                       gpio_direction_input(173);
+
+                       revision = gpio_get_value(173) << 2 |
+                               gpio_get_value(172) << 1 |
+                               gpio_get_value(171);
+               } else {
+                       printf("Error: unable to acquire board revision GPIOs\n");
+               }
        }
 
        return revision;
@@ -258,7 +271,7 @@ static void beagle_dvi_pup(void)
        case REVISION_AXBX:
        case REVISION_CX:
        case REVISION_C4:
-               gpio_request(170, "");
+               gpio_request(170, "dvi");
                gpio_direction_output(170, 0);
                gpio_set_value(170, 1);
                break;
@@ -316,9 +329,13 @@ int misc_init_r(void)
        struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE;
        struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
        struct control_prog_io *prog_io_base = (struct control_prog_io *)OMAP34XX_CTRL_BASE;
+       bool generate_fake_mac = false;
+       u32 value;
 
        /* Enable i2c2 pullup resisters */
-       writel(~(PRG_I2C2_PULLUPRESX), &prog_io_base->io1);
+       value = readl(&prog_io_base->io1);
+       value &= ~(PRG_I2C2_PULLUPRESX);
+       writel(value, &prog_io_base->io1);
 
        switch (get_board_revision()) {
        case REVISION_AXBX:
@@ -349,6 +366,7 @@ int misc_init_r(void)
                                        TWL4030_PM_RECEIVER_VAUX2_VSEL_18,
                                        TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
                                        TWL4030_PM_RECEIVER_DEV_GRP_P1);
+               generate_fake_mac = true;
                break;
        case REVISION_XM_C:
                printf("Beagle xM Rev C\n");
@@ -359,6 +377,7 @@ int misc_init_r(void)
                                        TWL4030_PM_RECEIVER_VAUX2_VSEL_18,
                                        TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
                                        TWL4030_PM_RECEIVER_DEV_GRP_P1);
+               generate_fake_mac = true;
                break;
        default:
                printf("Beagle unknown 0x%02x\n", get_board_revision());
@@ -368,6 +387,7 @@ int misc_init_r(void)
                                        TWL4030_PM_RECEIVER_VAUX2_VSEL_18,
                                        TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
                                        TWL4030_PM_RECEIVER_DEV_GRP_P1);
+               generate_fake_mac = true;
        }
 
        switch (get_expansion_id()) {
@@ -486,6 +506,13 @@ int misc_init_r(void)
        musb_register(&musb_plat, &musb_board_data, (void *)MUSB_BASE);
 #endif
 
+       if (generate_fake_mac) {
+               u32 id[4];
+
+               get_dieid(id);
+               usb_fake_mac_from_die_id(id);
+       }
+
        return 0;
 }
 
@@ -507,6 +534,13 @@ int board_mmc_init(bd_t *bis)
 }
 #endif
 
+#if defined(CONFIG_GENERIC_MMC)
+void board_mmc_power_init(void)
+{
+       twl4030_power_mmc_init(0);
+}
+#endif
+
 #if defined(CONFIG_USB_EHCI) && !defined(CONFIG_SPL_BUILD)
 /* Call usb_stop() before starting the kernel */
 void show_boot_progress(int val)
@@ -521,9 +555,10 @@ static struct omap_usbhs_board_data usbhs_bdata = {
        .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED
 };
 
-int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
+int ehci_hcd_init(int index, enum usb_init_type init,
+               struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
-       return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
 }
 
 int ehci_hcd_stop(int index)