[v7,1/2] regmap: Add one flag to indicate if a hwlock should be used

Message ID 29fa88f883dae4c1f8a3acb2656cbd7c5a539d40.1514180039.git.baolin.wang@linaro.org
State New
Headers show
Series
  • [v7,1/2] regmap: Add one flag to indicate if a hwlock should be used
Related show

Commit Message

Baolin Wang Dec. 25, 2017, 6:37 a.m.
Since the hwlock id 0 is valid for hardware spinlock core, but now id 0
is treated as one invalid value for regmap. Thus we should add one extra
flag for regmap config to indicate if a hardware spinlock should be used,
then id 0 can be valid for regmap to request.

Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

---
 - Add this new patch in V7.
---
 drivers/base/regmap/regmap.c |    2 +-
 include/linux/regmap.h       |    2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Baolin Wang Jan. 11, 2018, 12:36 p.m. | #1
Hi Arnd,

On 2 January 2018 at 23:36, Lee Jones <lee.jones@linaro.org> wrote:
> Arnd,

>

>> Some system control registers need hardware spinlock to synchronize

>> between the multiple subsystems, so we should add hardware spinlock

>> support for syscon.

>>

>> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

>> Acked-by: Rob Herring <robh@kernel.org>

>

> ... did you sign off on this in the end?

>


Could you apply this patch if there are no other issue? Thanks.

>> ---

>> Changes since v6:

>>  - Treat hwlock id 0 as valid for regmap.

>>

>> Changes since v5:

>>  - Fix the case that hwspinlock is not enabled.

>>

>> Changes since v4:

>>  - Add one exapmle to show how to add hwlock.

>>  - Fix the coding style issue.

>>

>> Changes since v3:

>>  - Add error handling for of_hwspin_lock_get_id()

>>

>> Changes since v2:

>>  - Add acked tag from Rob.

>>

>> Changes since v1:

>>  - Remove timeout configuration.

>>  - Modify the binding file to add hwlocks.

>> ---

>>  Documentation/devicetree/bindings/mfd/syscon.txt |    8 ++++++++

>>  drivers/mfd/syscon.c                             |   19 +++++++++++++++++++

>>  2 files changed, 27 insertions(+)

>>

>> diff --git a/Documentation/devicetree/bindings/mfd/syscon.txt b/Documentation/devicetree/bindings/mfd/syscon.txt

>> index 8b92d45..25d9e9c 100644

>> --- a/Documentation/devicetree/bindings/mfd/syscon.txt

>> +++ b/Documentation/devicetree/bindings/mfd/syscon.txt

>> @@ -16,9 +16,17 @@ Required properties:

>>  Optional property:

>>  - reg-io-width: the size (in bytes) of the IO accesses that should be

>>    performed on the device.

>> +- hwlocks: reference to a phandle of a hardware spinlock provider node.

>>

>>  Examples:

>>  gpr: iomuxc-gpr@20e0000 {

>>       compatible = "fsl,imx6q-iomuxc-gpr", "syscon";

>>       reg = <0x020e0000 0x38>;

>> +     hwlocks = <&hwlock1 1>;

>> +};

>> +

>> +hwlock1: hwspinlock@40500000 {

>> +     ...

>> +     reg = <0x40500000 0x1000>;

>> +     #hwlock-cells = <1>;

>>  };

>> diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c

>> index b93fe4c..7eaa40b 100644

>> --- a/drivers/mfd/syscon.c

>> +++ b/drivers/mfd/syscon.c

>> @@ -13,6 +13,7 @@

>>   */

>>

>>  #include <linux/err.h>

>> +#include <linux/hwspinlock.h>

>>  #include <linux/io.h>

>>  #include <linux/module.h>

>>  #include <linux/list.h>

>> @@ -87,6 +88,24 @@ static struct syscon *of_syscon_register(struct device_node *np)

>>       if (ret)

>>               reg_io_width = 4;

>>

>> +     ret = of_hwspin_lock_get_id(np, 0);

>> +     if (ret > 0 || (IS_ENABLED(CONFIG_HWSPINLOCK) && ret == 0)) {

>> +             syscon_config.use_hwlock = true;

>> +             syscon_config.hwlock_id = ret;

>> +             syscon_config.hwlock_mode = HWLOCK_IRQSTATE;

>> +     } else if (ret < 0) {

>> +             switch (ret) {

>> +             case -ENOENT:

>> +                     /* Ignore missing hwlock, it's optional. */

>> +                     break;

>> +             default:

>> +                     pr_err("Failed to retrieve valid hwlock: %d\n", ret);

>> +                     /* fall-through */

>> +             case -EPROBE_DEFER:

>> +                     goto err_regmap;

>> +             }

>> +     }

>> +

>>       syscon_config.reg_stride = reg_io_width;

>>       syscon_config.val_bits = reg_io_width * 8;

>>       syscon_config.max_register = resource_size(&res) - reg_io_width;

>

> --

> Lee Jones

> Linaro Services Technical Lead

> Linaro.org │ Open source software for ARM SoCs

> Follow Linaro: Facebook | Twitter | Blog




-- 
Baolin.wang
Best Regards
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lee Jones Jan. 11, 2018, 1:08 p.m. | #2
On Thu, 11 Jan 2018, Baolin Wang wrote:

> Hi Arnd,

> 

> On 2 January 2018 at 23:36, Lee Jones <lee.jones@linaro.org> wrote:

> > Arnd,

> >

> >> Some system control registers need hardware spinlock to synchronize

> >> between the multiple subsystems, so we should add hardware spinlock

> >> support for syscon.

> >>

> >> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

> >> Acked-by: Rob Herring <robh@kernel.org>

> >

> > ... did you sign off on this in the end?

> >

> 

> Could you apply this patch if there are no other issue? Thanks.


Arnd is the expert in this area.

Ideally I'd like his Ack before applying the patch.

-- 
Lee Jones
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnd Bergmann Jan. 11, 2018, 2:27 p.m. | #3
On Thu, Jan 11, 2018 at 2:08 PM, Lee Jones <lee.jones@linaro.org> wrote:
> On Thu, 11 Jan 2018, Baolin Wang wrote:

>

>> Hi Arnd,

>>

>> On 2 January 2018 at 23:36, Lee Jones <lee.jones@linaro.org> wrote:

>> > Arnd,

>> >

>> >> Some system control registers need hardware spinlock to synchronize

>> >> between the multiple subsystems, so we should add hardware spinlock

>> >> support for syscon.

>> >>

>> >> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

>> >> Acked-by: Rob Herring <robh@kernel.org>

>> >

>> > ... did you sign off on this in the end?

>> >

>>

>> Could you apply this patch if there are no other issue? Thanks.

>

> Arnd is the expert in this area.

>

> Ideally I'd like his Ack before applying the patch.


Reviewed-by: Arnd Bergmann <arnd@arndb.de>


Sorry for missing the latest version, this looks good to me.

     Arnd
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lee Jones Jan. 11, 2018, 3:22 p.m. | #4
On Mon, 25 Dec 2017, Baolin Wang wrote:

> Some system control registers need hardware spinlock to synchronize

> between the multiple subsystems, so we should add hardware spinlock

> support for syscon.

> 

> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

> Acked-by: Rob Herring <robh@kernel.org>

> ---

> Changes since v6:

>  - Treat hwlock id 0 as valid for regmap.

> 

> Changes since v5:

>  - Fix the case that hwspinlock is not enabled.

> 

> Changes since v4:

>  - Add one exapmle to show how to add hwlock.

>  - Fix the coding style issue.

> 

> Changes since v3:

>  - Add error handling for of_hwspin_lock_get_id()

> 

> Changes since v2:

>  - Add acked tag from Rob.

> 

> Changes since v1:

>  - Remove timeout configuration.

>  - Modify the binding file to add hwlocks.

> ---

>  Documentation/devicetree/bindings/mfd/syscon.txt |    8 ++++++++

>  drivers/mfd/syscon.c                             |   19 +++++++++++++++++++

>  2 files changed, 27 insertions(+)


Applied, thanks.

-- 
Lee Jones
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lee Jones Jan. 22, 2018, 1:43 p.m. | #5
On Thu, 11 Jan 2018, Lee Jones wrote:
> On Mon, 25 Dec 2017, Baolin Wang wrote:

> 

> > Some system control registers need hardware spinlock to synchronize

> > between the multiple subsystems, so we should add hardware spinlock

> > support for syscon.

> > 

> > Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

> > Acked-by: Rob Herring <robh@kernel.org>

> > ---

> > Changes since v6:

> >  - Treat hwlock id 0 as valid for regmap.

> > 

> > Changes since v5:

> >  - Fix the case that hwspinlock is not enabled.

> > 

> > Changes since v4:

> >  - Add one exapmle to show how to add hwlock.

> >  - Fix the coding style issue.

> > 

> > Changes since v3:

> >  - Add error handling for of_hwspin_lock_get_id()

> > 

> > Changes since v2:

> >  - Add acked tag from Rob.

> > 

> > Changes since v1:

> >  - Remove timeout configuration.

> >  - Modify the binding file to add hwlocks.

> > ---

> >  Documentation/devicetree/bindings/mfd/syscon.txt |    8 ++++++++

> >  drivers/mfd/syscon.c                             |   19 +++++++++++++++++++

> >  2 files changed, 27 insertions(+)

> 

> Applied, thanks.


In order to avoid confusion, I should like to tell you that this patch
is applied for v4.17, not v4.16.

-- 
Lee Jones
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Baolin Wang Jan. 23, 2018, 8:05 a.m. | #6
Hi Lee,

On 22 January 2018 at 21:43, Lee Jones <lee.jones@linaro.org> wrote:
> On Thu, 11 Jan 2018, Lee Jones wrote:

>> On Mon, 25 Dec 2017, Baolin Wang wrote:

>>

>> > Some system control registers need hardware spinlock to synchronize

>> > between the multiple subsystems, so we should add hardware spinlock

>> > support for syscon.

>> >

>> > Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

>> > Acked-by: Rob Herring <robh@kernel.org>

>> > ---

>> > Changes since v6:

>> >  - Treat hwlock id 0 as valid for regmap.

>> >

>> > Changes since v5:

>> >  - Fix the case that hwspinlock is not enabled.

>> >

>> > Changes since v4:

>> >  - Add one exapmle to show how to add hwlock.

>> >  - Fix the coding style issue.

>> >

>> > Changes since v3:

>> >  - Add error handling for of_hwspin_lock_get_id()

>> >

>> > Changes since v2:

>> >  - Add acked tag from Rob.

>> >

>> > Changes since v1:

>> >  - Remove timeout configuration.

>> >  - Modify the binding file to add hwlocks.

>> > ---

>> >  Documentation/devicetree/bindings/mfd/syscon.txt |    8 ++++++++

>> >  drivers/mfd/syscon.c                             |   19 +++++++++++++++++++

>> >  2 files changed, 27 insertions(+)

>>

>> Applied, thanks.

>

> In order to avoid confusion, I should like to tell you that this patch

> is applied for v4.17, not v4.16.


This patch has been applied into Mark's branch[1] with your ACK, so
Mark should drop this patch from his branch and you will pick it and
merge it into v4.17?

[1] https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git/commit/?h=topic/hwspinlock&id=3bafc09e779710abaa7b836fe3bbeeeab7754c2b

-- 
Baolin.wang
Best Regards
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index f25ab18..d23a5c9 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -671,7 +671,7 @@  struct regmap *__regmap_init(struct device *dev,
 		map->lock = config->lock;
 		map->unlock = config->unlock;
 		map->lock_arg = config->lock_arg;
-	} else if (config->hwlock_id) {
+	} else if (config->use_hwlock) {
 		map->hwlock = hwspin_lock_request_specific(config->hwlock_id);
 		if (!map->hwlock) {
 			ret = -ENXIO;
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index 15eddc1..c78e005 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -317,6 +317,7 @@  struct regmap_access_table {
  *
  * @ranges: Array of configuration entries for virtual address ranges.
  * @num_ranges: Number of range configuration entries.
+ * @use_hwlock: Indicate if a hardware spinlock should be used.
  * @hwlock_id: Specify the hardware spinlock id.
  * @hwlock_mode: The hardware spinlock mode, should be HWLOCK_IRQSTATE,
  *		 HWLOCK_IRQ or 0.
@@ -365,6 +366,7 @@  struct regmap_config {
 	const struct regmap_range_cfg *ranges;
 	unsigned int num_ranges;
 
+	bool use_hwlock;
 	unsigned int hwlock_id;
 	unsigned int hwlock_mode;
 };