sparc,leon: Added support for AMBAPP bus.
The device is a AMBA bus if it is a child of prom node "ambapp" (AMBA plug and play). Two functions leon_trans_init() and leon_node_init() (defined in sparc/kernel/leon_kernel.c) are called in the prom_build_tree() path if CONFIG_SPARC_LEON is defined. leon_node_init() will build up the device tree using AMBA plug and play. Also: a extra check was addes to prom_common.c:build_one_prop() in case a rom-node is undefined which can happen for SPARC-LEON because it creates only a minimum nodes to emulate sparc behaviour. Signed-off-by: Konrad Eisele <konrad@gaisler.com> Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
0fd7ef1fe0
commit
e63829de3d
@@ -24,6 +24,8 @@
|
||||
|
||||
#include <asm/prom.h>
|
||||
#include <asm/oplib.h>
|
||||
#include <asm/leon.h>
|
||||
#include <asm/leon_amba.h>
|
||||
|
||||
#include "prom.h"
|
||||
|
||||
@@ -131,6 +133,35 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf)
|
||||
regs->which_io, regs->phys_addr);
|
||||
}
|
||||
|
||||
/* "name:vendor:device@irq,addrlo" */
|
||||
static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf)
|
||||
{
|
||||
struct amba_prom_registers *regs; unsigned int *intr;
|
||||
unsigned int *device, *vendor;
|
||||
struct property *prop;
|
||||
|
||||
prop = of_find_property(dp, "reg", NULL);
|
||||
if (!prop)
|
||||
return;
|
||||
regs = prop->value;
|
||||
prop = of_find_property(dp, "interrupts", NULL);
|
||||
if (!prop)
|
||||
return;
|
||||
intr = prop->value;
|
||||
prop = of_find_property(dp, "vendor", NULL);
|
||||
if (!prop)
|
||||
return;
|
||||
vendor = prop->value;
|
||||
prop = of_find_property(dp, "device", NULL);
|
||||
if (!prop)
|
||||
return;
|
||||
device = prop->value;
|
||||
|
||||
sprintf(tmp_buf, "%s:%d:%d@%x,%x",
|
||||
dp->name, *vendor, *device,
|
||||
*intr, regs->phys_addr);
|
||||
}
|
||||
|
||||
static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
|
||||
{
|
||||
struct device_node *parent = dp->parent;
|
||||
@@ -143,6 +174,8 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
|
||||
return sbus_path_component(dp, tmp_buf);
|
||||
if (!strcmp(parent->type, "ebus"))
|
||||
return ebus_path_component(dp, tmp_buf);
|
||||
if (!strcmp(parent->type, "ambapp"))
|
||||
return ambapp_path_component(dp, tmp_buf);
|
||||
|
||||
/* "isa" is handled with platform naming */
|
||||
}
|
||||
|
Reference in New Issue
Block a user