From: Rob Clark <robdclark(a)chromium.org>
Now that we can deal gracefully with bootloader (firmware) initialized
display on aarch64 laptops[1], the next step is to deal with the fact
that the same model of laptop can have one of multiple different panels.
(For the yoga c630 that I have, I know of at least two possible panels,
there might be a third.)
This is actually a scenario that comes up frequently in phones and
tablets as well, so it is useful to have an upstream solution for this.
The basic idea is to add a 'panel-id' property in dt chosen node, and
use that to pick the endpoint we look at when loading the panel driver,
e.g.
/ {
chosen {
panel-id = <0xc4>;
};
ivo_panel {
compatible = "ivo,m133nwf4-r0";
power-supply = <&vlcm_3v3>;
no-hpd;
ports {
port {
ivo_panel_in_edp: endpoint {
remote-endpoint = <&sn65dsi86_out_ivo>;
};
};
};
};
boe_panel {
compatible = "boe,nv133fhm-n61";
power-supply = <&vlcm_3v3>;
no-hpd;
ports {
port {
boe_panel_in_edp: endpoint {
remote-endpoint = <&sn65dsi86_out_boe>;
};
};
};
};
sn65dsi86: bridge@2c {
compatible = "ti,sn65dsi86";
...
ports {
#address-cells = <1>;
#size-cells = <0>;
...
port@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
endpoint@c4 {
reg = <0xc4>;
remote-endpoint = <&boe_panel_in_edp>;
};
endpoint@c5 {
reg = <0xc5>;
remote-endpoint = <&ivo_panel_in_edp>;
};
};
};
}
};
Note that the panel-id is potentially a sparse-int. The values I've
seen so far on aarch64 laptops are:
* 0xc2
* 0xc3
* 0xc4
* 0xc5
* 0x8011
* 0x8012
* 0x8055
* 0x8056
At least on snapdragon aarch64 laptops, they can be any u32 value.
However, on these laptops, the bootloader/firmware is not populating the
chosen node, but instead providing an "UEFIDisplayInfo" variable, which
contains the panel id. Unfortunately EFI variables are only available
before ExitBootServices, so the second patch checks for this variable
before EBS and populates the /chosen/panel-id variable.
[1] https://patchwork.freedesktop.org/series/63001/
Rob Clark (4):
dt-bindings: chosen: document panel-id binding
efi/libstub: detect panel-id
drm: add helper to lookup panel-id
drm/bridge: ti-sn65dsi86: use helper to lookup panel-id
Documentation/devicetree/bindings/chosen.txt | 69 ++++++++++++++++++++
drivers/firmware/efi/libstub/arm-stub.c | 49 ++++++++++++++
drivers/firmware/efi/libstub/efistub.h | 2 +
drivers/firmware/efi/libstub/fdt.c | 9 +++
drivers/gpu/drm/bridge/ti-sn65dsi86.c | 5 +-
drivers/gpu/drm/drm_of.c | 21 ++++++
include/drm/drm_of.h | 7 ++
7 files changed, 160 insertions(+), 2 deletions(-)
--
2.20.1
From: Rob Clark <robdclark(a)chromium.org>
The aarch64 laptops which ship with windows, have the display by the
bootloader, and efifb (yah!). But unlike x86 laptops, device power
management isn't handled via ACPI[1]. Currently the CCF and genpd
frameworks will turn off power domains and clocks that they think are
unused. This is rather unfortunate, as it kills efifb scanout before
getting to userspace and getting to the point where we can try to
probe the real display driver.
Also it has a few side-effects in that we can't set rate on running
clocks (in many cases).
The first two patches let us flag clocks and power domains which
might have been enabled by the bootloader, so we know not to disable
them in late_initcall.
The next two update drm/msm to cleanly shut down clocks which might
already be running. *Eventually* we'll want to detect that scanout
is already running, and readback the hw state, to avoid briefly
disabling the screen while the driver loads. But that is a big pile
of (mostly) drm/msm work. (Windows also seems to have this problem,
it appears to do a modeset during boot.. so I guess the first step
is to at least not suck more than windows ;-))
The last patch updates the bridge driver to handle the case where
display is already active. (AFAICT it is the same bridge chip used
so far on all the aarch64 laptops.) Because the bridge driver can
be probed before the drm driver, and in fact you might end up with
a bridge driver but no drm driver, care must be taken to not disable
the bridge until the drm driver is ready to go, so:
* Request enable gpio ASIS to avoid pulling down the enable
gpio
* Defer enabling runpm in the case that the bridge is already
running until bridge->attach(). This is a point where we
know the drm driver is ready to do a modeset.
(There are a couple related cleanups in drm/msm to avoid touching
the hw until we are past the point where we might -EPROBE_DEFER[2]
which I sent seperately as they are probably interesting to fewer
people.)
This has been tested on a lenovo yoga c630. I've a wip/c630 branch[3]
with this and various other work-in-progress stuff for this laptop.
Next step, figuring out how to pick the proper panel driver, from
the two or three possibilites that ship on this laptop ;-)
[1] On windows, they use a "Platform Extension Plugin" (PEP) driver
[2] https://patchwork.freedesktop.org/series/62999/
[3] https://github.com/freedreno/kernel-msm/commits/wip/c630
Rob Clark (5):
clk: inherit clocks enabled by bootloader
genpd/gdsc: inherit display powerdomain from bootloader
drm/msm/dsi: split clk rate setting and enable
drm/msm/dsi: get the clocks into OFF state at init
drm/bridge: ti-sn65dsi86: support booloader enabled display
drivers/base/power/domain.c | 10 ++++
drivers/clk/clk.c | 48 +++++++++++++++++++
drivers/clk/qcom/common.c | 25 ++++++++++
drivers/clk/qcom/dispcc-sdm845.c | 24 +++++-----
drivers/clk/qcom/gcc-sdm845.c | 3 +-
drivers/clk/qcom/gdsc.c | 5 ++
drivers/clk/qcom/gdsc.h | 1 +
drivers/gpu/drm/bridge/ti-sn65dsi86.c | 12 ++++-
drivers/gpu/drm/msm/dsi/dsi.h | 2 +
drivers/gpu/drm/msm/dsi/dsi_cfg.c | 3 ++
drivers/gpu/drm/msm/dsi/dsi_cfg.h | 1 +
drivers/gpu/drm/msm/dsi/dsi_host.c | 56 +++++++++++++++++-----
drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c | 1 +
include/linux/clk-provider.h | 10 ++++
include/linux/pm_domain.h | 4 ++
15 files changed, 178 insertions(+), 27 deletions(-)
--
2.20.1
Hi All,
My notes from talking to Lee this week
--------------------------------------
+ latest laptop kernel is the Master branch here:
+ https://github.com/aarch64-laptops/linux
+ kernel 5.3 looking good wrt ACPI:
+ UFS and I2C has been accepted.
+ a patch to avoid booting with acpi=force also accepted.
+ Leif has a working DTB loader V2. Lee is going to try this out.
+ Jobs list has been updated there:
https://github.com/aarch64-laptops/build/blob/master/README.md
best regards,
Richard
--
Richard.Henwood(a)arm.com
Server Software Eco-System
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
hi All,
Mailing list created! Welcome all!
My notes from talking to Lee this week
--------------------------------------
- ACPI:
- UFS patches have been sent upstream.
- With a patch, battery and AC power detection work!
- General
- It seems ISO9660 images will boot, but only from USB 3.1 dev.
- Unable to reproduce the trackpad problems - it works fine now.
- Maybe this is because of a firmware update?
Distros:
- Ubuntu
- 18.04: missing grub 4k alignment patch.
- 19.04: boots to grub, kernel does not boot.
- Leif's
- openSUSE
- missing grub 4k alignment patch.
- Fedora Rawhide
- grub boots. Installer hangs with '_' (see below)
Open task items for this week's update
--------------------------------------
Please ping this list to share your interest in items so we can avoid
duplication of effort.
- Linux support for ACPI PNP0D80 (PEP)
- The PNP0D80 is a System Power Management Controller
- Very little support resides in Linux at the moment
- Thus no ACPI Power Management can currently take place
- Accelerated Graphics also depends on it
- UEFI Boot Variables investigation
- Grub fails to manipulate them during install
- Is it possible for Linux to change them at run-time?
- DMA crash investigation
- CRASH IMAGE: https://photos.app.goo.gl/2MGJEALZMyoowr9d6
- HACK PATCH: https://tinyurl.com/y5cnln2j
- Upstream Kernel ACPI check
- ACPI tables incorrectly advertise themselves as v5.0
- Kernel should check the presence of PSCI instead
- PATCH: https://tinyurl.com/yyq76m47
- NB: Assuming Ard will handle this - needs to be done soon
- Upstream ACPI Battery and AC Power support
- Simply a matter of not depending on CONFIG_X86
- PATCH: https://tinyurl.com/yx9kf7e8
- NB: Assuming Ard will handle this - needs to be done soon
- Debug Fedora Rawhide
- Kernel currently boots to a black screen with white '_'
- NB: Assuming Peter will handle this
- Create UEFI module for persistently loading DTB
- We have one which handles this for a single boot
- NB: Assuming Leif will handle this
- Test ISO9660 based installers booting from USB
- Must be done by someone who has not updated Windows
- Fedora Rawhide ISO is a good image to use for testing
- LINK: https://tinyurl.com/y2l6bvp9
- If it boots to the Fedora (Grub) menu, it works
- Current belief is that USB 3.1 sticks are required
- Need to test USB 2.0 and 3.0 sticks too
- Create and upstream a Live Arch Linux ISO/installer for AArch64
- AArch64 support is provided by copying a pre-built roofs to UFS
- This is clunky and needs a proper installer like other distos
- Get in touch with Richard Henwood directly if you can help.
best regards,
Richard
PS. Don't forget to visit #aarch64-laptops on freenode IRC.
--
Richard.Henwood(a)arm.com
Server Software Eco-System
Tel: +1 512 410 9612
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.