mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 18:24:14 +08:00
powerpc: Make RTAS device tree accesses endian safe
Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
e91ae5bdc5
commit
08bc1dc51f
@ -204,7 +204,7 @@ void rtas_progress(char *s, unsigned short hex)
|
||||
{
|
||||
struct device_node *root;
|
||||
int width;
|
||||
const int *p;
|
||||
const __be32 *p;
|
||||
char *os;
|
||||
static int display_character, set_indicator;
|
||||
static int display_width, display_lines, form_feed;
|
||||
@ -221,13 +221,13 @@ void rtas_progress(char *s, unsigned short hex)
|
||||
if ((root = of_find_node_by_path("/rtas"))) {
|
||||
if ((p = of_get_property(root,
|
||||
"ibm,display-line-length", NULL)))
|
||||
display_width = *p;
|
||||
display_width = be32_to_cpu(*p);
|
||||
if ((p = of_get_property(root,
|
||||
"ibm,form-feed", NULL)))
|
||||
form_feed = *p;
|
||||
form_feed = be32_to_cpu(*p);
|
||||
if ((p = of_get_property(root,
|
||||
"ibm,display-number-of-lines", NULL)))
|
||||
display_lines = *p;
|
||||
display_lines = be32_to_cpu(*p);
|
||||
row_width = of_get_property(root,
|
||||
"ibm,display-truncation-length", NULL);
|
||||
of_node_put(root);
|
||||
@ -322,11 +322,11 @@ EXPORT_SYMBOL(rtas_progress); /* needed by rtas_flash module */
|
||||
|
||||
int rtas_token(const char *service)
|
||||
{
|
||||
const int *tokp;
|
||||
const __be32 *tokp;
|
||||
if (rtas.dev == NULL)
|
||||
return RTAS_UNKNOWN_SERVICE;
|
||||
tokp = of_get_property(rtas.dev, service, NULL);
|
||||
return tokp ? *tokp : RTAS_UNKNOWN_SERVICE;
|
||||
return tokp ? be32_to_cpu(*tokp) : RTAS_UNKNOWN_SERVICE;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_token);
|
||||
|
||||
@ -588,8 +588,8 @@ bool rtas_indicator_present(int token, int *maxindex)
|
||||
{
|
||||
int proplen, count, i;
|
||||
const struct indicator_elem {
|
||||
u32 token;
|
||||
u32 maxindex;
|
||||
__be32 token;
|
||||
__be32 maxindex;
|
||||
} *indicators;
|
||||
|
||||
indicators = of_get_property(rtas.dev, "rtas-indicators", &proplen);
|
||||
@ -599,10 +599,10 @@ bool rtas_indicator_present(int token, int *maxindex)
|
||||
count = proplen / sizeof(struct indicator_elem);
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
if (indicators[i].token != token)
|
||||
if (__be32_to_cpu(indicators[i].token) != token)
|
||||
continue;
|
||||
if (maxindex)
|
||||
*maxindex = indicators[i].maxindex;
|
||||
*maxindex = __be32_to_cpu(indicators[i].maxindex);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1097,19 +1097,19 @@ void __init rtas_initialize(void)
|
||||
*/
|
||||
rtas.dev = of_find_node_by_name(NULL, "rtas");
|
||||
if (rtas.dev) {
|
||||
const u32 *basep, *entryp, *sizep;
|
||||
const __be32 *basep, *entryp, *sizep;
|
||||
|
||||
basep = of_get_property(rtas.dev, "linux,rtas-base", NULL);
|
||||
sizep = of_get_property(rtas.dev, "rtas-size", NULL);
|
||||
if (basep != NULL && sizep != NULL) {
|
||||
rtas.base = *basep;
|
||||
rtas.size = *sizep;
|
||||
rtas.base = __be32_to_cpu(*basep);
|
||||
rtas.size = __be32_to_cpu(*sizep);
|
||||
entryp = of_get_property(rtas.dev,
|
||||
"linux,rtas-entry", NULL);
|
||||
if (entryp == NULL) /* Ugh */
|
||||
rtas.entry = rtas.base;
|
||||
else
|
||||
rtas.entry = *entryp;
|
||||
rtas.entry = __be32_to_cpu(*entryp);
|
||||
} else
|
||||
rtas.dev = NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user