Xiaomi Redmi Note 7 (xiaomi-lavender)/Mainline development

< Xiaomi_Redmi_Note_7_(xiaomi-lavender)

Mainline Linux
Patches were sent for review with initial mainline support for sdm660/lavender: https://patchwork.kernel.org/project/linux-arm-msm/list/?series=240549

commits merged in 5.6:
 * dt-bindings: Add vendor prefix for Xiaomi
 * dt-bindings: arm: Add kryo260 compatible

commits to be merged into 5.8 (in linux-next for now):
 * dt-bindings: arm: qcom: Add sdm630 and sdm660 SoCs
 * arm64: dts: qcom: Add SDM660 SoC support
 * arm64: dts: qcom: Add Xiaomi Redmi Note 7 (lavender)

Lineage OS ROMs/TWRP pstore-ramoops module parameters
/sys/fs/pstore # ls -la /sys/module/ramoops/parameters/ total 0 drwxr-xr-x   2 0        0                0 Jul 20 13:02. drwxr-xr-x   3 0        0                0 Jul 20 13:02 .. -r   1 0        0             4096 Jul 20 13:02 console_size -rw---   1 0        0             4096 Jul 20 13:02 dump_oops -rw---   1 0        0             4096 Jul 20 13:02 ecc -r   1 0        0             4096 Jul 20 13:02 ftrace_size -r   1 0        0             4096 Jul 20 13:02 mem_address -r   1 0        0             4096 Jul 20 13:02 mem_size -rw---   1 0        0             4096 Jul 20 13:02 mem_type -r   1 0        0             4096 Jul 20 13:02 pmsg_size -r   1 0        0             4096 Jul 20 13:02 record_size /sys/fs/pstore # cat /sys/module/ramoops/parameters/mem_address 2684354560 /sys/fs/pstore # cat /sys/module/ramoops/parameters/mem_size 4194304 /sys/fs/pstore # cat /sys/module/ramoops/parameters/mem_type 0 /sys/fs/pstore # cat /sys/module/ramoops/parameters/ecc 0 /sys/fs/pstore # cat /sys/module/ramoops/parameters/dump_oops 1 /sys/fs/pstore # cat /sys/module/ramoops/parameters/console_size 2097152 /sys/fs/pstore # cat /sys/module/ramoops/parameters/ftrace_size 0 /sys/fs/pstore # cat /sys/module/ramoops/parameters/pmsg_size 2097152 /sys/fs/pstore # cat /sys/module/ramoops/parameters/record_size 0

Force-reboot patch
Zhuowei's reboot patch works, but with different address of course: instead of  you should grep DTS files for   and take reg address from there (or grep for   and take address after @): sdm660_f7a.dtsi L493, so. Read msm-poweroff driver code for more info.

Example code: *((int *)ioremap(0x10ac000, 4)) = 0; // force-reboot by Zhuowei

Example bootloader UART output

 * https://paste.sr.ht/~minlexx/8da68fa1d63cf150f6db4f8ae5d1899863ca33a7

Welcome to minicom 2.7 OPTIONS: I18n Compiled on Jan 14 2020, 22:40:50. Port /dev/ttyUSB0, 23:37:13 Press CTRL-A Z for help on special keys UEFI Start    [  865] SEC PROD Mode  : On                         DEBUG Mode : On                          ASLR        : On                         Timer Delta : +6 mS                      RAM Entry 0 : Base 0x0000000040000000  Size 0x0000000060000000 RAM Entry 1 : Base 0x00000000A0000000 Size 0x000000005EAC0000 UEFI Ver   : 4.2.190808.BOOT.XF.1.4-00262-S660LZB-1 Build Info : 64b Aug  8 2019 23:13:56 Boot Device : eMMC DALLOG Device [0x2000145]: Cannot turn on source[ACPL Elapsed tick: 0x12BC54E, Wait tick: 0x36EE800 Elapsed tick: 0x12BCD19, Wait tick: 0x36EE800 ... repeated maaaaaaany times ... Elapsed tick: 0x369B23B, Wait tick: 0x36EE800 Setvariable returned Success IsPressPwrKeyOn: true zjl haptic_on zjl haptic_off [CheckPanel] panel reg[0xc] value: 0x00000007, uReponseSize:2 Panel_CDP_GetID: temp1 =0;temp2 =0 Display:f7a tianma nt36672a ! ReadKeyInternal: gEfiSimpleTextInputExProtocolGuid handles = 3 ReadKeyInternal: Read KEY = 0x102 bootstate = 0 PanelWidth=1080,PanelHeight=2340 ImageWidth=1080,ImageHeight=2160,LogoPosX=0,LogoPosY=90 Avoid flicking for 2160x1080 images PanelWidth=1080,PanelHeight=2340 Render Splash [ 3581] EnvDxe Render Callback LoadImageFromPartitionUsingGuid Failed: 14 Keymaster failed to load! Status = 0xE LoadSecureApps: Load app from partition(keymaster): Status = 0x0, AppId = 65537 APC1 IDDQ WC 0, L2:0, CPU[0]:175, CPU[1]:175, CPU[2]:175, CPU[3]:175 APC1 Total 700 Load CPU 0 Slp: 0x89, Int: 0x17 Load CPU 1 Slp: 0x1, Int: 0x0 Load CPU 2 Slp: 0xC1, Int: 0x1D Load CPU 3 Slp: 0x1, Int: 0x0 GLD IDDQ WC 0 CPU PART GOOD [0x0] SUB_BIN[0x0] - Platform Init [ 3746] BDS UEFI Ver  : 4.2.190808.BOOT.XF.1.4-00262-S660LZB-1 Platform  : MTP Chip Name : SDM660 Chip Ver  : 1.0 Core 0 Freq: 1382400 MHz - zjlz 3333 QcomChargerApp:: ChargerLib_Exit Error getting platform type UEFI Total : 2905 ms POST Time     [ 3770] OS Loader Loader Build Info: Aug 17 2019 11:55:58 VB: RWDeviceState: Succeed using rpmb! KeyPressed = (0x9CE65000) Reboot reason: 0 LAVENDER Platform version : 0x20000 Booting Into Mission Mode avb_slot_verify.c:432: DEBUG: Loading vbmeta struct from partition 'vbmeta'. Partition found: vbmeta avb_slot_verify.c:186: DEBUG: dtbo: Loading entire partition. Partition found: dtbo avb_slot_verify.c:186: DEBUG: boot: Loading entire partition. Partition found: boot State: Unlocked, AvbSlotVerify returned OK, continue boot VB2: Authenticate complete! boot state is: orange VB2: boot state: orange(1) Display menu is not enabled! Device is unlocked, Skipping boot verification VB2: BootState = 1 ReadKeyInternal: gEfiSimpleTextInputExProtocolGuid handles = 3 ReadKeyInternal: Read KEY = 0x0 bootstate = 4 var = UNLOCK splash update Cannot find GraphicsHandles. ImageWidth=1080,ImageHeight=2160,LogoPosX=0,LogoPosY=0 Avoid flicking for 2160x1080 images Cannot find GraphicsHandles. Render Splash [ 4360] VB2: RenderSplashScreen end, BootState = 4 No Ffbm cookie found, ignore: Not Found Memory Base Address: 0x40000000 Decompressing kernel image start: 4363 ms Decompressing kernel image done: 4803 ms smem protocol = 9C3020A0 board_id1 is 1 board_id2 is 1 board_id3 is 0 board_id is 1 get_boardid_from_smem,SUCCESS ,board_id=0x102,cpu_id=0x39148C8C,hwdefined=0 PON Reason is 128 cold_boot:1 charger path: 0 GetCheckPanelPressGuid:checkPanel = 0x1;Status:0x0 panel is Exist Error Locate MiToken Protocol: Error Reading the GetDebugPolicyFlagbuqshuai1 VB: readDebugPolicy: ScmSipSysCall Status: (0x7) Error Reading the GetDebugPolicyFlagbuqshuai2 Error Get DebugPolicy: Device Error DebugPolicyFlag: 0x0 Error Get DebugPolicy: CMDLINE: AsciiStrLen AsciiStrLen (DebugPolicyFlag); get_hwconfig_cmdline, board_id=0x102 get_hwconfig_cmdline, hwlevel=0x1 get_hwconfig_cmdline, maxcount=0x32 aaaaaa get_hwconfig_cmdline, i=0x1D Cmdline: console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc170000 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcdl RAM Partitions Add Base: 0x0000000040000000 Available Length: 0x0000000060000000 Add Base: 0x00000000A0000000 Available Length: 0x000000005EAC0000 WARNING: Could not find mem-offline node. kaslr-Seed is added to chosen node pureason = 40080 Shutting Down UEFI Boot Services: 5029 ms BDS: LogFs sync skipped, Unsupported App Log Flush : 2501 ms Exit BS       [ 7539] UEFI End

eMMC notes
@AlexeyMin seems that was the case, I did have UFS storage which required deviceinfo_rootfs_image_sector_size="4096" to be set

SDM660 has both SDHCI and UFS support, but lavender does not use UFS storage. That actually makes porting a little bit easier.

Wi-Fi notes
Wi-Fi chip is the same as used in sdm845 for example - Qualcomm Atheros wcn3990. In downstream driver is called iCNSS/qcacld-3.0. Mainline driver is ath10k together with ath10k_snoc (not ath10k_pci!) Activation is probably done from userspace using QMI (at least on downstream?) - Initial commit https://patchwork.kernel.org/patch/10220667/ - DTS part from sdm845 https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/sdm845.dtsi#L3283 - ath10k: add QMI message handshake for wcn3990 client https://github.com/torvalds/linux/commit/ba94c753ccb471bafe8bd824b744fda6fee0001e

Panel/touch notes
Panel used in lavender is Tianma NT36672A, which is the same used in xiaomi-beryllium (demo video), except for the resolution (more height for lavender, 2340 instead of 2246). The source code for the panel is pundiramit's branch in tianma-nt36672a.c file. According to the video touchscreen should be working too, but I can't find a source for it yet. Downstream has touchscreen in drivers/input/touchscreen/nvt_touch_f7a.

Beryllium commit that adds nt36xxx driver, copied almost as-is from downstream - https://github.com/Venji10/linux-beryllium/commit/075504c46b563a56998450e1975945589fcb5f26

Another one: https://github.com/rupansh/mainline-beryllium/commit/fc7e3775cda8f27e69e660740bc3947d6fc17d46

Also it seems like panel requires new type of regulators "LABIBB" (== LAB(LCD AMOLED Boost) / IBB(Inverting Buck Boost)) for which driver is not currently present in mainline (but there is a PR for that - https://patchwork.kernel.org/cover/11576211/).