I can only give partial information, this will be incomplete.
The kernel command line is indeed the correct place to name the serial console for after Linux has booted. U-Boot has its own specification.
The latest Xavier releases go directly from CBoot to Linux without U-Boot, but much of this is the same across recent Jetsons with minor differences if you look at the next paragraphs.
The “/dev/ttyS0” is the default. Note that “/dev/ttyTHS0” is the same hardware, but a different DMA-capable driver. U-Boot only supports the older “/dev/ttyS0” port due to the driver it contains. In the default configuration the reason the kernel command line uses “/dev/ttyS0” is to provide continuity of serial console from U-Boot stage to Linux kernel stage without having to reload a different driver. There may be other restrictions which make the older driver without DMA desirable even on a different port for the Linux kernel (such as “/dev/ttyS1”).
The command line and boot parameters used to be added only via the extlinux.conf configuration file. Now this is done instead mostly by the device tree (the “chosen/bootargs” entry), and earlier boot stages pass this one (perhaps with minor edits) to Linux. Since Xavier is the first of the Jetsons to not use U-Boot the device tree is the only place to make such changes. If extlinux.conf was used, then there would be a problem. Did you change bootargs via flashing a device tree? Is the change reflected in the following two locations:
The J30 complicates things. The device tree will be different in a J30, and so although the above still applies to it the device tree changes may be different…you would be editing the J90 device tree “chosen/bootargs” the same as before, but if you used the stock Jetson dev kit tree without the J90 BSP, then odd things might occur.
Someone else may be able to give better details on actual changes for the J90.