mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
ARM: legoev3: convert to driver model
This converts LEGO MINDSTORMS EV3 to the driver model. MMC, SERIAL, SPI and SPI_FLASH are converted. The device tree contains only the minimal nodes required by U-Boot since the size of U-Boot is limited to 256K on this device. Signed-off-by: David Lechner <david@lechnology.com>
This commit is contained in:
parent
fb9a1ffef3
commit
1d259e4d68
6 changed files with 102 additions and 27 deletions
|
@ -30,7 +30,8 @@ dtb-$(CONFIG_EXYNOS7420) += exynos7420-espresso7420.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_ARCH_DAVINCI) += \
|
dtb-$(CONFIG_ARCH_DAVINCI) += \
|
||||||
da850-evm.dtb \
|
da850-evm.dtb \
|
||||||
da850-lcdk.dtb
|
da850-lcdk.dtb \
|
||||||
|
da850-lego-ev3.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_KIRKWOOD) += \
|
dtb-$(CONFIG_KIRKWOOD) += \
|
||||||
kirkwood-atl-sbx81lifkw.dtb \
|
kirkwood-atl-sbx81lifkw.dtb \
|
||||||
|
|
89
arch/arm/dts/da850-lego-ev3.dts
Normal file
89
arch/arm/dts/da850-lego-ev3.dts
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* Device tree for LEGO MINDSTORMS EV3
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 David Lechner <david@lechnology.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*
|
||||||
|
* This is an absolute minimum device tree instead of using the one from Linux
|
||||||
|
* because the bootloader on the EV3 is limited to 256k. This saves us >10k.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "lego,ev3", "ti,da850";
|
||||||
|
model = "LEGO MINDSTORMS EV3";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial1 = &serial1;
|
||||||
|
spi0 = &spi0;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = &serial1;
|
||||||
|
};
|
||||||
|
|
||||||
|
memory {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0xc0000000 0x04000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
arm {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges;
|
||||||
|
intc: interrupt-controller@fffee000 {
|
||||||
|
compatible = "ti,cp-intc";
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
ti,intc-size = <101>;
|
||||||
|
reg = <0xfffee000 0x2000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
soc@1c00000 {
|
||||||
|
compatible = "simple-bus";
|
||||||
|
model = "da850";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0x0 0x01c00000 0x400000>;
|
||||||
|
interrupt-parent = <&intc>;
|
||||||
|
|
||||||
|
mmc0: mmc@40000 {
|
||||||
|
compatible = "ti,da830-mmc";
|
||||||
|
reg = <0x40000 0x1000>;
|
||||||
|
cap-sd-highspeed;
|
||||||
|
cap-mmc-highspeed;
|
||||||
|
interrupts = <16>;
|
||||||
|
max-frequency = <50000000>;
|
||||||
|
bus-width = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0: spi@41000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "ti,da830-spi";
|
||||||
|
reg = <0x41000 0x1000>;
|
||||||
|
num-cs = <6>;
|
||||||
|
ti,davinci-spi-intr-line = <1>;
|
||||||
|
interrupts = <20>;
|
||||||
|
|
||||||
|
flash@0 {
|
||||||
|
compatible = "micron,n25q128a13", "jedec,spi-nor", "spi-flash";
|
||||||
|
reg = <0>;
|
||||||
|
spi-max-frequency = <50000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
serial1: serial@10c000 {
|
||||||
|
compatible = "ti,da830-uart", "ns16550a";
|
||||||
|
reg = <0x10c000 0x100>;
|
||||||
|
reg-io-width = <4>;
|
||||||
|
reg-shift = <2>;
|
||||||
|
interrupts = <53>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -50,3 +50,6 @@ software or a 3rd party program capable of uploading a firmware file.
|
||||||
If you are booting from the microSD card, it is enough to just write uboot.bin
|
If you are booting from the microSD card, it is enough to just write uboot.bin
|
||||||
to the flash. If you are not using a microSD card, you will need to create an
|
to the flash. If you are not using a microSD card, you will need to create an
|
||||||
image file using the layout described above.
|
image file using the layout described above.
|
||||||
|
|
||||||
|
IMPORTANT: The EEPROM bootloader only copies 256k, so u-boot.img must not
|
||||||
|
exceed that size!
|
||||||
|
|
|
@ -25,11 +25,6 @@
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
||||||
#ifdef CONFIG_MMC_DAVINCI
|
|
||||||
#include <mmc.h>
|
|
||||||
#include <asm/arch/sdmmc_defs.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
u8 board_rev;
|
u8 board_rev;
|
||||||
|
@ -38,23 +33,6 @@ u8 board_rev;
|
||||||
#define EEPROM_REV_OFFSET 0x3F00
|
#define EEPROM_REV_OFFSET 0x3F00
|
||||||
#define EEPROM_MAC_OFFSET 0x3F06
|
#define EEPROM_MAC_OFFSET 0x3F06
|
||||||
|
|
||||||
#ifdef CONFIG_MMC_DAVINCI
|
|
||||||
static struct davinci_mmc mmc_sd0 = {
|
|
||||||
.reg_base = (struct davinci_mmc_regs *)DAVINCI_MMC_SD0_BASE,
|
|
||||||
.host_caps = MMC_MODE_4BIT, /* DA850 supports only 4-bit SD/MMC */
|
|
||||||
.voltages = MMC_VDD_32_33 | MMC_VDD_33_34,
|
|
||||||
.version = MMC_CTLR_VERSION_2,
|
|
||||||
};
|
|
||||||
|
|
||||||
int board_mmc_init(bd_t *bis)
|
|
||||||
{
|
|
||||||
mmc_sd0.input_clk = clk_get(DAVINCI_MMCSD_CLKID);
|
|
||||||
|
|
||||||
/* Add slot-0 to mmc subsystem */
|
|
||||||
return davinci_mmc_init(bis, &mmc_sd0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const struct pinmux_resource pinmuxes[] = {
|
const struct pinmux_resource pinmuxes[] = {
|
||||||
PINMUX_ITEM(spi0_pins_base),
|
PINMUX_ITEM(spi0_pins_base),
|
||||||
PINMUX_ITEM(spi0_pins_scs0),
|
PINMUX_ITEM(spi0_pins_scs0),
|
||||||
|
|
|
@ -23,12 +23,19 @@ CONFIG_CMD_SPI=y
|
||||||
CONFIG_CMD_EXT4=y
|
CONFIG_CMD_EXT4=y
|
||||||
CONFIG_CMD_FAT=y
|
CONFIG_CMD_FAT=y
|
||||||
CONFIG_CMD_DIAG=y
|
CONFIG_CMD_DIAG=y
|
||||||
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="da850-lego-ev3"
|
||||||
|
CONFIG_DM=y
|
||||||
|
# CONFIG_DM_DEVICE_REMOVE is not set
|
||||||
CONFIG_SYS_I2C_DAVINCI=y
|
CONFIG_SYS_I2C_DAVINCI=y
|
||||||
|
CONFIG_DM_MMC=y
|
||||||
|
CONFIG_DM_SPI_FLASH=y
|
||||||
CONFIG_SPI_FLASH=y
|
CONFIG_SPI_FLASH=y
|
||||||
CONFIG_SF_DEFAULT_SPEED=50000000
|
CONFIG_SF_DEFAULT_SPEED=50000000
|
||||||
CONFIG_SPI_FLASH_STMICRO=y
|
CONFIG_SPI_FLASH_STMICRO=y
|
||||||
|
CONFIG_DM_SERIAL=y
|
||||||
CONFIG_SYS_NS16550=y
|
CONFIG_SYS_NS16550=y
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
|
CONFIG_DM_SPI=y
|
||||||
CONFIG_DAVINCI_SPI=y
|
CONFIG_DAVINCI_SPI=y
|
||||||
CONFIG_OF_LIBFDT=y
|
|
||||||
# CONFIG_EFI_LOADER is not set
|
# CONFIG_EFI_LOADER is not set
|
||||||
|
|
|
@ -42,11 +42,8 @@
|
||||||
* Serial Driver info
|
* Serial Driver info
|
||||||
*/
|
*/
|
||||||
#define CONFIG_SYS_NS16550_SERIAL
|
#define CONFIG_SYS_NS16550_SERIAL
|
||||||
#define CONFIG_SYS_NS16550_REG_SIZE -4 /* NS16550 register size */
|
|
||||||
#define CONFIG_SYS_NS16550_COM1 DAVINCI_UART1_BASE /* Base address of UART1 */
|
|
||||||
#define CONFIG_SYS_NS16550_CLK clk_get(DAVINCI_UART2_CLKID)
|
#define CONFIG_SYS_NS16550_CLK clk_get(DAVINCI_UART2_CLKID)
|
||||||
|
|
||||||
#define CONFIG_SYS_SPI_BASE DAVINCI_SPI0_BASE
|
|
||||||
#define CONFIG_SYS_SPI_CLK clk_get(DAVINCI_SPI0_CLKID)
|
#define CONFIG_SYS_SPI_CLK clk_get(DAVINCI_SPI0_CLKID)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue