lkml.org 
[lkml]   [2021]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 3/6] memory: tegra: Add Tegra234 support
    Date
    From: Thierry Reding <treding@nvidia.com>

    The memory controller and external memory controller found on Tegra234
    is similar to the version found on earlier SoCs but supports a number of
    new memory clients.

    Add initial memory client definitions for the Tegra234 so that the SMMU
    stream ID override registers can be properly programmed at boot time.

    Signed-off-by: Thierry Reding <treding@nvidia.com>
    ---
    drivers/memory/tegra/Makefile | 1 +
    drivers/memory/tegra/mc.c | 3 ++
    drivers/memory/tegra/mc.h | 7 ++-
    drivers/memory/tegra/tegra186-emc.c | 3 ++
    drivers/memory/tegra/tegra234.c | 81 +++++++++++++++++++++++++++++
    5 files changed, 94 insertions(+), 1 deletion(-)
    create mode 100644 drivers/memory/tegra/tegra234.c

    diff --git a/drivers/memory/tegra/Makefile b/drivers/memory/tegra/Makefile
    index c992e87782d2..1df0b43e40b1 100644
    --- a/drivers/memory/tegra/Makefile
    +++ b/drivers/memory/tegra/Makefile
    @@ -9,6 +9,7 @@ tegra-mc-$(CONFIG_ARCH_TEGRA_132_SOC) += tegra124.o
    tegra-mc-$(CONFIG_ARCH_TEGRA_210_SOC) += tegra210.o
    tegra-mc-$(CONFIG_ARCH_TEGRA_186_SOC) += tegra186.o
    tegra-mc-$(CONFIG_ARCH_TEGRA_194_SOC) += tegra186.o tegra194.o
    +tegra-mc-$(CONFIG_ARCH_TEGRA_194_SOC) += tegra186.o tegra234.o

    obj-$(CONFIG_TEGRA_MC) += tegra-mc.o

    diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c
    index 44b4a4080920..bf3abb6d8354 100644
    --- a/drivers/memory/tegra/mc.c
    +++ b/drivers/memory/tegra/mc.c
    @@ -44,6 +44,9 @@ static const struct of_device_id tegra_mc_of_match[] = {
    #endif
    #ifdef CONFIG_ARCH_TEGRA_194_SOC
    { .compatible = "nvidia,tegra194-mc", .data = &tegra194_mc_soc },
    +#endif
    +#ifdef CONFIG_ARCH_TEGRA_234_SOC
    + { .compatible = "nvidia,tegra234-mc", .data = &tegra234_mc_soc },
    #endif
    { /* sentinel */ }
    };
    diff --git a/drivers/memory/tegra/mc.h b/drivers/memory/tegra/mc.h
    index 1e492989c363..062886e94c04 100644
    --- a/drivers/memory/tegra/mc.h
    +++ b/drivers/memory/tegra/mc.h
    @@ -137,6 +137,10 @@ extern const struct tegra_mc_soc tegra186_mc_soc;
    extern const struct tegra_mc_soc tegra194_mc_soc;
    #endif

    +#ifdef CONFIG_ARCH_TEGRA_234_SOC
    +extern const struct tegra_mc_soc tegra234_mc_soc;
    +#endif
    +
    #if defined(CONFIG_ARCH_TEGRA_3x_SOC) || \
    defined(CONFIG_ARCH_TEGRA_114_SOC) || \
    defined(CONFIG_ARCH_TEGRA_124_SOC) || \
    @@ -147,7 +151,8 @@ extern const struct tegra_mc_ops tegra30_mc_ops;
    #endif

    #if defined(CONFIG_ARCH_TEGRA_186_SOC) || \
    - defined(CONFIG_ARCH_TEGRA_194_SOC)
    + defined(CONFIG_ARCH_TEGRA_194_SOC) || \
    + defined(CONFIG_ARCH_TEGRA_234_SOC)
    extern const struct tegra_mc_ops tegra186_mc_ops;
    #endif

    diff --git a/drivers/memory/tegra/tegra186-emc.c b/drivers/memory/tegra/tegra186-emc.c
    index 746c4ef2c0af..54b47ca33483 100644
    --- a/drivers/memory/tegra/tegra186-emc.c
    +++ b/drivers/memory/tegra/tegra186-emc.c
    @@ -272,6 +272,9 @@ static const struct of_device_id tegra186_emc_of_match[] = {
    #endif
    #if defined(CONFIG_ARCH_TEGRA_194_SOC)
    { .compatible = "nvidia,tegra194-emc" },
    +#endif
    +#if defined(CONFIG_ARCH_TEGRA_234_SOC)
    + { .compatible = "nvidia,tegra234-emc" },
    #endif
    { /* sentinel */ }
    };
    diff --git a/drivers/memory/tegra/tegra234.c b/drivers/memory/tegra/tegra234.c
    new file mode 100644
    index 000000000000..45efc5139960
    --- /dev/null
    +++ b/drivers/memory/tegra/tegra234.c
    @@ -0,0 +1,81 @@
    +// SPDX-License-Identifier: GPL-2.0-only
    +/*
    + * Copyright (C) 2021 NVIDIA CORPORATION. All rights reserved.
    + */
    +
    +#include <soc/tegra/mc.h>
    +
    +#include <dt-bindings/memory/tegra234-mc.h>
    +
    +#include "mc.h"
    +
    +static const struct tegra_mc_client tegra234_mc_clients[] = {
    + {
    + .id = TEGRA234_MEMORY_CLIENT_SDMMCRAB,
    + .name = "sdmmcrab",
    + .sid = TEGRA234_SID_SDMMC4,
    + .regs = {
    + .sid = {
    + .override = 0x318,
    + .security = 0x31c,
    + },
    + },
    + }, {
    + .id = TEGRA234_MEMORY_CLIENT_SDMMCWAB,
    + .name = "sdmmcwab",
    + .sid = TEGRA234_SID_SDMMC4,
    + .regs = {
    + .sid = {
    + .override = 0x338,
    + .security = 0x33c,
    + },
    + },
    + }, {
    + .id = TEGRA234_MEMORY_CLIENT_BPMPR,
    + .name = "bpmpr",
    + .sid = TEGRA234_SID_BPMP,
    + .regs = {
    + .sid = {
    + .override = 0x498,
    + .security = 0x49c,
    + },
    + },
    + }, {
    + .id = TEGRA234_MEMORY_CLIENT_BPMPW,
    + .name = "bpmpw",
    + .sid = TEGRA234_SID_BPMP,
    + .regs = {
    + .sid = {
    + .override = 0x4a0,
    + .security = 0x4a4,
    + },
    + },
    + }, {
    + .id = TEGRA234_MEMORY_CLIENT_BPMPDMAR,
    + .name = "bpmpdmar",
    + .sid = TEGRA234_SID_BPMP,
    + .regs = {
    + .sid = {
    + .override = 0x4a8,
    + .security = 0x4ac,
    + },
    + },
    + }, {
    + .id = TEGRA234_MEMORY_CLIENT_BPMPDMAW,
    + .name = "bpmpdmaw",
    + .sid = TEGRA234_SID_BPMP,
    + .regs = {
    + .sid = {
    + .override = 0x4b0,
    + .security = 0x4b4,
    + },
    + },
    + },
    +};
    +
    +const struct tegra_mc_soc tegra234_mc_soc = {
    + .num_clients = ARRAY_SIZE(tegra234_mc_clients),
    + .clients = tegra234_mc_clients,
    + .num_address_bits = 40,
    + .ops = &tegra186_mc_ops,
    +};
    --
    2.34.1
    \
     
     \ /
      Last update: 2021-12-10 17:48    [W:2.171 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site