XMMBoot » History » Version 90
Denis 'GNUtoo' Carikli, 03/28/2020 02:50 AM
1 | 1 | Denis 'GNUtoo' Carikli | h1. XMMBoot |
---|---|---|---|
2 | |||
3 | 59 | Denis 'GNUtoo' Carikli | {{toc}} |
4 | |||
5 | 1 | Denis 'GNUtoo' Carikli | h2. Introduction |
6 | |||
7 | 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. |
||
8 | |||
9 | 58 | Denis 'GNUtoo' Carikli | h2. Abstraction |
10 | |||
11 | * hci_power -> link_power |
||
12 | |||
13 | 63 | Denis 'GNUtoo' Carikli | TODO: |
14 | * Find the difference between power_on and boot_power_on |
||
15 | ** Look at the GPIOs and understand what they do |
||
16 | ** Just read the code that use the GPIOs |
||
17 | ** Diff both procedures |
||
18 | 67 | Denis 'GNUtoo' Carikli | * Look which device has which XMM626X |
19 | * Add XMM6210 devices too |
||
20 | 63 | Denis 'GNUtoo' Carikli | |
21 | 16 | Denis 'GNUtoo' Carikli | h2. GPIOs |
22 | |||
23 | 55 | Denis 'GNUtoo' Carikli | h3. Devices GPIOs assignement and drivers |
24 | 47 | Denis 'GNUtoo' Carikli | |
25 | 79 | Denis 'GNUtoo' Carikli | |_\4. Hardware |_\2. Linux |_\1. libsamsung-ipc | |
26 | |_. Variant |_. SOC |_. Modem |_. Link |_. GPIO usage |_. GPIO assignement |_. device driver name | |
||
27 | | Galaxy Tab: |
||
28 | 81 | Denis 'GNUtoo' Carikli | GT-P1000 | Exynos 3310 | | RAM | | | aries | |
29 | 77 | Denis 'GNUtoo' Carikli | | Galaxy S: |
30 | 79 | Denis 'GNUtoo' Carikli | GT-I91000 | Exynos 3110 | | RAM | | | aries | |
31 | 1 | Denis 'GNUtoo' Carikli | | Nexus S: |
32 | GT-I9020 |
||
33 | GT-I9020A |
||
34 | 79 | Denis 'GNUtoo' Carikli | GT-I9023 | Exynos 3110 | | RAM | | | crespo | |
35 | 74 | Denis 'GNUtoo' Carikli | | Galaxy SII: |
36 | 79 | Denis 'GNUtoo' Carikli | GT-I9100 | Exynos 4410 | XMM6260 | HSIC | "CONFIG_UMTS_MODEM_XMM6260=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9100_defconfig#n1321 | | galaxys2 | |
37 | 74 | Denis 'GNUtoo' Carikli | | Galaxy Nexus: |
38 | 79 | Denis 'GNUtoo' Carikli | GT-I9250 | OMAP 4460 | | MIPI | | | maguro | |
39 | 74 | Denis 'GNUtoo' Carikli | | Galaxy SIII: |
40 | 49 | Denis 'GNUtoo' Carikli | GT-I9300 | Exynos 4412 | XMM6262 | HSIC | "CONFIG_UMTS_MODEM_XMM6262=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n1350 |
41 | 1 | Denis 'GNUtoo' Carikli | "Makefile":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/misc/modem_if/Makefile#n10 |
42 | "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 |
||
43 | "Makefile":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/Makefile#n320 |
||
44 | 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 |
45 | 1 | Denis 'GNUtoo' Carikli | "CONFIG_MACH_M0=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n455 |
46 | "gpio-midas.h":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/include/mach/gpio-midas.h#n28 |
||
47 | 79 | Denis 'GNUtoo' Carikli | "gpio-rev00-m0.h":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/include/mach/gpio-rev00-m0.h | i9300 | |
48 | 74 | Denis 'GNUtoo' Carikli | | Galaxy Note 8.0 GSM: |
49 | 79 | Denis 'GNUtoo' Carikli | GT-N5100 | Exynos 4412 | | HSIC | | | n5100 | |
50 | 74 | Denis 'GNUtoo' Carikli | | Galaxy Note II: |
51 | 79 | Denis 'GNUtoo' Carikli | GT-N7100 | Exynos 4412 | XMM6262 | HSIC | "CONFIG_UMTS_MODEM_XMM6262=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_n7100_defconfig#n1356 | | n7100 | |
52 | 74 | Denis 'GNUtoo' Carikli | | Galaxy Tab 2: |
53 | GT-P3100 |
||
54 | 79 | Denis 'GNUtoo' Carikli | GT-P5100 | OMAP 4430 | | MIPI | | | piranah | |
55 | 55 | Denis 'GNUtoo' Carikli | |
56 | h3. GPIOs usage |
||
57 | |||
58 | 65 | Denis 'GNUtoo' Carikli | TODO: make sure to mention what applies to what device |
59 | * Start with I9300. Assume I9300 if device is not mentioned. Mention device when not I9300 |
||
60 | * Add more devices and mention them |
||
61 | |||
62 | 55 | Denis 'GNUtoo' Carikli | |_. gpio platform data name |_. present |_. absent |_. Implementation |_. comments | |
63 | | gpio_cp_on | | | | powers on the modem? in which state (PMIC?, CPU?) |
||
64 | 89 | Denis 'GNUtoo' Carikli | * On GT-I9100 it's connected to the ON1 modem pin and ON2 is not connected. | |
65 | 55 | Denis 'GNUtoo' Carikli | | gpio_cp_reset | | | | Resets the modem CPU? PMIC?: |
66 | 89 | Denis 'GNUtoo' Carikli | * "''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 |
67 | Can also read the modem CPU? and/or PMIC? reset state? |
||
68 | * "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 | |
||
69 | 55 | Denis 'GNUtoo' Carikli | | gpio_reset_req_n | | | | |
70 | | gpio_pda_active | | | | Tell the modem if the SOC CPUs are sleeping/active or not? |
||
71 | 89 | Denis 'GNUtoo' Carikli | * "PDA == Application processor":https://android.stackexchange.com/questions/176515/what-do-the-terms-bl-ap-cp-and-csc-mean-in-odin |
72 | * "''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 |
||
73 | * "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 |
||
74 | * "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 |
||
75 | * 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 | |
||
76 | 88 | Denis 'GNUtoo' Carikli | | gpio_phone_active | | | | Seem the modem counterpart of gpio_pda_active: |
77 | 90 | Denis 'GNUtoo' Carikli | * See "umts_link_reconnect in board-m0-modems.c":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/board-m0-modems.c#n341 |
78 | * "See also mc_work in the unused modemctl.c driver":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/svnet/modemctl.c#n484 | |
||
79 | 76 | Denis 'GNUtoo' Carikli | | gpio_cp_dump_int | | | | | |
80 | 55 | Denis 'GNUtoo' Carikli | | gpio_flm_uart_sel |\2. Only used for the Galaxy Nexus in libsamsung-ipc | | Modem download mode ? | |
81 | 76 | Denis 'GNUtoo' Carikli | | gpio_cp_warm_reset | | | | | |
82 | 55 | Denis 'GNUtoo' Carikli | | gpio_revers_bias_clear | | | | | |
83 | | gpio_revers_bias_restore | | | | | |
||
84 | | gpio_sim_detect | | | | Detect SIM card presence ? | |
||
85 | 47 | Denis 'GNUtoo' Carikli | |
86 | 53 | Denis 'GNUtoo' Carikli | h3. Libsamsung-ipc |
87 | 52 | Denis 'GNUtoo' Carikli | |
88 | 1 | Denis 'GNUtoo' Carikli | |/2. ioctl / function |\6. Devices | |
89 | 54 | Denis 'GNUtoo' Carikli | | GT-I9250 (maguro) | GT-I9100 | GT-I9300 | GT-N5100 | GT-N7100 | GT-P3100 / GT-P5100 (piranah) | |
90 | 52 | Denis 'GNUtoo' Carikli | | open, close, read, write |
91 | 1 | Denis 'GNUtoo' Carikli | fmt/rfs |
92 | gprs |
||
93 | 54 | Denis 'GNUtoo' Carikli | power |\6. Yes | |
94 | 52 | Denis 'GNUtoo' Carikli | | boot_power |
95 | 54 | Denis 'GNUtoo' Carikli | status_online_wait | Yes |\5. No | |
96 | 1 | Denis 'GNUtoo' Carikli | | hci_power |
97 | 52 | Denis 'GNUtoo' Carikli | link_control_enable |
98 | link_control_active |
||
99 | link_control_wait |
||
100 | 54 | Denis 'GNUtoo' Carikli | link_get_hostwake_wait | No |\4. Yes | No | |
101 | 52 | Denis 'GNUtoo' Carikli | |
102 | 66 | Denis 'GNUtoo' Carikli | TODO: |
103 | * Don't use abbreviated function names |
||
104 | |||
105 | 56 | Denis 'GNUtoo' Carikli | h3. libsamsung-ipc <-> kernel functions <-> gpios |
106 | 10 | Denis 'GNUtoo' Carikli | |
107 | 56 | Denis 'GNUtoo' Carikli | |_. libsamsung-ipc |_\3. Kernel | |
108 | 57 | Denis 'GNUtoo' Carikli | |_. Function using the ioctl |_. ioctl name |_. function pointer name |_. GPIO used | |
109 | | xmm626_kernel_smdk4412_power | IOCTL_MODEM_ON |
||
110 | IOCTL_MODEM_OFF | modem_on |
||
111 | modem_off | gpio_cp_on |
||
112 | gpio_cp_reset |
||
113 | gpio_reset_req_n |
||
114 | gpio_pda_active | |
||
115 | 56 | Denis 'GNUtoo' Carikli | | | | | gpio_phone_active | |
116 | | | | | gpio_cp_dump_int | |
||
117 | 36 | Denis 'GNUtoo' Carikli | | xmm626_kernel_smdk4412_boot_power | IOCTL_MODEM_BOOT_ON |
118 | 1 | Denis 'GNUtoo' Carikli | IOCTL_MODEM_BOOT_OFF | modem_boot_on |
119 | 56 | Denis 'GNUtoo' Carikli | modem_boot_off | gpio_flm_uart_sel | |
120 | | | | | gpio_cp_warm_reset | |
||
121 | | | | | gpio_revers_bias_clear | |
||
122 | | | | | gpio_revers_bias_restore | |
||
123 | | | | | gpio_sim_detect | |
||
124 | 44 | Denis 'GNUtoo' Carikli | |
125 | h3. Glossary |
||
126 | |||
127 | 72 | Denis 'GNUtoo' Carikli | Terms for the modem CPU: |
128 | 61 | Denis 'GNUtoo' Carikli | * BP: Baseband processor |
129 | * CP: Cellular? processor |
||
130 | 60 | Denis 'GNUtoo' Carikli | |
131 | 72 | Denis 'GNUtoo' Carikli | Term for the CPU of the system on a chip running Replicant: |
132 | 60 | Denis 'GNUtoo' Carikli | * AP: Application processor |
133 | 1 | Denis 'GNUtoo' Carikli | |
134 | 62 | Denis 'GNUtoo' Carikli | TODO: move in its own page and point to it |
135 | |||
136 | 16 | Denis 'GNUtoo' Carikli | h3. SIM card presence detection |
137 | 7 | Denis 'GNUtoo' Carikli | |
138 | Do we really want to check the SIM card presence? |
||
139 | |||
140 | Would it be possible not to for privacy reasons? |
||
141 | |||
142 | Example: |
||
143 | * Boot a modem with a SIM |
||
144 | * Take away the SIM card |
||
145 | 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. |
146 | 7 | Denis 'GNUtoo' Carikli | |
147 | 16 | Denis 'GNUtoo' Carikli | h3. TODO |
148 | 1 | Denis 'GNUtoo' Carikli | |
149 | * check gpio_flm_uart_sel in smdk4412 kernel too |
||
150 | 16 | Denis 'GNUtoo' Carikli | |
151 | 82 | Denis 'GNUtoo' Carikli | h2. Potential privacy and security issues |
152 | |||
153 | 83 | Denis 'GNUtoo' Carikli | h3. gpio_pda_active |
154 | |||
155 | From "cpuidle-exynos4.c":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/cpuidle-exynos4.c#n701 we have things like that: |
||
156 | <pre> |
||
157 | cpu_pm_enter(); |
||
158 | |||
159 | #if defined(CONFIG_INTERNAL_MODEM_IF) || defined(CONFIG_SAMSUNG_PHONE_TTY) |
||
160 | gpio_set_value(GPIO_PDA_ACTIVE, 0); |
||
161 | #endif |
||
162 | |||
163 | if (log_en) |
||
164 | pr_debug("+++lpa\n") |
||
165 | </pre> |
||
166 | |||
167 | and: |
||
168 | <pre> |
||
169 | if (log_en) |
||
170 | pr_debug("---lpa\n"); |
||
171 | #if defined(CONFIG_INTERNAL_MODEM_IF) || defined(CONFIG_SAMSUNG_PHONE_TTY) |
||
172 | gpio_set_value(GPIO_PDA_ACTIVE, 1); |
||
173 | #endif |
||
174 | |||
175 | cpu_pm_exit(); |
||
176 | </pre> |
||
177 | 84 | Denis 'GNUtoo' Carikli | |
178 | 83 | Denis 'GNUtoo' Carikli | Does it means that we are telling the modem about each time we go in suspend to RAM? |
179 | 84 | Denis 'GNUtoo' Carikli | |
180 | 85 | Denis 'GNUtoo' Carikli | Devices affected or not affected: |
181 | |||
182 | 84 | Denis 'GNUtoo' Carikli | |_. Device |_. Config | |
183 | | GT-I9300 | "# CONFIG_INTERNAL_MODEM_IF is not set":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n1373 |
||
184 | "# CONFIG_SAMSUNG_PHONE_TTY is not set":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n3039 | |
||
185 | 83 | Denis 'GNUtoo' Carikli | |
186 | 82 | Denis 'GNUtoo' Carikli | h3. gpio_phone_active |
187 | |||
188 | From "ehci-s5p.c":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/drivers/usb/host/ehci-s5p.c#n129 we have things like that: |
||
189 | <pre> |
||
190 | #if defined(CONFIG_UMTS_MODEM_XMM6262) |
||
191 | if (pdata->get_cp_active_state && !pdata->get_cp_active_state()) { |
||
192 | s5p_ehci_port_control(pdev, CP_PORT, 0); |
||
193 | pr_err("mif: force port%d off by cp reset\n", CP_PORT); |
||
194 | } |
||
195 | #endif |
||
196 | </pre> |
||
197 | 86 | Denis 'GNUtoo' Carikli | |
198 | 82 | Denis 'GNUtoo' Carikli | Does it allows the modem to trigger a re-enumeration of the HSIC bus? |
199 | 86 | Denis 'GNUtoo' Carikli | |
200 | Devices affected or not affected: |
||
201 | |||
202 | |_. Device |_. Config | |
||
203 | 87 | Denis 'GNUtoo' Carikli | | GT-I9300 | "CONFIG_UMTS_MODEM_XMM6262=y":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/configs/lineageos_i9300_defconfig#n1350 |
204 | ".gpio_phone_active = GPIO_PHONE_ACTIVE":https://git.replicant.us/replicant/kernel_samsung_smdk4412/tree/arch/arm/mach-exynos/board-m0-modems.c#n241 | |
||
205 | 82 | Denis 'GNUtoo' Carikli | |
206 | 16 | Denis 'GNUtoo' Carikli | h2. Modem partitions |
207 | |||
208 | 30 | Denis 'GNUtoo' Carikli | h3. GT-I9300, GT-N7100 |
209 | 3 | Denis 'GNUtoo' Carikli | |
210 | 19 | Denis 'GNUtoo' Carikli | |_. Location |_. Name |_. Content | |
211 | 71 | Denis 'GNUtoo' Carikli | | [ 0x0 -> 0xfff ] | ? | Partition table ? | |
212 | | [ 0x1000 -> 0xefff ] | PSIRAM | First stage bootloader ? | |
||
213 | 31 | Denis 'GNUtoo' Carikli | | [ 0xF000 -> 0x27fff ] | EBL | Second stage bootloader ? | |
214 | 29 | Denis 'GNUtoo' Carikli | | [ 0x28000 -> 0x9ff7ff ] | MAIN | ? | |
215 | 28 | Denis 'GNUtoo' Carikli | | [ 0x9ff800 -> 0x9fffff ] | SECPACK | ? | |
216 | 70 | Denis 'GNUtoo' Carikli | | [ 0xa00000 -> 0xbfffff ] | NV | nvdata default values? |
217 | TODO: find the place in libsamsung-ipc source mentioning that | |
||
218 | 1 | Denis 'GNUtoo' Carikli | |
219 | 31 | Denis 'GNUtoo' Carikli | References for the table: |
220 | * https://git.replicant.us/replicant/external_libsamsung-ipc/tree/samsung-ipc/devices/i9300/i9300.h?id=9ff9785a7f48e32f107ca7fb2e298b1320ad4cbc |
||
221 | * https://git.replicant.us/replicant/external_libsamsung-ipc/tree/samsung-ipc/devices/n7100/n7100.h?id=9ff9785a7f48e32f107ca7fb2e298b1320ad4cbc |
||
222 | * Verified on GT-I9300 and GT-N7100 modem partition table |
||
223 | 23 | Denis 'GNUtoo' Carikli | |
224 | 32 | Denis 'GNUtoo' Carikli | h4. GT-I9300 and GT-N7100 modem partition table dump |
225 | 23 | Denis 'GNUtoo' Carikli | |
226 | 68 | Denis 'GNUtoo' Carikli | TODO: |
227 | * Send patch for the "modem-partition-tool#n33":https://git.replicant.us/contrib/GNUtoo/hardware_replicant_libsamsung-ipc/tree/tools/modem-image-tool.c?h=patches-todo/modem-partition-tool#n33 |
||
228 | * Make sure that we know the device from the command line |
||
229 | * Understand the field depths along the way when supporting more devices |
||
230 | * Document all other devices that don't have this partition table |
||
231 | * Find the name of this partition table |
||
232 | |||
233 | 23 | Denis 'GNUtoo' Carikli | <pre> |
234 | 24 | Denis 'GNUtoo' Carikli | $ hexdump -C RADIO.img |
235 | 00000000 50 53 49 52 41 4d 00 00 00 00 00 00 00 10 00 00 |PSIRAM..........| |
||
236 | 00000010 00 00 00 00 00 e0 00 00 00 00 00 00 00 00 00 00 |................| |
||
237 | 00000020 45 42 4c 00 00 00 00 00 00 00 00 00 00 f0 00 00 |EBL.............| |
||
238 | 00000030 00 00 00 60 00 90 01 00 00 00 00 00 00 00 00 00 |...`............| |
||
239 | 00000040 4d 41 49 4e 00 00 00 00 00 00 00 00 00 80 02 00 |MAIN............| |
||
240 | 00000050 00 00 30 60 00 78 9d 00 00 00 00 00 00 00 00 00 |..0`.x..........| |
||
241 | 00000060 53 45 43 50 41 43 4b 00 00 00 00 00 00 f8 9f 00 |SECPACK.........| |
||
242 | 00000070 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 |................| |
||
243 | 00000080 4e 56 00 00 00 00 00 00 00 00 00 00 00 00 a0 00 |NV..............| |
||
244 | 00000090 00 00 e8 60 00 00 20 00 00 00 00 00 00 00 00 00 |...`.. .........| |
||
245 | 000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |
||
246 | * |
||
247 | [...] |
||
248 | 1 | Denis 'GNUtoo' Carikli | </pre> |
249 | 32 | Denis 'GNUtoo' Carikli | |
250 | h3. Devices without a partition table or with a different one |
||
251 | |||
252 | 69 | Denis 'GNUtoo' Carikli | * GT-I9100, GT-I9250, GT-N7000, GT-P3100 |
253 | * Probably GT-P5100 as well, as it's similar to GT-P3100 |
||
254 | * All the devices with Qualcomm modems (GT-I9305, GT-N7105) |
||
255 | |||
256 | Unknown: |
||
257 | * Galaxy Note 8.0 |
||
258 | 17 | Denis 'GNUtoo' Carikli | |
259 | 1 | Denis 'GNUtoo' Carikli | h2. Links |
260 | |||
261 | 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 |
262 | 1 | Denis 'GNUtoo' Carikli | * https://forum.xda-developers.com/galaxy-s2/help/how-to-talk-to-modem-commands-t1471241/page4 |
263 | 45 | Denis 'GNUtoo' Carikli | * http://www.arteris.com/blog/bid/59433/Interchip-Connectivity-HSIC-UniPro-HSI-C2C-LLI-oh-my |
264 | 64 | Denis 'GNUtoo' Carikli | ** TODO: move this link somewhere where it's more useful |