Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
5194efc5
Commit
5194efc5
authored
May 08, 2014
by
Jason Cooper
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'mvebu/irqchip' into mvebu/soc
parents
2c9b2240
bffbc6ea
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
24 additions
and
14 deletions
+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
No files found.
arch/arm/mach-mvebu/armada-370-xp.h
View file @
5194efc5
...
@@ -20,8 +20,6 @@
...
@@ -20,8 +20,6 @@
#define ARMADA_XP_MAX_CPUS 4
#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
);
void
armada_xp_secondary_startup
(
void
);
extern
struct
smp_operations
armada_xp_smp_ops
;
extern
struct
smp_operations
armada_xp_smp_ops
;
#endif
#endif
...
...
arch/arm/mach-mvebu/platsmp.c
View file @
5194efc5
...
@@ -70,11 +70,6 @@ static void __init set_secondary_cpus_clock(void)
...
@@ -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
)
static
int
armada_xp_boot_secondary
(
unsigned
int
cpu
,
struct
task_struct
*
idle
)
{
{
int
ret
,
hw_cpu
;
int
ret
,
hw_cpu
;
...
@@ -98,8 +93,6 @@ static void __init armada_xp_smp_init_cpus(void)
...
@@ -98,8 +93,6 @@ static void __init armada_xp_smp_init_cpus(void)
if
(
ncores
==
0
||
ncores
>
ARMADA_XP_MAX_CPUS
)
if
(
ncores
==
0
||
ncores
>
ARMADA_XP_MAX_CPUS
)
panic
(
"Invalid number of CPUs in DT
\n
"
);
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
)
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)
...
@@ -132,7 +125,6 @@ static void __init armada_xp_smp_prepare_cpus(unsigned int max_cpus)
struct
smp_operations
armada_xp_smp_ops
__initdata
=
{
struct
smp_operations
armada_xp_smp_ops
__initdata
=
{
.
smp_init_cpus
=
armada_xp_smp_init_cpus
,
.
smp_init_cpus
=
armada_xp_smp_init_cpus
,
.
smp_prepare_cpus
=
armada_xp_smp_prepare_cpus
,
.
smp_prepare_cpus
=
armada_xp_smp_prepare_cpus
,
.
smp_secondary_init
=
armada_xp_secondary_init
,
.
smp_boot_secondary
=
armada_xp_boot_secondary
,
.
smp_boot_secondary
=
armada_xp_boot_secondary
,
#ifdef CONFIG_HOTPLUG_CPU
#ifdef CONFIG_HOTPLUG_CPU
.
cpu_die
=
armada_xp_cpu_die
,
.
cpu_die
=
armada_xp_cpu_die
,
...
...
drivers/irqchip/irq-armada-370-xp.c
View file @
5194efc5
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
#include <linux/irq.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/cpu.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/of_address.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/of_irq.h>
...
@@ -315,7 +316,8 @@ static int armada_370_xp_mpic_irq_map(struct irq_domain *h,
...
@@ -315,7 +316,8 @@ static int armada_370_xp_mpic_irq_map(struct irq_domain *h,
}
}
#ifdef CONFIG_SMP
#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
;
int
cpu
;
unsigned
long
map
=
0
;
unsigned
long
map
=
0
;
...
@@ -335,7 +337,7 @@ void armada_mpic_send_doorbell(const struct cpumask *mask, unsigned int irq)
...
@@ -335,7 +337,7 @@ void armada_mpic_send_doorbell(const struct cpumask *mask, unsigned int irq)
ARMADA_370_XP_SW_TRIG_INT_OFFS
);
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 */
/* Clear pending IPIs */
writel
(
0
,
per_cpu_int_base
+
ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS
);
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)
...
@@ -347,6 +349,20 @@ void armada_xp_mpic_smp_cpu_init(void)
/* Unmask IPI interrupt */
/* Unmask IPI interrupt */
writel
(
0
,
per_cpu_int_base
+
ARMADA_370_XP_INT_CLEAR_MASK_OFFS
);
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 */
#endif
/* CONFIG_SMP */
static
struct
irq_domain_ops
armada_370_xp_mpic_irq_ops
=
{
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,
...
@@ -511,6 +527,10 @@ static int __init armada_370_xp_mpic_of_init(struct device_node *node,
if
(
parent_irq
<=
0
)
{
if
(
parent_irq
<=
0
)
{
irq_set_default_host
(
armada_370_xp_mpic_domain
);
irq_set_default_host
(
armada_370_xp_mpic_domain
);
set_handle_irq
(
armada_370_xp_handle_irq
);
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
{
}
else
{
irq_set_chained_handler
(
parent_irq
,
irq_set_chained_handler
(
parent_irq
,
armada_370_xp_mpic_handle_cascade_irq
);
armada_370_xp_mpic_handle_cascade_irq
);
...
...
drivers/irqchip/irq-orion.c
View file @
5194efc5
...
@@ -42,7 +42,7 @@ __exception_irq_entry orion_handle_irq(struct pt_regs *regs)
...
@@ -42,7 +42,7 @@ __exception_irq_entry orion_handle_irq(struct pt_regs *regs)
u32
stat
=
readl_relaxed
(
gc
->
reg_base
+
ORION_IRQ_CAUSE
)
&
u32
stat
=
readl_relaxed
(
gc
->
reg_base
+
ORION_IRQ_CAUSE
)
&
gc
->
mask_cache
;
gc
->
mask_cache
;
while
(
stat
)
{
while
(
stat
)
{
u32
hwirq
=
ffs
(
stat
)
-
1
;
u32
hwirq
=
__fls
(
stat
)
;
u32
irq
=
irq_find_mapping
(
orion_irq_domain
,
u32
irq
=
irq_find_mapping
(
orion_irq_domain
,
gc
->
irq_base
+
hwirq
);
gc
->
irq_base
+
hwirq
);
handle_IRQ
(
irq
,
regs
);
handle_IRQ
(
irq
,
regs
);
...
@@ -117,7 +117,7 @@ static void orion_bridge_irq_handler(unsigned int irq, struct irq_desc *desc)
...
@@ -117,7 +117,7 @@ static void orion_bridge_irq_handler(unsigned int irq, struct irq_desc *desc)
gc
->
mask_cache
;
gc
->
mask_cache
;
while
(
stat
)
{
while
(
stat
)
{
u32
hwirq
=
ffs
(
stat
)
-
1
;
u32
hwirq
=
__fls
(
stat
)
;
generic_handle_irq
(
irq_find_mapping
(
d
,
gc
->
irq_base
+
hwirq
));
generic_handle_irq
(
irq_find_mapping
(
d
,
gc
->
irq_base
+
hwirq
));
stat
&=
~
(
1
<<
hwirq
);
stat
&=
~
(
1
<<
hwirq
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment