diff mbox

powerpc/85xx: Fix oops during MSI driver probe on MPC85xxMDS boards

Message ID 20091215225809.GA32140@oksana.dev.rtsoft.ru (mailing list archive)
State Accepted, archived
Commit fa644298eb24ab05b32acf6cc0f2265b833280e1
Delegated to: Kumar Gala
Headers show

Commit Message

Anton Vorontsov Dec. 15, 2009, 10:58 p.m. UTC
MPC85xx chips report the wrong value in feature reporting register,
and that causes the following oops:

 Unable to handle kernel paging request for data at address 0x00000c00
 Faulting instruction address: 0xc0019294
 Oops: Kernel access of bad area, sig: 11 [#1]
 MPC8569 MDS
 Modules linked in:
 [...]
 NIP [c0019294] mpic_set_irq_type+0x2f0/0x368
 LR [c0019124] mpic_set_irq_type+0x180/0x368
 Call Trace:
 [ef851d60] [c0019124] mpic_set_irq_type+0x180/0x368 (unreliable)
 [ef851d90] [c007958c] __irq_set_trigger+0x44/0xd4
 [ef851db0] [c007b550] set_irq_type+0x40/0x7c
 [ef851dc0] [c0004a60] irq_create_of_mapping+0xb4/0x114
 [ef851df0] [c0004af0] irq_of_parse_and_map+0x30/0x40
 [ef851e20] [c0405678] fsl_of_msi_probe+0x1a0/0x328
 [ef851e60] [c02e6438] of_platform_device_probe+0x5c/0x84
 [...]

This is because mpic_alloc() assigns wrong values to
mpic->isu_{size,shift,mask}, and things eventually break when
_mpic_irq_read() is trying to use them.

This patch fixes the issue by enabling MPIC_BROKEN_FRR_NIRQS quirk.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 arch/powerpc/platforms/85xx/mpc85xx_mds.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Comments

Anton Vorontsov Jan. 18, 2010, 3:53 p.m. UTC | #1
On Wed, Dec 16, 2009 at 01:58:09AM +0300, Anton Vorontsov wrote:
> MPC85xx chips report the wrong value in feature reporting register,
> and that causes the following oops:
> 
>  Unable to handle kernel paging request for data at address 0x00000c00
>  Faulting instruction address: 0xc0019294
>  Oops: Kernel access of bad area, sig: 11 [#1]
>  MPC8569 MDS
>  Modules linked in:
>  [...]
>  NIP [c0019294] mpic_set_irq_type+0x2f0/0x368
>  LR [c0019124] mpic_set_irq_type+0x180/0x368
>  Call Trace:
>  [ef851d60] [c0019124] mpic_set_irq_type+0x180/0x368 (unreliable)
>  [ef851d90] [c007958c] __irq_set_trigger+0x44/0xd4
>  [ef851db0] [c007b550] set_irq_type+0x40/0x7c
>  [ef851dc0] [c0004a60] irq_create_of_mapping+0xb4/0x114
>  [ef851df0] [c0004af0] irq_of_parse_and_map+0x30/0x40
>  [ef851e20] [c0405678] fsl_of_msi_probe+0x1a0/0x328
>  [ef851e60] [c02e6438] of_platform_device_probe+0x5c/0x84
>  [...]
> 
> This is because mpic_alloc() assigns wrong values to
> mpic->isu_{size,shift,mask}, and things eventually break when
> _mpic_irq_read() is trying to use them.
> 
> This patch fixes the issue by enabling MPIC_BROKEN_FRR_NIRQS quirk.
> 
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---

Kumar,

Did you miss this patch or it's just in a queue for review?

Thanks!

>  arch/powerpc/platforms/85xx/mpc85xx_mds.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
> index c5028a2..6491f7c 100644
> --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
> +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
> @@ -338,7 +338,8 @@ static void __init mpc85xx_mds_pic_init(void)
>  	}
>  
>  	mpic = mpic_alloc(np, r.start,
> -			MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN,
> +			MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN |
> +			MPIC_BROKEN_FRR_NIRQS,
>  			0, 256, " OpenPIC  ");
>  	BUG_ON(mpic == NULL);
>  	of_node_put(np);
> -- 
> 1.6.3.3
Kumar Gala Jan. 19, 2010, 7:15 p.m. UTC | #2
On Jan 18, 2010, at 9:53 AM, Anton Vorontsov wrote:

> On Wed, Dec 16, 2009 at 01:58:09AM +0300, Anton Vorontsov wrote:
>> MPC85xx chips report the wrong value in feature reporting register,
>> and that causes the following oops:
>> 
>> Unable to handle kernel paging request for data at address 0x00000c00
>> Faulting instruction address: 0xc0019294
>> Oops: Kernel access of bad area, sig: 11 [#1]
>> MPC8569 MDS
>> Modules linked in:
>> [...]
>> NIP [c0019294] mpic_set_irq_type+0x2f0/0x368
>> LR [c0019124] mpic_set_irq_type+0x180/0x368
>> Call Trace:
>> [ef851d60] [c0019124] mpic_set_irq_type+0x180/0x368 (unreliable)
>> [ef851d90] [c007958c] __irq_set_trigger+0x44/0xd4
>> [ef851db0] [c007b550] set_irq_type+0x40/0x7c
>> [ef851dc0] [c0004a60] irq_create_of_mapping+0xb4/0x114
>> [ef851df0] [c0004af0] irq_of_parse_and_map+0x30/0x40
>> [ef851e20] [c0405678] fsl_of_msi_probe+0x1a0/0x328
>> [ef851e60] [c02e6438] of_platform_device_probe+0x5c/0x84
>> [...]
>> 
>> This is because mpic_alloc() assigns wrong values to
>> mpic->isu_{size,shift,mask}, and things eventually break when
>> _mpic_irq_read() is trying to use them.
>> 
>> This patch fixes the issue by enabling MPIC_BROKEN_FRR_NIRQS quirk.
>> 
>> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
>> ---
> 
> Kumar,
> 
> Did you miss this patch or it's just in a queue for review?
> 
> Thanks!

I just missed it will pick it up in a merge request to benh/linus.

- k
Kumar Gala Jan. 25, 2010, 4:54 p.m. UTC | #3
On Dec 15, 2009, at 4:58 PM, Anton Vorontsov wrote:

> MPC85xx chips report the wrong value in feature reporting register,
> and that causes the following oops:
> 
> Unable to handle kernel paging request for data at address 0x00000c00
> Faulting instruction address: 0xc0019294
> Oops: Kernel access of bad area, sig: 11 [#1]
> MPC8569 MDS
> Modules linked in:
> [...]
> NIP [c0019294] mpic_set_irq_type+0x2f0/0x368
> LR [c0019124] mpic_set_irq_type+0x180/0x368
> Call Trace:
> [ef851d60] [c0019124] mpic_set_irq_type+0x180/0x368 (unreliable)
> [ef851d90] [c007958c] __irq_set_trigger+0x44/0xd4
> [ef851db0] [c007b550] set_irq_type+0x40/0x7c
> [ef851dc0] [c0004a60] irq_create_of_mapping+0xb4/0x114
> [ef851df0] [c0004af0] irq_of_parse_and_map+0x30/0x40
> [ef851e20] [c0405678] fsl_of_msi_probe+0x1a0/0x328
> [ef851e60] [c02e6438] of_platform_device_probe+0x5c/0x84
> [...]
> 
> This is because mpic_alloc() assigns wrong values to
> mpic->isu_{size,shift,mask}, and things eventually break when
> _mpic_irq_read() is trying to use them.
> 
> This patch fixes the issue by enabling MPIC_BROKEN_FRR_NIRQS quirk.
> 
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> arch/powerpc/platforms/85xx/mpc85xx_mds.c |    3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)

applied to merge for 2.6.33

- k
diff mbox

Patch

diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
index c5028a2..6491f7c 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
@@ -338,7 +338,8 @@  static void __init mpc85xx_mds_pic_init(void)
 	}
 
 	mpic = mpic_alloc(np, r.start,
-			MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN,
+			MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN |
+			MPIC_BROKEN_FRR_NIRQS,
 			0, 256, " OpenPIC  ");
 	BUG_ON(mpic == NULL);
 	of_node_put(np);