Qualcomm Snapdragon 820/821 (MSM8996)

From postmarketOS
Jump to navigation Jump to search
Qualcomm MSM8996
[[|200px|alt=]]
Manufacturer Qualcomm
Name MSM8996
Codenames msmthulium/apqthulium
Architecture aarch64
CPU 2x 2.2/2.3 GHz Kryo, 2x 1.6 GHz Kryo
GPU Adreno 530
Year 2016
Process 14nm
Mainline yes
Components
CPU
Partial
UART
Works
Storage
Partial
USB
Works
Display
Works
GPU
Works
Pinctrl
Works
I²C
Works
Audio
Works
Video
Thermal
Works
WiFi
Unavailable
Bluetooth
Unavailable
Modem
GPS
Camera
Suspend


MSM8996/APQ8096 (or Snapdragon 820) is a Qualcomm SoC released in 2016, with great mainline support orginally added for the Dragonboard 820c. There is also a slightly higher clocked (and supposedly less problematic architecture-wise) MSM8996Pro also known as Snapdragon 821.

Devices

APQ8096(SG) (Snapdragon 820E, WiFi-only)

No results

MSM8996 (Snapdragon 820)

Device Codename Mainline
HTC 10 htc-pme
Lenovo ZUK Z2 plus zuk-z2-plus
Lenovo ZUK Z2 Pro zuk-z2-row

MSM8996Pro (Snapdragon 821)

Device Codename Mainline
LG G6 lg-h870
OnePlus 3/3T oneplus-oneplus3t Y
Xiaomi Mi Note 2 xiaomi-scorpio Y

Booting

On at least the Xiaomi Mi Note 2, some IOMMU hacks (1, 2) are needed to let it to boot properly. Otherwise it would crash and reboot as soon as the MDP SMMU is probed.

Display

Mainline is missing DSI device tree nodes at the moment but there are patches that add them, one of which is in the SoC common mainline fork, and another one is in the mailing lists. Picking one of these patches and adding a panel node (and a driver if not supported yet) should be all that's needed to bring the display up.

A better starting point however would be to add a simple framebuffer that makes use of the framebuffer setup by the bootloader for continuous splash. This also allows getting some kernel output on the display earlier in the boot process. You can find the memory address of this framebuffer in a reserved memory node named cont_splash_mem or similar in downstream dts.

USB

Enabling usb3 or usb2 depending on which one the USB port is connected to should be enough to make USB work, although forcing it to peripheral mode might be needed before adding support for extcon:

MSM8996 USB peripheral mode configuration

&usb3 {
	...

	dwc3@6a00000 {
 	 	dr_mode = "peripheral";
 	 	...
	};
};

Some devices have a USB 2.0 port wired to usb3. In this case it must be limited to high-speed and have usb3phy removed from it:

MSM8996 USB 2.0 configuration

&usb3 {
	/* Disable USB3 pipe_clk requirement */
	qcom,select-utmi-as-pipe-clk;
	...

	dwc3@6a00000 {
		/* usb3-phy is not used on this device */
		phys = <&hsusb_phy1>;
		phy-names = "usb2-phy";

		/* Limit USB to high-speed */
		maximum-speed = "high-speed";
		...
	};
};

Haptics

Haptics are supported, see Haptics for more details.

See also

Who's working on it

Please add yourself if you're working on MSM8996 mainlining!