lkml.org 
[lkml]   [2008]   [Jun]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/60] microblaze_v4: Open firmware files2
    Date
    From: Michal Simek <monstr@monstr.eu>


    Signed-off-by: Michal Simek <monstr@monstr.eu>
    ---
    arch/microblaze/kernel/of_device.c | 42 +++++++++++++++++++++++++++++++++++
    arch/microblaze/platform/platform.c | 31 +++++++++++++++++++++++++
    2 files changed, 73 insertions(+), 0 deletions(-)
    create mode 100644 arch/microblaze/kernel/of_device.c
    create mode 100644 arch/microblaze/platform/platform.c

    diff --git a/arch/microblaze/kernel/of_device.c b/arch/microblaze/kernel/of_device.c
    new file mode 100644
    index 0000000..984d066
    --- /dev/null
    +++ b/arch/microblaze/kernel/of_device.c
    @@ -0,0 +1,42 @@
    +#include <linux/string.h>
    +#include <linux/kernel.h>
    +#include <linux/of.h>
    +#include <linux/init.h>
    +#include <linux/module.h>
    +#include <linux/mod_devicetable.h>
    +#include <linux/slab.h>
    +#include <linux/of_device.h>
    +
    +#include <asm/errno.h>
    +
    +void of_device_make_bus_id(struct of_device *dev)
    +{
    + static atomic_t bus_no_reg_magic;
    + struct device_node *node = dev->node;
    + char *name = dev->dev.bus_id;
    + const u32 *reg;
    + u64 addr;
    + int magic;
    +
    + /*
    + * For MMIO, get the physical address
    + */
    + reg = of_get_property(node, "reg", NULL);
    + if (reg) {
    + addr = of_translate_address(node, reg);
    + if (addr != OF_BAD_ADDR) {
    + snprintf(name, BUS_ID_SIZE,
    + "%llx.%s", (unsigned long long)addr,
    + node->name);
    + return;
    + }
    + }
    +
    + /*
    + * No BusID, use the node name and add a globally incremented
    + * counter (and pray...)
    + */
    + magic = atomic_add_return(1, &bus_no_reg_magic);
    + snprintf(name, BUS_ID_SIZE, "%s.%d", node->name, magic - 1);
    +}
    +EXPORT_SYMBOL(of_device_make_bus_id);
    diff --git a/arch/microblaze/platform/platform.c b/arch/microblaze/platform/platform.c
    new file mode 100644
    index 0000000..fa0edaf
    --- /dev/null
    +++ b/arch/microblaze/platform/platform.c
    @@ -0,0 +1,31 @@
    +/*
    + * Copyright 2008 Michal Simek <monstr@monstr.eu>
    + *
    + * based on virtex.c file
    + *
    + * Copyright 2007 Secret Lab Technologies Ltd.
    + *
    + * This file is licensed under the terms of the GNU General Public License
    + * version 2. This program is licensed "as is" without any warranty of any
    + * kind, whether express or implied.
    + */
    +
    +#include <linux/init.h>
    +#include <linux/of_platform.h>
    +#include <asm/prom.h>
    +
    +static struct of_device_id xilinx_of_bus_ids[] __initdata = {
    + { .compatible = "simple-bus", },
    + { .compatible = "xlnx,plb-v46-1.00.a", },
    + { .compatible = "xlnx,opb-v20-1.10.c", },
    + { .compatible = "xlnx,opb-v20-1.10.b", },
    + { .compatible = "xlnx,compound", },
    + {}
    +};
    +
    +int __init microblaze_device_probe(void)
    +{
    + of_platform_bus_probe(NULL, xilinx_of_bus_ids, NULL);
    + return 0;
    +}
    +device_initcall(microblaze_device_probe);
    --
    1.5.4.GIT


    \
     
     \ /
      Last update: 2008-06-26 15:19    [W:0.022 / U:58.532 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site