mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 03:58:17 +00:00 
			
		
		
		
	Sphinx expects Return: and not @return to indicate a return value.
find . -name '*.c' -exec \
sed -i 's/^\(\s\)\*\(\s*\)@return\(\s\)/\1*\2Return:\3/' {} \;
find . -name '*.h' -exec \
sed -i 's/^\(\s\)\*\(\s*\)@return\(\s\)/\1*\2Return:\3/' {} \;
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
		
	
			
		
			
				
	
	
		
			885 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			885 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| /*
 | |
|  * Copyright (C) 2020 Marvell International Ltd.
 | |
|  *
 | |
|  * Helper Functions for the Configuration Framework
 | |
|  *
 | |
|  * OCTEON_CN68XX introduces a flexible hw interface configuration
 | |
|  * scheme. To cope with this change and the requirements of
 | |
|  * configurability for other system resources, e.g., IPD/PIP pknd and
 | |
|  * PKO ports and queues, a configuration framework for the SDK is
 | |
|  * designed. It has two goals: first to recognize and establish the
 | |
|  * default configuration and, second, to allow the user to define key
 | |
|  * parameters in a high-level language.
 | |
|  *
 | |
|  * The helper functions query the QLM setup to help achieving the
 | |
|  * first goal.
 | |
|  *
 | |
|  * The second goal is accomplished by generating
 | |
|  * cvmx_helper_cfg_init() from a high-level lanaguage.
 | |
|  */
 | |
| 
 | |
| #ifndef __CVMX_HELPER_CFG_H__
 | |
| #define __CVMX_HELPER_CFG_H__
 | |
| 
 | |
| #include "cvmx-helper-util.h"
 | |
| 
 | |
| #define CVMX_HELPER_CFG_MAX_PKO_PORT	   128
 | |
| #define CVMX_HELPER_CFG_MAX_PIP_BPID	   64
 | |
| #define CVMX_HELPER_CFG_MAX_PIP_PKND	   64
 | |
| #define CVMX_HELPER_CFG_MAX_PKO_QUEUES	   256
 | |
| #define CVMX_HELPER_CFG_MAX_PORT_PER_IFACE 256
 | |
| 
 | |
| #define CVMX_HELPER_CFG_INVALID_VALUE -1
 | |
| 
 | |
| #define cvmx_helper_cfg_assert(cond)                                                               \
 | |
| 	do {                                                                                       \
 | |
| 		if (!(cond)) {                                                                     \
 | |
| 			debug("cvmx_helper_cfg_assert (%s) at %s:%d\n", #cond, __FILE__,           \
 | |
| 			      __LINE__);                                                           \
 | |
| 		}                                                                                  \
 | |
| 	} while (0)
 | |
| 
 | |
| extern int cvmx_npi_max_pknds;
 | |
| 
 | |
| /*
 | |
|  * Config Options
 | |
|  *
 | |
|  * These options have to be set via cvmx_helper_cfg_opt_set() before calling the
 | |
|  * routines that set up the hw. These routines process the options and set them
 | |
|  * correctly to take effect at runtime.
 | |
|  */
 | |
| enum cvmx_helper_cfg_option {
 | |
| 	CVMX_HELPER_CFG_OPT_USE_DWB, /*
 | |
| 					 * Global option to control if
 | |
| 					 * the SDK configures units (DMA,
 | |
| 					 * SSO, and PKO) to send don't
 | |
| 					 * write back (DWB) requests for
 | |
| 					 * freed buffers. Set to 1/0 to
 | |
| 					 * enable/disable DWB.
 | |
| 					 *
 | |
| 					 * For programs that fit inside
 | |
| 					 * L2, sending DWB just causes
 | |
| 					 * more L2 operations without
 | |
| 					 * benefit.
 | |
| 					 */
 | |
| 
 | |
| 	CVMX_HELPER_CFG_OPT_MAX
 | |
| };
 | |
| 
 | |
| typedef enum cvmx_helper_cfg_option cvmx_helper_cfg_option_t;
 | |
| 
 | |
| struct cvmx_phy_info;
 | |
| struct cvmx_fdt_sfp_info;
 | |
| struct cvmx_vsc7224_chan;
 | |
| struct phy_device;
 | |
| 
 | |
| struct cvmx_srio_port_param {
 | |
| 	/** True to override SRIO CTLE zero setting */
 | |
| 	bool srio_rx_ctle_zero_override : 1;
 | |
| 	/** Equalization peaking control dft: 6 */
 | |
| 	u8 srio_rx_ctle_zero : 4;
 | |
| 	/** Set true to override CTLE taps */
 | |
| 	bool srio_rx_ctle_agc_override : 1;
 | |
| 	u8 srio_rx_agc_pre_ctle : 4;	    /** AGC pre-CTLE gain */
 | |
| 	u8 srio_rx_agc_post_ctle : 4;	    /** AGC post-CTLE gain */
 | |
| 	bool srio_tx_swing_override : 1;    /** True to override TX Swing */
 | |
| 	u8 srio_tx_swing : 5;		    /** TX Swing */
 | |
| 	bool srio_tx_gain_override : 1;	    /** True to override TX gain */
 | |
| 	u8 srio_tx_gain : 3;		    /** TX gain */
 | |
| 	bool srio_tx_premptap_override : 1; /** True to override premptap values */
 | |
| 	u8 srio_tx_premptap_pre : 4;	    /** Pre premptap value */
 | |
| 	u8 srio_tx_premptap_post : 5;	    /** Post premptap value */
 | |
| 	bool srio_tx_vboost_override : 1;   /** True to override TX vboost setting */
 | |
| 	bool srio_tx_vboost : 1;	    /** vboost setting (default 1) */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * Per physical port
 | |
|  * Note: This struct is passed between linux and SE apps.
 | |
|  */
 | |
| struct cvmx_cfg_port_param {
 | |
| 	int port_fdt_node;		/** Node offset in FDT of node */
 | |
| 	int phy_fdt_node;		/** Node offset in FDT of PHY */
 | |
| 	struct cvmx_phy_info *phy_info; /** Data structure with PHY information */
 | |
| 	int8_t ccpp_pknd;
 | |
| 	int8_t ccpp_bpid;
 | |
| 	int8_t ccpp_pko_port_base;
 | |
| 	int8_t ccpp_pko_num_ports;
 | |
| 	u8 agl_rx_clk_skew;		  /** AGL rx clock skew setting (default 0) */
 | |
| 	u8 rgmii_tx_clk_delay;		  /** RGMII TX clock delay value if not bypassed */
 | |
| 	bool valid : 1;			  /** 1 = port valid, 0 = invalid */
 | |
| 	bool sgmii_phy_mode : 1;	  /** 1 = port in PHY mode, 0 = MAC mode */
 | |
| 	bool sgmii_1000x_mode : 1;	  /** 1 = 1000Base-X mode, 0 = SGMII mode */
 | |
| 	bool agl_rx_clk_delay_bypass : 1; /** 1 = use rx clock delay bypass for AGL mode */
 | |
| 	bool force_link_up : 1;		  /** Ignore PHY and always report link up */
 | |
| 	bool disable_an : 1;		  /** true to disable autonegotiation */
 | |
| 	bool link_down_pwr_dn : 1;	  /** Power PCS off when link is down */
 | |
| 	bool phy_present : 1;		  /** true if PHY is present */
 | |
| 	bool tx_clk_delay_bypass : 1;	  /** True to bypass the TX clock delay */
 | |
| 	bool enable_fec : 1;		  /** True to enable FEC for 10/40G links */
 | |
| 	/** Settings for short-run SRIO host */
 | |
| 	struct cvmx_srio_port_param srio_short;
 | |
| 	/** Settings for long-run SRIO host */
 | |
| 	struct cvmx_srio_port_param srio_long;
 | |
| 	u8 agl_refclk_sel; /** RGMII refclk select to use */
 | |
| 	/** Set if local (non-PHY) LEDs are used */
 | |
| 	struct cvmx_phy_gpio_leds *gpio_leds;
 | |
| 	struct cvmx_fdt_sfp_info *sfp_info; /** SFP+/QSFP info for port */
 | |
| 	/** Offset of SFP/SFP+/QSFP slot in device tree */
 | |
| 	int sfp_of_offset;
 | |
| 	/** Microsemi VSC7224 channel info data structure */
 | |
| 	struct cvmx_vsc7224_chan *vsc7224_chan;
 | |
| 	/** Avago AVSP-5410 Phy */
 | |
| 	struct cvmx_avsp5410 *avsp5410;
 | |
| 	struct phy_device *phydev;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * Per pko_port
 | |
|  */
 | |
| struct cvmx_cfg_pko_port_param {
 | |
| 	s16 ccppp_queue_base;
 | |
| 	s16 ccppp_num_queues;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * A map from pko_port to
 | |
|  *     interface,
 | |
|  *     index, and
 | |
|  *     pko engine id
 | |
|  */
 | |
| struct cvmx_cfg_pko_port_map {
 | |
| 	s16 ccppl_interface;
 | |
| 	s16 ccppl_index;
 | |
| 	s16 ccppl_eid;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * This is for looking up pko_base_port and pko_nport for ipd_port
 | |
|  */
 | |
| struct cvmx_cfg_pko_port_pair {
 | |
| 	int8_t ccppp_base_port;
 | |
| 	int8_t ccppp_nports;
 | |
| };
 | |
| 
 | |
| typedef union cvmx_user_static_pko_queue_config {
 | |
| 	struct {
 | |
| 		struct pko_queues_cfg {
 | |
| 			unsigned queues_per_port : 11, qos_enable : 1, pfc_enable : 1;
 | |
| 		} pko_cfg_iface[6];
 | |
| 		struct pko_queues_cfg pko_cfg_loop;
 | |
| 		struct pko_queues_cfg pko_cfg_npi;
 | |
| 	} pknd;
 | |
| 	struct {
 | |
| 		u8 pko_ports_per_interface[5];
 | |
| 		u8 pko_queues_per_port_interface[5];
 | |
| 		u8 pko_queues_per_port_loop;
 | |
| 		u8 pko_queues_per_port_pci;
 | |
| 		u8 pko_queues_per_port_srio[4];
 | |
| 	} non_pknd;
 | |
| } cvmx_user_static_pko_queue_config_t;
 | |
| 
 | |
| extern cvmx_user_static_pko_queue_config_t __cvmx_pko_queue_static_config[CVMX_MAX_NODES];
 | |
| extern struct cvmx_cfg_pko_port_map cvmx_cfg_pko_port_map[CVMX_HELPER_CFG_MAX_PKO_PORT];
 | |
| extern struct cvmx_cfg_port_param cvmx_cfg_port[CVMX_MAX_NODES][CVMX_HELPER_MAX_IFACE]
 | |
| 					       [CVMX_HELPER_CFG_MAX_PORT_PER_IFACE];
 | |
| extern struct cvmx_cfg_pko_port_param cvmx_pko_queue_table[];
 | |
| extern int cvmx_enable_helper_flag;
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return configured pknd for the port
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  * Return: the pknd
 | |
|  */
 | |
| int __cvmx_helper_cfg_pknd(int interface, int index);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the configured bpid for the port
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  * Return: the bpid
 | |
|  */
 | |
| int __cvmx_helper_cfg_bpid(int interface, int index);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return the configured pko_port base for the port
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  * Return: the pko_port base
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_port_base(int interface, int index);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the configured number of pko_ports for the port
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  * Return: the number of pko_ports
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_port_num(int interface, int index);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the configured pko_queue base for the pko_port
 | |
|  *
 | |
|  * @param pko_port
 | |
|  * Return: the pko_queue base
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_queue_base(int pko_port);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the configured number of pko_queues for the pko_port
 | |
|  *
 | |
|  * @param pko_port
 | |
|  * Return: the number of pko_queues
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_queue_num(int pko_port);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the interface the pko_port is configured for
 | |
|  *
 | |
|  * @param pko_port
 | |
|  * Return: the interface for the pko_port
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_port_interface(int pko_port);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the index of the port the pko_port is configured for
 | |
|  *
 | |
|  * @param pko_port
 | |
|  * Return: the index of the port
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_port_index(int pko_port);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the pko_eid of the pko_port
 | |
|  *
 | |
|  * @param pko_port
 | |
|  * Return: the pko_eid
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_port_eid(int pko_port);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the max# of pko queues allocated.
 | |
|  *
 | |
|  * Return: the max# of pko queues
 | |
|  *
 | |
|  * Note: there might be holes in the queue space depending on user
 | |
|  * configuration. The function returns the highest queue's index in
 | |
|  * use.
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_max_queue(void);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * Return the max# of PKO DMA engines allocated.
 | |
|  *
 | |
|  * Return: the max# of DMA engines
 | |
|  *
 | |
|  * NOTE: the DMA engines are allocated contiguously and starting from
 | |
|  * 0.
 | |
|  */
 | |
| int __cvmx_helper_cfg_pko_max_engine(void);
 | |
| 
 | |
| /*
 | |
|  * Get the value set for the config option ``opt''.
 | |
|  *
 | |
|  * @param opt is the config option.
 | |
|  * Return: the value set for the option
 | |
|  *
 | |
|  * LR: only used for DWB in NPI, POW, PKO1
 | |
|  */
 | |
| u64 cvmx_helper_cfg_opt_get(cvmx_helper_cfg_option_t opt);
 | |
| 
 | |
| /*
 | |
|  * Set the value for a config option.
 | |
|  *
 | |
|  * @param opt is the config option.
 | |
|  * @param val is the value to set for the opt.
 | |
|  * Return: 0 for success and -1 on error
 | |
|  *
 | |
|  * Note an option here is a config-time parameter and this means that
 | |
|  * it has to be set before calling the corresponding setup functions
 | |
|  * that actually sets the option in hw.
 | |
|  *
 | |
|  * LR: Not used.
 | |
|  */
 | |
| int cvmx_helper_cfg_opt_set(cvmx_helper_cfg_option_t opt, u64 val);
 | |
| 
 | |
| /*
 | |
|  * Retrieve the pko_port base given ipd_port.
 | |
|  *
 | |
|  * @param ipd_port is the IPD eport
 | |
|  * Return: the corresponding PKO port base for the physical port
 | |
|  * represented by the IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
 | |
|  */
 | |
| int cvmx_helper_cfg_ipd2pko_port_base(int ipd_port);
 | |
| 
 | |
| /*
 | |
|  * Retrieve the number of pko_ports given ipd_port.
 | |
|  *
 | |
|  * @param ipd_port is the IPD eport
 | |
|  * Return: the corresponding number of PKO ports for the physical port
 | |
|  *  represented by IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
 | |
|  */
 | |
| int cvmx_helper_cfg_ipd2pko_port_num(int ipd_port);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * The init function
 | |
|  *
 | |
|  * @param node
 | |
|  * Return: 0 for success.
 | |
|  *
 | |
|  * Note: this function is meant to be called to set the ``configured
 | |
|  * parameters,'' e.g., pknd, bpid, etc. and therefore should be before
 | |
|  * any of the corresponding cvmx_helper_cfg_xxxx() functions are
 | |
|  * called.
 | |
|  */
 | |
| int __cvmx_helper_init_port_config_data(int node);
 | |
| 
 | |
| /*
 | |
|  * @INTERNAL
 | |
|  * The local init function
 | |
|  *
 | |
|  * @param none
 | |
|  * Return: 0 for success.
 | |
|  *
 | |
|  * Note: this function is meant to be called to set the ``configured
 | |
|  * parameters locally,'' e.g., pknd, bpid, etc. and therefore should be before
 | |
|  * any of the corresponding cvmx_helper_cfg_xxxx() functions are
 | |
|  * called.
 | |
|  */
 | |
| int __cvmx_helper_init_port_config_data_local(void);
 | |
| 
 | |
| /*
 | |
|  * Set the frame max size and jabber size to 65535.
 | |
|  *
 | |
|  */
 | |
| void cvmx_helper_cfg_set_jabber_and_frame_max(void);
 | |
| 
 | |
| /*
 | |
|  * Enable storing short packets only in the WQE.
 | |
|  */
 | |
| void cvmx_helper_cfg_store_short_packets_in_wqe(void);
 | |
| 
 | |
| /*
 | |
|  * Allocated a block of internal ports and queues for the specified
 | |
|  * interface/port
 | |
|  *
 | |
|  * @param  interface  the interface for which the internal ports and queues
 | |
|  *                    are requested
 | |
|  * @param  port       the index of the port within in the interface for which
 | |
| 		      the internal ports and queues are requested.
 | |
|  * @param  pot_count  the number of internal ports requested
 | |
|  * @param  queue_cnt  the number of queues requested for each of the internal
 | |
|  *                    port. This call will allocate a total of
 | |
|  *		      (port_cnt * queue_cnt) queues
 | |
|  *
 | |
|  * Return:  0 on success
 | |
|  *         -1 on failure
 | |
|  *
 | |
|  * LR: Called ONLY from comfig-parse!
 | |
|  */
 | |
| int cvmx_pko_alloc_iport_and_queues(int interface, int port, int port_cnt, int queue_cnt);
 | |
| 
 | |
| /*
 | |
|  * Free the queues that are associated with the specified port
 | |
|  *
 | |
|  * @param  port   the internal port for which the queues are freed.
 | |
|  *
 | |
|  * Return:  0 on success
 | |
|  *         -1 on failure
 | |
|  */
 | |
| int cvmx_pko_queue_free(u64 port);
 | |
| 
 | |
| /*
 | |
|  * Initializes the pko queue range data structure.
 | |
|  * Return:  0 on success
 | |
|  *         -1 on failure
 | |
|  */
 | |
| int init_cvmx_pko_que_range(void);
 | |
| 
 | |
| /*
 | |
|  * Frees up all the allocated ques.
 | |
|  */
 | |
| void cvmx_pko_queue_free_all(void);
 | |
| 
 | |
| /**
 | |
|  * Returns if port is valid for a given interface
 | |
|  *
 | |
|  * @param xiface     interface to check
 | |
|  * @param index      port index in the interface
 | |
|  *
 | |
|  * Return: status of the port present or not.
 | |
|  */
 | |
| int cvmx_helper_is_port_valid(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * Set whether or not a port is valid
 | |
|  *
 | |
|  * @param interface interface to set
 | |
|  * @param index     port index to set
 | |
|  * @param valid     set 0 to make port invalid, 1 for valid
 | |
|  */
 | |
| void cvmx_helper_set_port_valid(int interface, int index, bool valid);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return if port is in PHY mode
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  *
 | |
|  * Return: 1 if port is in PHY mode, 0 if port is in MAC mode
 | |
|  */
 | |
| bool cvmx_helper_get_mac_phy_mode(int interface, int index);
 | |
| void cvmx_helper_set_mac_phy_mode(int interface, int index, bool valid);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return if port is in 1000Base X mode
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  *
 | |
|  * Return: 1 if port is in 1000Base X mode, 0 if port is in SGMII mode
 | |
|  */
 | |
| bool cvmx_helper_get_1000x_mode(int interface, int index);
 | |
| void cvmx_helper_set_1000x_mode(int interface, int index, bool valid);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return if an AGL port should bypass the RX clock delay
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  */
 | |
| bool cvmx_helper_get_agl_rx_clock_delay_bypass(int interface, int index);
 | |
| void cvmx_helper_set_agl_rx_clock_delay_bypass(int interface, int index, bool valid);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Forces a link to always return that it is up ignoring the PHY (if present)
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index
 | |
|  */
 | |
| bool cvmx_helper_get_port_force_link_up(int interface, int index);
 | |
| void cvmx_helper_set_port_force_link_up(int interface, int index, bool value);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return true if PHY is present to the passed xiface
 | |
|  *
 | |
|  * @param xiface the interface number
 | |
|  * @param index the port's index
 | |
|  */
 | |
| bool cvmx_helper_get_port_phy_present(int xiface, int index);
 | |
| void cvmx_helper_set_port_phy_present(int xiface, int index, bool value);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return the AGL port rx clock skew, only used
 | |
|  * if agl_rx_clock_delay_bypass is set.
 | |
|  *
 | |
|  * @param interface the interface number
 | |
|  * @param index the port's index number
 | |
|  */
 | |
| u8 cvmx_helper_get_agl_rx_clock_skew(int interface, int index);
 | |
| void cvmx_helper_set_agl_rx_clock_skew(int interface, int index, u8 value);
 | |
| u8 cvmx_helper_get_agl_refclk_sel(int interface, int index);
 | |
| void cvmx_helper_set_agl_refclk_sel(int interface, int index, u8 value);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Store the FDT node offset in the device tree of a port
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * @param node_offset	node offset to store
 | |
|  */
 | |
| void cvmx_helper_set_port_fdt_node_offset(int xiface, int index, int node_offset);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return the FDT node offset in the device tree of a port
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * Return:		node offset of port or -1 if invalid
 | |
|  */
 | |
| int cvmx_helper_get_port_fdt_node_offset(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Store the FDT node offset in the device tree of a phy
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * @param node_offset	node offset to store
 | |
|  */
 | |
| void cvmx_helper_set_phy_fdt_node_offset(int xiface, int index, int node_offset);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Return the FDT node offset in the device tree of a phy
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * Return:		node offset of phy or -1 if invalid
 | |
|  */
 | |
| int cvmx_helper_get_phy_fdt_node_offset(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Override default autonegotiation for a port
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * @param enable	true to enable autonegotiation, false to force full
 | |
|  *			duplex, full speed.
 | |
|  */
 | |
| void cvmx_helper_set_port_autonegotiation(int xiface, int index, bool enable);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Returns if autonegotiation is enabled or not.
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  *
 | |
|  * Return: 0 if autonegotiation is disabled, 1 if enabled.
 | |
|  */
 | |
| bool cvmx_helper_get_port_autonegotiation(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Returns if forward error correction is enabled or not.
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  *
 | |
|  * Return: 0 if fec is disabled, 1 if enabled.
 | |
|  */
 | |
| bool cvmx_helper_get_port_fec(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Override default forward error correction for a port
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * @param enable	true to enable fec, false to disable.
 | |
|  */
 | |
| void cvmx_helper_set_port_fec(int xiface, int index, bool enable);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Configure the SRIO RX interface AGC settings in host mode
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		lane
 | |
|  * @param long_run	true for long run, false for short run
 | |
|  * @param agc_override	true to put AGC in manual mode
 | |
|  * @param ctle_zero	RX equalizer peaking control (default 0x6)
 | |
|  * @param agc_pre_ctle	AGC pre-CTLE gain (default 0x5)
 | |
|  * @param agc_post_ctle	AGC post-CTLE gain (default 0x4)
 | |
|  *
 | |
|  * NOTE: This must be called before SRIO is initialized to take effect
 | |
|  */
 | |
| void cvmx_helper_set_srio_rx(int xiface, int index, bool long_run, bool ctle_zero_override,
 | |
| 			     u8 ctle_zero, bool agc_override, u8 agc_pre_ctle, u8 agc_post_ctle);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Get the SRIO RX interface AGC settings for host mode
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		lane
 | |
|  * @param long_run	true for long run, false for short run
 | |
|  * @param[out] ctle_zero_override true if overridden
 | |
|  * @param[out] ctle_zero	RX equalizer peaking control (default 0x6)
 | |
|  * @param[out] agc_override	true to put AGC in manual mode
 | |
|  * @param[out] agc_pre_ctle	AGC pre-CTLE gain (default 0x5)
 | |
|  * @param[out] agc_post_ctle	AGC post-CTLE gain (default 0x4)
 | |
|  */
 | |
| void cvmx_helper_get_srio_rx(int xiface, int index, bool long_run, bool *ctle_zero_override,
 | |
| 			     u8 *ctle_zero, bool *agc_override, u8 *agc_pre_ctle,
 | |
| 			     u8 *agc_post_ctle);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Configure the SRIO TX interface for host mode
 | |
|  *
 | |
|  * @param xiface		node and interface
 | |
|  * @param index			lane
 | |
|  * @param long_run	true for long run, false for short run
 | |
|  * @param tx_swing		tx swing value to use (default 0x7), -1 to not
 | |
|  *				override.
 | |
|  * @param tx_gain		PCS SDS TX gain (default 0x3), -1 to not
 | |
|  *				override
 | |
|  * @param tx_premptap_override	true to override preemphasis control
 | |
|  * @param tx_premptap_pre	preemphasis pre tap value (default 0x0)
 | |
|  * @param tx_premptap_post	preemphasis post tap value (default 0xF)
 | |
|  * @param tx_vboost		vboost enable (1 = enable, -1 = don't override)
 | |
|  *				hardware default is 1.
 | |
|  *
 | |
|  * NOTE: This must be called before SRIO is initialized to take effect
 | |
|  */
 | |
| void cvmx_helper_set_srio_tx(int xiface, int index, bool long_run, int tx_swing, int tx_gain,
 | |
| 			     bool tx_premptap_override, u8 tx_premptap_pre, u8 tx_premptap_post,
 | |
| 			     int tx_vboost);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Get the SRIO TX interface settings for host mode
 | |
|  *
 | |
|  * @param xiface			node and interface
 | |
|  * @param index				lane
 | |
|  * @param long_run			true for long run, false for short run
 | |
|  * @param[out] tx_swing_override	true to override pcs_sds_txX_swing
 | |
|  * @param[out] tx_swing			tx swing value to use (default 0x7)
 | |
|  * @param[out] tx_gain_override		true to override default gain
 | |
|  * @param[out] tx_gain			PCS SDS TX gain (default 0x3)
 | |
|  * @param[out] tx_premptap_override	true to override preemphasis control
 | |
|  * @param[out] tx_premptap_pre		preemphasis pre tap value (default 0x0)
 | |
|  * @param[out] tx_premptap_post		preemphasis post tap value (default 0xF)
 | |
|  * @param[out] tx_vboost_override	override vboost setting
 | |
|  * @param[out] tx_vboost		vboost enable (default true)
 | |
|  */
 | |
| void cvmx_helper_get_srio_tx(int xiface, int index, bool long_run, bool *tx_swing_override,
 | |
| 			     u8 *tx_swing, bool *tx_gain_override, u8 *tx_gain,
 | |
| 			     bool *tx_premptap_override, u8 *tx_premptap_pre, u8 *tx_premptap_post,
 | |
| 			     bool *tx_vboost_override, bool *tx_vboost);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Sets the PHY info data structure
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * @param[in] phy_info	phy information data structure pointer
 | |
|  */
 | |
| void cvmx_helper_set_port_phy_info(int xiface, int index, struct cvmx_phy_info *phy_info);
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Returns the PHY information data structure for a port
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  *
 | |
|  * Return: pointer to PHY information data structure or NULL if not set
 | |
|  */
 | |
| struct cvmx_phy_info *cvmx_helper_get_port_phy_info(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Returns a pointer to the PHY LED configuration (if local GPIOs drive them)
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		portindex
 | |
|  *
 | |
|  * Return: pointer to the PHY LED information data structure or NULL if not
 | |
|  *	   present
 | |
|  */
 | |
| struct cvmx_phy_gpio_leds *cvmx_helper_get_port_phy_leds(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Sets a pointer to the PHY LED configuration (if local GPIOs drive them)
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		portindex
 | |
|  * @param leds		pointer to led data structure
 | |
|  */
 | |
| void cvmx_helper_set_port_phy_leds(int xiface, int index, struct cvmx_phy_gpio_leds *leds);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Disables RGMII TX clock bypass and sets delay value
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		portindex
 | |
|  * @param bypass	Set true to enable the clock bypass and false
 | |
|  *			to sync clock and data synchronously.
 | |
|  *			Default is false.
 | |
|  * @param clk_delay	Delay value to skew TXC from TXD
 | |
|  */
 | |
| void cvmx_helper_cfg_set_rgmii_tx_clk_delay(int xiface, int index, bool bypass, int clk_delay);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Gets RGMII TX clock bypass and delay value
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		portindex
 | |
|  * @param bypass	Set true to enable the clock bypass and false
 | |
|  *			to sync clock and data synchronously.
 | |
|  *			Default is false.
 | |
|  * @param clk_delay	Delay value to skew TXC from TXD, default is 0.
 | |
|  */
 | |
| void cvmx_helper_cfg_get_rgmii_tx_clk_delay(int xiface, int index, bool *bypass, int *clk_delay);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Retrieve node-specific PKO Queue configuration.
 | |
|  *
 | |
|  * @param node		OCTEON3 node.
 | |
|  * @param pkocfg	PKO Queue static configuration.
 | |
|  */
 | |
| int cvmx_helper_pko_queue_config_get(int node, cvmx_user_static_pko_queue_config_t *cfg);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Update node-specific PKO Queue configuration.
 | |
|  *
 | |
|  * @param node		OCTEON3 node.
 | |
|  * @param pkocfg	PKO Queue static configuration.
 | |
|  */
 | |
| int cvmx_helper_pko_queue_config_set(int node, cvmx_user_static_pko_queue_config_t *cfg);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Retrieve the SFP node offset in the device tree
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  *
 | |
|  * Return: offset in device tree or -1 if error or not defined.
 | |
|  */
 | |
| int cvmx_helper_cfg_get_sfp_fdt_offset(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * Search for a port based on its FDT node offset
 | |
|  *
 | |
|  * @param	of_offset	Node offset of port to search for
 | |
|  *
 | |
|  * Return:	ipd_port or -1 if not found
 | |
|  */
 | |
| int cvmx_helper_cfg_get_ipd_port_by_fdt_node_offset(int of_offset);
 | |
| 
 | |
| /**
 | |
|  * @INTERNAL
 | |
|  * Sets the SFP node offset
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  * @param sfp_of_offset	Offset of SFP node in device tree
 | |
|  */
 | |
| void cvmx_helper_cfg_set_sfp_fdt_offset(int xiface, int index, int sfp_of_offset);
 | |
| 
 | |
| /**
 | |
|  * Search for a port based on its FDT node offset
 | |
|  *
 | |
|  * @param	of_offset	Node offset of port to search for
 | |
|  * @param[out]	xiface		xinterface of match
 | |
|  * @param[out]	index		port index of match
 | |
|  *
 | |
|  * Return:	0 if found, -1 if not found
 | |
|  */
 | |
| int cvmx_helper_cfg_get_xiface_index_by_fdt_node_offset(int of_offset, int *xiface, int *index);
 | |
| 
 | |
| /**
 | |
|  * Get data structure defining the Microsemi VSC7224 channel info
 | |
|  * or NULL if not present
 | |
|  *
 | |
|  * @param xiface	node and interface
 | |
|  * @param index		port index
 | |
|  *
 | |
|  * Return: pointer to vsc7224 data structure or NULL if not present
 | |
|  */
 | |
| struct cvmx_vsc7224_chan *cvmx_helper_cfg_get_vsc7224_chan_info(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * Sets the Microsemi VSC7224 channel data structure
 | |
|  *
 | |
|  * @param	xiface	node and interface
 | |
|  * @param	index	port index
 | |
|  * @param[in]	vsc7224_info	Microsemi VSC7224 data structure
 | |
|  */
 | |
| void cvmx_helper_cfg_set_vsc7224_chan_info(int xiface, int index,
 | |
| 					   struct cvmx_vsc7224_chan *vsc7224_chan_info);
 | |
| 
 | |
| /**
 | |
|  * Get data structure defining the Avago AVSP5410 phy info
 | |
|  * or NULL if not present
 | |
|  *
 | |
|  * @param xiface        node and interface
 | |
|  * @param index         port index
 | |
|  *
 | |
|  * Return: pointer to avsp5410 data structure or NULL if not present
 | |
|  */
 | |
| struct cvmx_avsp5410 *cvmx_helper_cfg_get_avsp5410_info(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * Sets the Avago AVSP5410 phy info data structure
 | |
|  *
 | |
|  * @param       xiface  node and interface
 | |
|  * @param       index   port index
 | |
|  * @param[in]   avsp5410_info   Avago AVSP5410 data structure
 | |
|  */
 | |
| void cvmx_helper_cfg_set_avsp5410_info(int xiface, int index, struct cvmx_avsp5410 *avsp5410_info);
 | |
| 
 | |
| /**
 | |
|  * Gets the SFP data associated with a port
 | |
|  *
 | |
|  * @param	xiface	node and interface
 | |
|  * @param	index	port index
 | |
|  *
 | |
|  * Return:	pointer to SFP data structure or NULL if none
 | |
|  */
 | |
| struct cvmx_fdt_sfp_info *cvmx_helper_cfg_get_sfp_info(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * Sets the SFP data associated with a port
 | |
|  *
 | |
|  * @param	xiface		node and interface
 | |
|  * @param	index		port index
 | |
|  * @param[in]	sfp_info	port SFP data or NULL for none
 | |
|  */
 | |
| void cvmx_helper_cfg_set_sfp_info(int xiface, int index, struct cvmx_fdt_sfp_info *sfp_info);
 | |
| 
 | |
| /*
 | |
|  * Initializes cvmx with user specified config info.
 | |
|  */
 | |
| int cvmx_user_static_config(void);
 | |
| void cvmx_pko_queue_show(void);
 | |
| int cvmx_fpa_pool_init_from_cvmx_config(void);
 | |
| int __cvmx_helper_init_port_valid(void);
 | |
| 
 | |
| /**
 | |
|  * Returns a pointer to the phy device associated with a port
 | |
|  *
 | |
|  * @param	xiface		node and interface
 | |
|  * @param	index		port index
 | |
|  *
 | |
|  * return	pointer to phy device or NULL if none
 | |
|  */
 | |
| struct phy_device *cvmx_helper_cfg_get_phy_device(int xiface, int index);
 | |
| 
 | |
| /**
 | |
|  * Sets the phy device associated with a port
 | |
|  *
 | |
|  * @param	xiface		node and interface
 | |
|  * @param	index		port index
 | |
|  * @param[in]	phydev		phy device to assiciate
 | |
|  */
 | |
| void cvmx_helper_cfg_set_phy_device(int xiface, int index, struct phy_device *phydev);
 | |
| 
 | |
| #endif /* __CVMX_HELPER_CFG_H__ */
 |