mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-14 17:07:38 +00:00
edb4702533
This code is ported from the Marvell bin_hdr code into mainline SPL U-Boot. It needs to be executed very early so that the devices connected to the serdes PHY are configured correctly. Signed-off-by: Stefan Roese <sr@denx.de>
65 lines
1.6 KiB
C
65 lines
1.6 KiB
C
/*
|
|
* Copyright (C) Marvell International Ltd. and its affiliates
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0
|
|
*/
|
|
|
|
#ifndef _SEQ_EXEC_H
|
|
#define _SEQ_EXEC_H
|
|
|
|
#define NA 0xff
|
|
#define DEFAULT_PARAM 0
|
|
#define MV_BOARD_TCLK_ERROR 0xffffffff
|
|
|
|
#define NO_DATA 0xffffffff
|
|
#define MAX_DATA_ARRAY 5
|
|
#define FIRST_CELL 0
|
|
|
|
/* Operation types */
|
|
enum mv_op {
|
|
WRITE_OP,
|
|
DELAY_OP,
|
|
POLL_OP,
|
|
};
|
|
|
|
/* Operation parameters */
|
|
struct op_params {
|
|
u32 unit_base_reg;
|
|
u32 unit_offset;
|
|
u32 mask;
|
|
u32 data[MAX_DATA_ARRAY]; /* data array */
|
|
u8 wait_time; /* msec */
|
|
u16 num_of_loops; /* for polling only */
|
|
};
|
|
|
|
/*
|
|
* Sequence parameters. Each sequence contains:
|
|
* 1. Sequence id.
|
|
* 2. Sequence size (total amount of operations during the sequence)
|
|
* 3. a series of operations. operations can be write, poll or delay
|
|
* 4. index in the data array (the entry where the relevant data sits)
|
|
*/
|
|
struct cfg_seq {
|
|
struct op_params *op_params_ptr;
|
|
u8 cfg_seq_size;
|
|
u8 data_arr_idx;
|
|
};
|
|
|
|
extern struct cfg_seq serdes_seq_db[];
|
|
|
|
/*
|
|
* A generic function type for executing an operation (write, poll or delay)
|
|
*/
|
|
typedef int (*op_execute_func_ptr)(u32 serdes_num, struct op_params *params,
|
|
u32 data_arr_idx);
|
|
|
|
/* Specific functions for executing each operation */
|
|
int write_op_execute(u32 serdes_num, struct op_params *params,
|
|
u32 data_arr_idx);
|
|
int delay_op_execute(u32 serdes_num, struct op_params *params,
|
|
u32 data_arr_idx);
|
|
int poll_op_execute(u32 serdes_num, struct op_params *params, u32 data_arr_idx);
|
|
enum mv_op get_cfg_seq_op(struct op_params *params);
|
|
int mv_seq_exec(u32 serdes_num, u32 seq_id);
|
|
|
|
#endif /*_SEQ_EXEC_H*/
|