Commit bac9bd95 authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'memory-controller-drv-5.10' of...

Merge tag 'memory-controller-drv-5.10' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl into arm/drivers

Memory controller drivers for v5.10

1. Fixes in several drivers for GCC warnings, including kerneldoc fixes
   and issues discovered while compile testing.
2. Enable compile testing of most of the drivers.
3. Use dev_err_probe() to simplify the code.
4. omap-gpmc: fix off by one errors, code cleanups and improvements.
5. tegra: remove the GPU from DRM IOMMU group so it would use its own;
   few minor fixes.
6. brcmstb_dpfe: fix memory leak and array index out of bounds.

* tag 'memory-controller-drv-5.10' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl: (26 commits)
  memory: fsl-corenet-cf: Fix handling of platform_get_irq() error
  memory: omap-gpmc: Fix -Wunused-function warnings
  memory: tegra: Remove GPU from DRM IOMMU group
  memory: tegra186-emc: Simplify with dev_err_probe()
  memory: brcmstb_dpfe: Simplify with dev_err_probe()
  memory: samsung: exynos5422-dmc: add missing and fix kerneldoc
  memory: samsung: exynos5422-dmc: remove unused exynos5_dmc members
  memory: samsung: exynos5422-dmc: rename timing register fields variables
  memory: emif: Remove bogus debugfs error handling
  memory: omap-gpmc: Fix build error without CONFIG_OF
  memory: omap-gpmc: Fix a couple off by ones
  memory: brcmstb_dpfe: fix array index out of bounds
  memory: brcmstb_dpfe: Fix memory leak
  memory: tegra: Correct shift value of apew
  memory: Enable compile testing for most of the drivers
  memory: brcmstb_dpfe: add separate entry for compile test
  memory: tegra: tegra210-emc: fix indentation
  memory: renesas-rpc-if: simplify with PTR_ERR_OR_ZERO
  memory: omap-gpmc: consistently use !res for NULL checks
  memory: omap-gpmc: use WARN() instead of BUG() on wrong free
  ...

Link: https://lore.kernel.org/r/20200907150611.11267-1-krzk@kernel.org


Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 21a8fa6b dd85345a
Loading
Loading
Loading
Loading
+34 −17
Original line number Diff line number Diff line
@@ -32,8 +32,9 @@ config ARM_PL172_MPMC

config ATMEL_SDRAMC
	bool "Atmel (Multi-port DDR-)SDRAM Controller"
	default y
	depends on ARCH_AT91 && OF
	default y if ARCH_AT91
	depends on ARCH_AT91 || COMPILE_TEST
	depends on OF
	help
	  This driver is for Atmel SDRAM Controller or Atmel Multi-port
	  DDR-SDRAM Controller available on Atmel AT91SAM9 and SAMA5 SoCs.
@@ -42,8 +43,9 @@ config ATMEL_SDRAMC

config ATMEL_EBI
	bool "Atmel EBI driver"
	default y
	depends on ARCH_AT91 && OF
	default y if ARCH_AT91
	depends on ARCH_AT91 || COMPILE_TEST
	depends on OF
	select MFD_SYSCON
	select MFD_ATMEL_SMC
	help
@@ -52,6 +54,18 @@ config ATMEL_EBI
	  tree is used. This bus supports NANDs, external ethernet controller,
	  SRAMs, ATA devices, etc.

config BRCMSTB_DPFE
	bool "Broadcom STB DPFE driver" if COMPILE_TEST
	default y if ARCH_BRCMSTB
	depends on ARCH_BRCMSTB || COMPILE_TEST
	help
	  This driver provides access to the DPFE interface of Broadcom
	  STB SoCs. The firmware running on the DCPU inside the DDR PHY can
	  provide current information about the system's RAM, for instance
	  the DRAM refresh rate. This can be used as an indirect indicator
	  for the DRAM's temperature. Slower refresh rate means cooler RAM,
	  higher refresh rate means hotter RAM.

config BT1_L2_CTL
	bool "Baikal-T1 CM2 L2-RAM Cache Control Block"
	depends on MIPS_BAIKAL_T1 || COMPILE_TEST
@@ -65,7 +79,8 @@ config BT1_L2_CTL

config TI_AEMIF
	tristate "Texas Instruments AEMIF driver"
	depends on (ARCH_DAVINCI || ARCH_KEYSTONE) && OF
	depends on ARCH_DAVINCI || ARCH_KEYSTONE || COMPILE_TEST
	depends on OF
	help
	  This driver is for the AEMIF module available in Texas Instruments
	  SoCs. AEMIF stands for Asynchronous External Memory Interface and
@@ -76,7 +91,7 @@ config TI_AEMIF

config TI_EMIF
	tristate "Texas Instruments EMIF driver"
	depends on ARCH_OMAP2PLUS
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	select DDR
	help
	  This driver is for the EMIF module available in Texas Instruments
@@ -88,7 +103,7 @@ config TI_EMIF
	  temperature changes

config OMAP_GPMC
	bool
	bool "Texas Instruments OMAP SoC GPMC driver" if COMPILE_TEST
	select GPIOLIB
	help
	  This driver is for the General Purpose Memory Controller (GPMC)
@@ -112,7 +127,8 @@ config OMAP_GPMC_DEBUG

config TI_EMIF_SRAM
	tristate "Texas Instruments EMIF SRAM driver"
	depends on (SOC_AM33XX || SOC_AM43XX) && SRAM
	depends on SOC_AM33XX || SOC_AM43XX || (ARM && COMPILE_TEST)
	depends on SRAM
	help
	  This driver is for the EMIF module available on Texas Instruments
	  AM33XX and AM43XX SoCs and is required for PM. Certain parts of
@@ -122,8 +138,9 @@ config TI_EMIF_SRAM

config MVEBU_DEVBUS
	bool "Marvell EBU Device Bus Controller"
	default y
	depends on PLAT_ORION && OF
	default y if PLAT_ORION
	depends on PLAT_ORION || COMPILE_TEST
	depends on OF
	help
	  This driver is for the Device Bus controller available in some
	  Marvell EBU SoCs such as Discovery (mv78xx0), Orion (88f5xxx) and
@@ -132,7 +149,7 @@ config MVEBU_DEVBUS

config FSL_CORENET_CF
	tristate "Freescale CoreNet Error Reporting"
	depends on FSL_SOC_BOOKE
	depends on FSL_SOC_BOOKE || COMPILE_TEST
	help
	  Say Y for reporting of errors from the Freescale CoreNet
	  Coherency Fabric.  Errors reported include accesses to
@@ -141,7 +158,7 @@ config FSL_CORENET_CF
	  represents a coherency violation.

config FSL_IFC
	bool
	bool "Freescale IFC driver" if COMPILE_TEST
	depends on FSL_SOC || ARCH_LAYERSCAPE || SOC_LS1021A || COMPILE_TEST
	depends on HAS_IOMEM

@@ -155,7 +172,7 @@ config JZ4780_NEMC
	  memory devices such as NAND and SRAM.

config MTK_SMI
	bool
	bool "Mediatek SoC Memory Controller driver" if COMPILE_TEST
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  This driver is for the Memory Controller module in MediaTek SoCs,
@@ -164,7 +181,7 @@ config MTK_SMI

config DA8XX_DDRCTL
	bool "Texas Instruments da8xx DDR2/mDDR driver"
	depends on ARCH_DAVINCI_DA8XX
	depends on ARCH_DAVINCI_DA8XX || COMPILE_TEST
	help
	  This driver is for the DDR2/mDDR Memory Controller present on
	  Texas Instruments da8xx SoCs. It's used to tweak various memory
@@ -172,16 +189,16 @@ config DA8XX_DDRCTL

config PL353_SMC
	tristate "ARM PL35X Static Memory Controller(SMC) driver"
	default y
	default y if ARM
	depends on ARM
	depends on ARM_AMBA
	depends on ARM_AMBA || COMPILE_TEST
	help
	  This driver is for the ARM PL351/PL353 Static Memory
	  Controller(SMC) module.

config RENESAS_RPCIF
	tristate "Renesas RPC-IF driver"
	depends on ARCH_RENESAS
	depends on ARCH_RENESAS || COMPILE_TEST
	select REGMAP_MMIO
	help
	  This supports Renesas R-Car Gen3 RPC-IF which provides either SPI
+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ endif
obj-$(CONFIG_ARM_PL172_MPMC)	+= pl172.o
obj-$(CONFIG_ATMEL_SDRAMC)	+= atmel-sdramc.o
obj-$(CONFIG_ATMEL_EBI)		+= atmel-ebi.o
obj-$(CONFIG_ARCH_BRCMSTB)	+= brcmstb_dpfe.o
obj-$(CONFIG_BRCMSTB_DPFE)	+= brcmstb_dpfe.o
obj-$(CONFIG_BT1_L2_CTL)	+= bt1-l2-ctl.o
obj-$(CONFIG_TI_AEMIF)		+= ti-aemif.o
obj-$(CONFIG_TI_EMIF)		+= emif.o
+28 −18
Original line number Diff line number Diff line
@@ -188,11 +188,6 @@ struct brcmstb_dpfe_priv {
	struct mutex lock;
};

static const char * const error_text[] = {
	"Success", "Header code incorrect", "Unknown command or argument",
	"Incorrect checksum", "Malformed command", "Timed out",
};

/*
 * Forward declaration of our sysfs attribute functions, so we can declare the
 * attribute data structures early.
@@ -307,6 +302,20 @@ static const struct dpfe_api dpfe_api_v3 = {
	},
};

static const char *get_error_text(unsigned int i)
{
	static const char * const error_text[] = {
		"Success", "Header code incorrect",
		"Unknown command or argument", "Incorrect checksum",
		"Malformed command", "Timed out", "Unknown error",
	};

	if (unlikely(i >= ARRAY_SIZE(error_text)))
		i = ARRAY_SIZE(error_text) - 1;

	return error_text[i];
}

static bool is_dcpu_enabled(struct brcmstb_dpfe_priv *priv)
{
	u32 val;
@@ -445,7 +454,7 @@ static int __send_command(struct brcmstb_dpfe_priv *priv, unsigned int cmd,
	}
	if (resp != 0) {
		mutex_unlock(&priv->lock);
		return -ETIMEDOUT;
		return -ffs(DCPU_RET_ERR_TIMEDOUT);
	}

	/* Compute checksum over the message */
@@ -647,8 +656,10 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv)
		return (ret == -ENOENT) ? -EPROBE_DEFER : ret;

	ret = __verify_firmware(&init, fw);
	if (ret)
		return -EFAULT;
	if (ret) {
		ret = -EFAULT;
		goto release_fw;
	}

	__disable_dcpu(priv);

@@ -667,18 +678,20 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv)

	ret = __write_firmware(priv->dmem, dmem, dmem_size, is_big_endian);
	if (ret)
		return ret;
		goto release_fw;
	ret = __write_firmware(priv->imem, imem, imem_size, is_big_endian);
	if (ret)
		return ret;
		goto release_fw;

	ret = __verify_fw_checksum(&init, priv, header, init.chksum);
	if (ret)
		return ret;
		goto release_fw;

	__enable_dcpu(priv);

	return 0;
release_fw:
	release_firmware(fw);
	return ret;
}

static ssize_t generic_show(unsigned int command, u32 response[],
@@ -691,7 +704,7 @@ static ssize_t generic_show(unsigned int command, u32 response[],

	ret = __send_command(priv, command, response);
	if (ret < 0)
		return sprintf(buf, "ERROR: %s\n", error_text[-ret]);
		return sprintf(buf, "ERROR: %s\n", get_error_text(-ret));

	return 0;
}
@@ -888,11 +901,8 @@ static int brcmstb_dpfe_probe(struct platform_device *pdev)
	}

	ret = brcmstb_dpfe_download_firmware(priv);
	if (ret) {
		if (ret != -EPROBE_DEFER)
			dev_err(dev, "Couldn't download firmware -- %d\n", ret);
		return ret;
	}
	if (ret)
		return dev_err_probe(dev, ret, "Couldn't download firmware\n");

	ret = sysfs_create_groups(&pdev->dev.kobj, priv->dpfe_api->sysfs_attrs);
	if (!ret)
+5 −28
Original line number Diff line number Diff line
@@ -163,35 +163,12 @@ static const struct file_operations emif_mr4_fops = {

static int __init_or_module emif_debugfs_init(struct emif_data *emif)
{
	struct dentry	*dentry;
	int		ret;

	dentry = debugfs_create_dir(dev_name(emif->dev), NULL);
	if (!dentry) {
		ret = -ENOMEM;
		goto err0;
	}
	emif->debugfs_root = dentry;

	dentry = debugfs_create_file("regcache_dump", S_IRUGO,
			emif->debugfs_root, emif, &emif_regdump_fops);
	if (!dentry) {
		ret = -ENOMEM;
		goto err1;
	}

	dentry = debugfs_create_file("mr4", S_IRUGO,
			emif->debugfs_root, emif, &emif_mr4_fops);
	if (!dentry) {
		ret = -ENOMEM;
		goto err1;
	}

	emif->debugfs_root = debugfs_create_dir(dev_name(emif->dev), NULL);
	debugfs_create_file("regcache_dump", S_IRUGO, emif->debugfs_root, emif,
			    &emif_regdump_fops);
	debugfs_create_file("mr4", S_IRUGO, emif->debugfs_root, emif,
			    &emif_mr4_fops);
	return 0;
err1:
	debugfs_remove_recursive(emif->debugfs_root);
err0:
	return ret;
}

static void __exit emif_debugfs_exit(struct emif_data *emif)
+2 −4
Original line number Diff line number Diff line
@@ -211,10 +211,8 @@ static int ccf_probe(struct platform_device *pdev)
	dev_set_drvdata(&pdev->dev, ccf);

	irq = platform_get_irq(pdev, 0);
	if (!irq) {
		dev_err(&pdev->dev, "%s: no irq\n", __func__);
		return -ENXIO;
	}
	if (irq < 0)
		return irq;

	ret = devm_request_irq(&pdev->dev, irq, ccf_irq, 0, pdev->name, ccf);
	if (ret) {
Loading