mips: Add MIPSfpga platform support

MIPSfpga is an FPGA based dev platform.

In a nutshell, its a microAptiv cpu core with lots of Xilinx IP blocks

The FPGA dev board used is the Nexys4DDR board by Digilent.

For more information, check the Readme file in board/imgtec/xilfpga

Signed-off-by: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
Reviewed-by: Paul Burton <paul.burton@imgtec.com>
Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
master
Zubair Lutfullah Kakakhel 8 years ago committed by Daniel Schwierzeck
parent d4e85377e7
commit ebf2b9e3df
  1. 15
      arch/mips/Kconfig
  2. 15
      board/imgtec/xilfpga/Kconfig
  3. 6
      board/imgtec/xilfpga/MAINTAINERS
  4. 7
      board/imgtec/xilfpga/Makefile
  5. 55
      board/imgtec/xilfpga/README
  6. 20
      board/imgtec/xilfpga/xilfpga.c
  7. 25
      configs/imgtec_xilfpga_defconfig
  8. 68
      include/configs/imgtec_xilfpga.h

@ -73,10 +73,25 @@ config MACH_PIC32
select OF_CONTROL
select DM
config TARGET_XILFPGA
bool "Support Imagination Xilfpga"
select OF_CONTROL
select DM
select DM_SERIAL
select DM_GPIO
select DM_ETH
select SUPPORTS_LITTLE_ENDIAN
select SUPPORTS_CPU_MIPS32_R1
select SUPPORTS_CPU_MIPS32_R2
select MIPS_L1_CACHE_SHIFT_4
help
This supports IMGTEC MIPSfpga platform
endchoice
source "board/dbau1x00/Kconfig"
source "board/imgtec/malta/Kconfig"
source "board/imgtec/xilfpga/Kconfig"
source "board/micronas/vct/Kconfig"
source "board/pb1x00/Kconfig"
source "board/qemu-mips/Kconfig"

@ -0,0 +1,15 @@
if TARGET_XILFPGA
config SYS_BOARD
default "xilfpga"
config SYS_VENDOR
default "imgtec"
config SYS_CONFIG_NAME
default "imgtec_xilfpga"
config SYS_TEXT_BASE
default 0x80C00000
endif

@ -0,0 +1,6 @@
XILFPGA BOARD
M: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
S: Maintained
F: board/imgtec/xilfpga
F: include/configs/xilfpga.h
F: configs/imgtec_xilfpga_defconfig

@ -0,0 +1,7 @@
#
# Copyright (C) 2016, Imagination Technologies Ltd.
# Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
#
# SPDX-License-Identifier: GPL-2.0+
#
obj-y := xilfpga.o

@ -0,0 +1,55 @@
/*
* Copyright (C) 2016, Imagination Technologies Ltd.
*
* Zubair Lutfullah Kakakhel, Zubair.Kakakhel@imgtec.com
*/
MIPSfpga
=======================================
MIPSfpga is an FPGA based development platform by Imagination Technologies
As we are dealing with a MIPS core instantiated on an FPGA, specifications
are fluid and can be varied in RTL.
The example project provided by IMGTEC runs on the Nexys4DDR board by
Digilent powered by the ARTIX-7 FPGA by Xilinx. Relevant details about
the example project and the Nexys4DDR board:
- microAptiv UP core m14Kc
- 50MHz clock speed
- 128Mbyte DDR RAM at 0x0000_0000
- 8Kbyte RAM at 0x1000_0000
- axi_intc at 0x1020_0000
- axi_uart16550 at 0x1040_0000
- axi_gpio at 0x1060_0000
- axi_i2c at 0x10A0_0000
- custom_gpio at 0x10C0_0000
- axi_ethernetlite at 0x10E0_0000
- 8Kbyte BootRAM at 0x1FC0_0000
- 16Mbyte QPI at 0x1D00_0000
Boot protocol:
--------------
The BootRAM is a writeable "RAM" in FPGA at 0x1FC0_0000.
This is for easy reprogrammibility via JTAG.
DDR initialization is already handled by a HW IP block.
When the example project bitstream is loaded, the cpu_reset button
needs to be pressed.
The bootram initializes the cache and axi_uart
Then checks if there is anything non 0xffff_ffff at location 0x1D40_0000
If there is, then that is considered as u-boot. u-boot is copied from
0x1D40_0000 to memory and the bootram jumps into u-boot code.
At this point, the board is ready to load the Linux kernel + buildroot initramfs
This can be done in multiple ways:
1- JTAG load the binary and jump into it.
2- Load kernel stored in the QSPI flash at 0x1D80_0000
3- Load uImage via tftp. Ethernet works in u-boot.
e.g. env set server ip 192.168.154.45; dhcp uImage; bootm

@ -0,0 +1,20 @@
/*
* Imagination Technologies MIPSfpga platform code
*
* Copyright (C) 2016, Imagination Technologies Ltd.
*
* Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
*
* SPDX-License-Identifier: GPL-2.0+
*
*/
#include <common.h>
/* initialize the DDR Controller and PHY */
phys_size_t initdram(int board_type)
{
/* MIG IP block is smart and doesn't need SW
* to do any init */
return CONFIG_SYS_SDRAM_SIZE; /* in bytes */
}

@ -0,0 +1,25 @@
CONFIG_MIPS=y
CONFIG_SYS_MALLOC_F_LEN=0x600
CONFIG_TARGET_XILFPGA=y
# CONFIG_MIPS_BOOT_ENV_LEGACY is not set
CONFIG_MIPS_BOOT_FDT=y
CONFIG_DEFAULT_DEVICE_TREE="nexys4ddr"
CONFIG_BOOTDELAY=5
CONFIG_HUSH_PARSER=y
CONFIG_SYS_PROMPT="MIPSfpga # "
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_SAVEENV is not set
CONFIG_CMD_MEMINFO=y
# CONFIG_CMD_FLASH is not set
# CONFIG_CMD_FPGA is not set
CONFIG_CMD_DHCP=y
CONFIG_CMD_MII=y
CONFIG_CMD_PING=y
CONFIG_CMD_TIME=y
CONFIG_OF_EMBED=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_NETCONSOLE=y
CONFIG_CLK=y
CONFIG_XILINX_EMACLITE=y
CONFIG_SYS_NS16550=y
CONFIG_CMD_DHRYSTONE=y

@ -0,0 +1,68 @@
/*
* Copyright (C) 2016, Imagination Technologies Ltd.
*
* Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
*
* SPDX-License-Identifier: GPL-2.0+
*
* Imagination Technologies Ltd. MIPSfpga
*/
#ifndef __XILFPGA_CONFIG_H
#define __XILFPGA_CONFIG_H
/* BootROM + MIG is pretty smart. DDR and Cache initialized */
#define CONFIG_SKIP_LOWLEVEL_INIT
/*--------------------------------------------
* CPU configuration
*/
/* CPU Timer rate */
#define CONFIG_SYS_MIPS_TIMER_FREQ 50000000
/* Cache Configuration */
#define CONFIG_SYS_MIPS_CACHE_MODE CONF_CM_CACHABLE_NONCOHERENT
/*----------------------------------------------------------------------
* Memory Layout
*/
/* SDRAM Configuration (for final code, data, stack, heap) */
#define CONFIG_SYS_SDRAM_BASE 0x80000000
#define CONFIG_SYS_SDRAM_SIZE 0x08000000 /* 128 Mbytes */
#define CONFIG_SYS_INIT_SP_ADDR \
(CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_SDRAM_SIZE - 0x1000)
#define CONFIG_SYS_MALLOC_LEN (256 << 10)
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
#define CONFIG_SYS_LOAD_ADDR 0x80500000 /* default load address */
/*----------------------------------------------------------------------
* Commands
*/
#define CONFIG_SYS_LONGHELP /* undef to save memory */
/*-------------------------------------------------
* FLASH configuration
*/
#define CONFIG_SYS_NO_FLASH
/*------------------------------------------------------------
* Console Configuration
*/
#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
#define CONFIG_SYS_MAXARGS 16 /* max number of command args*/
#define CONFIG_BAUDRATE 115200
/* -------------------------------------------------
* Environment
*/
#define CONFIG_ENV_IS_NOWHERE 1
#define CONFIG_ENV_SIZE 0x4000
/* ---------------------------------------------------------------------
* Board boot configuration
*/
#define CONFIG_TIMESTAMP /* Print image info with timestamp */
#endif /* __XILFPGA_CONFIG_H */
Loading…
Cancel
Save