Message ID | 1250204775-5001-1-git-send-email-paul.gortmaker@windriver.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Kumar Gala |
Headers | show |
On Aug 13, 2009, at 6:06 PM, Paul Gortmaker wrote: > From: Liang Li <Liang.Li@windriver.com> > > The existing fsl_rstcr_restart function fails to reset the sbc8560 > board. This implements a board specific reset function that uses > the RCR(Reset Control Register) of the board's EPLD to do a reset. > > Signed-off-by: Liang Li <Liang.Li@windriver.com> > Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> > --- > arch/powerpc/platforms/85xx/sbc8560.c | 39 ++++++++++++++++++++++++ > ++++++++- > 1 files changed, 38 insertions(+), 1 deletions(-) The reason it didn't was that feature doesnt exist on the mpc8560 :) - k
On Aug 13, 2009, at 6:06 PM, Paul Gortmaker wrote: > From: Liang Li <Liang.Li@windriver.com> > > The existing fsl_rstcr_restart function fails to reset the sbc8560 > board. This implements a board specific reset function that uses > the RCR(Reset Control Register) of the board's EPLD to do a reset. > > Signed-off-by: Liang Li <Liang.Li@windriver.com> > Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> > --- > arch/powerpc/platforms/85xx/sbc8560.c | 39 ++++++++++++++++++++++++ > ++++++++- > 1 files changed, 38 insertions(+), 1 deletions(-) > > diff --git a/arch/powerpc/platforms/85xx/sbc8560.c b/arch/powerpc/ > platforms/85xx/sbc8560.c > index cc27807..86dcca2 100644 > --- a/arch/powerpc/platforms/85xx/sbc8560.c > +++ b/arch/powerpc/platforms/85xx/sbc8560.c > @@ -267,6 +267,43 @@ arch_initcall(sbc8560_rtc_init); > > #endif /* M48T59 */ > > +static __u8 __iomem *brstcr; > + > +static int __init sbc8560_bdrstcr_init(void) > +{ > + struct device_node *np; > + struct resource res; > + > + np = of_find_compatible_node(NULL, NULL, "wrs,sbc8560-brstcr"); > + if (np == NULL) { > + printk(KERN_WARNING "sbc8560: No board specific RSTCR in DTB.\n"); > + return -ENODEV; > + } > + > + of_address_to_resource(np, 0, &res); > + > + printk(KERN_INFO "sbc8560: Found BRSTCR at i/o 0x%x\n", res.start); > + > + brstcr = ioremap(res.start, res.end - res.start); > + if(!brstcr) > + printk(KERN_WARNING "sbc8560: ioremap of brstcr failed.\n"); > + > + of_node_put(np); > + > + return 0; > +} > + > +arch_initcall(sbc8560_bdrstcr_init); > + > +void sbc8560_rstcr_restart(char * cmd) > +{ > + local_irq_disable(); > + if(brstcr) > + out_8(brstcr,in_8(brstcr) & 0x7f); how about using clrbits8() > + > + while(1); > +} > + > define_machine(sbc8560) { > .name = "SBC8560", > .probe = sbc8560_probe, > @@ -274,7 +311,7 @@ define_machine(sbc8560) { > .init_IRQ = sbc8560_pic_init, > .show_cpuinfo = sbc8560_show_cpuinfo, > .get_irq = mpic_get_irq, > - .restart = fsl_rstcr_restart, > + .restart = sbc8560_rstcr_restart, > .calibrate_decr = generic_calibrate_decr, > .progress = udbg_progress, > }; > -- > 1.6.3.3 > > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev
Kumar Gala wrote: > > On Aug 13, 2009, at 6:06 PM, Paul Gortmaker wrote: > >> From: Liang Li <Liang.Li@windriver.com> >> >> The existing fsl_rstcr_restart function fails to reset the sbc8560 >> board. This implements a board specific reset function that uses >> the RCR(Reset Control Register) of the board's EPLD to do a reset. >> >> Signed-off-by: Liang Li <Liang.Li@windriver.com> >> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> >> --- >> arch/powerpc/platforms/85xx/sbc8560.c | 39 >> ++++++++++++++++++++++++++++++++- >> 1 files changed, 38 insertions(+), 1 deletions(-) > > The reason it didn't was that feature doesnt exist on the mpc8560 :) I could see how that might have an impact on the functionality.... :-) So, what should the guts block of the 8560 dts look like? It currently has the standard: ------------ global-utilities@e0000 { compatible = "fsl,mpc8560-guts"; reg = <0xe0000 0x1000>; fsl,has-rstcr; }; ------------ MPC8560 has a guts block, but saying "has-rstcr", as you've pointed out, is a bit of a lie. If we remove that tag, then we'll trip the: printk(KERN_INFO "rstcr compatible register does not exist!\n"); which isn't the end of the world, but at the moment it reads more like an error message, vs. an informative one. Paul. > > - k
On Aug 14, 2009, at 9:43 AM, Paul Gortmaker wrote: > Kumar Gala wrote: >> On Aug 13, 2009, at 6:06 PM, Paul Gortmaker wrote: >>> From: Liang Li <Liang.Li@windriver.com> >>> >>> The existing fsl_rstcr_restart function fails to reset the sbc8560 >>> board. This implements a board specific reset function that uses >>> the RCR(Reset Control Register) of the board's EPLD to do a reset. >>> >>> Signed-off-by: Liang Li <Liang.Li@windriver.com> >>> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> >>> --- >>> arch/powerpc/platforms/85xx/sbc8560.c | 39 ++++++++++++++++++++++ >>> ++++++++++- >>> 1 files changed, 38 insertions(+), 1 deletions(-) >> The reason it didn't was that feature doesnt exist on the mpc8560 :) > > I could see how that might have an impact on the > functionality.... :-) > > So, what should the guts block of the 8560 dts look > like? It currently has the standard: > > ------------ > global-utilities@e0000 { > compatible = "fsl,mpc8560-guts"; > reg = <0xe0000 0x1000>; > fsl,has-rstcr; > }; > ------------ > > MPC8560 has a guts block, but saying "has-rstcr", as > you've pointed out, is a bit of a lie. If we remove that > tag, then we'll trip the: > > printk(KERN_INFO "rstcr compatible register does not exist!\n"); > > which isn't the end of the world, but at the moment it > reads more like an error message, vs. an informative one. we should probably remove 'fsl,has-rstcr' from the .dts since that's just wrong. I've got no issue w/either removing the warning or changing its wording. - k
diff --git a/arch/powerpc/platforms/85xx/sbc8560.c b/arch/powerpc/platforms/85xx/sbc8560.c index cc27807..86dcca2 100644 --- a/arch/powerpc/platforms/85xx/sbc8560.c +++ b/arch/powerpc/platforms/85xx/sbc8560.c @@ -267,6 +267,43 @@ arch_initcall(sbc8560_rtc_init); #endif /* M48T59 */ +static __u8 __iomem *brstcr; + +static int __init sbc8560_bdrstcr_init(void) +{ + struct device_node *np; + struct resource res; + + np = of_find_compatible_node(NULL, NULL, "wrs,sbc8560-brstcr"); + if (np == NULL) { + printk(KERN_WARNING "sbc8560: No board specific RSTCR in DTB.\n"); + return -ENODEV; + } + + of_address_to_resource(np, 0, &res); + + printk(KERN_INFO "sbc8560: Found BRSTCR at i/o 0x%x\n", res.start); + + brstcr = ioremap(res.start, res.end - res.start); + if(!brstcr) + printk(KERN_WARNING "sbc8560: ioremap of brstcr failed.\n"); + + of_node_put(np); + + return 0; +} + +arch_initcall(sbc8560_bdrstcr_init); + +void sbc8560_rstcr_restart(char * cmd) +{ + local_irq_disable(); + if(brstcr) + out_8(brstcr,in_8(brstcr) & 0x7f); + + while(1); +} + define_machine(sbc8560) { .name = "SBC8560", .probe = sbc8560_probe, @@ -274,7 +311,7 @@ define_machine(sbc8560) { .init_IRQ = sbc8560_pic_init, .show_cpuinfo = sbc8560_show_cpuinfo, .get_irq = mpic_get_irq, - .restart = fsl_rstcr_restart, + .restart = sbc8560_rstcr_restart, .calibrate_decr = generic_calibrate_decr, .progress = udbg_progress, };