Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into devel-stable
Conflicts: arch/arm/common/gic.c arch/arm/plat-omap/include/plat/common.h
This commit is contained in:
@@ -612,7 +612,8 @@ static void __init gic_pm_init(struct gic_chip_data *gic)
|
||||
sizeof(u32));
|
||||
BUG_ON(!gic->saved_ppi_conf);
|
||||
|
||||
cpu_pm_register_notifier(&gic_notifier_block);
|
||||
if (gic == &gic_data[0])
|
||||
cpu_pm_register_notifier(&gic_notifier_block);
|
||||
}
|
||||
#else
|
||||
static void __init gic_pm_init(struct gic_chip_data *gic)
|
||||
@@ -696,12 +697,14 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
|
||||
* For primary GICs, skip over SGIs.
|
||||
* For secondary GICs, skip over PPIs, too.
|
||||
*/
|
||||
domain->hwirq_base = 32;
|
||||
if (gic_nr == 0) {
|
||||
domain->hwirq_base = 16;
|
||||
if (irq_start > 0)
|
||||
irq_start = (irq_start & ~31) + 16;
|
||||
} else
|
||||
domain->hwirq_base = 32;
|
||||
if ((irq_start & 31) > 0) {
|
||||
domain->hwirq_base = 16;
|
||||
if (irq_start != -1)
|
||||
irq_start = (irq_start & ~31) + 16;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Find out how many interrupts are supported.
|
||||
|
@@ -1211,8 +1211,8 @@ static inline u32 _prepare_ccr(const struct pl330_reqcfg *rqc)
|
||||
ccr |= (rqc->brst_size << CC_SRCBRSTSIZE_SHFT);
|
||||
ccr |= (rqc->brst_size << CC_DSTBRSTSIZE_SHFT);
|
||||
|
||||
ccr |= (rqc->dcctl << CC_SRCCCTRL_SHFT);
|
||||
ccr |= (rqc->scctl << CC_DSTCCTRL_SHFT);
|
||||
ccr |= (rqc->scctl << CC_SRCCCTRL_SHFT);
|
||||
ccr |= (rqc->dcctl << CC_DSTCCTRL_SHFT);
|
||||
|
||||
ccr |= (rqc->swap << CC_SWAP_SHFT);
|
||||
|
||||
@@ -1623,6 +1623,11 @@ static inline int _alloc_event(struct pl330_thread *thrd)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static bool _chan_ns(const struct pl330_info *pi, int i)
|
||||
{
|
||||
return pi->pcfg.irq_ns & (1 << i);
|
||||
}
|
||||
|
||||
/* Upon success, returns IdentityToken for the
|
||||
* allocated channel, NULL otherwise.
|
||||
*/
|
||||
@@ -1647,7 +1652,8 @@ void *pl330_request_channel(const struct pl330_info *pi)
|
||||
|
||||
for (i = 0; i < chans; i++) {
|
||||
thrd = &pl330->channels[i];
|
||||
if (thrd->free) {
|
||||
if ((thrd->free) && (!_manager_ns(thrd) ||
|
||||
_chan_ns(pi, i))) {
|
||||
thrd->ev = _alloc_event(thrd);
|
||||
if (thrd->ev >= 0) {
|
||||
thrd->free = false;
|
||||
|
Reference in New Issue
Block a user