mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-04 10:30:32 +00:00
dc4d4aa14b
Scan Manager driver will be called to configure the IOCSR scan chain. This configuration will setup the IO buffer settings Signed-off-by: Chin Liang See <clsee@altera.com> Cc: Dinh Nguyen <dinguyen@altera.com> Cc: Wolfgang Denk <wd@denx.de> CC: Pavel Machek <pavel@denx.de> Cc: Tom Rini <trini@ti.com> Cc: Albert Aribaud <albert.u.boot@aribaud.net>
90 lines
2.3 KiB
C
90 lines
2.3 KiB
C
/*
|
|
* Copyright (C) 2013 Altera Corporation <www.altera.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#ifndef _SCAN_MANAGER_H_
|
|
#define _SCAN_MANAGER_H_
|
|
|
|
struct socfpga_scan_manager {
|
|
u32 stat;
|
|
u32 en;
|
|
u32 padding[2];
|
|
u32 fifo_single_byte;
|
|
u32 fifo_double_byte;
|
|
u32 fifo_quad_byte;
|
|
};
|
|
|
|
/*
|
|
* Shift count to get number of IO scan chain data in granularity
|
|
* of 128-bit ( N / 128 )
|
|
*/
|
|
#define IO_SCAN_CHAIN_128BIT_SHIFT 7
|
|
|
|
/*
|
|
* Mask to get residual IO scan chain data in
|
|
* granularity of 128-bit ( N mod 128 )
|
|
*/
|
|
#define IO_SCAN_CHAIN_128BIT_MASK 0x7F
|
|
|
|
/*
|
|
* Shift count to get number of IO scan chain
|
|
* data in granularity of 32-bit ( N / 32 )
|
|
*/
|
|
#define IO_SCAN_CHAIN_32BIT_SHIFT 5
|
|
|
|
/*
|
|
* Mask to get residual IO scan chain data in
|
|
* granularity of 32-bit ( N mod 32 )
|
|
*/
|
|
#define IO_SCAN_CHAIN_32BIT_MASK 0x1F
|
|
|
|
/* Byte mask */
|
|
#define IO_SCAN_CHAIN_BYTE_MASK 0xFF
|
|
|
|
/* 24-bits (3 bytes) IO scan chain payload definition */
|
|
#define IO_SCAN_CHAIN_PAYLOAD_24BIT 24
|
|
|
|
/*
|
|
* Maximum length of TDI_TDO packet payload is 128 bits,
|
|
* represented by (length - 1) in TDI_TDO header
|
|
*/
|
|
#define TDI_TDO_MAX_PAYLOAD 127
|
|
|
|
/* TDI_TDO packet header for IO scan chain program */
|
|
#define TDI_TDO_HEADER_FIRST_BYTE 0x80
|
|
|
|
/* Position of second command byte for TDI_TDO packet */
|
|
#define TDI_TDO_HEADER_SECOND_BYTE_SHIFT 8
|
|
|
|
/*
|
|
* Maximum polling loop to wait for IO scan chain engine
|
|
* becomes idle to prevent infinite loop
|
|
*/
|
|
#define SCAN_MAX_DELAY 100
|
|
|
|
#define SCANMGR_STAT_ACTIVE_GET(x) (((x) & 0x80000000) >> 31)
|
|
#define SCANMGR_STAT_WFIFOCNT_GET(x) (((x) & 0x70000000) >> 28)
|
|
|
|
/*
|
|
* Program HPS IO Scan Chain
|
|
* io_scan_chain_id - IO scan chain ID
|
|
* io_scan_chain_len_in_bits - IO scan chain length in bits
|
|
* iocsr_scan_chain - IO scan chain table
|
|
*/
|
|
uint32_t scan_mgr_io_scan_chain_prg(
|
|
uint32_t io_scan_chain_id,
|
|
uint32_t io_scan_chain_len_in_bits,
|
|
const uint32_t *iocsr_scan_chain);
|
|
|
|
extern const uint32_t iocsr_scan_chain0_table[
|
|
((CONFIG_HPS_IOCSR_SCANCHAIN0_LENGTH / 32) + 1)];
|
|
extern const uint32_t iocsr_scan_chain1_table[
|
|
((CONFIG_HPS_IOCSR_SCANCHAIN1_LENGTH / 32) + 1)];
|
|
extern const uint32_t iocsr_scan_chain2_table[
|
|
((CONFIG_HPS_IOCSR_SCANCHAIN2_LENGTH / 32) + 1)];
|
|
extern const uint32_t iocsr_scan_chain3_table[
|
|
((CONFIG_HPS_IOCSR_SCANCHAIN3_LENGTH / 32) + 1)];
|
|
|
|
#endif /* _SCAN_MANAGER_H_ */
|