• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  */
5 #ifndef _ASM_GUNYAH_H
6 #define _ASM_GUNYAH_H
7 
8 #include <linux/irq.h>
9 #include <linux/irqdomain.h>
10 
arch_gunyah_fill_irq_fwspec_params(u32 virq,struct irq_fwspec * fwspec)11 static inline int arch_gunyah_fill_irq_fwspec_params(u32 virq,
12 						 struct irq_fwspec *fwspec)
13 {
14 	/* Assume that Gunyah gave us an SPI or ESPI; defensively check it */
15 	if (WARN(virq < 32, "Unexpected virq: %d\n", virq)) {
16 		return -EINVAL;
17 	} else if (virq <= 1019) {
18 		fwspec->param_count = 3;
19 		fwspec->param[0] = 0; /* GIC_SPI */
20 		fwspec->param[1] = virq - 32; /* virq 32 -> SPI 0 */
21 		fwspec->param[2] = IRQ_TYPE_EDGE_RISING;
22 	} else if (WARN(virq < 4096, "Unexpected virq: %d\n", virq)) {
23 		return -EINVAL;
24 	} else if (virq < 5120) {
25 		fwspec->param_count = 3;
26 		fwspec->param[0] = 2; /* GIC_ESPI */
27 		fwspec->param[1] = virq - 4096; /* virq 4096 -> ESPI 0 */
28 		fwspec->param[2] = IRQ_TYPE_EDGE_RISING;
29 	} else {
30 		WARN(1, "Unexpected virq: %d\n", virq);
31 		return -EINVAL;
32 	}
33 	return 0;
34 }
35 
36 enum arch_gunyah_memtype {
37 	/* clang-format off */
38 	GUNYAH_MEMTYPE_DEVICE_nGnRnE	= 0,
39 	GUNYAH_DEVICE_nGnRE		= 1,
40 	GUNYAH_DEVICE_nGRE		= 2,
41 	GUNYAH_DEVICE_GRE		= 3,
42 
43 	GUNYAH_NORMAL_NC	= 0b0101,
44 	GUNYAH_NORMAL_ONC_IWT	= 0b0110,
45 	GUNYAH_NORMAL_ONC_IWB	= 0b0111,
46 	GUNYAH_NORMAL_OWT_INC	= 0b1001,
47 	GUNYAH_NORMAL_WT	= 0b1010,
48 	GUNYAH_NORMAL_OWT_IWB	= 0b1011,
49 	GUNYAH_NORMAL_OWB_INC	= 0b1101,
50 	GUNYAH_NORMAL_OWB_IWT	= 0b1110,
51 	GUNYAH_NORMAL_WB	= 0b1111,
52 	/* clang-format on */
53 };
54 
55 #define ARCH_GUNYAH_DEFAULT_MEMTYPE	GUNYAH_NORMAL_WB
56 
57 #endif
58