]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
soc/tegra: cbb: Add support for CBB fabrics in Tegra264
authorSumit Gupta <sumitg@nvidia.com>
Thu, 3 Jul 2025 10:38:28 +0000 (16:08 +0530)
committerThierry Reding <treding@nvidia.com>
Wed, 9 Jul 2025 12:28:55 +0000 (14:28 +0200)
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>
drivers/soc/tegra/cbb/tegra234-cbb.c

index aab0cd85dea5e14db52ef2e10ae5c76adc25f216..69c70493867950c101ce15d636800023d385bbb0 100644 (file)
@@ -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);