|  | /* | 
|  | * Copyright 2012-2016 Freescale Semiconductor, Inc. | 
|  | * | 
|  | * SPDX-License-Identifier:	GPL-2.0+ | 
|  | */ | 
|  |  | 
|  | #ifndef __PAMU_H | 
|  | #define __PAMU_H | 
|  |  | 
|  | #define CONFIG_NUM_PAMU		16 | 
|  | #define NUM_PPAACT_ENTRIES	512 | 
|  | #define NUM_SPAACT_ENTRIES	256 | 
|  |  | 
|  | /* PAMU_OFFSET to the next pamu space in ccsr */ | 
|  | #define PAMU_OFFSET 0x1000 | 
|  |  | 
|  | #define PAMU_TABLE_ALIGNMENT 0x00001000 | 
|  |  | 
|  | #define PAMU_PAGE_SHIFT 12 | 
|  | #define PAMU_PAGE_SIZE  4096U | 
|  |  | 
|  | #define PAACE_M_COHERENCE_REQ   0x01 | 
|  |  | 
|  | #define PAACE_DA_HOST_CR                0x80 | 
|  | #define PAACE_DA_HOST_CR_SHIFT          7 | 
|  |  | 
|  | #define PAACE_AF_PT                     0x00000002 | 
|  | #define PAACE_AF_PT_SHIFT               1 | 
|  |  | 
|  | #define PAACE_PT_PRIMARY       0x0 | 
|  | #define PAACE_PT_SECONDARY     0x1 | 
|  |  | 
|  | #define PPAACE_AF_WBAL			0xfffff000 | 
|  | #define PPAACE_AF_WBAL_SHIFT		12 | 
|  |  | 
|  | #define	OME_NUMBER_ENTRIES      16   /* based on P4080 2.0 silicon plan */ | 
|  |  | 
|  | #define PAACE_IA_CID			0x00FF0000 | 
|  | #define PAACE_IA_CID_SHIFT		16 | 
|  | #define PAACE_IA_WCE			0x000000F0 | 
|  | #define PAACE_IA_WCE_SHIFT		4 | 
|  | #define PAACE_IA_ATM			0x0000000C | 
|  | #define PAACE_IA_ATM_SHIFT		2 | 
|  | #define PAACE_IA_OTM			0x00000003 | 
|  | #define PAACE_IA_OTM_SHIFT		0 | 
|  |  | 
|  | #define PAACE_OTM_NO_XLATE      0x00 | 
|  | #define PAACE_OTM_IMMEDIATE     0x01 | 
|  | #define PAACE_OTM_INDEXED       0x02 | 
|  | #define PAACE_OTM_RESERVED      0x03 | 
|  | #define PAACE_ATM_NO_XLATE      0x00 | 
|  | #define PAACE_ATM_WINDOW_XLATE  0x01 | 
|  | #define PAACE_ATM_PAGE_XLATE    0x02 | 
|  | #define PAACE_ATM_WIN_PG_XLATE  \ | 
|  | (PAACE_ATM_WINDOW_XLATE | PAACE_ATM_PAGE_XLATE) | 
|  | #define PAACE_WIN_TWBAL			0xfffff000 | 
|  | #define PAACE_WIN_TWBAL_SHIFT		12 | 
|  | #define PAACE_WIN_SWSE			0x00000fc0 | 
|  | #define PAACE_WIN_SWSE_SHIFT		6 | 
|  |  | 
|  | #define PAACE_AF_AP			0x00000018 | 
|  | #define PAACE_AF_AP_SHIFT		3 | 
|  | #define PAACE_AF_DD			0x00000004 | 
|  | #define PAACE_AF_DD_SHIFT		2 | 
|  | #define PAACE_AF_PT			0x00000002 | 
|  | #define PAACE_AF_PT_SHIFT		1 | 
|  | #define PAACE_AF_V			0x00000001 | 
|  | #define PAACE_AF_V_SHIFT		0 | 
|  | #define PPAACE_AF_WSE			0x00000fc0 | 
|  | #define PPAACE_AF_WSE_SHIFT		6 | 
|  | #define PPAACE_AF_MW			0x00000020 | 
|  | #define PPAACE_AF_MW_SHIFT		5 | 
|  |  | 
|  | #define PAACE_AP_PERMS_DENIED  0x0 | 
|  | #define PAACE_AP_PERMS_QUERY   0x1 | 
|  | #define PAACE_AP_PERMS_UPDATE  0x2 | 
|  | #define PAACE_AP_PERMS_ALL     0x3 | 
|  |  | 
|  | #define SPAACE_AF_LIODN			0xffff0000 | 
|  | #define SPAACE_AF_LIODN_SHIFT		16 | 
|  | #define PAACE_V_VALID          0x1 | 
|  |  | 
|  | #define set_bf(v, m, x)             (v = ((v) & ~(m)) | (((x) << \ | 
|  | (m##_SHIFT)) & (m))) | 
|  | #define get_bf(v, m)            (((v) & (m)) >> (m##_SHIFT)) | 
|  |  | 
|  | #define DEFAULT_NUM_SUBWINDOWS		128 | 
|  | #define PAMU_PCR_OFFSET 0xc10 | 
|  | #define PAMU_PCR_PE	0x40000000 | 
|  |  | 
|  | struct pamu_addr_tbl { | 
|  | phys_addr_t start_addr[10]; | 
|  | phys_addr_t end_addr[10]; | 
|  | phys_size_t size[10]; | 
|  | }; | 
|  |  | 
|  | struct paace { | 
|  | /* PAACE Offset 0x00 */ | 
|  | uint32_t wbah;			/* only valid for Primary PAACE */ | 
|  | uint32_t addr_bitfields;	/* See P/S PAACE_AF_* */ | 
|  |  | 
|  | /* PAACE Offset 0x08 */ | 
|  | /* Interpretation of first 32 bits dependent on DD above */ | 
|  | union { | 
|  | struct { | 
|  | /* Destination ID, see PAACE_DID_* defines */ | 
|  | uint8_t did; | 
|  | /* Partition ID */ | 
|  | uint8_t pid; | 
|  | /* Snoop ID */ | 
|  | uint8_t snpid; | 
|  | /* coherency_required : 1 reserved : 7 */ | 
|  | uint8_t coherency_required; /* See PAACE_DA_* */ | 
|  | } to_host; | 
|  | struct { | 
|  | /* Destination ID, see PAACE_DID_* defines */ | 
|  | uint8_t  did; | 
|  | uint8_t  reserved1; | 
|  | uint16_t reserved2; | 
|  | } to_io; | 
|  | } domain_attr; | 
|  |  | 
|  | /* Implementation attributes + window count + address & operation | 
|  | * translation modes | 
|  | */ | 
|  | uint32_t impl_attr;			/* See PAACE_IA_* */ | 
|  |  | 
|  | /* PAACE Offset 0x10 */ | 
|  | /* Translated window base address */ | 
|  | uint32_t twbah; | 
|  | uint32_t win_bitfields;			/* See PAACE_WIN_* */ | 
|  |  | 
|  | /* PAACE Offset 0x18 */ | 
|  | /* first secondary paace entry */ | 
|  | uint32_t fspi;			/* only valid for Primary PAACE */ | 
|  | union { | 
|  | struct { | 
|  | uint8_t ioea; | 
|  | uint8_t moea; | 
|  | uint8_t ioeb; | 
|  | uint8_t moeb; | 
|  | } immed_ot; | 
|  | struct { | 
|  | uint16_t reserved; | 
|  | uint16_t omi; | 
|  | } index_ot; | 
|  | } op_encode; | 
|  |  | 
|  | /* PAACE Offset 0x20 */ | 
|  | uint32_t reserved1[2];			/* not currently implemented */ | 
|  |  | 
|  | /* PAACE Offset 0x28 */ | 
|  | uint32_t reserved2[2];			/* not currently implemented */ | 
|  |  | 
|  | /* PAACE Offset 0x30 */ | 
|  | uint32_t reserved3[2];			/* not currently implemented */ | 
|  |  | 
|  | /* PAACE Offset 0x38 */ | 
|  | uint32_t reserved4[2];			/* not currently implemented */ | 
|  |  | 
|  | }; | 
|  |  | 
|  | int pamu_init(void); | 
|  | void pamu_enable(void); | 
|  | void pamu_disable(void); | 
|  | int config_pamu(struct pamu_addr_tbl *tbl, int num_entries, uint32_t liodn); | 
|  | int sec_config_pamu_table(uint32_t liodn_ns, uint32_t liodn_s); | 
|  |  | 
|  | #endif |