162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2012-2023, NVIDIA CORPORATION.  All rights reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __SOC_TEGRA_FUSE_H__
762306a36Sopenharmony_ci#define __SOC_TEGRA_FUSE_H__
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/types.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define TEGRA20		0x20
1262306a36Sopenharmony_ci#define TEGRA30		0x30
1362306a36Sopenharmony_ci#define TEGRA114	0x35
1462306a36Sopenharmony_ci#define TEGRA124	0x40
1562306a36Sopenharmony_ci#define TEGRA132	0x13
1662306a36Sopenharmony_ci#define TEGRA210	0x21
1762306a36Sopenharmony_ci#define TEGRA186	0x18
1862306a36Sopenharmony_ci#define TEGRA194	0x19
1962306a36Sopenharmony_ci#define TEGRA234	0x23
2062306a36Sopenharmony_ci#define TEGRA264	0x26
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define TEGRA_FUSE_SKU_CALIB_0	0xf0
2362306a36Sopenharmony_ci#define TEGRA30_FUSE_SATA_CALIB	0x124
2462306a36Sopenharmony_ci#define TEGRA_FUSE_USB_CALIB_EXT_0 0x250
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#ifndef __ASSEMBLY__
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cienum tegra_revision {
2962306a36Sopenharmony_ci	TEGRA_REVISION_UNKNOWN = 0,
3062306a36Sopenharmony_ci	TEGRA_REVISION_A01,
3162306a36Sopenharmony_ci	TEGRA_REVISION_A02,
3262306a36Sopenharmony_ci	TEGRA_REVISION_A03,
3362306a36Sopenharmony_ci	TEGRA_REVISION_A03p,
3462306a36Sopenharmony_ci	TEGRA_REVISION_A04,
3562306a36Sopenharmony_ci	TEGRA_REVISION_MAX,
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cienum tegra_platform {
3962306a36Sopenharmony_ci	TEGRA_PLATFORM_SILICON = 0,
4062306a36Sopenharmony_ci	TEGRA_PLATFORM_QT,
4162306a36Sopenharmony_ci	TEGRA_PLATFORM_SYSTEM_FPGA,
4262306a36Sopenharmony_ci	TEGRA_PLATFORM_UNIT_FPGA,
4362306a36Sopenharmony_ci	TEGRA_PLATFORM_ASIM_QT,
4462306a36Sopenharmony_ci	TEGRA_PLATFORM_ASIM_LINSIM,
4562306a36Sopenharmony_ci	TEGRA_PLATFORM_DSIM_ASIM_LINSIM,
4662306a36Sopenharmony_ci	TEGRA_PLATFORM_VERIFICATION_SIMULATION,
4762306a36Sopenharmony_ci	TEGRA_PLATFORM_VDK,
4862306a36Sopenharmony_ci	TEGRA_PLATFORM_VSP,
4962306a36Sopenharmony_ci	TEGRA_PLATFORM_MAX,
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistruct tegra_sku_info {
5362306a36Sopenharmony_ci	int sku_id;
5462306a36Sopenharmony_ci	int cpu_process_id;
5562306a36Sopenharmony_ci	int cpu_speedo_id;
5662306a36Sopenharmony_ci	int cpu_speedo_value;
5762306a36Sopenharmony_ci	int cpu_iddq_value;
5862306a36Sopenharmony_ci	int soc_process_id;
5962306a36Sopenharmony_ci	int soc_speedo_id;
6062306a36Sopenharmony_ci	int soc_speedo_value;
6162306a36Sopenharmony_ci	int gpu_process_id;
6262306a36Sopenharmony_ci	int gpu_speedo_id;
6362306a36Sopenharmony_ci	int gpu_speedo_value;
6462306a36Sopenharmony_ci	enum tegra_revision revision;
6562306a36Sopenharmony_ci	enum tegra_platform platform;
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci#ifdef CONFIG_ARCH_TEGRA
6962306a36Sopenharmony_ciextern struct tegra_sku_info tegra_sku_info;
7062306a36Sopenharmony_ciu32 tegra_read_straps(void);
7162306a36Sopenharmony_ciu32 tegra_read_ram_code(void);
7262306a36Sopenharmony_ciint tegra_fuse_readl(unsigned long offset, u32 *value);
7362306a36Sopenharmony_ciu32 tegra_read_chipid(void);
7462306a36Sopenharmony_ciu8 tegra_get_chip_id(void);
7562306a36Sopenharmony_ciu8 tegra_get_platform(void);
7662306a36Sopenharmony_cibool tegra_is_silicon(void);
7762306a36Sopenharmony_ciint tegra194_miscreg_mask_serror(void);
7862306a36Sopenharmony_ci#else
7962306a36Sopenharmony_cistatic struct tegra_sku_info tegra_sku_info __maybe_unused;
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_cistatic inline u32 tegra_read_straps(void)
8262306a36Sopenharmony_ci{
8362306a36Sopenharmony_ci	return 0;
8462306a36Sopenharmony_ci}
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_cistatic inline u32 tegra_read_ram_code(void)
8762306a36Sopenharmony_ci{
8862306a36Sopenharmony_ci	return 0;
8962306a36Sopenharmony_ci}
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_cistatic inline int tegra_fuse_readl(unsigned long offset, u32 *value)
9262306a36Sopenharmony_ci{
9362306a36Sopenharmony_ci	return -ENODEV;
9462306a36Sopenharmony_ci}
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_cistatic inline u32 tegra_read_chipid(void)
9762306a36Sopenharmony_ci{
9862306a36Sopenharmony_ci	return 0;
9962306a36Sopenharmony_ci}
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_cistatic inline u8 tegra_get_chip_id(void)
10262306a36Sopenharmony_ci{
10362306a36Sopenharmony_ci	return 0;
10462306a36Sopenharmony_ci}
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_cistatic inline u8 tegra_get_platform(void)
10762306a36Sopenharmony_ci{
10862306a36Sopenharmony_ci	return 0;
10962306a36Sopenharmony_ci}
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_cistatic inline bool tegra_is_silicon(void)
11262306a36Sopenharmony_ci{
11362306a36Sopenharmony_ci	return false;
11462306a36Sopenharmony_ci}
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_cistatic inline int tegra194_miscreg_mask_serror(void)
11762306a36Sopenharmony_ci{
11862306a36Sopenharmony_ci	return false;
11962306a36Sopenharmony_ci}
12062306a36Sopenharmony_ci#endif
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_cistruct device *tegra_soc_device_register(void);
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci#endif /* __SOC_TEGRA_FUSE_H__ */
127