|
@@ -57,6 +57,13 @@ DECLARE_GLOBAL_DATA_PTR;
|
|
|
#define ETH_PHY_RESET IMX_GPIO_NR(4, 15)
|
|
|
#define USB_H1_VBUS IMX_GPIO_NR(1, 0)
|
|
|
|
|
|
+enum board_type {
|
|
|
+ CUBOXI = 0x00,
|
|
|
+ HUMMINGBOARD = 0x01,
|
|
|
+ HUMMINGBOARD2 = 0x02,
|
|
|
+ UNKNOWN = 0x03,
|
|
|
+};
|
|
|
+
|
|
|
int dram_init(void)
|
|
|
{
|
|
|
gd->ram_size = imx_ddr_size();
|
|
@@ -77,10 +84,17 @@ static iomux_v3_cfg_t const usdhc2_pads[] = {
|
|
|
IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
|
|
};
|
|
|
|
|
|
-static iomux_v3_cfg_t const hb_cbi_sense[] = {
|
|
|
+static iomux_v3_cfg_t const board_detect[] = {
|
|
|
/* These pins are for sensing if it is a CuBox-i or a HummingBoard */
|
|
|
IOMUX_PADS(PAD_KEY_ROW1__GPIO4_IO09 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
|
|
IOMUX_PADS(PAD_EIM_DA4__GPIO3_IO04 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
|
|
+ IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
|
|
+};
|
|
|
+
|
|
|
+static iomux_v3_cfg_t const som_rev_detect[] = {
|
|
|
+ /* These pins are for sensing if it is a CuBox-i or a HummingBoard */
|
|
|
+ IOMUX_PADS(PAD_CSI0_DAT14__GPIO6_IO00 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
|
|
+ IOMUX_PADS(PAD_CSI0_DAT18__GPIO6_IO04 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
|
|
};
|
|
|
|
|
|
static iomux_v3_cfg_t const usb_pads[] = {
|
|
@@ -333,88 +347,110 @@ int board_init(void)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static bool is_hummingboard(void)
|
|
|
+static enum board_type board_type(void)
|
|
|
{
|
|
|
- int val1, val2;
|
|
|
+ int val1, val2, val3;
|
|
|
|
|
|
- SETUP_IOMUX_PADS(hb_cbi_sense);
|
|
|
-
|
|
|
- gpio_direction_input(IMX_GPIO_NR(4, 9));
|
|
|
- gpio_direction_input(IMX_GPIO_NR(3, 4));
|
|
|
-
|
|
|
- val1 = gpio_get_value(IMX_GPIO_NR(4, 9));
|
|
|
- val2 = gpio_get_value(IMX_GPIO_NR(3, 4));
|
|
|
+ SETUP_IOMUX_PADS(board_detect);
|
|
|
|
|
|
/*
|
|
|
* Machine selection -
|
|
|
- * Machine val1, val2
|
|
|
- * -------------------------
|
|
|
- * HB2 x x
|
|
|
- * HB rev 3.x x 0
|
|
|
- * CBi 0 1
|
|
|
- * HB 1 1
|
|
|
+ * Machine val1, val2, val3
|
|
|
+ * ----------------------------
|
|
|
+ * HB2 x x 0
|
|
|
+ * HB rev 3.x x 0 x
|
|
|
+ * CBi 0 1 x
|
|
|
+ * HB 1 1 x
|
|
|
*/
|
|
|
|
|
|
- if (val2 == 0)
|
|
|
- return true;
|
|
|
- else if (val1 == 0)
|
|
|
- return false;
|
|
|
- else
|
|
|
- return true;
|
|
|
-}
|
|
|
+ gpio_direction_input(IMX_GPIO_NR(2, 8));
|
|
|
+ val3 = gpio_get_value(IMX_GPIO_NR(2, 8));
|
|
|
|
|
|
-static bool is_hummingboard2(void)
|
|
|
-{
|
|
|
- int val1;
|
|
|
+ if (val3 == 0)
|
|
|
+ return HUMMINGBOARD2;
|
|
|
|
|
|
- SETUP_IOMUX_PADS(hb_cbi_sense);
|
|
|
+ gpio_direction_input(IMX_GPIO_NR(3, 4));
|
|
|
+ val2 = gpio_get_value(IMX_GPIO_NR(3, 4));
|
|
|
|
|
|
- gpio_direction_input(IMX_GPIO_NR(2, 8));
|
|
|
+ if (val2 == 0)
|
|
|
+ return HUMMINGBOARD;
|
|
|
|
|
|
- val1 = gpio_get_value(IMX_GPIO_NR(2, 8));
|
|
|
+ gpio_direction_input(IMX_GPIO_NR(4, 9));
|
|
|
+ val1 = gpio_get_value(IMX_GPIO_NR(4, 9));
|
|
|
|
|
|
- /*
|
|
|
- * Machine selection -
|
|
|
- * Machine val1
|
|
|
- * -------------------
|
|
|
- * HB2 0
|
|
|
- * HB rev 3.x x
|
|
|
- * CBi x
|
|
|
- * HB x
|
|
|
- */
|
|
|
+ if (val1 == 0) {
|
|
|
+ return CUBOXI;
|
|
|
+ } else {
|
|
|
+ return HUMMINGBOARD;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static bool is_rev_15_som(void)
|
|
|
+{
|
|
|
+ int val1, val2;
|
|
|
+ SETUP_IOMUX_PADS(som_rev_detect);
|
|
|
|
|
|
- if (val1 == 0)
|
|
|
+ val1 = gpio_get_value(IMX_GPIO_NR(6, 0));
|
|
|
+ val2 = gpio_get_value(IMX_GPIO_NR(6, 4));
|
|
|
+
|
|
|
+ if (val1 == 1 && val2 == 0)
|
|
|
return true;
|
|
|
- else
|
|
|
- return false;
|
|
|
+
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
int checkboard(void)
|
|
|
{
|
|
|
- if (is_hummingboard2())
|
|
|
- puts("Board: MX6 Hummingboard2\n");
|
|
|
- else if (is_hummingboard())
|
|
|
- puts("Board: MX6 Hummingboard\n");
|
|
|
+ switch (board_type()) {
|
|
|
+ case CUBOXI:
|
|
|
+ puts("Board: MX6 Cubox-i");
|
|
|
+ break;
|
|
|
+ case HUMMINGBOARD:
|
|
|
+ puts("Board: MX6 HummingBoard");
|
|
|
+ break;
|
|
|
+ case HUMMINGBOARD2:
|
|
|
+ puts("Board: MX6 HummingBoard2");
|
|
|
+ break;
|
|
|
+ case UNKNOWN:
|
|
|
+ default:
|
|
|
+ puts("Board: Unknown\n");
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (is_rev_15_som())
|
|
|
+ puts(" (som rev 1.5)\n");
|
|
|
else
|
|
|
- puts("Board: MX6 Cubox-i\n");
|
|
|
+ puts("\n");
|
|
|
|
|
|
+out:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
int board_late_init(void)
|
|
|
{
|
|
|
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
|
|
- if (is_hummingboard2())
|
|
|
- env_set("board_name", "HUMMINGBOARD2");
|
|
|
- else if (is_hummingboard())
|
|
|
+ switch (board_type()) {
|
|
|
+ case CUBOXI:
|
|
|
+ env_set("board_name", "CUBOXI");
|
|
|
+ break;
|
|
|
+ case HUMMINGBOARD:
|
|
|
env_set("board_name", "HUMMINGBOARD");
|
|
|
- else
|
|
|
+ break;
|
|
|
+ case HUMMINGBOARD2:
|
|
|
+ env_set("board_name", "HUMMINGBOARD2");
|
|
|
+ break;
|
|
|
+ case UNKNOWN:
|
|
|
+ default:
|
|
|
env_set("board_name", "CUBOXI");
|
|
|
+ }
|
|
|
|
|
|
if (is_mx6dq())
|
|
|
env_set("board_rev", "MX6Q");
|
|
|
else
|
|
|
env_set("board_rev", "MX6DL");
|
|
|
+
|
|
|
+ if (is_rev_15_som())
|
|
|
+ env_set("som_rev", "V15");
|
|
|
#endif
|
|
|
|
|
|
return 0;
|