libnvdimm: Add of_node to region and bus descriptors
authorOliver O'Halloran <oohall@gmail.com>
Fri, 6 Apr 2018 05:21:13 +0000 (15:21 +1000)
committerDan Williams <dan.j.williams@intel.com>
Sat, 7 Apr 2018 14:53:23 +0000 (07:53 -0700)
We want to be able to cross reference the region and bus devices
with the device tree node that they were spawned from. libNVDIMM
handles creating the actual devices for these internally, so we
need to pass in a pointer to the relevant node in the descriptor.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Acked-by: Dan Williams <dan.j.williams@intel.com>
Acked-by: Balbir Singh <bsingharora@gmail.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/nvdimm/bus.c
drivers/nvdimm/region_devs.c
include/linux/libnvdimm.h

index 0ebc8c4dd0fabdecb07fb3deec7c3d38c655552a..a64023690cadeec34e251c38efeb4b036f0a91ac 100644 (file)
@@ -358,6 +358,7 @@ struct nvdimm_bus *nvdimm_bus_register(struct device *parent,
        nvdimm_bus->dev.release = nvdimm_bus_release;
        nvdimm_bus->dev.groups = nd_desc->attr_groups;
        nvdimm_bus->dev.bus = &nvdimm_bus_type;
+       nvdimm_bus->dev.of_node = nd_desc->of_node;
        dev_set_name(&nvdimm_bus->dev, "ndbus%d", nvdimm_bus->id);
        rc = device_register(&nvdimm_bus->dev);
        if (rc) {
index 0af275c62bdfe0d263a9cdec6a78b7a39d9f8aaf..9f9a33e8cb09da0a45ba6a648c1d319f1f228b13 100644 (file)
@@ -1013,6 +1013,7 @@ static struct nd_region *nd_region_create(struct nvdimm_bus *nvdimm_bus,
        dev->parent = &nvdimm_bus->dev;
        dev->type = dev_type;
        dev->groups = ndr_desc->attr_groups;
+       dev->of_node = ndr_desc->of_node;
        nd_region->ndr_size = resource_size(ndr_desc->res);
        nd_region->ndr_start = ndr_desc->res->start;
        nd_device_register(dev);
index e0684a678a1bf8a59c34dd395b886249eb4b4ea8..097072c5a852f22e7aab76750b4bb4de709a7bc3 100644 (file)
@@ -76,12 +76,14 @@ typedef int (*ndctl_fn)(struct nvdimm_bus_descriptor *nd_desc,
                struct nvdimm *nvdimm, unsigned int cmd, void *buf,
                unsigned int buf_len, int *cmd_rc);
 
+struct device_node;
 struct nvdimm_bus_descriptor {
        const struct attribute_group **attr_groups;
        unsigned long bus_dsm_mask;
        unsigned long cmd_mask;
        struct module *module;
        char *provider_name;
+       struct device_node *of_node;
        ndctl_fn ndctl;
        int (*flush_probe)(struct nvdimm_bus_descriptor *nd_desc);
        int (*clear_to_send)(struct nvdimm_bus_descriptor *nd_desc,
@@ -123,6 +125,7 @@ struct nd_region_desc {
        int num_lanes;
        int numa_node;
        unsigned long flags;
+       struct device_node *of_node;
 };
 
 struct device;