Lines Matching refs:cbb

25 #include <soc/tegra/tegra-cbb.h>
176 static inline struct tegra194_cbb *to_tegra194_cbb(struct tegra_cbb *cbb)
178 return container_of(cbb, struct tegra194_cbb, base);
1665 static void tegra194_cbb_fault_enable(struct tegra_cbb *cbb)
1667 struct tegra194_cbb *priv = to_tegra194_cbb(cbb);
1674 static void tegra194_cbb_stall_enable(struct tegra_cbb *cbb)
1676 struct tegra194_cbb *priv = to_tegra194_cbb(cbb);
1683 static void tegra194_cbb_error_clear(struct tegra_cbb *cbb)
1685 struct tegra194_cbb *priv = to_tegra194_cbb(cbb);
1693 static u32 tegra194_cbb_get_status(struct tegra_cbb *cbb)
1695 struct tegra194_cbb *priv = to_tegra194_cbb(cbb);
1766 static void print_errlog5(struct seq_file *file, struct tegra194_cbb *cbb)
1770 cbb->noc->parse_userbits(&userbits, cbb->errlog5);
1772 if (!strcmp(cbb->noc->name, "cbb-noc")) {
1778 cbb->noc->master_id[userbits.mstr_id]);
1818 print_errlog1_2(struct seq_file *file, struct tegra194_cbb *cbb,
1821 u64 routeid = (u64)cbb->errlog2 << 32 | cbb->errlog1;
1826 cbb->noc->parse_routeid(info, routeid);
1829 cbb->noc->routeid_initflow[info->initflow]);
1832 cbb->noc->routeid_targflow[info->targflow]);
1850 static bool print_errlog0(struct seq_file *file, struct tegra194_cbb *cbb)
1855 hdr.lock = cbb->errlog0 & 0x1;
1856 hdr.opc = FIELD_GET(CBB_ERR_OPC, cbb->errlog0);
1857 hdr.errcode = FIELD_GET(CBB_ERR_ERRCODE, cbb->errlog0);
1858 hdr.len1 = FIELD_GET(CBB_ERR_LEN1, cbb->errlog0);
1859 hdr.format = (cbb->errlog0 >> 31);
1880 cbb->num_bridges > 0) {
1892 for (i = 0; i < cbb->num_bridges; i++) {
1893 status = tegra194_axi2apb_status(cbb->bridges[i].base);
1917 static bool print_errloggerX_info(struct seq_file *file, struct tegra194_cbb *cbb,
1926 cbb->errlog0 = readl(cbb->regs + ERRLOGGER_0_ERRLOG0_0);
1927 cbb->errlog1 = readl(cbb->regs + ERRLOGGER_0_ERRLOG1_0);
1928 cbb->errlog2 = readl(cbb->regs + ERRLOGGER_0_RSVD_00_0);
1929 cbb->errlog3 = readl(cbb->regs + ERRLOGGER_0_ERRLOG3_0);
1930 cbb->errlog4 = readl(cbb->regs + ERRLOGGER_0_ERRLOG4_0);
1931 cbb->errlog5 = readl(cbb->regs + ERRLOGGER_0_ERRLOG5_0);
1933 cbb->errlog0 = readl(cbb->regs + ERRLOGGER_1_ERRLOG0_0);
1934 cbb->errlog1 = readl(cbb->regs + ERRLOGGER_1_ERRLOG1_0);
1935 cbb->errlog2 = readl(cbb->regs + ERRLOGGER_1_RSVD_00_0);
1936 cbb->errlog3 = readl(cbb->regs + ERRLOGGER_1_ERRLOG3_0);
1937 cbb->errlog4 = readl(cbb->regs + ERRLOGGER_1_ERRLOG4_0);
1938 cbb->errlog5 = readl(cbb->regs + ERRLOGGER_1_ERRLOG5_0);
1940 cbb->errlog0 = readl(cbb->regs + ERRLOGGER_2_ERRLOG0_0);
1941 cbb->errlog1 = readl(cbb->regs + ERRLOGGER_2_ERRLOG1_0);
1942 cbb->errlog2 = readl(cbb->regs + ERRLOGGER_2_RSVD_00_0);
1943 cbb->errlog3 = readl(cbb->regs + ERRLOGGER_2_ERRLOG3_0);
1944 cbb->errlog4 = readl(cbb->regs + ERRLOGGER_2_ERRLOG4_0);
1945 cbb->errlog5 = readl(cbb->regs + ERRLOGGER_2_ERRLOG5_0);
1948 tegra_cbb_print_err(file, "\tErrLog0\t\t\t: %#x\n", cbb->errlog0);
1949 is_fatal = print_errlog0(file, cbb);
1951 tegra_cbb_print_err(file, "\tErrLog1\t\t\t: %#x\n", cbb->errlog1);
1952 tegra_cbb_print_err(file, "\tErrLog2\t\t\t: %#x\n", cbb->errlog2);
1953 print_errlog1_2(file, cbb, &info);
1955 tegra_cbb_print_err(file, "\tErrLog3\t\t\t: %#x\n", cbb->errlog3);
1956 tegra_cbb_print_err(file, "\tErrLog4\t\t\t: %#x\n", cbb->errlog4);
1957 print_errlog3_4(file, cbb->errlog3, cbb->errlog4, &info, cbb->noc->noc_aperture,
1958 cbb->noc->max_aperture);
1960 tegra_cbb_print_err(file, "\tErrLog5\t\t\t: %#x\n", cbb->errlog5);
1962 if (cbb->errlog5)
1963 print_errlog5(file, cbb);
1968 static bool print_errlog(struct seq_file *file, struct tegra194_cbb *cbb, u32 errvld)
1973 pr_crit("CPU:%d, Error:%s\n", smp_processor_id(), cbb->noc->name);
1976 is_fatal = print_errloggerX_info(file, cbb, 0);
1978 is_fatal = print_errloggerX_info(file, cbb, 1);
1980 is_fatal = print_errloggerX_info(file, cbb, 2);
1982 tegra_cbb_error_clear(&cbb->base);
1990 static int tegra194_cbb_debugfs_show(struct tegra_cbb *cbb, struct seq_file *file, void *data)
2017 //struct tegra194_cbb *cbb = data;
2024 /* XXX only process interrupts for "cbb" instead of iterating over all NOCs? */
2066 static int tegra194_cbb_interrupt_enable(struct tegra_cbb *cbb)
2068 struct tegra194_cbb *priv = to_tegra194_cbb(cbb);
2069 struct device *dev = cbb->dev;
2094 static void tegra194_cbb_error_enable(struct tegra_cbb *cbb)
2100 tegra_cbb_stall_enable(cbb);
2103 tegra_cbb_fault_enable(cbb);
2119 .name = "cbb-noc",
2179 { .compatible = "nvidia,tegra194-cbb-noc", .data = &tegra194_cbb_central_noc_data },
2188 static int tegra194_cbb_get_bridges(struct tegra194_cbb *cbb, struct device_node *np)
2201 cbb->num_bridges = priv->num_bridges;
2202 cbb->bridges = priv->bridges;
2209 if (!cbb->bridges) {
2210 cbb->num_bridges = of_address_count(np);
2212 cbb->bridges = devm_kcalloc(cbb->base.dev, cbb->num_bridges,
2213 sizeof(*cbb->bridges), GFP_KERNEL);
2214 if (!cbb->bridges)
2217 for (i = 0; i < cbb->num_bridges; i++) {
2218 err = of_address_to_resource(np, i, &cbb->bridges[i].res);
2222 cbb->bridges[i].base = devm_ioremap_resource(cbb->base.dev,
2223 &cbb->bridges[i].res);
2224 if (IS_ERR(cbb->bridges[i].base))
2225 return PTR_ERR(cbb->bridges[i].base);
2229 if (cbb->num_bridges > 0) {
2230 dev_dbg(cbb->base.dev, "AXI2APB bridge info present:\n");
2232 for (i = 0; i < cbb->num_bridges; i++)
2233 dev_dbg(cbb->base.dev, " %u: %pR\n", i, &cbb->bridges[i].res);
2242 struct tegra194_cbb *cbb;
2262 cbb = devm_kzalloc(&pdev->dev, sizeof(*cbb), GFP_KERNEL);
2263 if (!cbb)
2266 INIT_LIST_HEAD(&cbb->base.node);
2267 cbb->base.ops = &tegra194_cbb_ops;
2268 cbb->base.dev = &pdev->dev;
2269 cbb->noc = noc;
2271 cbb->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &cbb->res);
2272 if (IS_ERR(cbb->regs))
2273 return PTR_ERR(cbb->regs);
2275 err = tegra_cbb_get_irq(pdev, &cbb->nonsec_irq, &cbb->sec_irq);
2281 err = tegra194_cbb_get_bridges(cbb, np);
2287 platform_set_drvdata(pdev, cbb);
2290 list_add(&cbb->base.node, &cbb_list);
2293 return tegra_cbb_register(&cbb->base);
2298 struct tegra194_cbb *cbb = platform_get_drvdata(pdev);
2307 if (cbb->res->start == priv->res->start) {
2318 struct tegra194_cbb *cbb = dev_get_drvdata(dev);
2320 tegra194_cbb_error_enable(&cbb->base);
2323 dev_dbg(dev, "%s resumed\n", cbb->noc->name);
2335 .name = "tegra194-cbb",