On Tue, Jan 28, 2025 at 12:16:33PM +0530, Kartik Rajput wrote: > The Tegra264 SoC supports the UART Trace Controller (UTC), which allows > multiple firmware clients (up to 16) to share a single physical UART. > Each client is provided with its own interrupt and has access to a > 128-character wide FIFO for both transmit (TX) and receive (RX) > operations. > > Add tegra-utc driver to support Tegra UART Trace Controller (UTC) > client. ... > +static int tegra_utc_probe(struct platform_device *pdev) > +{ > + struct device_node *np = pdev->dev.of_node; > + struct tegra_utc_port *tup; > + int index; > + int ret; > + > + index = of_alias_get_id(np, "serial"); > + if (index < 0) { > + dev_err(&pdev->dev, "failed to get alias id, err %d\n", index); > + return index; > + } Can we please use uart_read_port_properties() instead of open-coding everything again and again? > + tup = devm_kzalloc(&pdev->dev, sizeof(struct tegra_utc_port), GFP_KERNEL); > + if (!tup) > + return -ENOMEM; > + > + ret = of_property_read_u32(np, "current-speed", &tup->baudrate); Why not clock-frequency? But if needed, add this to the above mentioned API as I know more than one driver may utilise this. > + if (ret) { > + dev_err(&pdev->dev, "missing current-speed device-tree property\n"); With struct device *dev = &pdev-dev; this and other lines will be neater. > + return ret; return dev_err_probe(...); > + } > + > + ret = of_property_read_u32(np, "nvidia,utc-fifo-threshold", &tup->fifo_threshold); > + if (ret) { > + dev_err(&pdev->dev, "missing nvidia,fifo-threshold device-tree property\n"); > + return ret; > + } > + > + tup->irq = platform_get_irq(pdev, 0); > + if (tup->irq < 0) { > + dev_err(&pdev->dev, "failed to get interrupt\n"); Dup. This error report is done by the above API. > + return tup->irq; > + } > + tup->soc = of_device_get_match_data(&pdev->dev); > + tup->tx_base = devm_platform_ioremap_resource_byname(pdev, "tx"); > + if (IS_ERR(tup->tx_base)) > + return PTR_ERR(tup->tx_base); > + > + tup->rx_base = devm_platform_ioremap_resource_byname(pdev, "rx"); > + if (IS_ERR(tup->rx_base)) > + return PTR_ERR(tup->rx_base); > + > + tegra_utc_setup_port(&pdev->dev, tup, index); > + platform_set_drvdata(pdev, tup); > + > + return tegra_utc_register_port(tup); > +} ... > +static const struct of_device_id tegra_utc_of_match[] = { > + { .compatible = "nvidia,tegra264-utc", .data = &tegra264_utc_soc }, > + {}, No comma for the terminator line. > +}; -- With Best Regards, Andy Shevchenko