Commit bac9bd95 authored by Olof Johansson's avatar Olof Johansson

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.orgSigned-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 21a8fa6b dd85345a
...@@ -32,8 +32,9 @@ config ARM_PL172_MPMC ...@@ -32,8 +32,9 @@ config ARM_PL172_MPMC
config ATMEL_SDRAMC config ATMEL_SDRAMC
bool "Atmel (Multi-port DDR-)SDRAM Controller" bool "Atmel (Multi-port DDR-)SDRAM Controller"
default y default y if ARCH_AT91
depends on ARCH_AT91 && OF depends on ARCH_AT91 || COMPILE_TEST
depends on OF
help help
This driver is for Atmel SDRAM Controller or Atmel Multi-port This driver is for Atmel SDRAM Controller or Atmel Multi-port
DDR-SDRAM Controller available on Atmel AT91SAM9 and SAMA5 SoCs. DDR-SDRAM Controller available on Atmel AT91SAM9 and SAMA5 SoCs.
...@@ -42,8 +43,9 @@ config ATMEL_SDRAMC ...@@ -42,8 +43,9 @@ config ATMEL_SDRAMC
config ATMEL_EBI config ATMEL_EBI
bool "Atmel EBI driver" bool "Atmel EBI driver"
default y default y if ARCH_AT91
depends on ARCH_AT91 && OF depends on ARCH_AT91 || COMPILE_TEST
depends on OF
select MFD_SYSCON select MFD_SYSCON
select MFD_ATMEL_SMC select MFD_ATMEL_SMC
help help
...@@ -52,6 +54,18 @@ config ATMEL_EBI ...@@ -52,6 +54,18 @@ config ATMEL_EBI
tree is used. This bus supports NANDs, external ethernet controller, tree is used. This bus supports NANDs, external ethernet controller,
SRAMs, ATA devices, etc. 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 config BT1_L2_CTL
bool "Baikal-T1 CM2 L2-RAM Cache Control Block" bool "Baikal-T1 CM2 L2-RAM Cache Control Block"
depends on MIPS_BAIKAL_T1 || COMPILE_TEST depends on MIPS_BAIKAL_T1 || COMPILE_TEST
...@@ -65,7 +79,8 @@ config BT1_L2_CTL ...@@ -65,7 +79,8 @@ config BT1_L2_CTL
config TI_AEMIF config TI_AEMIF
tristate "Texas Instruments AEMIF driver" tristate "Texas Instruments AEMIF driver"
depends on (ARCH_DAVINCI || ARCH_KEYSTONE) && OF depends on ARCH_DAVINCI || ARCH_KEYSTONE || COMPILE_TEST
depends on OF
help help
This driver is for the AEMIF module available in Texas Instruments This driver is for the AEMIF module available in Texas Instruments
SoCs. AEMIF stands for Asynchronous External Memory Interface and SoCs. AEMIF stands for Asynchronous External Memory Interface and
...@@ -76,7 +91,7 @@ config TI_AEMIF ...@@ -76,7 +91,7 @@ config TI_AEMIF
config TI_EMIF config TI_EMIF
tristate "Texas Instruments EMIF driver" tristate "Texas Instruments EMIF driver"
depends on ARCH_OMAP2PLUS depends on ARCH_OMAP2PLUS || COMPILE_TEST
select DDR select DDR
help help
This driver is for the EMIF module available in Texas Instruments This driver is for the EMIF module available in Texas Instruments
...@@ -88,7 +103,7 @@ config TI_EMIF ...@@ -88,7 +103,7 @@ config TI_EMIF
temperature changes temperature changes
config OMAP_GPMC config OMAP_GPMC
bool bool "Texas Instruments OMAP SoC GPMC driver" if COMPILE_TEST
select GPIOLIB select GPIOLIB
help help
This driver is for the General Purpose Memory Controller (GPMC) This driver is for the General Purpose Memory Controller (GPMC)
...@@ -112,7 +127,8 @@ config OMAP_GPMC_DEBUG ...@@ -112,7 +127,8 @@ config OMAP_GPMC_DEBUG
config TI_EMIF_SRAM config TI_EMIF_SRAM
tristate "Texas Instruments EMIF SRAM driver" 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 help
This driver is for the EMIF module available on Texas Instruments This driver is for the EMIF module available on Texas Instruments
AM33XX and AM43XX SoCs and is required for PM. Certain parts of AM33XX and AM43XX SoCs and is required for PM. Certain parts of
...@@ -122,8 +138,9 @@ config TI_EMIF_SRAM ...@@ -122,8 +138,9 @@ config TI_EMIF_SRAM
config MVEBU_DEVBUS config MVEBU_DEVBUS
bool "Marvell EBU Device Bus Controller" bool "Marvell EBU Device Bus Controller"
default y default y if PLAT_ORION
depends on PLAT_ORION && OF depends on PLAT_ORION || COMPILE_TEST
depends on OF
help help
This driver is for the Device Bus controller available in some This driver is for the Device Bus controller available in some
Marvell EBU SoCs such as Discovery (mv78xx0), Orion (88f5xxx) and Marvell EBU SoCs such as Discovery (mv78xx0), Orion (88f5xxx) and
...@@ -132,7 +149,7 @@ config MVEBU_DEVBUS ...@@ -132,7 +149,7 @@ config MVEBU_DEVBUS
config FSL_CORENET_CF config FSL_CORENET_CF
tristate "Freescale CoreNet Error Reporting" tristate "Freescale CoreNet Error Reporting"
depends on FSL_SOC_BOOKE depends on FSL_SOC_BOOKE || COMPILE_TEST
help help
Say Y for reporting of errors from the Freescale CoreNet Say Y for reporting of errors from the Freescale CoreNet
Coherency Fabric. Errors reported include accesses to Coherency Fabric. Errors reported include accesses to
...@@ -141,7 +158,7 @@ config FSL_CORENET_CF ...@@ -141,7 +158,7 @@ config FSL_CORENET_CF
represents a coherency violation. represents a coherency violation.
config FSL_IFC config FSL_IFC
bool bool "Freescale IFC driver" if COMPILE_TEST
depends on FSL_SOC || ARCH_LAYERSCAPE || SOC_LS1021A || COMPILE_TEST depends on FSL_SOC || ARCH_LAYERSCAPE || SOC_LS1021A || COMPILE_TEST
depends on HAS_IOMEM depends on HAS_IOMEM
...@@ -155,7 +172,7 @@ config JZ4780_NEMC ...@@ -155,7 +172,7 @@ config JZ4780_NEMC
memory devices such as NAND and SRAM. memory devices such as NAND and SRAM.
config MTK_SMI config MTK_SMI
bool bool "Mediatek SoC Memory Controller driver" if COMPILE_TEST
depends on ARCH_MEDIATEK || COMPILE_TEST depends on ARCH_MEDIATEK || COMPILE_TEST
help help
This driver is for the Memory Controller module in MediaTek SoCs, This driver is for the Memory Controller module in MediaTek SoCs,
...@@ -164,7 +181,7 @@ config MTK_SMI ...@@ -164,7 +181,7 @@ config MTK_SMI
config DA8XX_DDRCTL config DA8XX_DDRCTL
bool "Texas Instruments da8xx DDR2/mDDR driver" bool "Texas Instruments da8xx DDR2/mDDR driver"
depends on ARCH_DAVINCI_DA8XX depends on ARCH_DAVINCI_DA8XX || COMPILE_TEST
help help
This driver is for the DDR2/mDDR Memory Controller present on This driver is for the DDR2/mDDR Memory Controller present on
Texas Instruments da8xx SoCs. It's used to tweak various memory Texas Instruments da8xx SoCs. It's used to tweak various memory
...@@ -172,16 +189,16 @@ config DA8XX_DDRCTL ...@@ -172,16 +189,16 @@ config DA8XX_DDRCTL
config PL353_SMC config PL353_SMC
tristate "ARM PL35X Static Memory Controller(SMC) driver" tristate "ARM PL35X Static Memory Controller(SMC) driver"
default y default y if ARM
depends on ARM depends on ARM
depends on ARM_AMBA depends on ARM_AMBA || COMPILE_TEST
help help
This driver is for the ARM PL351/PL353 Static Memory This driver is for the ARM PL351/PL353 Static Memory
Controller(SMC) module. Controller(SMC) module.
config RENESAS_RPCIF config RENESAS_RPCIF
tristate "Renesas RPC-IF driver" tristate "Renesas RPC-IF driver"
depends on ARCH_RENESAS depends on ARCH_RENESAS || COMPILE_TEST
select REGMAP_MMIO select REGMAP_MMIO
help help
This supports Renesas R-Car Gen3 RPC-IF which provides either SPI This supports Renesas R-Car Gen3 RPC-IF which provides either SPI
......
...@@ -10,7 +10,7 @@ endif ...@@ -10,7 +10,7 @@ endif
obj-$(CONFIG_ARM_PL172_MPMC) += pl172.o obj-$(CONFIG_ARM_PL172_MPMC) += pl172.o
obj-$(CONFIG_ATMEL_SDRAMC) += atmel-sdramc.o obj-$(CONFIG_ATMEL_SDRAMC) += atmel-sdramc.o
obj-$(CONFIG_ATMEL_EBI) += atmel-ebi.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_BT1_L2_CTL) += bt1-l2-ctl.o
obj-$(CONFIG_TI_AEMIF) += ti-aemif.o obj-$(CONFIG_TI_AEMIF) += ti-aemif.o
obj-$(CONFIG_TI_EMIF) += emif.o obj-$(CONFIG_TI_EMIF) += emif.o
......
...@@ -188,11 +188,6 @@ struct brcmstb_dpfe_priv { ...@@ -188,11 +188,6 @@ struct brcmstb_dpfe_priv {
struct mutex lock; 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 * Forward declaration of our sysfs attribute functions, so we can declare the
* attribute data structures early. * attribute data structures early.
...@@ -307,6 +302,20 @@ static const struct dpfe_api dpfe_api_v3 = { ...@@ -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) static bool is_dcpu_enabled(struct brcmstb_dpfe_priv *priv)
{ {
u32 val; u32 val;
...@@ -445,7 +454,7 @@ static int __send_command(struct brcmstb_dpfe_priv *priv, unsigned int cmd, ...@@ -445,7 +454,7 @@ static int __send_command(struct brcmstb_dpfe_priv *priv, unsigned int cmd,
} }
if (resp != 0) { if (resp != 0) {
mutex_unlock(&priv->lock); mutex_unlock(&priv->lock);
return -ETIMEDOUT; return -ffs(DCPU_RET_ERR_TIMEDOUT);
} }
/* Compute checksum over the message */ /* Compute checksum over the message */
...@@ -647,8 +656,10 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv) ...@@ -647,8 +656,10 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv)
return (ret == -ENOENT) ? -EPROBE_DEFER : ret; return (ret == -ENOENT) ? -EPROBE_DEFER : ret;
ret = __verify_firmware(&init, fw); ret = __verify_firmware(&init, fw);
if (ret) if (ret) {
return -EFAULT; ret = -EFAULT;
goto release_fw;
}
__disable_dcpu(priv); __disable_dcpu(priv);
...@@ -667,18 +678,20 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *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); ret = __write_firmware(priv->dmem, dmem, dmem_size, is_big_endian);
if (ret) if (ret)
return ret; goto release_fw;
ret = __write_firmware(priv->imem, imem, imem_size, is_big_endian); ret = __write_firmware(priv->imem, imem, imem_size, is_big_endian);
if (ret) if (ret)
return ret; goto release_fw;
ret = __verify_fw_checksum(&init, priv, header, init.chksum); ret = __verify_fw_checksum(&init, priv, header, init.chksum);
if (ret) if (ret)
return ret; goto release_fw;
__enable_dcpu(priv); __enable_dcpu(priv);
return 0; release_fw:
release_firmware(fw);
return ret;
} }
static ssize_t generic_show(unsigned int command, u32 response[], static ssize_t generic_show(unsigned int command, u32 response[],
...@@ -691,7 +704,7 @@ 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); ret = __send_command(priv, command, response);
if (ret < 0) if (ret < 0)
return sprintf(buf, "ERROR: %s\n", error_text[-ret]); return sprintf(buf, "ERROR: %s\n", get_error_text(-ret));
return 0; return 0;
} }
...@@ -888,11 +901,8 @@ static int brcmstb_dpfe_probe(struct platform_device *pdev) ...@@ -888,11 +901,8 @@ static int brcmstb_dpfe_probe(struct platform_device *pdev)
} }
ret = brcmstb_dpfe_download_firmware(priv); ret = brcmstb_dpfe_download_firmware(priv);
if (ret) { if (ret)
if (ret != -EPROBE_DEFER) return dev_err_probe(dev, ret, "Couldn't download firmware\n");
dev_err(dev, "Couldn't download firmware -- %d\n", ret);
return ret;
}
ret = sysfs_create_groups(&pdev->dev.kobj, priv->dpfe_api->sysfs_attrs); ret = sysfs_create_groups(&pdev->dev.kobj, priv->dpfe_api->sysfs_attrs);
if (!ret) if (!ret)
......
...@@ -163,35 +163,12 @@ static const struct file_operations emif_mr4_fops = { ...@@ -163,35 +163,12 @@ static const struct file_operations emif_mr4_fops = {
static int __init_or_module emif_debugfs_init(struct emif_data *emif) static int __init_or_module emif_debugfs_init(struct emif_data *emif)
{ {
struct dentry *dentry; emif->debugfs_root = debugfs_create_dir(dev_name(emif->dev), NULL);
int ret; debugfs_create_file("regcache_dump", S_IRUGO, emif->debugfs_root, emif,
&emif_regdump_fops);
dentry = debugfs_create_dir(dev_name(emif->dev), NULL); debugfs_create_file("mr4", S_IRUGO, emif->debugfs_root, emif,
if (!dentry) { &emif_mr4_fops);
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;
}
return 0; return 0;
err1:
debugfs_remove_recursive(emif->debugfs_root);
err0:
return ret;
} }
static void __exit emif_debugfs_exit(struct emif_data *emif) static void __exit emif_debugfs_exit(struct emif_data *emif)
......
...@@ -211,10 +211,8 @@ static int ccf_probe(struct platform_device *pdev) ...@@ -211,10 +211,8 @@ static int ccf_probe(struct platform_device *pdev)
dev_set_drvdata(&pdev->dev, ccf); dev_set_drvdata(&pdev->dev, ccf);
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
if (!irq) { if (irq < 0)
dev_err(&pdev->dev, "%s: no irq\n", __func__); return irq;
return -ENXIO;
}
ret = devm_request_irq(&pdev->dev, irq, ccf_irq, 0, pdev->name, ccf); ret = devm_request_irq(&pdev->dev, irq, ccf_irq, 0, pdev->name, ccf);
if (ret) { if (ret) {
......
This diff is collapsed.
...@@ -199,10 +199,8 @@ int rpcif_sw_init(struct rpcif *rpc, struct device *dev) ...@@ -199,10 +199,8 @@ int rpcif_sw_init(struct rpcif *rpc, struct device *dev)
rpc->dirmap = NULL; rpc->dirmap = NULL;
rpc->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL); rpc->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
if (IS_ERR(rpc->rstc))
return PTR_ERR(rpc->rstc);
return 0; return PTR_ERR_OR_ZERO(rpc->rstc);
} }
EXPORT_SYMBOL(rpcif_sw_init); EXPORT_SYMBOL(rpcif_sw_init);
......
This diff is collapsed.
...@@ -957,7 +957,6 @@ static const struct tegra_smmu_swgroup tegra124_swgroups[] = { ...@@ -957,7 +957,6 @@ static const struct tegra_smmu_swgroup tegra124_swgroups[] = {
static const unsigned int tegra124_group_drm[] = { static const unsigned int tegra124_group_drm[] = {
TEGRA_SWGROUP_DC, TEGRA_SWGROUP_DC,
TEGRA_SWGROUP_DCB, TEGRA_SWGROUP_DCB,
TEGRA_SWGROUP_GPU,
TEGRA_SWGROUP_VIC, TEGRA_SWGROUP_VIC,
}; };
......
...@@ -172,14 +172,8 @@ static int tegra186_emc_probe(struct platform_device *pdev) ...@@ -172,14 +172,8 @@ static int tegra186_emc_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
emc->bpmp = tegra_bpmp_get(&pdev->dev); emc->bpmp = tegra_bpmp_get(&pdev->dev);
if (IS_ERR(emc->bpmp)) { if (IS_ERR(emc->bpmp))
err = PTR_ERR(emc->bpmp); return dev_err_probe(&pdev->dev, PTR_ERR(emc->bpmp), "failed to get BPMP\n");
if (err != -EPROBE_DEFER)
dev_err(&pdev->dev, "failed to get BPMP: %d\n", err);
return err;
}
emc->clk = devm_clk_get(&pdev->dev, "emc"); emc->clk = devm_clk_get(&pdev->dev, "emc");
if (IS_ERR(emc->clk)) { if (IS_ERR(emc->clk)) {
......
...@@ -1044,7 +1044,7 @@ static void tegra210_emc_r21021_set_clock(struct tegra210_emc *emc, u32 clksrc) ...@@ -1044,7 +1044,7 @@ static void tegra210_emc_r21021_set_clock(struct tegra210_emc *emc, u32 clksrc)
!opt_cc_short_zcal && opt_short_zcal) { !opt_cc_short_zcal && opt_short_zcal) {
value = (value & ~(EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK << value = (value & ~(EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK <<
EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT)) | EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT)) |
((zq_wait_long & EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK) << ((zq_wait_long & EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK) <<
EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT); EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT);
} else if (offset == EMC_ZCAL_INTERVAL && opt_zcal_en_cc) { } else if (offset == EMC_ZCAL_INTERVAL && opt_zcal_en_cc) {
value = 0; /* EMC_ZCAL_INTERVAL reset value. */ value = 0; /* EMC_ZCAL_INTERVAL reset value. */
......
...@@ -842,7 +842,7 @@ static const struct tegra_mc_client tegra210_mc_clients[] = { ...@@ -842,7 +842,7 @@ static const struct tegra_mc_client tegra210_mc_clients[] = {
}, },
.la = { .la = {
.reg = 0x3dc, .reg = 0x3dc,
.shift = 0, .shift = 16,
.mask = 0xff, .mask = 0xff,
.def = 0x80, .def = 0x80,
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment