Browse Source

sunxi: disable Pine A64 model detection code on other boards

The Pine A64 Plus/non-Plus model detection code is now built on all
64-bit ARM SoCs, even if the code cannot be triggered when H5/H6 is in
use.

Disable them when the board is Pine A64 by adding a Kconfig option that
is only selected on Pine A64.

On GCC 7.3.1 this makes the size of the function reduces 184 bytes, and
saves a 104 byte strstr() function, then makes SPL on H6 succeed to
build.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Acked-by: Maxime Ripard <maxime.ripard@bootlin.com>
Reviewed-by: Jagan Teki <jagan@openedev.com>
Icenowy Zheng 6 years ago
parent
commit
c6c2c85e4b
3 changed files with 14 additions and 0 deletions
  1. 10 0
      arch/arm/mach-sunxi/Kconfig
  2. 3 0
      board/sunxi/board.c
  3. 1 0
      configs/pine64_plus_defconfig

+ 10 - 0
arch/arm/mach-sunxi/Kconfig

@@ -970,4 +970,14 @@ config SPL_SPI_SUNXI
 	  sunxi SPI Flash. It uses the same method as the boot ROM, so does
 	  sunxi SPI Flash. It uses the same method as the boot ROM, so does
 	  not need any extra configuration.
 	  not need any extra configuration.
 
 
+config PINE64_DT_SELECTION
+	bool "Enable Pine64 device tree selection code"
+	depends on MACH_SUN50I
+	help
+	  The original Pine A64 and Pine A64+ are similar but different
+	  boards and can be differed by the DRAM size. Pine A64 has
+	  512MiB DRAM, and Pine A64+ has 1GiB or 2GiB. By selecting this
+	  option, the device tree selection code specific to Pine64 which
+	  utilizes the DRAM size will be enabled.
+
 endif
 endif

+ 3 - 0
board/sunxi/board.c

@@ -820,6 +820,7 @@ int board_fit_config_name_match(const char *name)
 #endif
 #endif
 	};
 	};
 
 
+#ifdef CONFIG_PINE64_DT_SELECTION
 /* Differentiate the two Pine64 board DTs by their DRAM size. */
 /* Differentiate the two Pine64 board DTs by their DRAM size. */
 	if (strstr(name, "-pine64") && strstr(cmp_str, "-pine64")) {
 	if (strstr(name, "-pine64") && strstr(cmp_str, "-pine64")) {
 		if ((gd->ram_size > 512 * 1024 * 1024))
 		if ((gd->ram_size > 512 * 1024 * 1024))
@@ -829,5 +830,7 @@ int board_fit_config_name_match(const char *name)
 	} else {
 	} else {
 		return strcmp(name, cmp_str);
 		return strcmp(name, cmp_str);
 	}
 	}
+#endif
+	return strcmp(name, cmp_str);
 }
 }
 #endif
 #endif

+ 1 - 0
configs/pine64_plus_defconfig

@@ -3,6 +3,7 @@ CONFIG_ARCH_SUNXI=y
 CONFIG_SPL=y
 CONFIG_SPL=y
 CONFIG_MACH_SUN50I=y
 CONFIG_MACH_SUN50I=y
 CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
 CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
+CONFIG_PINE64_DT_SELECTION=y
 CONFIG_NR_DRAM_BANKS=1
 CONFIG_NR_DRAM_BANKS=1
 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FLASH is not set