Message ID | 20180709075232.30678-1-linus.walleij@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | [1/3,v4] ARM: dts: Modernize the Vexpress PL111 integration | expand |
On 09/07/18 08:52, Linus Walleij wrote: > The Versatile Express was submitted with the actual display > bridges unconnected (but defined in the device tree) and > mock "panels" encoded in the device tree node of the PL111 > controller. > > This doesn't even remotely describe the actual Versatile > Express hardware. Exploit the SiI9022 bridge by connecting > the PL111 pads to it, making it use EDID or fallback values > to drive the monitor. > > The also has to use the reserved memory through the > CMA pool rather than by open coding a memory region and > remapping it explicitly in the driver. To achieve this, > a reserved-memory node must exist in the root of the > device tree, so we need to pull that out of the > motherboard .dtsi include files, and push it into each > top-level device tree instead. > > We do the same manouver for all the Versatile Express > boards, taking into account the different location of the > video RAM depending on which chip select is used on > each platform. > > This plays nicely with the new PL111 DRM driver and > follows the standard ways of assigning bridges and > memory pools for graphics. > > Cc: Sudeep Holla <sudeep.holla@arm.com> > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > Cc: Liviu Dudau <liviu.dudau@arm.com> > Cc: Mali DP Maintainers <malidp@foss.arm.com> > Cc: Robin Murphy <robin.murphy@arm.com> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > ChangeLog v3->v4: > - Fix the ARM and ARM64 shared vexpress-v2m-rc1.dtsi > file address-cells etc so that the ports do not give > DTC warnings anymore. Still get below warnings, not sure if I need to upgrade my DTC ? vexpress-v2f-1xv7-ca53x2.dtb: Warning (graph_child_address): /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary rtsm_ve-aemv8a.dtb: Warning (graph_child_address): /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary > - Fixed up the CA53 DTS: use the right chip select base > at 0x18000000. I really hate this as it make maintenance difficult, but I don't have good alternative, so I am fine as it is for now :) > - Fixed up the Real-Time Systems Models Virtual Executive > RTSMv8 AEM VE: > - Added the I2C interface (whether implemented in the > emulator or not) It doesn't work. This change is breaking the working CLCD on the models. I just tested and CLCD driver returns > - Fixed the chip select of the memory node to the right > memory base 0x18000000. See, this keeps happening. Anyways I think you can drop RTSM changes if models don't support I2C and DVI. Liviu, As you deal with DRM drivers and I have no knowledge in that domain, I want to hear your feedback or Ack/Review ?
On Tue, Jul 10, 2018 at 10:46:03AM +0100, Sudeep Holla wrote: > > > On 09/07/18 08:52, Linus Walleij wrote: > > The Versatile Express was submitted with the actual display > > bridges unconnected (but defined in the device tree) and > > mock "panels" encoded in the device tree node of the PL111 > > controller. > > > > This doesn't even remotely describe the actual Versatile > > Express hardware. Exploit the SiI9022 bridge by connecting > > the PL111 pads to it, making it use EDID or fallback values > > to drive the monitor. > > > > The also has to use the reserved memory through the > > CMA pool rather than by open coding a memory region and > > remapping it explicitly in the driver. To achieve this, > > a reserved-memory node must exist in the root of the > > device tree, so we need to pull that out of the > > motherboard .dtsi include files, and push it into each > > top-level device tree instead. > > > > We do the same manouver for all the Versatile Express > > boards, taking into account the different location of the > > video RAM depending on which chip select is used on > > each platform. > > > > This plays nicely with the new PL111 DRM driver and > > follows the standard ways of assigning bridges and > > memory pools for graphics. > > > > Cc: Sudeep Holla <sudeep.holla@arm.com> > > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > > Cc: Liviu Dudau <liviu.dudau@arm.com> > > Cc: Mali DP Maintainers <malidp@foss.arm.com> > > Cc: Robin Murphy <robin.murphy@arm.com> > > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > > --- > > ChangeLog v3->v4: > > - Fix the ARM and ARM64 shared vexpress-v2m-rc1.dtsi > > file address-cells etc so that the ports do not give > > DTC warnings anymore. > > Still get below warnings, not sure if I need to upgrade my DTC ? > > vexpress-v2f-1xv7-ca53x2.dtb: Warning (graph_child_address): > /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: > graph node has single child node 'port@0', #address-cells/#size-cells > are not necessary > rtsm_ve-aemv8a.dtb: Warning (graph_child_address): > /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: > graph node has single child node 'port@0', #address-cells/#size-cells > are not necessary > > > - Fixed up the CA53 DTS: use the right chip select base > > at 0x18000000. > > I really hate this as it make maintenance difficult, but I don't have > good alternative, so I am fine as it is for now :) > > > - Fixed up the Real-Time Systems Models Virtual Executive > > RTSMv8 AEM VE: > > - Added the I2C interface (whether implemented in the > > emulator or not) > > It doesn't work. This change is breaking the working CLCD on the models. > I just tested and CLCD driver returns > > > - Fixed the chip select of the memory node to the right > > memory base 0x18000000. > > See, this keeps happening. > > Anyways I think you can drop RTSM changes if models don't support I2C > and DVI. > > Liviu, Hi Sudeep, > > As you deal with DRM drivers and I have no knowledge in that domain, > I want to hear your feedback or Ack/Review ? I was testing last week the previous version of the patchset but run into the issue with my toolchain having the new binutils that generates invalid code for THUMB2 kernels, so it took me a while to find that one out. For a VExpress that has a TC2 CoreTile, the HDLCD driver fails to load because the DT doesn't have the right "port" node, which is something I need to fix, but then we need to make sure we can switch outputs to the CoreTile and that is where I got to until now, due to some other commitments. Otherwise, provided Linus has a fix for the issues you've raised, I have nothing against these patches being merged, so if you need them: Acked-by: Liviu Dudau <liviu.dudau@arm.com> Best regards, Liviu > > -- > -- > Regards, > Sudeep
On 10/07/18 10:46, Sudeep Holla wrote: > > On 09/07/18 08:52, Linus Walleij wrote: [...] > > Still get below warnings, not sure if I need to upgrade my DTC ? > > vexpress-v2f-1xv7-ca53x2.dtb: Warning (graph_child_address): > /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: > graph node has single child node 'port@0', #address-cells/#size-cells > are not necessary > rtsm_ve-aemv8a.dtb: Warning (graph_child_address): > /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: > graph node has single child node 'port@0', #address-cells/#size-cells > are not necessary > Ignore this as it's hard to fix. If you fix this you will get 10 other warnings elsewhere, not sure why. [...] >> - Fixed up the Real-Time Systems Models Virtual Executive >> RTSMv8 AEM VE: >> - Added the I2C interface (whether implemented in the >> emulator or not) > > It doesn't work. This change is breaking the working CLCD on the models. > I just tested and CLCD driver returns > It even fails to initialize CLCD on my TC2. clcd-pl11x 1c1f0000.clcd: PL111 designer 41 rev1 at 0x1c1f0000 clcd-pl11x: probe of 1c1f0000.clcd failed with error -2
On 13/07/18 10:50, Sudeep Holla wrote: >> It doesn't work. This change is breaking the working CLCD on the models. >> I just tested and CLCD driver returns >> > > It even fails to initialize CLCD on my TC2. > > clcd-pl11x 1c1f0000.clcd: PL111 designer 41 rev1 at 0x1c1f0000 > clcd-pl11x: probe of 1c1f0000.clcd failed with error -2 FWIW the same happens on PB-A8; looks like converting to OF graph bindings falls foul of the "panel-dpi" check in clcdfb_of_get_mode(). Robin.
On Tue, Jul 10, 2018 at 11:46 AM Sudeep Holla <sudeep.holla@arm.com> wrote: > On 09/07/18 08:52, Linus Walleij wrote: > Still get below warnings, not sure if I need to upgrade my DTC ? > > vexpress-v2f-1xv7-ca53x2.dtb: Warning (graph_child_address): > /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: > graph node has single child node 'port@0', #address-cells/#size-cells > are not necessary > rtsm_ve-aemv8a.dtb: Warning (graph_child_address): > /smb@8000000/motherboard/iofpga@3,00000000/i2c@160000/dvi-transmitter@39/ports: > graph node has single child node 'port@0', #address-cells/#size-cells > are not necessary Yeah I looked at it as you said I decided to drop the amendments and I'm just ever more confused. > > - Fixed up the CA53 DTS: use the right chip select base > > at 0x18000000. > > I really hate this as it make maintenance difficult, but I don't have > good alternative, so I am fine as it is for now :) Yeah :/ I wish I could fix this but the changes are already daunting and scary as they are without going in and trying to fix how the CMA DMA allocator does its job as well (I admit I am scared of that code). > > - Fixed up the Real-Time Systems Models Virtual Executive > > RTSMv8 AEM VE: > > - Added the I2C interface (whether implemented in the > > emulator or not) > > It doesn't work. This change is breaking the working CLCD on the models. > I just tested and CLCD driver returns Yeah not surprised... with QEMU I had to go in and add the I2C bridge as it was not modeled. I think the solution is to add a "simple" panel without bridge for this as it is properly modeling what the hardware in the RTSM looks like. Looking into it. > > - Fixed the chip select of the memory node to the right > > memory base 0x18000000. > > See, this keeps happening. Yeah, I looked them over again and again, it gets wrong because I put a human to do a machine's job... The chipselect setting is in a non-obvious place in one file and the base that corresponds to in a different file and it gets a bit confused. I hope I have them all right now. Yours, Linus Walleij
On Fri, Jul 13, 2018 at 1:44 PM Robin Murphy <robin.murphy@arm.com> wrote: > On 13/07/18 10:50, Sudeep Holla wrote: > >> It doesn't work. This change is breaking the working CLCD on the models. > >> I just tested and CLCD driver returns > >> > > > > It even fails to initialize CLCD on my TC2. > > > > clcd-pl11x 1c1f0000.clcd: PL111 designer 41 rev1 at 0x1c1f0000 > > clcd-pl11x: probe of 1c1f0000.clcd failed with error -2 > > FWIW the same happens on PB-A8; looks like converting to OF graph > bindings falls foul of the "panel-dpi" check in clcdfb_of_get_mode(). That is from the old FB drivers, the defconfig changes in patch 2,3 need to be applied in lockstep with this patch. Then it "should work" (alas I only tested PB-A8 on QEMU, which I modified to hopefully properly model the DVI bridge). Yours, Linus Walleij
diff --git a/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi index 4488c8fe213a..a9569d15de41 100644 --- a/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi +++ b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi @@ -43,11 +43,6 @@ bank-width = <4>; }; - v2m_video_ram: vram@2,00000000 { - compatible = "arm,vexpress-vram"; - reg = <2 0x00000000 0x00800000>; - }; - ethernet@2,02000000 { compatible = "smsc,lan9118", "smsc,lan9115"; reg = <2 0x02000000 0x10000>; @@ -223,13 +218,24 @@ v2m_i2c_dvi: i2c@160000 { compatible = "arm,versatile-i2c"; reg = <0x160000 0x1000>; - #address-cells = <1>; #size-cells = <0>; dvi-transmitter@39 { compatible = "sil,sii9022-tpi", "sil,sii9022"; reg = <0x39>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + dvi_bridge_in: endpoint { + remote-endpoint = <&clcd_pads>; + }; + }; + }; }; dvi-transmitter@60 { @@ -260,37 +266,16 @@ interrupts = <14>; clocks = <&v2m_oscclk1>, <&smbclk>; clock-names = "clcdclk", "apb_pclk"; - memory-region = <&v2m_video_ram>; - max-memory-bandwidth = <50350000>; /* 16bpp @ 25.175MHz */ + /* 800x600 16bpp @36MHz works fine */ + max-memory-bandwidth = <54000000>; + memory-region = <&vram>; port { - v2m_clcd_pads: endpoint { - remote-endpoint = <&v2m_clcd_panel>; + clcd_pads: endpoint { + remote-endpoint = <&dvi_bridge_in>; arm,pl11x,tft-r0g0b0-pads = <0 8 16>; }; }; - - panel { - compatible = "panel-dpi"; - - port { - v2m_clcd_panel: endpoint { - remote-endpoint = <&v2m_clcd_pads>; - }; - }; - - panel-timing { - clock-frequency = <25175000>; - hactive = <640>; - hback-porch = <40>; - hfront-porch = <24>; - hsync-len = <96>; - vactive = <480>; - vback-porch = <32>; - vfront-porch = <11>; - vsync-len = <2>; - }; - }; }; }; diff --git a/arch/arm/boot/dts/vexpress-v2m.dtsi b/arch/arm/boot/dts/vexpress-v2m.dtsi index 4db42f6326a3..fd42e1194179 100644 --- a/arch/arm/boot/dts/vexpress-v2m.dtsi +++ b/arch/arm/boot/dts/vexpress-v2m.dtsi @@ -43,11 +43,6 @@ bank-width = <4>; }; - v2m_video_ram: vram@3,00000000 { - compatible = "arm,vexpress-vram"; - reg = <3 0x00000000 0x00800000>; - }; - ethernet@3,02000000 { compatible = "smsc,lan9118", "smsc,lan9115"; reg = <3 0x02000000 0x10000>; @@ -223,13 +218,37 @@ v2m_i2c_dvi: i2c@16000 { compatible = "arm,versatile-i2c"; reg = <0x16000 0x1000>; - #address-cells = <1>; #size-cells = <0>; dvi-transmitter@39 { compatible = "sil,sii9022-tpi", "sil,sii9022"; reg = <0x39>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + /* + * Both the core tile and the motherboard routes their output + * pads to this transmitter. The motherboard system controller + * can select one of them as input using a mux register in + * "arm,vexpress-muxfpga". The Vexpress with the CA9 core tile is + * the only platform with this specific set-up. + */ + port@0 { + reg = <0>; + dvi_bridge_in_ct: endpoint { + remote-endpoint = <&clcd_pads_ct>; + }; + }; + port@1 { + reg = <1>; + dvi_bridge_in_mb: endpoint { + remote-endpoint = <&clcd_pads_mb>; + }; + }; + }; }; dvi-transmitter@60 { @@ -253,6 +272,7 @@ reg-shift = <2>; }; + clcd@1f000 { compatible = "arm,pl111", "arm,primecell"; reg = <0x1f000 0x1000>; @@ -260,37 +280,16 @@ interrupts = <14>; clocks = <&v2m_oscclk1>, <&smbclk>; clock-names = "clcdclk", "apb_pclk"; - memory-region = <&v2m_video_ram>; - max-memory-bandwidth = <50350000>; /* 16bpp @ 25.175MHz */ + /* 800x600 16bpp @36MHz works fine */ + max-memory-bandwidth = <54000000>; + memory-region = <&vram>; port { - v2m_clcd_pads: endpoint { - remote-endpoint = <&v2m_clcd_panel>; + clcd_pads_mb: endpoint { + remote-endpoint = <&dvi_bridge_in_mb>; arm,pl11x,tft-r0g0b0-pads = <0 8 16>; }; }; - - panel { - compatible = "panel-dpi"; - - port { - v2m_clcd_panel: endpoint { - remote-endpoint = <&v2m_clcd_pads>; - }; - }; - - panel-timing { - clock-frequency = <25175000>; - hactive = <640>; - hback-porch = <40>; - hfront-porch = <24>; - hsync-len = <96>; - vactive = <480>; - vback-porch = <32>; - vfront-porch = <11>; - vsync-len = <2>; - }; - }; }; }; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts index 3971427a105b..0dc4277d5f8b 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts @@ -53,6 +53,20 @@ reg = <0 0x80000000 0 0x40000000>; }; + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + /* Chipselect 2 is physically at 0x18000000 */ + vram: vram@18000000 { + /* 8 MB of designated video RAM */ + compatible = "shared-dma-pool"; + reg = <0 0x18000000 0 0x00800000>; + no-map; + }; + }; + hdlcd@2b000000 { compatible = "arm,hdlcd"; reg = <0 0x2b000000 0 0x1000>; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts index ac6b90e9d806..a5136b1adaa2 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts @@ -104,6 +104,20 @@ reg = <0 0x80000000 0 0x40000000>; }; + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + /* Chipselect 2 is physically at 0x18000000 */ + vram: vram@18000000 { + /* 8 MB of designated video RAM */ + compatible = "shared-dma-pool"; + reg = <0 0x18000000 0 0x00800000>; + no-map; + }; + }; + wdt@2a490000 { compatible = "arm,sp805", "arm,primecell"; reg = <0 0x2a490000 0 0x1000>; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts index e5b4a7570a01..d5b47d526f9e 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts @@ -55,6 +55,20 @@ reg = <0x80000000 0x40000000>; }; + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + /* Chipselect 2 is physically at 0x18000000 */ + vram: vram@18000000 { + /* 8 MB of designated video RAM */ + compatible = "shared-dma-pool"; + reg = <0x18000000 0x00800000>; + no-map; + }; + }; + hdlcd@2a110000 { compatible = "arm,hdlcd"; reg = <0x2a110000 0x1000>; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca9.dts b/arch/arm/boot/dts/vexpress-v2p-ca9.dts index 7ec3dac1f61d..7f019e0eee84 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca9.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca9.dts @@ -69,6 +69,20 @@ reg = <0x60000000 0x40000000>; }; + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + /* Chipselect 3 is physically at 0x4c000000 */ + vram: vram@4c000000 { + /* 8 MB of designated video RAM */ + compatible = "shared-dma-pool"; + reg = <0x4c000000 0x00800000>; + no-map; + }; + }; + clcd@10020000 { compatible = "arm,pl111", "arm,primecell"; reg = <0x10020000 0x1000>; @@ -76,36 +90,15 @@ interrupts = <0 44 4>; clocks = <&oscclk1>, <&oscclk2>; clock-names = "clcdclk", "apb_pclk"; - max-memory-bandwidth = <130000000>; /* 16bpp @ 63.5MHz */ + /* 1024x768 16bpp @65MHz */ + max-memory-bandwidth = <95000000>; port { - clcd_pads: endpoint { - remote-endpoint = <&clcd_panel>; + clcd_pads_ct: endpoint { + remote-endpoint = <&dvi_bridge_in_ct>; arm,pl11x,tft-r0g0b0-pads = <0 8 16>; }; }; - - panel { - compatible = "panel-dpi"; - - port { - clcd_panel: endpoint { - remote-endpoint = <&clcd_pads>; - }; - }; - - panel-timing { - clock-frequency = <63500127>; - hactive = <1024>; - hback-porch = <152>; - hfront-porch = <48>; - hsync-len = <104>; - vactive = <768>; - vback-porch = <23>; - vfront-porch = <3>; - vsync-len = <4>; - }; - }; }; memory-controller@100e0000 { diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts index 602f63f72c37..97d961461143 100644 --- a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts +++ b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts @@ -78,6 +78,20 @@ <0x00000008 0x80000000 0 0x80000000>; }; + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + /* Chipselect 2,00000000 is physically at 0x18000000 */ + vram: vram@18000000 { + /* 8 MB of designated video RAM */ + compatible = "shared-dma-pool"; + reg = <0x00000000 0x18000000 0 0x00800000>; + no-map; + }; + }; + gic: interrupt-controller@2c001000 { compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; #interrupt-cells = <3>; diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi index d2dbc3f39263..fd173f9308f5 100644 --- a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi +++ b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi @@ -24,11 +24,6 @@ bank-width = <4>; }; - v2m_video_ram: vram@2,00000000 { - compatible = "arm,vexpress-vram"; - reg = <2 0x00000000 0x00800000>; - }; - ethernet@2,02000000 { compatible = "smsc,lan91c111"; reg = <2 0x02000000 0x10000>; @@ -172,6 +167,31 @@ clock-names = "timclken1", "timclken2", "apb_pclk"; }; + /* DVI I2C bus */ + v2m_i2c_dvi: i2c@160000 { + compatible = "arm,versatile-i2c"; + reg = <0x160000 0x1000>; + + #address-cells = <1>; + #size-cells = <0>; + + dvi-transmitter@39 { + compatible = "sil,sii9022-tpi", "sil,sii9022"; + reg = <0x39>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + port@0 { + reg = <0>; + dvi_bridge_in: endpoint { + remote-endpoint = <&clcd_pads>; + }; + }; + }; + }; + }; + rtc@170000 { compatible = "arm,pl031", "arm,primecell"; reg = <0x170000 0x1000>; @@ -187,38 +207,16 @@ interrupts = <14>; clocks = <&v2m_oscclk1>, <&v2m_clk24mhz>; clock-names = "clcdclk", "apb_pclk"; - arm,pl11x,framebuffer = <0x18000000 0x00180000>; - memory-region = <&v2m_video_ram>; - max-memory-bandwidth = <130000000>; /* 16bpp @ 63.5MHz */ + /* 800x600 16bpp @36MHz works fine */ + max-memory-bandwidth = <54000000>; + memory-region = <&vram>; port { - v2m_clcd_pads: endpoint { - remote-endpoint = <&v2m_clcd_panel>; + clcd_pads: endpoint { + remote-endpoint = <&dvi_bridge_in>; arm,pl11x,tft-r0g0b0-pads = <0 8 16>; }; }; - - panel { - compatible = "panel-dpi"; - - port { - v2m_clcd_panel: endpoint { - remote-endpoint = <&v2m_clcd_pads>; - }; - }; - - panel-timing { - clock-frequency = <63500127>; - hactive = <1024>; - hback-porch = <152>; - hfront-porch = <48>; - hsync-len = <104>; - vactive = <768>; - vback-porch = <23>; - vfront-porch = <3>; - vsync-len = <4>; - }; - }; }; virtio-block@130000 { diff --git a/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts b/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts index 38880380e0fa..8981c3d2ff18 100644 --- a/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts +++ b/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts @@ -65,6 +65,20 @@ reg = <0 0x80000000 0 0x80000000>; /* 2GB @ 2GB */ }; + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + /* Chipselect 2 is physically at 0x18000000 */ + vram: vram@18000000 { + /* 8 MB of designated video RAM */ + compatible = "shared-dma-pool"; + reg = <0 0x18000000 0 0x00800000>; + no-map; + }; + }; + gic: interrupt-controller@2c001000 { compatible = "arm,gic-400"; #interrupt-cells = <3>;
The Versatile Express was submitted with the actual display bridges unconnected (but defined in the device tree) and mock "panels" encoded in the device tree node of the PL111 controller. This doesn't even remotely describe the actual Versatile Express hardware. Exploit the SiI9022 bridge by connecting the PL111 pads to it, making it use EDID or fallback values to drive the monitor. The also has to use the reserved memory through the CMA pool rather than by open coding a memory region and remapping it explicitly in the driver. To achieve this, a reserved-memory node must exist in the root of the device tree, so we need to pull that out of the motherboard .dtsi include files, and push it into each top-level device tree instead. We do the same manouver for all the Versatile Express boards, taking into account the different location of the video RAM depending on which chip select is used on each platform. This plays nicely with the new PL111 DRM driver and follows the standard ways of assigning bridges and memory pools for graphics. Cc: Sudeep Holla <sudeep.holla@arm.com> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Liviu Dudau <liviu.dudau@arm.com> Cc: Mali DP Maintainers <malidp@foss.arm.com> Cc: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- ChangeLog v3->v4: - Fix the ARM and ARM64 shared vexpress-v2m-rc1.dtsi file address-cells etc so that the ports do not give DTC warnings anymore. - Fixed up the CA53 DTS: use the right chip select base at 0x18000000. - Fixed up the Real-Time Systems Models Virtual Executive RTSMv8 AEM VE: - Added the I2C interface (whether implemented in the emulator or not) - Fixed the chip select of the memory node to the right memory base 0x18000000. - Add right address-cells and size-cells to the vexpress-v2m.dtsi dvi port as well. - Create two endpoints for the motherboard and the core tile in the vexpress-v2m.dtsi. This is just used by the CA9 VExpress. Tested on both QEMU and the actual hardware with the DRM driver. This removes the last warnings from the DTC. ChangeLog v2->v3: - Add some reg = <0>; to the ports to make the DTC happy. - Add reserved memory node to arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts as well. ChangeLog v1->v2: - Fix up the memory address for the -rs1 tiles to 0x18000000 - Drop a bunch of extraneous reg props from the DVI adapter --- arch/arm/boot/dts/vexpress-v2m-rs1.dtsi | 49 +++++---------- arch/arm/boot/dts/vexpress-v2m.dtsi | 63 +++++++++---------- arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts | 14 +++++ arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts | 14 +++++ arch/arm/boot/dts/vexpress-v2p-ca5s.dts | 14 +++++ arch/arm/boot/dts/vexpress-v2p-ca9.dts | 43 ++++++------- arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts | 14 +++++ .../boot/dts/arm/rtsm_ve-motherboard.dtsi | 62 +++++++++--------- .../boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts | 14 +++++ 9 files changed, 166 insertions(+), 121 deletions(-)