soc/tegra: fuse: Register cell lookups for compatibility
Typically nvmem cells would be stored in device tree. However, for compatibility with device trees that don't contain nvmem cell definitions, register lookups for cells currently used by consumers. This allows the consumers to use the same API to query cells from the device tree or using the legacy mechanism. Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
parent
f4619c7f68
commit
9f94fadd75
@ -423,6 +423,15 @@ static int __init tegra_init_fuse(void)
|
||||
pr_debug("Tegra CPU Speedo ID %d, SoC Speedo ID %d\n",
|
||||
tegra_sku_info.cpu_speedo_id, tegra_sku_info.soc_speedo_id);
|
||||
|
||||
if (fuse->soc->lookups) {
|
||||
size_t size = sizeof(*fuse->lookups) * fuse->soc->num_lookups;
|
||||
|
||||
fuse->lookups = kmemdup(fuse->soc->lookups, size, GFP_KERNEL);
|
||||
if (!fuse->lookups)
|
||||
return -ENOMEM;
|
||||
|
||||
nvmem_add_cell_lookups(fuse->lookups, fuse->soc->num_lookups);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/nvmem-consumer.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/platform_device.h>
|
||||
@ -127,6 +128,70 @@ const struct tegra_fuse_soc tegra114_fuse_soc = {
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC)
|
||||
static const struct nvmem_cell_lookup tegra124_fuse_lookups[] = {
|
||||
{
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "xusb-pad-calibration",
|
||||
.dev_id = "7009f000.padctl",
|
||||
.con_id = "calibration",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "sata-calibration",
|
||||
.dev_id = "70020000.sata",
|
||||
.con_id = "calibration",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-common",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "common",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-realignment",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "realignment",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu0",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu0",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu1",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu1",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu2",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu2",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu3",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu3",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-mem0",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "mem0",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-mem1",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "mem1",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-gpu",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "gpu",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-pllx",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "pllx",
|
||||
},
|
||||
};
|
||||
|
||||
static const struct tegra_fuse_info tegra124_fuse_info = {
|
||||
.read = tegra30_fuse_read,
|
||||
.size = 0x300,
|
||||
@ -137,10 +202,81 @@ const struct tegra_fuse_soc tegra124_fuse_soc = {
|
||||
.init = tegra30_fuse_init,
|
||||
.speedo_init = tegra124_init_speedo_data,
|
||||
.info = &tegra124_fuse_info,
|
||||
.lookups = tegra124_fuse_lookups,
|
||||
.num_lookups = ARRAY_SIZE(tegra124_fuse_lookups),
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_TEGRA_210_SOC)
|
||||
static const struct nvmem_cell_lookup tegra210_fuse_lookups[] = {
|
||||
{
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu1",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu1",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu2",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu2",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu0",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu0",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "xusb-pad-calibration",
|
||||
.dev_id = "7009f000.padctl",
|
||||
.con_id = "calibration",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-cpu3",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "cpu3",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "sata-calibration",
|
||||
.dev_id = "70020000.sata",
|
||||
.con_id = "calibration",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-gpu",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "gpu",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-mem0",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "mem0",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-mem1",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "mem1",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-pllx",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "pllx",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "tsensor-common",
|
||||
.dev_id = "700e2000.thermal-sensor",
|
||||
.con_id = "common",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "gpu-calibration",
|
||||
.dev_id = "57000000.gpu",
|
||||
.con_id = "calibration",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "xusb-pad-calibration-ext",
|
||||
.dev_id = "7009f000.padctl",
|
||||
.con_id = "calibration-ext",
|
||||
},
|
||||
};
|
||||
|
||||
static const struct tegra_fuse_info tegra210_fuse_info = {
|
||||
.read = tegra30_fuse_read,
|
||||
.size = 0x300,
|
||||
@ -151,10 +287,26 @@ const struct tegra_fuse_soc tegra210_fuse_soc = {
|
||||
.init = tegra30_fuse_init,
|
||||
.speedo_init = tegra210_init_speedo_data,
|
||||
.info = &tegra210_fuse_info,
|
||||
.lookups = tegra210_fuse_lookups,
|
||||
.num_lookups = ARRAY_SIZE(tegra210_fuse_lookups),
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_TEGRA_186_SOC)
|
||||
static const struct nvmem_cell_lookup tegra186_fuse_lookups[] = {
|
||||
{
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "xusb-pad-calibration",
|
||||
.dev_id = "3520000.padctl",
|
||||
.con_id = "calibration",
|
||||
}, {
|
||||
.nvmem_name = "fuse",
|
||||
.cell_name = "xusb-pad-calibration-ext",
|
||||
.dev_id = "3520000.padctl",
|
||||
.con_id = "calibration-ext",
|
||||
},
|
||||
};
|
||||
|
||||
static const struct tegra_fuse_info tegra186_fuse_info = {
|
||||
.read = tegra30_fuse_read,
|
||||
.size = 0x300,
|
||||
@ -164,5 +316,7 @@ static const struct tegra_fuse_info tegra186_fuse_info = {
|
||||
const struct tegra_fuse_soc tegra186_fuse_soc = {
|
||||
.init = tegra30_fuse_init,
|
||||
.info = &tegra186_fuse_info,
|
||||
.lookups = tegra186_fuse_lookups,
|
||||
.num_lookups = ARRAY_SIZE(tegra186_fuse_lookups),
|
||||
};
|
||||
#endif
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct nvmem_cell_lookup;
|
||||
struct nvmem_device;
|
||||
struct tegra_fuse;
|
||||
|
||||
@ -28,6 +29,9 @@ struct tegra_fuse_soc {
|
||||
int (*probe)(struct tegra_fuse *fuse);
|
||||
|
||||
const struct tegra_fuse_info *info;
|
||||
|
||||
const struct nvmem_cell_lookup *lookups;
|
||||
unsigned int num_lookups;
|
||||
};
|
||||
|
||||
struct tegra_fuse {
|
||||
@ -51,6 +55,7 @@ struct tegra_fuse {
|
||||
} apbdma;
|
||||
|
||||
struct nvmem_device *nvmem;
|
||||
struct nvmem_cell_lookup *lookups;
|
||||
};
|
||||
|
||||
void tegra_init_revision(void);
|
||||
|
Loading…
Reference in New Issue
Block a user