diff mbox

ARM: OMAP2+: gpmc: Fix kernel BUG for DT boot mode

Message ID 1349773040-8204-1-git-send-email-hvaibhav@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Vaibhav Hiremath Oct. 9, 2012, 8:57 a.m. UTC
With recent changes in omap gpmc driver code, in case of DT
boot mode, where bootloader does not configure gpmc cs space
will result into kernel BUG() inside gpmc_mem_init() function,
as gpmc cs0 gpmc_config7[0].csvalid bit is set to '1' and
gpmc_config7[0].baseaddress is set to '0' on reset.

This use-case is applicable for any board/EVM which doesn't have
any peripheral connected to gpmc cs0, for example BeagleXM and
BeagleBone, so DT boot mode fails.

This patch adds of_have_populated_dt() check before creating
device, so that for DT boot mode, gpmc probe will not be called
which is expected behavior, as gpmc is not supported yet from DT.

Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
Cc: Afzal Mohammed <afzal@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc Paul Walmsley <paul@pwsan.com>
---
This should go in for rc1, as this breaks AM33xx boot.

 arch/arm/mach-omap2/gpmc.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

--
1.7.0.4

Comments

Afzal Mohammed Oct. 10, 2012, 6:49 a.m. UTC | #1
On Tuesday 09 October 2012 02:27 PM, Vaibhav Hiremath wrote:

> This patch adds of_have_populated_dt() check before creating

> Signed-off-by: Vaibhav Hiremath<hvaibhav@ti.com>
> Cc: Afzal Mohammed<afzal@ti.com>

Reviewed-by: Afzal Mohammed <afzal@ti.com>
Matt Porter Oct. 10, 2012, 2 p.m. UTC | #2
On Tue, Oct 09, 2012 at 02:27:20PM +0530, Vaibhav Hiremath wrote:
> With recent changes in omap gpmc driver code, in case of DT
> boot mode, where bootloader does not configure gpmc cs space
> will result into kernel BUG() inside gpmc_mem_init() function,
> as gpmc cs0 gpmc_config7[0].csvalid bit is set to '1' and
> gpmc_config7[0].baseaddress is set to '0' on reset.
> 
> This use-case is applicable for any board/EVM which doesn't have
> any peripheral connected to gpmc cs0, for example BeagleXM and
> BeagleBone, so DT boot mode fails.
> 
> This patch adds of_have_populated_dt() check before creating
> device, so that for DT boot mode, gpmc probe will not be called
> which is expected behavior, as gpmc is not supported yet from DT.
> 
> Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> Cc: Afzal Mohammed <afzal@ti.com>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc Paul Walmsley <paul@pwsan.com>
> ---
> This should go in for rc1, as this breaks AM33xx boot.

Fixes BeagleBone on mainline.

Tested-by: Matt Porter <mporter@ti.com>

-Matt
Vaibhav Hiremath Oct. 10, 2012, 2:19 p.m. UTC | #3
On Wed, Oct 10, 2012 at 19:30:27, Porter, Matt wrote:
> On Tue, Oct 09, 2012 at 02:27:20PM +0530, Vaibhav Hiremath wrote:
> > With recent changes in omap gpmc driver code, in case of DT
> > boot mode, where bootloader does not configure gpmc cs space
> > will result into kernel BUG() inside gpmc_mem_init() function,
> > as gpmc cs0 gpmc_config7[0].csvalid bit is set to '1' and
> > gpmc_config7[0].baseaddress is set to '0' on reset.
> > 
> > This use-case is applicable for any board/EVM which doesn't have
> > any peripheral connected to gpmc cs0, for example BeagleXM and
> > BeagleBone, so DT boot mode fails.
> > 
> > This patch adds of_have_populated_dt() check before creating
> > device, so that for DT boot mode, gpmc probe will not be called
> > which is expected behavior, as gpmc is not supported yet from DT.
> > 
> > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> > Cc: Afzal Mohammed <afzal@ti.com>
> > Cc: Tony Lindgren <tony@atomide.com>
> > Cc Paul Walmsley <paul@pwsan.com>
> > ---
> > This should go in for rc1, as this breaks AM33xx boot.
> 
> Fixes BeagleBone on mainline.
> 
> Tested-by: Matt Porter <mporter@ti.com>
> 

Thanks Matt and Afzal,

Tony can this be picked up for rc1?? I know you have already sent pull 
request for rc1, but by any chance you are planning to send another request?

Thanks,
Vaibhav
> -Matt
>
Matt Porter Oct. 10, 2012, 2:35 p.m. UTC | #4
On Wed, Oct 10, 2012 at 02:19:40PM +0000, Vaibhav Hiremath wrote:
> On Wed, Oct 10, 2012 at 19:30:27, Porter, Matt wrote:
> > On Tue, Oct 09, 2012 at 02:27:20PM +0530, Vaibhav Hiremath wrote:
> > > With recent changes in omap gpmc driver code, in case of DT
> > > boot mode, where bootloader does not configure gpmc cs space
> > > will result into kernel BUG() inside gpmc_mem_init() function,
> > > as gpmc cs0 gpmc_config7[0].csvalid bit is set to '1' and
> > > gpmc_config7[0].baseaddress is set to '0' on reset.
> > > 
> > > This use-case is applicable for any board/EVM which doesn't have
> > > any peripheral connected to gpmc cs0, for example BeagleXM and
> > > BeagleBone, so DT boot mode fails.
> > > 
> > > This patch adds of_have_populated_dt() check before creating
> > > device, so that for DT boot mode, gpmc probe will not be called
> > > which is expected behavior, as gpmc is not supported yet from DT.
> > > 
> > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> > > Cc: Afzal Mohammed <afzal@ti.com>
> > > Cc: Tony Lindgren <tony@atomide.com>
> > > Cc Paul Walmsley <paul@pwsan.com>
> > > ---
> > > This should go in for rc1, as this breaks AM33xx boot.
> > 
> > Fixes BeagleBone on mainline.
> > 
> > Tested-by: Matt Porter <mporter@ti.com>
> > 
> 
> Thanks Matt and Afzal,
> 
> Tony can this be picked up for rc1?? I know you have already sent pull 
> request for rc1, but by any chance you are planning to send another request?

I also found a separate problem with the mcasp clock data that's needed
for rc1. I just posted a patch for that as I need both this patch and the
clock data fix to boot from current mainline.

-Matt
Matt Porter Oct. 10, 2012, 2:37 p.m. UTC | #5
On Wed, Oct 10, 2012 at 10:35:01AM -0400, Matt Porter wrote:
> On Wed, Oct 10, 2012 at 02:19:40PM +0000, Vaibhav Hiremath wrote:
> > On Wed, Oct 10, 2012 at 19:30:27, Porter, Matt wrote:
> > > On Tue, Oct 09, 2012 at 02:27:20PM +0530, Vaibhav Hiremath wrote:
> > > > With recent changes in omap gpmc driver code, in case of DT
> > > > boot mode, where bootloader does not configure gpmc cs space
> > > > will result into kernel BUG() inside gpmc_mem_init() function,
> > > > as gpmc cs0 gpmc_config7[0].csvalid bit is set to '1' and
> > > > gpmc_config7[0].baseaddress is set to '0' on reset.
> > > > 
> > > > This use-case is applicable for any board/EVM which doesn't have
> > > > any peripheral connected to gpmc cs0, for example BeagleXM and
> > > > BeagleBone, so DT boot mode fails.
> > > > 
> > > > This patch adds of_have_populated_dt() check before creating
> > > > device, so that for DT boot mode, gpmc probe will not be called
> > > > which is expected behavior, as gpmc is not supported yet from DT.
> > > > 
> > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> > > > Cc: Afzal Mohammed <afzal@ti.com>
> > > > Cc: Tony Lindgren <tony@atomide.com>
> > > > Cc Paul Walmsley <paul@pwsan.com>
> > > > ---
> > > > This should go in for rc1, as this breaks AM33xx boot.
> > > 
> > > Fixes BeagleBone on mainline.
> > > 
> > > Tested-by: Matt Porter <mporter@ti.com>
> > > 
> > 
> > Thanks Matt and Afzal,
> > 
> > Tony can this be picked up for rc1?? I know you have already sent pull 
> > request for rc1, but by any chance you are planning to send another request?
> 
> I also found a separate problem with the mcasp clock data that's needed
> for rc1. I just posted a patch for that as I need both this patch and the
> clock data fix to boot from current mainline.

Disregard now that you got me pointed to the pull request with this :)

-Matt
Tony Lindgren Oct. 16, 2012, 5:43 p.m. UTC | #6
* Matt Porter <mporter@ti.com> [121010 07:38]:
> On Wed, Oct 10, 2012 at 10:35:01AM -0400, Matt Porter wrote:
> > On Wed, Oct 10, 2012 at 02:19:40PM +0000, Vaibhav Hiremath wrote:
> > > On Wed, Oct 10, 2012 at 19:30:27, Porter, Matt wrote:
> > > > On Tue, Oct 09, 2012 at 02:27:20PM +0530, Vaibhav Hiremath wrote:
> > > > > With recent changes in omap gpmc driver code, in case of DT
> > > > > boot mode, where bootloader does not configure gpmc cs space
> > > > > will result into kernel BUG() inside gpmc_mem_init() function,
> > > > > as gpmc cs0 gpmc_config7[0].csvalid bit is set to '1' and
> > > > > gpmc_config7[0].baseaddress is set to '0' on reset.
> > > > > 
> > > > > This use-case is applicable for any board/EVM which doesn't have
> > > > > any peripheral connected to gpmc cs0, for example BeagleXM and
> > > > > BeagleBone, so DT boot mode fails.
> > > > > 
> > > > > This patch adds of_have_populated_dt() check before creating
> > > > > device, so that for DT boot mode, gpmc probe will not be called
> > > > > which is expected behavior, as gpmc is not supported yet from DT.
> > > > > 
> > > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> > > > > Cc: Afzal Mohammed <afzal@ti.com>
> > > > > Cc: Tony Lindgren <tony@atomide.com>
> > > > > Cc Paul Walmsley <paul@pwsan.com>
> > > > > ---
> > > > > This should go in for rc1, as this breaks AM33xx boot.
> > > > 
> > > > Fixes BeagleBone on mainline.
> > > > 
> > > > Tested-by: Matt Porter <mporter@ti.com>
> > > > 
> > > 
> > > Thanks Matt and Afzal,
> > > 
> > > Tony can this be picked up for rc1?? I know you have already sent pull 
> > > request for rc1, but by any chance you are planning to send another request?
> > 
> > I also found a separate problem with the mcasp clock data that's needed
> > for rc1. I just posted a patch for that as I need both this patch and the
> > clock data fix to boot from current mainline.
> 
> Disregard now that you got me pointed to the pull request with this :)

Thanks applying $Subject patch into omap-for-v3.7-rc1/fixes-part2 and
ignoring the comments about the mcasp clock as it sounds like the mcasp
is already fixed.

Regards,

Tony
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
index 8ab1e1b..c68f9e1 100644
--- a/arch/arm/mach-omap2/gpmc.c
+++ b/arch/arm/mach-omap2/gpmc.c
@@ -981,6 +981,10 @@  static int __init omap_gpmc_init(void)
 	struct platform_device *pdev;
 	char *oh_name = "gpmc";

+	/* If dtb is there, the devices will be created dynamically */
+	if (of_have_populated_dt())
+		return -ENODEV;
+
 	oh = omap_hwmod_lookup(oh_name);
 	if (!oh) {
 		pr_err("Could not look up %s\n", oh_name);