Re: [PATCH 3/3] ARM: dts: omap4-sdp: add dynamic pin states for uart3/4

2013-07-18 Thread Grygorii Strashko

On 07/18/2013 11:09 AM, Tony Lindgren wrote:

* Grygorii Strashko grygorii.stras...@ti.com [130717 09:48]:

Hi,

On 07/17/2013 06:32 PM, Tony Lindgren wrote:

* Grygorii Strashko grygorii.stras...@ti.com [130717 04:49]:

Add dynamic active/idle pin states for uart3/4 which will be applied
when uart3/4 state is switched from active to idle and back by Runtime
PM or during system suspend.


This is good for testing code, but should not be merged because
omap4 has the iopad wake-ups available for uarts. So those can
be always enabled.


In this case, 2 IRQ will be received per each UART RX event - one from
PRCM and from UART - and that's not good from PM perspective (It will
affect on CPUIdle and CPUFreq at least).


Oh I see, that's because I accidentally left the debug code enabled
to make it easier to test the wake-up events without having to
have working off-idle. The wake flags can be kept on always for
sure.

The patch below should sort out the issue of getting wake-up interrupts
during runtime as long as you don't have DEBUG defined.

Regards,

Tony

--- a/drivers/pinctrl/pinctrl-single-omap.c
+++ b/drivers/pinctrl/pinctrl-single-omap.c
@@ -140,9 +140,17 @@ static irqreturn_t pcs_omap_handle_irq(int irq, void *data)
if ((val  OMAP_WAKEUP_EVENT_MASK) == OMAP_WAKEUP_EVENT_MASK)
generic_handle_irq(wakeirq);
}
-
+#ifdef DEBUG


Don't think it's debug code - IO chain need to be rearmed after each
PRCM IO IRQ - otherwise IO wakeup events may be lost (at least on
OMAP4, OMAP5 requires more complex handling(( ).



+   /*
+* This enables wake-up interrupts during runtime also
+* causing duplicate interrupts. But it also makes debugging
+* the wake-up events easy as deeper idle states often are
+* not working for new devices while the drivers are being
+* developed.
+*/
if (pcso-reconfigure_io_chain)
pcso-reconfigure_io_chain();
+#endif

return IRQ_HANDLED;
  }



I didn't pick up your padconf patches yet -seems i need to be in sync :)

Below the diff I used to verify IO wake up (It follows old IO daisy
chain hanlding models in hwmod before DT):


--- a/arch/arm/mach-omap2/omap_device.c
+++ b/arch/arm/mach-omap2/omap_device.c
@@ -574,7 +574,7 @@ odbs_exit:

return ERR_PTR(ret);
 }
-
+#include prm44xx.h
 #ifdef CONFIG_PM_RUNTIME
 static int _od_runtime_suspend(struct device *dev)
 {
@@ -586,6 +586,7 @@ static int _od_runtime_suspend(struct device *dev)
if (!ret) {
omap_device_idle(pdev);
pinctrl_pm_select_idle_state(dev);
+   omap44xx_prm_reconfigure_io_chain();
}

return ret;
@@ -596,6 +597,7 @@ static int _od_runtime_resume(struct device *dev)
struct platform_device *pdev = to_platform_device(dev);

pinctrl_pm_select_active_state(dev);
+   omap44xx_prm_reconfigure_io_chain();

omap_device_enable(pdev);

diff --git a/arch/arm/mach-omap2/prm_common.c 
b/arch/arm/mach-omap2/prm_common.c

index 228b850..5db073a 100644
--- a/arch/arm/mach-omap2/prm_common.c
+++ b/arch/arm/mach-omap2/prm_common.c
@@ -79,7 +79,7 @@ static void omap_prcm_events_filter_priority(unsigned 
long *events,

events[i] ^= priority_events[i];
}
 }
-
+#include prm44xx.h
 /*
  * PRCM Interrupt Handler
  *
@@ -144,6 +144,7 @@ static void omap_prcm_irq_handler(unsigned int irq, 
struct irq_desc *desc)

chip-irq_unmask(desc-irq_data);

prcm_irq_setup-ocp_barrier(); /* avoid spurious IRQs */
+   omap44xx_prm_reconfigure_io_chain();
 }


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


Re: [PATCH 3/3] ARM: dts: omap4-sdp: add dynamic pin states for uart3/4

2013-07-18 Thread Tony Lindgren
* Grygorii Strashko grygorii.stras...@ti.com [130718 02:01]:
 On 07/18/2013 11:09 AM, Tony Lindgren wrote:
 
 Don't think it's debug code - IO chain need to be rearmed after each
 PRCM IO IRQ - otherwise IO wakeup events may be lost (at least on
 OMAP4, OMAP5 requires more complex handling(( ).

Nope, only after the mux register changes. I've verified it on
am3730 with off-idle for both serial and wl12xx.
 
 I didn't pick up your padconf patches yet -seems i need to be in sync :)

Well you need those for proper wake-up event support..

 Below the diff I used to verify IO wake up (It follows old IO daisy
 chain hanlding models in hwmod before DT):

..then these changes not needed with the pinctrl-single changes.

Regards,

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


Re: [PATCH 3/3] ARM: dts: omap4-sdp: add dynamic pin states for uart3/4

2013-07-18 Thread Grygorii Strashko

Hi Tony,

On 07/18/2013 12:04 PM, Tony Lindgren wrote:

* Grygorii Strashko grygorii.stras...@ti.com [130718 02:01]:

On 07/18/2013 11:09 AM, Tony Lindgren wrote:

Don't think it's debug code - IO chain need to be rearmed after each
PRCM IO IRQ - otherwise IO wakeup events may be lost (at least on
OMAP4, OMAP5 requires more complex handling(( ).


Nope, only after the mux register changes. I've verified it on
am3730 with off-idle for both serial and wl12xx.


Unfortunately, there is a possibility to lose wake up events in case if
IO daisy chain will be rearmed (this will clean up all WAKEUPEVENT bits)
while there is some pending  WAKEUP event present. In this case, 
pcs_omap_handle_irq() will not call generic_handle_irq(wakeirq).


The below patch contains explanation of such kind of issue we've solved
in K3.4
http://git.omapzoom.org/?p=kernel/omap.git;a=commit;h=5ff316db224a2c3c23bfe44261275d520b4f78bb

Currently, in Mainline the same is possible on OMAP4 (which is SMP) if
some Device will be switched to idle and rearm IO chain while there is
pending WAKEUP event form USB for example. So, IO rearming need to be 
delayed until PRCM irq will be served served and PRCM irq handler should 
finally rearm IO daisy chain.






I didn't pick up your padconf patches yet -seems i need to be in sync :)


Well you need those for proper wake-up event support..


Below the diff I used to verify IO wake up (It follows old IO daisy
chain hanlding models in hwmod before DT):


..then these changes not needed with the pinctrl-single changes.

Regards,

Tony



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


Re: [PATCH 3/3] ARM: dts: omap4-sdp: add dynamic pin states for uart3/4

2013-07-17 Thread Tony Lindgren
* Grygorii Strashko grygorii.stras...@ti.com [130717 04:49]:
 Add dynamic active/idle pin states for uart3/4 which will be applied
 when uart3/4 state is switched from active to idle and back by Runtime
 PM or during system suspend.

This is good for testing code, but should not be merged because
omap4 has the iopad wake-ups available for uarts. So those can
be always enabled.
 
 --- a/arch/arm/boot/dts/omap4-sdp.dts
 +++ b/arch/arm/boot/dts/omap4-sdp.dts
 @@ -181,18 +181,40 @@
   pinctrl-single,pins = 
   0x100 (PIN_INPUT_PULLUP | MUX_MODE0)/* 
 uart3_cts_rctx.uart3_cts_rctx */
   0x102 (PIN_OUTPUT | MUX_MODE0)  /* 
 uart3_rts_sd.uart3_rts_sd */
 - 0x104 (PIN_INPUT | MUX_MODE0)   /* 
 uart3_rx_irrx.uart3_rx_irrx */
   0x106 (PIN_OUTPUT | MUX_MODE0)  /* 
 uart3_tx_irtx.uart3_tx_irtx */
   ;
   };

This just need to become:
pinctrl-single,pins = 
...
0x104 (WAKEUP_EN | PIN_INPUT_MUX_MODE0) /* 
uart3_rx_irrx.uart3_rx_irrx */
...
;
interrupts = GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH;
};

And so on. For am33xx you need to remux things to GPIO for the wake-up
events, so you should maybe test on that instead.

Regards,

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


Re: [PATCH 3/3] ARM: dts: omap4-sdp: add dynamic pin states for uart3/4

2013-07-17 Thread Grygorii Strashko

Hi,

On 07/17/2013 06:32 PM, Tony Lindgren wrote:

* Grygorii Strashko grygorii.stras...@ti.com [130717 04:49]:

Add dynamic active/idle pin states for uart3/4 which will be applied
when uart3/4 state is switched from active to idle and back by Runtime
PM or during system suspend.


This is good for testing code, but should not be merged because
omap4 has the iopad wake-ups available for uarts. So those can
be always enabled.


In this case, 2 IRQ will be received per each UART RX event - one from
PRCM and from UART - and that's not good from PM perspective (It will
affect on CPUIdle and CPUFreq at least).

-- log when wake-up enabled always
106:729  0   GIC 106  OMAP UART2
115: 13  0   GIC 115  mmc0
118: 68  0   GIC 118  mmc1
151:  0  0   GIC 151  twl6040
361:322  0  PRCM  hwmod_io

-- log when wake-up enabled only when UART3 (console) is active
106:   1104  0   GIC 106  OMAP UART2
115: 13  0   GIC 115  mmc0
118: 68  0   GIC 118  mmc1
151:  0  0   GIC 151  twl6040
361:  7  0  PRCM  hwmod_io

The same is valid for all devices which will leave WAKEUP_EN set
all the time (




--- a/arch/arm/boot/dts/omap4-sdp.dts
+++ b/arch/arm/boot/dts/omap4-sdp.dts
@@ -181,18 +181,40 @@
pinctrl-single,pins = 
0x100 (PIN_INPUT_PULLUP | MUX_MODE0)/* 
uart3_cts_rctx.uart3_cts_rctx */
0x102 (PIN_OUTPUT | MUX_MODE0)  /* 
uart3_rts_sd.uart3_rts_sd */
-   0x104 (PIN_INPUT | MUX_MODE0)   /* 
uart3_rx_irrx.uart3_rx_irrx */
0x106 (PIN_OUTPUT | MUX_MODE0)  /* 
uart3_tx_irtx.uart3_tx_irtx */
;
};


This just need to become:
pinctrl-single,pins = 
...
0x104 (WAKEUP_EN | PIN_INPUT_MUX_MODE0) /* 
uart3_rx_irrx.uart3_rx_irrx */
...
;
interrupts = GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH;
};

And so on. For am33xx you need to remux things to GPIO for the wake-up
events, so you should maybe test on that instead.

Regards,

Tony



Regards,
- grygorii
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html