]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
xilinx: common: Add support for SOC detection
authorMichal Simek <michal.simek@amd.com>
Tue, 6 Sep 2022 10:40:41 +0000 (12:40 +0200)
committerMichal Simek <michal.simek@amd.com>
Tue, 13 Sep 2022 09:32:48 +0000 (11:32 +0200)
Code supports board detection based on information available in EEPROM in
legacy or FRU format. But this is not enough for emulation and simulation
systems which are lacking these identification EEPROMs. But SOC itself has
normally registers for SOC identification. Based on them it is possible to
compose detected name. That's why prepare infrastructure in common location
for SOC platform detection which is called before board platform detection.
SOC platform detection shouldn't detect real silicon and should fallback to
current existing mechanism to identify boards based on EEPROMs.

Signed-off-by: Michal Simek <michal.simek@amd.com>
Link: https://lore.kernel.org/r/329a8da338927b082e26a958bf69bb18af072420.1662460837.git.michal.simek@amd.com
board/xilinx/common/board.c

index 5e36386361230e0ae47116f87ee023edfca31cfe..e1f71049603fef7365c1880452a4bd54463036e3 100644 (file)
@@ -585,8 +585,33 @@ bool __maybe_unused __weak board_detection(void)
        return false;
 }
 
+bool __maybe_unused __weak soc_detection(void)
+{
+       return false;
+}
+
+char * __maybe_unused __weak soc_name_decode(void)
+{
+       return NULL;
+}
+
 int embedded_dtb_select(void)
 {
+       if (soc_detection()) {
+               char *soc_local_name;
+
+               soc_local_name = soc_name_decode();
+               if (soc_local_name) {
+                       board_name = soc_local_name;
+                       printf("Detected SOC name: %s\n", board_name);
+
+                       /* Time to change DTB on fly */
+                       /* Both ways should work here */
+                       /* fdtdec_resetup(&rescan); */
+                       return fdtdec_setup();
+               }
+       }
+
        if (board_detection()) {
                char *board_local_name;