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
nexedi
linux
Commits
af5abf1b
Commit
af5abf1b
authored
Jul 09, 2014
by
Vineet Gupta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ARC: help gcc elide icache helper for !SMP
Signed-off-by:
Vineet Gupta
<
vgupta@synopsys.com
>
parent
1b1a22b1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
11 deletions
+28
-11
arch/arc/mm/cache_arc700.c
arch/arc/mm/cache_arc700.c
+28
-11
No files found.
arch/arc/mm/cache_arc700.c
View file @
af5abf1b
...
...
@@ -396,8 +396,16 @@ static inline void __dc_line_op(unsigned long paddr, unsigned long vaddr,
/***********************************************************
* Machine specific helper for per line I-Cache invalidate.
*/
static
void
__ic_line_inv_vaddr_local
(
unsigned
long
paddr
,
unsigned
long
vaddr
,
unsigned
long
sz
)
static
inline
void
__ic_entire_inv
(
void
)
{
write_aux_reg
(
ARC_REG_IC_IVIC
,
1
);
read_aux_reg
(
ARC_REG_IC_CTRL
);
/* blocks */
}
static
inline
void
__ic_line_inv_vaddr_local
(
unsigned
long
paddr
,
unsigned
long
vaddr
,
unsigned
long
sz
)
{
unsigned
long
flags
;
...
...
@@ -406,30 +414,39 @@ static void __ic_line_inv_vaddr_local(unsigned long paddr, unsigned long vaddr,
local_irq_restore
(
flags
);
}
static
inline
void
__ic_entire_inv
(
void
)
{
write_aux_reg
(
ARC_REG_IC_IVIC
,
1
);
read_aux_reg
(
ARC_REG_IC_CTRL
);
/* blocks */
}
#ifndef CONFIG_SMP
#define __ic_line_inv_vaddr(p, v, s) __ic_line_inv_vaddr_local(p, v, s)
#else
struct
ic_
line_inv_vaddr_ipi
{
struct
ic_
inv_args
{
unsigned
long
paddr
,
vaddr
;
int
sz
;
};
static
void
__ic_line_inv_vaddr_helper
(
void
*
info
)
{
struct
ic_line_inv_vaddr_ipi
*
ic_inv
=
(
struct
ic_line_inv_vaddr_ipi
*
)
info
;
struct
ic_inv
*
ic_inv_args
=
(
struct
ic_inv_args
*
)
info
;
__ic_line_inv_vaddr_local
(
ic_inv
->
paddr
,
ic_inv
->
vaddr
,
ic_inv
->
sz
);
}
static
void
__ic_line_inv_vaddr
(
unsigned
long
paddr
,
unsigned
long
vaddr
,
unsigned
long
sz
)
{
struct
ic_line_inv_vaddr_ipi
ic_inv
=
{
paddr
,
vaddr
,
sz
};
struct
ic_inv_args
ic_inv
=
{
.
paddr
=
paddr
,
.
vaddr
=
vaddr
,
.
sz
=
sz
};
on_each_cpu
(
__ic_line_inv_vaddr_helper
,
&
ic_inv
,
1
);
}
#else
#endif
/* CONFIG_SMP */
#else
/* !CONFIG_ARC_HAS_ICACHE */
#define __ic_entire_inv()
#define __ic_line_inv_vaddr(pstart, vstart, sz)
...
...
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