mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-15 01:17:39 +00:00
1085bb3cba
Add support for loading FPGA bitstream to get DDR up running before U-Boot is loaded into DDR. Boot device initialization, generic firmware loader and SPL FAT support are required for this whole mechanism to work. Signed-off-by: Tien Fong Chee <tien.fong.chee@intel.com>
135 lines
4.3 KiB
C
135 lines
4.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2017-2019 Intel Corporation <www.intel.com>
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#include <asm/cache.h>
|
|
#include <altera.h>
|
|
#include <image.h>
|
|
|
|
#ifndef _FPGA_MANAGER_ARRIA10_H_
|
|
#define _FPGA_MANAGER_ARRIA10_H_
|
|
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_CRC_ERROR_SET_MSK BIT(0)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_EARLY_USERMODE_SET_MSK BIT(1)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_USERMODE_SET_MSK BIT(2)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_INITDONE_OE_SET_MSK BIT(3)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_NSTATUS_PIN_SET_MSK BIT(4)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_NSTATUS_OE_SET_MSK BIT(5)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_CONDONE_PIN_SET_MSK BIT(6)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_CONDONE_OE_SET_MSK BIT(7)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_CVP_CONF_DONE_SET_MSK BIT(8)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_PR_READY_SET_MSK BIT(9)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_PR_DONE_SET_MSK BIT(10)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_PR_ERROR_SET_MSK BIT(11)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_NCONFIG_PIN_SET_MSK BIT(12)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_NCEO_OE_SET_MSK BIT(13)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL0_SET_MSK BIT(16)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL1_SET_MSK BIT(17)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL2_SET_MSK BIT(18)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL_SET_MSD (\
|
|
ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL0_SET_MSK |\
|
|
ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL1_SET_MSK |\
|
|
ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL2_SET_MSK)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_IMGCFG_FIFOEMPTY_SET_MSK BIT(24)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_IMGCFG_FIFOFULL_SET_MSK BIT(25)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_JTAGM_SET_MSK BIT(28)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_EMR_SET_MSK BIT(29)
|
|
#define ALT_FPGAMGR_IMGCFG_STAT_F2S_MSEL0_LSB 16
|
|
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_00_S2F_NENABLE_NCONFIG_SET_MSK BIT(0)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_00_S2F_NENABLE_NSTATUS_SET_MSK BIT(1)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_00_S2F_NENABLE_CONDONE_SET_MSK BIT(2)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_00_S2F_NCONFIG_SET_MSK BIT(8)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_00_S2F_NSTATUS_OE_SET_MSK BIT(16)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_00_S2F_CONDONE_OE_SET_MSK BIT(24)
|
|
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_01_S2F_NENABLE_CONFIG_SET_MSK BIT(0)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_01_S2F_PR_REQUEST_SET_MSK BIT(16)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_01_S2F_NCE_SET_MSK BIT(24)
|
|
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_02_EN_CFG_CTRL_SET_MSK BIT(0)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_02_EN_CFG_DATA_SET_MSK BIT(8)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_02_CDRATIO_SET_MSK 0x00030000
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_02_CFGWIDTH_SET_MSK BIT(24)
|
|
#define ALT_FPGAMGR_IMGCFG_CTL_02_CDRATIO_LSB 16
|
|
|
|
#define FPGA_SOCFPGA_A10_RBF_UNENCRYPTED 0xa65c
|
|
#define FPGA_SOCFPGA_A10_RBF_ENCRYPTED 0xa65d
|
|
#define FPGA_SOCFPGA_A10_RBF_PERIPH 0x0001
|
|
#define FPGA_SOCFPGA_A10_RBF_CORE 0x8001
|
|
#ifndef __ASSEMBLY__
|
|
|
|
struct socfpga_fpga_manager {
|
|
u32 _pad_0x0_0x7[2];
|
|
u32 dclkcnt;
|
|
u32 dclkstat;
|
|
u32 gpo;
|
|
u32 gpi;
|
|
u32 misci;
|
|
u32 _pad_0x1c_0x2f[5];
|
|
u32 emr_data0;
|
|
u32 emr_data1;
|
|
u32 emr_data2;
|
|
u32 emr_data3;
|
|
u32 emr_data4;
|
|
u32 emr_data5;
|
|
u32 emr_valid;
|
|
u32 emr_en;
|
|
u32 jtag_config;
|
|
u32 jtag_status;
|
|
u32 jtag_kick;
|
|
u32 _pad_0x5c_0x5f;
|
|
u32 jtag_data_w;
|
|
u32 jtag_data_r;
|
|
u32 _pad_0x68_0x6f[2];
|
|
u32 imgcfg_ctrl_00;
|
|
u32 imgcfg_ctrl_01;
|
|
u32 imgcfg_ctrl_02;
|
|
u32 _pad_0x7c_0x7f;
|
|
u32 imgcfg_stat;
|
|
u32 intr_masked_status;
|
|
u32 intr_mask;
|
|
u32 intr_polarity;
|
|
u32 dma_config;
|
|
u32 imgcfg_fifo_status;
|
|
};
|
|
|
|
enum rbf_type {
|
|
unknown,
|
|
periph_section,
|
|
core_section
|
|
};
|
|
|
|
enum rbf_security {
|
|
invalid,
|
|
unencrypted,
|
|
encrypted
|
|
};
|
|
|
|
struct rbf_info {
|
|
enum rbf_type section;
|
|
enum rbf_security security;
|
|
};
|
|
|
|
struct fpga_loadfs_info {
|
|
fpga_fs_info *fpga_fsinfo;
|
|
u32 remaining;
|
|
u32 offset;
|
|
struct rbf_info rbfinfo;
|
|
};
|
|
|
|
/* Functions */
|
|
int fpgamgr_program_init(u32 * rbf_data, size_t rbf_size);
|
|
int fpgamgr_program_finish(void);
|
|
int is_fpgamgr_user_mode(void);
|
|
int fpgamgr_wait_early_user_mode(void);
|
|
const char *get_fpga_filename(void);
|
|
int is_fpgamgr_early_user_mode(void);
|
|
int socfpga_loadfs(fpga_fs_info *fpga_fsinfo, const void *buf, size_t bsize,
|
|
u32 offset);
|
|
void fpgamgr_program(const void *buf, size_t bsize, u32 offset);
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* _FPGA_MANAGER_ARRIA10_H_ */
|