13
13
#include "string.h"
14
14
#include "stdio.h"
15
15
#include "ops.h"
16
+ #include "of.h"
16
17
17
18
void dt_fixup_memory (u64 start , u64 size )
18
19
{
@@ -23,31 +24,35 @@ void dt_fixup_memory(u64 start, u64 size)
23
24
root = finddevice ("/" );
24
25
if (getprop (root , "#address-cells" , & naddr , sizeof (naddr )) < 0 )
25
26
naddr = 2 ;
27
+ else
28
+ naddr = be32_to_cpu (naddr );
26
29
if (naddr < 1 || naddr > 2 )
27
30
fatal ("Can't cope with #address-cells == %d in /\n\r" , naddr );
28
31
29
32
if (getprop (root , "#size-cells" , & nsize , sizeof (nsize )) < 0 )
30
33
nsize = 1 ;
34
+ else
35
+ nsize = be32_to_cpu (nsize );
31
36
if (nsize < 1 || nsize > 2 )
32
37
fatal ("Can't cope with #size-cells == %d in /\n\r" , nsize );
33
38
34
39
i = 0 ;
35
40
if (naddr == 2 )
36
- memreg [i ++ ] = start >> 32 ;
37
- memreg [i ++ ] = start & 0xffffffff ;
41
+ memreg [i ++ ] = cpu_to_be32 ( start >> 32 ) ;
42
+ memreg [i ++ ] = cpu_to_be32 ( start & 0xffffffff ) ;
38
43
if (nsize == 2 )
39
- memreg [i ++ ] = size >> 32 ;
40
- memreg [i ++ ] = size & 0xffffffff ;
44
+ memreg [i ++ ] = cpu_to_be32 ( size >> 32 ) ;
45
+ memreg [i ++ ] = cpu_to_be32 ( size & 0xffffffff ) ;
41
46
42
47
memory = finddevice ("/memory" );
43
48
if (! memory ) {
44
49
memory = create_node (NULL , "memory" );
45
50
setprop_str (memory , "device_type" , "memory" );
46
51
}
47
52
48
- printf ("Memory <- <0x%x" , memreg [0 ]);
53
+ printf ("Memory <- <0x%x" , be32_to_cpu ( memreg [0 ]) );
49
54
for (i = 1 ; i < (naddr + nsize ); i ++ )
50
- printf (" 0x%x" , memreg [i ]);
55
+ printf (" 0x%x" , be32_to_cpu ( memreg [i ]) );
51
56
printf ("> (%ldMB)\n\r" , (unsigned long )(size >> 20 ));
52
57
53
58
setprop (memory , "reg" , memreg , (naddr + nsize )* sizeof (u32 ));
@@ -65,10 +70,10 @@ void dt_fixup_cpu_clocks(u32 cpu, u32 tb, u32 bus)
65
70
printf ("CPU bus-frequency <- 0x%x (%dMHz)\n\r" , bus , MHZ (bus ));
66
71
67
72
while ((devp = find_node_by_devtype (devp , "cpu" ))) {
68
- setprop_val (devp , "clock-frequency" , cpu );
69
- setprop_val (devp , "timebase-frequency" , tb );
73
+ setprop_val (devp , "clock-frequency" , cpu_to_be32 ( cpu ) );
74
+ setprop_val (devp , "timebase-frequency" , cpu_to_be32 ( tb ) );
70
75
if (bus > 0 )
71
- setprop_val (devp , "bus-frequency" , bus );
76
+ setprop_val (devp , "bus-frequency" , cpu_to_be32 ( bus ) );
72
77
}
73
78
74
79
timebase_period_ns = 1000000000 / tb ;
@@ -80,7 +85,7 @@ void dt_fixup_clock(const char *path, u32 freq)
80
85
81
86
if (devp ) {
82
87
printf ("%s: clock-frequency <- %x (%dMHz)\n\r" , path , freq , MHZ (freq ));
83
- setprop_val (devp , "clock-frequency" , freq );
88
+ setprop_val (devp , "clock-frequency" , cpu_to_be32 ( freq ) );
84
89
}
85
90
}
86
91
@@ -133,8 +138,12 @@ void dt_get_reg_format(void *node, u32 *naddr, u32 *nsize)
133
138
{
134
139
if (getprop (node , "#address-cells" , naddr , 4 ) != 4 )
135
140
* naddr = 2 ;
141
+ else
142
+ * naddr = be32_to_cpu (* naddr );
136
143
if (getprop (node , "#size-cells" , nsize , 4 ) != 4 )
137
144
* nsize = 1 ;
145
+ else
146
+ * nsize = be32_to_cpu (* nsize );
138
147
}
139
148
140
149
static void copy_val (u32 * dest , u32 * src , int naddr )
@@ -163,9 +172,9 @@ static int add_reg(u32 *reg, u32 *add, int naddr)
163
172
int i , carry = 0 ;
164
173
165
174
for (i = MAX_ADDR_CELLS - 1 ; i >= MAX_ADDR_CELLS - naddr ; i -- ) {
166
- u64 tmp = (u64 )reg [i ] + add [i ] + carry ;
175
+ u64 tmp = (u64 )be32_to_cpu ( reg [i ]) + be32_to_cpu ( add [i ]) + carry ;
167
176
carry = tmp >> 32 ;
168
- reg [i ] = ( u32 )tmp ;
177
+ reg [i ] = cpu_to_be32 (( u32 )tmp ) ;
169
178
}
170
179
171
180
return !carry ;
@@ -180,18 +189,18 @@ static int compare_reg(u32 *reg, u32 *range, u32 *rangesize)
180
189
u32 end ;
181
190
182
191
for (i = 0 ; i < MAX_ADDR_CELLS ; i ++ ) {
183
- if (reg [i ] < range [i ])
192
+ if (be32_to_cpu ( reg [i ]) < be32_to_cpu ( range [i ]) )
184
193
return 0 ;
185
- if (reg [i ] > range [i ])
194
+ if (be32_to_cpu ( reg [i ]) > be32_to_cpu ( range [i ]) )
186
195
break ;
187
196
}
188
197
189
198
for (i = 0 ; i < MAX_ADDR_CELLS ; i ++ ) {
190
- end = range [i ] + rangesize [i ];
199
+ end = be32_to_cpu ( range [i ]) + be32_to_cpu ( rangesize [i ]) ;
191
200
192
- if (reg [i ] < end )
201
+ if (be32_to_cpu ( reg [i ]) < end )
193
202
break ;
194
- if (reg [i ] > end )
203
+ if (be32_to_cpu ( reg [i ]) > end )
195
204
return 0 ;
196
205
}
197
206
@@ -240,7 +249,6 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,
240
249
return 0 ;
241
250
242
251
dt_get_reg_format (parent , & naddr , & nsize );
243
-
244
252
if (nsize > 2 )
245
253
return 0 ;
246
254
@@ -252,10 +260,10 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,
252
260
253
261
copy_val (last_addr , prop_buf + offset , naddr );
254
262
255
- ret_size = prop_buf [offset + naddr ];
263
+ ret_size = be32_to_cpu ( prop_buf [offset + naddr ]) ;
256
264
if (nsize == 2 ) {
257
265
ret_size <<= 32 ;
258
- ret_size |= prop_buf [offset + naddr + 1 ];
266
+ ret_size |= be32_to_cpu ( prop_buf [offset + naddr + 1 ]) ;
259
267
}
260
268
261
269
for (;;) {
@@ -278,7 +286,6 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,
278
286
279
287
offset = find_range (last_addr , prop_buf , prev_naddr ,
280
288
naddr , prev_nsize , buflen / 4 );
281
-
282
289
if (offset < 0 )
283
290
return 0 ;
284
291
@@ -296,8 +303,7 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,
296
303
if (naddr > 2 )
297
304
return 0 ;
298
305
299
- ret_addr = ((u64 )last_addr [2 ] << 32 ) | last_addr [3 ];
300
-
306
+ ret_addr = ((u64 )be32_to_cpu (last_addr [2 ]) << 32 ) | be32_to_cpu (last_addr [3 ]);
301
307
if (sizeof (void * ) == 4 &&
302
308
(ret_addr >= 0x100000000ULL || ret_size > 0x100000000ULL ||
303
309
ret_addr + ret_size > 0x100000000ULL ))
@@ -350,11 +356,14 @@ int dt_is_compatible(void *node, const char *compat)
350
356
int dt_get_virtual_reg (void * node , void * * addr , int nres )
351
357
{
352
358
unsigned long xaddr ;
353
- int n ;
359
+ int n , i ;
354
360
355
361
n = getprop (node , "virtual-reg" , addr , nres * 4 );
356
- if (n > 0 )
362
+ if (n > 0 ) {
363
+ for (i = 0 ; i < n /4 ; i ++ )
364
+ ((u32 * )addr )[i ] = be32_to_cpu (((u32 * )addr )[i ]);
357
365
return n / 4 ;
366
+ }
358
367
359
368
for (n = 0 ; n < nres ; n ++ ) {
360
369
if (!dt_xlate_reg (node , n , & xaddr , NULL ))
0 commit comments