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

From postmarketOS Wiki

< 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:

commits to be merged into 5.8 (in linux-next for now):

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 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/mem_size 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/mem_type 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/ecc 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/dump_oops 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/console_size 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/ftrace_size 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/pmsg_size 
/sys/fs/pstore # cat /sys/module/ramoops/parameters/record_size 

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

Welcome to minicom 2.7
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
Avoid flicking for 2160x1080 images 
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
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.
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
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/).