Lines Matching defs:cbb

25 #include <soc/tegra/tegra-cbb.h>
128 static inline struct tegra234_cbb *to_tegra234_cbb(struct tegra_cbb *cbb)
130 return container_of(cbb, struct tegra234_cbb, base);
137 tegra234_cbb_write_access_allowed(struct platform_device *pdev, struct tegra234_cbb *cbb)
141 if (!cbb->fabric->firewall_base ||
142 !cbb->fabric->firewall_ctl ||
143 !cbb->fabric->firewall_wr_ctl) {
148 if ((cbb->fabric->firewall_ctl > FIREWALL_APERTURE_SZ) ||
149 (cbb->fabric->firewall_wr_ctl > FIREWALL_APERTURE_SZ)) {
154 val = readl(cbb->regs + cbb->fabric->firewall_base + cbb->fabric->firewall_ctl);
167 val = readl(cbb->regs + cbb->fabric->firewall_base + cbb->fabric->firewall_wr_ctl);
174 static void tegra234_cbb_fault_enable(struct tegra_cbb *cbb)
176 struct tegra234_cbb *priv = to_tegra234_cbb(cbb);
184 static void tegra234_cbb_error_clear(struct tegra_cbb *cbb)
186 struct tegra234_cbb *priv = to_tegra234_cbb(cbb);
192 static u32 tegra234_cbb_get_status(struct tegra_cbb *cbb)
194 struct tegra234_cbb *priv = to_tegra234_cbb(cbb);
205 static void tegra234_cbb_mask_serror(struct tegra234_cbb *cbb)
207 writel(0x1, cbb->regs + cbb->fabric->off_mask_erd);
265 static void tegra234_lookup_slave_timeout(struct seq_file *file, struct tegra234_cbb *cbb,
268 const struct tegra234_slave_lookup *map = cbb->fabric->slave_map;
288 addr = cbb->regs + map[slave_id].offset;
308 static void tegra234_cbb_print_error(struct seq_file *file, struct tegra234_cbb *cbb, u32 status,
317 if (type >= cbb->fabric->max_errors) {
325 cbb->fabric->errors[type].code);
334 if (type >= cbb->fabric->max_errors) {
342 cbb->fabric->errors[type].code);
349 static void print_errlog_err(struct seq_file *file, struct tegra234_cbb *cbb)
360 mstr_id = FIELD_GET(FAB_EM_EL_MSTRID, cbb->mn_user_bits);
361 vqc = FIELD_GET(FAB_EM_EL_VQC, cbb->mn_user_bits);
362 grpsec = FIELD_GET(FAB_EM_EL_GRPSEC, cbb->mn_user_bits);
363 falconsec = FIELD_GET(FAB_EM_EL_FALCONSEC, cbb->mn_user_bits);
371 requester_socket_id = FIELD_GET(REQ_SOCKET_ID, cbb->mn_attr2);
379 fab_id = FIELD_GET(FAB_EM_EL_FABID, cbb->mn_attr2);
380 slave_id = FIELD_GET(FAB_EM_EL_SLAVEID, cbb->mn_attr2);
382 access_id = FIELD_GET(FAB_EM_EL_ACCESSID, cbb->mn_attr1);
384 cache_type = FIELD_GET(FAB_EM_EL_AXCACHE, cbb->mn_attr0);
385 prot_type = FIELD_GET(FAB_EM_EL_AXPROT, cbb->mn_attr0);
386 burst_length = FIELD_GET(FAB_EM_EL_BURSTLENGTH, cbb->mn_attr0);
387 burst_type = FIELD_GET(FAB_EM_EL_BURSTTYPE, cbb->mn_attr0);
388 beat_size = FIELD_GET(FAB_EM_EL_BEATSIZE, cbb->mn_attr0);
389 access_type = FIELD_GET(FAB_EM_EL_ACCESSTYPE, cbb->mn_attr0);
392 if (cbb->type < cbb->fabric->max_errors)
394 cbb->fabric->errors[cbb->type].code);
396 tegra_cbb_print_err(file, "\t Wrong type index:%u\n", cbb->type);
398 tegra_cbb_print_err(file, "\t MASTER_ID\t\t: %s\n", cbb->fabric->master_id[mstr_id]);
399 tegra_cbb_print_err(file, "\t Address\t\t: %#llx\n", cbb->access);
412 strcpy(fabric_name, cbb->fabric->name);
435 if (slave_id >= cbb->fabric->max_slaves) {
440 if (!strcmp(cbb->fabric->errors[cbb->type].code, "TIMEOUT_ERR")) {
441 tegra234_lookup_slave_timeout(file, cbb, slave_id, fab_id);
445 tegra_cbb_print_err(file, "\t Slave\t\t\t: %s\n", cbb->fabric->slave_map[slave_id].name);
448 static int print_errmonX_info(struct seq_file *file, struct tegra234_cbb *cbb)
452 status = readl(cbb->mon + FABRIC_MN_MASTER_ERR_STATUS_0);
463 overflow = readl(cbb->mon + FABRIC_MN_MASTER_ERR_OVERFLOW_STATUS_0);
465 tegra234_cbb_print_error(file, cbb, status, overflow);
467 error = readl(cbb->mon + FABRIC_MN_MASTER_LOG_ERR_STATUS_0);
473 cbb->type = 0;
479 hi = readl(cbb->mon + FABRIC_MN_MASTER_LOG_ADDR_HIGH_0);
480 lo = readl(cbb->mon + FABRIC_MN_MASTER_LOG_ADDR_LOW_0);
482 cbb->access = (u64)hi << 32 | lo;
484 cbb->mn_attr0 = readl(cbb->mon + FABRIC_MN_MASTER_LOG_ATTRIBUTES0_0);
485 cbb->mn_attr1 = readl(cbb->mon + FABRIC_MN_MASTER_LOG_ATTRIBUTES1_0);
486 cbb->mn_attr2 = readl(cbb->mon + FABRIC_MN_MASTER_LOG_ATTRIBUTES2_0);
487 cbb->mn_user_bits = readl(cbb->mon + FABRIC_MN_MASTER_LOG_USER_BITS0_0);
489 print_errlog_err(file, cbb);
492 cbb->type++;
499 static int print_err_notifier(struct seq_file *file, struct tegra234_cbb *cbb, u32 status)
506 cbb->fabric->name, status);
510 unsigned int notifier = cbb->fabric->notifier_offset;
515 writel(mask, cbb->regs + notifier + FABRIC_EN_CFG_ADDR_INDEX_0_0);
516 hi = readl(cbb->regs + notifier + FABRIC_EN_CFG_ADDR_HI_0);
517 lo = readl(cbb->regs + notifier + FABRIC_EN_CFG_ADDR_LOW_0);
521 offset = addr - cbb->res->start;
522 cbb->mon = cbb->regs + offset;
523 cbb->mask = BIT(index);
525 err = print_errmonX_info(file, cbb);
526 tegra234_cbb_error_clear(&cbb->base);
542 static int tegra234_cbb_debugfs_show(struct tegra_cbb *cbb, struct seq_file *file, void *data)
548 list_for_each_entry(cbb, &cbb_list, node) {
549 struct tegra234_cbb *priv = to_tegra234_cbb(cbb);
571 struct tegra_cbb *cbb;
578 list_for_each_entry(cbb, &cbb_list, node) {
579 struct tegra234_cbb *priv = to_tegra234_cbb(cbb);
580 u32 status = tegra_cbb_get_status(cbb);
611 static int tegra234_cbb_interrupt_enable(struct tegra_cbb *cbb)
613 struct tegra234_cbb *priv = to_tegra234_cbb(cbb);
616 int err = devm_request_irq(cbb->dev, priv->sec_irq, tegra234_cbb_isr, 0,
617 dev_name(cbb->dev), priv);
619 dev_err(cbb->dev, "failed to register interrupt %u: %d\n", priv->sec_irq,
628 static void tegra234_cbb_error_enable(struct tegra_cbb *cbb)
630 tegra_cbb_fault_enable(cbb);
801 .name = "cbb-fabric",
1034 .name = "cbb-fabric",
1072 { .compatible = "nvidia,tegra234-cbb-fabric", .data = &tegra234_cbb_fabric },
1116 struct tegra234_cbb *cbb;
1134 cbb = devm_kzalloc(&pdev->dev, sizeof(*cbb), GFP_KERNEL);
1135 if (!cbb)
1138 INIT_LIST_HEAD(&cbb->base.node);
1139 cbb->base.ops = &tegra234_cbb_ops;
1140 cbb->base.dev = &pdev->dev;
1141 cbb->fabric = fabric;
1143 cbb->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &cbb->res);
1144 if (IS_ERR(cbb->regs))
1145 return PTR_ERR(cbb->regs);
1147 err = tegra_cbb_get_irq(pdev, NULL, &cbb->sec_irq);
1151 platform_set_drvdata(pdev, cbb);
1157 if (!tegra234_cbb_write_access_allowed(pdev, cbb)) {
1163 list_add(&cbb->base.node, &cbb_list);
1167 if (cbb->fabric->off_mask_erd)
1168 tegra234_cbb_mask_serror(cbb);
1170 return tegra_cbb_register(&cbb->base);
1175 struct tegra234_cbb *cbb = dev_get_drvdata(dev);
1177 tegra234_cbb_error_enable(&cbb->base);
1179 dev_dbg(dev, "%s resumed\n", cbb->fabric->name);
1191 .name = "tegra234-cbb",