From: Suman Anna <s-anna@ti.com>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Kumar Gala <galak@codeaurora.org>,
Ohad Ben-Cohen <ohad@wizery.com>,
Tony Lindgren <tony@atomide.com>,
Benoit Cousson <bcousson@baylibre.com>,
Paul Walmsley <paul@pwsan.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>
Subject: Re: [PATCHv2 1/9] hwspinlock/core: add common dt bindings and OF helpers
Date: Wed, 2 Oct 2013 23:04:15 -0500 [thread overview]
Message-ID: <524CECBF.2070805@ti.com> (raw)
In-Reply-To: <20131001083602.GG22259@e106331-lin.cambridge.arm.com>
Hi Mark,
On 10/01/2013 03:36 AM, Mark Rutland wrote:
> Hi Suman,
>
> Apologies for replying to a subthread, due to an earlier mistake on my
> part I don't have the original to hand.
No issues, thanks for your review.
>
> On Fri, Sep 27, 2013 at 05:04:22PM +0100, Kumar Gala wrote:
>>
>> On Sep 17, 2013, at 2:30 PM, Suman Anna wrote:
>>
>>> All the platform-specific hwlock driver implementations need the
>>> number of locks and the associated base id for registering the
>>> locks present within a hwspinlock device with the driver core.
>>> These two variables are represented by 'hwlock-num-locks' and
>>> 'hwlock-base-id' properties. The documentation and OF helpers to
>>> retrieve these common properties have been added to the driver core.
>>>
>>> Signed-off-by: Suman Anna <s-anna@ti.com>
>>> ---
>>> .../devicetree/bindings/hwlock/hwlock.txt | 26 +++++++++
>>> drivers/hwspinlock/hwspinlock_core.c | 61 +++++++++++++++++++++-
>>> include/linux/hwspinlock.h | 11 ++--
>>> 3 files changed, 93 insertions(+), 5 deletions(-)
>>> create mode 100644 Documentation/devicetree/bindings/hwlock/hwlock.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/hwlock/hwlock.txt b/Documentation/devicetree/bindings/hwlock/hwlock.txt
>>> new file mode 100644
>>> index 0000000..789930e
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/hwlock/hwlock.txt
>>> @@ -0,0 +1,26 @@
>>> +Generic hwlock bindings
>>> +=======================
>>> +
>>> +Generic bindings that are common to all the hwlock platform specific driver
>>> +implementations, the retrieved values are used for registering the device
>>> +specific parameters with the hwspinlock core.
>>> +
>>> +The validity and need of these common properties may vary from one driver
>>> +implementation to another. Look through the individual hwlock driver
>>> +binding documentations for identifying which are mandatory and which are
>>> +optional for that specific driver.
>>> +
>>> +Common properties:
>>> +- hwlock-base-id: Base Id for the locks for a particular hwlock device.
>>> + This property is used for representing a set of locks
>>> + present in a hwlock device with a unique base id in
>>> + the driver core. This property is mandatory ONLY if a
>>> + SoC has several hwlock devices.
>>> +
>>> + See documentation on struct hwspinlock_pdata in
>>> + linux/hwspinlock.h for more details.
>
> I don't like this, as it seems to be encoding a Linux implementation
> detail (the ID of the lock, which means that we have to have a numeric
> representation of each hwlock) in the device tree.
>
> I don't see why the ID within Linux should be a concern of the device
> tree binding. I think that whatever internal identifier we have in Linux
> (be it an integer or struct) should be allocated by Linux. If a driver
> needs to request specific hwlocks, then we should have a phandle + args
> representation for referring to a specific hwlock that bidnings can use,
> and some code for parsing that and returning a Linux-internal
> identifier/struct as we do with interrupts and clocks.
This is based on gathering the information required by the platform
implementation drivers for registering with the driver core. The driver
core currently maintains all the locks from different instances as a
radix tree, as it is simpler to manage when granting locks to users.
The current version is based on allowing the platform implementation
drivers to retrieve the required data for registering with the
hwspinlock driver core.
The users would either get a lock dynamically by requesting any free one
(and extract the id thereafter to share with others), or a specific one
which is currently by id. I agree that the phandle + args approach is
best suited for requesting a specific one through DT, but I would think
that the args would still have to be a relative lock number from 0 w.r.t
a phandle. I will look into the feasibility of such an approach
retaining the radix tree implementation, as this requires new OF
friendly registration and request functions.
>
>>> +
>>> +- hwlock-num-locks: Number of locks present in a hwlock device. This
>>> + property is needed on hwlock devices, where the number
>>> + of supported locks within a hwlock device cannot be
>>> + read from a register.
>
> Hmm... this seems generic, but it doesn't allow for sparse ID spaces on
> the hwlock module. It should probably be common for the moment, but if
> we encounter a hwlock module with a sparse ID space, we'll need to come
> up with a way of handling sparse IDs (that might be device-specific).
Agreed.
>
>>> diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c
>>> index 461a0d7..aec32e7 100644
>>> --- a/drivers/hwspinlock/hwspinlock_core.c
>>> +++ b/drivers/hwspinlock/hwspinlock_core.c
>>> @@ -1,7 +1,7 @@
>>> /*
>>> * Hardware spinlock framework
>>> *
>>> - * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com
>>> + * Copyright (C) 2010-2013 Texas Instruments Incorporated - http://www.ti.com
>>> *
>>> * Contact: Ohad Ben-Cohen <ohad@wizery.com>
>>> *
>>> @@ -27,6 +27,7 @@
>>> #include <linux/hwspinlock.h>
>>> #include <linux/pm_runtime.h>
>>> #include <linux/mutex.h>
>>> +#include <linux/of.h>
>>>
>>> #include "hwspinlock_internal.h"
>>>
>>> @@ -308,6 +309,64 @@ out:
>>> }
>>>
>>> /**
>>> + * of_hwspin_lock_get_base_id() - OF helper to retrieve base id
>>> + * @dn: device node pointer
>>> + *
>>> + * This is an OF helper function that can be called by the underlying
>>> + * platform-specific implementations, to retrieve the base id for the
>>> + * set of locks present within a hwspinlock device instance.
>>> + *
>>> + * Returns the base id value on success, -ENODEV on generic failure or
>>> + * an appropriate error code as returned by the OF layer
>>> + */
>>> +int of_hwspin_lock_get_base_id(struct device_node *dn)
>>> +{
>>> + unsigned int val;
>>> + int ret = -ENODEV;
>>> +
>>> +#ifdef CONFIG_OF
>>> + if (!dn)
>>> + return -ENODEV;
>>
>> Checking !dn is done in of_property_read_u32, so you don't need to duplicate
>>
>>> +
>>> + ret = of_property_read_u32(dn, "hwlock-base-id", &val);
>>> + if (!ret)
>>> + ret = val;
>>> +#endif
>
> Do we need the CONFIG_OF check? of_property_read_u32 is defined to
> return -ENOSYS if CONFIG_OF isn't defined. Or would that confuse a
> higher layer?
These are primarily OF helpers and provided for the SoC implementation
drivers, and I have used the CONFIG_OF check within the function to
streamline the function prototypes and behavior in the common
hwspinlock.h header file between combinations of CONFIG_HWSPINLOCK and
CONFIG_OF.
The check for !dn is done deliberately to help the implementation drivers.
regards
Suman
next prev parent reply other threads:[~2013-10-03 4:04 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-17 19:30 [PATCHv2 0/9] omap hwspinlock dt support Suman Anna
2013-09-17 19:30 ` [PATCHv2 1/9] hwspinlock/core: add common dt bindings and OF helpers Suman Anna
2013-09-27 16:04 ` Kumar Gala
[not found] ` <14DB8294-1148-446A-A6D3-34E66BA8732C-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2013-09-27 16:48 ` Suman Anna
[not found] ` <5245B6F9.7030505-l0cyMroinI0@public.gmane.org>
2013-09-27 17:14 ` Kumar Gala
[not found] ` <3C582FCF-7A24-48AC-B98B-AF1D18C1E22B-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2013-09-27 19:26 ` Suman Anna
2013-10-01 8:36 ` Mark Rutland
2013-10-03 4:04 ` Suman Anna [this message]
[not found] ` <524CECBF.2070805-l0cyMroinI0@public.gmane.org>
2013-10-09 21:40 ` Mark Rutland
2013-09-17 19:30 ` [PATCHv2 2/9] hwspinlock/omap: add support for dt nodes Suman Anna
2013-09-27 16:06 ` Kumar Gala
2013-09-27 16:21 ` Suman Anna
[not found] ` <5245B076.1090008-l0cyMroinI0@public.gmane.org>
2013-09-27 17:14 ` Kumar Gala
[not found] ` <AE597DCC-83D7-4BCD-8990-3D63540F32EA-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2013-10-01 8:40 ` Mark Rutland
2013-10-03 4:12 ` Suman Anna
[not found] ` <524CEE9F.8060407-l0cyMroinI0@public.gmane.org>
2013-10-09 21:46 ` Mark Rutland
2013-10-10 20:29 ` Suman Anna
2013-09-17 19:31 ` [PATCHv2 3/9] ARM: dts: OMAP4: Add hwspinlock node Suman Anna
2013-09-17 19:31 ` [PATCHv2 4/9] ARM: OMAP5: hwmod data: Add spinlock data Suman Anna
2013-10-09 7:12 ` Paul Walmsley
[not found] ` <alpine.DEB.2.02.1310090712440.30199-rwI8Ez+7Ko+d5PgPZx9QOdBPR1lH4CV8@public.gmane.org>
2013-10-09 17:49 ` Suman Anna
2013-09-17 19:31 ` [PATCHv2 5/9] ARM: dts: OMAP5: Add hwspinlock node Suman Anna
2013-09-17 19:31 ` [PATCHv2 6/9] hwspinlock/omap: support AM33xx Suman Anna
2013-09-17 19:31 ` [PATCHv2 7/9] hwspinlock/omap: enable module before reading SYSSTATUS register Suman Anna
2013-09-17 19:31 ` [PATCHv2 8/9] ARM: dts: AM33XX: Add hwspinlock node Suman Anna
2013-09-17 19:31 ` [PATCHv2 9/9] ARM: AM33xx: hwmod_data: add the sysc configuration for spinlock Suman Anna
2013-10-09 7:12 ` Paul Walmsley
[not found] ` <cover.1379445653.git.s-anna-l0cyMroinI0@public.gmane.org>
2013-09-27 15:48 ` [PATCHv2 0/9] omap hwspinlock dt support Suman Anna
[not found] ` <5245A8CA.4020805-l0cyMroinI0@public.gmane.org>
2013-09-30 3:12 ` Paul Walmsley
[not found] ` <alpine.DEB.2.02.1309300309530.17980-rwI8Ez+7Ko+d5PgPZx9QOdBPR1lH4CV8@public.gmane.org>
2013-09-30 15:56 ` Suman Anna
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=524CECBF.2070805@ti.com \
--to=s-anna@ti.com \
--cc=bcousson@baylibre.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=ohad@wizery.com \
--cc=paul@pwsan.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).