[PATCH v7 1/7] of: Provide function to request and map memory
Matthias Brugger
matthias.bgg at gmail.com
Mon Jun 9 08:02:38 PDT 2014
2014-06-09 16:36 GMT+02:00 Rob Herring <robherring2 at gmail.com>:
> On Sat, Jun 7, 2014 at 12:59 AM, Grant Likely <grant.likely at secretlab.ca> wrote:
>> On Fri, 6 Jun 2014 10:19:28 -0500, Rob Herring <robherring2 at gmail.com> wrote:
>>> On Thu, Jun 5, 2014 at 12:26 PM, Matthias Brugger
>>> <matthias.bgg at gmail.com> wrote:
>>> > A call to of_iomap does not request the memory region.
>>> > This patch adds the function of_io_request_and_map which requests
>>> > the memory region before mapping it.
>>> >
>>> > Signed-off-by: Matthias Brugger <matthias.bgg at gmail.com>
>>> > ---
>>> > drivers/of/address.c | 28 ++++++++++++++++++++++++++++
>>> > include/linux/of_address.h | 8 ++++++++
>>> > 2 files changed, 36 insertions(+)
>>> >
>>> > diff --git a/drivers/of/address.c b/drivers/of/address.c
>>> > index cb4242a..c55b107 100644
>>> > --- a/drivers/of/address.c
>>> > +++ b/drivers/of/address.c
>>> > @@ -721,3 +721,31 @@ void __iomem *of_iomap(struct device_node *np, int index)
>>> > return ioremap(res.start, resource_size(&res));
>>> > }
>>> > EXPORT_SYMBOL(of_iomap);
>>> > +
>>> > +/**
>>> > + * of_io_request_and_map - Requests a resource and maps the memory mapped IO
>>> > + * for a given device_node
>>>
>>> I believe docbook requires this to be 1 line.
>>>
>>> > + * @device: the device whose io range will be mapped
>>> > + * @index: index of the io range
>>> > + * @name: name of the resource
>>> > + *
>>> > + * Returns a pointer to the requested and mapped memory
>>> > + */
>>> > +void __iomem *of_io_request_and_map(struct device_node *np, int index, char *name)
>>> > +{
>>> > + struct resource res;
>>> > + void __iomem *mem;
>>> > +
>>> > + if (of_address_to_resource(np, index, &res))
>>> > + return NULL;
>>> > +
>>> > + if (!request_mem_region(res.start, resource_size(&res), name))
>>>
>>> Use the np->name here and drop the name parameter.
>>
>> Name here would be the name of the owner (the driver), not the name of
>> the node. Passing the name separately is fine by me.
>
> This function is for when there is no driver. If there is a driver,
> the devm_* functions should be used. I would like to see some standard
> naming and consistency here rather than allowing random strings or
> NULL to be passed by the caller.
A driver can request and map more then one memory region, so it is
convenient that they have different names. Therefor the extra
parameter.
Another possibility would be to use np->name together with the index
to get unique names for every region requested by the driver
Regards,
Matthias
--
motzblog.wordpress.com
More information about the linux-arm-kernel
mailing list