return err;
        }
 
-       tcu->rx = mbox_request_channel_byname(&tcu->rx_client, "rx");
-       if (IS_ERR(tcu->rx)) {
-               err = PTR_ERR(tcu->rx);
-               dev_err(&pdev->dev, "failed to get rx mailbox: %d\n", err);
-               goto free_tx;
-       }
-
 #if IS_ENABLED(CONFIG_SERIAL_TEGRA_TCU_CONSOLE)
        /* setup the console */
        strcpy(tcu->console.name, "ttyTCU");
        if (err) {
                dev_err(&pdev->dev, "failed to register UART driver: %d\n",
                        err);
-               goto free_rx;
+               goto free_tx;
        }
 
        /* setup the port */
                goto unregister_uart;
        }
 
+       /*
+        * Request RX channel after creating port to ensure tcu->port
+        * is ready for any immediate incoming bytes.
+        */
+       tcu->rx = mbox_request_channel_byname(&tcu->rx_client, "rx");
+       if (IS_ERR(tcu->rx)) {
+               err = PTR_ERR(tcu->rx);
+               dev_err(&pdev->dev, "failed to get rx mailbox: %d\n", err);
+               goto remove_uart_port;
+       }
+
        platform_set_drvdata(pdev, tcu);
 #if IS_ENABLED(CONFIG_SERIAL_TEGRA_TCU_CONSOLE)
        register_console(&tcu->console);
 
        return 0;
 
+remove_uart_port:
+       uart_remove_one_port(&tcu->driver, &tcu->port);
 unregister_uart:
        uart_unregister_driver(&tcu->driver);
-free_rx:
-       mbox_free_channel(tcu->rx);
 free_tx:
        mbox_free_channel(tcu->tx);
 
 #if IS_ENABLED(CONFIG_SERIAL_TEGRA_TCU_CONSOLE)
        unregister_console(&tcu->console);
 #endif
+       mbox_free_channel(tcu->rx);
        uart_remove_one_port(&tcu->driver, &tcu->port);
        uart_unregister_driver(&tcu->driver);
-       mbox_free_channel(tcu->rx);
        mbox_free_channel(tcu->tx);
 
        return 0;