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

Commit a2f9e650 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

Merge tag 'irqchip-4.16-3' of...

Merge tag 'irqchip-4.16-3' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/urgent

Pull irqchip updates for 4.16-rc5 from Marc Zyngier

- IMX GPCv2 cleanup
- GICv3 iomem annontation fixes
- GICv3 ITS minimal ITE allocation now matching the LPIs'.
parents 7998a4ec 61b8b228
Loading
Loading
Loading
Loading
+6 −7
Original line number Original line Diff line number Diff line
@@ -1412,7 +1412,7 @@ static struct irq_chip its_irq_chip = {
 * This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations.
 * This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations.
 */
 */
#define IRQS_PER_CHUNK_SHIFT	5
#define IRQS_PER_CHUNK_SHIFT	5
#define IRQS_PER_CHUNK		(1 << IRQS_PER_CHUNK_SHIFT)
#define IRQS_PER_CHUNK		(1UL << IRQS_PER_CHUNK_SHIFT)
#define ITS_MAX_LPI_NRBITS	16 /* 64K LPIs */
#define ITS_MAX_LPI_NRBITS	16 /* 64K LPIs */


static unsigned long *lpi_bitmap;
static unsigned long *lpi_bitmap;
@@ -2119,11 +2119,10 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id,


	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
	/*
	/*
	 * At least one bit of EventID is being used, hence a minimum
	 * We allocate at least one chunk worth of LPIs bet device,
	 * of two entries. No, the architecture doesn't let you
	 * and thus that many ITEs. The device may require less though.
	 * express an ITT with a single entry.
	 */
	 */
	nr_ites = max(2UL, roundup_pow_of_two(nvecs));
	nr_ites = max(IRQS_PER_CHUNK, roundup_pow_of_two(nvecs));
	sz = nr_ites * its->ite_size;
	sz = nr_ites * its->ite_size;
	sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
	sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
	itt = kzalloc(sz, GFP_KERNEL);
	itt = kzalloc(sz, GFP_KERNEL);
@@ -2495,7 +2494,7 @@ static int its_vpe_set_affinity(struct irq_data *d,


static void its_vpe_schedule(struct its_vpe *vpe)
static void its_vpe_schedule(struct its_vpe *vpe)
{
{
	void * __iomem vlpi_base = gic_data_rdist_vlpi_base();
	void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
	u64 val;
	u64 val;


	/* Schedule the VPE */
	/* Schedule the VPE */
@@ -2527,7 +2526,7 @@ static void its_vpe_schedule(struct its_vpe *vpe)


static void its_vpe_deschedule(struct its_vpe *vpe)
static void its_vpe_deschedule(struct its_vpe *vpe)
{
{
	void * __iomem vlpi_base = gic_data_rdist_vlpi_base();
	void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
	u32 count = 1000000;	/* 1s! */
	u32 count = 1000000;	/* 1s! */
	bool clean;
	bool clean;
	u64 val;
	u64 val;
+0 −14
Original line number Original line Diff line number Diff line
@@ -28,20 +28,6 @@ struct gpcv2_irqchip_data {


static struct gpcv2_irqchip_data *imx_gpcv2_instance;
static struct gpcv2_irqchip_data *imx_gpcv2_instance;


/*
 * Interface for the low level wakeup code.
 */
u32 imx_gpcv2_get_wakeup_source(u32 **sources)
{
	if (!imx_gpcv2_instance)
		return 0;

	if (sources)
		*sources = imx_gpcv2_instance->wakeup_sources;

	return IMR_NUM;
}

static int gpcv2_wakeup_source_save(void)
static int gpcv2_wakeup_source_save(void)
{
{
	struct gpcv2_irqchip_data *cd;
	struct gpcv2_irqchip_data *cd;