Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 339858
b: refs/heads/master
c: 64100a0
h: refs/heads/master
v: v3
  • Loading branch information
Linus Walleij committed Nov 16, 2012
1 parent 7b34e44 commit c29d66e
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e67ae6be734de909954e20317c38472af983b92c
refs/heads/master: 64100a03ad0b94a45ed2753632d9dd68379ad3ac
4 changes: 4 additions & 0 deletions trunk/Documentation/devicetree/bindings/arm/arm-boards
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ Required properties (in root node):

FPGA type interrupt controllers, see the versatile-fpga-irq binding doc.

In the root node the Integrator/CP must have a /cpcon node pointing
to the CP control registers, and the Integrator/AP must have a
/syscon node pointing to the Integrator/AP system controller.


ARM Versatile Application and Platform Baseboards
-------------------------------------------------
Expand Down
5 changes: 5 additions & 0 deletions trunk/arch/arm/boot/dts/integratorcp.dts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
bootargs = "root=/dev/ram0 console=ttyAMA0,38400n8 earlyprintk";
};

cpcon {
/* CP controller registers */
reg = <0xcb000000 0x100>;
};

timer0: timer@13000000 {
compatible = "arm,sp804", "arm,primecell";
};
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/arm/mach-integrator/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ config ARCH_INTEGRATOR_CP
select PLAT_VERSATILE_CLCD
select SERIAL_AMBA_PL011
select SERIAL_AMBA_PL011_CONSOLE
select SOC_BUS
help
Include support for the ARM(R) Integrator CP platform.

Expand Down
57 changes: 55 additions & 2 deletions trunk/arch/arm/mach-integrator/integrator_cp.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <linux/of_irq.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/sys_soc.h>

#include <mach/hardware.h>
#include <mach/platform.h>
Expand Down Expand Up @@ -336,10 +337,62 @@ static struct of_dev_auxdata intcp_auxdata_lookup[] __initdata = {
{ /* sentinel */ },
};

/* Base address to the CP controller */
static void __iomem *intcp_con_base;

static void __init intcp_init_of(void)
{
of_platform_populate(NULL, of_default_bus_match_table,
intcp_auxdata_lookup, NULL);
struct device_node *root;
struct device_node *cpcon;
struct device *parent;
struct soc_device *soc_dev;
struct soc_device_attribute *soc_dev_attr;
u32 intcp_sc_id;
int err;

/* Here we create an SoC device for the root node */
root = of_find_node_by_path("/");
if (!root)
return;
cpcon = of_find_node_by_path("/cpcon");
if (!cpcon)
return;

intcp_con_base = of_iomap(cpcon, 0);
if (!intcp_con_base)
return;

intcp_sc_id = readl(intcp_con_base);

soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
if (!soc_dev_attr)
return;

err = of_property_read_string(root, "compatible",
&soc_dev_attr->soc_id);
if (err)
return;
err = of_property_read_string(root, "model", &soc_dev_attr->machine);
if (err)
return;
soc_dev_attr->family = "Integrator";
soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c",
'A' + (intcp_sc_id & 0x0f));

soc_dev = soc_device_register(soc_dev_attr);
if (IS_ERR_OR_NULL(soc_dev)) {
kfree(soc_dev_attr->revision);
kfree(soc_dev_attr);
return;
}

parent = soc_device_to_device(soc_dev);

if (!IS_ERR_OR_NULL(parent))
integrator_init_sysfs(parent, intcp_sc_id);

of_platform_populate(root, of_default_bus_match_table,
intcp_auxdata_lookup, parent);
}

static const char * intcp_dt_board_compat[] = {
Expand Down

0 comments on commit c29d66e

Please sign in to comment.