Fix omap serial early crash during hwmod _setup()
Subsystems (4)
cover Fix omap serial early crash during hwmod _setup()
This series should fix the issue with the early serial crash seen during hwmod _setup() as reported by [1]
The issue was reported on a am33xx device and was not seen on omap4 or omap5 devices as the hwmod data for both omap4 and omap5 had statically defined HWMOD_INIT_NO_IDLE and HWMOD_INIT_NO_RESET for uart3 which happens to be the debug console used on omap4 panda and omap5 uevm boards.
The series reverts the patch which stubbed out omap_serial_early_init() for DT boot and gets rid of the static flags in omap4 and omap5 hwmod data.
This series along with the patch posted by Felipe [2] should fix the issue reported by [1] completely and boot to prompt on a am33xx device with LL_DEBUG enabled.
I have boot tested this series (along with [2]) on a omap4 panda es and a am335x boneblack.
[1] http://comments.gmane.org/gmane.linux.ports.arm.omap/100628
[2] http://marc.info/?l=linux-omap&m=137353783912736&w=2
Rajendra Nayak (2):
Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
ARM: OMAP4+: Get rid of the HWMOD_INIT_NO_IDLE and
HWMOD_INIT_NO_RESET flags for uart
arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 3 +-- arch/arm/mach-omap2/omap_hwmod_54xx_data.c | 1 - arch/arm/mach-omap2/serial.c | 3 --- 3 files changed, 1 insertion(+), 6 deletions(-)
Signature · 1 line
1.7.9.5
PATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
This reverts commit 82702ea11ddfe0e43382e1fa5b66d807d8114916.
The above commit stubbed out omap_serial_early_init() in case of DT build thinking it was doing the serial port initializations.
omap_serial_early_init() however does not do the serial port inits (its instead done by omap_serial_init_port()) instead it sets the HWMOD_INIT_NO_IDLE and HWMOD_INIT_NO_RESET flags for the console uart which causes hwmod to avoid doing a reset followed by the idling of the console uart.
This is still needed even in the DT case.
--- arch/arm/mach-omap2/serial.c | 3 --- 1 file changed, 3 deletions(-)
arch/arm/mach-omap2/serial.c +0 -3
@@ -175,9 +175,6 @@ static char *cmdline_find_option(char *str)static int __init omap_serial_early_init (void ) { -if (of_have_populated_dt ()) -return -ENODEV ; - do { char oh_name[MAX_UART_HWMOD_NAME_LEN]; struct omap_hwmod *oh;
Signature · 1 line
1.7.9.5
Tony Lindgren
maintainerPATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 4 lines · Rajendra Nayak
This reverts commit
82702ea11ddfe0e43382e1fa5b66d807d8114916.The above commit stubbed out
omap_serial_early_init()in case of DT build thinking it was doing the serial port initializations.
Well not really. It was done to cut dependency between device tree initialized drivers and pdata initialized drivers.
Quoted 7 lines
omap_serial_early_init()however does not do the serial port inits (its instead done byomap_serial_init_port()) instead it sets theHWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETflags for the console uart which causes hwmod to avoid doing a reset followed by the idling of the console uart.This is still needed even in the DT case.
This fix is going the wrong way.
The console is working fine with DT based booting for me, except for the earlyprintk fix needed.
And there should not be any need to parse cmdline for console as omap-serial.c sets it up and already knows about it.
Care to state what exactly this attempts to fix and for which omaps? If this is only needed for am33xx, then why?
Regards,
Tony
Quoted 24 lines
Signed-off-by Rajendra Nayak <[email protected]>Reported-by Mark Jackson <[email protected]>Reported-by Vaibhav Bedia <[email protected]>--- arch/arm/mach-omap2/serial.c | 3 --- 1 file changed, 3 deletions(-)arch/arm/mach-omap2/serial.c +0
-3@@ -175,9 +175,6 @@ static char *cmdline_find_option(char *str)static int __init omap_serial_early_init (void ) { -if (of_have_populated_dt ()) -return -ENODEV ; - do { char oh_name[MAX_UART_HWMOD_NAME_LEN]; struct omap_hwmod *oh;Signature · 1 line
1.7.9.5
PATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 15 lines · Tony Lindgren
Quoted 4 lines · Rajendra Nayak
This reverts commit
82702ea11ddfe0e43382e1fa5b66d807d8114916.The above commit stubbed out
omap_serial_early_init()in case of DT build thinking it was doing the serial port initializations.Well not really. It was done to cut dependency between device tree initialized drivers and pdata initialized drivers.
Quoted 6 lines
omap_serial_early_init()however does not do the serial port inits (its instead done byomap_serial_init_port()) instead it sets theHWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETflags for the console uart which causes hwmod to avoid doing a reset followed by the idling of the console uart.
Quoted 6 lines
Quoted 1 line
This is still needed even in the DT case.
This fix is going the wrong way.
The console is working fine with DT based booting for me, except for the earlyprintk fix needed.
It works on omap4 and omap5. It won't work on any
am33xx devices.
Quoted 6 lines
And there should not be any need to parse cmdline for console as
omap-serial.csets it up and already knows about it.Care to state what exactly this attempts to fix and for which omaps? If this is only needed for am33xx, then why?
Yes, this is needed only for am33xx because am33xx hwmod rightly had the hwmod flags for NO_IDLE and NO_RESET removed and omap4 and omap5 wrongly still carry them around.
Just try applying PATCH 2/2 of this series and it won't work on the omap4 sdp anymore.
regards,
Rajendra
Quoted 29 lines
Regards,
Tony
Quoted 24 lines
Signed-off-by Rajendra Nayak <[email protected]>Reported-by Mark Jackson <[email protected]>Reported-by Vaibhav Bedia <[email protected]>--- arch/arm/mach-omap2/serial.c | 3 --- 1 file changed, 3 deletions(-)arch/arm/mach-omap2/serial.c +0
-3@@ -175,9 +175,6 @@ static char *cmdline_find_option(char *str)static int __init omap_serial_early_init (void ) { -if (of_have_populated_dt ()) -return -ENODEV ; - do { char oh_name[MAX_UART_HWMOD_NAME_LEN]; struct omap_hwmod *oh;Signature · 1 line
1.7.9.5
Tony Lindgren
maintainerPATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 18 lines · Rajendra Nayak
Quoted 17 lines · Tony Lindgren
Quoted 4 lines · Rajendra Nayak
This reverts commit
82702ea11ddfe0e43382e1fa5b66d807d8114916.The above commit stubbed out
omap_serial_early_init()in case of DT build thinking it was doing the serial port initializations.Well not really. It was done to cut dependency between device tree initialized drivers and pdata initialized drivers.
Quoted 7 lines
omap_serial_early_init()however does not do the serial port inits (its instead done byomap_serial_init_port()) instead it sets theHWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETflags for the console uart which causes hwmod to avoid doing a reset followed by the idling of the console uart.This is still needed even in the DT case.
Quoted 7 lines
Quoted 4 lines
This fix is going the wrong way.
The console is working fine with DT based booting for me, except for the earlyprintk fix needed.
It works on omap4 and omap5. It won't work on any
am33xx devices.
OK. I assume the regular serial onsole works just fine, what does not work is the earlyprintk for am33xx?
Quoted 9 lines
Quoted 5 lines
And there should not be any need to parse cmdline for console as
omap-serial.csets it up and already knows about it.Care to state what exactly this attempts to fix and for which omaps? If this is only needed for am33xx, then why?
Yes, this is needed only for am33xx because am33xx hwmod rightly had the hwmod flags for
NO_IDLEandNO_RESETremoved and omap4 and omap5 wrongly still carry them around.
OK.
Quoted 2 lines
Just try applying PATCH 2/2 of this series and it won't work on the omap4 sdp anymore.
OK, so that's only for earlyprintk then?
If so, it seems the right fix is to set the NO_IDLE and NO_RESET flags based on ifdef CONFIG_DEBUG_OMAP4UART3 etc as that is selected in the Kconfig now.
The current code in mach-omap2/serial.c is wrong, and is a hack needed for the pdata based booting. What's broken is that omap_serial_early_init() parses the cmdline for console, which itself is pretty nasty, and it won't work the right way as there's nothing stopping from having the earlycon in a different UART from the serial console. So we just want to get rid of the whole mach-omap2/serial.c once we're all DT.
So to summarize, we have two bugs:
1. Omap hwmod code can reset UART while earlycon may be using it. The fix to this is to use NO_IDLE and NO_RESET flags in the hwmod code if CONFIG_DEBUG_OMAPxUARTy is specified.
2. A bug in drivers/tty/serial/omap-serial.c where the missing context loss count can cause NULL context to be initialized during driver probe causing port to hang for earlycon. The fix for that is what Felipe has suggested or fix it in the driver by removing the context loss count usage and detect the need for context restore based on the UART state.
Or am I still missing something?
Regards,
Tony
PATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 21 lines · Tony Lindgren
Quoted 20 lines · Rajendra Nayak
Quoted 19 lines · Tony Lindgren
Quoted 4 lines · Rajendra Nayak
This reverts commit
82702ea11ddfe0e43382e1fa5b66d807d8114916.The above commit stubbed out
omap_serial_early_init()in case of DT build thinking it was doing the serial port initializations.Well not really. It was done to cut dependency between device tree initialized drivers and pdata initialized drivers.
Quoted 7 lines
omap_serial_early_init()however does not do the serial port inits (its instead done byomap_serial_init_port()) instead it sets theHWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETflags for the console uart which causes hwmod to avoid doing a reset followed by the idling of the console uart.This is still needed even in the DT case.
This fix is going the wrong way.
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
The console is working fine with DT based booting for me, except for the earlyprintk fix needed.
It works on omap4 and omap5. It won't work on any
am33xx devices.OK. I assume the regular serial onsole works just fine, what does not work is the earlyprintk for am33xx?
Yes, thats right.
Quoted 11 lines
Quoted 10 lines
Quoted 6 lines
And there should not be any need to parse cmdline for console as
omap-serial.csets it up and already knows about it.Care to state what exactly this attempts to fix and for which omaps? If this is only needed for am33xx, then why?
Yes, this is needed only for am33xx because am33xx hwmod rightly had the hwmod flags for
NO_IDLEandNO_RESETremoved and omap4 and omap5 wrongly still carry them around.
Quoted 6 lines
OK.
Quoted 2 lines
Just try applying PATCH 2/2 of this series and it won't work on the omap4 sdp anymore.
OK, so that's only for earlyprintk then?
yes,
Quoted 4 lines
If so, it seems the right fix is to set the
NO_IDLEandNO_RESETflags based on ifdefCONFIG_DEBUG_OMAP4UART3etc as that is selected in theKconfignow.
ok makes sense. It seems like the static data in hwmod can be populated based on these defines? something like
/* uart3 */
static struct omap_hwmod omap44xx_uart3_hwmod = {
.name = "uart3",
.class = &omap44xx_uart_hwmod_class,
.clkdm_name = "l4_per_clkdm",#ifdef CONFIG_DEBUG_OMAP4UART3
.flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET |
HWMOD_SWSUP_SIDLE_ACT,
#else
.flags = HWMOD_SWSUP_SIDLE_ACT,
#endif
.main_clk = "func_48m_fclk",
.prcm = {
.omap4 = {
.clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET,
.context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET,
.modulemode = MODULEMODE_SWCTRL,
},
},
};And same way for others? That way the cmdline parsing can be done away with even for the non-DT case.
Quoted 23 lines
The current code in
mach-omap2/serial.cis wrong, and is a hack needed for the pdata based booting. What's broken is thatomap_serial_early_init()parses the cmdline for console, which itself is pretty nasty, and it won't work the right way as there's nothing stopping from having the earlycon in a different UART from the serial console. So we just want to get rid of the wholemach-omap2/serial.conce we're all DT.So to summarize, we have two bugs:
1. Omap hwmod code can reset UART while earlycon may be using it. The fix to this is to use
NO_IDLEandNO_RESETflags in the hwmod code ifCONFIG_DEBUG_OMAPxUARTyis specified.2. A bug in
drivers/tty/serial/omap-serial.cwhere the missing context loss count can cause NULL context to be initialized during driver probe causing port to hang for earlycon. The fix for that is what Felipe has suggested or fix it in the driver by removing the context loss count usage and detect the need for context restore based on the UART state.
Quoted 1 line
Or am I still missing something?
No, thats pretty much the 2 issues we have.
regards,
Rajendra
Quoted 5 lines
Regards,
Tony
Tony Lindgren
maintainerPATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 35 lines · Rajendra Nayak
Quoted 2 lines · Tony Lindgren
OK, so that's only for earlyprintk then?
yes,
Quoted 4 lines
If so, it seems the right fix is to set the
NO_IDLEandNO_RESETflags based on ifdefCONFIG_DEBUG_OMAP4UART3etc as that is selected in theKconfignow.ok makes sense. It seems like the static data in hwmod can be populated based on these defines? something like
/* uart3 */
static structomap_hwmodomap44xx_uart3_hwmod= {.name = "uart3", .class = &omap44xx_uart_hwmod_class, .clkdm_name = "l4_per_clkdm",#ifdef
CONFIG_DEBUG_OMAP4UART3
.flags =HWMOD_INIT_NO_IDLE|HWMOD_INIT_NO_RESET|
HWMOD_SWSUP_SIDLE_ACT,
#else
.flags =HWMOD_SWSUP_SIDLE_ACT,#endif .main_clk = "func_48m_fclk", .prcm = { .omap4 = { .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET, .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, }, };
Quoted 2 lines
And same way for others? That way the cmdline parsing can be done away with even for the non-DT case.
Yes we can do it that way. How about add a common macro for it if it's always the same? Then the .flags line would be just:
#define HWMOD_OMAP_UART_FLAGS(soc, port)
...
.flags = HWMOD_OMAP_UART_FLAGS(4, 3),
Quoted 22 lines
Quoted 22 lines
The current code in
mach-omap2/serial.cis wrong, and is a hack needed for the pdata based booting. What's broken is thatomap_serial_early_init()parses the cmdline for console, which itself is pretty nasty, and it won't work the right way as there's nothing stopping from having the earlycon in a different UART from the serial console. So we just want to get rid of the wholemach-omap2/serial.conce we're all DT.So to summarize, we have two bugs:
1. Omap hwmod code can reset UART while earlycon may be using it. The fix to this is to use
NO_IDLEandNO_RESETflags in the hwmod code ifCONFIG_DEBUG_OMAPxUARTyis specified.2. A bug in
drivers/tty/serial/omap-serial.cwhere the missing context loss count can cause NULL context to be initialized during driver probe causing port to hang for earlycon. The fix for that is what Felipe has suggested or fix it in the driver by removing the context loss count usage and detect the need for context restore based on the UART state.
Quoted 3 lines
Quoted 1 line
Or am I still missing something?
No, thats pretty much the 2 issues we have.
OK thanks good to hear it's limited to earlycon issues.
Regards,
Tony
PATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 39 lines · Tony Lindgren
Quoted 35 lines · Rajendra Nayak
Quoted 2 lines · Tony Lindgren
OK, so that's only for earlyprintk then?
yes,
Quoted 4 lines
If so, it seems the right fix is to set the
NO_IDLEandNO_RESETflags based on ifdefCONFIG_DEBUG_OMAP4UART3etc as that is selected in theKconfignow.ok makes sense. It seems like the static data in hwmod can be populated based on these defines? something like
/* uart3 */
static structomap_hwmodomap44xx_uart3_hwmod= {.name = "uart3", .class = &omap44xx_uart_hwmod_class, .clkdm_name = "l4_per_clkdm",#ifdef
CONFIG_DEBUG_OMAP4UART3
.flags =HWMOD_INIT_NO_IDLE|HWMOD_INIT_NO_RESET|
HWMOD_SWSUP_SIDLE_ACT,
#else
.flags =HWMOD_SWSUP_SIDLE_ACT,#endif .main_clk = "func_48m_fclk", .prcm = { .omap4 = { .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET, .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, }, };Quoted 2 lines
And same way for others? That way the cmdline parsing can be done away with even for the non-DT case.
Quoted 7 lines
Yes we can do it that way. How about add a common macro for it if it's always the same? Then the .flags line would be just:
#define
HWMOD_OMAP_UART_FLAGS(soc, port)
....flags = HWMOD_OMAP_UART_FLAGS(4, 3),
Right, that seems much cleaner. I will send a patch out for it and get rid of all the cmdline parsing in serial.c
regards
Rajendra
Quoted 33 lines
Quoted 23 lines
Quoted 23 lines
The current code in
mach-omap2/serial.cis wrong, and is a hack needed for the pdata based booting. What's broken is thatomap_serial_early_init()parses the cmdline for console, which itself is pretty nasty, and it won't work the right way as there's nothing stopping from having the earlycon in a different UART from the serial console. So we just want to get rid of the wholemach-omap2/serial.conce we're all DT.So to summarize, we have two bugs:
1. Omap hwmod code can reset UART while earlycon may be using it. The fix to this is to use
NO_IDLEandNO_RESETflags in the hwmod code ifCONFIG_DEBUG_OMAPxUARTyis specified.2. A bug in
drivers/tty/serial/omap-serial.cwhere the missing context loss count can cause NULL context to be initialized during driver probe causing port to hang for earlycon. The fix for that is what Felipe has suggested or fix it in the driver by removing the context loss count usage and detect the need for context restore based on the UART state.Quoted 3 lines
Quoted 1 line
Or am I still missing something?
No, thats pretty much the 2 issues we have.
OK thanks good to hear it's limited to earlycon issues.
Regards,
Tony
Tony Lindgren
maintainerPATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 3 lines · Rajendra Nayak
Right, that seems much cleaner. I will send a patch out for it and get rid of all the cmdline parsing in
serial.c
Oh that's right, then it should not be needed for legacy pdata based booting either :)
Regards,
Tony
PATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
In reply to Tony LindgrenQuoted 39 lines · Tony Lindgren
Quoted 35 lines · Rajendra Nayak
Quoted 2 lines · Tony Lindgren
OK, so that's only for earlyprintk then?
yes,
Quoted 4 lines
If so, it seems the right fix is to set the
NO_IDLEandNO_RESETflags based on ifdefCONFIG_DEBUG_OMAP4UART3etc as that is selected in theKconfignow.ok makes sense. It seems like the static data in hwmod can be populated based on these defines? something like
/* uart3 */
static structomap_hwmodomap44xx_uart3_hwmod= {.name = "uart3", .class = &omap44xx_uart_hwmod_class, .clkdm_name = "l4_per_clkdm",#ifdef
CONFIG_DEBUG_OMAP4UART3
.flags =HWMOD_INIT_NO_IDLE|HWMOD_INIT_NO_RESET|
HWMOD_SWSUP_SIDLE_ACT,
#else
.flags =HWMOD_SWSUP_SIDLE_ACT,#endif .main_clk = "func_48m_fclk", .prcm = { .omap4 = { .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET, .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, }, };Quoted 2 lines
And same way for others? That way the cmdline parsing can be done away with even for the non-DT case.
Quoted 7 lines
Yes we can do it that way. How about add a common macro for it if it's always the same? Then the .flags line would be just:
#define
HWMOD_OMAP_UART_FLAGS(soc, port)
....flags = HWMOD_OMAP_UART_FLAGS(4, 3),
I started doing this and ended up with equal number of #ifdefs in the header :( Was the intention of doing this to reduce the #ifdefs? in which case maybe I am doing something wrong.
Quoted 33 lines
Quoted 23 lines
Quoted 23 lines
The current code in
mach-omap2/serial.cis wrong, and is a hack needed for the pdata based booting. What's broken is thatomap_serial_early_init()parses the cmdline for console, which itself is pretty nasty, and it won't work the right way as there's nothing stopping from having the earlycon in a different UART from the serial console. So we just want to get rid of the wholemach-omap2/serial.conce we're all DT.So to summarize, we have two bugs:
1. Omap hwmod code can reset UART while earlycon may be using it. The fix to this is to use
NO_IDLEandNO_RESETflags in the hwmod code ifCONFIG_DEBUG_OMAPxUARTyis specified.2. A bug in
drivers/tty/serial/omap-serial.cwhere the missing context loss count can cause NULL context to be initialized during driver probe causing port to hang for earlycon. The fix for that is what Felipe has suggested or fix it in the driver by removing the context loss count usage and detect the need for context restore based on the UART state.Quoted 3 lines
Quoted 1 line
Or am I still missing something?
No, thats pretty much the 2 issues we have.
OK thanks good to hear it's limited to earlycon issues.
Regards,
Tony
Tony Lindgren
maintainerPATCH 1/2 Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
Quoted 43 lines · Rajendra Nayak
Quoted 42 lines · Tony Lindgren
Quoted 35 lines · Rajendra Nayak
Quoted 2 lines · Tony Lindgren
OK, so that's only for earlyprintk then?
yes,
Quoted 4 lines
If so, it seems the right fix is to set the
NO_IDLEandNO_RESETflags based on ifdefCONFIG_DEBUG_OMAP4UART3etc as that is selected in theKconfignow.ok makes sense. It seems like the static data in hwmod can be populated based on these defines? something like
/* uart3 */
static structomap_hwmodomap44xx_uart3_hwmod= {.name = "uart3", .class = &omap44xx_uart_hwmod_class, .clkdm_name = "l4_per_clkdm",#ifdef
CONFIG_DEBUG_OMAP4UART3
.flags =HWMOD_INIT_NO_IDLE|HWMOD_INIT_NO_RESET|
HWMOD_SWSUP_SIDLE_ACT,
#else
.flags =HWMOD_SWSUP_SIDLE_ACT,#endif .main_clk = "func_48m_fclk", .prcm = { .omap4 = { .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET, .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, }, };Quoted 2 lines
And same way for others? That way the cmdline parsing can be done away with even for the non-DT case.
Yes we can do it that way. How about add a common macro for it if it's always the same? Then the .flags line would be just:
Quoted 8 lines
Quoted 4 lines
#define
HWMOD_OMAP_UART_FLAGS(soc, port)
....flags = HWMOD_OMAP_UART_FLAGS(4, 3),I started doing this and ended up with equal number of #ifdefs in the header :( Was the intention of doing this to reduce the #ifdefs? in which case maybe I am doing something wrong.
Hmm can't you use ## for substition in the macro to reduce the ifdefs and have just one macro instead one for every debug port?
Regards,
Tony
PATCH 2/2 ARM: OMAP4+: Get rid of the HWMOD_INIT_NO_IDLE and HWMOD_INIT_NO_RESET flags for uart
In reply to Rajendra NayakThe HWMOD_INIT_NO_IDLE and HWMOD_INIT_NO_RESET flags don't belong in the SoC data but instead need to be set runtime based on the uart thats used for debug console, so hwmod avoids doing a reset followed by a idling of the device. This is already happening as part of the omap_serial_early_init() so remove these flags from the static SoC data.
--- arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 3 +-- arch/arm/mach-omap2/omap_hwmod_54xx_data.c | 1 - 2 files changed, 1 insertion(+), 3 deletions(-)
arch/arm/mach-omap2/omap_hwmod_44xx_data.c +1 -2
@@ -2858,8 +2858,7 @@ static struct omap_hwmod omap44xx_uart3_hwmod = { .name = "uart3", .class = &omap44xx_uart_hwmod_class, .clkdm_name = "l4_per_clkdm", - .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET | - HWMOD_SWSUP_SIDLE_ACT, + .flags = HWMOD_SWSUP_SIDLE_ACT, .main_clk = "func_48m_fclk", .prcm = { .omap4 = {
arch/arm/mach-omap2/omap_hwmod_54xx_data.c +0 -1
@@ -1375,7 +1375,6 @@ static struct omap_hwmod omap54xx_uart3_hwmod = { .name = "uart3", .class = &omap54xx_uart_hwmod_class, .clkdm_name = "l4per_clkdm", - .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET, .main_clk = "func_48m_fclk", .prcm = { .omap4 = {
Signature · 1 line
1.7.9.5
cover Fix omap serial early crash during hwmod _setup()
In reply to Rajendra NayakQuoted 20 lines · Rajendra Nayak
This series should fix the issue with the early serial crash seen during hwmod
_setup()as reported by [1]The issue was reported on a am33xx device and was not seen on omap4 or omap5 devices as the hwmod data for both omap4 and omap5 had statically defined
HWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETfor uart3 which happens to be the debug console used on omap4 panda and omap5 uevm boards.The series reverts the patch which stubbed out
omap_serial_early_init()for DT boot and gets rid of the static flags in omap4 and omap5 hwmod data.This series along with the patch posted by Felipe [2] should fix the issue reported by [1] completely and boot to prompt on a am33xx device with
LL_DEBUGenabled.I have boot tested this series (along with [2]) on a omap4 panda es and a am335x boneblack.
Quoted 8 lines
[1] http://comments.gmane.org/gmane.linux.ports.arm.omap/100628
[2] http://marc.info/?l=linux-omap&m=137353783912736&w=2
Rajendra Nayak (2):
Revert "ARM: OMAP2+: Fix serial init for device tree based booting"
ARM: OMAP4+: Get rid of theHWMOD_INIT_NO_IDLEand
HWMOD_INIT_NO_RESETflags for uart
boot tested on omap4-panda rev a3. Console still works and it suspends and resumes fine after setting a proper timeout.
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130711/b7de8f7f/attachment.sig>
Tony Lindgren
maintainercover Fix omap serial early crash during hwmod _setup()
In reply to Rajendra NayakQuoted 8 lines · Rajendra Nayak
This series should fix the issue with the early serial crash seen during hwmod
_setup()as reported by [1]The issue was reported on a am33xx device and was not seen on omap4 or omap5 devices as the hwmod data for both omap4 and omap5 had statically defined
HWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETfor uart3 which happens to be the debug console used on omap4 panda and omap5 uevm boards.
The serial driver should be capable of setting this on it's own as it sets up the console.
Regards,
Tony
cover Fix omap serial early crash during hwmod _setup()
Quoted 4 lines · Tony Lindgren
Quoted 3 lines · Rajendra Nayak
This series should fix the issue with the early serial crash seen during hwmod
_setup()as reported by [1]
Quoted 8 lines
Quoted 5 lines
The issue was reported on a am33xx device and was not seen on omap4 or omap5 devices as the hwmod data for both omap4 and omap5 had statically defined
HWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETfor uart3 which happens to be the debug console used on omap4 panda and omap5 uevm boards.The serial driver should be capable of setting this on it's own as it sets up the console.
These flags are used to avoid an early reset that hwmod does to all devices on the SoC and is done much before serial driver is initialized.
Quoted 5 lines
Regards,
Tony
Tony Lindgren
maintainercover Fix omap serial early crash during hwmod _setup()
Quoted 11 lines · Rajendra Nayak
Quoted 10 lines · Tony Lindgren
Quoted 8 lines · Rajendra Nayak
This series should fix the issue with the early serial crash seen during hwmod
_setup()as reported by [1]The issue was reported on a am33xx device and was not seen on omap4 or omap5 devices as the hwmod data for both omap4 and omap5 had statically defined
HWMOD_INIT_NO_IDLEandHWMOD_INIT_NO_RESETfor uart3 which happens to be the debug console used on omap4 panda and omap5 uevm boards.
Quoted 5 lines
Quoted 2 lines
The serial driver should be capable of setting this on it's own as it sets up the console.
These flags are used to avoid an early reset that hwmod does to all devices on the SoC and is done much before serial driver is initialized.
OK so that's only needed for earlycon then it seems.
Regards,
Tony