mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 08:59:33 +00:00
MSCC: Add board support for Jaguar2 SOC family
Add board support and configuration for Jaguar2 SOC family. The detection of the board type in this family is based on the phy ids. Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
This commit is contained in:
parent
393b77d8f9
commit
c75c908316
9 changed files with 232 additions and 24 deletions
|
@ -19,6 +19,7 @@ dtb-$(CONFIG_BOARD_TPLINK_WDR4300) += tplink_wdr4300.dtb
|
|||
dtb-$(CONFIG_TARGET_JZ4780_CI20) += ci20.dtb
|
||||
dtb-$(CONFIG_SOC_LUTON) += luton_pcb090.dtb luton_pcb091.dtb
|
||||
dtb-$(CONFIG_SOC_OCELOT) += ocelot_pcb120.dtb ocelot_pcb123.dtb
|
||||
dtb-$(CONFIG_SOC_JR2) += jr2_pcb110.dtb jr2_pcb111.dtb serval2_pcb112.dtb
|
||||
|
||||
targets += $(dtb-y)
|
||||
|
||||
|
|
|
@ -2,5 +2,6 @@
|
|||
|
||||
CFLAGS_cpu.o += -finline-limit=64000
|
||||
|
||||
obj-y += cpu.o dram.o reset.o phy.o gpio.o lowlevel_init.o
|
||||
obj-$(CONFIG_SOC_LUTON) += lowlevel_init_luton.o
|
||||
obj-y += cpu.o dram.o reset.o phy.o lowlevel_init.o
|
||||
obj-$(CONFIG_SOC_LUTON) += lowlevel_init_luton.o gpio.o
|
||||
obj-$(CONFIG_SOC_OCELOT) += gpio.o
|
||||
|
|
4
board/mscc/common/Makefile
Normal file
4
board/mscc/common/Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
|
||||
obj-$(CONFIG_SOC_JR2) := spi.o
|
||||
obj-$(CONFIG_SOC_OCELOT) := spi.o
|
31
board/mscc/common/spi.c
Normal file
31
board/mscc/common/spi.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2018 Microsemi Coprporation
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/io.h>
|
||||
#include <spi.h>
|
||||
|
||||
void external_cs_manage(struct udevice *dev, bool enable)
|
||||
{
|
||||
u32 cs = spi_chip_select(dev);
|
||||
/* IF_SI0_OWNER, select the owner of the SI interface
|
||||
* Encoding: 0: SI Slave
|
||||
* 1: SI Boot Master
|
||||
* 2: SI Master Controller
|
||||
*/
|
||||
if (!enable) {
|
||||
writel(ICPU_SW_MODE_SW_PIN_CTRL_MODE |
|
||||
ICPU_SW_MODE_SW_SPI_CS(BIT(cs)),
|
||||
BASE_CFG + ICPU_SW_MODE);
|
||||
clrsetbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER_M,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER(2));
|
||||
} else {
|
||||
writel(0, BASE_CFG + ICPU_SW_MODE);
|
||||
clrsetbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER_M,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER(1));
|
||||
}
|
||||
}
|
15
board/mscc/jr2/Kconfig
Normal file
15
board/mscc/jr2/Kconfig
Normal file
|
@ -0,0 +1,15 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
|
||||
config SYS_VENDOR
|
||||
default "mscc"
|
||||
|
||||
if SOC_JR2
|
||||
|
||||
config SYS_BOARD
|
||||
default "jr2"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "jr2"
|
||||
|
||||
endif
|
||||
|
4
board/mscc/jr2/Makefile
Normal file
4
board/mscc/jr2/Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
|
||||
obj-$(CONFIG_SOC_JR2) := jr2.o
|
||||
|
115
board/mscc/jr2/jr2.c
Normal file
115
board/mscc/jr2/jr2.c
Normal file
|
@ -0,0 +1,115 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2018 Microsemi Corporation
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/io.h>
|
||||
#include <led.h>
|
||||
|
||||
enum {
|
||||
BOARD_TYPE_PCB110 = 0xAABBCE00,
|
||||
BOARD_TYPE_PCB111,
|
||||
BOARD_TYPE_PCB112,
|
||||
};
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
/* Prepare SPI controller to be used in master mode */
|
||||
writel(0, BASE_CFG + ICPU_SW_MODE);
|
||||
clrsetbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER_M,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER(2));
|
||||
|
||||
/* Address of boot parameters */
|
||||
gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE;
|
||||
|
||||
/* LED setup */
|
||||
if (IS_ENABLED(CONFIG_LED))
|
||||
led_default_state();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void vcoreiii_gpio_set_alternate(int gpio, int mode)
|
||||
{
|
||||
u32 mask;
|
||||
u32 val0, val1;
|
||||
void __iomem *reg0, *reg1;
|
||||
|
||||
if (gpio < 32) {
|
||||
mask = BIT(gpio);
|
||||
reg0 = BASE_DEVCPU_GCB + GPIO_GPIO_ALT(0);
|
||||
reg1 = BASE_DEVCPU_GCB + GPIO_GPIO_ALT(1);
|
||||
} else {
|
||||
gpio -= 32;
|
||||
mask = BIT(gpio);
|
||||
reg0 = BASE_DEVCPU_GCB + GPIO_GPIO_ALT1(0);
|
||||
reg1 = BASE_DEVCPU_GCB + GPIO_GPIO_ALT1(1);
|
||||
}
|
||||
val0 = readl(reg0);
|
||||
val1 = readl(reg1);
|
||||
if (mode == 1) {
|
||||
writel(val0 | mask, reg0);
|
||||
writel(val1 & ~mask, reg1);
|
||||
} else if (mode == 2) {
|
||||
writel(val0 & ~mask, reg0);
|
||||
writel(val1 | mask, reg1);
|
||||
} else if (mode == 3) {
|
||||
writel(val0 | mask, reg0);
|
||||
writel(val1 | mask, reg1);
|
||||
} else {
|
||||
writel(val0 & ~mask, reg0);
|
||||
writel(val1 & ~mask, reg1);
|
||||
}
|
||||
}
|
||||
|
||||
static void do_board_detect(void)
|
||||
{
|
||||
int i;
|
||||
u16 pval;
|
||||
|
||||
/* MIIM 1 + 2 MDC/MDIO */
|
||||
for (i = 56; i < 60; i++)
|
||||
vcoreiii_gpio_set_alternate(i, 1);
|
||||
|
||||
if (mscc_phy_rd(0, 0x10, 0x3, &pval) == 0 &&
|
||||
((pval >> 4) & 0x3F) == 0x3c) {
|
||||
gd->board_type = BOARD_TYPE_PCB112; /* Serval2-NID */
|
||||
} else if (mscc_phy_rd(1, 0x0, 0x3, &pval) == 0 &&
|
||||
((pval >> 4) & 0x3F) == 0x3c) {
|
||||
gd->board_type = BOARD_TYPE_PCB110; /* Jr2-24 */
|
||||
} else {
|
||||
/* Fall-back */
|
||||
gd->board_type = BOARD_TYPE_PCB111; /* Jr2-48 */
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CONFIG_MULTI_DTB_FIT)
|
||||
int board_fit_config_name_match(const char *name)
|
||||
{
|
||||
if (gd->board_type == BOARD_TYPE_PCB110 &&
|
||||
strcmp(name, "jr2_pcb110") == 0)
|
||||
return 0;
|
||||
|
||||
if (gd->board_type == BOARD_TYPE_PCB111 &&
|
||||
strcmp(name, "jr2_pcb111") == 0)
|
||||
return 0;
|
||||
|
||||
if (gd->board_type == BOARD_TYPE_PCB112 &&
|
||||
strcmp(name, "serval2_pcb112") == 0)
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_DTB_RESELECT)
|
||||
int embedded_dtb_select(void)
|
||||
{
|
||||
do_board_detect();
|
||||
fdtdec_setup();
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
|
@ -18,28 +18,6 @@ enum {
|
|||
BOARD_TYPE_PCB123,
|
||||
};
|
||||
|
||||
void external_cs_manage(struct udevice *dev, bool enable)
|
||||
{
|
||||
u32 cs = spi_chip_select(dev);
|
||||
/* IF_SI0_OWNER, select the owner of the SI interface
|
||||
* Encoding: 0: SI Slave
|
||||
* 1: SI Boot Master
|
||||
* 2: SI Master Controller
|
||||
*/
|
||||
if (!enable) {
|
||||
writel(ICPU_SW_MODE_SW_PIN_CTRL_MODE |
|
||||
ICPU_SW_MODE_SW_SPI_CS(BIT(cs)), BASE_CFG + ICPU_SW_MODE);
|
||||
clrsetbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER_M,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER(2));
|
||||
} else {
|
||||
writel(0, BASE_CFG + ICPU_SW_MODE);
|
||||
clrsetbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER_M,
|
||||
ICPU_GENERAL_CTRL_IF_SI_OWNER(1));
|
||||
}
|
||||
}
|
||||
|
||||
void board_debug_uart_init(void)
|
||||
{
|
||||
/* too early for the pinctrl driver, so configure the UART pins here */
|
||||
|
|
59
configs/mscc_jr2_defconfig
Normal file
59
configs/mscc_jr2_defconfig
Normal file
|
@ -0,0 +1,59 @@
|
|||
CONFIG_MIPS=y
|
||||
CONFIG_SYS_TEXT_BASE=0x40000000
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
||||
CONFIG_ARCH_MSCC=y
|
||||
CONFIG_SOC_JR2=y
|
||||
CONFIG_SYS_LITTLE_ENDIAN=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_BOOTDELAY=3
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200"
|
||||
CONFIG_LOGLEVEL=7
|
||||
CONFIG_DISPLAY_CPUINFO=y
|
||||
CONFIG_SYS_PROMPT="jr2 # "
|
||||
# CONFIG_CMD_BDI is not set
|
||||
# CONFIG_CMD_CONSOLE is not set
|
||||
# CONFIG_CMD_ELF is not set
|
||||
# CONFIG_CMD_EXPORTENV is not set
|
||||
# CONFIG_CMD_IMPORTENV is not set
|
||||
# CONFIG_CMD_CRC32 is not set
|
||||
CONFIG_CMD_MD5SUM=y
|
||||
CONFIG_CMD_MEMINFO=y
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_SPI=y
|
||||
# CONFIG_CMD_NET is not set
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi_flash"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi_flash:1m(UBoot),256k(Env),256k(Env.bk)"
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
CONFIG_DEFAULT_DEVICE_TREE="jr2_pcb110"
|
||||
CONFIG_OF_LIST="jr2_pcb110 jr2_pcb111 serval2_pcb112"
|
||||
CONFIG_DTB_RESELECT=y
|
||||
CONFIG_MULTI_DTB_FIT=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_MSCC_SGPIO=y
|
||||
CONFIG_LED=y
|
||||
CONFIG_LED_GPIO=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
CONFIG_SPI_FLASH_MACRONIX=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCONF=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_SYS_NS16550=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_LZMA=y
|
||||
CONFIG_XZ=y
|
Loading…
Reference in a new issue