mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handling by returning an error code. However the value returned is ignored (apart from emitting a warning) and this typically results in resource leaks. To improve here there is a quest to make the remove callback return void. In the first step of this quest all drivers are converted to .remove_new(), which already returns void. Eventually after all drivers are converted, .remove_new() will be renamed to .remove(). fsl_mc_err_remove() is used as callback in two drivers. So these have to be converted together to the void returning remove callback. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20231013100422.1382040-2-u.kleine-koenig@pengutronix.de
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
						|
/*
 | 
						|
 * Freescale Memory Controller kernel module
 | 
						|
 *
 | 
						|
 * Support  Power-based SoCs including MPC85xx, MPC86xx, MPC83xx and
 | 
						|
 * ARM-based Layerscape SoCs including LS2xxx and LS1021A. Originally
 | 
						|
 * split out from mpc85xx_edac EDAC driver.
 | 
						|
 *
 | 
						|
 * Author: Dave Jiang <djiang@mvista.com>
 | 
						|
 *
 | 
						|
 * 2006-2007 (c) MontaVista Software, Inc.
 | 
						|
 */
 | 
						|
#ifndef _FSL_DDR_EDAC_H_
 | 
						|
#define _FSL_DDR_EDAC_H_
 | 
						|
 | 
						|
#define fsl_mc_printk(mci, level, fmt, arg...) \
 | 
						|
	edac_mc_chipset_printk(mci, level, "FSL_DDR", fmt, ##arg)
 | 
						|
 | 
						|
/*
 | 
						|
 * DRAM error defines
 | 
						|
 */
 | 
						|
 | 
						|
/* DDR_SDRAM_CFG */
 | 
						|
#define FSL_MC_DDR_SDRAM_CFG	0x0110
 | 
						|
#define FSL_MC_CS_BNDS_0		0x0000
 | 
						|
#define FSL_MC_CS_BNDS_OFS		0x0008
 | 
						|
 | 
						|
#define FSL_MC_DATA_ERR_INJECT_HI	0x0e00
 | 
						|
#define FSL_MC_DATA_ERR_INJECT_LO	0x0e04
 | 
						|
#define FSL_MC_ECC_ERR_INJECT	0x0e08
 | 
						|
#define FSL_MC_CAPTURE_DATA_HI	0x0e20
 | 
						|
#define FSL_MC_CAPTURE_DATA_LO	0x0e24
 | 
						|
#define FSL_MC_CAPTURE_ECC		0x0e28
 | 
						|
#define FSL_MC_ERR_DETECT		0x0e40
 | 
						|
#define FSL_MC_ERR_DISABLE		0x0e44
 | 
						|
#define FSL_MC_ERR_INT_EN		0x0e48
 | 
						|
#define FSL_MC_CAPTURE_ATRIBUTES	0x0e4c
 | 
						|
#define FSL_MC_CAPTURE_ADDRESS	0x0e50
 | 
						|
#define FSL_MC_CAPTURE_EXT_ADDRESS	0x0e54
 | 
						|
#define FSL_MC_ERR_SBE		0x0e58
 | 
						|
 | 
						|
#define DSC_MEM_EN	0x80000000
 | 
						|
#define DSC_ECC_EN	0x20000000
 | 
						|
#define DSC_RD_EN	0x10000000
 | 
						|
#define DSC_DBW_MASK	0x00180000
 | 
						|
#define DSC_DBW_32	0x00080000
 | 
						|
#define DSC_DBW_64	0x00000000
 | 
						|
 | 
						|
#define DSC_SDTYPE_MASK		0x07000000
 | 
						|
#define DSC_X32_EN	0x00000020
 | 
						|
 | 
						|
/* Err_Int_En */
 | 
						|
#define DDR_EIE_MSEE	0x1	/* memory select */
 | 
						|
#define DDR_EIE_SBEE	0x4	/* single-bit ECC error */
 | 
						|
#define DDR_EIE_MBEE	0x8	/* multi-bit ECC error */
 | 
						|
 | 
						|
/* Err_Detect */
 | 
						|
#define DDR_EDE_MSE		0x1	/* memory select */
 | 
						|
#define DDR_EDE_SBE		0x4	/* single-bit ECC error */
 | 
						|
#define DDR_EDE_MBE		0x8	/* multi-bit ECC error */
 | 
						|
#define DDR_EDE_MME		0x80000000	/* multiple memory errors */
 | 
						|
 | 
						|
/* Err_Disable */
 | 
						|
#define DDR_EDI_MSED	0x1	/* memory select disable */
 | 
						|
#define	DDR_EDI_SBED	0x4	/* single-bit ECC error disable */
 | 
						|
#define	DDR_EDI_MBED	0x8	/* multi-bit ECC error disable */
 | 
						|
 | 
						|
struct fsl_mc_pdata {
 | 
						|
	char *name;
 | 
						|
	int edac_idx;
 | 
						|
	void __iomem *mc_vbase;
 | 
						|
	int irq;
 | 
						|
};
 | 
						|
int fsl_mc_err_probe(struct platform_device *op);
 | 
						|
void fsl_mc_err_remove(struct platform_device *op);
 | 
						|
#endif
 |