ARM: Samsung: Add Exynos5422-based Odroid HC1 support
authorMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 3 Nov 2017 08:30:30 +0000 (09:30 +0100)
committerMinkyu Kang <mk7.kang@samsung.com>
Tue, 5 Dec 2017 01:18:39 +0000 (10:18 +0900)
Odroid HC1 board is based on Odroid XU4 board, but it has no HDMI,
no eMMC, no build-in USB3.0 hub, no extension port pins, and no GPIO
button. USB3.0 ports are used for build-in JMicron USB to SATA bridge
and Gigabit R8152 ethernet chips. HC1 uses only passive cooling.

This patch also updates Odroid's ADCmax array and reduces ADC tolerance
to 1% to ensure that XU4 and HC1 revisions are properly detected.

I've tested this with XU3, XU3-lite, XU4 and HC1 boards. In case of my test
boards I got following values from ADC register: 372, 370, 1281 and 1313.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Tested-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
board/samsung/common/exynos5-dt-types.c
board/samsung/common/exynos5-dt.c
configs/odroid-xu3_defconfig
include/samsung/exynos5-dt-types.h

index 48fd1f7d9666160759da9574cc2c69b36975b51b..03d3a3112a15dd537d18aa094c6e376e2d60068e 100644 (file)
@@ -25,17 +25,22 @@ static const struct udevice_id board_ids[] = {
 };
 
 /**
- * Odroix XU3/4 board revisions:
+ * Odroix XU3/XU4/HC1 board revisions (from HC1_MAIN_REV0.1_20170630.pdf):
  * Rev   ADCmax  Board
  * 0.1     0     XU3 0.1
- * 0.2   410     XU3 0.2 | XU3L - no DISPLAYPORT (probe I2C0:0x40 / INA231)
- * 0.3  1408     XU4 0.1
- * Use +10 % for ADC value tolerance.
+ * 0.2   372     XU3 0.2 | XU3L - no DISPLAYPORT (probe I2C0:0x40 / INA231)
+ * 0.3  1280     XU4 0.1
+ * 0.4   739     XU4 0.2
+ * 0.5  1016     XU4+Air0.1 (Passive cooling)
+ * 0.6  1308     XU4S 0.1 (HC1)
+ * Use +1% for ADC value tolerance in the array below, the code loops until
+ * the measured ADC value is lower than then ADCmax from the array.
  */
 struct odroid_rev_info odroid_info[] = {
        { EXYNOS5_BOARD_ODROID_XU3_REV01, 1, 10, "xu3" },
-       { EXYNOS5_BOARD_ODROID_XU3_REV02, 2, 410, "xu3" },
-       { EXYNOS5_BOARD_ODROID_XU4_REV01, 1, 1408, "xu4" },
+       { EXYNOS5_BOARD_ODROID_XU3_REV02, 2, 375, "xu3" },
+       { EXYNOS5_BOARD_ODROID_XU4_REV01, 1, 1293, "xu4" },
+       { EXYNOS5_BOARD_ODROID_HC1_REV01, 1, 1321, "hc1" },
        { EXYNOS5_BOARD_ODROID_UNKNOWN, 0, 4095, "unknown" },
 };
 
@@ -61,7 +66,7 @@ static int odroid_get_board_type(void)
                goto rev_default;
 
        for (i = 0; i < ARRAY_SIZE(odroid_info); i++) {
-               /* ADC tolerance: +20 % */
+               /* ADC tolerance: +1% */
                if (adcval < odroid_info[i].adc_val)
                        return odroid_info[i].board_type;
        }
@@ -132,6 +137,14 @@ bool board_is_odroidxu4(void)
        return false;
 }
 
+bool board_is_odroidhc1(void)
+{
+       if (gd->board_type == EXYNOS5_BOARD_ODROID_HC1_REV01)
+               return true;
+
+       return false;
+}
+
 bool board_is_generic(void)
 {
        if (gd->board_type == EXYNOS5_BOARD_GENERIC)
index 0d17f30712cdf2b3c33903c07f0ee4be52d2ffde..a4eb3514051e9851f3c60cdcc9cc45bcfe7fb2b0 100644 (file)
@@ -176,7 +176,7 @@ char *get_dfu_alt_system(char *interface, char *devstr)
 {
        char *info = "Not supported!";
 
-       if (board_is_odroidxu4())
+       if (board_is_odroidxu4() || board_is_odroidhc1())
                return info;
 
        return env_get("dfu_alt_system");
@@ -189,7 +189,7 @@ char *get_dfu_alt_boot(char *interface, char *devstr)
        char *alt_boot;
        int dev_num;
 
-       if (board_is_odroidxu4())
+       if (board_is_odroidxu4() || board_is_odroidhc1())
                return info;
 
        dev_num = simple_strtoul(devstr, NULL, 10);
index 76b1d35b2aafad12ba23f6b8b7e47ab3c4080177..976c06a29d3854708bf9393857f322f1df15f2f9 100644 (file)
@@ -1,7 +1,7 @@
 CONFIG_ARM=y
 CONFIG_ARCH_EXYNOS=y
 CONFIG_ARCH_EXYNOS5=y
-CONFIG_IDENT_STRING=" for ODROID-XU3"
+CONFIG_IDENT_STRING=" for ODROID-XU3/XU4/HC1"
 CONFIG_DEFAULT_DEVICE_TREE="exynos5422-odroidxu3"
 CONFIG_DISTRO_DEFAULTS=y
 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
index 479e2e793dcef185de6af79b30b8d4a7d13702b3..8e11af30d1831154368b5bd98e0191c2bc1304b5 100644 (file)
@@ -8,6 +8,7 @@ enum {
        EXYNOS5_BOARD_ODROID_XU3_REV01,
        EXYNOS5_BOARD_ODROID_XU3_REV02,
        EXYNOS5_BOARD_ODROID_XU4_REV01,
+       EXYNOS5_BOARD_ODROID_HC1_REV01,
        EXYNOS5_BOARD_ODROID_UNKNOWN,
 
        EXYNOS5_BOARD_COUNT,
@@ -23,5 +24,6 @@ struct odroid_rev_info {
 bool board_is_generic(void);
 bool board_is_odroidxu3(void);
 bool board_is_odroidxu4(void);
+bool board_is_odroidhc1(void);
 
 #endif