cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

core_wildfire.h (8655B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ALPHA_WILDFIRE__H__
      3#define __ALPHA_WILDFIRE__H__
      4
      5#include <linux/types.h>
      6#include <asm/compiler.h>
      7
      8#define WILDFIRE_MAX_QBB	8	/* more than 8 requires other mods */
      9#define WILDFIRE_PCA_PER_QBB	4
     10#define WILDFIRE_IRQ_PER_PCA	64
     11
     12#define WILDFIRE_NR_IRQS \
     13  (WILDFIRE_MAX_QBB * WILDFIRE_PCA_PER_QBB * WILDFIRE_IRQ_PER_PCA)
     14
     15extern unsigned char wildfire_hard_qbb_map[WILDFIRE_MAX_QBB];
     16extern unsigned char wildfire_soft_qbb_map[WILDFIRE_MAX_QBB];
     17#define QBB_MAP_EMPTY	0xff
     18
     19extern unsigned long wildfire_hard_qbb_mask;
     20extern unsigned long wildfire_soft_qbb_mask;
     21extern unsigned long wildfire_gp_mask;
     22extern unsigned long wildfire_hs_mask;
     23extern unsigned long wildfire_iop_mask;
     24extern unsigned long wildfire_ior_mask;
     25extern unsigned long wildfire_pca_mask;
     26extern unsigned long wildfire_cpu_mask;
     27extern unsigned long wildfire_mem_mask;
     28
     29#define WILDFIRE_QBB_EXISTS(qbbno) (wildfire_soft_qbb_mask & (1 << (qbbno)))
     30
     31#define WILDFIRE_MEM_EXISTS(qbbno) (wildfire_mem_mask & (0xf << ((qbbno) << 2)))
     32
     33#define WILDFIRE_PCA_EXISTS(qbbno, pcano) \
     34		(wildfire_pca_mask & (1 << (((qbbno) << 2) + (pcano))))
     35
     36typedef struct {
     37	volatile unsigned long csr __attribute__((aligned(64)));
     38} wildfire_64;
     39
     40typedef struct {
     41	volatile unsigned long csr __attribute__((aligned(256)));
     42} wildfire_256;
     43
     44typedef struct {
     45	volatile unsigned long csr __attribute__((aligned(2048)));
     46} wildfire_2k;
     47
     48typedef struct {
     49	wildfire_64	qsd_whami;
     50	wildfire_64	qsd_rev;
     51	wildfire_64	qsd_port_present;
     52	wildfire_64	qsd_port_active;
     53	wildfire_64	qsd_fault_ena;
     54	wildfire_64	qsd_cpu_int_ena;
     55	wildfire_64	qsd_mem_config;
     56	wildfire_64	qsd_err_sum;
     57	wildfire_64	ce_sum[4];
     58	wildfire_64	dev_init[4];
     59	wildfire_64	it_int[4];
     60	wildfire_64	ip_int[4];
     61	wildfire_64	uce_sum[4];
     62	wildfire_64	se_sum__non_dev_int[4];
     63	wildfire_64	scratch[4];
     64	wildfire_64	qsd_timer;
     65	wildfire_64	qsd_diag;
     66} wildfire_qsd;
     67
     68typedef struct {
     69	wildfire_256	qsd_whami;
     70	wildfire_256	__pad1;
     71	wildfire_256	ce_sum;
     72	wildfire_256	dev_init;
     73	wildfire_256	it_int;
     74	wildfire_256	ip_int;
     75	wildfire_256	uce_sum;
     76	wildfire_256	se_sum;
     77} wildfire_fast_qsd;
     78
     79typedef struct {
     80	wildfire_2k	qsa_qbb_id;
     81	wildfire_2k	__pad1;
     82	wildfire_2k	qsa_port_ena;
     83	wildfire_2k	qsa_scratch;
     84	wildfire_2k	qsa_config[5];
     85	wildfire_2k	qsa_ref_int;
     86	wildfire_2k	qsa_qbb_pop[2];
     87	wildfire_2k	qsa_dtag_fc;
     88	wildfire_2k	__pad2[3];
     89	wildfire_2k	qsa_diag;
     90	wildfire_2k	qsa_diag_lock[4];
     91	wildfire_2k	__pad3[11];
     92	wildfire_2k	qsa_cpu_err_sum;
     93	wildfire_2k	qsa_misc_err_sum;
     94	wildfire_2k	qsa_tmo_err_sum;
     95	wildfire_2k	qsa_err_ena;
     96	wildfire_2k	qsa_tmo_config;
     97	wildfire_2k	qsa_ill_cmd_err_sum;
     98	wildfire_2k	__pad4[26];
     99	wildfire_2k	qsa_busy_mask;
    100	wildfire_2k	qsa_arr_valid;
    101	wildfire_2k	__pad5[2];
    102	wildfire_2k	qsa_port_map[4];
    103	wildfire_2k	qsa_arr_addr[8];
    104	wildfire_2k	qsa_arr_mask[8];
    105} wildfire_qsa;
    106
    107typedef struct {
    108	wildfire_64	ioa_config;
    109	wildfire_64	iod_config;
    110	wildfire_64	iop_switch_credits;
    111	wildfire_64	__pad1;
    112	wildfire_64	iop_hose_credits;
    113	wildfire_64	__pad2[11];
    114	struct {
    115		wildfire_64	__pad3;
    116		wildfire_64	init;
    117	} iop_hose[4];
    118	wildfire_64	ioa_hose_0_ctrl;
    119	wildfire_64	iod_hose_0_ctrl;
    120	wildfire_64	ioa_hose_1_ctrl;
    121	wildfire_64	iod_hose_1_ctrl;
    122	wildfire_64	ioa_hose_2_ctrl;
    123	wildfire_64	iod_hose_2_ctrl;
    124	wildfire_64	ioa_hose_3_ctrl;
    125	wildfire_64	iod_hose_3_ctrl;
    126	struct {
    127		wildfire_64	target;
    128		wildfire_64	__pad4;
    129	} iop_dev_int[4];
    130
    131	wildfire_64	iop_err_int_target;
    132	wildfire_64	__pad5[7];
    133	wildfire_64	iop_qbb_err_sum;
    134	wildfire_64	__pad6;
    135	wildfire_64	iop_qbb_se_sum;
    136	wildfire_64	__pad7;
    137	wildfire_64	ioa_err_sum;
    138	wildfire_64	iod_err_sum;
    139	wildfire_64	__pad8[4];
    140	wildfire_64	ioa_diag_force_err;
    141	wildfire_64	iod_diag_force_err;
    142	wildfire_64	__pad9[4];
    143	wildfire_64	iop_diag_send_err_int;
    144	wildfire_64	__pad10[15];
    145	wildfire_64	ioa_scratch;
    146	wildfire_64	iod_scratch;
    147} wildfire_iop;
    148
    149typedef struct {
    150	wildfire_2k	gpa_qbb_map[4];
    151	wildfire_2k	gpa_mem_pop_map;
    152	wildfire_2k	gpa_scratch;
    153	wildfire_2k	gpa_diag;
    154	wildfire_2k	gpa_config_0;
    155	wildfire_2k	__pad1;
    156	wildfire_2k	gpa_init_id;
    157	wildfire_2k	gpa_config_2;
    158	/* not complete */
    159} wildfire_gp;
    160
    161typedef struct {
    162	wildfire_64	pca_what_am_i;
    163	wildfire_64	pca_err_sum;
    164	wildfire_64	pca_diag_force_err;
    165	wildfire_64	pca_diag_send_err_int;
    166	wildfire_64	pca_hose_credits;
    167	wildfire_64	pca_scratch;
    168	wildfire_64	pca_micro_addr;
    169	wildfire_64	pca_micro_data;
    170	wildfire_64	pca_pend_int;
    171	wildfire_64	pca_sent_int;
    172	wildfire_64	__pad1;
    173	wildfire_64	pca_stdio_edge_level;
    174	wildfire_64	__pad2[52];
    175	struct {
    176		wildfire_64	target;
    177		wildfire_64	enable;
    178	} pca_int[4];
    179	wildfire_64	__pad3[56];
    180	wildfire_64	pca_alt_sent_int[32];
    181} wildfire_pca;
    182
    183typedef struct {
    184	wildfire_64	ne_what_am_i;
    185	/* not complete */
    186} wildfire_ne;
    187
    188typedef struct {
    189	wildfire_64	fe_what_am_i;
    190	/* not complete */
    191} wildfire_fe;
    192
    193typedef struct {
    194	wildfire_64	pci_io_addr_ext;
    195	wildfire_64	pci_ctrl;
    196	wildfire_64	pci_err_sum;
    197	wildfire_64	pci_err_addr;
    198	wildfire_64	pci_stall_cnt;
    199	wildfire_64	pci_iack_special;
    200	wildfire_64	__pad1[2];
    201	wildfire_64	pci_pend_int;
    202	wildfire_64	pci_sent_int;
    203	wildfire_64	__pad2[54];
    204	struct {
    205		wildfire_64	wbase;
    206		wildfire_64	wmask;
    207		wildfire_64	tbase;
    208	} pci_window[4];
    209	wildfire_64	pci_flush_tlb;
    210	wildfire_64	pci_perf_mon;
    211} wildfire_pci;
    212
    213#define WILDFIRE_ENTITY_SHIFT		18
    214
    215#define WILDFIRE_GP_ENTITY		(0x10UL << WILDFIRE_ENTITY_SHIFT)
    216#define WILDFIRE_IOP_ENTITY		(0x08UL << WILDFIRE_ENTITY_SHIFT)
    217#define WILDFIRE_QSA_ENTITY		(0x04UL << WILDFIRE_ENTITY_SHIFT)
    218#define WILDFIRE_QSD_ENTITY_SLOW	(0x05UL << WILDFIRE_ENTITY_SHIFT)
    219#define WILDFIRE_QSD_ENTITY_FAST	(0x01UL << WILDFIRE_ENTITY_SHIFT)
    220
    221#define WILDFIRE_PCA_ENTITY(pca)	((0xc|(pca))<<WILDFIRE_ENTITY_SHIFT)
    222
    223#define WILDFIRE_BASE		(IDENT_ADDR | (1UL << 40))
    224
    225#define WILDFIRE_QBB_MASK	0x0fUL	/* for now, only 4 bits/16 QBBs */
    226
    227#define WILDFIRE_QBB(q)		((~((long)(q)) & WILDFIRE_QBB_MASK) << 36)
    228#define WILDFIRE_HOSE(h)	((long)(h) << 33)
    229
    230#define WILDFIRE_QBB_IO(q)	(WILDFIRE_BASE | WILDFIRE_QBB(q))
    231#define WILDFIRE_QBB_HOSE(q,h)	(WILDFIRE_QBB_IO(q) | WILDFIRE_HOSE(h))
    232
    233#define WILDFIRE_MEM(q,h)	(WILDFIRE_QBB_HOSE(q,h) | 0x000000000UL)
    234#define WILDFIRE_CONF(q,h)	(WILDFIRE_QBB_HOSE(q,h) | 0x1FE000000UL)
    235#define WILDFIRE_IO(q,h)	(WILDFIRE_QBB_HOSE(q,h) | 0x1FF000000UL)
    236
    237#define WILDFIRE_qsd(q) \
    238 ((wildfire_qsd *)(WILDFIRE_QBB_IO(q)|WILDFIRE_QSD_ENTITY_SLOW|(((1UL<<13)-1)<<23)))
    239
    240#define WILDFIRE_fast_qsd() \
    241 ((wildfire_fast_qsd *)(WILDFIRE_QBB_IO(0)|WILDFIRE_QSD_ENTITY_FAST|(((1UL<<13)-1)<<23)))
    242
    243#define WILDFIRE_qsa(q) \
    244 ((wildfire_qsa *)(WILDFIRE_QBB_IO(q)|WILDFIRE_QSA_ENTITY|(((1UL<<13)-1)<<23)))
    245
    246#define WILDFIRE_iop(q) \
    247 ((wildfire_iop *)(WILDFIRE_QBB_IO(q)|WILDFIRE_IOP_ENTITY|(((1UL<<13)-1)<<23)))
    248
    249#define WILDFIRE_gp(q) \
    250 ((wildfire_gp *)(WILDFIRE_QBB_IO(q)|WILDFIRE_GP_ENTITY|(((1UL<<13)-1)<<23)))
    251
    252#define WILDFIRE_pca(q,pca) \
    253 ((wildfire_pca *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(pca)|(((1UL<<13)-1)<<23)))
    254
    255#define WILDFIRE_ne(q,pca) \
    256 ((wildfire_ne *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(pca)|(((1UL<<13)-1)<<23)|(1UL<<16)))
    257
    258#define WILDFIRE_fe(q,pca) \
    259 ((wildfire_fe *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(pca)|(((1UL<<13)-1)<<23)|(3UL<<15)))
    260
    261#define WILDFIRE_pci(q,h) \
    262 ((wildfire_pci *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(((h)&6)>>1)|((((h)&1)|2)<<16)|(((1UL<<13)-1)<<23)))
    263
    264#define WILDFIRE_IO_BIAS        WILDFIRE_IO(0,0)
    265#define WILDFIRE_MEM_BIAS       WILDFIRE_MEM(0,0) /* ??? */
    266
    267/* The IO address space is larger than 0xffff */
    268#define WILDFIRE_IO_SPACE	(8UL*1024*1024)
    269
    270#ifdef __KERNEL__
    271
    272#ifndef __EXTERN_INLINE
    273#define __EXTERN_INLINE extern inline
    274#define __IO_EXTERN_INLINE
    275#endif
    276
    277/*
    278 * Memory functions.  all accesses are done through linear space.
    279 */
    280
    281__EXTERN_INLINE void __iomem *wildfire_ioportmap(unsigned long addr)
    282{
    283	return (void __iomem *)(addr + WILDFIRE_IO_BIAS);
    284}
    285
    286__EXTERN_INLINE void __iomem *wildfire_ioremap(unsigned long addr, 
    287					       unsigned long size)
    288{
    289	return (void __iomem *)(addr + WILDFIRE_MEM_BIAS);
    290}
    291
    292__EXTERN_INLINE int wildfire_is_ioaddr(unsigned long addr)
    293{
    294	return addr >= WILDFIRE_BASE;
    295}
    296
    297__EXTERN_INLINE int wildfire_is_mmio(const volatile void __iomem *xaddr)
    298{
    299	unsigned long addr = (unsigned long)xaddr;
    300	return (addr & 0x100000000UL) == 0;
    301}
    302
    303#undef __IO_PREFIX
    304#define __IO_PREFIX			wildfire
    305#define wildfire_trivial_rw_bw		1
    306#define wildfire_trivial_rw_lq		1
    307#define wildfire_trivial_io_bw		1
    308#define wildfire_trivial_io_lq		1
    309#define wildfire_trivial_iounmap	1
    310#include <asm/io_trivial.h>
    311
    312#ifdef __IO_EXTERN_INLINE
    313#undef __EXTERN_INLINE
    314#undef __IO_EXTERN_INLINE
    315#endif
    316
    317#endif /* __KERNEL__ */
    318
    319#endif /* __ALPHA_WILDFIRE__H__ */