Memory controller drivers for v6.5
1. Renesas RPC IF: correct the Strobe Timing Adjustment. 2. Broadcom DPFE: fix smatch warning for testing array offset after use. 3. Atmel SDRAMC: drop driver because it was just a wrapper over enabling clock which is not handled by its clock controller. 4. Minor bindings cleanup. -----BEGIN PGP SIGNATURE----- iQJEBAABCgAuFiEE3dJiKD0RGyM7briowTdm5oaLg9cFAmSHW7MQHGtyemtAa2Vy bmVsLm9yZwAKCRDBN2bmhouD12azD/0b7k0T02IRlfIQLPfzJAVT85ax0SJNFZrV 3SmGu1EJMK7n8vBQJh4Jos7ImqI6zoSdK66d7QjsdI7sUTf1yuM78YWAyuvaUcnM kln2X5GM6HQo65g8WgwmIVvfV1Ty3kLl2eiBYYuBd5Mf6qwPz2AZ7QrFVzCL3fg3 FI+JqyVWUaRHNPgPFHTND+M6TK2n6r+t0/FYxQuN6vj96fN3W3jx79Owjf6lSB6x LWS5BFC5yRqXBKXWeTC8Llp8Q6vYhy7qwjuVxV9ERVJSA/R6NhjiLZQX8tB/NKRH JyZEFjnL/fKVQrti25GZIkyD/w4wjsEECHeTwMtzORhOedkW5fpoiVQQP5xzPBie Wkjdd0xPC7t4HxPxyFGDUrnllNbdAqNTRLpBPLiOvfoe/FBYNHp6AjDCh33feNMD lbON+2E4j0KY0nrLTsZuID+h0dtaAYTSVubrTQiCoRoVT8vANy57eyCaet6feqyK HFK+V8QN18X4jG5Me5SkrMOcihZWV2qZK/uTBe17EsJPsz4r0C/jlSy4HCcgl57e 0KuFpZUu2Y87Ssx7PFBCF144U+A6aWz0S+PbWD+rcK4WGEGn4c/514PtFa7KfLg2 U+KvadDIYBXZ+T95bAjqY75Ci4kqWpIAwP/J3Qcfb5URD/ZYkaxi+EsOkZvZoEsE f+zZ/ahUYg== =Q7+J -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmSUaeoACgkQYKtH/8kJ UifUvw/8Cb6UG88BJeQG3PS4B1ZiJ5Dd35u26o80ReUmFTLCcUUgUDHjXHHUbW+9 B/oooX6cOB6U3eiW5HVpWcq+5jOz2NhrPiQqXx49M5D80jvA1WgNUYeI9tma8F/m ThMCWc1O0xTHzN4N1TtUdOg52Wh17Ynww8pLBTissxYqurhzuMIVtve72dpSaKsC E891yZ3yz0S/tK1FjfP7Hgixlyc0Pbwg5F2JESPYXDPIpefaA5oLQC+5nV870MxJ B32MWjQpSveUHgchFDPOuC9y7GMbzQCB580WezNtAns9rn1zn1hCVfmBXYt0tt6l XW46+nd+a1G5T+0Z6KQxr86a/5ckkPxEEIfTcPCznonYFZTwxa2No4w16dmBARYW SCsQ9JKI8pYve6k7/hk20lWFakn/A+VshbIjuR/MI/jLUNMrR4q6NXuRlcyO2WbK MYvopJd6oHsfSDxqGHiH5QuAXyOngdd7CZdKYCIHPatrh2cTPgeGmX1e6eYeHJmv ByO2vsaR/ijnXdsrq+mzL+oaAy6rGGFOYWKuNFov6MI+SnP7ijW9hAOwpGxnY8rz Odh7Mbe7VoiHlWLfKCgCcjudHCFnG9ctVmNw6h2pPmY+guFnBp8+6dtlR/icENlI h/nNoOLIt1zachOXOMbQFXDs2e0z7i1YLaz+2+OH7AR10s54EsY= =stpo -----END PGP SIGNATURE----- Merge tag 'memory-controller-drv-6.5' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl into soc/drivers Memory controller drivers for v6.5 1. Renesas RPC IF: correct the Strobe Timing Adjustment. 2. Broadcom DPFE: fix smatch warning for testing array offset after use. 3. Atmel SDRAMC: drop driver because it was just a wrapper over enabling clock which is not handled by its clock controller. 4. Minor bindings cleanup. * tag 'memory-controller-drv-6.5' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl: dt-bindings: memory-controllers: drop unneeded quotes memory: atmel-sdramc: remove the driver memory: brcmstb_dpfe: fix testing array offset after use memory: renesas-rpc-if: Fix PHYCNT.STRTIM setting Link: https://lore.kernel.org/r/20230612175508.288775-1-krzysztof.kozlowski@linaro.org Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Коммит
57cf6633f3
|
@ -165,7 +165,7 @@ patternProperties:
|
|||
const: 0
|
||||
|
||||
lpddr2:
|
||||
$ref: "ddr/jedec,lpddr2.yaml#"
|
||||
$ref: ddr/jedec,lpddr2.yaml#
|
||||
type: object
|
||||
|
||||
patternProperties:
|
||||
|
|
|
@ -129,7 +129,7 @@ patternProperties:
|
|||
The child device node represents the device connected to the GPMC
|
||||
bus. The device can be a NAND chip, SRAM device, NOR device
|
||||
or an ASIC.
|
||||
$ref: "ti,gpmc-child.yaml"
|
||||
$ref: ti,gpmc-child.yaml
|
||||
|
||||
|
||||
required:
|
||||
|
|
|
@ -97,7 +97,6 @@ config SOC_AT91SAM9
|
|||
depends on ARCH_MULTI_V5
|
||||
select ATMEL_AIC_IRQ
|
||||
select ATMEL_PM if PM
|
||||
select ATMEL_SDRAMC
|
||||
select CPU_ARM926T
|
||||
select HAVE_AT91_SMD
|
||||
select HAVE_AT91_USB_CLK
|
||||
|
@ -131,7 +130,6 @@ config SOC_SAM9X60
|
|||
depends on ARCH_MULTI_V5
|
||||
select ATMEL_AIC5_IRQ
|
||||
select ATMEL_PM if PM
|
||||
select ATMEL_SDRAMC
|
||||
select CPU_ARM926T
|
||||
select HAVE_AT91_USB_CLK
|
||||
select HAVE_AT91_GENERATED_CLK
|
||||
|
@ -213,7 +211,6 @@ config SOC_SAMA5
|
|||
bool
|
||||
select ATMEL_AIC5_IRQ
|
||||
select ATMEL_PM if PM
|
||||
select ATMEL_SDRAMC
|
||||
select MEMORY
|
||||
select SOC_SAM_V7
|
||||
select SRAM if PM
|
||||
|
@ -234,7 +231,6 @@ config SOC_SAMA7
|
|||
bool
|
||||
select ARM_GIC
|
||||
select ATMEL_PM if PM
|
||||
select ATMEL_SDRAMC
|
||||
select MEMORY
|
||||
select SOC_SAM_V7
|
||||
select SRAM if PM
|
||||
|
|
|
@ -30,17 +30,6 @@ config ARM_PL172_MPMC
|
|||
If you have an embedded system with an AMBA bus and a PL172
|
||||
controller, say Y or M here.
|
||||
|
||||
config ATMEL_SDRAMC
|
||||
bool "Atmel (Multi-port DDR-)SDRAM Controller"
|
||||
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.
|
||||
Starting with the at91sam9g45, this controller supports SDR, DDR and
|
||||
LP-DDR memories.
|
||||
|
||||
config ATMEL_EBI
|
||||
bool "Atmel EBI driver"
|
||||
default y if ARCH_AT91
|
||||
|
|
|
@ -8,7 +8,6 @@ ifeq ($(CONFIG_DDR),y)
|
|||
obj-$(CONFIG_OF) += of_memory.o
|
||||
endif
|
||||
obj-$(CONFIG_ARM_PL172_MPMC) += pl172.o
|
||||
obj-$(CONFIG_ATMEL_SDRAMC) += atmel-sdramc.o
|
||||
obj-$(CONFIG_ATMEL_EBI) += atmel-ebi.o
|
||||
obj-$(CONFIG_BRCMSTB_DPFE) += brcmstb_dpfe.o
|
||||
obj-$(CONFIG_BRCMSTB_MEMC) += brcmstb_memc.o
|
||||
|
|
|
@ -1,74 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Atmel (Multi-port DDR-)SDRAM Controller driver
|
||||
*
|
||||
* Author: Alexandre Belloni <alexandre.belloni@free-electrons.com>
|
||||
*
|
||||
* Copyright (C) 2014 Atmel
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
struct at91_ramc_caps {
|
||||
bool has_ddrck;
|
||||
bool has_mpddr_clk;
|
||||
};
|
||||
|
||||
static const struct at91_ramc_caps at91rm9200_caps = { };
|
||||
|
||||
static const struct at91_ramc_caps at91sam9g45_caps = {
|
||||
.has_ddrck = 1,
|
||||
.has_mpddr_clk = 0,
|
||||
};
|
||||
|
||||
static const struct at91_ramc_caps sama5d3_caps = {
|
||||
.has_ddrck = 1,
|
||||
.has_mpddr_clk = 1,
|
||||
};
|
||||
|
||||
static const struct of_device_id atmel_ramc_of_match[] = {
|
||||
{ .compatible = "atmel,at91rm9200-sdramc", .data = &at91rm9200_caps, },
|
||||
{ .compatible = "atmel,at91sam9260-sdramc", .data = &at91rm9200_caps, },
|
||||
{ .compatible = "atmel,at91sam9g45-ddramc", .data = &at91sam9g45_caps, },
|
||||
{ .compatible = "atmel,sama5d3-ddramc", .data = &sama5d3_caps, },
|
||||
{},
|
||||
};
|
||||
|
||||
static int atmel_ramc_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct at91_ramc_caps *caps;
|
||||
struct clk *clk;
|
||||
|
||||
caps = of_device_get_match_data(&pdev->dev);
|
||||
|
||||
if (caps->has_ddrck) {
|
||||
clk = devm_clk_get_enabled(&pdev->dev, "ddrck");
|
||||
if (IS_ERR(clk))
|
||||
return PTR_ERR(clk);
|
||||
}
|
||||
|
||||
if (caps->has_mpddr_clk) {
|
||||
clk = devm_clk_get_enabled(&pdev->dev, "mpddr");
|
||||
if (IS_ERR(clk)) {
|
||||
pr_err("AT91 RAMC: couldn't get mpddr clock\n");
|
||||
return PTR_ERR(clk);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver atmel_ramc_driver = {
|
||||
.probe = atmel_ramc_probe,
|
||||
.driver = {
|
||||
.name = "atmel-ramc",
|
||||
.of_match_table = atmel_ramc_of_match,
|
||||
},
|
||||
};
|
||||
|
||||
builtin_platform_driver(atmel_ramc_driver);
|
|
@ -434,15 +434,17 @@ static void __finalize_command(struct brcmstb_dpfe_priv *priv)
|
|||
static int __send_command(struct brcmstb_dpfe_priv *priv, unsigned int cmd,
|
||||
u32 result[])
|
||||
{
|
||||
const u32 *msg = priv->dpfe_api->command[cmd];
|
||||
void __iomem *regs = priv->regs;
|
||||
unsigned int i, chksum, chksum_idx;
|
||||
const u32 *msg;
|
||||
int ret = 0;
|
||||
u32 resp;
|
||||
|
||||
if (cmd >= DPFE_CMD_MAX)
|
||||
return -1;
|
||||
|
||||
msg = priv->dpfe_api->command[cmd];
|
||||
|
||||
mutex_lock(&priv->lock);
|
||||
|
||||
/* Wait for DCPU to become ready */
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
* Copyright (C) 2019-2020 Cogent Embedded, Inc.
|
||||
*/
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -163,6 +164,11 @@ static const struct regmap_access_table rpcif_volatile_table = {
|
|||
.n_yes_ranges = ARRAY_SIZE(rpcif_volatile_ranges),
|
||||
};
|
||||
|
||||
struct rpcif_info {
|
||||
enum rpcif_type type;
|
||||
u8 strtim;
|
||||
};
|
||||
|
||||
struct rpcif_priv {
|
||||
struct device *dev;
|
||||
void __iomem *base;
|
||||
|
@ -171,7 +177,7 @@ struct rpcif_priv {
|
|||
struct reset_control *rstc;
|
||||
struct platform_device *vdev;
|
||||
size_t size;
|
||||
enum rpcif_type type;
|
||||
const struct rpcif_info *info;
|
||||
enum rpcif_data_dir dir;
|
||||
u8 bus_size;
|
||||
u8 xfer_size;
|
||||
|
@ -186,6 +192,26 @@ struct rpcif_priv {
|
|||
u32 ddr; /* DRDRENR or SMDRENR */
|
||||
};
|
||||
|
||||
static const struct rpcif_info rpcif_info_r8a7796 = {
|
||||
.type = RPCIF_RCAR_GEN3,
|
||||
.strtim = 6,
|
||||
};
|
||||
|
||||
static const struct rpcif_info rpcif_info_gen3 = {
|
||||
.type = RPCIF_RCAR_GEN3,
|
||||
.strtim = 7,
|
||||
};
|
||||
|
||||
static const struct rpcif_info rpcif_info_rz_g2l = {
|
||||
.type = RPCIF_RZ_G2L,
|
||||
.strtim = 7,
|
||||
};
|
||||
|
||||
static const struct rpcif_info rpcif_info_gen4 = {
|
||||
.type = RPCIF_RCAR_GEN4,
|
||||
.strtim = 15,
|
||||
};
|
||||
|
||||
/*
|
||||
* Custom accessor functions to ensure SM[RW]DR[01] are always accessed with
|
||||
* proper width. Requires rpcif_priv.xfer_size to be correctly set before!
|
||||
|
@ -310,7 +336,7 @@ int rpcif_hw_init(struct device *dev, bool hyperflash)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (rpc->type == RPCIF_RZ_G2L) {
|
||||
if (rpc->info->type == RPCIF_RZ_G2L) {
|
||||
ret = reset_control_reset(rpc->rstc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -324,12 +350,10 @@ int rpcif_hw_init(struct device *dev, bool hyperflash)
|
|||
/* DMA Transfer is not supported */
|
||||
regmap_update_bits(rpc->regmap, RPCIF_PHYCNT, RPCIF_PHYCNT_HS, 0);
|
||||
|
||||
if (rpc->type == RPCIF_RCAR_GEN3)
|
||||
regmap_update_bits(rpc->regmap, RPCIF_PHYCNT,
|
||||
RPCIF_PHYCNT_STRTIM(7), RPCIF_PHYCNT_STRTIM(7));
|
||||
else if (rpc->type == RPCIF_RCAR_GEN4)
|
||||
regmap_update_bits(rpc->regmap, RPCIF_PHYCNT,
|
||||
RPCIF_PHYCNT_STRTIM(15), RPCIF_PHYCNT_STRTIM(15));
|
||||
regmap_update_bits(rpc->regmap, RPCIF_PHYCNT,
|
||||
/* create mask with all affected bits set */
|
||||
RPCIF_PHYCNT_STRTIM(BIT(fls(rpc->info->strtim)) - 1),
|
||||
RPCIF_PHYCNT_STRTIM(rpc->info->strtim));
|
||||
|
||||
regmap_update_bits(rpc->regmap, RPCIF_PHYOFFSET1, RPCIF_PHYOFFSET1_DDRTMG(3),
|
||||
RPCIF_PHYOFFSET1_DDRTMG(3));
|
||||
|
@ -340,7 +364,7 @@ int rpcif_hw_init(struct device *dev, bool hyperflash)
|
|||
regmap_update_bits(rpc->regmap, RPCIF_PHYINT,
|
||||
RPCIF_PHYINT_WPVAL, 0);
|
||||
|
||||
if (rpc->type == RPCIF_RZ_G2L)
|
||||
if (rpc->info->type == RPCIF_RZ_G2L)
|
||||
regmap_update_bits(rpc->regmap, RPCIF_CMNCR,
|
||||
RPCIF_CMNCR_MOIIO(3) | RPCIF_CMNCR_IOFV(3) |
|
||||
RPCIF_CMNCR_BSZ(3),
|
||||
|
@ -729,9 +753,9 @@ static int rpcif_probe(struct platform_device *pdev)
|
|||
rpc->dirmap = devm_ioremap_resource(dev, res);
|
||||
if (IS_ERR(rpc->dirmap))
|
||||
return PTR_ERR(rpc->dirmap);
|
||||
rpc->size = resource_size(res);
|
||||
|
||||
rpc->type = (uintptr_t)of_device_get_match_data(dev);
|
||||
rpc->size = resource_size(res);
|
||||
rpc->info = of_device_get_match_data(dev);
|
||||
rpc->rstc = devm_reset_control_get_exclusive(dev, NULL);
|
||||
if (IS_ERR(rpc->rstc))
|
||||
return PTR_ERR(rpc->rstc);
|
||||
|
@ -764,9 +788,10 @@ static int rpcif_remove(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
static const struct of_device_id rpcif_of_match[] = {
|
||||
{ .compatible = "renesas,rcar-gen3-rpc-if", .data = (void *)RPCIF_RCAR_GEN3 },
|
||||
{ .compatible = "renesas,rcar-gen4-rpc-if", .data = (void *)RPCIF_RCAR_GEN4 },
|
||||
{ .compatible = "renesas,rzg2l-rpc-if", .data = (void *)RPCIF_RZ_G2L },
|
||||
{ .compatible = "renesas,r8a7796-rpc-if", .data = &rpcif_info_r8a7796 },
|
||||
{ .compatible = "renesas,rcar-gen3-rpc-if", .data = &rpcif_info_gen3 },
|
||||
{ .compatible = "renesas,rcar-gen4-rpc-if", .data = &rpcif_info_gen4 },
|
||||
{ .compatible = "renesas,rzg2l-rpc-if", .data = &rpcif_info_rz_g2l },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, rpcif_of_match);
|
||||
|
|
Загрузка…
Ссылка в новой задаче