1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright 2019 Broadcom. 4 */ 5 6#ifndef __GIC_V3_H__ 7#define __GIC_V3_H__ 8 9#ifndef __ASSEMBLY__ 10#include <linux/bitops.h> 11#endif 12 13#define GICR_CTLR_ENABLE_LPIS BIT(0) 14#define GICR_CTLR_RWP BIT(3) 15 16#define GICR_TYPER_CPU_NUMBER(r) (((r) >> 8) & 0xffff) 17 18#define GICR_WAKER_PROCESSORSLEEP BIT(1) 19#define GICR_WAKER_CHILDRENASLEEP BIT(2) 20 21#define GIC_BASER_CACHE_NCNB 0ULL 22#define GIC_BASER_CACHE_SAMEASINNER 0ULL 23#define GIC_BASER_CACHE_NC 1ULL 24#define GIC_BASER_CACHE_RAWT 2ULL 25#define GIC_BASER_CACHE_RAWB 3ULL 26#define GIC_BASER_CACHE_WAWT 4ULL 27#define GIC_BASER_CACHE_WAWB 5ULL 28#define GIC_BASER_CACHE_RAWAWT 6ULL 29#define GIC_BASER_CACHE_RAWAWB 7ULL 30#define GIC_BASER_CACHE_MASK 7ULL 31#define GIC_BASER_NONSHAREABLE 0ULL 32#define GIC_BASER_INNERSHAREABLE 1ULL 33#define GIC_BASER_OUTERSHAREABLE 2ULL 34#define GIC_BASER_SHAREABILITY_MASK 3ULL 35 36#define GIC_BASER_CACHEABILITY(reg, inner_outer, type) \ 37 (GIC_BASER_CACHE_##type << reg##_##inner_outer##_CACHEABILITY_SHIFT) 38 39#define GIC_BASER_SHAREABILITY(reg, type) \ 40 (GIC_BASER_##type << reg##_SHAREABILITY_SHIFT) 41 42/* encode a size field of width @w containing @n - 1 units */ 43#define GIC_ENCODE_SZ(n, w) (((unsigned long)(n) - 1) &\ 44 GENMASK_ULL(((w) - 1), 0)) 45 46#define GICR_PROPBASER_SHAREABILITY_SHIFT (10) 47#define GICR_PROPBASER_INNER_CACHEABILITY_SHIFT (7) 48#define GICR_PROPBASER_OUTER_CACHEABILITY_SHIFT (56) 49#define GICR_PROPBASER_SHAREABILITY_MASK \ 50 GIC_BASER_SHAREABILITY(GICR_PROPBASER, SHAREABILITY_MASK) 51#define GICR_PROPBASER_INNER_CACHEABILITY_MASK \ 52 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, MASK) 53#define GICR_PROPBASER_OUTER_CACHEABILITY_MASK \ 54 GIC_BASER_CACHEABILITY(GICR_PROPBASER, OUTER, MASK) 55#define GICR_PROPBASER_CACHEABILITY_MASK GICR_PROPBASER_INNER_CACHEABILITY_MASK 56 57#define GICR_PROPBASER_INNERSHAREABLE \ 58 GIC_BASER_SHAREABILITY(GICR_PROPBASER, INNERSHAREABLE) 59 60#define GICR_PROPBASER_NCNB \ 61 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, NCNB) 62#define GICR_PROPBASER_NC \ 63 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, NC) 64#define GICR_PROPBASER_RAWT \ 65 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWT) 66#define GICR_PROPBASER_RAWB \ 67 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWB) 68#define GICR_PROPBASER_WAWT \ 69 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, WAWT) 70#define GICR_PROPBASER_WAWB \ 71 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, WAWB) 72#define GICR_PROPBASER_RAWAWT \ 73 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWAWT) 74#define GICR_PROPBASER_RAWAWB \ 75 GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RAWAWB) 76 77#define GICR_PROPBASER_IDBITS_MASK (0x1f) 78#define GICR_PROPBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 12)) 79#define GICR_PENDBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 16)) 80 81#define GICR_PENDBASER_SHAREABILITY_SHIFT (10) 82#define GICR_PENDBASER_INNER_CACHEABILITY_SHIFT (7) 83#define GICR_PENDBASER_OUTER_CACHEABILITY_SHIFT (56) 84#define GICR_PENDBASER_SHAREABILITY_MASK \ 85 GIC_BASER_SHAREABILITY(GICR_PENDBASER, SHAREABILITY_MASK) 86#define GICR_PENDBASER_INNER_CACHEABILITY_MASK \ 87 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, MASK) 88#define GICR_PENDBASER_OUTER_CACHEABILITY_MASK \ 89 GIC_BASER_CACHEABILITY(GICR_PENDBASER, OUTER, MASK) 90#define GICR_PENDBASER_CACHEABILITY_MASK \ 91 GICR_PENDBASER_INNER_CACHEABILITY_MASK 92 93#define GICR_PENDBASER_INNERSHAREABLE \ 94 GIC_BASER_SHAREABILITY(GICR_PENDBASER, INNERSHAREABLE) 95 96#define GICR_PENDBASER_NCNB \ 97 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, NCNB) 98#define GICR_PENDBASER_NC \ 99 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, NC) 100#define GICR_PENDBASER_RAWT \ 101 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWT) 102#define GICR_PENDBASER_RAWB \ 103 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWB) 104#define GICR_PENDBASER_WAWT \ 105 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, WAWT) 106#define GICR_PENDBASER_WAWB \ 107 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, WAWB) 108#define GICR_PENDBASER_RAWAWT \ 109 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWAWT) 110#define GICR_PENDBASER_RAWAWB \ 111 GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RAWAWB) 112 113#define GICR_PENDBASER_PTZ BIT_ULL(62) 114 115#define ITS_MAX_LPI_NRBITS 16 /* 64K LPIs */ 116 117#define GICD_TYPER_ID_BITS(typer) ((((typer) >> 19) & 0x1f) + 1) 118#define GICD_TYPER_NUM_LPIS(typer) ((((typer) >> 11) & 0x1f) + 1) 119#define GICD_TYPER_IRQS(typer) ((((typer) & 0x1f) + 1) * 32) 120 121/* Message based interrupts support */ 122#define GICD_TYPER_MBIS BIT(16) 123/* LPI support */ 124#define GICD_TYPER_LPIS BIT(17) 125#define GICD_TYPER_RSS BIT(26) 126 127#define GIC_REDISTRIBUTOR_OFFSET 0x20000 128 129#ifdef CONFIG_GIC_V3_ITS 130int gic_lpi_tables_init(u64 base, u32 max_redist); 131#else 132int gic_lpi_tables_init(u64 base, u32 max_redist) 133{ 134 return 0; 135} 136#endif /* CONFIG_GIC_V3_ITS */ 137 138#endif /* __GIC_V3_H__ */ 139