For both libsamsung-ipc and the Linux driver it's interesting to understand better the boot of the modem in order to come with good names for the abstraction.
Hardware | Linux | libsamsung-ipc | ||||
---|---|---|---|---|---|---|
Variant | SOC | Modem | Link | GPIO usage | GPIO assignement | device driver name |
Galaxy Tab: GT-P1000 |
Exynos 3310 | RAM | aries | |||
Galaxy S: GT-I91000 |
Exynos 3110 | RAM | aries | |||
Nexus S: GT-I9020 GT-I9020A GT-I9023 |
Exynos 3110 | RAM | crespo | |||
Galaxy SII: GT-I9100 |
Exynos 4410 | XMM6260 | HSIC | CONFIG_UMTS_MODEM_XMM6260=y | galaxys2 | |
Galaxy Nexus: GT-I9250 |
OMAP 4460 | MIPI | maguro | |||
Galaxy SIII: GT-I9300 |
Exynos 4412 | XMM6262 | HSIC | CONFIG_UMTS_MODEM_XMM6262=y Makefile modem_modemctl_device_xmm6262.c |
CONFIG_SEC_MODEM_M0=y Makefile board-m0-modems.c CONFIG_MACH_M0=y gpio-midas.h gpio-rev00-m0.h |
i9300 |
Galaxy Note 8.0 GSM: GT-N5100 |
Exynos 4412 | HSIC | n5100 | |||
Galaxy Note II: GT-N7100 |
Exynos 4412 | XMM6262 | HSIC | CONFIG_UMTS_MODEM_XMM6262=y | n7100 | |
Galaxy Tab 2: GT-P3100 GT-P5100 |
OMAP 4430 | MIPI | piranah |
gpio platform data name | present | absent | Implementation | comments |
---|---|---|---|---|
gpio_cp_on | powers on the modem? in which state (PMIC?, CPU?) * On GT-I9100 it's connected to the ON1 modem pin and ON2 is not connected. |
|||
gpio_cp_reset | Resets the modem CPU? PMIC?: * ''check the reset timming with C2C connection'' : Here C2C probably means chip to chip Can also read the modem CPU? and/or PMIC? reset state? * Reads from the GPIO and ''CP not ready, Active State low'' comment |
|||
gpio_reset_req_n | ||||
gpio_pda_active | Tell the modem if the SOC CPUs are sleeping/active or not? * PDA == Application processor * ''PDA_ACTIVE, let cp know AP sleep'' comment in status gc1-gpio.c * PDA_ACTIVE set to 0 right after cpu_pm_enter() * PDA_ACTIVE set to 1 right before cpu_pm_exit() * GPIO direction is output on AP side and input on BP side, which is also confirmed by the pinout table in XDA |
|||
gpio_phone_active | Seem the modem counterpart of gpio_pda_active: * See umts_link_reconnect in board-m0-modems.c * See also mc_work in the unused modemctl.c driver |
|||
gpio_cp_dump_int | ||||
gpio_flm_uart_sel | Only used for the Galaxy Nexus in libsamsung-ipc | Modem download mode ? | ||
gpio_cp_warm_reset | ||||
gpio_revers_bias_clear | ||||
gpio_revers_bias_restore | ||||
gpio_sim_detect | Detect SIM card presence ? |
ioctl / function | Devices | |||||
GT-I9250 (maguro) | GT-I9100 | GT-I9300 | GT-N5100 | GT-N7100 | GT-P3100 / GT-P5100 (piranah) | |
open, close, read, write fmt/rfs gprs power |
Yes | |||||
boot_power status_online_wait |
Yes | No | ||||
hci_power link_control_enable link_control_active link_control_wait link_get_hostwake_wait |
No | Yes | No |
libsamsung-ipc | Kernel | ||
---|---|---|---|
Function using the ioctl | ioctl name | function pointer name | GPIO used |
xmm626_kernel_smdk4412_power | IOCTL_MODEM_ON IOCTL_MODEM_OFF |
modem_on modem_off |
gpio_cp_on gpio_cp_reset gpio_reset_req_n gpio_pda_active |
gpio_phone_active | |||
gpio_cp_dump_int | |||
xmm626_kernel_smdk4412_boot_power | IOCTL_MODEM_BOOT_ON IOCTL_MODEM_BOOT_OFF |
modem_boot_on modem_boot_off |
gpio_flm_uart_sel |
gpio_cp_warm_reset | |||
gpio_revers_bias_clear | |||
gpio_revers_bias_restore | |||
gpio_sim_detect |
TODO: move in its own page and point to it
Do we really want to check the SIM card presence?
Would it be possible not to for privacy reasons?
Example:From cpuidle-exynos4.c we have things like that:
cpu_pm_enter(); #if defined(CONFIG_INTERNAL_MODEM_IF) || defined(CONFIG_SAMSUNG_PHONE_TTY) gpio_set_value(GPIO_PDA_ACTIVE, 0); #endif if (log_en) pr_debug("+++lpa\n")
and:
if (log_en) pr_debug("---lpa\n"); #if defined(CONFIG_INTERNAL_MODEM_IF) || defined(CONFIG_SAMSUNG_PHONE_TTY) gpio_set_value(GPIO_PDA_ACTIVE, 1); #endif cpu_pm_exit();
Does it means that we are telling the modem about each time we go in suspend to RAM?
Devices affected or not affected:
Device | Config |
---|---|
GT-I9300 | # CONFIG_INTERNAL_MODEM_IF is not set # CONFIG_SAMSUNG_PHONE_TTY is not set |
From ehci-s5p.c we have things like that:
#if defined(CONFIG_UMTS_MODEM_XMM6262) if (pdata->get_cp_active_state && !pdata->get_cp_active_state()) { s5p_ehci_port_control(pdev, CP_PORT, 0); pr_err("mif: force port%d off by cp reset\n", CP_PORT); } #endif
Does it allows the modem to trigger a re-enumeration of the HSIC bus?
Devices affected or not affected:
Device | Config |
---|---|
GT-I9300 | CONFIG_UMTS_MODEM_XMM6262=y .gpio_phone_active = GPIO_PHONE_ACTIVE |
Location | Name | Content |
---|---|---|
[ 0x0 -> 0xfff ] | ? | Partition table ? |
[ 0x1000 -> 0xefff ] | PSIRAM | First stage bootloader ? |
[ 0xF000 -> 0x27fff ] | EBL | Second stage bootloader ? |
[ 0x28000 -> 0x9ff7ff ] | MAIN | ? |
[ 0x9ff800 -> 0x9fffff ] | SECPACK | ? |
[ 0xa00000 -> 0xbfffff ] | NV | nvdata default values? TODO: find the place in libsamsung-ipc source mentioning that |
$ hexdump -C RADIO.img 00000000 50 53 49 52 41 4d 00 00 00 00 00 00 00 10 00 00 |PSIRAM..........| 00000010 00 00 00 00 00 e0 00 00 00 00 00 00 00 00 00 00 |................| 00000020 45 42 4c 00 00 00 00 00 00 00 00 00 00 f0 00 00 |EBL.............| 00000030 00 00 00 60 00 90 01 00 00 00 00 00 00 00 00 00 |...`............| 00000040 4d 41 49 4e 00 00 00 00 00 00 00 00 00 80 02 00 |MAIN............| 00000050 00 00 30 60 00 78 9d 00 00 00 00 00 00 00 00 00 |..0`.x..........| 00000060 53 45 43 50 41 43 4b 00 00 00 00 00 00 f8 9f 00 |SECPACK.........| 00000070 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 |................| 00000080 4e 56 00 00 00 00 00 00 00 00 00 00 00 00 a0 00 |NV..............| 00000090 00 00 e8 60 00 00 20 00 00 00 00 00 00 00 00 00 |...`.. .........| 000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * [...]