linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] Mediatek pinctrl patch
@ 2021-03-12  6:35 Zhiyong Tao
  2021-03-12  6:35 ` [PATCH] pinctrl: add lock in mtk_rmw function Zhiyong Tao
  0 siblings, 1 reply; 6+ messages in thread
From: Zhiyong Tao @ 2021-03-12  6:35 UTC (permalink / raw)
  To: robh+dt, linus.walleij, mark.rutland, matthias.bgg, sean.wang
  Cc: srv_heupstream, zhiyong.tao, hui.liu, eddie.huang, jg_poxu,
	biao.huang, hongzhou.yang, erin.lo, sean.wang, seiya.wang,
	sj.huang, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, linux-gpio

This series includes 1 patches:
1.add lock in mtk_rmw function.

Zhiyong Tao (1):
  pinctrl: add lock in mtk_rmw function.

 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 4 ++++
 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h | 2 ++
 drivers/pinctrl/mediatek/pinctrl-paris.c         | 2 ++
 3 files changed, 8 insertions(+)

--
2.25.1



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] pinctrl: add lock in mtk_rmw function.
  2021-03-12  6:35 [PATCH 0/1] Mediatek pinctrl patch Zhiyong Tao
@ 2021-03-12  6:35 ` Zhiyong Tao
  2021-03-16  5:05   ` Sean Wang
  0 siblings, 1 reply; 6+ messages in thread
From: Zhiyong Tao @ 2021-03-12  6:35 UTC (permalink / raw)
  To: robh+dt, linus.walleij, mark.rutland, matthias.bgg, sean.wang
  Cc: srv_heupstream, zhiyong.tao, hui.liu, eddie.huang, jg_poxu,
	biao.huang, hongzhou.yang, erin.lo, sean.wang, seiya.wang,
	sj.huang, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, linux-gpio

When multiple threads operate on the same register resource
which include multiple pin, It will make the register resource
wrong to control. So we add lock to avoid the case.

Signed-off-by: Zhiyong Tao <zhiyong.tao@mediatek.com>
---
 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 4 ++++
 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h | 2 ++
 drivers/pinctrl/mediatek/pinctrl-paris.c         | 2 ++
 3 files changed, 8 insertions(+)

diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
index 72f17f26acd8..fcf7c3eeee4a 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
@@ -58,10 +58,14 @@ void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set)
 {
 	u32 val;
 
+	mutex_lock(&pctl->lock);
+
 	val = mtk_r32(pctl, i, reg);
 	val &= ~mask;
 	val |= set;
 	mtk_w32(pctl, i, reg, val);
+
+	mutex_unlock(&pctl->lock);
 }
 
 static int mtk_hw_pin_field_lookup(struct mtk_pinctrl *hw,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
index e2aae285b5fc..65eac708a3b3 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
@@ -251,6 +251,8 @@ struct mtk_pinctrl {
 	struct mtk_eint			*eint;
 	struct mtk_pinctrl_group	*groups;
 	const char          **grp_names;
+	/* lock pin's register resource to avoid multiple threads issue*/
+	struct mutex lock;
 };
 
 void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set);
diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
index da1f19288aa6..48e823f6d293 100644
--- a/drivers/pinctrl/mediatek/pinctrl-paris.c
+++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
@@ -970,6 +970,8 @@ int mtk_paris_pinctrl_probe(struct platform_device *pdev,
 
 	hw->nbase = hw->soc->nbase_names;
 
+	mutex_init(&hw->lock);
+
 	err = mtk_pctrl_build_state(pdev);
 	if (err) {
 		dev_err(&pdev->dev, "build state failed: %d\n", err);
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: add lock in mtk_rmw function.
  2021-03-12  6:35 ` [PATCH] pinctrl: add lock in mtk_rmw function Zhiyong Tao
@ 2021-03-16  5:05   ` Sean Wang
  2021-03-16  6:10     ` zhiyong tao
  0 siblings, 1 reply; 6+ messages in thread
From: Sean Wang @ 2021-03-16  5:05 UTC (permalink / raw)
  To: Zhiyong Tao
  Cc: Rob Herring, Linus Walleij, Mark Rutland, Matthias Brugger,
	srv_heupstream, hui.liu, Eddie Huang (黃智傑),
	jg_poxu, Biao Huang, Hongzhou Yang,
	Erin Lo (羅雅齡),
	Sean Wang (王志亘),
	seiya.wang, sj.huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-arm Mailing List, moderated list:ARM/Mediatek SoC support,
	open list:GPIO SUBSYSTEM

Hi Zhiyong,

On Fri, Mar 12, 2021 at 2:35 PM Zhiyong Tao <zhiyong.tao@mediatek.com> wrote:
>
> When multiple threads operate on the same register resource
> which include multiple pin, It will make the register resource
> wrong to control. So we add lock to avoid the case.
>
> Signed-off-by: Zhiyong Tao <zhiyong.tao@mediatek.com>
> ---
>  drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 4 ++++
>  drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h | 2 ++
>  drivers/pinctrl/mediatek/pinctrl-paris.c         | 2 ++
>  3 files changed, 8 insertions(+)
>
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
> index 72f17f26acd8..fcf7c3eeee4a 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
> +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
> @@ -58,10 +58,14 @@ void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set)
>  {
>         u32 val;
>
> +       mutex_lock(&pctl->lock);
> +
>         val = mtk_r32(pctl, i, reg);
>         val &= ~mask;
>         val |= set;
>         mtk_w32(pctl, i, reg, val);
> +
> +       mutex_unlock(&pctl->lock);
>  }
>
>  static int mtk_hw_pin_field_lookup(struct mtk_pinctrl *hw,
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
> index e2aae285b5fc..65eac708a3b3 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
> +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
> @@ -251,6 +251,8 @@ struct mtk_pinctrl {
>         struct mtk_eint                 *eint;
>         struct mtk_pinctrl_group        *groups;
>         const char          **grp_names;
> +       /* lock pin's register resource to avoid multiple threads issue*/
> +       struct mutex lock;
>  };
>
>  void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set);
> diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
> index da1f19288aa6..48e823f6d293 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-paris.c
> +++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
> @@ -970,6 +970,8 @@ int mtk_paris_pinctrl_probe(struct platform_device *pdev,
>
>         hw->nbase = hw->soc->nbase_names;
>
> +       mutex_init(&hw->lock);
> +

Could you help add the mutex initialization into pinctrl-moore.c too?
and then the patch would look good to me.

>         err = mtk_pctrl_build_state(pdev);
>         if (err) {
>                 dev_err(&pdev->dev, "build state failed: %d\n", err);
> --
> 2.18.0
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: add lock in mtk_rmw function.
  2021-03-16  5:05   ` Sean Wang
@ 2021-03-16  6:10     ` zhiyong tao
  0 siblings, 0 replies; 6+ messages in thread
From: zhiyong tao @ 2021-03-16  6:10 UTC (permalink / raw)
  To: Sean Wang
  Cc: Rob Herring, Linus Walleij, Mark Rutland, Matthias Brugger,
	srv_heupstream, hui.liu, Eddie Huang (黃智傑),
	jg_poxu, Biao Huang, Hongzhou Yang,
	Erin Lo (羅雅齡),
	Sean Wang (王志亘),
	seiya.wang, sj.huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-arm Mailing List, moderated list:ARM/Mediatek SoC support,
	open list:GPIO SUBSYSTEM

On Tue, 2021-03-16 at 13:05 +0800, Sean Wang wrote:
> Hi Zhiyong,
> 
> On Fri, Mar 12, 2021 at 2:35 PM Zhiyong Tao <zhiyong.tao@mediatek.com> wrote:
> >
> > When multiple threads operate on the same register resource
> > which include multiple pin, It will make the register resource
> > wrong to control. So we add lock to avoid the case.
> >
> > Signed-off-by: Zhiyong Tao <zhiyong.tao@mediatek.com>
> > ---
> >  drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 4 ++++
> >  drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h | 2 ++
> >  drivers/pinctrl/mediatek/pinctrl-paris.c         | 2 ++
> >  3 files changed, 8 insertions(+)
> >
> > diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
> > index 72f17f26acd8..fcf7c3eeee4a 100644
> > --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
> > +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
> > @@ -58,10 +58,14 @@ void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set)
> >  {
> >         u32 val;
> >
> > +       mutex_lock(&pctl->lock);
> > +
> >         val = mtk_r32(pctl, i, reg);
> >         val &= ~mask;
> >         val |= set;
> >         mtk_w32(pctl, i, reg, val);
> > +
> > +       mutex_unlock(&pctl->lock);
> >  }
> >
> >  static int mtk_hw_pin_field_lookup(struct mtk_pinctrl *hw,
> > diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
> > index e2aae285b5fc..65eac708a3b3 100644
> > --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
> > +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
> > @@ -251,6 +251,8 @@ struct mtk_pinctrl {
> >         struct mtk_eint                 *eint;
> >         struct mtk_pinctrl_group        *groups;
> >         const char          **grp_names;
> > +       /* lock pin's register resource to avoid multiple threads issue*/
> > +       struct mutex lock;
> >  };
> >
> >  void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set);
> > diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
> > index da1f19288aa6..48e823f6d293 100644
> > --- a/drivers/pinctrl/mediatek/pinctrl-paris.c
> > +++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
> > @@ -970,6 +970,8 @@ int mtk_paris_pinctrl_probe(struct platform_device *pdev,
> >
> >         hw->nbase = hw->soc->nbase_names;
> >
> > +       mutex_init(&hw->lock);
> > +
> 
> Could you help add the mutex initialization into pinctrl-moore.c too?
> and then the patch would look good to me.

==>Hi sean,
We will add add the mutex initialization into pinctrl-moore.c too in v2.

Thanks.
> 
> >         err = mtk_pctrl_build_state(pdev);
> >         if (err) {
> >                 dev_err(&pdev->dev, "build state failed: %d\n", err);
> > --
> > 2.18.0
> >


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: add lock in mtk_rmw function.
  2021-03-21  3:31 ` [PATCH] pinctrl: add lock in mtk_rmw function Zhiyong Tao
@ 2021-03-25  9:15   ` Linus Walleij
  0 siblings, 0 replies; 6+ messages in thread
From: Linus Walleij @ 2021-03-25  9:15 UTC (permalink / raw)
  To: Zhiyong Tao
  Cc: Rob Herring, Mark Rutland, Matthias Brugger, Sean Wang,
	srv_heupstream, hui.liu, huang eddie, jg_poxu, Biao Huang,
	Hongzhou Yang, Erin Lo, Sean Wang, seiya.wang, sj.huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	linux-kernel, Linux ARM, moderated list:ARM/Mediatek SoC support,
	open list:GPIO SUBSYSTEM

On Sun, Mar 21, 2021 at 4:32 AM Zhiyong Tao <zhiyong.tao@mediatek.com> wrote:

> When multiple threads operate on the same register resource
> which include multiple pin, It will make the register resource
> wrong to control. So we add lock to avoid the case.
>
> Signed-off-by: Zhiyong Tao <zhiyong.tao@mediatek.com>

Patch applied!

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] pinctrl: add lock in mtk_rmw function.
  2021-03-21  3:31 [PATCH v2 0/1] Mediatek pinctrl patch Zhiyong Tao
@ 2021-03-21  3:31 ` Zhiyong Tao
  2021-03-25  9:15   ` Linus Walleij
  0 siblings, 1 reply; 6+ messages in thread
From: Zhiyong Tao @ 2021-03-21  3:31 UTC (permalink / raw)
  To: robh+dt, linus.walleij, mark.rutland, matthias.bgg, sean.wang
  Cc: srv_heupstream, zhiyong.tao, hui.liu, eddie.huang, jg_poxu,
	biao.huang, hongzhou.yang, erin.lo, sean.wang, seiya.wang,
	sj.huang, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, linux-gpio

When multiple threads operate on the same register resource
which include multiple pin, It will make the register resource
wrong to control. So we add lock to avoid the case.

Signed-off-by: Zhiyong Tao <zhiyong.tao@mediatek.com>
---
 drivers/pinctrl/mediatek/pinctrl-moore.c         | 2 ++
 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 4 ++++
 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h | 2 ++
 drivers/pinctrl/mediatek/pinctrl-paris.c         | 2 ++
 4 files changed, 10 insertions(+)

diff --git a/drivers/pinctrl/mediatek/pinctrl-moore.c b/drivers/pinctrl/mediatek/pinctrl-moore.c
index 0fa7de43bc4c..f77921957f15 100644
--- a/drivers/pinctrl/mediatek/pinctrl-moore.c
+++ b/drivers/pinctrl/mediatek/pinctrl-moore.c
@@ -619,6 +619,8 @@ int mtk_moore_pinctrl_probe(struct platform_device *pdev,
 
 	hw->nbase = hw->soc->nbase_names;
 
+	mutex_init(&hw->lock);
+
 	/* Copy from internal struct mtk_pin_desc to register to the core */
 	pins = devm_kmalloc_array(&pdev->dev, hw->soc->npins, sizeof(*pins),
 				  GFP_KERNEL);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
index 72f17f26acd8..fcf7c3eeee4a 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c
@@ -58,10 +58,14 @@ void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set)
 {
 	u32 val;
 
+	mutex_lock(&pctl->lock);
+
 	val = mtk_r32(pctl, i, reg);
 	val &= ~mask;
 	val |= set;
 	mtk_w32(pctl, i, reg, val);
+
+	mutex_unlock(&pctl->lock);
 }
 
 static int mtk_hw_pin_field_lookup(struct mtk_pinctrl *hw,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
index e2aae285b5fc..65eac708a3b3 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h
@@ -251,6 +251,8 @@ struct mtk_pinctrl {
 	struct mtk_eint			*eint;
 	struct mtk_pinctrl_group	*groups;
 	const char          **grp_names;
+	/* lock pin's register resource to avoid multiple threads issue*/
+	struct mutex lock;
 };
 
 void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set);
diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
index da1f19288aa6..48e823f6d293 100644
--- a/drivers/pinctrl/mediatek/pinctrl-paris.c
+++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
@@ -970,6 +970,8 @@ int mtk_paris_pinctrl_probe(struct platform_device *pdev,
 
 	hw->nbase = hw->soc->nbase_names;
 
+	mutex_init(&hw->lock);
+
 	err = mtk_pctrl_build_state(pdev);
 	if (err) {
 		dev_err(&pdev->dev, "build state failed: %d\n", err);
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-03-25  9:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-12  6:35 [PATCH 0/1] Mediatek pinctrl patch Zhiyong Tao
2021-03-12  6:35 ` [PATCH] pinctrl: add lock in mtk_rmw function Zhiyong Tao
2021-03-16  5:05   ` Sean Wang
2021-03-16  6:10     ` zhiyong tao
2021-03-21  3:31 [PATCH v2 0/1] Mediatek pinctrl patch Zhiyong Tao
2021-03-21  3:31 ` [PATCH] pinctrl: add lock in mtk_rmw function Zhiyong Tao
2021-03-25  9:15   ` Linus Walleij

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).