mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [3.10][PATCH 0/4] resume reset fixes for stable 3.10
@ 2013-08-25  9:49 Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 1/4] mei: me: fix reset state machine Tomas Winkler
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Tomas Winkler @ 2013-08-25  9:49 UTC (permalink / raw)
  To: gregkh; +Cc: arnd, linux-kernel, Tomas Winkler

Tomas Winkler (4):
  mei: me: fix reset state machine
  mei: don't have to clean the state on power up
  mei: me: fix waiting for hw ready
  mei: me: fix hardware reset flow

 drivers/misc/mei/hw-me.c | 22 +++++++++++++---------
 drivers/misc/mei/init.c  |  3 ++-
 2 files changed, 15 insertions(+), 10 deletions(-)

-- 
1.8.1.2


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

* [3.10][PATCH 1/4] mei: me: fix reset state machine
  2013-08-25  9:49 [3.10][PATCH 0/4] resume reset fixes for stable 3.10 Tomas Winkler
@ 2013-08-25  9:49 ` Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 2/4] mei: don't have to clean the state on power up Tomas Winkler
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Tomas Winkler @ 2013-08-25  9:49 UTC (permalink / raw)
  To: gregkh; +Cc: arnd, linux-kernel, Tomas Winkler, stable

stable: 3.10
commit  315a383ad7dbd484fafb93ef08038e3dbafbb7a8 upstream


ME HW ready bit is down after hw reset was asserted or on error.
Only on error we need to enter the reset flow, additional reset
need to be prevented when reset was triggered during
initialization , power up/down or a reset is already in progress

Cc: stable@vger.kernel.org
Tested-by: Shuah Khan <shuah.kh@samsung.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/misc/mei/hw-me.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
index 822170f..0310859 100644
--- a/drivers/misc/mei/hw-me.c
+++ b/drivers/misc/mei/hw-me.c
@@ -482,7 +482,9 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
 	/* check if ME wants a reset */
 	if (!mei_hw_is_ready(dev) &&
 	    dev->dev_state != MEI_DEV_RESETTING &&
-	    dev->dev_state != MEI_DEV_INITIALIZING) {
+	    dev->dev_state != MEI_DEV_INITIALIZING &&
+	    dev->dev_state != MEI_DEV_POWER_DOWN &&
+	    dev->dev_state != MEI_DEV_POWER_UP) {
 		dev_dbg(&dev->pdev->dev, "FW not ready.\n");
 		mei_reset(dev, 1);
 		mutex_unlock(&dev->device_lock);
-- 
1.8.1.2


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

* [3.10][PATCH 2/4] mei: don't have to clean the state on power up
  2013-08-25  9:49 [3.10][PATCH 0/4] resume reset fixes for stable 3.10 Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 1/4] mei: me: fix reset state machine Tomas Winkler
@ 2013-08-25  9:49 ` Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 3/4] mei: me: fix waiting for hw ready Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 4/4] mei: me: fix hardware reset flow Tomas Winkler
  3 siblings, 0 replies; 7+ messages in thread
From: Tomas Winkler @ 2013-08-25  9:49 UTC (permalink / raw)
  To: gregkh; +Cc: arnd, linux-kernel, Tomas Winkler, stable

stable: 3.10
commit 99f22c4ef24cf87b0dae6aabe6b5e620b62961d9 upstream

When powering up, we don't have to clean up the device state
nothing is connected.

Cc: stable@vger.kernel.org
Tested-by: Shuah Khan <shuah.kh@samsung.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/misc/mei/init.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c
index f580d30..6eec689 100644
--- a/drivers/misc/mei/init.c
+++ b/drivers/misc/mei/init.c
@@ -143,7 +143,8 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
 
 	dev->hbm_state = MEI_HBM_IDLE;
 
-	if (dev->dev_state != MEI_DEV_INITIALIZING) {
+	if (dev->dev_state != MEI_DEV_INITIALIZING &&
+	    dev->dev_state != MEI_DEV_POWER_UP) {
 		if (dev->dev_state != MEI_DEV_DISABLED &&
 		    dev->dev_state != MEI_DEV_POWER_DOWN)
 			dev->dev_state = MEI_DEV_RESETTING;
-- 
1.8.1.2


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

* [3.10][PATCH 3/4] mei: me: fix waiting for hw ready
  2013-08-25  9:49 [3.10][PATCH 0/4] resume reset fixes for stable 3.10 Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 1/4] mei: me: fix reset state machine Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 2/4] mei: don't have to clean the state on power up Tomas Winkler
@ 2013-08-25  9:49 ` Tomas Winkler
  2013-08-25  9:49 ` [3.10][PATCH 4/4] mei: me: fix hardware reset flow Tomas Winkler
  3 siblings, 0 replies; 7+ messages in thread
From: Tomas Winkler @ 2013-08-25  9:49 UTC (permalink / raw)
  To: gregkh; +Cc: arnd, linux-kernel, Tomas Winkler, stable

stable: 3.10
commit dab9bf41b23fe700c4a74133e41eb6a21706031e upstream


1. MEI_INTEROP_TIMEOUT is in seconds not in jiffies
so we use mei_secs_to_jiffies macro
While cold boot is fast this is relevant in resume
2. wait_event_interruptible_timeout can return with
-ERESTARTSYS so do not override it with -ETIMEDOUT
3.Adjust error message

Cc: stable@vger.kernel.org
Tested-by: Shuah Khan <shuah.kh@samsung.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/misc/mei/hw-me.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
index 0310859..700fe55 100644
--- a/drivers/misc/mei/hw-me.c
+++ b/drivers/misc/mei/hw-me.c
@@ -238,14 +238,18 @@ static int mei_me_hw_ready_wait(struct mei_device *dev)
 	if (mei_me_hw_is_ready(dev))
 		return 0;
 
+	dev->recvd_hw_ready = false;
 	mutex_unlock(&dev->device_lock);
 	err = wait_event_interruptible_timeout(dev->wait_hw_ready,
-			dev->recvd_hw_ready, MEI_INTEROP_TIMEOUT);
+			dev->recvd_hw_ready,
+			mei_secs_to_jiffies(MEI_INTEROP_TIMEOUT));
 	mutex_lock(&dev->device_lock);
 	if (!err && !dev->recvd_hw_ready) {
+		if (!err)
+			err = -ETIMEDOUT;
 		dev_err(&dev->pdev->dev,
-			"wait hw ready failed. status = 0x%x\n", err);
-		return -ETIMEDOUT;
+			"wait hw ready failed. status = %d\n", err);
+		return err;
 	}
 
 	dev->recvd_hw_ready = false;
-- 
1.8.1.2


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

* [3.10][PATCH 4/4] mei: me: fix hardware reset flow
  2013-08-25  9:49 [3.10][PATCH 0/4] resume reset fixes for stable 3.10 Tomas Winkler
                   ` (2 preceding siblings ...)
  2013-08-25  9:49 ` [3.10][PATCH 3/4] mei: me: fix waiting for hw ready Tomas Winkler
@ 2013-08-25  9:49 ` Tomas Winkler
  2013-08-26 18:55   ` Greg KH
  3 siblings, 1 reply; 7+ messages in thread
From: Tomas Winkler @ 2013-08-25  9:49 UTC (permalink / raw)
  To: gregkh
  Cc: arnd, linux-kernel, Tomas Winkler, stable, Shuah Khan,
	Konstantin Khlebnikov

stable: 3.10
commit ff96066e3171acdea356b331163495957cb833d0 char-misc


Both H_IS and H_IE needs to be set to receive H_RDY
interrupt

1. Assert H_IS to clear the interrupts during hw reset
and use mei_me_reg_write instead of mei_hcsr_set as the later
strips down the H_IS

2. fix interrupt disablement embarrassing typo
  hcsr |= ~H_IE -> hcsr &= ~H_IE;
this will remove the unwanted interrupt on power down

3. remove useless debug print outs

Cc: stable@vger.kernel.org
Cc: Shuah Khan <shuah.kh@samsung.com>
Cc: Konstantin Khlebnikov <khlebnikov@openvz.org>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Conflicts:
	drivers/misc/mei/hw-me.c

---
 drivers/misc/mei/hw-me.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
index 700fe55..1bf3f8b 100644
--- a/drivers/misc/mei/hw-me.c
+++ b/drivers/misc/mei/hw-me.c
@@ -176,16 +176,14 @@ static void mei_me_hw_reset(struct mei_device *dev, bool intr_enable)
 	struct mei_me_hw *hw = to_me_hw(dev);
 	u32 hcsr = mei_hcsr_read(hw);
 
-	dev_dbg(&dev->pdev->dev, "before reset HCSR = 0x%08x.\n", hcsr);
-
-	hcsr |= (H_RST | H_IG);
+	hcsr |= H_RST | H_IG | H_IS;
 
 	if (intr_enable)
 		hcsr |= H_IE;
 	else
-		hcsr |= ~H_IE;
+		hcsr &= ~H_IE;
 
-	mei_hcsr_set(hw, hcsr);
+	mei_me_reg_write(hw, H_CSR, hcsr);
 
 	if (dev->dev_state == MEI_DEV_POWER_DOWN)
 		mei_me_hw_reset_release(dev);
-- 
1.8.1.2


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

* Re: [3.10][PATCH 4/4] mei: me: fix hardware reset flow
  2013-08-25  9:49 ` [3.10][PATCH 4/4] mei: me: fix hardware reset flow Tomas Winkler
@ 2013-08-26 18:55   ` Greg KH
  2013-08-27  9:14     ` Winkler, Tomas
  0 siblings, 1 reply; 7+ messages in thread
From: Greg KH @ 2013-08-26 18:55 UTC (permalink / raw)
  To: Tomas Winkler
  Cc: arnd, linux-kernel, stable, Shuah Khan, Konstantin Khlebnikov

On Sun, Aug 25, 2013 at 12:49:49PM +0300, Tomas Winkler wrote:
> stable: 3.10
> commit ff96066e3171acdea356b331163495957cb833d0 char-misc

Sorry, but I have to wait until the patch hits Linus's tree before I can
accept it into a stable tree, you know that :(

> Both H_IS and H_IE needs to be set to receive H_RDY
> interrupt
> 
> 1. Assert H_IS to clear the interrupts during hw reset
> and use mei_me_reg_write instead of mei_hcsr_set as the later
> strips down the H_IS
> 
> 2. fix interrupt disablement embarrassing typo
>   hcsr |= ~H_IE -> hcsr &= ~H_IE;
> this will remove the unwanted interrupt on power down
> 
> 3. remove useless debug print outs
> 
> Cc: stable@vger.kernel.org
> Cc: Shuah Khan <shuah.kh@samsung.com>
> Cc: Konstantin Khlebnikov <khlebnikov@openvz.org>
> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> Conflicts:
> 	drivers/misc/mei/hw-me.c

What's this for?

I'll wait for this to hit Linus's tree during the 3.12-rc1 merge window
and then add it to the 3.10-stable tree, ok?

thanks,

greg k-h

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

* RE: [3.10][PATCH 4/4] mei: me: fix hardware reset flow
  2013-08-26 18:55   ` Greg KH
@ 2013-08-27  9:14     ` Winkler, Tomas
  0 siblings, 0 replies; 7+ messages in thread
From: Winkler, Tomas @ 2013-08-27  9:14 UTC (permalink / raw)
  To: Greg KH; +Cc: arnd, linux-kernel, stable, Shuah Khan, Konstantin Khlebnikov



> 
> On Sun, Aug 25, 2013 at 12:49:49PM +0300, Tomas Winkler wrote:
> > stable: 3.10
> > commit ff96066e3171acdea356b331163495957cb833d0 char-misc
> 
> Sorry, but I have to wait until the patch hits Linus's tree before I can accept it
> into a stable tree, you know that :(
> 
Yes I understand the process, though this patch was intended upstream I marked it 3.11 https://lkml.org/lkml/2013/7/30/117. 
So I just advice distors to pick it for their 3.10

Thanks 
Tomas.

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

end of thread, other threads:[~2013-08-27  9:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-25  9:49 [3.10][PATCH 0/4] resume reset fixes for stable 3.10 Tomas Winkler
2013-08-25  9:49 ` [3.10][PATCH 1/4] mei: me: fix reset state machine Tomas Winkler
2013-08-25  9:49 ` [3.10][PATCH 2/4] mei: don't have to clean the state on power up Tomas Winkler
2013-08-25  9:49 ` [3.10][PATCH 3/4] mei: me: fix waiting for hw ready Tomas Winkler
2013-08-25  9:49 ` [3.10][PATCH 4/4] mei: me: fix hardware reset flow Tomas Winkler
2013-08-26 18:55   ` Greg KH
2013-08-27  9:14     ` Winkler, Tomas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®