[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6a 05/17] xen/arm: use ioremap to map gic-v2 registers
Hi Vijay, On 06/26/2014 06:33 AM, vijay.kilari@xxxxxxxxx wrote: > From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> > > gic-v2 driver uses fixmap to map the registers. > Instead use ioremap to access mmio registers. > > With this patch, gic-v2 register definitions are updated > to use absolute offset address instead of dividing the > register offset by 4. I remembered I requested to made some changes in this patch. I saw you did it but you didn't specify in the changelog. People may not be agree with your new changes and you should notifying about any change in the code! [..] > @@ -229,8 +232,7 @@ static void gic_set_irq_properties(struct irq_desc *desc, > const cpumask_t *cpu_mask, > unsigned int priority) > { > - volatile unsigned char *bytereg; > - uint32_t cfg, edgebit; > + uint32_t cfg, edgebit, itarget, ipriority; > unsigned int mask; > unsigned int irq = desc->irq; > unsigned int type = desc->arch.type; > @@ -243,21 +245,28 @@ static void gic_set_irq_properties(struct irq_desc > *desc, > mask = gic_cpu_mask(cpu_mask); > > /* Set edge / level */ > - cfg = GICD[GICD_ICFGR + irq / 16]; > + cfg = readl_relaxed(GICD + GICD_ICFGR + (irq / 16) * 4); > edgebit = 2u << (2 * (irq % 16)); > if ( type & DT_IRQ_TYPE_LEVEL_MASK ) > cfg &= ~edgebit; > else if ( type & DT_IRQ_TYPE_EDGE_BOTH ) > cfg |= edgebit; > - GICD[GICD_ICFGR + irq / 16] = cfg; > + writel_relaxed(cfg, GICD + GICD_ICFGR + (irq / 16) * 4); > > /* Set target CPU mask (RAZ/WI on uniprocessor) */ > - bytereg = (unsigned char *) (GICD + GICD_ITARGETSR); > - bytereg[irq] = mask; > - > + itarget = readl_relaxed(GICD + GICD_ITARGETSR + (irq / 4) * 4); > + /* Clear mask */ > + itarget &= ~(0xffu << (8 * (irq % 4))); > + /* Set mask */ > + itarget |= mask << (8 * (irq % 4)); > + writel_relaxed(itarget, GICD + GICD_ITARGETSR + (irq / 4) * 4); Why didn't you use writeb_relaxed? This change is complex for nothing. writeb_relaxed(mask, GICD + GICD_ITARGETSR + irq); > + > + ipriority = readl_relaxed(GICD + GICD_IPRIORITYR + (irq / 4) * 4); > + /* Clear priority */ > + ipriority &= ~(0xffu << (8 * (irq % 4))); > /* Set priority */ > - bytereg = (unsigned char *) (GICD + GICD_IPRIORITYR); > - bytereg[irq] = priority; > + ipriority |= priority << (8 * (irq % 4)); > + writel_relaxed(ipriority, GICD + GICD_IPRIORITYR + (irq / 4) * 4); writeb_relaxed(priority, GICD + GICD_IPRIORITYR + irq); Regards, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |