/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2021 Western Digital Corporation or its affiliates. * Copyright (C) 2022 Ventana Micro Systems Inc. */ #ifndef __LINUX_IRQCHIP_RISCV_APLIC_H #define __LINUX_IRQCHIP_RISCV_APLIC_H #include #define APLIC_MAX_IDC BIT(14) #define APLIC_MAX_SOURCE 1024 #define APLIC_DOMAINCFG 0x0000 #define APLIC_DOMAINCFG_RDONLY 0x80000000 #define APLIC_DOMAINCFG_IE BIT(8) #define APLIC_DOMAINCFG_DM BIT(2) #define APLIC_DOMAINCFG_BE BIT(0) #define APLIC_SOURCECFG_BASE 0x0004 #define APLIC_SOURCECFG_D BIT(10) #define APLIC_SOURCECFG_CHILDIDX_MASK 0x000003ff #define APLIC_SOURCECFG_SM_MASK 0x00000007 #define APLIC_SOURCECFG_SM_INACTIVE 0x0 #define APLIC_SOURCECFG_SM_DETACH 0x1 #define APLIC_SOURCECFG_SM_EDGE_RISE 0x4 #define APLIC_SOURCECFG_SM_EDGE_FALL 0x5 #define APLIC_SOURCECFG_SM_LEVEL_HIGH 0x6 #define APLIC_SOURCECFG_SM_LEVEL_LOW 0x7 #define APLIC_MMSICFGADDR 0x1bc0 #define APLIC_MMSICFGADDRH 0x1bc4 #define APLIC_SMSICFGADDR 0x1bc8 #define APLIC_SMSICFGADDRH 0x1bcc #ifdef CONFIG_RISCV_M_MODE #define APLIC_xMSICFGADDR APLIC_MMSICFGADDR #define APLIC_xMSICFGADDRH APLIC_MMSICFGADDRH #else #define APLIC_xMSICFGADDR APLIC_SMSICFGADDR #define APLIC_xMSICFGADDRH APLIC_SMSICFGADDRH #endif #define APLIC_xMSICFGADDRH_L BIT(31) #define APLIC_xMSICFGADDRH_HHXS_MASK 0x1f #define APLIC_xMSICFGADDRH_HHXS_SHIFT 24 #define APLIC_xMSICFGADDRH_HHXS (APLIC_xMSICFGADDRH_HHXS_MASK << \ APLIC_xMSICFGADDRH_HHXS_SHIFT) #define APLIC_xMSICFGADDRH_LHXS_MASK 0x7 #define APLIC_xMSICFGADDRH_LHXS_SHIFT 20 #define APLIC_xMSICFGADDRH_LHXS (APLIC_xMSICFGADDRH_LHXS_MASK << \ APLIC_xMSICFGADDRH_LHXS_SHIFT) #define APLIC_xMSICFGADDRH_HHXW_MASK 0x7 #define APLIC_xMSICFGADDRH_HHXW_SHIFT 16 #define APLIC_xMSICFGADDRH_HHXW (APLIC_xMSICFGADDRH_HHXW_MASK << \ APLIC_xMSICFGADDRH_HHXW_SHIFT) #define APLIC_xMSICFGADDRH_LHXW_MASK 0xf #define APLIC_xMSICFGADDRH_LHXW_SHIFT 12 #define APLIC_xMSICFGADDRH_LHXW (APLIC_xMSICFGADDRH_LHXW_MASK << \ APLIC_xMSICFGADDRH_LHXW_SHIFT) #define APLIC_xMSICFGADDRH_BAPPN_MASK 0xfff #define APLIC_xMSICFGADDRH_BAPPN_SHIFT 0 #define APLIC_xMSICFGADDRH_BAPPN (APLIC_xMSICFGADDRH_BAPPN_MASK << \ APLIC_xMSICFGADDRH_BAPPN_SHIFT) #define APLIC_xMSICFGADDR_PPN_SHIFT 12 #define APLIC_xMSICFGADDR_PPN_HART(__lhxs) \ (BIT(__lhxs) - 1) #define APLIC_xMSICFGADDR_PPN_LHX_MASK(__lhxw) \ (BIT(__lhxw) - 1) #define APLIC_xMSICFGADDR_PPN_LHX_SHIFT(__lhxs) \ ((__lhxs)) #define APLIC_xMSICFGADDR_PPN_LHX(__lhxw, __lhxs) \ (APLIC_xMSICFGADDR_PPN_LHX_MASK(__lhxw) << \ APLIC_xMSICFGADDR_PPN_LHX_SHIFT(__lhxs)) #define APLIC_xMSICFGADDR_PPN_HHX_MASK(__hhxw) \ (BIT(__hhxw) - 1) #define APLIC_xMSICFGADDR_PPN_HHX_SHIFT(__hhxs) \ ((__hhxs) + APLIC_xMSICFGADDR_PPN_SHIFT) #define APLIC_xMSICFGADDR_PPN_HHX(__hhxw, __hhxs) \ (APLIC_xMSICFGADDR_PPN_HHX_MASK(__hhxw) << \ APLIC_xMSICFGADDR_PPN_HHX_SHIFT(__hhxs)) #define APLIC_IRQBITS_PER_REG 32 #define APLIC_SETIP_BASE 0x1c00 #define APLIC_SETIPNUM 0x1cdc #define APLIC_CLRIP_BASE 0x1d00 #define APLIC_CLRIPNUM 0x1ddc #define APLIC_SETIE_BASE 0x1e00 #define APLIC_SETIENUM 0x1edc #define APLIC_CLRIE_BASE 0x1f00 #define APLIC_CLRIENUM 0x1fdc #define APLIC_SETIPNUM_LE 0x2000 #define APLIC_SETIPNUM_BE 0x2004 #define APLIC_GENMSI 0x3000 #define APLIC_TARGET_BASE 0x3004 #define APLIC_TARGET_HART_IDX_SHIFT 18 #define APLIC_TARGET_HART_IDX_MASK 0x3fff #define APLIC_TARGET_HART_IDX (APLIC_TARGET_HART_IDX_MASK << \ APLIC_TARGET_HART_IDX_SHIFT) #define APLIC_TARGET_GUEST_IDX_SHIFT 12 #define APLIC_TARGET_GUEST_IDX_MASK 0x3f #define APLIC_TARGET_GUEST_IDX (APLIC_TARGET_GUEST_IDX_MASK << \ APLIC_TARGET_GUEST_IDX_SHIFT) #define APLIC_TARGET_IPRIO_SHIFT 0 #define APLIC_TARGET_IPRIO_MASK 0xff #define APLIC_TARGET_IPRIO (APLIC_TARGET_IPRIO_MASK << \ APLIC_TARGET_IPRIO_SHIFT) #define APLIC_TARGET_EIID_SHIFT 0 #define APLIC_TARGET_EIID_MASK 0x7ff #define APLIC_TARGET_EIID (APLIC_TARGET_EIID_MASK << \ APLIC_TARGET_EIID_SHIFT) #define APLIC_IDC_BASE 0x4000 #define APLIC_IDC_SIZE 32 #define APLIC_IDC_IDELIVERY 0x00 #define APLIC_IDC_IFORCE 0x04 #define APLIC_IDC_ITHRESHOLD 0x08 #define APLIC_IDC_TOPI 0x18 #define APLIC_IDC_TOPI_ID_SHIFT 16 #define APLIC_IDC_TOPI_ID_MASK 0x3ff #define APLIC_IDC_TOPI_ID (APLIC_IDC_TOPI_ID_MASK << \ APLIC_IDC_TOPI_ID_SHIFT) #define APLIC_IDC_TOPI_PRIO_SHIFT 0 #define APLIC_IDC_TOPI_PRIO_MASK 0xff #define APLIC_IDC_TOPI_PRIO (APLIC_IDC_TOPI_PRIO_MASK << \ APLIC_IDC_TOPI_PRIO_SHIFT) #define APLIC_IDC_CLAIMI 0x1c #endif