Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
R
reform-boundary-uboot
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Reform
reform-boundary-uboot
Commits
53ad0210
Commit
53ad0210
authored
17 years ago
by
Stefan Roese
Browse files
Options
Downloads
Patches
Plain Diff
ppc4xx: Update in_be32() functions and friends to latest Linux version
Signed-off-by:
Stefan Roese
<
sr@denx.de
>
parent
91da09cf
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
include/asm-ppc/io.h
+55
-34
55 additions, 34 deletions
include/asm-ppc/io.h
with
55 additions
and
34 deletions
include/asm-ppc/io.h
+
55
−
34
View file @
53ad0210
...
...
@@ -105,6 +105,11 @@ static inline void sync(void)
__asm__
__volatile__
(
"sync"
:
:
:
"memory"
);
}
static
inline
void
isync
(
void
)
{
__asm__
__volatile__
(
"isync"
:
:
:
"memory"
);
}
/* Enforce in-order execution of data I/O.
* No distinction between read/write on PPC; use eieio for all three.
*/
...
...
@@ -114,74 +119,90 @@ static inline void sync(void)
/*
* 8, 16 and 32 bit, big and little endian I/O operations, with barrier.
*
* Read operations have additional twi & isync to make sure the read
* is actually performed (i.e. the data has come back) before we start
* executing any following instructions.
*/
extern
inline
int
in_8
(
volatile
u8
*
addr
)
#define __iomem
extern
inline
int
in_8
(
const
volatile
unsigned
char
__iomem
*
addr
)
{
int
ret
;
int
ret
;
__asm__
__volatile__
(
"lbz%U1%X1 %0,%1; eieio"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lbz%U1%X1 %0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
}
extern
inline
void
out_8
(
volatile
u
8
*
addr
,
int
val
)
extern
inline
void
out_8
(
volatile
u
nsigned
char
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"stb%U0%X0 %1,%0; eieio"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
__asm__
__volatile__
(
"stb%U0%X0 %1,%0; eieio"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
}
extern
inline
int
in_le16
(
volatile
u
16
*
addr
)
extern
inline
int
in_le16
(
const
volatile
u
nsigned
short
__iomem
*
addr
)
{
int
ret
;
int
ret
;
__asm__
__volatile__
(
"lhbrx %0,0,%1; eieio"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lhbrx %0,0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
}
extern
inline
int
in_be16
(
volatile
u
16
*
addr
)
extern
inline
int
in_be16
(
const
volatile
u
nsigned
short
__iomem
*
addr
)
{
int
ret
;
int
ret
;
__asm__
__volatile__
(
"lhz%U1%X1 %0,%1; eieio"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lhz%U1%X1 %0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
}
extern
inline
void
out_le16
(
volatile
u
16
*
addr
,
int
val
)
extern
inline
void
out_le16
(
volatile
u
nsigned
short
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"sthbrx %1,0,%2
; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
__asm__
__volatile__
(
"
sync;
sthbrx %1,0,%2"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
}
extern
inline
void
out_be16
(
volatile
u
16
*
addr
,
int
val
)
extern
inline
void
out_be16
(
volatile
u
nsigned
short
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"sth%U0%X0 %1,%0
; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
__asm__
__volatile__
(
"
sync;
sth%U0%X0 %1,%0"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
}
extern
inline
unsigned
in_le32
(
volatile
u
32
*
addr
)
extern
inline
unsigned
in_le32
(
const
volatile
u
nsigned
__iomem
*
addr
)
{
unsigned
ret
;
unsigned
ret
;
__asm__
__volatile__
(
"lwbrx %0,0,%1; eieio"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lwbrx %0,0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"r"
(
addr
),
"m"
(
*
addr
));
return
ret
;
}
extern
inline
unsigned
in_be32
(
volatile
u
32
*
addr
)
extern
inline
unsigned
in_be32
(
const
volatile
u
nsigned
__iomem
*
addr
)
{
unsigned
ret
;
unsigned
ret
;
__asm__
__volatile__
(
"lwz%U1%X1 %0,%1; eieio"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
__asm__
__volatile__
(
"sync; lwz%U1%X1 %0,%1;
\n
"
"twi 0,%0,0;
\n
"
"isync"
:
"=r"
(
ret
)
:
"m"
(
*
addr
));
return
ret
;
}
extern
inline
void
out_le32
(
volatile
unsigned
*
addr
,
int
val
)
extern
inline
void
out_le32
(
volatile
unsigned
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"stwbrx %1,0,%2
; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
__asm__
__volatile__
(
"
sync;
stwbrx %1,0,%2"
:
"=m"
(
*
addr
)
:
"r"
(
val
),
"r"
(
addr
));
}
extern
inline
void
out_be32
(
volatile
unsigned
*
addr
,
int
val
)
extern
inline
void
out_be32
(
volatile
unsigned
__iomem
*
addr
,
int
val
)
{
__asm__
__volatile__
(
"stw%U0%X0 %1,%0
; eieio
"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
__asm__
__volatile__
(
"
sync;
stw%U0%X0 %1,%0"
:
"=m"
(
*
addr
)
:
"r"
(
val
));
}
#endif
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment