mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	can: mcp25xxfd: mcp25xxfd_handle_eccif(): add ECC related errata and update log messages
This patch adds a reference to the recent released MCP2517FD and MCP2518FD errata sheets and paste the explanation. The single error correction does not always work, so always indicate that a single error occurred. If the location of the ECC error is outside of the TX-RAM always use netdev_notice() to log the problem. For ECC errors in the TX-RAM, there is a recovery procedure. Signed-off-by: Thomas Kopp <thomas.kopp@microchip.com> Link: https://lore.kernel.org/r/20200925065606.358-1-thomas.kopp@microchip.com [mkl: split into two patches, adjust subject and commit message] Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
		
							parent
							
								
									879456bedb
								
							
						
					
					
						commit
						788b83ea2c
					
				
					 1 changed files with 14 additions and 7 deletions
				
			
		|  | @ -1973,8 +1973,20 @@ mcp25xxfd_handle_eccif(struct mcp25xxfd_priv *priv, bool set_normal_mode) | |||
| 	else | ||||
| 		return err; | ||||
| 
 | ||||
| 	/* Errata Reference:
 | ||||
| 	 * mcp2517fd: DS80000789B, mcp2518fd: DS80000792C 2. | ||||
| 	 * | ||||
| 	 * ECC single error correction does not work in all cases: | ||||
| 	 * | ||||
| 	 * Fix/Work Around: | ||||
| 	 * Enable single error correction and double error detection | ||||
| 	 * interrupts by setting SECIE and DEDIE. Handle SECIF as a | ||||
| 	 * detection interrupt and do not rely on the error | ||||
| 	 * correction. Instead, handle both interrupts as a | ||||
| 	 * notification that the RAM word at ERRADDR was corrupted. | ||||
| 	 */ | ||||
| 	if (ecc_stat & MCP25XXFD_REG_ECCSTAT_SECIF) | ||||
| 		msg = "Single ECC Error corrected at address"; | ||||
| 		msg = "Single ECC Error detected at address"; | ||||
| 	else if (ecc_stat & MCP25XXFD_REG_ECCSTAT_DEDIF) | ||||
| 		msg = "Double ECC Error detected at address"; | ||||
| 	else | ||||
|  | @ -1983,12 +1995,7 @@ mcp25xxfd_handle_eccif(struct mcp25xxfd_priv *priv, bool set_normal_mode) | |||
| 	if (!in_tx_ram) { | ||||
| 		ecc->ecc_stat = 0; | ||||
| 
 | ||||
| 		if (ecc_stat & MCP25XXFD_REG_ECCSTAT_SECIF) | ||||
| 			netdev_info(priv->ndev, "%s 0x%04x.\n", | ||||
| 				    msg, addr); | ||||
| 		else | ||||
| 			netdev_notice(priv->ndev, "%s 0x%04x.\n", | ||||
| 				      msg, addr); | ||||
| 		netdev_notice(priv->ndev, "%s 0x%04x.\n", msg, addr); | ||||
| 	} else { | ||||
| 		/* Re-occurring error? */ | ||||
| 		if (ecc->ecc_stat == ecc_stat) { | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Thomas Kopp
						Thomas Kopp