I was planning to get a new phone with a great display, and that was exactly when RP2 went on sale. I'm otherwise satisfied with the phone, but single SIM is definitely a deal breaker in China. Given that I could not find any other phone matching my criteria, I decided to get the RP2 and tried to enable dual SIM on it. Till now I've had some success, and here is what I have done.
If you have strong demand for dual SIM like I do, you may try these steps. This thread, however, is NOT a proper nor complete guide on this topic. It is just a record of my trials - they are highly experimental, risky, and potentially broken. There is absolutely no guarantee on signal quality, stability, power consumption or even the success rate. Your device can be permanently damaged if any detail goes wrong. Make sure you understand all the risks and you are able to justify every command before typing it to your phone!
I do appreciate suggestions for the correct way, though. Comments are greatly welcomed!
My environment
QPST 2.7.477 - only PDC is used here, so any version with standalone PDC tool might do the job. But new versions required if you want to use other tools.
QXDM Professional 3.14.1144 - this one is optional. It's used to tweak some parameters, but dual SIM does work without the tweaks.
Qualcomm USB drivers 2.1.2.0 from 2015/7/8 - older versions might work as well.
Windows 10, 1803
arter97's kernel and Magisk-patched stock kernel images readily at hand. The latter can be obtained by patching a stock kernel image in Magisk Manager with "Keep dm-verity/avb 2.0" UNTICKED. I had the latter installed on the phone.
Make sure root shell can be obtained during boot with ALL kernel images. This is an important recovery approach if the phone bootloops.
Steps
I've gone through a tricky path to confirm that there is indeed a second IMEI in the phone prior to the steps, which supported follow-up researching. This thread will not cover this part as this is merely trial-and-error. I will provide suggestions on diag connection though.
1. make a backup of all partitions on the phone, leaving out system, vendor and userdata partitions of course. There are 88 partitions in my backup.
2. make a QCN backup of modem NV. This step could be optional as modemst1/2 has already been backed-up in previous step - I'm not sure about this, and have completed this step whatsoever.
3. make a backup of /vendor/etc/vintf/manifest.xml, and add slot2 instances to the following HALs:
4.
5. find any USB mode with rmnet in /vendor/etc/init/hw/init.msm.configfs.rc, and switch to it. I used "diag,serial_cdev,rmnet,dpl,adb", and that's
6. Windows shows a lot of new USB devices. Force-install Qualcomm WWAN driver for the RmNet device. I chose "Network Adapters -> Qualcomm -> Qualcomm HS-USB WWAN Adapter 90B8", but anything named after "Qualcomm HS-USB WWAN Adapter" should do.
7. open PDC. There are 3 dual SIM (DSDS) hardware profiles available:
The one with WP8 in its name can be ignored, and here comes the hard choice.
I tried the WD one in the first place: activated it in the context menu on Sub0 then Sub1, and clicked Activate twice. PDC complained about malformed packet after second click, and the profile was shown as Active on Sub0, and Pending on Sub1. Nothing bad happened after a reboot, regardless of the errors above. Two SIM slots were present in About Phone, and second IMEI is correctly shown there as well. Upon inserting two SIM cards I got dual VoLTE online, and everything behaved like a normal dual SIM SDM845 device. There were some little glitches though: once or twice a day signal bars disappeared and popped up again in a few seconds. Mobile data also stuttered at random times, though not frequent - sometimes mobile data was stable for the whole day. I was satisfied with the results, and made another backup of partitions.
Then I started comparing the WD and LA profiles. I quickly realized that LA marked the phone as DSDS while WD as SS in the device_mode NV entry (I honestly had no idea why dual SIM just worked with WD). There were other differences unknown to me, but LA seemed more "correct" and I decided to switch to this profile. After deactivating WD on both Sub0 and Sub1, I activated LA on Sub0 but not Sub1. The phone could still make use of two SIMs, but without VoLTE on either card. LTE was still available for both cards though. The glitches with WD were mostly gone (data still stuttered but recovered much faster), and the phone SEEMED cooler and battery SEEMED to drain slower.
Finally I could not understand the lack of VoLTE and switched back to WD (still Sub0 only). This time only the first SIM card could register on IMS/VoLTE. The second one registered on LTE but not IMS, regardless of default data card selection. Activating WD on Sub1 did not solve the problem. Manual checks/corrections on the differences between WD and LA made no effect either. I had to flash the backup made after first WD trial, and dual VoLTE worked again.
I came to the following conclusion after this step:
Any clarification on this step is appreciated. If you want to enable dual SIM, you have to make your own choice here. Just remember to backup before every change.
8. apply some NV changes from LA on WD base:
ue_usage_setting: from DATA_CENTRIC to VOICE_CENTRIC
device_mode: from SS to DSDS
disable_global_mode: from 1 to 0
I failed to find any difference after these changes. this step could be optional. I myself use the phone as daily driver with these changes though.
That's all. Don't worry, I'm confused as you
Everything just works or fails without any valid reason
Other Details
1. RP2 uses the same SIM card slot as Samsung. I filed an card tray from Samsung S7 so that it fits RP2. Its size naturally(
) fits RP2, just make it as thin as Razer's tray and it will work.
2. if you want to restore a modemst1/2 backup, do that in TWRP. If this needs to be done in Android system, stop vendor.rmt_storage first.
3. if the phone reboots to recovery right after booting to lock screen, this could be SIM count in baseband and system diverging. Run
during boot to see if this fixes the problem. If it does, restore all backups then start all over.
4. QPST does not recognize the diag port from the phone upon USB connection. Do this so that diag port works:
5. arter97's kernel disables diag drivers, and QPST could never recognize the phone. You have to use stock kernel if you intend to use anything other than PDC.
If you have strong demand for dual SIM like I do, you may try these steps. This thread, however, is NOT a proper nor complete guide on this topic. It is just a record of my trials - they are highly experimental, risky, and potentially broken. There is absolutely no guarantee on signal quality, stability, power consumption or even the success rate. Your device can be permanently damaged if any detail goes wrong. Make sure you understand all the risks and you are able to justify every command before typing it to your phone!
I do appreciate suggestions for the correct way, though. Comments are greatly welcomed!
My environment
QPST 2.7.477 - only PDC is used here, so any version with standalone PDC tool might do the job. But new versions required if you want to use other tools.
QXDM Professional 3.14.1144 - this one is optional. It's used to tweak some parameters, but dual SIM does work without the tweaks.
Qualcomm USB drivers 2.1.2.0 from 2015/7/8 - older versions might work as well.
Windows 10, 1803
arter97's kernel and Magisk-patched stock kernel images readily at hand. The latter can be obtained by patching a stock kernel image in Magisk Manager with "Keep dm-verity/avb 2.0" UNTICKED. I had the latter installed on the phone.
Make sure root shell can be obtained during boot with ALL kernel images. This is an important recovery approach if the phone bootloops.
Steps
I've gone through a tricky path to confirm that there is indeed a second IMEI in the phone prior to the steps, which supported follow-up researching. This thread will not cover this part as this is merely trial-and-error. I will provide suggestions on diag connection though.
1. make a backup of all partitions on the phone, leaving out system, vendor and userdata partitions of course. There are 88 partitions in my backup.
2. make a QCN backup of modem NV. This step could be optional as modemst1/2 has already been backed-up in previous step - I'm not sure about this, and have completed this step whatsoever.
3. make a backup of /vendor/etc/vintf/manifest.xml, and add slot2 instances to the following HALs:
- android.hardware.radio - this one has 2 interfaces, and both of them need the slot2 addition
- vendor.qti.hardware.radio.am
- vendor.qti.hardware.radio.qtiradio - this one has 2 versions, and both of them need the slot2 addition
4.
Code:
adb shell su -c setprop persist.radio.multisim.config dsds
Code:
adb shell su -c setprop sys.usb.config diag,serial_cdev,rmnet,dpl,adb
7. open PDC. There are 3 dual SIM (DSDS) hardware profiles available:
- SR_DSDS-LA-7+7_mode-SDM845
- SR_DSDS-WD-7+7_mode-SDM845
- SR_DSDS-WP8-7+7_mode-SDM845
The one with WP8 in its name can be ignored, and here comes the hard choice.
I tried the WD one in the first place: activated it in the context menu on Sub0 then Sub1, and clicked Activate twice. PDC complained about malformed packet after second click, and the profile was shown as Active on Sub0, and Pending on Sub1. Nothing bad happened after a reboot, regardless of the errors above. Two SIM slots were present in About Phone, and second IMEI is correctly shown there as well. Upon inserting two SIM cards I got dual VoLTE online, and everything behaved like a normal dual SIM SDM845 device. There were some little glitches though: once or twice a day signal bars disappeared and popped up again in a few seconds. Mobile data also stuttered at random times, though not frequent - sometimes mobile data was stable for the whole day. I was satisfied with the results, and made another backup of partitions.
Then I started comparing the WD and LA profiles. I quickly realized that LA marked the phone as DSDS while WD as SS in the device_mode NV entry (I honestly had no idea why dual SIM just worked with WD). There were other differences unknown to me, but LA seemed more "correct" and I decided to switch to this profile. After deactivating WD on both Sub0 and Sub1, I activated LA on Sub0 but not Sub1. The phone could still make use of two SIMs, but without VoLTE on either card. LTE was still available for both cards though. The glitches with WD were mostly gone (data still stuttered but recovered much faster), and the phone SEEMED cooler and battery SEEMED to drain slower.
Finally I could not understand the lack of VoLTE and switched back to WD (still Sub0 only). This time only the first SIM card could register on IMS/VoLTE. The second one registered on LTE but not IMS, regardless of default data card selection. Activating WD on Sub1 did not solve the problem. Manual checks/corrections on the differences between WD and LA made no effect either. I had to flash the backup made after first WD trial, and dual VoLTE worked again.
I came to the following conclusion after this step:
- a. hardware profiles may be applied to Sub0 only (can anyone confirm this?)
- b. a profile may not be completely reverted after applying. That is to say, same profile status does not mean same baseband behavior.
- c. LA profile does not support VoLTE for some reason.
- d. if you want dual VoLTE, your best bet would be activating WD on Sub0 and Sub1 right after previous steps, though Sub1 won't accept the setting.
- e. mobile data may stutter with dual SIM (this could also be the fault of my service provider however)
Any clarification on this step is appreciated. If you want to enable dual SIM, you have to make your own choice here. Just remember to backup before every change.
8. apply some NV changes from LA on WD base:
ue_usage_setting: from DATA_CENTRIC to VOICE_CENTRIC
device_mode: from SS to DSDS
disable_global_mode: from 1 to 0
I failed to find any difference after these changes. this step could be optional. I myself use the phone as daily driver with these changes though.
That's all. Don't worry, I'm confused as you
Other Details
1. RP2 uses the same SIM card slot as Samsung. I filed an card tray from Samsung S7 so that it fits RP2. Its size naturally(
2. if you want to restore a modemst1/2 backup, do that in TWRP. If this needs to be done in Android system, stop vendor.rmt_storage first.
3. if the phone reboots to recovery right after booting to lock screen, this could be SIM count in baseband and system diverging. Run
Code:
adb shell su -c setprop persist.radio.multisim.config ss
4. QPST does not recognize the diag port from the phone upon USB connection. Do this so that diag port works:
Code:
# in adb shell, assuming USB mode has already been switched
su
setenforce 0
stop vendor.per_mgr
# wait a few sec until QPST recognizes SDM845 on the diag port
start vendor.per_mgr
# SDM845 disappears and re-appears after a few sec, and QPST is usable