Project

General

Profile

XMMBoot » History » Version 56

Denis 'GNUtoo' Carikli, 03/25/2020 04:20 AM

1 1 Denis 'GNUtoo' Carikli
h1. XMMBoot
2
3
h2.  Introduction
4
5
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.
6
7 16 Denis 'GNUtoo' Carikli
h2. GPIOs
8
9 55 Denis 'GNUtoo' Carikli
h3. Devices GPIOs assignement and drivers
10 47 Denis 'GNUtoo' Carikli
11 49 Denis 'GNUtoo' Carikli
|_. Variant |_. SOC |_. Modem  |_. GPIO usage |_. GPIO assignement |
12 48 Denis 'GNUtoo' Carikli
| GT-I9300 | Exynos 4412 | XMM6262 | "CONFIG_UMTS_MODEM_XMM6262=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n1350
13 1 Denis 'GNUtoo' Carikli
"Makefile":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/misc/modem_if/Makefile#n10
14 49 Denis 'GNUtoo' Carikli
"modem_modemctl_device_xmm6262.c":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c | "CONFIG_SEC_MODEM_M0=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n541
15
"Makefile":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/Makefile#n320
16 50 Denis 'GNUtoo' Carikli
"board-m0-modems.c":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/board-m0-modems.c 
17
"CONFIG_MACH_M0=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n455
18 1 Denis 'GNUtoo' Carikli
"gpio-midas.h":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/include/mach/gpio-midas.h#n28
19
"gpio-rev00-m0.h":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/include/mach/gpio-rev00-m0.h |
20 55 Denis 'GNUtoo' Carikli
21
h3. GPIOs usage
22
23
|_. gpio platform data name |_. present |_. absent |_. Implementation |_. comments |
24
| gpio_cp_on | | | | powers on the modem? in which state (PMIC?, CPU?)
25
* On GT-I9100 it's connected to the ON1 modem pin and ON2 is not connected. |
26
| gpio_cp_reset | | | | Resets the modem CPU? PMIC?:
27
* "''check the reset timming with C2C connection''":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c#n106 : Here C2C probably means chip to chip
28
Can also read the modem CPU? and/or PMIC? reset state?
29
* "Reads from the GPIO and ''CP not ready, Active State low'' comment":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/board-m0-modems.c#n287 |
30
| gpio_reset_req_n | | | |
31
| gpio_pda_active | | | | Tell the modem if the SOC CPUs are sleeping/active or not?
32
* "PDA == Application processor":https://android.stackexchange.com/questions/176515/what-do-the-terms-bl-ap-cp-and-csc-mean-in-odin
33
* "''PDA_ACTIVE, let cp know AP sleep'' comment in status gc1-gpio.c":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/gc1-gpio.c#n213
34
* "PDA_ACTIVE set to 0 right after cpu_pm_enter()":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/cpuidle-exynos4.c#n701
35
* "PDA_ACTIVE set to 1 right before cpu_pm_exit()":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/cpuidle-exynos4.c#n796
36
* GPIO direction is output on AP side and input on BP side, which is also confirmed by the "pinout table in XDA":https://forum.xda-developers.com/galaxy-s2/help/how-to-talk-to-modem-commands-t1471241/page4 |
37
| gpio_phone_active | | | | |
38
| gpio_cp_dump_int | | | | cp: baseband processor |
39
| gpio_flm_uart_sel |\2. Only used for the Galaxy Nexus in libsamsung-ipc | | Modem download mode ? |
40
| gpio_cp_warm_reset | | | | cp: baseband processor |
41
| gpio_revers_bias_clear | | | | |
42
| gpio_revers_bias_restore | | | | |
43
| gpio_sim_detect | | | | Detect SIM card presence ? |
44 47 Denis 'GNUtoo' Carikli
45 53 Denis 'GNUtoo' Carikli
h3. Libsamsung-ipc
46 52 Denis 'GNUtoo' Carikli
47 1 Denis 'GNUtoo' Carikli
|/2. ioctl / function |\6. Devices |
48 54 Denis 'GNUtoo' Carikli
| GT-I9250 (maguro) | GT-I9100 | GT-I9300 | GT-N5100 | GT-N7100 | GT-P3100 / GT-P5100 (piranah) |
49 52 Denis 'GNUtoo' Carikli
| open, close, read, write 
50 1 Denis 'GNUtoo' Carikli
fmt/rfs
51
gprs
52 54 Denis 'GNUtoo' Carikli
power |\6. Yes |
53 52 Denis 'GNUtoo' Carikli
| boot_power
54 54 Denis 'GNUtoo' Carikli
status_online_wait | Yes |\5. No |
55 1 Denis 'GNUtoo' Carikli
| hci_power
56 52 Denis 'GNUtoo' Carikli
link_control_enable
57
link_control_active
58
link_control_wait
59 54 Denis 'GNUtoo' Carikli
link_get_hostwake_wait | No |\4. Yes | No |
60 52 Denis 'GNUtoo' Carikli
61 56 Denis 'GNUtoo' Carikli
h3. libsamsung-ipc <-> kernel functions <-> gpios
62 10 Denis 'GNUtoo' Carikli
63 56 Denis 'GNUtoo' Carikli
|_. libsamsung-ipc |_\3. Kernel |
64
|_. Function using the ioctl |_. ioctl name |_. function pointer name |_. gpio platform data name |
65 46 Denis 'GNUtoo' Carikli
|/4. xmm626_kernel_smdk4412_power |/4. IOCTL_MODEM_ON
66 42 Denis 'GNUtoo' Carikli
IOCTL_MODEM_OFF |/4. modem_on
67 56 Denis 'GNUtoo' Carikli
modem_off | gpio_cp_on |
68
| gpio_cp_reset |
69
| gpio_reset_req_n |
70
| gpio_pda_active |
71
| | | | gpio_phone_active |
72
| | | | gpio_cp_dump_int |
73 36 Denis 'GNUtoo' Carikli
| xmm626_kernel_smdk4412_boot_power | IOCTL_MODEM_BOOT_ON
74 1 Denis 'GNUtoo' Carikli
IOCTL_MODEM_BOOT_OFF | modem_boot_on
75 56 Denis 'GNUtoo' Carikli
modem_boot_off | gpio_flm_uart_sel |
76
| | | | gpio_cp_warm_reset |
77
| | | | gpio_revers_bias_clear |
78
| | | | gpio_revers_bias_restore |
79
| | | | gpio_sim_detect |
80 44 Denis 'GNUtoo' Carikli
81
h3. Glossary
82
83
* cp: baseband processor
84 1 Denis 'GNUtoo' Carikli
85 16 Denis 'GNUtoo' Carikli
h3. SIM card presence detection
86 7 Denis 'GNUtoo' Carikli
87
Do we really want to check the SIM card presence?
88
89
Would it be possible not to for privacy reasons?
90
91
Example:
92
* Boot a modem with a SIM
93
* Take away the SIM card
94 1 Denis 'GNUtoo' Carikli
* Go to a protest with only the SIM card and a phone with no data on it to be able to call if necessary.
95 7 Denis 'GNUtoo' Carikli
96 16 Denis 'GNUtoo' Carikli
h3. TODO
97 1 Denis 'GNUtoo' Carikli
98
* check gpio_flm_uart_sel in smdk4412 kernel too
99 16 Denis 'GNUtoo' Carikli
100
h2. Modem partitions
101
102 30 Denis 'GNUtoo' Carikli
h3. GT-I9300, GT-N7100
103 3 Denis 'GNUtoo' Carikli
104 19 Denis 'GNUtoo' Carikli
|_. Location |_. Name |_. Content |
105 25 Denis 'GNUtoo' Carikli
| [ 0x0 -> 0xfff ] | ? | Partition table? |
106 31 Denis 'GNUtoo' Carikli
| [ 0x1000 -> 0xefff ] | PSIRAM | First stage bootloader? |
107
| [ 0xF000 -> 0x27fff ] | EBL | Second stage bootloader ? |
108 29 Denis 'GNUtoo' Carikli
| [ 0x28000 -> 0x9ff7ff ] | MAIN | ? |
109 28 Denis 'GNUtoo' Carikli
| [ 0x9ff800 -> 0x9fffff ] | SECPACK | ? |
110 1 Denis 'GNUtoo' Carikli
| [ 0xa00000 -> 0xbfffff ] | NV | ? |
111
112 31 Denis 'GNUtoo' Carikli
References for the table:
113
* https://git.replicant.us/replicant/external_libsamsung-ipc/tree/samsung-ipc/devices/i9300/i9300.h?id=9ff9785a7f48e32f107ca7fb2e298b1320ad4cbc
114
* https://git.replicant.us/replicant/external_libsamsung-ipc/tree/samsung-ipc/devices/n7100/n7100.h?id=9ff9785a7f48e32f107ca7fb2e298b1320ad4cbc
115
* Verified on GT-I9300 and GT-N7100 modem partition table
116 23 Denis 'GNUtoo' Carikli
117 32 Denis 'GNUtoo' Carikli
h4. GT-I9300 and GT-N7100 modem partition table dump
118 23 Denis 'GNUtoo' Carikli
119
<pre>
120 24 Denis 'GNUtoo' Carikli
$ hexdump -C RADIO.img
121
00000000  50 53 49 52 41 4d 00 00  00 00 00 00 00 10 00 00  |PSIRAM..........|
122
00000010  00 00 00 00 00 e0 00 00  00 00 00 00 00 00 00 00  |................|
123
00000020  45 42 4c 00 00 00 00 00  00 00 00 00 00 f0 00 00  |EBL.............|
124
00000030  00 00 00 60 00 90 01 00  00 00 00 00 00 00 00 00  |...`............|
125
00000040  4d 41 49 4e 00 00 00 00  00 00 00 00 00 80 02 00  |MAIN............|
126
00000050  00 00 30 60 00 78 9d 00  00 00 00 00 00 00 00 00  |..0`.x..........|
127
00000060  53 45 43 50 41 43 4b 00  00 00 00 00 00 f8 9f 00  |SECPACK.........|
128
00000070  00 00 00 00 00 08 00 00  00 00 00 00 00 00 00 00  |................|
129
00000080  4e 56 00 00 00 00 00 00  00 00 00 00 00 00 a0 00  |NV..............|
130
00000090  00 00 e8 60 00 00 20 00  00 00 00 00 00 00 00 00  |...`.. .........|
131
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
132
*
133
[...]
134 1 Denis 'GNUtoo' Carikli
</pre>
135 32 Denis 'GNUtoo' Carikli
136
h3. Devices without a partition table or with a different one
137
138
* GT-I9250
139 17 Denis 'GNUtoo' Carikli
140 1 Denis 'GNUtoo' Carikli
h2. Links
141
142 45 Denis 'GNUtoo' Carikli
* "modem_modemctl_device_xmm6262.c":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c
143 1 Denis 'GNUtoo' Carikli
* https://forum.xda-developers.com/galaxy-s2/help/how-to-talk-to-modem-commands-t1471241/page4
144 45 Denis 'GNUtoo' Carikli
* http://www.arteris.com/blog/bid/59433/Interchip-Connectivity-HSIC-UniPro-HSI-C2C-LLI-oh-my