diff options
Diffstat (limited to 'drivers/net/can')
-rw-r--r-- | drivers/net/can/m_can/m_can.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index e61886bf1bb3..268ad5064c47 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c | |||
@@ -1010,7 +1010,7 @@ static int m_can_of_parse_mram(struct platform_device *pdev, | |||
1010 | struct resource *res; | 1010 | struct resource *res; |
1011 | void __iomem *addr; | 1011 | void __iomem *addr; |
1012 | u32 out_val[MRAM_CFG_LEN]; | 1012 | u32 out_val[MRAM_CFG_LEN]; |
1013 | int ret; | 1013 | int i, start, end, ret; |
1014 | 1014 | ||
1015 | /* message ram could be shared */ | 1015 | /* message ram could be shared */ |
1016 | res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "message_ram"); | 1016 | res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "message_ram"); |
@@ -1061,6 +1061,15 @@ static int m_can_of_parse_mram(struct platform_device *pdev, | |||
1061 | priv->mcfg[MRAM_TXE].off, priv->mcfg[MRAM_TXE].num, | 1061 | priv->mcfg[MRAM_TXE].off, priv->mcfg[MRAM_TXE].num, |
1062 | priv->mcfg[MRAM_TXB].off, priv->mcfg[MRAM_TXB].num); | 1062 | priv->mcfg[MRAM_TXB].off, priv->mcfg[MRAM_TXB].num); |
1063 | 1063 | ||
1064 | /* initialize the entire Message RAM in use to avoid possible | ||
1065 | * ECC/parity checksum errors when reading an uninitialized buffer | ||
1066 | */ | ||
1067 | start = priv->mcfg[MRAM_SIDF].off; | ||
1068 | end = priv->mcfg[MRAM_TXB].off + | ||
1069 | priv->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE; | ||
1070 | for (i = start; i < end; i += 4) | ||
1071 | writel(0x0, priv->mram_base + i); | ||
1072 | |||
1064 | return 0; | 1073 | return 0; |
1065 | } | 1074 | } |
1066 | 1075 | ||