soc/tegra: cbb: Add support for CBB fabrics in Tegra264
Add support for CBB 2.0 based fabrics in Tegra264 SoC using DT. Fabrics reporting errors are: SYSTEM, TOP0, UPHY0 and VISION. Signed-off-by: Sumit Gupta <sumitg@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
committed by
Thierry Reding
parent
5f2c2c4399
commit
fa4854a9f5
@@ -89,6 +89,34 @@ enum tegra234_cbb_fabric_ids {
|
||||
T234_MAX_FABRIC_ID,
|
||||
};
|
||||
|
||||
enum tegra264_cbb_fabric_ids {
|
||||
T264_SYSTEM_CBB_FABRIC_ID,
|
||||
T264_TOP_0_CBB_FABRIC_ID,
|
||||
T264_VISION_CBB_FABRIC_ID,
|
||||
T264_DISP_USB_CBB_FABRIC_ID,
|
||||
T264_UPHY0_CBB_FABRIC_ID,
|
||||
T264_RSVD0_FABRIC_ID,
|
||||
T264_RSVD1_FABRIC_ID,
|
||||
T264_RSVD2_FABRIC_ID,
|
||||
T264_RSVD3_FABRIC_ID,
|
||||
T264_RSVD4_FABRIC_ID,
|
||||
T264_RSVD5_FABRIC_ID,
|
||||
T264_AON_FABRIC_ID,
|
||||
T264_PSC_FABRIC_ID,
|
||||
T264_OESP_FABRIC_ID,
|
||||
T264_APE_FABRIC_ID,
|
||||
T264_BPMP_FABRIC_ID,
|
||||
T264_RCE_0_FABRIC_ID,
|
||||
T264_RCE_1_FABRIC_ID,
|
||||
T264_RSVD6_FABRIC_ID,
|
||||
T264_DCE_FABRIC_ID,
|
||||
T264_FSI_FABRIC_ID,
|
||||
T264_ISC_FABRIC_ID,
|
||||
T264_SB_FABRIC_ID,
|
||||
T264_ISC_CPU_FABRIC_ID,
|
||||
T264_RSVD7_FABRIC_ID,
|
||||
};
|
||||
|
||||
struct tegra234_target_lookup {
|
||||
const char *name;
|
||||
unsigned int offset;
|
||||
@@ -455,6 +483,17 @@ static void print_errlog_err(struct seq_file *file, struct tegra234_cbb *cbb)
|
||||
tegra_cbb_print_err(file, "\t Fabric\t\t: %s (id:%#x)\n",
|
||||
cbb->fabric->fab_list[fab_id].name, fab_id);
|
||||
|
||||
if (of_machine_is_compatible("nvidia,tegra264") && fab_id == T264_UPHY0_CBB_FABRIC_ID) {
|
||||
/*
|
||||
* In T264, AON Fabric ID value is incorrectly same as UPHY0 fabric ID.
|
||||
* For 'ID = 0x4', we must check for the address which caused the error
|
||||
* to find the correct fabric which returned error.
|
||||
*/
|
||||
tegra_cbb_print_err(file, "\t or Fabric\t\t: %s\n",
|
||||
cbb->fabric->fab_list[T264_AON_FABRIC_ID].name);
|
||||
tegra_cbb_print_err(file, "\t Please use Address to determine correct fabric.\n");
|
||||
}
|
||||
|
||||
tegra_cbb_print_err(file, "\t Target_Id\t\t: %#x\n", target_id);
|
||||
tegra_cbb_print_err(file, "\t Burst_length\t\t: %#x\n", burst_length);
|
||||
tegra_cbb_print_err(file, "\t Burst_type\t\t: %#x\n", burst_type);
|
||||
@@ -1143,6 +1182,242 @@ static const struct tegra234_cbb_fabric tegra241_bpmp_fabric = {
|
||||
.firewall_wr_ctl = 0x8e8,
|
||||
};
|
||||
|
||||
static const char * const tegra264_initiator_id[] = {
|
||||
[0x0] = "TZ",
|
||||
[0x1] = "CCPLEX",
|
||||
[0x2] = "ISC",
|
||||
[0x3] = "BPMP_FW",
|
||||
[0x4] = "AON",
|
||||
[0x5] = "MSS_SEQ",
|
||||
[0x6] = "GPCDMA_P",
|
||||
[0x7] = "TSECA_NONSECURE",
|
||||
[0x8] = "TSECA_LIGHTSECURE",
|
||||
[0x9] = "TSECA_HEAVYSECURE",
|
||||
[0xa] = "CORESIGHT",
|
||||
[0xb] = "APE_0",
|
||||
[0xc] = "APE_1",
|
||||
[0xd] = "PEATRANS",
|
||||
[0xe] = "JTAGM_DFT",
|
||||
[0xf] = "RCE",
|
||||
[0x10] = "DCE",
|
||||
[0x11] = "PSC_FW_USER",
|
||||
[0x12] = "PSC_FW_SUPERVISOR",
|
||||
[0x13] = "PSC_FW_MACHINE",
|
||||
[0x14] = "PSC_BOOT",
|
||||
[0x15] = "BPMP_BOOT",
|
||||
[0x16] = "GPU_0",
|
||||
[0x17] = "GPU_1",
|
||||
[0x18] = "GPU_2",
|
||||
[0x19] = "GPU_3",
|
||||
[0x1a] = "GPU_4",
|
||||
[0x1b] = "PSC_EXT_BOOT",
|
||||
[0x1c] = "PSC_EXT_RUNTIME",
|
||||
[0x1d] = "OESP_EXT",
|
||||
[0x1e] = "SB_EXT",
|
||||
[0x1f] = "FSI_SAFETY_0",
|
||||
[0x20] = "FSI_SAFETY_1",
|
||||
[0x21] = "FSI_SAFETY_2",
|
||||
[0x22] = "FSI_SAFETY_3",
|
||||
[0x23] = "FSI_CHSM",
|
||||
[0x24] = "RCE_1",
|
||||
[0x25] = "BPMP_OEM_FW",
|
||||
[0x26 ... 0x3d] = "RSVD",
|
||||
[0x3e] = "CBB_SMN",
|
||||
[0x3f] = "CBB_RSVD"
|
||||
};
|
||||
|
||||
static const struct tegra234_target_lookup tegra264_top0_cbb_target_map[] = {
|
||||
{ "RSVD", 0x000000 },
|
||||
{ "CBB_CENTRAL", 0xC020000 },
|
||||
{ "AXI2APB_1", 0x80000 },
|
||||
{ "AXI2APB_10", 0x81000 },
|
||||
{ "AXI2APB_11", 0x82000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_14", 0x83000 },
|
||||
{ "AXI2APB_15", 0x84000 },
|
||||
{ "AXI2APB_16", 0x85000 },
|
||||
{ "AXI2APB_17", 0x86000 },
|
||||
{ "AXI2APB_2", 0x87000 },
|
||||
{ "AXI2APB_3", 0x88000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_5", 0x8A000 },
|
||||
{ "AXI2APB_6", 0x8B000 },
|
||||
{ "AXI2APB_7", 0x8C000 },
|
||||
{ "AXI2APB_8", 0x8D000 },
|
||||
{ "AXI2APB_9", 0x8E000 },
|
||||
{ "FSI_SLAVE", 0x64000 },
|
||||
{ "DISP_USB_CBB_T", 0x65000 },
|
||||
{ "SYSTEM_CBB_T", 0x66000 },
|
||||
{ "UPHY0_CBB_T", 0x67000 },
|
||||
{ "VISION_CBB_T", 0x68000 },
|
||||
{ "CCPLEX_SLAVE", 0x69000 },
|
||||
{ "PCIE_C0", 0x6A000 },
|
||||
{ "SMN_UCF_RX_0", 0x6B000 },
|
||||
{ "SMN_UCF_RX_1", 0x6C000 },
|
||||
{ "AXI2APB_4", 0x89000 },
|
||||
};
|
||||
|
||||
static const struct tegra234_target_lookup tegra264_sys_cbb_target_map[] = {
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_1", 0xE1000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AON_SLAVE", 0x79000 },
|
||||
{ "APE_SLAVE", 0x73000 },
|
||||
{ "BPMP_SLAVE", 0x74000 },
|
||||
{ "OESP_SLAVE", 0x75000 },
|
||||
{ "PSC_SLAVE", 0x76000 },
|
||||
{ "SB_SLAVE", 0x7A000 },
|
||||
{ "SMN_SYSTEM_RX", 0x7B000 },
|
||||
{ "STM", 0x77000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_3", 0xE3000 },
|
||||
{ "TOP_CBB_T", 0x7C000 },
|
||||
{ "AXI2APB_2", 0xE4000 },
|
||||
{ "AXI2APB_4", 0xE5000 },
|
||||
{ "AXI2APB_5", 0xE6000 },
|
||||
};
|
||||
|
||||
static const struct tegra234_target_lookup tegra264_uphy0_cbb_target_map[] = {
|
||||
[0 ... 20] = { "RSVD", 0x00000 },
|
||||
{ "AXI2APB_1", 0x71000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_3", 0x75000 },
|
||||
{ "SMN_UPHY0_RX", 0x53000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "PCIE_C4", 0x4B000 },
|
||||
{ "AXI2APB_2", 0x74000 },
|
||||
{ "AXI2APB_4", 0x76000 },
|
||||
{ "AXI2APB_5", 0x77000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_7", 0x79000 },
|
||||
{ "PCIE_C2", 0x56000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "PCIE_C1", 0x55000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_10", 0x72000 },
|
||||
{ "AXI2APB_11", 0x7C000 },
|
||||
{ "AXI2APB_8", 0x7A000 },
|
||||
{ "AXI2APB_9", 0x7B000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "PCIE_C5", 0x4E000 },
|
||||
{ "PCIE_C3", 0x58000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "ISC_SLAVE", 0x54000 },
|
||||
{ "TOP_CBB_T", 0x57000 },
|
||||
{ "AXI2APB_12", 0x7D000 },
|
||||
{ "AXI2APB_13", 0x70000 },
|
||||
{ "AXI2APB_6", 0x7E000 },
|
||||
};
|
||||
|
||||
static const struct tegra234_target_lookup tegra264_vision_cbb_target_map[] = {
|
||||
[0 ... 5] = { "RSVD", 0x0 },
|
||||
{ "HOST1X", 0x45000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "AXI2APB_2", 0x71000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "RSVD", 0x00000 },
|
||||
{ "SMN_VISION_RX", 0x47000 },
|
||||
[13 ... 19] = { "RSVD", 0x0 },
|
||||
{ "RCE_0_SLAVE", 0x4B000 },
|
||||
{ "RCE_1_SLAVE", 0x4C000 },
|
||||
{ "AXI2APB_1", 0x72000 },
|
||||
{ "AXI2APB_3", 0x73000 },
|
||||
{ "TOP_CBB_T", 0x4D000 },
|
||||
|
||||
};
|
||||
|
||||
static const struct tegra234_fabric_lookup tegra264_cbb_fab_list[] = {
|
||||
[T264_SYSTEM_CBB_FABRIC_ID] = { "system-cbb-fabric", true,
|
||||
tegra264_sys_cbb_target_map,
|
||||
ARRAY_SIZE(tegra264_sys_cbb_target_map) },
|
||||
[T264_TOP_0_CBB_FABRIC_ID] = { "top0-cbb-fabric", true,
|
||||
tegra264_top0_cbb_target_map,
|
||||
ARRAY_SIZE(tegra264_top0_cbb_target_map) },
|
||||
[T264_VISION_CBB_FABRIC_ID] = { "vision-cbb-fabric", true,
|
||||
tegra264_vision_cbb_target_map,
|
||||
ARRAY_SIZE(tegra264_vision_cbb_target_map) },
|
||||
[T264_DISP_USB_CBB_FABRIC_ID] = { "disp-usb-cbb-fabric" },
|
||||
[T264_UPHY0_CBB_FABRIC_ID] = { "uphy0-cbb-fabric", true,
|
||||
tegra264_uphy0_cbb_target_map,
|
||||
ARRAY_SIZE(tegra264_uphy0_cbb_target_map) },
|
||||
[T264_AON_FABRIC_ID] = { "aon-fabric" },
|
||||
[T264_PSC_FABRIC_ID] = { "psc-fabric" },
|
||||
[T264_OESP_FABRIC_ID] = { "oesp-fabric" },
|
||||
[T264_APE_FABRIC_ID] = { "ape-fabirc" },
|
||||
[T264_BPMP_FABRIC_ID] = { "bpmp-fabric" },
|
||||
[T264_RCE_0_FABRIC_ID] = { "rce0-fabric" },
|
||||
[T264_RCE_1_FABRIC_ID] = { "rce1-fabric" },
|
||||
[T264_DCE_FABRIC_ID] = { "dce-fabric" },
|
||||
[T264_FSI_FABRIC_ID] = { "fsi-fabric" },
|
||||
[T264_ISC_FABRIC_ID] = { "isc-fabric" },
|
||||
[T264_SB_FABRIC_ID] = { "sb-fabric" },
|
||||
[T264_ISC_CPU_FABRIC_ID] = { "isc-cpu-fabric" },
|
||||
};
|
||||
|
||||
static const struct tegra234_cbb_fabric tegra264_top0_cbb_fabric = {
|
||||
.fab_id = T264_TOP_0_CBB_FABRIC_ID,
|
||||
.fab_list = tegra264_cbb_fab_list,
|
||||
.initiator_id = tegra264_initiator_id,
|
||||
.errors = tegra241_cbb_errors,
|
||||
.max_errors = ARRAY_SIZE(tegra241_cbb_errors),
|
||||
.err_intr_enbl = 0x7,
|
||||
.err_status_clr = 0x1ff007f,
|
||||
.notifier_offset = 0x90000,
|
||||
.off_mask_erd = 0x4a004,
|
||||
.firewall_base = 0x3c0000,
|
||||
.firewall_ctl = 0x5b0,
|
||||
.firewall_wr_ctl = 0x5a8,
|
||||
};
|
||||
|
||||
static const struct tegra234_cbb_fabric tegra264_sys_cbb_fabric = {
|
||||
.fab_id = T264_SYSTEM_CBB_FABRIC_ID,
|
||||
.fab_list = tegra264_cbb_fab_list,
|
||||
.initiator_id = tegra264_initiator_id,
|
||||
.errors = tegra241_cbb_errors,
|
||||
.max_errors = ARRAY_SIZE(tegra241_cbb_errors),
|
||||
.err_intr_enbl = 0xf,
|
||||
.err_status_clr = 0x1ff007f,
|
||||
.notifier_offset = 0x40000,
|
||||
.firewall_base = 0x29c000,
|
||||
.firewall_ctl = 0x170,
|
||||
.firewall_wr_ctl = 0x168,
|
||||
};
|
||||
|
||||
static const struct tegra234_cbb_fabric tegra264_uphy0_cbb_fabric = {
|
||||
.fab_id = T264_UPHY0_CBB_FABRIC_ID,
|
||||
.fab_list = tegra264_cbb_fab_list,
|
||||
.initiator_id = tegra264_initiator_id,
|
||||
.errors = tegra241_cbb_errors,
|
||||
.max_errors = ARRAY_SIZE(tegra241_cbb_errors),
|
||||
.err_intr_enbl = 0x1,
|
||||
.err_status_clr = 0x1ff007f,
|
||||
.notifier_offset = 0x80000,
|
||||
.firewall_base = 0x360000,
|
||||
.firewall_ctl = 0x590,
|
||||
.firewall_wr_ctl = 0x588,
|
||||
};
|
||||
|
||||
static const struct tegra234_cbb_fabric tegra264_vision_cbb_fabric = {
|
||||
.fab_id = T264_VISION_CBB_FABRIC_ID,
|
||||
.fab_list = tegra264_cbb_fab_list,
|
||||
.initiator_id = tegra264_initiator_id,
|
||||
.errors = tegra241_cbb_errors,
|
||||
.max_errors = ARRAY_SIZE(tegra241_cbb_errors),
|
||||
.err_intr_enbl = 0x1,
|
||||
.err_status_clr = 0x1ff007f,
|
||||
.notifier_offset = 0x80000,
|
||||
.firewall_base = 0x290000,
|
||||
.firewall_ctl = 0x5d0,
|
||||
.firewall_wr_ctl = 0x5c8,
|
||||
};
|
||||
|
||||
static const struct of_device_id tegra234_cbb_dt_ids[] = {
|
||||
{ .compatible = "nvidia,tegra234-cbb-fabric", .data = &tegra234_cbb_fabric },
|
||||
{ .compatible = "nvidia,tegra234-aon-fabric", .data = &tegra234_aon_fabric },
|
||||
@@ -1150,6 +1425,10 @@ static const struct of_device_id tegra234_cbb_dt_ids[] = {
|
||||
{ .compatible = "nvidia,tegra234-dce-fabric", .data = &tegra234_dce_fabric },
|
||||
{ .compatible = "nvidia,tegra234-rce-fabric", .data = &tegra234_rce_fabric },
|
||||
{ .compatible = "nvidia,tegra234-sce-fabric", .data = &tegra234_sce_fabric },
|
||||
{ .compatible = "nvidia,tegra264-sys-cbb-fabric", .data = &tegra264_sys_cbb_fabric },
|
||||
{ .compatible = "nvidia,tegra264-top0-cbb-fabric", .data = &tegra264_top0_cbb_fabric },
|
||||
{ .compatible = "nvidia,tegra264-uphy0-cbb-fabric", .data = &tegra264_uphy0_cbb_fabric },
|
||||
{ .compatible = "nvidia,tegra264-vision-cbb-fabric", .data = &tegra264_vision_cbb_fabric },
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, tegra234_cbb_dt_ids);
|
||||
|
||||
Reference in New Issue
Block a user