]> git.sur5r.net Git - u-boot/blobdiff - board/raspberrypi/rpi/rpi.c
Merge git://git.denx.de/u-boot-rockchip
[u-boot] / board / raspberrypi / rpi / rpi.c
index d3c6ba580f5cadf7e1b387a2d580424c5dcde138..177f4af265e510889d16f0a42c9fc6c2a446f049 100644 (file)
@@ -24,6 +24,7 @@
 #include <asm/armv8/mmu.h>
 #endif
 #include <watchdog.h>
+#include <dm/pinctrl.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -105,6 +106,11 @@ static const struct rpi_model rpi_models_new_scheme[] = {
                DTB_DIR "bcm2835-rpi-zero.dtb",
                false,
        },
+       [0xC] = {
+               "Zero W",
+               DTB_DIR "bcm2835-rpi-zero-w.dtb",
+               false,
+       },
 };
 
 static const struct rpi_model rpi_models_old_scheme[] = {
@@ -247,11 +253,11 @@ static void set_fdtfile(void)
 {
        const char *fdtfile;
 
-       if (getenv("fdtfile"))
+       if (env_get("fdtfile"))
                return;
 
        fdtfile = model->fdtfile;
-       setenv("fdtfile", fdtfile);
+       env_set("fdtfile", fdtfile);
 }
 
 /*
@@ -260,13 +266,13 @@ static void set_fdtfile(void)
  */
 static void set_fdt_addr(void)
 {
-       if (getenv("fdt_addr"))
+       if (env_get("fdt_addr"))
                return;
 
        if (fdt_magic(fw_dtb_pointer) != FDT_MAGIC)
                return;
 
-       setenv_hex("fdt_addr", fw_dtb_pointer);
+       env_set_hex("fdt_addr", fw_dtb_pointer);
 }
 
 /*
@@ -287,7 +293,7 @@ static void set_usbethaddr(void)
        if (!model->has_onboard_eth)
                return;
 
-       if (getenv("usbethaddr"))
+       if (env_get("usbethaddr"))
                return;
 
        BCM2835_MBOX_INIT_HDR(msg);
@@ -300,10 +306,10 @@ static void set_usbethaddr(void)
                return;
        }
 
-       eth_setenv_enetaddr("usbethaddr", msg->get_mac_address.body.resp.mac);
+       eth_env_set_enetaddr("usbethaddr", msg->get_mac_address.body.resp.mac);
 
-       if (!getenv("ethaddr"))
-               setenv("ethaddr", getenv("usbethaddr"));
+       if (!env_get("ethaddr"))
+               env_set("ethaddr", env_get("usbethaddr"));
 
        return;
 }
@@ -314,13 +320,13 @@ static void set_board_info(void)
        char s[11];
 
        snprintf(s, sizeof(s), "0x%X", revision);
-       setenv("board_revision", s);
+       env_set("board_revision", s);
        snprintf(s, sizeof(s), "%d", rev_scheme);
-       setenv("board_rev_scheme", s);
+       env_set("board_rev_scheme", s);
        /* Can't rename this to board_rev_type since it's an ABI for scripts */
        snprintf(s, sizeof(s), "0x%X", rev_type);
-       setenv("board_rev", s);
-       setenv("board_name", model->name);
+       env_set("board_rev", s);
+       env_set("board_name", model->name);
 }
 #endif /* CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG */
 
@@ -330,7 +336,7 @@ static void set_serial_number(void)
        int ret;
        char serial_string[17] = { 0 };
 
-       if (getenv("serial#"))
+       if (env_get("serial#"))
                return;
 
        BCM2835_MBOX_INIT_HDR(msg);
@@ -345,7 +351,7 @@ static void set_serial_number(void)
 
        snprintf(serial_string, sizeof(serial_string), "%016" PRIx64,
                 msg->get_board_serial.body.resp.serial);
-       setenv("serial#", serial_string);
+       env_set("serial#", serial_string);
 }
 
 int misc_init_r(void)
@@ -414,54 +420,11 @@ static void get_board_rev(void)
        printf("RPI %s (0x%x)\n", model->name, revision);
 }
 
-#ifndef CONFIG_PL01X_SERIAL
-static bool rpi_is_serial_active(void)
-{
-       int serial_gpio = 15;
-       struct udevice *dev;
-
-       /*
-        * The RPi3 disables the mini uart by default. The easiest way to find
-        * out whether it is available is to check if the RX pin is muxed.
-        */
-
-       if (uclass_first_device(UCLASS_GPIO, &dev) || !dev)
-               return true;
-
-       if (bcm2835_gpio_get_func_id(dev, serial_gpio) != BCM2835_GPIO_ALT5)
-               return false;
-
-       return true;
-}
-
-/* Disable mini-UART I/O if it's not pinmuxed to our pins.
- * The firmware only enables it if explicitly done in config.txt: enable_uart=1
- */
-static void rpi_disable_inactive_uart(void)
-{
-       struct udevice *dev;
-       struct bcm283x_mu_serial_platdata *plat;
-
-       if (uclass_get_device_by_driver(UCLASS_SERIAL,
-                                       DM_GET_DRIVER(serial_bcm283x_mu),
-                                       &dev) || !dev)
-               return;
-
-       if (!rpi_is_serial_active()) {
-               plat = dev_get_platdata(dev);
-               plat->disabled = true;
-       }
-}
-#endif
-
 int board_init(void)
 {
 #ifdef CONFIG_HW_WATCHDOG
        hw_watchdog_init();
 #endif
-#ifndef CONFIG_PL01X_SERIAL
-       rpi_disable_inactive_uart();
-#endif
 
        get_board_rev();