Merge tag 'xtensa-20190201' of git://github.com/jcmvbkbc/linux-xtensa
Pull xtensa fixes from Max Filippov: - fix ccount_timer_shutdown for secondary CPUs - fix secondary CPU initialization - fix secondary CPU reset vector clash with double exception vector - fix present CPUs when booting with 'maxcpus' parameter - limit possible CPUs by configured NR_CPUS - issue a warning if xtensa PIC is asked to retrigger anything other than software IRQ - fix masking/unmasking of the first two IRQs on xtensa MX PIC - fix typo in Kconfig description for user space unaligned access feature - fix Kconfig warning for selecting BUILTIN_DTB * tag 'xtensa-20190201' of git://github.com/jcmvbkbc/linux-xtensa: xtensa: SMP: limit number of possible CPUs by NR_CPUS xtensa: rename BUILTIN_DTB to BUILTIN_DTB_SOURCE xtensa: Fix typo use space=>user space drivers/irqchip: xtensa-mx: fix mask and unmask drivers/irqchip: xtensa: add warning to irq_retrigger xtensa: SMP: mark each possible CPU as present xtensa: smp_lx200_defconfig: fix vectors clash xtensa: SMP: fix secondary CPU initialization xtensa: SMP: fix ccount_timer_shutdown
This commit is contained in:
@@ -71,14 +71,17 @@ static void xtensa_mx_irq_mask(struct irq_data *d)
|
||||
unsigned int mask = 1u << d->hwirq;
|
||||
|
||||
if (mask & (XCHAL_INTTYPE_MASK_EXTERN_EDGE |
|
||||
XCHAL_INTTYPE_MASK_EXTERN_LEVEL)) {
|
||||
set_er(1u << (xtensa_get_ext_irq_no(d->hwirq) -
|
||||
HW_IRQ_MX_BASE), MIENG);
|
||||
} else {
|
||||
mask = __this_cpu_read(cached_irq_mask) & ~mask;
|
||||
__this_cpu_write(cached_irq_mask, mask);
|
||||
xtensa_set_sr(mask, intenable);
|
||||
XCHAL_INTTYPE_MASK_EXTERN_LEVEL)) {
|
||||
unsigned int ext_irq = xtensa_get_ext_irq_no(d->hwirq);
|
||||
|
||||
if (ext_irq >= HW_IRQ_MX_BASE) {
|
||||
set_er(1u << (ext_irq - HW_IRQ_MX_BASE), MIENG);
|
||||
return;
|
||||
}
|
||||
}
|
||||
mask = __this_cpu_read(cached_irq_mask) & ~mask;
|
||||
__this_cpu_write(cached_irq_mask, mask);
|
||||
xtensa_set_sr(mask, intenable);
|
||||
}
|
||||
|
||||
static void xtensa_mx_irq_unmask(struct irq_data *d)
|
||||
@@ -86,14 +89,17 @@ static void xtensa_mx_irq_unmask(struct irq_data *d)
|
||||
unsigned int mask = 1u << d->hwirq;
|
||||
|
||||
if (mask & (XCHAL_INTTYPE_MASK_EXTERN_EDGE |
|
||||
XCHAL_INTTYPE_MASK_EXTERN_LEVEL)) {
|
||||
set_er(1u << (xtensa_get_ext_irq_no(d->hwirq) -
|
||||
HW_IRQ_MX_BASE), MIENGSET);
|
||||
} else {
|
||||
mask |= __this_cpu_read(cached_irq_mask);
|
||||
__this_cpu_write(cached_irq_mask, mask);
|
||||
xtensa_set_sr(mask, intenable);
|
||||
XCHAL_INTTYPE_MASK_EXTERN_LEVEL)) {
|
||||
unsigned int ext_irq = xtensa_get_ext_irq_no(d->hwirq);
|
||||
|
||||
if (ext_irq >= HW_IRQ_MX_BASE) {
|
||||
set_er(1u << (ext_irq - HW_IRQ_MX_BASE), MIENGSET);
|
||||
return;
|
||||
}
|
||||
}
|
||||
mask |= __this_cpu_read(cached_irq_mask);
|
||||
__this_cpu_write(cached_irq_mask, mask);
|
||||
xtensa_set_sr(mask, intenable);
|
||||
}
|
||||
|
||||
static void xtensa_mx_irq_enable(struct irq_data *d)
|
||||
@@ -113,7 +119,11 @@ static void xtensa_mx_irq_ack(struct irq_data *d)
|
||||
|
||||
static int xtensa_mx_irq_retrigger(struct irq_data *d)
|
||||
{
|
||||
xtensa_set_sr(1 << d->hwirq, intset);
|
||||
unsigned int mask = 1u << d->hwirq;
|
||||
|
||||
if (WARN_ON(mask & ~XCHAL_INTTYPE_MASK_SOFTWARE))
|
||||
return 0;
|
||||
xtensa_set_sr(mask, intset);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@@ -70,7 +70,11 @@ static void xtensa_irq_ack(struct irq_data *d)
|
||||
|
||||
static int xtensa_irq_retrigger(struct irq_data *d)
|
||||
{
|
||||
xtensa_set_sr(1 << d->hwirq, intset);
|
||||
unsigned int mask = 1u << d->hwirq;
|
||||
|
||||
if (WARN_ON(mask & ~XCHAL_INTTYPE_MASK_SOFTWARE))
|
||||
return 0;
|
||||
xtensa_set_sr(mask, intset);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user