zephyr/drivers/pcie/endpoint/pcie_ep_iproc_regs.h
Abhishek Shah b53f62d259 drivers: pcie_ep: iproc: Add MSI-X PVM feature for Viper
Add support for interrupt driven MSI-X PVM feature for Viper.
Function mask bit update is tracked with snoop interrupt
and vector mask bit update is tracked with pcie pmon lite
address range access detection interrupt.
Both the interrupts are required to enable this feature.

Signed-off-by: Abhishek Shah <abhishek.shah@broadcom.com>
2020-10-22 11:07:39 +02:00

372 lines
12 KiB
C

/*
* Copyright 2020 Broadcom
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_PCIE_EP_IPROC_REGS_H_
#define ZEPHYR_INCLUDE_DRIVERS_PCIE_EP_IPROC_REGS_H_
struct paxb_64 {
uint32_t lower;
uint32_t upper;
};
#ifdef CONFIG_PCIE_EP_IPROC_V2
struct paxb_imap {
uint32_t lower;
uint32_t upper;
uint32_t axim_write_config;
uint32_t axim_read_config;
};
struct iproc_pcie_reg {
uint32_t paxb_clk_control;
uint32_t paxb_ep_perst_hold_off;
uint32_t paxb_global_control;
uint32_t paxb_flush_control;
uint32_t paxb_flush_status;
uint32_t paxb_strap_status;
uint32_t paxb_reset_status;
uint32_t paxb_mps_mrrs_stat;
uint32_t paxb_cfg_addr;
uint32_t paxb_cfg_data;
uint32_t paxb_cfg_be;
uint32_t paxb_config_ind_addr;
uint32_t paxb_config_ind_data;
uint32_t paxb_config_ind_cmpl_stat;
uint32_t paxb_config_ind_be;
uint32_t paxb_config_ecm_addr;
uint32_t paxb_config_ecm_data;
uint32_t paxb_hide_func_cfg;
uint32_t paxb_0_apb_timeout;
uint32_t paxb_0_apb_err_en_for_cfg_rd_cmpl;
uint32_t paxb_0_apb_err_en_for_cfg_wr_cmpl;
uint32_t paxb_0_ur_resp_on_apb_timeout;
uint32_t paxb_0_crs_resp_on_flr_in_progress;
uint32_t paxb_0_apb_read_data_on_ca;
uint32_t paxb_0_apb_read_data_on_crs;
uint32_t paxb_0_compare_bus_num_for_pf;
uint32_t paxb_0_latch_bus_number_on_cfg_wr;
uint32_t paxb_0_issue_slave_error_from_ple_on_ur;
uint32_t paxb_0_ep_ple_cfg_register_0;
uint32_t paxb_0_ep_ple_cfg_register_1;
uint32_t paxb_0_ep_ple_cfg_register_2;
uint32_t paxb_0_ep_ple_cfg_register_3;
uint32_t paxb_0_ep_ple_cfg_register_4;
uint32_t paxb_ordering_cfg;
uint32_t paxb_master_cfg;
uint32_t paxb_master_axid_seq_num_cfg;
uint32_t paxb_pnpn_so_traffic_shaper_count_slow;
uint32_t paxb_pnpn_so_traffic_shaper_count_fast;
uint32_t paxb_pnpn_so_traffic_shaper_thrshold;
uint32_t paxb_bdf_to_func_num_mapping;
uint32_t paxb_atomics_cfg;
uint32_t paxb_master_gic_its_address;
uint32_t paxb_master_id_seq_num_avbl_status;
uint32_t paxb_axim_rd_fsm_state;
uint32_t paxb_atomics_status;
uint32_t paxb_atomics_fail_addr_h_status;
uint32_t paxb_atomics_fail_addr_l_status;
uint32_t paxb_atomics_fail_status;
uint32_t paxb_atomics_fail_pf_vf_num;
uint32_t paxb_nullified_tx_pd_status;
uint32_t paxb_nullified_tx_pd_addr_h_status;
uint32_t paxb_nullified_tx_pd_addr_l_status;
uint32_t paxb_ds_non_posted_crdt_default;
uint32_t paxb_ds_posted_crdt_default;
uint32_t paxb_ds_cmpl_crdt_default;
uint32_t paxb_ds_cfg;
uint32_t paxb_us_cfg;
uint32_t paxb_axim_write_config_func0;
uint32_t paxb_axim_read_config_func0;
uint32_t paxb_axim_write_config_func1;
uint32_t paxb_axim_read_config_func1;
uint32_t paxb_axim_write_config_func2;
uint32_t paxb_axim_read_config_func2;
uint32_t paxb_axim_write_config_func3;
uint32_t paxb_axim_read_config_func3;
uint32_t paxb_axim_write_config_func4;
uint32_t paxb_axim_read_config_func4;
uint32_t paxb_axim_write_config_func5;
uint32_t paxb_axim_read_config_func5;
uint32_t paxb_axim_write_config_func6;
uint32_t paxb_axim_read_config_func6;
uint32_t paxb_axim_write_config_func7;
uint32_t paxb_axim_read_config_func7;
uint32_t paxb_axim_write_config_func8;
uint32_t paxb_axim_read_config_func8;
uint32_t paxb_axim_write_config_func9;
uint32_t paxb_axim_read_config_func9;
uint32_t paxb_axim_write_config_func10;
uint32_t paxb_axim_read_config_func10;
uint32_t paxb_axim_write_config_func11;
uint32_t paxb_axim_read_config_func11;
uint32_t paxb_axim_write_config_func12;
uint32_t paxb_axim_read_config_func12;
uint32_t paxb_axim_write_config_func13;
uint32_t paxb_axim_read_config_func13;
uint32_t paxb_axim_write_config_func14;
uint32_t paxb_axim_read_config_func14;
uint32_t paxb_axim_write_config_func15;
uint32_t paxb_axim_read_config_func15;
uint32_t paxb_default_imap_lower;
uint32_t paxb_default_imap_upper;
uint32_t paxb_default_imap_axim_write_config;
uint32_t paxb_default_imap_axim_read_config;
struct paxb_imap paxb_func0_imap0[8];
struct paxb_imap paxb_func0_imap1[8];
struct paxb_imap paxb_func0_imap2;
struct paxb_imap paxb_func0_imap3[8];
struct paxb_imap paxb_func0_imap4[8];
struct paxb_64 paxb_iarr[5];
uint32_t paxb_override_window0_cfg0;
uint32_t paxb_override_window0_cfg1;
uint32_t paxb_override_window0_write_cfg;
uint32_t paxb_override_window0_read_cfg;
uint32_t paxb_override_window1_cfg0;
uint32_t paxb_override_window1_cfg1;
uint32_t paxb_override_window1_write_cfg;
uint32_t paxb_override_window1_read_cfg;
uint32_t paxb_msi_base_addr_cfg;
uint32_t paxb_msi_high_addr_cfg;
uint32_t paxb_msi_window_write_cfg;
uint32_t paxb_oarr_func0_msi_page;
uint32_t paxb_oarr_func0_msi_page_upper;
struct paxb_64 paxb_oarr[2];
struct paxb_64 paxb_omap[2];
struct paxb_64 paxb_oarr_2;
struct paxb_64 paxb_omap_2;
struct paxb_64 paxb_oarr_3;
struct paxb_64 paxb_omap_3;
struct paxb_64 paxb_oarr_4;
uint32_t paxb_omap_4_upper;
struct paxb_64 paxb_oarr_5;
struct paxb_64 paxb_omap_5;
struct paxb_64 paxb_omap_5_0;
struct paxb_64 paxb_omap_5_1;
struct paxb_64 paxb_omap_5_2;
struct paxb_64 paxb_omap_5_3;
struct paxb_64 paxb_omap_5_4;
struct paxb_64 paxb_omap_5_5;
struct paxb_64 paxb_omap_5_6;
struct paxb_64 paxb_omap_5_7;
uint32_t paxb_rc_pm_control;
uint32_t paxb_rc_pm_status;
uint32_t paxb_ep_pm_control;
uint32_t paxb_ep_pm_status;
uint32_t paxb_ep_ltr_control;
uint32_t paxb_ep_ltr_status;
uint32_t paxb_ep_obff_status;
uint32_t paxb_pcie_error_status;
uint32_t paxb_pcie_link_status;
uint32_t paxb_ecam_cfg_0;
uint32_t paxb_ecam_cfg_1;
uint32_t paxb_ecam_cfg_rc;
uint32_t paxb_ecam_crs_cfg;
uint32_t paxb_ecam_cfg_rd_data;
uint32_t paxb_ecam_cmpl_stat;
uint32_t paxb_ecam_apb_err_cfg;
uint32_t paxb_ecam_apb_ur_resp_cfg;
uint32_t paxb_mem_pwr_cfg;
uint32_t paxb_mem_iso_cfg;
uint32_t paxb_mem_pwr_status;
uint32_t paxb_free_cid_cfg;
uint32_t paxb_free_cid_status;
uint32_t paxb_slave_cfg;
uint32_t paxb_slave_pf_vf_offset;
uint32_t paxb_cmp_err_tx_cplh_status;
uint32_t paxb_cmp_err_tx_cplh_addr_h_status;
uint32_t paxb_cmp_err_tx_cplh_addr_l_status;
uint32_t paxb_axi_slave_debug_status;
uint32_t paxb_paxb_intr_status;
uint32_t paxb_paxb_intr_en;
uint32_t paxb_paxb_intr_clear;
uint32_t paxb_rc_intr_clear_en;
uint32_t paxb_rc_intr_status;
uint32_t paxb_rc_intr_mask;
uint32_t paxb_rc_intr_clear;
uint32_t paxb_pcie_cfg_intr_status;
uint32_t paxb_pcie_cfg_intr_mask;
uint32_t paxb_pcie_cfg_intr_clear;
uint32_t paxb_master_intr_status;
uint32_t paxb_master_intr_mask;
uint32_t paxb_master_intr_clear;
uint32_t paxb_slave_intr_status;
uint32_t paxb_slave_intr_mask;
uint32_t paxb_slave_intr_clear;
uint32_t paxb_user_if_intr_status;
uint32_t paxb_user_if_intr_mask;
uint32_t paxb_user_if_intr_clear;
uint32_t paxb_master_underflow_status;
uint32_t paxb_master_overflow_status;
uint32_t paxb_master_fifo_ecc_corr_status;
uint32_t paxb_master_fifo_ecc_uncorr_status;
uint32_t paxb_slave_underflow_status;
uint32_t paxb_slave_overflow_status;
uint32_t paxb_slave_ecc_err_corrected_status;
uint32_t paxb_slave_ecc_err_uncor_status;
uint32_t paxb_userif_underflow_status;
uint32_t paxb_userif_overflow_status;
uint32_t paxb_userif_ecc_err_corrected_status;
uint32_t paxb_userif_ecc_err_uncor_status;
uint32_t paxb_msg_status;
uint32_t paxb_msg_header[4];
uint32_t paxb_msg_data[8];
uint32_t paxb_msg_control;
uint32_t paxb_msg_drop_control;
uint32_t paxb_snoop_addr_cfg[4];
};
#else
struct iproc_pcie_reg {
uint32_t paxb_clk_control;
uint32_t paxb_rc_pm_control;
uint32_t paxb_rc_pm_status;
uint32_t paxb_ep_pm_control;
uint32_t paxb_ep_pm_status;
uint32_t paxb_ep_ltr_control;
uint32_t paxb_ep_ltr_status;
uint32_t paxb_reserved_0[1];
uint32_t paxb_ep_obff_status;
uint32_t paxb_pcie_error_status;
uint32_t paxb_reserved_1[2];
uint32_t paxb_paxb_endianness;
uint32_t paxb_apb_timeout_count;
uint32_t paxb_paxb_tx_arbiter_priority;
uint32_t paxb_reserved_2[1];
uint32_t paxb_paxb_rd_cmpl_buf_init_start;
uint32_t paxb_paxb_rd_cmpl_buf_init_done;
uint32_t paxb_pcie_ordering_rules_enable;
uint32_t paxb_axi_slverr_en_for_mem_rd_cmpl;
uint32_t paxb_reserved_3[44];
uint32_t paxb_pcie_rc_axi_config;
uint32_t paxb_pcie_ep_axi_config;
uint32_t paxb_pcie_paxb_rx_debug_status_0;
uint32_t paxb_pcie_paxb_rx_debug_control_0;
uint32_t paxb_reserved_4[4];
uint32_t paxb_config_ind_addr;
uint32_t paxb_config_ind_data;
uint32_t paxb_reserved_5[51];
uint32_t paxb_cfg_be;
uint32_t paxb_cfg_addr;
uint32_t paxb_cfg_data;
uint32_t paxb_pcie_sys_eq_page;
uint32_t paxb_pcie_sys_msi_page;
uint32_t paxb_reserved_6[2];
uint32_t paxb_pcie_sys_msi_ctrl[6];
uint32_t paxb_reserved_7[10];
uint32_t paxb_pcie_sys_eq_head_0;
uint32_t paxb_pcie_sys_eq_tail_0;
uint32_t paxb_pcie_sys_eq_head_1;
uint32_t paxb_pcie_sys_eq_tail_1;
uint32_t paxb_pcie_sys_eq_head_2;
uint32_t paxb_pcie_sys_eq_tail_2;
uint32_t paxb_pcie_sys_eq_head_3;
uint32_t paxb_pcie_sys_eq_tail_3;
uint32_t paxb_pcie_sys_eq_head_4;
uint32_t paxb_pcie_sys_eq_tail_4;
uint32_t paxb_pcie_sys_eq_head_5;
uint32_t paxb_pcie_sys_eq_tail_5;
uint32_t paxb_pcie_sys_eq_tail_early[6];
uint32_t paxb_reserved_8[2];
uint32_t paxb_pcie_sys_eq_overwritten[6];
uint32_t paxb_reserved_9[2];
uint32_t paxb_pcie_sys_eq_page_upper;
uint32_t paxb_pcie_sys_msi_page_upper;
uint32_t paxb_reserved_10[26];
uint32_t paxb_pcie_sys_rc_intx_en;
uint32_t paxb_pcie_sys_rc_intx_csr;
uint32_t paxb_reserved_11[2];
uint32_t paxb_pcie_sys_msi_req;
uint32_t paxb_pcie_sys_host_intr_en;
uint32_t paxb_pcie_sys_host_intr_csr;
uint32_t paxb_reserved_12[1];
uint32_t paxb_pcie_sys_host_intr[4];
uint32_t paxb_pcie_sys_ep_int_en0;
uint32_t paxb_pcie_sys_ep_int_en1;
uint32_t paxb_reserved_13[2];
uint32_t paxb_pcie_sys_ep_int_csr0;
uint32_t paxb_pcie_sys_ep_int_csr1;
uint32_t paxb_reserved_14[2];
uint32_t paxb_cmicd_to_pcie_intr_en;
uint32_t paxb_reserved_15[543];
uint32_t paxb_func0_imap0[8];
uint32_t paxb_func1_imap0[8];
uint32_t paxb_func0_imap0_upper[8];
uint32_t paxb_func1_imap0_upper[8];
uint32_t paxb_reserved_16[16];
struct paxb_64 paxb_func0_imap2;
struct paxb_64 paxb_func1_imap2;
uint32_t paxb_func0_imap0_0123_regs_type;
uint32_t paxb_reserved_17[11];
struct paxb_64 paxb_iarr[3];
uint32_t paxb_reserved_18[2];
struct paxb_64 paxb_oarr[2];
uint32_t paxb_reserved_19[1];
uint32_t paxb_oarr_func0_msi_page;
uint32_t paxb_oarr_func1_msi_page;
uint32_t paxb_reserved_20[1];
struct paxb_64 paxb_omap[2];
uint32_t paxb_oarr_func0_msi_page_upper;
uint32_t paxb_oarr_func1_msi_page_upper;
uint32_t paxb_reserved_21[1];
uint32_t paxb_func1_iarr_2_size;
struct paxb_64 paxb_oarr_2;
struct paxb_64 paxb_omap_2;
struct paxb_64 paxb_func0_imap1[8];
struct paxb_64 paxb_func1_imap1[8];
struct paxb_64 paxb_oarr_3;
struct paxb_64 paxb_omap_3;
struct paxb_64 paxb_iarr_3;
struct paxb_64 paxb_func0_imap3[8];
uint32_t paxb_func0_imap3_axuser[8];
struct paxb_64 paxb_iarr_4;
struct paxb_64 paxb_func0_imap4[8];
uint32_t paxb_func0_imap4_axuser[8];
uint32_t paxb_default_imap_lower;
uint32_t paxb_default_imap_upper;
uint32_t paxb_default_imap_axuser;
uint32_t paxb_default_imap_axcache;
uint32_t paxb_cfg_tlp_rd_status;
uint32_t paxb_reserved_22[7];
uint32_t paxb_mem_control;
uint32_t paxb_mem_ecc_err_log_0;
uint32_t paxb_mem_ecc_err_log_1;
uint32_t paxb_pcie_link_status;
uint32_t paxb_strap_status;
uint32_t paxb_reset_status;
uint32_t paxb_reset_enable_in_pcie_link_down;
uint32_t paxb_reserved_23[1];
uint32_t paxb_paxb_tx_debug_cfg;
uint32_t paxb_paxb_misc_config;
uint32_t paxb_reserved_24[2];
uint32_t paxb_paxb_intr_en;
uint32_t paxb_paxb_intr_clear;
uint32_t paxb_paxb_intr_status;
uint32_t paxb_reserved_25[1];
uint32_t paxb_apb_err_en_for_cfg_rd_cmpl;
uint32_t paxb_pcie_replay_addr_buf_ecc_log;
uint32_t paxb_pcie_replay_data_buf_ecc_log;
uint32_t paxb_pcie_dl_to_tl_buf_ecc_log;
uint32_t paxb_pcie_tl_to_dl_buf_ecc_log;
uint32_t paxb_reserved_26[3];
uint32_t paxb_func0_imap0_axuser[8];
uint32_t paxb_func1_imap0_axuser[8];
uint32_t paxb_func0_imap1_axuser[8];
uint32_t paxb_func1_imap1_axuser[8];
uint32_t paxb_func0_imap2_axuser;
uint32_t paxb_func1_imap2_axuser;
};
#endif
static inline void pcie_write32(uint32_t data, uint32_t *addr)
{
sys_write32(data, (mem_addr_t)addr);
}
static inline uint32_t pcie_read32(uint32_t *addr)
{
return sys_read32((mem_addr_t)addr);
}
#endif /* ZEPHYR_INCLUDE_DRIVERS_PCIE_EP_IPROC_REGS_H_ */