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 0xC264000 you should grep DTS files for "qcom,pshold" and take reg address from there (or grep for "restart@" and take address after @): sdm660_f7a.dtsi L493, so 0x10ac000. 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/).