ARM: uniphier: check DT to determine whether to use support card

If CONFIG_MICRO_SUPPORT_CARD is enabled, U-Boot tries to get access
to the devices on the support card, which may not actually exist.

Check the DT and search for the on-board devices run-time. If the
nodes are not found in DT, then disable the code.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
Masahiro Yamada 2019-07-10 20:07:36 +09:00
parent 9a2f0e5ccd
commit 92d6524b4f

View File

@ -18,6 +18,25 @@
#define MICRO_SUPPORT_CARD_RESET ((MICRO_SUPPORT_CARD_BASE) + 0xd0034) #define MICRO_SUPPORT_CARD_RESET ((MICRO_SUPPORT_CARD_BASE) + 0xd0034)
#define MICRO_SUPPORT_CARD_REVISION ((MICRO_SUPPORT_CARD_BASE) + 0xd00E0) #define MICRO_SUPPORT_CARD_REVISION ((MICRO_SUPPORT_CARD_BASE) + 0xd00E0)
static bool support_card_found;
static void support_card_detect(void)
{
DECLARE_GLOBAL_DATA_PTR;
const void *fdt = gd->fdt_blob;
int offset;
offset = fdt_node_offset_by_compatible(fdt, 0, "smsc,lan9118");
if (offset < 0)
return;
offset = fdt_node_offset_by_compatible(fdt, 0, "ns16550a");
if (offset < 0)
return;
support_card_found = true;
}
/* /*
* 0: reset deassert, 1: reset * 0: reset deassert, 1: reset
* *
@ -51,6 +70,11 @@ static int support_card_show_revision(void)
void support_card_init(void) void support_card_init(void)
{ {
support_card_detect();
if (!support_card_found)
return;
support_card_reset(); support_card_reset();
/* /*
* After power on, we need to keep the LAN controller in reset state * After power on, we need to keep the LAN controller in reset state
@ -67,6 +91,9 @@ void support_card_init(void)
int board_eth_init(bd_t *bis) int board_eth_init(bd_t *bis)
{ {
if (!support_card_found)
return 0;
return smc911x_initialize(0, SMC911X_BASE); return smc911x_initialize(0, SMC911X_BASE);
} }
#endif #endif
@ -161,6 +188,9 @@ static void detect_num_flash_banks(void)
void support_card_late_init(void) void support_card_late_init(void)
{ {
if (!support_card_found)
return;
detect_num_flash_banks(); detect_num_flash_banks();
} }
@ -221,6 +251,9 @@ void led_puts(const char *s)
int i; int i;
u32 val = 0; u32 val = 0;
if (!support_card_found)
return;
if (!s) if (!s)
return; return;