
Hi Stephen,
On 31 July 2014 21:16, Stephen Warren swarren@wwwdotorg.org wrote:
On 07/30/2014 03:49 AM, Simon Glass wrote:
Some Tegra device tree files do not include information about the serial ports. Add this and also add information about the input clock speed.
The console alias needs to be set up to indicate which port is used for the console.
Also add a binding file since this is missing.
diff --git a/arch/arm/dts/tegra114-dalmore.dts b/arch/arm/dts/tegra114-dalmore.dts index 435c01e..e2426ef 100644 --- a/arch/arm/dts/tegra114-dalmore.dts +++ b/arch/arm/dts/tegra114-dalmore.dts @@ -7,6 +7,7 @@ compatible = "nvidia,dalmore", "nvidia,tegra114";
aliases {
console = &uart_d;
I don't think that's a standard alias name. There was some recent discussion in the devicetree mailing list re: using some property in /chosen for this purpose instead. U-Boot and the kernel should use the same representation here.
This is U-Boot's approach at present, if we change it then we should change it everywhere. I worry that 'chosen' is for Linux rather than U-Boot and we might get very confused about what chosen is for?
diff --git a/arch/arm/dts/tegra114.dtsi b/arch/arm/dts/tegra114.dtsi
uart_a: serial@70006000 {
compatible = "nvidia,tegra20-uart";
This property needs to include both the specific HW (i.e. Tegra114) and any HW it's compatible with (i.e. Tegra20).
So something like this?
compatible = "nvidia,tegra114-uart", "nvidia,tegra20-uart";
reg = <0x70006000 0x40>;
reg-shift = <2>;
clock-frequency = <408000000>;
This isn't a property that's defined by the Tegra serial binding. This information should be obtained by looking up the relevant clock, and querying its rate.
We can't do that in the ns16550 driver as yet since there is no generic U-Boot clock infrastructure. I suspect that will come with time.
interrupts = < 68 >;
};
For reference, here's the DT node for this UART in the kernel DT, which complies with the relevant binding document:
uarta: serial@70006000 { compatible = "nvidia,tegra114-uart", "nvidia,tegra20-uart"; reg = <0x70006000 0x40>; reg-shift = <2>; interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; clocks = <&tegra_car TEGRA114_CLK_UARTA>; resets = <&tegra_car 6>; reset-names = "serial"; dmas = <&apbdma 8>, <&apbdma 8>; dma-names = "rx", "tx"; status = "disabled"; };
All the comment above apply to all the files in this patch.
My intent was to make this work with a more generic binding for now - ns16550 is a pretty standard thing and I thought I could avoid making the driver Tegra-specific. Then we could allow many SoCs to use it. Why does Tegra have its own binding in the kernel for this standard UART?
Regards, Simon