Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -246,6 +246,14 @@ void gic_stop_count(void)

#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)
{
	u32 vpe_ctl;
+17 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@
#define GIC_VPE_SWINT0_MAP_OFS		0x0054
#define GIC_VPE_SWINT1_MAP_OFS		0x0058
#define GIC_VPE_OTHER_ADDR_OFS		0x0080
#define GIC_VP_IDENT_OFS		0x0088
#define GIC_VPE_WD_CONFIG0_OFS		0x0090
#define GIC_VPE_WD_COUNT0_OFS		0x0094
#define GIC_VPE_WD_INITIAL0_OFS		0x0098
@@ -211,6 +212,10 @@
#define GIC_VPE_SMASK_FDC_SHF		6
#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. */
#define GIC_CPU_INT0		0 /* Core Interrupt 2 */
#define GIC_CPU_INT1		1 /* .		      */
@@ -278,4 +283,16 @@ static inline int gic_get_usm_range(struct resource *gic_usm_res)

#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 */