Commit 835d2b45 authored by Paul Burton's avatar Paul Burton Committed by Ralf Baechle

irqchip: mips-gic: Provide VP ID accessor

Provide a gic_read_local_vp_id() function to read the VCNUM field of the
GICs local VP_IDENT register. This will be used by a further patch to
check that the value reported by the GIC matches up with the kernels
calculation.
Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
Acked-by: default avatarJason Cooper <jason@lakedaemon.net>
Cc: Andrew Bresticker <abrestic@chromium.org>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/12334/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent d46812bb
...@@ -246,6 +246,14 @@ void gic_stop_count(void) ...@@ -246,6 +246,14 @@ void gic_stop_count(void)
#endif #endif
unsigned gic_read_local_vp_id(void)
{
unsigned long ident;
ident = gic_read(GIC_REG(VPE_LOCAL, GIC_VP_IDENT));
return ident & GIC_VP_IDENT_VCNUM_MSK;
}
static bool gic_local_irq_is_routable(int intr) static bool gic_local_irq_is_routable(int intr)
{ {
u32 vpe_ctl; u32 vpe_ctl;
......
...@@ -103,6 +103,7 @@ ...@@ -103,6 +103,7 @@
#define GIC_VPE_SWINT0_MAP_OFS 0x0054 #define GIC_VPE_SWINT0_MAP_OFS 0x0054
#define GIC_VPE_SWINT1_MAP_OFS 0x0058 #define GIC_VPE_SWINT1_MAP_OFS 0x0058
#define GIC_VPE_OTHER_ADDR_OFS 0x0080 #define GIC_VPE_OTHER_ADDR_OFS 0x0080
#define GIC_VP_IDENT_OFS 0x0088
#define GIC_VPE_WD_CONFIG0_OFS 0x0090 #define GIC_VPE_WD_CONFIG0_OFS 0x0090
#define GIC_VPE_WD_COUNT0_OFS 0x0094 #define GIC_VPE_WD_COUNT0_OFS 0x0094
#define GIC_VPE_WD_INITIAL0_OFS 0x0098 #define GIC_VPE_WD_INITIAL0_OFS 0x0098
...@@ -211,6 +212,10 @@ ...@@ -211,6 +212,10 @@
#define GIC_VPE_SMASK_FDC_SHF 6 #define GIC_VPE_SMASK_FDC_SHF 6
#define GIC_VPE_SMASK_FDC_MSK (MSK(1) << GIC_VPE_SMASK_FDC_SHF) #define GIC_VPE_SMASK_FDC_MSK (MSK(1) << GIC_VPE_SMASK_FDC_SHF)
/* GIC_VP_IDENT fields */
#define GIC_VP_IDENT_VCNUM_SHF 0
#define GIC_VP_IDENT_VCNUM_MSK (MSK(6) << GIC_VP_IDENT_VCNUM_SHF)
/* GIC nomenclature for Core Interrupt Pins. */ /* GIC nomenclature for Core Interrupt Pins. */
#define GIC_CPU_INT0 0 /* Core Interrupt 2 */ #define GIC_CPU_INT0 0 /* Core Interrupt 2 */
#define GIC_CPU_INT1 1 /* . */ #define GIC_CPU_INT1 1 /* . */
...@@ -278,4 +283,16 @@ static inline int gic_get_usm_range(struct resource *gic_usm_res) ...@@ -278,4 +283,16 @@ static inline int gic_get_usm_range(struct resource *gic_usm_res)
#endif /* CONFIG_MIPS_GIC */ #endif /* CONFIG_MIPS_GIC */
/**
* gic_read_local_vp_id() - read the local VPs VCNUM
*
* Read the VCNUM of the local VP from the GIC_VP_IDENT register and
* return it to the caller. This ID should be used to refer to the VP
* via the GICs VP-other region, or when calculating an offset to a
* bit representing the VP in interrupt masks.
*
* Return: The VCNUM value for the local VP.
*/
extern unsigned gic_read_local_vp_id(void);
#endif /* __LINUX_IRQCHIP_MIPS_GIC_H */ #endif /* __LINUX_IRQCHIP_MIPS_GIC_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment