Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
6524036a
Commit
6524036a
authored
Dec 05, 2008
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sparc: Move core of OF device tree building code into prom_common.c
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
4aef8c53
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
80 additions
and
132 deletions
+80
-132
arch/sparc/kernel/prom.h
arch/sparc/kernel/prom.h
+15
-2
arch/sparc/kernel/prom_32.c
arch/sparc/kernel/prom_32.c
+5
-64
arch/sparc/kernel/prom_64.c
arch/sparc/kernel/prom_64.c
+5
-64
arch/sparc/kernel/prom_common.c
arch/sparc/kernel/prom_common.c
+55
-2
No files found.
arch/sparc/kernel/prom.h
View file @
6524036a
...
...
@@ -15,7 +15,20 @@ extern void irq_trans_init(struct device_node *dp);
extern
unsigned
int
prom_unique_id
;
extern
struct
device_node
*
__init
create_node
(
phandle
node
,
struct
device_node
*
parent
);
static
inline
int
is_root_node
(
const
struct
device_node
*
dp
)
{
if
(
!
dp
)
return
0
;
return
(
dp
->
parent
==
NULL
);
}
extern
char
*
build_path_component
(
struct
device_node
*
dp
);
extern
struct
device_node
*
__init
prom_create_node
(
phandle
node
,
struct
device_node
*
parent
);
extern
struct
device_node
*
__init
prom_build_tree
(
struct
device_node
*
parent
,
phandle
node
,
struct
device_node
***
nextp
);
#endif
/* __PROM_H */
arch/sparc/kernel/prom_32.c
View file @
6524036a
...
...
@@ -42,14 +42,6 @@ void * __init prom_early_alloc(unsigned long size)
return
ret
;
}
static
int
is_root_node
(
const
struct
device_node
*
dp
)
{
if
(
!
dp
)
return
0
;
return
(
dp
->
parent
==
NULL
);
}
/* The following routines deal with the black magic of fully naming a
* node.
*
...
...
@@ -161,7 +153,7 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
return
sparc32_path_component
(
dp
,
tmp_buf
);
}
static
char
*
__init
build_path_component
(
struct
device_node
*
dp
)
char
*
__init
build_path_component
(
struct
device_node
*
dp
)
{
char
tmp_buf
[
64
],
*
n
;
...
...
@@ -176,57 +168,6 @@ static char * __init build_path_component(struct device_node *dp)
return
n
;
}
static
char
*
__init
build_full_name
(
struct
device_node
*
dp
)
{
int
len
,
ourlen
,
plen
;
char
*
n
;
plen
=
strlen
(
dp
->
parent
->
full_name
);
ourlen
=
strlen
(
dp
->
path_component_name
);
len
=
ourlen
+
plen
+
2
;
n
=
prom_early_alloc
(
len
);
strcpy
(
n
,
dp
->
parent
->
full_name
);
if
(
!
is_root_node
(
dp
->
parent
))
{
strcpy
(
n
+
plen
,
"/"
);
plen
++
;
}
strcpy
(
n
+
plen
,
dp
->
path_component_name
);
return
n
;
}
static
struct
device_node
*
__init
build_tree
(
struct
device_node
*
parent
,
phandle
node
,
struct
device_node
***
nextp
)
{
struct
device_node
*
ret
=
NULL
,
*
prev_sibling
=
NULL
;
struct
device_node
*
dp
;
while
(
1
)
{
dp
=
create_node
(
node
,
parent
);
if
(
!
dp
)
break
;
if
(
prev_sibling
)
prev_sibling
->
sibling
=
dp
;
if
(
!
ret
)
ret
=
dp
;
prev_sibling
=
dp
;
*
(
*
nextp
)
=
dp
;
*
nextp
=
&
dp
->
allnext
;
dp
->
path_component_name
=
build_path_component
(
dp
);
dp
->
full_name
=
build_full_name
(
dp
);
dp
->
child
=
build_tree
(
dp
,
prom_getchild
(
node
),
nextp
);
node
=
prom_getsibling
(
node
);
}
return
ret
;
}
struct
device_node
*
of_console_device
;
EXPORT_SYMBOL
(
of_console_device
);
...
...
@@ -360,14 +301,14 @@ void __init prom_build_devicetree(void)
{
struct
device_node
**
nextp
;
allnodes
=
create_node
(
prom_root_node
,
NULL
);
allnodes
=
prom_
create_node
(
prom_root_node
,
NULL
);
allnodes
->
path_component_name
=
""
;
allnodes
->
full_name
=
"/"
;
nextp
=
&
allnodes
->
allnext
;
allnodes
->
child
=
build_tree
(
allnodes
,
prom_getchild
(
allnodes
->
node
),
&
nextp
);
allnodes
->
child
=
prom_
build_tree
(
allnodes
,
prom_getchild
(
allnodes
->
node
),
&
nextp
);
of_console_init
();
printk
(
"PROM: Built device tree with %u bytes of memory.
\n
"
,
...
...
arch/sparc/kernel/prom_64.c
View file @
6524036a
...
...
@@ -51,14 +51,6 @@ void * __init prom_early_alloc(unsigned long size)
return
ret
;
}
static
int
is_root_node
(
const
struct
device_node
*
dp
)
{
if
(
!
dp
)
return
0
;
return
(
dp
->
parent
==
NULL
);
}
/* The following routines deal with the black magic of fully naming a
* node.
*
...
...
@@ -364,7 +356,7 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
}
}
static
char
*
__init
build_path_component
(
struct
device_node
*
dp
)
char
*
__init
build_path_component
(
struct
device_node
*
dp
)
{
char
tmp_buf
[
64
],
*
n
;
...
...
@@ -379,57 +371,6 @@ static char * __init build_path_component(struct device_node *dp)
return
n
;
}
static
char
*
__init
build_full_name
(
struct
device_node
*
dp
)
{
int
len
,
ourlen
,
plen
;
char
*
n
;
plen
=
strlen
(
dp
->
parent
->
full_name
);
ourlen
=
strlen
(
dp
->
path_component_name
);
len
=
ourlen
+
plen
+
2
;
n
=
prom_early_alloc
(
len
);
strcpy
(
n
,
dp
->
parent
->
full_name
);
if
(
!
is_root_node
(
dp
->
parent
))
{
strcpy
(
n
+
plen
,
"/"
);
plen
++
;
}
strcpy
(
n
+
plen
,
dp
->
path_component_name
);
return
n
;
}
static
struct
device_node
*
__init
build_tree
(
struct
device_node
*
parent
,
phandle
node
,
struct
device_node
***
nextp
)
{
struct
device_node
*
ret
=
NULL
,
*
prev_sibling
=
NULL
;
struct
device_node
*
dp
;
while
(
1
)
{
dp
=
create_node
(
node
,
parent
);
if
(
!
dp
)
break
;
if
(
prev_sibling
)
prev_sibling
->
sibling
=
dp
;
if
(
!
ret
)
ret
=
dp
;
prev_sibling
=
dp
;
*
(
*
nextp
)
=
dp
;
*
nextp
=
&
dp
->
allnext
;
dp
->
path_component_name
=
build_path_component
(
dp
);
dp
->
full_name
=
build_full_name
(
dp
);
dp
->
child
=
build_tree
(
dp
,
prom_getchild
(
node
),
nextp
);
node
=
prom_getsibling
(
node
);
}
return
ret
;
}
static
const
char
*
get_mid_prop
(
void
)
{
return
(
tlb_type
==
spitfire
?
"upa-portid"
:
"portid"
);
...
...
@@ -640,14 +581,14 @@ void __init prom_build_devicetree(void)
{
struct
device_node
**
nextp
;
allnodes
=
create_node
(
prom_root_node
,
NULL
);
allnodes
=
prom_
create_node
(
prom_root_node
,
NULL
);
allnodes
->
path_component_name
=
""
;
allnodes
->
full_name
=
"/"
;
nextp
=
&
allnodes
->
allnext
;
allnodes
->
child
=
build_tree
(
allnodes
,
prom_getchild
(
allnodes
->
node
),
&
nextp
);
allnodes
->
child
=
prom_
build_tree
(
allnodes
,
prom_getchild
(
allnodes
->
node
),
&
nextp
);
of_console_init
();
printk
(
"PROM: Built device tree with %u bytes of memory.
\n
"
,
...
...
arch/sparc/kernel/prom_common.c
View file @
6524036a
...
...
@@ -216,8 +216,8 @@ static char * __init get_one_property(phandle node, const char *name)
return
buf
;
}
struct
device_node
*
__init
create_node
(
phandle
node
,
struct
device_node
*
parent
)
struct
device_node
*
__init
prom_
create_node
(
phandle
node
,
struct
device_node
*
parent
)
{
struct
device_node
*
dp
;
...
...
@@ -240,3 +240,56 @@ struct device_node * __init create_node(phandle node,
return
dp
;
}
static
char
*
__init
build_full_name
(
struct
device_node
*
dp
)
{
int
len
,
ourlen
,
plen
;
char
*
n
;
plen
=
strlen
(
dp
->
parent
->
full_name
);
ourlen
=
strlen
(
dp
->
path_component_name
);
len
=
ourlen
+
plen
+
2
;
n
=
prom_early_alloc
(
len
);
strcpy
(
n
,
dp
->
parent
->
full_name
);
if
(
!
is_root_node
(
dp
->
parent
))
{
strcpy
(
n
+
plen
,
"/"
);
plen
++
;
}
strcpy
(
n
+
plen
,
dp
->
path_component_name
);
return
n
;
}
struct
device_node
*
__init
prom_build_tree
(
struct
device_node
*
parent
,
phandle
node
,
struct
device_node
***
nextp
)
{
struct
device_node
*
ret
=
NULL
,
*
prev_sibling
=
NULL
;
struct
device_node
*
dp
;
while
(
1
)
{
dp
=
prom_create_node
(
node
,
parent
);
if
(
!
dp
)
break
;
if
(
prev_sibling
)
prev_sibling
->
sibling
=
dp
;
if
(
!
ret
)
ret
=
dp
;
prev_sibling
=
dp
;
*
(
*
nextp
)
=
dp
;
*
nextp
=
&
dp
->
allnext
;
dp
->
path_component_name
=
build_path_component
(
dp
);
dp
->
full_name
=
build_full_name
(
dp
);
dp
->
child
=
prom_build_tree
(
dp
,
prom_getchild
(
node
),
nextp
);
node
=
prom_getsibling
(
node
);
}
return
ret
;
}
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