mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
![Uwe Kleine-König](/assets/img/avatar_default.png)
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
77 lines
2.2 KiB
C
77 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
|