Porter is an entry level development board based on R-Car M2 SoC (R8A7791) This commit supports the following peripherals: - SCIF, I2C, Ethernet, QSPI, SD, USB Host Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com> Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>master
parent
acdfecbbb4
commit
60c0467a94
@ -0,0 +1,12 @@ |
||||
if TARGET_PORTER |
||||
|
||||
config SYS_BOARD |
||||
default "porter" |
||||
|
||||
config SYS_VENDOR |
||||
default "renesas" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "porter" |
||||
|
||||
endif |
@ -0,0 +1,6 @@ |
||||
PORTER BOARD |
||||
M: Cogent Embedded, Inc. <source@cogentembedded.com> |
||||
S: Maintained |
||||
F: board/renesas/porter/ |
||||
F: include/configs/porter.h |
||||
F: configs/porter_defconfig |
@ -0,0 +1,10 @@ |
||||
#
|
||||
# board/renesas/porter/Makefile
|
||||
#
|
||||
# Copyright (C) 2015 Renesas Electronics Corporation
|
||||
# Copyright (C) 2015 Cogent Embedded, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
|
||||
obj-y := porter.o qos.o ../rcar-gen2-common/common.o
|
@ -0,0 +1,228 @@ |
||||
/*
|
||||
* board/renesas/porter/porter.c |
||||
* |
||||
* Copyright (C) 2015 Renesas Electronics Corporation |
||||
* Copyright (C) 2015 Cogent Embedded, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0 |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <malloc.h> |
||||
#include <dm.h> |
||||
#include <dm/platform_data/serial_sh.h> |
||||
#include <asm/processor.h> |
||||
#include <asm/mach-types.h> |
||||
#include <asm/io.h> |
||||
#include <asm/errno.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/arch/rmobile.h> |
||||
#include <asm/arch/rcar-mstp.h> |
||||
#include <asm/arch/sh_sdhi.h> |
||||
#include <netdev.h> |
||||
#include <miiphy.h> |
||||
#include <i2c.h> |
||||
#include <div64.h> |
||||
#include "qos.h" |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#define CLK2MHZ(clk) (clk / 1000 / 1000) |
||||
void s_init(void) |
||||
{ |
||||
struct rcar_rwdt *rwdt = (struct rcar_rwdt *)RWDT_BASE; |
||||
struct rcar_swdt *swdt = (struct rcar_swdt *)SWDT_BASE; |
||||
u32 stc; |
||||
|
||||
/* Watchdog init */ |
||||
writel(0xA5A5A500, &rwdt->rwtcsra); |
||||
writel(0xA5A5A500, &swdt->swtcsra); |
||||
|
||||
/* CPU frequency setting. Set to 1.5GHz */ |
||||
stc = ((1500 / CLK2MHZ(CONFIG_SYS_CLK_FREQ)) - 1) << PLL0_STC_BIT; |
||||
clrsetbits_le32(PLL0CR, PLL0_STC_MASK, stc); |
||||
|
||||
/* QoS */ |
||||
qos_init(); |
||||
} |
||||
|
||||
#define TMU0_MSTP125 (1 << 25) |
||||
#define SDHI0_MSTP314 (1 << 14) |
||||
#define SDHI2_MSTP311 (1 << 11) |
||||
#define SCIF0_MSTP721 (1 << 21) |
||||
#define ETHER_MSTP813 (1 << 13) |
||||
|
||||
#define SD2CKCR 0xE615026C |
||||
#define SD_97500KHZ 0x7 |
||||
|
||||
int board_early_init_f(void) |
||||
{ |
||||
mstp_clrbits_le32(MSTPSR1, SMSTPCR1, TMU0_MSTP125); |
||||
|
||||
/* SCIF0 */ |
||||
mstp_clrbits_le32(MSTPSR7, SMSTPCR7, SCIF0_MSTP721); |
||||
|
||||
/* ETHER */ |
||||
mstp_clrbits_le32(MSTPSR8, SMSTPCR8, ETHER_MSTP813); |
||||
|
||||
/* SDHI */ |
||||
mstp_clrbits_le32(MSTPSR3, SMSTPCR3, SDHI0_MSTP314 | SDHI2_MSTP311); |
||||
|
||||
/*
|
||||
* SD0 clock is set to 97.5MHz by default. |
||||
* Set SD2 to the 97.5MHz as well. |
||||
*/ |
||||
writel(SD_97500KHZ, SD2CKCR); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
/* LSI pin pull-up control */ |
||||
#define PUPR5 0xe6060114 |
||||
#define PUPR5_ETH 0x3FFC0000 |
||||
#define PUPR5_ETH_MAGIC (1 << 27) |
||||
int board_init(void) |
||||
{ |
||||
/* adress of boot parameters */ |
||||
gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; |
||||
|
||||
/* Init PFC controller */ |
||||
r8a7791_pinmux_init(); |
||||
|
||||
/* Ether Enable */ |
||||
gpio_request(GPIO_FN_ETH_CRS_DV, NULL); |
||||
gpio_request(GPIO_FN_ETH_RX_ER, NULL); |
||||
gpio_request(GPIO_FN_ETH_RXD0, NULL); |
||||
gpio_request(GPIO_FN_ETH_RXD1, NULL); |
||||
gpio_request(GPIO_FN_ETH_LINK, NULL); |
||||
gpio_request(GPIO_FN_ETH_REFCLK, NULL); |
||||
gpio_request(GPIO_FN_ETH_MDIO, NULL); |
||||
gpio_request(GPIO_FN_ETH_TXD1, NULL); |
||||
gpio_request(GPIO_FN_ETH_TX_EN, NULL); |
||||
gpio_request(GPIO_FN_ETH_TXD0, NULL); |
||||
gpio_request(GPIO_FN_ETH_MDC, NULL); |
||||
gpio_request(GPIO_FN_IRQ0, NULL); |
||||
|
||||
mstp_clrbits_le32(PUPR5, PUPR5, PUPR5_ETH & ~PUPR5_ETH_MAGIC); |
||||
gpio_request(GPIO_GP_5_22, NULL); /* PHY_RST */ |
||||
mstp_clrbits_le32(PUPR5, PUPR5, PUPR5_ETH_MAGIC); |
||||
|
||||
gpio_direction_output(GPIO_GP_5_22, 0); |
||||
mdelay(20); |
||||
gpio_set_value(GPIO_GP_5_22, 1); |
||||
udelay(1); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#define CXR24 0xEE7003C0 /* MAC address high register */ |
||||
#define CXR25 0xEE7003C8 /* MAC address low register */ |
||||
int board_eth_init(bd_t *bis) |
||||
{ |
||||
#ifdef CONFIG_SH_ETHER |
||||
int ret = -ENODEV; |
||||
u32 val; |
||||
unsigned char enetaddr[6]; |
||||
|
||||
ret = sh_eth_initialize(bis); |
||||
if (!eth_getenv_enetaddr("ethaddr", enetaddr)) |
||||
return ret; |
||||
|
||||
/* Set Mac address */ |
||||
val = enetaddr[0] << 24 | enetaddr[1] << 16 | |
||||
enetaddr[2] << 8 | enetaddr[3]; |
||||
writel(val, CXR24); |
||||
|
||||
val = enetaddr[4] << 8 | enetaddr[5]; |
||||
writel(val, CXR25); |
||||
|
||||
return ret; |
||||
#else |
||||
return 0; |
||||
#endif |
||||
} |
||||
|
||||
int board_mmc_init(bd_t *bis) |
||||
{ |
||||
int ret = -ENODEV; |
||||
|
||||
#ifdef CONFIG_SH_SDHI |
||||
gpio_request(GPIO_FN_SD0_DATA0, NULL); |
||||
gpio_request(GPIO_FN_SD0_DATA1, NULL); |
||||
gpio_request(GPIO_FN_SD0_DATA2, NULL); |
||||
gpio_request(GPIO_FN_SD0_DATA3, NULL); |
||||
gpio_request(GPIO_FN_SD0_CLK, NULL); |
||||
gpio_request(GPIO_FN_SD0_CMD, NULL); |
||||
gpio_request(GPIO_FN_SD0_CD, NULL); |
||||
gpio_request(GPIO_FN_SD2_DATA0, NULL); |
||||
gpio_request(GPIO_FN_SD2_DATA1, NULL); |
||||
gpio_request(GPIO_FN_SD2_DATA2, NULL); |
||||
gpio_request(GPIO_FN_SD2_DATA3, NULL); |
||||
gpio_request(GPIO_FN_SD2_CLK, NULL); |
||||
gpio_request(GPIO_FN_SD2_CMD, NULL); |
||||
gpio_request(GPIO_FN_SD2_CD, NULL); |
||||
|
||||
/* SDHI 0 */ |
||||
gpio_request(GPIO_GP_2_12, NULL); |
||||
gpio_direction_output(GPIO_GP_2_12, 1); /* 1: 3.3V, 0: 1.8V */ |
||||
|
||||
ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI0_BASE, 0, |
||||
SH_SDHI_QUIRK_16BIT_BUF); |
||||
if (ret) |
||||
return ret; |
||||
|
||||
/* SDHI 2 */ |
||||
gpio_request(GPIO_GP_2_26, NULL); |
||||
gpio_direction_output(GPIO_GP_2_26, 1); /* 1: 3.3V, 0: 1.8V */ |
||||
|
||||
ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI2_BASE, 2, 0); |
||||
#endif |
||||
return ret; |
||||
} |
||||
|
||||
int dram_init(void) |
||||
{ |
||||
gd->ram_size = CONFIG_SYS_SDRAM_SIZE; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
/* porter has KSZ8041RNLI */ |
||||
#define PHY_CONTROL1 0x1E |
||||
#define PHY_LED_MODE 0xC0000 |
||||
#define PHY_LED_MODE_ACK 0x4000 |
||||
int board_phy_config(struct phy_device *phydev) |
||||
{ |
||||
int ret = phy_read(phydev, MDIO_DEVAD_NONE, PHY_CONTROL1); |
||||
ret &= ~PHY_LED_MODE; |
||||
ret |= PHY_LED_MODE_ACK; |
||||
ret = phy_write(phydev, MDIO_DEVAD_NONE, PHY_CONTROL1, (u16)ret); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
const struct rmobile_sysinfo sysinfo = { |
||||
CONFIG_RMOBILE_BOARD_STRING |
||||
}; |
||||
|
||||
void reset_cpu(ulong addr) |
||||
{ |
||||
u8 val; |
||||
|
||||
i2c_set_bus_num(2); /* PowerIC connected to ch2 */ |
||||
i2c_read(CONFIG_SYS_I2C_POWERIC_ADDR, 0x13, 1, &val, 1); |
||||
val |= 0x02; |
||||
i2c_write(CONFIG_SYS_I2C_POWERIC_ADDR, 0x13, 1, &val, 1); |
||||
} |
||||
|
||||
static const struct sh_serial_platdata serial_platdata = { |
||||
.base = SCIF0_BASE, |
||||
.type = PORT_SCIF, |
||||
.clk = CONFIG_P_CLK_FREQ, |
||||
}; |
||||
|
||||
U_BOOT_DEVICE(porter_serials) = { |
||||
.name = "serial_sh", |
||||
.platdata = &serial_platdata, |
||||
}; |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,13 @@ |
||||
/*
|
||||
* Copyright (C) 2015 Renesas Electronics Corporation |
||||
* Copyright (C) 2015 Cogent Embedded, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0 |
||||
*/ |
||||
|
||||
#ifndef __QOS_H__ |
||||
#define __QOS_H__ |
||||
|
||||
void qos_init(void); |
||||
|
||||
#endif |
@ -0,0 +1,6 @@ |
||||
CONFIG_ARM=y |
||||
CONFIG_RMOBILE=y |
||||
CONFIG_TARGET_PORTER=y |
||||
CONFIG_DM=y |
||||
CONFIG_DM_SERIAL=y |
||||
CONFIG_SH_SDHI=y |
@ -0,0 +1,112 @@ |
||||
/*
|
||||
* include/configs/porter.h |
||||
* This file is Porter board configuration. |
||||
* |
||||
* Copyright (C) 2015 Renesas Electronics Corporation |
||||
* Copyright (C) 2015 Cogent Embedded, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0 |
||||
*/ |
||||
|
||||
#ifndef __PORTER_H |
||||
#define __PORTER_H |
||||
|
||||
#undef DEBUG |
||||
#define CONFIG_R8A7791 |
||||
#define CONFIG_RMOBILE_BOARD_STRING "Porter" |
||||
|
||||
#include "rcar-gen2-common.h" |
||||
|
||||
#if defined(CONFIG_RMOBILE_EXTRAM_BOOT) |
||||
#define CONFIG_SYS_TEXT_BASE 0x70000000 |
||||
#else |
||||
#define CONFIG_SYS_TEXT_BASE 0xE6304000 |
||||
#endif |
||||
|
||||
#if defined(CONFIG_RMOBILE_EXTRAM_BOOT) |
||||
#define CONFIG_SYS_INIT_SP_ADDR 0x7003FFFC |
||||
#else |
||||
#define CONFIG_SYS_INIT_SP_ADDR 0xE633fffC |
||||
#endif |
||||
#define STACK_AREA_SIZE 0xC000 |
||||
#define LOW_LEVEL_MERAM_STACK \ |
||||
(CONFIG_SYS_INIT_SP_ADDR + STACK_AREA_SIZE - 4) |
||||
|
||||
/* MEMORY */ |
||||
#define RCAR_GEN2_SDRAM_BASE 0x40000000 |
||||
#define RCAR_GEN2_SDRAM_SIZE (2048u * 1024 * 1024) |
||||
#define RCAR_GEN2_UBOOT_SDRAM_SIZE (1024u * 1024 * 1024) |
||||
|
||||
/* SCIF */ |
||||
#define CONFIG_SCIF_CONSOLE |
||||
|
||||
/* FLASH */ |
||||
#define CONFIG_SPI |
||||
#define CONFIG_SPI_FLASH_BAR |
||||
#define CONFIG_SH_QSPI |
||||
#define CONFIG_SPI_FLASH |
||||
#define CONFIG_SPI_FLASH_SPANSION |
||||
#define CONFIG_SPI_FLASH_QUAD |
||||
#define CONFIG_SYS_NO_FLASH |
||||
|
||||
/* SH Ether */ |
||||
#define CONFIG_NET_MULTI |
||||
#define CONFIG_SH_ETHER |
||||
#define CONFIG_SH_ETHER_USE_PORT 0 |
||||
#define CONFIG_SH_ETHER_PHY_ADDR 0x1 |
||||
#define CONFIG_SH_ETHER_PHY_MODE PHY_INTERFACE_MODE_RMII |
||||
#define CONFIG_SH_ETHER_CACHE_WRITEBACK |
||||
#define CONFIG_SH_ETHER_CACHE_INVALIDATE |
||||
#define CONFIG_SH_ETHER_ALIGNE_SIZE 64 |
||||
#define CONFIG_PHYLIB |
||||
#define CONFIG_PHY_MICREL |
||||
#define CONFIG_BITBANGMII |
||||
#define CONFIG_BITBANGMII_MULTI |
||||
|
||||
/* Board Clock */ |
||||
#define RMOBILE_XTAL_CLK 20000000u |
||||
#define CONFIG_SYS_CLK_FREQ RMOBILE_XTAL_CLK |
||||
#define CONFIG_SH_TMU_CLK_FREQ (CONFIG_SYS_CLK_FREQ / 2) |
||||
#define CONFIG_PLL1_CLK_FREQ (CONFIG_SYS_CLK_FREQ * 156 / 2) |
||||
#define CONFIG_P_CLK_FREQ (CONFIG_PLL1_CLK_FREQ / 24) |
||||
|
||||
#define CONFIG_SYS_TMU_CLK_DIV 4 |
||||
|
||||
/* i2c */ |
||||
#define CONFIG_CMD_I2C |
||||
#define CONFIG_SYS_I2C |
||||
#define CONFIG_SYS_I2C_SH |
||||
#define CONFIG_SYS_I2C_SLAVE 0x7F |
||||
#define CONFIG_SYS_I2C_SH_NUM_CONTROLLERS 3 |
||||
#define CONFIG_SYS_I2C_SH_SPEED0 400000 |
||||
#define CONFIG_SYS_I2C_SH_SPEED1 400000 |
||||
#define CONFIG_SYS_I2C_SH_SPEED2 400000 |
||||
#define CONFIG_SH_I2C_DATA_HIGH 4 |
||||
#define CONFIG_SH_I2C_DATA_LOW 5 |
||||
#define CONFIG_SH_I2C_CLOCK 10000000 |
||||
|
||||
#define CONFIG_SYS_I2C_POWERIC_ADDR 0x58 /* da9063 */ |
||||
|
||||
/* USB */ |
||||
#define CONFIG_USB_EHCI |
||||
#define CONFIG_USB_EHCI_RMOBILE |
||||
#define CONFIG_USB_MAX_CONTROLLER_COUNT 2 |
||||
#define CONFIG_USB_STORAGE |
||||
|
||||
/* SD */ |
||||
#define CONFIG_MMC |
||||
#define CONFIG_CMD_MMC |
||||
#define CONFIG_GENERIC_MMC |
||||
#define CONFIG_SH_SDHI_FREQ 97500000 |
||||
|
||||
/* Module stop status bits */ |
||||
/* INTC-RT */ |
||||
#define CONFIG_SMSTP0_ENA 0x00400000 |
||||
/* MSIF */ |
||||
#define CONFIG_SMSTP2_ENA 0x00002000 |
||||
/* INTC-SYS, IRQC */ |
||||
#define CONFIG_SMSTP4_ENA 0x00000180 |
||||
/* SCIF0 */ |
||||
#define CONFIG_SMSTP7_ENA 0x00200000 |
||||
|
||||
#endif /* __PORTER_H */ |
Loading…
Reference in new issue