diff options
| -rw-r--r-- | arch/powerpc/include/asm/fsl_lbc.h | 2 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/fsl_lbc.c | 9 | 
2 files changed, 9 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/fsl_lbc.h b/arch/powerpc/include/asm/fsl_lbc.h index 5c1bf346674..8a0b5ece8f7 100644 --- a/arch/powerpc/include/asm/fsl_lbc.h +++ b/arch/powerpc/include/asm/fsl_lbc.h @@ -157,6 +157,8 @@ struct fsl_lbc_regs {  #define LBCR_EPAR_SHIFT    16  #define LBCR_BMT   0x0000FF00  #define LBCR_BMT_SHIFT      8 +#define LBCR_BMTPS 0x0000000F +#define LBCR_BMTPS_SHIFT    0  #define LBCR_INIT  0x00040000  	__be32 lcrr;            /**< Clock Ratio Register */  #define LCRR_DBYP    0x80000000 diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c index 4fcb5a4e60d..0608b1657da 100644 --- a/arch/powerpc/sysdev/fsl_lbc.c +++ b/arch/powerpc/sysdev/fsl_lbc.c @@ -184,7 +184,8 @@ int fsl_upm_run_pattern(struct fsl_upm *upm, void __iomem *io_base, u32 mar)  }  EXPORT_SYMBOL(fsl_upm_run_pattern); -static int __devinit fsl_lbc_ctrl_init(struct fsl_lbc_ctrl *ctrl) +static int __devinit fsl_lbc_ctrl_init(struct fsl_lbc_ctrl *ctrl, +				       struct device_node *node)  {  	struct fsl_lbc_regs __iomem *lbc = ctrl->regs; @@ -198,6 +199,10 @@ static int __devinit fsl_lbc_ctrl_init(struct fsl_lbc_ctrl *ctrl)  	/* Enable interrupts for any detected events */  	out_be32(&lbc->lteir, LTEIR_ENABLE); +	/* Set the monitor timeout value to the maximum for erratum A001 */ +	if (of_device_is_compatible(node, "fsl,elbc")) +		clrsetbits_be32(&lbc->lbcr, LBCR_BMT, LBCR_BMTPS); +  	return 0;  } @@ -304,7 +309,7 @@ static int __devinit fsl_lbc_ctrl_probe(struct platform_device *dev)  	fsl_lbc_ctrl_dev->dev = &dev->dev; -	ret = fsl_lbc_ctrl_init(fsl_lbc_ctrl_dev); +	ret = fsl_lbc_ctrl_init(fsl_lbc_ctrl_dev, dev->dev.of_node);  	if (ret < 0)  		goto err;  |