From: Sreedevi Joshi <[email protected]> Axxia MTC driver changes: - Memory initialization completion check added - ECC error status clearing added
Signed-off-by: Sreedevi Joshi <[email protected]> --- drivers/misc/lsi-mtc.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/misc/lsi-mtc.c b/drivers/misc/lsi-mtc.c index 55c3403..f4fbe6f 100644 --- a/drivers/misc/lsi-mtc.c +++ b/drivers/misc/lsi-mtc.c @@ -31,6 +31,7 @@ #include <linux/string.h> #include "linux/lsi_mtc_ioctl.h" +#define MTC_POLL_TIMEOUT (msecs_to_jiffies(1000)) /* device tree node: @@ -4114,6 +4115,8 @@ static long _mtc_config(struct mtc_device *dev, struct lsi_mtc_cfg_t *pMTCCfg) struct ncp_axis_mtc_MTC_CONFIG0_REG_ADDR_r_t cfg0 = { 0 }; struct ncp_axis_mtc_MTC_CONFIG1_REG_ADDR_r_t cfg1 = { 0 }; struct ncp_axis_mtc_MTC_EXECUTE1_REG_ADDR_r_t exec1 = { 0 }; + u32 init_reg = { 0 }; + unsigned long tmo = 0; if ((!pMTCCfg) || (!dev)) return -EINVAL; @@ -4129,6 +4132,21 @@ static long _mtc_config(struct mtc_device *dev, struct lsi_mtc_cfg_t *pMTCCfg) exec1.sw_reset = 1; dev->regs->execute = *((u32 *) &exec1); dev->regs->mem_init = 0x202; + /* wait for the init to complete */ + tmo = jiffies + MTC_POLL_TIMEOUT; + do { + init_reg = *(&(dev->regs->mem_init)); + if ((init_reg & 0x101) == 0x101) + break; + } while (time_before(jiffies, tmo)); + + if ((init_reg & 0x101) != 0x101) { + pr_debug("warning: mem_init failed value=0x%x (expected:0x101)\n", + init_reg); + } + + /* clear ECC interrupt status */ + dev->regs->ecc_int_status = 0xF; /* 3. config MTC */ cfg0 = -- 2.7.4 -- _______________________________________________ linux-yocto mailing list [email protected] https://lists.yoctoproject.org/listinfo/linux-yocto
