* [PATCH] of: Add a reg-names property to name reg entries
@ 2011-10-24 15:54 Benoit Cousson
2011-10-24 22:19 ` Grant Likely
2011-10-25 8:26 ` Tony Lindgren
0 siblings, 2 replies; 12+ messages in thread
From: Benoit Cousson @ 2011-10-24 15:54 UTC (permalink / raw)
To: grant.likely, rob.herring
Cc: devicetree-discuss, linux-omap, Benoit Cousson, linux-arm-kernel
In a HW system, resources in general have name to identify them.
The is the case as well for DT "reg" entries.
The current DT mechanism is relying on the "reg" order to identify
the proper resource.
Add a reg-names property to allow the possiblity to provide a name
to any reg entries.
If the name is available, use it to name the resource, otherwise
keep the legacy device name.
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Cc: Grant Likely <grant.likely@secretlab.ca>
Cc: Rob Herring <rob.herring@calxeda.com>
---
Documentation/devicetree/bindings/reg-names.txt | 48 +++++++++++++++++++++++
drivers/of/address.c | 22 ++++++++--
2 files changed, 65 insertions(+), 5 deletions(-)
create mode 100644 Documentation/devicetree/bindings/reg-names.txt
diff --git a/Documentation/devicetree/bindings/reg-names.txt b/Documentation/devicetree/bindings/reg-names.txt
new file mode 100644
index 0000000..5554065
--- /dev/null
+++ b/Documentation/devicetree/bindings/reg-names.txt
@@ -0,0 +1,48 @@
+reg-names property
+
+In a HW system, resources in general have name to identify them.
+The is the case as well for register entries.
+The current DT mechanism is relying on the "reg" order to identify
+the proper resource. The reg-names is adding the possiblity to
+provide a name to reg entries.
+
+Usage:
+
+This attribute must be used along with a regular reg entry. If not
+it will be simply ignored.
+The number of entry must match otherwise the default device name will
+be used to as the resource name.
+
+
+Example:
+
+
+l4-abe {
+ compatible = "simple-bus";
+ #address-cells = <2>;
+ #size-cells = <1>;
+ ranges = <0 0 0x48000000 0x00001000>, /* MPU path */
+ <1 0 0x49000000 0x00001000>; /* L3 path */
+ mcasp {
+ compatible = "ti,mcasp";
+ reg = <0 0x10 0x10>, <0 0x20 0x10>,
+ <1 0x10 0x10>, <1 0x20 0x10>;
+ reg-names = "mpu", "dat",
+ "dma", "dma_dat";
+ };
+
+ timer {
+ compatible = "ti,timer";
+ reg = <0 0x40 0x10>, <1 0x40 0x10>;
+ reg-names = "mpu", "dma";
+ };
+};
+
+
+usb {
+ compatible = "ti,usb-host";
+ reg = <0x4a064000 0x800>, <0x4a064800 0x200>,
+ <0x4a064c00 0x200>;
+ reg-names = "config", "ohci", "ehci";
+};
+
diff --git a/drivers/of/address.c b/drivers/of/address.c
index 72c33fb..1f9f8cb 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -14,7 +14,7 @@
static struct of_bus *of_match_bus(struct device_node *np);
static int __of_address_to_resource(struct device_node *dev,
const __be32 *addrp, u64 size, unsigned int flags,
- struct resource *r);
+ const char *name, struct resource *r);
/* Debug utility */
#ifdef DEBUG
@@ -215,7 +215,7 @@ int of_pci_address_to_resource(struct device_node *dev, int bar,
addrp = of_get_pci_address(dev, bar, &size, &flags);
if (addrp == NULL)
return -EINVAL;
- return __of_address_to_resource(dev, addrp, size, flags, r);
+ return __of_address_to_resource(dev, addrp, size, flags, NULL, r);
}
EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
#endif /* CONFIG_PCI */
@@ -529,7 +529,7 @@ EXPORT_SYMBOL(of_get_address);
static int __of_address_to_resource(struct device_node *dev,
const __be32 *addrp, u64 size, unsigned int flags,
- struct resource *r)
+ const char *name, struct resource *r)
{
u64 taddr;
@@ -551,7 +551,11 @@ static int __of_address_to_resource(struct device_node *dev,
r->end = taddr + size - 1;
}
r->flags = flags;
- r->name = dev->full_name;
+ if (name)
+ r->name = name;
+ else
+ r->name = dev->full_name;
+
return 0;
}
@@ -569,11 +573,19 @@ int of_address_to_resource(struct device_node *dev, int index,
const __be32 *addrp;
u64 size;
unsigned int flags;
+ const char *name = NULL;
+ int name_cnt;
addrp = of_get_address(dev, index, &size, &flags);
if (addrp == NULL)
return -EINVAL;
- return __of_address_to_resource(dev, addrp, size, flags, r);
+
+ /* Get "reg-names" property to add a name to a resource */
+ name_cnt = of_property_count_strings(dev, "reg-names");
+ if (name_cnt > 0)
+ of_property_read_string_index(dev, "reg-names", index, &name);
+
+ return __of_address_to_resource(dev, addrp, size, flags, name, r);
}
EXPORT_SYMBOL_GPL(of_address_to_resource);
--
1.7.5.4
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH] of: Add a reg-names property to name reg entries
2011-10-24 15:54 [PATCH] of: Add a reg-names property to name reg entries Benoit Cousson
@ 2011-10-24 22:19 ` Grant Likely
2011-10-24 22:56 ` Cousson, Benoit
2011-10-25 8:26 ` Tony Lindgren
1 sibling, 1 reply; 12+ messages in thread
From: Grant Likely @ 2011-10-24 22:19 UTC (permalink / raw)
To: Benoit Cousson
Cc: rob.herring, devicetree-discuss, linux-omap, linux-arm-kernel
On Mon, Oct 24, 2011 at 05:54:57PM +0200, Benoit Cousson wrote:
> In a HW system, resources in general have name to identify them.
> The is the case as well for DT "reg" entries.
> The current DT mechanism is relying on the "reg" order to identify
> the proper resource.
> Add a reg-names property to allow the possiblity to provide a name
> to any reg entries.
> If the name is available, use it to name the resource, otherwise
> keep the legacy device name.
>
> Signed-off-by: Benoit Cousson <b-cousson@ti.com>
> Cc: Grant Likely <grant.likely@secretlab.ca>
> Cc: Rob Herring <rob.herring@calxeda.com>
> ---
>
> Documentation/devicetree/bindings/reg-names.txt | 48 +++++++++++++++++++++++
> drivers/of/address.c | 22 ++++++++--
> 2 files changed, 65 insertions(+), 5 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/reg-names.txt
>
> diff --git a/Documentation/devicetree/bindings/reg-names.txt b/Documentation/devicetree/bindings/reg-names.txt
> new file mode 100644
> index 0000000..5554065
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/reg-names.txt
> @@ -0,0 +1,48 @@
> +reg-names property
> +
> +In a HW system, resources in general have name to identify them.
> +The is the case as well for register entries.
> +The current DT mechanism is relying on the "reg" order to identify
> +the proper resource. The reg-names is adding the possiblity to
> +provide a name to reg entries.
> +
> +Usage:
> +
> +This attribute must be used along with a regular reg entry. If not
> +it will be simply ignored.
> +The number of entry must match otherwise the default device name will
> +be used to as the resource name.
> +
> +
> +Example:
> +
> +
> +l4-abe {
> + compatible = "simple-bus";
> + #address-cells = <2>;
> + #size-cells = <1>;
> + ranges = <0 0 0x48000000 0x00001000>, /* MPU path */
> + <1 0 0x49000000 0x00001000>; /* L3 path */
> + mcasp {
> + compatible = "ti,mcasp";
> + reg = <0 0x10 0x10>, <0 0x20 0x10>,
> + <1 0x10 0x10>, <1 0x20 0x10>;
> + reg-names = "mpu", "dat",
> + "dma", "dma_dat";
> + };
> +
> + timer {
> + compatible = "ti,timer";
> + reg = <0 0x40 0x10>, <1 0x40 0x10>;
> + reg-names = "mpu", "dma";
> + };
> +};
> +
> +
> +usb {
> + compatible = "ti,usb-host";
> + reg = <0x4a064000 0x800>, <0x4a064800 0x200>,
> + <0x4a064c00 0x200>;
> + reg-names = "config", "ohci", "ehci";
> +};
> +
> diff --git a/drivers/of/address.c b/drivers/of/address.c
> index 72c33fb..1f9f8cb 100644
> --- a/drivers/of/address.c
> +++ b/drivers/of/address.c
> @@ -14,7 +14,7 @@
> static struct of_bus *of_match_bus(struct device_node *np);
> static int __of_address_to_resource(struct device_node *dev,
> const __be32 *addrp, u64 size, unsigned int flags,
> - struct resource *r);
> + const char *name, struct resource *r);
>
> /* Debug utility */
> #ifdef DEBUG
> @@ -215,7 +215,7 @@ int of_pci_address_to_resource(struct device_node *dev, int bar,
> addrp = of_get_pci_address(dev, bar, &size, &flags);
> if (addrp == NULL)
> return -EINVAL;
> - return __of_address_to_resource(dev, addrp, size, flags, r);
> + return __of_address_to_resource(dev, addrp, size, flags, NULL, r);
> }
> EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
> #endif /* CONFIG_PCI */
> @@ -529,7 +529,7 @@ EXPORT_SYMBOL(of_get_address);
>
> static int __of_address_to_resource(struct device_node *dev,
> const __be32 *addrp, u64 size, unsigned int flags,
> - struct resource *r)
> + const char *name, struct resource *r)
> {
> u64 taddr;
>
> @@ -551,7 +551,11 @@ static int __of_address_to_resource(struct device_node *dev,
> r->end = taddr + size - 1;
> }
> r->flags = flags;
> - r->name = dev->full_name;
> + if (name)
> + r->name = name;
> + else
> + r->name = dev->full_name;
This form please:
r->name = name ? name : dev->full_name;
In general, I'm inclined to accept this patch as we talked about at
plumbers. However, this particular hunk gives me pause as there is
still the objection that Russell raised about the (ab)use of r->name
for insert the resource name.
So, no I won't reject this patch, but I first what to have some idea
of what the plan is to migrate away from using r->name. Perhaps we
can talk about this tomorrow.
> return 0;
> }
>
> @@ -569,11 +573,19 @@ int of_address_to_resource(struct device_node *dev, int index,
> const __be32 *addrp;
> u64 size;
> unsigned int flags;
> + const char *name = NULL;
> + int name_cnt;
>
> addrp = of_get_address(dev, index, &size, &flags);
> if (addrp == NULL)
> return -EINVAL;
> - return __of_address_to_resource(dev, addrp, size, flags, r);
> +
> + /* Get "reg-names" property to add a name to a resource */
> + name_cnt = of_property_count_strings(dev, "reg-names");
> + if (name_cnt > 0)
> + of_property_read_string_index(dev, "reg-names", index, &name);
Why not simply:
of_property_read_string_index(dev, "reg-names", index, &name);
If it fails, then name remains NULL and everything works.
> +
> + return __of_address_to_resource(dev, addrp, size, flags, name, r);
> }
> EXPORT_SYMBOL_GPL(of_address_to_resource);
>
> --
> 1.7.5.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH] of: Add a reg-names property to name reg entries
2011-10-24 22:19 ` Grant Likely
@ 2011-10-24 22:56 ` Cousson, Benoit
2011-10-25 4:49 ` Grant Likely
0 siblings, 1 reply; 12+ messages in thread
From: Cousson, Benoit @ 2011-10-24 22:56 UTC (permalink / raw)
To: Grant Likely
Cc: rob.herring@calxeda.com, devicetree-discuss@lists.ozlabs.org,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
On 10/25/2011 12:19 AM, Grant Likely wrote:
> On Mon, Oct 24, 2011 at 05:54:57PM +0200, Benoit Cousson wrote:
[...]
>> @@ -551,7 +551,11 @@ static int __of_address_to_resource(struct device_node *dev,
>> r->end = taddr + size - 1;
>> }
>> r->flags = flags;
>> - r->name = dev->full_name;
>> + if (name)
>> + r->name = name;
>> + else
>> + r->name = dev->full_name;
>
> This form please:
> r->name = name ? name : dev->full_name;
Much better, indeed.
> In general, I'm inclined to accept this patch as we talked about at
> plumbers. However, this particular hunk gives me pause as there is
> still the objection that Russell raised about the (ab)use of r->name
> for insert the resource name.
>
> So, no I won't reject this patch, but I first what to have some idea
> of what the plan is to migrate away from using r->name. Perhaps we
> can talk about this tomorrow.
OK, sure, let's discuss about that.
But I still think that Russell's concern is not related at all with this
patch. That means that it should be fixed separately if needed. It can
be done before or after, but this is somehow orthogonal to the DT
reg-names support problem.
>> return 0;
>> }
>>
>> @@ -569,11 +573,19 @@ int of_address_to_resource(struct device_node *dev, int index,
>> const __be32 *addrp;
>> u64 size;
>> unsigned int flags;
>> + const char *name = NULL;
>> + int name_cnt;
>>
>> addrp = of_get_address(dev, index,&size,&flags);
>> if (addrp == NULL)
>> return -EINVAL;
>> - return __of_address_to_resource(dev, addrp, size, flags, r);
>> +
>> + /* Get "reg-names" property to add a name to a resource */
>> + name_cnt = of_property_count_strings(dev, "reg-names");
>> + if (name_cnt> 0)
>> + of_property_read_string_index(dev, "reg-names", index,&name);
>
> Why not simply:
> of_property_read_string_index(dev, "reg-names", index,&name);
>
> If it fails, then name remains NULL and everything works.
Good point, that API is already taking care of that.
Thanks,
Benoit
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] of: Add a reg-names property to name reg entries
2011-10-24 22:56 ` Cousson, Benoit
@ 2011-10-25 4:49 ` Grant Likely
0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2011-10-25 4:49 UTC (permalink / raw)
To: Cousson, Benoit
Cc: devicetree-discuss@lists.ozlabs.org, linux-omap@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, rob.herring@calxeda.com
On Tue, Oct 25, 2011 at 12:56:53AM +0200, Cousson, Benoit wrote:
> On 10/25/2011 12:19 AM, Grant Likely wrote:
> >In general, I'm inclined to accept this patch as we talked about at
> >plumbers. However, this particular hunk gives me pause as there is
> >still the objection that Russell raised about the (ab)use of r->name
> >for insert the resource name.
> >
> >So, no I won't reject this patch, but I first what to have some idea
> >of what the plan is to migrate away from using r->name. Perhaps we
> >can talk about this tomorrow.
>
> OK, sure, let's discuss about that.
> But I still think that Russell's concern is not related at all with
> this patch. That means that it should be fixed separately if needed.
> It can be done before or after, but this is somehow orthogonal to
> the DT reg-names support problem.
Right, but this patch does add more infrastructure code manuipulating
that field, so I'd like to have a plan for fixing the problem before
committing this.
g.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] of: Add a reg-names property to name reg entries
2011-10-24 15:54 [PATCH] of: Add a reg-names property to name reg entries Benoit Cousson
2011-10-24 22:19 ` Grant Likely
@ 2011-10-25 8:26 ` Tony Lindgren
2011-10-25 10:29 ` Segher Boessenkool
1 sibling, 1 reply; 12+ messages in thread
From: Tony Lindgren @ 2011-10-25 8:26 UTC (permalink / raw)
To: Benoit Cousson
Cc: grant.likely, rob.herring, devicetree-discuss, linux-omap,
linux-arm-kernel
* Benoit Cousson <b-cousson@ti.com> [111024 17:20]:
> + compatible = "ti,mcasp";
> + reg = <0 0x10 0x10>, <0 0x20 0x10>,
> + <1 0x10 0x10>, <1 0x20 0x10>;
> + reg-names = "mpu", "dat",
> + "dma", "dma_dat";
Hmm for some systems looks like this can also solve how to pass the
mux signal names cleanly from DT.
For some systems we may also need reg-bits in addition to reg-names
to describe the signal names. Or do we already have something for
that?
Tony
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] of: Add a reg-names property to name reg entries
2011-10-25 8:26 ` Tony Lindgren
@ 2011-10-25 10:29 ` Segher Boessenkool
2011-10-25 13:40 ` Cousson, Benoit
0 siblings, 1 reply; 12+ messages in thread
From: Segher Boessenkool @ 2011-10-25 10:29 UTC (permalink / raw)
To: Tony Lindgren
Cc: devicetree-discuss, linux-omap, rob.herring, Benoit Cousson,
linux-arm-kernel
>> + compatible = "ti,mcasp";
>> + reg = <0 0x10 0x10>, <0 0x20 0x10>,
>> + <1 0x10 0x10>, <1 0x20 0x10>;
>> + reg-names = "mpu", "dat",
>> + "dma", "dma_dat";
>
> Hmm for some systems looks like this can also solve how to pass the
> mux signal names cleanly from DT.
What problem does any of this solve? The device binding for the
"mcasp" device will have to describe the possible "reg-names", and
what those mean; but the binding already has to describe its "reg"
property anyway.
The example looks like something that should be more properly done
with subdevices, not sure.
Segher
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] of: Add a reg-names property to name reg entries
2011-10-25 10:29 ` Segher Boessenkool
@ 2011-10-25 13:40 ` Cousson, Benoit
[not found] ` <4EA6BC54.7030007-l0cyMroinI0@public.gmane.org>
0 siblings, 1 reply; 12+ messages in thread
From: Cousson, Benoit @ 2011-10-25 13:40 UTC (permalink / raw)
To: Segher Boessenkool
Cc: Tony Lindgren, devicetree-discuss@lists.ozlabs.org,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
rob.herring@calxeda.com
On 10/25/2011 12:29 PM, Segher Boessenkool wrote:
>>> + compatible = "ti,mcasp";
>>> + reg =<0 0x10 0x10>,<0 0x20 0x10>,
>>> + <1 0x10 0x10>,<1 0x20 0x10>;
>>> + reg-names = "mpu", "dat",
>>> + "dma", "dma_dat";
>>
>> Hmm for some systems looks like this can also solve how to pass the
>> mux signal names cleanly from DT.
>
> What problem does any of this solve? The device binding for the
> "mcasp" device will have to describe the possible "reg-names", and
> what those mean; but the binding already has to describe its "reg"
> property anyway.
What this solve is the ability to use the platform_get_resource_byname
directly to retrieve the proper register base address. The binding is
just a text description that the driver will not be able to use
directly. It will have to get the resource using an abstract index.
It thus removes a level of indirection that is error prone and useless
most of the time.
Benoit
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2011-10-26 17:40 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-24 15:54 [PATCH] of: Add a reg-names property to name reg entries Benoit Cousson
2011-10-24 22:19 ` Grant Likely
2011-10-24 22:56 ` Cousson, Benoit
2011-10-25 4:49 ` Grant Likely
2011-10-25 8:26 ` Tony Lindgren
2011-10-25 10:29 ` Segher Boessenkool
2011-10-25 13:40 ` Cousson, Benoit
[not found] ` <4EA6BC54.7030007-l0cyMroinI0@public.gmane.org>
2011-10-25 14:17 ` Segher Boessenkool
2011-10-25 16:10 ` Cousson, Benoit
2011-10-26 3:57 ` Segher Boessenkool
2011-10-26 12:23 ` Tony Lindgren
2011-10-26 17:40 ` Cousson, Benoit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).