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

Memory controller drivers for v6.18

1. STM32 OMM: Fix ineffective/missing setting of the req2ack in the
   device based on DT property, if the value is different than 0.

2. Samsung Exynos SROM: Fix IO map resource leak if
   of_platform_populate() in probe() failed.

3. Broadcom brcmstb: Document existing, older devices in Devicetree
   bindings.

4. Tegra 210 EMC: Document OPP table for interconnects (driver usage
   will come later) and define memory client IDs as bindings, because
   these are shared between DTS and driver.

* tag 'memory-controller-drv-6.18' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl:
  memory: tegra210: Use bindings for client ids
  dt-bindings: memory: tegra210: Add memory client IDs
  dt-bindings: memory: tegra210: emc: Document OPP table and interconnect
  dt-bindings: memory: Update brcmstb-memc-ddr binding with older chips
  memory: samsung: exynos-srom: Fix of_iomap leak in exynos_srom_probe
  memory: stm32_omm: Fix req2ack update test

Link: https://lore.kernel.org/r/20250912140030.204650-2-krzysztof.kozlowski@linaro.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann
2025-09-23 23:07:34 +02:00
6 changed files with 167 additions and 80 deletions
@@ -42,6 +42,10 @@ properties:
items:
- const: brcm,brcmstb-memc-ddr-rev-b.1.x
- const: brcm,brcmstb-memc-ddr
- description: Revision 0.x controllers
items:
- const: brcm,brcmstb-memc-ddr-rev-a.0.0
- const: brcm,brcmstb-memc-ddr
reg:
maxItems: 1
@@ -33,6 +33,9 @@ properties:
items:
- description: EMC general interrupt
"#interconnect-cells":
const: 0
memory-region:
maxItems: 1
description:
@@ -44,6 +47,11 @@ properties:
description:
phandle of the memory controller node
operating-points-v2:
description:
Should contain freqs and voltages and opp-supported-hw property, which
is a bitfield indicating SoC speedo ID mask.
required:
- compatible
- reg
@@ -79,4 +87,7 @@ examples:
interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
memory-region = <&emc_table>;
nvidia,memory-controller = <&mc>;
operating-points-v2 = <&dvfs_opp_table>;
#interconnect-cells = <0>;
};
+4 -6
View File
@@ -121,20 +121,18 @@ static int exynos_srom_probe(struct platform_device *pdev)
return -ENOMEM;
srom->dev = dev;
srom->reg_base = of_iomap(np, 0);
if (!srom->reg_base) {
srom->reg_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(srom->reg_base)) {
dev_err(&pdev->dev, "iomap of exynos srom controller failed\n");
return -ENOMEM;
return PTR_ERR(srom->reg_base);
}
platform_set_drvdata(pdev, srom);
srom->reg_offset = exynos_srom_alloc_reg_dump(exynos_srom_offsets,
ARRAY_SIZE(exynos_srom_offsets));
if (!srom->reg_offset) {
iounmap(srom->reg_base);
if (!srom->reg_offset)
return -ENOMEM;
}
for_each_child_of_node(np, child) {
if (exynos_srom_configure_bank(srom, child)) {
+1 -1
View File
@@ -238,7 +238,7 @@ static int stm32_omm_configure(struct device *dev)
if (mux & CR_MUXEN) {
ret = of_property_read_u32(dev->of_node, "st,omm-req2ack-ns",
&req2ack);
if (!ret && !req2ack) {
if (!ret && req2ack) {
req2ack = DIV_ROUND_UP(req2ack, NSEC_PER_SEC / clk_rate_max) - 1;
if (req2ack > 256)
File diff suppressed because it is too large Load Diff
+74
View File
@@ -75,4 +75,78 @@
#define TEGRA210_MC_RESET_ETR 28
#define TEGRA210_MC_RESET_TSECB 29
#define TEGRA210_MC_PTCR 0
#define TEGRA210_MC_DISPLAY0A 1
#define TEGRA210_MC_DISPLAY0AB 2
#define TEGRA210_MC_DISPLAY0B 3
#define TEGRA210_MC_DISPLAY0BB 4
#define TEGRA210_MC_DISPLAY0C 5
#define TEGRA210_MC_DISPLAY0CB 6
#define TEGRA210_MC_AFIR 14
#define TEGRA210_MC_AVPCARM7R 15
#define TEGRA210_MC_DISPLAYHC 16
#define TEGRA210_MC_DISPLAYHCB 17
#define TEGRA210_MC_HDAR 21
#define TEGRA210_MC_HOST1XDMAR 22
#define TEGRA210_MC_HOST1XR 23
#define TEGRA210_MC_NVENCSRD 28
#define TEGRA210_MC_PPCSAHBDMAR 29
#define TEGRA210_MC_PPCSAHBSLVR 30
#define TEGRA210_MC_SATAR 31
#define TEGRA210_MC_MPCORER 39
#define TEGRA210_MC_NVENCSWR 43
#define TEGRA210_MC_AFIW 49
#define TEGRA210_MC_AVPCARM7W 50
#define TEGRA210_MC_HDAW 53
#define TEGRA210_MC_HOST1XW 54
#define TEGRA210_MC_MPCOREW 57
#define TEGRA210_MC_PPCSAHBDMAW 59
#define TEGRA210_MC_PPCSAHBSLVW 60
#define TEGRA210_MC_SATAW 61
#define TEGRA210_MC_ISPRA 68
#define TEGRA210_MC_ISPWA 70
#define TEGRA210_MC_ISPWB 71
#define TEGRA210_MC_XUSB_HOSTR 74
#define TEGRA210_MC_XUSB_HOSTW 75
#define TEGRA210_MC_XUSB_DEVR 76
#define TEGRA210_MC_XUSB_DEVW 77
#define TEGRA210_MC_ISPRAB 78
#define TEGRA210_MC_ISPWAB 80
#define TEGRA210_MC_ISPWBB 81
#define TEGRA210_MC_TSECSRD 84
#define TEGRA210_MC_TSECSWR 85
#define TEGRA210_MC_A9AVPSCR 86
#define TEGRA210_MC_A9AVPSCW 87
#define TEGRA210_MC_GPUSRD 88
#define TEGRA210_MC_GPUSWR 89
#define TEGRA210_MC_DISPLAYT 90
#define TEGRA210_MC_SDMMCRA 96
#define TEGRA210_MC_SDMMCRAA 97
#define TEGRA210_MC_SDMMCR 98
#define TEGRA210_MC_SDMMCRAB 99
#define TEGRA210_MC_SDMMCWA 100
#define TEGRA210_MC_SDMMCWAA 101
#define TEGRA210_MC_SDMMCW 102
#define TEGRA210_MC_SDMMCWAB 103
#define TEGRA210_MC_VICSRD 108
#define TEGRA210_MC_VICSWR 109
#define TEGRA210_MC_VIW 114
#define TEGRA210_MC_DISPLAYD 115
#define TEGRA210_MC_NVDECSRD 120
#define TEGRA210_MC_NVDECSWR 121
#define TEGRA210_MC_APER 122
#define TEGRA210_MC_APEW 123
#define TEGRA210_MC_NVJPGRD 126
#define TEGRA210_MC_NVJPGWR 127
#define TEGRA210_MC_SESRD 128
#define TEGRA210_MC_SESWR 129
#define TEGRA210_MC_AXIAPR 130
#define TEGRA210_MC_AXIAPW 131
#define TEGRA210_MC_ETRR 132
#define TEGRA210_MC_ETRW 133
#define TEGRA210_MC_TSECSRDB 134
#define TEGRA210_MC_TSECSWRB 135
#define TEGRA210_MC_GPUSRD2 136
#define TEGRA210_MC_GPUSWR2 137
#endif