Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
5194efc5
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
5194efc5
编写于
5月 08, 2014
作者:
J
Jason Cooper
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'mvebu/irqchip' into mvebu/soc
上级
2c9b2240
bffbc6ea
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
24 addition
and
14 deletion
+24
-14
arch/arm/mach-mvebu/armada-370-xp.h
arch/arm/mach-mvebu/armada-370-xp.h
+0
-2
arch/arm/mach-mvebu/platsmp.c
arch/arm/mach-mvebu/platsmp.c
+0
-8
drivers/irqchip/irq-armada-370-xp.c
drivers/irqchip/irq-armada-370-xp.c
+22
-2
drivers/irqchip/irq-orion.c
drivers/irqchip/irq-orion.c
+2
-2
未找到文件。
arch/arm/mach-mvebu/armada-370-xp.h
浏览文件 @
5194efc5
...
...
@@ -20,8 +20,6 @@
#define ARMADA_XP_MAX_CPUS 4
void
armada_mpic_send_doorbell
(
const
struct
cpumask
*
mask
,
unsigned
int
irq
);
void
armada_xp_mpic_smp_cpu_init
(
void
);
void
armada_xp_secondary_startup
(
void
);
extern
struct
smp_operations
armada_xp_smp_ops
;
#endif
...
...
arch/arm/mach-mvebu/platsmp.c
浏览文件 @
5194efc5
...
...
@@ -70,11 +70,6 @@ static void __init set_secondary_cpus_clock(void)
}
}
static
void
armada_xp_secondary_init
(
unsigned
int
cpu
)
{
armada_xp_mpic_smp_cpu_init
();
}
static
int
armada_xp_boot_secondary
(
unsigned
int
cpu
,
struct
task_struct
*
idle
)
{
int
ret
,
hw_cpu
;
...
...
@@ -98,8 +93,6 @@ static void __init armada_xp_smp_init_cpus(void)
if
(
ncores
==
0
||
ncores
>
ARMADA_XP_MAX_CPUS
)
panic
(
"Invalid number of CPUs in DT
\n
"
);
set_smp_cross_call
(
armada_mpic_send_doorbell
);
}
static
void
__init
armada_xp_smp_prepare_cpus
(
unsigned
int
max_cpus
)
...
...
@@ -132,7 +125,6 @@ static void __init armada_xp_smp_prepare_cpus(unsigned int max_cpus)
struct
smp_operations
armada_xp_smp_ops
__initdata
=
{
.
smp_init_cpus
=
armada_xp_smp_init_cpus
,
.
smp_prepare_cpus
=
armada_xp_smp_prepare_cpus
,
.
smp_secondary_init
=
armada_xp_secondary_init
,
.
smp_boot_secondary
=
armada_xp_boot_secondary
,
#ifdef CONFIG_HOTPLUG_CPU
.
cpu_die
=
armada_xp_cpu_die
,
...
...
drivers/irqchip/irq-armada-370-xp.c
浏览文件 @
5194efc5
...
...
@@ -19,6 +19,7 @@
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/cpu.h>
#include <linux/io.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
...
...
@@ -315,7 +316,8 @@ static int armada_370_xp_mpic_irq_map(struct irq_domain *h,
}
#ifdef CONFIG_SMP
void
armada_mpic_send_doorbell
(
const
struct
cpumask
*
mask
,
unsigned
int
irq
)
static
void
armada_mpic_send_doorbell
(
const
struct
cpumask
*
mask
,
unsigned
int
irq
)
{
int
cpu
;
unsigned
long
map
=
0
;
...
...
@@ -335,7 +337,7 @@ void armada_mpic_send_doorbell(const struct cpumask *mask, unsigned int irq)
ARMADA_370_XP_SW_TRIG_INT_OFFS
);
}
void
armada_xp_mpic_smp_cpu_init
(
void
)
static
void
armada_xp_mpic_smp_cpu_init
(
void
)
{
/* Clear pending IPIs */
writel
(
0
,
per_cpu_int_base
+
ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS
);
...
...
@@ -347,6 +349,20 @@ void armada_xp_mpic_smp_cpu_init(void)
/* Unmask IPI interrupt */
writel
(
0
,
per_cpu_int_base
+
ARMADA_370_XP_INT_CLEAR_MASK_OFFS
);
}
static
int
armada_xp_mpic_secondary_init
(
struct
notifier_block
*
nfb
,
unsigned
long
action
,
void
*
hcpu
)
{
if
(
action
==
CPU_STARTING
||
action
==
CPU_STARTING_FROZEN
)
armada_xp_mpic_smp_cpu_init
();
return
NOTIFY_OK
;
}
static
struct
notifier_block
armada_370_xp_mpic_cpu_notifier
=
{
.
notifier_call
=
armada_xp_mpic_secondary_init
,
.
priority
=
100
,
};
#endif
/* CONFIG_SMP */
static
struct
irq_domain_ops
armada_370_xp_mpic_irq_ops
=
{
...
...
@@ -511,6 +527,10 @@ static int __init armada_370_xp_mpic_of_init(struct device_node *node,
if
(
parent_irq
<=
0
)
{
irq_set_default_host
(
armada_370_xp_mpic_domain
);
set_handle_irq
(
armada_370_xp_handle_irq
);
#ifdef CONFIG_SMP
set_smp_cross_call
(
armada_mpic_send_doorbell
);
register_cpu_notifier
(
&
armada_370_xp_mpic_cpu_notifier
);
#endif
}
else
{
irq_set_chained_handler
(
parent_irq
,
armada_370_xp_mpic_handle_cascade_irq
);
...
...
drivers/irqchip/irq-orion.c
浏览文件 @
5194efc5
...
...
@@ -42,7 +42,7 @@ __exception_irq_entry orion_handle_irq(struct pt_regs *regs)
u32
stat
=
readl_relaxed
(
gc
->
reg_base
+
ORION_IRQ_CAUSE
)
&
gc
->
mask_cache
;
while
(
stat
)
{
u32
hwirq
=
ffs
(
stat
)
-
1
;
u32
hwirq
=
__fls
(
stat
)
;
u32
irq
=
irq_find_mapping
(
orion_irq_domain
,
gc
->
irq_base
+
hwirq
);
handle_IRQ
(
irq
,
regs
);
...
...
@@ -117,7 +117,7 @@ static void orion_bridge_irq_handler(unsigned int irq, struct irq_desc *desc)
gc
->
mask_cache
;
while
(
stat
)
{
u32
hwirq
=
ffs
(
stat
)
-
1
;
u32
hwirq
=
__fls
(
stat
)
;
generic_handle_irq
(
irq_find_mapping
(
d
,
gc
->
irq_base
+
hwirq
));
stat
&=
~
(
1
<<
hwirq
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录