xref: /openbmc/u-boot/board/mscc/luton/luton.c (revision f83ef0dac83110d20389eb71f09285f009f3d198)
1f8c8ceddSGregory CLEMENT // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2f8c8ceddSGregory CLEMENT /*
3f8c8ceddSGregory CLEMENT  * Copyright (c) 2018 Microsemi Corporation
4f8c8ceddSGregory CLEMENT  */
5f8c8ceddSGregory CLEMENT 
6f8c8ceddSGregory CLEMENT #include <common.h>
7f8c8ceddSGregory CLEMENT #include <asm/io.h>
8*711f2dc0SLars Povlsen #include <led.h>
9f8c8ceddSGregory CLEMENT 
10f8c8ceddSGregory CLEMENT DECLARE_GLOBAL_DATA_PTR;
11f8c8ceddSGregory CLEMENT 
12e9f1492bSLars Povlsen enum {
13e9f1492bSLars Povlsen 	BOARD_TYPE_PCB090 = 0xAABBCD00,
14e9f1492bSLars Povlsen 	BOARD_TYPE_PCB091,
15e9f1492bSLars Povlsen };
16e9f1492bSLars Povlsen 
board_debug_uart_init(void)17f8c8ceddSGregory CLEMENT void board_debug_uart_init(void)
18f8c8ceddSGregory CLEMENT {
19f8c8ceddSGregory CLEMENT 	/* too early for the pinctrl driver, so configure the UART pins here */
20e9f1492bSLars Povlsen 	mscc_gpio_set_alternate(30, 1);
21e9f1492bSLars Povlsen 	mscc_gpio_set_alternate(31, 1);
22f8c8ceddSGregory CLEMENT }
23f8c8ceddSGregory CLEMENT 
board_early_init_r(void)24f8c8ceddSGregory CLEMENT int board_early_init_r(void)
25f8c8ceddSGregory CLEMENT {
26f8c8ceddSGregory CLEMENT 	/* Prepare SPI controller to be used in master mode */
27f8c8ceddSGregory CLEMENT 	writel(0, BASE_CFG + ICPU_SW_MODE);
28f8c8ceddSGregory CLEMENT 
29f8c8ceddSGregory CLEMENT 	/* Address of boot parameters */
30f8c8ceddSGregory CLEMENT 	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE;
31*711f2dc0SLars Povlsen 
32*711f2dc0SLars Povlsen 	/* LED setup */
33*711f2dc0SLars Povlsen 	if (IS_ENABLED(CONFIG_LED))
34*711f2dc0SLars Povlsen 		led_default_state();
35*711f2dc0SLars Povlsen 
36f8c8ceddSGregory CLEMENT 	return 0;
37f8c8ceddSGregory CLEMENT }
38e9f1492bSLars Povlsen 
do_board_detect(void)39e9f1492bSLars Povlsen static void do_board_detect(void)
40e9f1492bSLars Povlsen {
41e9f1492bSLars Povlsen 	u32 chipid = (readl(BASE_DEVCPU_GCB + CHIP_ID) >> 12) & 0xFFFF;
42e9f1492bSLars Povlsen 
43e9f1492bSLars Povlsen 	if (chipid == 0x7428 || chipid == 0x7424)
44e9f1492bSLars Povlsen 		gd->board_type = BOARD_TYPE_PCB091;    // Lu10
45e9f1492bSLars Povlsen 	else
46e9f1492bSLars Povlsen 		gd->board_type = BOARD_TYPE_PCB090;    // Lu26
47e9f1492bSLars Povlsen }
48e9f1492bSLars Povlsen 
49e9f1492bSLars Povlsen #if defined(CONFIG_MULTI_DTB_FIT)
board_fit_config_name_match(const char * name)50e9f1492bSLars Povlsen int board_fit_config_name_match(const char *name)
51e9f1492bSLars Povlsen {
52e9f1492bSLars Povlsen 	if (gd->board_type == BOARD_TYPE_PCB090 &&
53e9f1492bSLars Povlsen 	    strcmp(name, "luton_pcb090") == 0)
54e9f1492bSLars Povlsen 		return 0;
55e9f1492bSLars Povlsen 
56e9f1492bSLars Povlsen 	if (gd->board_type == BOARD_TYPE_PCB091 &&
57e9f1492bSLars Povlsen 	    strcmp(name, "luton_pcb091") == 0)
58e9f1492bSLars Povlsen 		return 0;
59e9f1492bSLars Povlsen 
60e9f1492bSLars Povlsen 	return -1;
61e9f1492bSLars Povlsen }
62e9f1492bSLars Povlsen #endif
63e9f1492bSLars Povlsen 
64e9f1492bSLars Povlsen #if defined(CONFIG_DTB_RESELECT)
embedded_dtb_select(void)65e9f1492bSLars Povlsen int embedded_dtb_select(void)
66e9f1492bSLars Povlsen {
67e9f1492bSLars Povlsen 	do_board_detect();
68e9f1492bSLars Povlsen 	fdtdec_setup();
69e9f1492bSLars Povlsen 
70e9f1492bSLars Povlsen 	return 0;
71e9f1492bSLars Povlsen }
72e9f1492bSLars Povlsen #endif
73