On Monday, November 02, 2015 at 01:26:09 PM, Stefan Roese wrote: > The SR1500 board is a CycloneV based board, similar to the EBV > SoCrates, equipped with the following devices: > > - SPI NOR > - eMMC > - Ethernet > > Signed-off-by: Stefan Roese <s...@denx.de> > Cc: Marek Vasut <ma...@denx.de> > Cc: Pavel Machek <pa...@denx.de> > Cc: Dinh Nguyen <dingu...@opensource.altera.com> > --- > v3: > - Removed README.socfpga changes > - Removed board specific commands
Really ? ;-) > - Change CONFIG_LOADADDR to 0x01000000 as suggested by Dinh > > v2: > - Addressed various review comments from Marek: > - Added chapter about SPL integration for SoC FPGA in doc/README.socfpga > - Delay after PHY reset deassertion added > - Reshuffle of the code for the PHY test code (fixes and cleanup) > - Cleanup of the board config header > > arch/arm/dts/Makefile | 4 +- > arch/arm/dts/socfpga_cyclone5_sr1500.dts | 101 +++++ > arch/arm/mach-socfpga/Kconfig | 6 + > board/sr1500/MAINTAINERS | 6 + > board/sr1500/Makefile | 7 + > board/sr1500/qts/iocsr_config.h | 660 > +++++++++++++++++++++++++++++++ board/sr1500/qts/pinmux_config.h | > 219 ++++++++++ > board/sr1500/qts/pll_config.h | 85 ++++ > board/sr1500/qts/sdram_config.h | 341 ++++++++++++++++ > board/sr1500/socfpga.c | 151 +++++++ > configs/socfpga_sr1500_defconfig | 17 + > include/configs/socfpga_sr1500.h | 113 ++++++ > 12 files changed, 1709 insertions(+), 1 deletion(-) > create mode 100644 arch/arm/dts/socfpga_cyclone5_sr1500.dts > create mode 100644 board/sr1500/MAINTAINERS > create mode 100644 board/sr1500/Makefile > create mode 100644 board/sr1500/qts/iocsr_config.h > create mode 100644 board/sr1500/qts/pinmux_config.h > create mode 100644 board/sr1500/qts/pll_config.h > create mode 100644 board/sr1500/qts/sdram_config.h > create mode 100644 board/sr1500/socfpga.c > create mode 100644 configs/socfpga_sr1500_defconfig > create mode 100644 include/configs/socfpga_sr1500.h > > diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile > index ddc6a05..b77aab48 100644 > --- a/arch/arm/dts/Makefile > +++ b/arch/arm/dts/Makefile > @@ -74,7 +74,9 @@ dtb-$(CONFIG_ARCH_SOCFPGA) += > \ > socfpga_cyclone5_socdk.dtb \ > socfpga_cyclone5_de0_nano_soc.dtb \ > socfpga_cyclone5_sockit.dtb \ > - socfpga_cyclone5_socrates.dtb > + socfpga_cyclone5_socrates.dtb \ > + socfpga_cyclone5_sr1500.dtb > + > dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb > dtb-$(CONFIG_TARGET_BEAGLE_X15) += am57xx-beagle-x15.dtb > dtb-$(CONFIG_TARGET_STV0991) += stv0991.dtb > diff --git a/arch/arm/dts/socfpga_cyclone5_sr1500.dts > b/arch/arm/dts/socfpga_cyclone5_sr1500.dts new file mode 100644 > index 0000000..3729ca0 > --- /dev/null > +++ b/arch/arm/dts/socfpga_cyclone5_sr1500.dts > @@ -0,0 +1,101 @@ > +/* > + * Copyright (C) 2015 Stefan Roese <s...@denx.de> > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include "socfpga_cyclone5.dtsi" > + > +/ { > + model = "SoCFPGA Cyclone V SR1500"; > + compatible = "anonymous,socfpga-sr1500", "altr,socfpga-cyclone5", > "altr,socfpga"; + > + chosen { > + bootargs = "console=ttyS0,115200"; > + }; > + > + aliases { > + /* > + * This allows the ethaddr uboot environmnet variable > + * contents to be added to the gmac1 device tree blob. > + */ > + ethernet0 = &gmac1; > + }; > + > + memory@0 { > + name = "memory"; > + device_type = "memory"; > + reg = <0x0 0x40000000>; /* 1GB */ > + }; > + > + soc { > + u-boot,dm-pre-reloc; > + }; > +}; > + > +&gmac1 { > + status = "okay"; > + phy-mode = "rgmii"; > +}; > + > +&gpio0 { > + status = "okay"; > +}; > + > +&gpio1 { > + status = "okay"; > +}; > + > +&gpio2 { > + status = "okay"; > +}; > + > +&i2c0 { > + status = "okay"; > + speed-mode = <0>; > +}; > + > +&i2c1 { > + status = "okay"; > + speed-mode = <0>; > +}; > + > +&mmc0 { > + status = "okay"; > + bus-width = <8>; > + u-boot,dm-pre-reloc; > +}; > + > +&uart0 { > + status = "okay"; > +}; > + > +&usb1 { > + status = "okay"; > +}; > + > +&watchdog0 { > + status = "okay"; > +}; > + > +&qspi { > + status = "okay"; > + u-boot,dm-pre-reloc; > + > + flash0: n25q00@0 { > + u-boot,dm-pre-reloc; > + #address-cells = <1>; > + #size-cells = <1>; > + compatible = "n25q00", "spi-flash"; > + reg = <0>; /* chip select */ > + spi-max-frequency = <50000000>; > + m25p,fast-read; > + page-size = <256>; > + block-size = <16>; /* 2^16, 64KB */ > + read-delay = <4>; /* delay value in read data capture register */ > + tshsl-ns = <50>; > + tsd2d-ns = <50>; > + tchsh-ns = <4>; > + tslch-ns = <4>; > + }; > +}; [...] > diff --git a/board/sr1500/socfpga.c b/board/sr1500/socfpga.c > new file mode 100644 > index 0000000..35d68a9 > --- /dev/null > +++ b/board/sr1500/socfpga.c > @@ -0,0 +1,151 @@ > +/* > + * Copyright (C) 2015 Stefan Roese <s...@denx.de> > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <i2c.h> > +#include <miiphy.h> > +#include <asm/arch/reset_manager.h> > +#include <asm/gpio.h> > +#include <asm/io.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +void s_init(void) {} > + > +/* > + * Miscellaneous platform dependent initialisations > + */ > +int board_init(void) > +{ > + /* Address of boot parameters for ATAG (if ATAG is used) */ > + gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; > + > + return 0; > +} > + > +int board_early_init_f(void) > +{ > + int ret; > + > + /* Reset the Marvell PHY 88E1510 */ > + ret = gpio_request(63, "PHY reset"); > + if (ret) > + return ret; > + > + gpio_direction_output(63, 0); > + mdelay(10); > + gpio_set_value(63, 1); > + mdelay(10); > + > + return 0; > +} > + > +#define CONFIG_SYS_IDT_CLK_ADDR 0x6a > + > +static int do_clksave(cmd_tbl_t *cmdtp, int flag, int argc, char *const > argv[]) +{ > + u8 buf[1]; > + > + buf[0] = 0x01; > + i2c_write(CONFIG_SYS_IDT_CLK_ADDR, 0, 0, buf, 1); > + > + return 0; > +} > + > +U_BOOT_CMD(clksave, 1, 0, do_clksave, > + "IDT 5V49EE702 Progsave command", ""); > + > +#define NET_DEV_NAME "ethernet@ff702000" > +#define MII_MARVELL_PHY_PAGE 22 > +#define PHY_DIAG_START (1 << 15) > +#define PHY_DIAG_BUSY (1 << 11) > +#define PHY_DIAG_TIMEOUT 5000 /* 5 seconds */ > + > +static char *pair_state(int val, char *str) > +{ > + switch (val) { > + case 0x00: > + strcpy(str, "Invalid"); > + break; > + case 0x01: > + strcpy(str, "Pair Ok"); > + break; > + case 0x02: > + strcpy(str, "Pair Open"); > + break; > + case 0x03: > + strcpy(str, "Same Pair Short"); > + break; > + case 0x04: > + strcpy(str, "Cross Pair Short"); > + break; > + case 0x09: > + strcpy(str, "Pair Busy"); > + break; > + default: > + strcpy(str, "Reserved"); > + break; > + }; > + > + return str; > +} > + > +static int do_phytest(cmd_tbl_t *cmdtp, int flag, int argc, char *const > argv[]) +{ > + const char devname[] = NET_DEV_NAME; > + unsigned long ts; > + char str[32]; > + u8 addr = 0; > + u16 data; > + u16 status; > + u16 oldpage; > + int i; > + > + /* Save current page register */ > + miiphy_read(devname, addr, MII_MARVELL_PHY_PAGE, &oldpage); > + > + /* > + * Run cable disgnostics > + */ > + printf("Running cable diagnostic test..."); > + miiphy_write(devname, addr, MII_MARVELL_PHY_PAGE, 7); > + miiphy_write(devname, addr, 21, PHY_DIAG_START); > + > + ts = get_timer(0); > + do { > + miiphy_read(devname, addr, 21, &data); > + if ((data & PHY_DIAG_BUSY) != PHY_DIAG_BUSY) > + break; > + > + mdelay(1); > + } while (get_timer(ts) < PHY_DIAG_TIMEOUT); > + printf("done!\n"); > + > + miiphy_read(devname, addr, 20, &status); > + > + for (i = 0; i < 4; i++) { > + int val; > + > + val = (status >> (i * 4)) & 0x000f; > + pair_state(val, str); > + printf("Pair %d: %s", i, str); > + > + /* Only print fault length if not okay */ > + if (val != 0x01) { > + miiphy_read(devname, addr, 16 + i, &data); > + printf(" - Length to fault %d cm", data); > + } > + printf("\n"); > + } > + > + /* Restore original page */ > + miiphy_write(devname, addr, MII_MARVELL_PHY_PAGE, oldpage); > + > + return 0; > +} > + > +U_BOOT_CMD(phytest, 1, 1, do_phytest, > + "Marvell PHY test command - dump some values", ""); [...] Reviewed-by: Marek Vasut <ma...@denx.de> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot