시스템 사양 선택 | 1번 |
---|
I2C 방식의 터치패드는 VoodooI2C 를 사용하여 터치패드를 활성화하며 제스처를 안정화합니다.
특히, 노트북의 안정화 작업 중에서 VoodooI2C 를 사용하여 I2C 방식의 터치패드가 작동하도록 패치하는 것은 조금 많이 어려운 편입니다.
그래서, GPIO Pinning 작업 중 APIC Pin 의 값을 통하여 GPIO Pin 의 값을 구하는 방법을 설명하고자 합니다. :)
본 Tip 글은 APIC Pin 의 값이 0x2F 보다 큰 경우 GPIO Controller 에 의한 Interrupt 모드로 작동시킬 때 필요한 작업입니다.
즉, Intel 6th Gen Sky Lake 이상의 시스템에서 Interrupt (GPIO) 모드를 사용하려는 경우에 대한 내용입니다.
Intel 4th Gen Haswell & Intel 5th Gen Broadwell 에서 I2C 터치패드 장치의 APIC Pin 의 값이 0x2F 를 초과하는 경우에는
Interrupt 모드를 사용할 수 없으며 Polling 모드만 사용할 수 있습니다.
VoodooGPIO 는 Intel 6th Gen Sky Lake 이상의 시스템부터 지원합니다.
1. APIC Pin 의 값을 확인하기
1-1. IORegistryExplorer 를 사용하여 확인하기
I2C 방식의 터치패드에 해당하는 Device 를 선택하고 우측에 표시되는 IOInterruptSpecifiers 의 숫자 첫 두 자리가 APIC Pin 입니다.
위의 사진을 예시로 들면 TPD1 Device 의 APIC Pin 의 값은 0x33 입니다.
1-2. OEM DSDT 에서 확인하기
APIC Pin 에 해당되거나 포함하는 Resource Template 의 Interrupt 값을 확인합니다.
APIC Pin 에 해당하는 Resource Template 는 주로 SBFI 라는 이름으로 존재합니다.
위의 사진을 예시로 들면 APIC Pin 의 값은 0x6D 입니다.
그런데, APIC Pin 에 해당되거나 포함하는 Resource Template 의 Interrupt 값이 위의 사진과 같이 정해져 있지 않고
처음부터 원래 0x00000000 으로 표시되는 경우도 있습니다.
이는 APIC Pin 의 값이 0x0 이라는 것을 의미하는 것이 아니며 APIC Pin 의 값을 아직 알 수 없습니다.
이 경우에는 다른 방법으로 APIC Pin 의 값을 확인해주세요.
1-3. VoodooI2C 의 로그에서 확인하기
Config.plist 에 msgbuf=1048576 부트 옵션을 추가하고 다시 부팅한 후에 터미널에서 아래의 명령어를 실행하여 로그를 확인합니다.
sudo dmesg | grep -i "Voodoo"
Incompatible APIC Interrupt Pin (0x33 > 0x2F) 등의 로그가 보인다면 0x33 이 APIC Pin 입니다.
혹시, 만약 위와 같은 로그가 보이지 않는다면 다른 방법으로 APIC Pin 의 값을 확인해주세요.
2. APIC Pin 에 해당하는 GPP IRQ Group 찾기
2-1. Intel Sunrise Point 의 경우
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/skylake/include/soc/gpio_defs.h
2-2. Intel Cannon Lake - LP 의 경우
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/cannonlake/include/soc/gpio_defs.h
2-3. Intel Cannon Lake - H 의 경우
2-4. Intel Ice Lake - LP 의 경우
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/icelake/include/soc/gpio_defs.h
위의 사이트에 들어간 후에 우측의 16 진수에서 APIC Pin 을 찾습니다.
2~3개 정도 찾을 수 있는데 주로 위에서 첫 번째로 찾은 것을 사용합니다.
APIC Pin 을 찾은 후 이에 해당하는 좌측의 GPP_XYY_IRQ 를 기억합니다.
예시 - Intel Sunrise Point 이고 APIC Pin 의 값이 0x37 이라면
이에 해당하는 GPP IRQ Group 은 GPP_B7_IRQ 과 GPP_F7_IRQ 입니다.
3. APIC Pin 의 값을 GPIO Pin 의 값으로 변환하기
사용하는 Intel CPU 의 세대 또는 Intel Chipset 의 코드 네임에 따라서 계산 과정이 조금 다릅니다.
3-1. Intel Sunrise Point 의 경우 : APIC Pin → GPIO Pin (= Hardware Pin)
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/skylake/include/soc/gpio_soc_defs.h
위의 사이트에 들어간 후에 2. 단계에서 찾은 GPP IRQ Group (GPP_XYY_IRQ) 를 좌측에서 찾습니다.
그리고, 그에 해당하는 우측의 10진수가 GPIO Pin 입니다.
이제, 그 10진수를 16진수 Hex 로 변환하면 그 값이 GPIO Pin 입니다.
예시 - GPP_B7_IRQ 과 GPP_F7_IRQ 이라면 각각 차례대로 31 과 127 이 10진수의 GPIO Pin 입니다.
그러므로, 31 과 127 을 16진수 Hex 로 변환한 0x1F 와 0x7F 가 사용해 볼 수 있는 GPIO Pin 입니다.
추가로, 사진으로 이해하면 더 쉬울 것 같아서 아래의 사진도 참고해보세요.
3-2. Intel Cannon Lake + 의 경우 : APIC Pin → Hardware Pin → GPIO Pin
Intel Cannon Lake 이후이므로 Intel Ice Lake - LP 도 여기에 해당됩니다.
3-2-1. Intel Cannon Lake - LP 의 경우 : APIC Pin → Hardware Pin
3-2-2. Intel Cannon Lake - H 의 경우 : APIC Pin → Hardware Pin
3-2-3. Intel Ice Lake - LP 의 경우 : APIC Pin → Hardware Pin
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/icelake/include/soc/gpio_soc_defs.h
위의 사이트에 들어간 후에 2. 단계에서 찾은 GPP IRQ Group (GPP_XYY_IRQ) 를 좌측에서 찾습니다.
그리고, 그에 해당하는 우측의 10진수가 Hardware Pin 입니다.
그 Hardware Pin 을 기억합니다.
Intel Cannon Lake + 의 경우에는 여기까지가 APIC Pin → Hardware Pin 의 변환 과정이며
아래의 3-3. 단계도 이어서 진행합니다.
3-3. Intel Cannon Lake + 의 경우 : APIC Pin → Hardware Pin → GPIO Pin
3-3-1. Intel Cannon Lake - LP 의 경우 : Hardware Pin → GPIO Pin
3-3-2. Intel Cannon Lake - H 의 경우 : Hardware Pin → GPIO Pin
3-3-3. Intel Ice Lake - LP 의 경우 : Hardware Pin → GPIO Pin
위의 사이트에 들어간 후에 2. 단계에서 찾았던 GPP IRQ Group (GPP_XYY_IRQ) 를 우측의 /* GPP_X */ 에서 찾습니다.
그러면, CHIPSET_GPP (num, base, end, gpio_base), /* GPP_X */ 라는 형식의 구문을 볼 수 있습니다.
이제, 3-2. 단계에서 구한 10진수의 Hardware Pin 에서 base 의 값을 빼고 gpio_base 의 값을 더합니다.
즉, 계산식을 다시 정리하면 Hardware Pin - base + gpio_base 입니다.
위의 계산을 모두 완료하여 나온 10진수를 16진수 Hex 로 변환하여 나온 값이 GPIO Pin 입니다.
예시 - Intel Cannon Lake - LP 이고 APIC Pin 의 값이 0x3E 라면
이에 해당하는 GPP IRQ Group 은 GPP_B14_IRQ 과 GPP_F14_IRQ 입니다.
GPP_B14_IRQ 과 GPP_F14_IRQ 이라면 각각 차례대로 39 와 107 이 10진수의 Hardware Pin 입니다.
CNL_GPP (1, 25, 50, 32), /* GPP_B */ 이므로 39 - 25 + 32 = 46 입니다.
CNL_GPP (1, 93, 116, 128), /* GPP_F */ 이므로 107 - 93 + 128 = 142 입니다.
그러므로, 46 과 142 를 16진수 Hex 로 변환한 0x2E 와 0x8E 가 사용해 볼 수 있는 GPIO Pin 입니다.
4. 구한 GPIO Pin 의 값을 적용하기
DSDT 에서 I2C 방식의 터치패드에 해당하는 Device 의 GPIO Pin 에 해당하는 Resource Template 를 찾습니다.
GPIO Pin 에 해당하는 Resource Template 는 주로 SBFG 라는 이름으로 존재합니다.
그리고, Pin list 항목에 구한 GPIO Pin 의 값을 넣어주면 됩니다.
예를 들어서, 구한 GPIO Pin 의 값이 0x23 이라면 아래의 사진과 같이 수정하면 됩니다.
이제, _CRS Method 에서 I2C 방식의 터치패드가 VoodooI2C 에 의하여 Interrupt (GPIO) 모드로 작동하도록
I2cSerialBusV2 에 해당하는 Resource Template 와 GPIO Pin 에 해당하는 Resource Template 를
Concatenate 하여 Return 하도록 수정합니다.
단, I2cSerialBusV2 에 해당하는 Resource Template 의 이름이 일반적으로 SBFB 이지만 노트북의 모델마다 다를 수도 있습니다.
주로, 삼성 노트북의 I2C 터치패드에 해당하는 SPTP Device 는 SBFB 가 아닌 SBFS 입니다.
또한, DSDT 를 직접 수정하지 않고 SSDT 를 사용하여 Hot Patch 방식으로 패치하려는 경우에는
Override 또는 Preset Variable Method 방식으로 패치하는 것도 좋은 방법입니다.
현재 최신 버전의 VoodooI2C 는 위의 APIC Pin 을 GPIO Pin 으로 변환하는 과정을 자동으로 계산하여 적용합니다.
하지만, 해당 GPIO Pin 의 값으로 작동하지 않는 경우 다른 값으로 시도해 볼 때 유용할 것 같습니다. :)
Intel Cannon Lake + 의 경우에는 중간에 계산 실수하지 않도록 주의해주세요~.
다른 회원님도 이 Tip 글을 읽고 난 후에 APIC Pin 의 값을 가지고
GPIO Pin 으로 자유자재로 변환하는 데에 많은 도움이 되었으면 좋겠습니다. ✨
❄️ Github 출처 및 참고한 사이트
https://github.com/daliansky/P-little
https://github.com/VoodooI2C/VoodooI2C
https://github.com/VoodooI2C/VoodooI2C/blob/master/Documentation/GPIO%20Pinning.md
shl628님의 새글 알림을 받으실려면 구독
*적용중인 도장
Intel 10th Gen Comet Lake CPU 는 Cannon Lake 에 해당됩니다.
추가로, CPU 에 따라서 Comet Lake - U 는 CannonLakeLP 이며 Comet Lake - H 는 CannonLakeH 입니다.
GPIO Controller 를 활성화하고 IOReg 에서 GPI0 장치에 어떤 VoodooGPIOController 가 연결되어 있는지 확인해보세요.
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|
macOS Ventura 13.7 22H123 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체 공개 +3 | 좌절금지 | 24.09.1917:09 | 71 |
macOS Sonoma 14.7 23H124 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체공개 +15 | 좌절금지 | 24.09.1723:58 | 182 |
[중급편] 노트북 해킨 +8 | Stultus | 24.07.1219:19 | 755 |
[초급편] 문제 스스로 해결하기 +17 | Stultus | 24.03.2920:07 | 3532 |
[입문편] 첫 해킨 길라잡이 +32 | Stultus | 24.01.1218:54 | 4296 |
[필독 - 안정화] macOS 해킨토시 설치 후 안정화 작업 목록 및 글타래 모음 총정리 📋 +63 | shl628 | 23.01.0913:39 | 5만 |
Sonoma 14.7(23H124) i9-12900, GA-Z690 Proart Creator + BCM WiFi Support +2 | 좌절금지 | 24.09.1722:40 | 198 |
2020 그램 sonoma efi 15Z90N +1 | 맥가즈아 | 24.09.1717:13 | 90 |
macOS Sequoia 15 설치 후기 + Bcm94360NG WiFi 작동함 | 좌절금지 | 24.09.1919:17 | 198 |
좌절금지 | 24.09.1919:17 | 198 | |
좌절금지 | 24.09.1917:09 | 71 | |
Stultus | 24.09.1813:37 | 151 | |
좌절금지 | 24.09.1723:58 | 182 | |
좌절금지 | 24.09.1722:40 | 198 | |
맥가즈아 | 24.09.1717:13 | 90 | |
김경석 | 24.09.1708:13 | 220 | |
Panictosh | 24.09.1617:47 | 99 | |
Tamy | 24.09.1504:35 | 467 | |
Stultus | 24.09.1319:18 | 436 | |
치토 | 24.09.1019:44 | 470 | |
머핀X | 24.09.0118:13 | 394 | |
해킨도전자 | 24.09.0112:54 | 295 | |
머핀X | 24.08.3115:34 | 373 | |
화정큐삼 | 24.08.2601:42 | 239 | |
하나브 | 24.08.2422:59 | 208 | |
화정큐삼 | 24.08.2316:25 | 248 | |
CanBe | 24.08.1810:56 | 329 | |
화정큐삼 | 24.08.1800:04 | 205 | |
화정큐삼 | 24.08.1722:03 | 189 | |
jbhlyk | 24.08.1710:14 | 167 | |
Stultus | 24.08.1622:06 | 251 | |
hackillious | 24.08.1511:16 | 159 | |
세유니 | 24.08.1421:30 | 124 | |
Stultus | 24.08.1419:58 | 345 | |
오디세이 | 24.08.1311:26 | 271 | |
좌절금지 | 24.08.1115:46 | 194 | |
티타보르 | 24.08.1111:21 | 141 | |
Stultus | 24.08.1022:46 | 183 | |
오디세이 | 24.08.1022:10 | 391 | |
jbhlyk | 24.08.1019:05 | 127 | |
RogerT | 24.08.0923:20 | 145 | |
좌절금지 | 24.08.0717:18 | 286 | |
RogerT | 24.08.0609:17 | 115 | |
줌바이퍼 | 24.08.0606:14 | 459 | |
jbhlyk | 24.08.0523:34 | 81 | |
수인과윤슈 | 24.08.0521:10 | 185 | |
좌절금지 | 24.08.0521:08 | 838 | |
Stultus | 24.08.0221:07 | 427 | |
Tamy | 24.07.3019:12 | 343 | |
해킨도전자 | 24.07.2915:37 | 262 | |
june119 | 24.07.2813:52 | 206 | |
Stultus | 24.07.2112:43 | 245 | |
BlueGuerrilla | 23.05.0502:19 | 3993 | |
Stultus | 24.07.1219:19 | 755 | |
김태국 | 21.08.0213:10 | 3679 | |
Stultus | 24.07.1122:47 | 215 | |
Stultus | 24.07.1020:44 | 138 | |
Stultus | 24.07.0921:44 | 137 | |
Stultus | 24.07.0820:57 | 223 | |
의정이 | 24.07.0811:28 | 171 | |
Stultus | 24.07.0721:25 | 264 | |
bsiugr | 24.07.0604:41 | 288 | |
애플브리크 | 24.07.0509:56 | 492 | |
광호 | 24.02.1715:21 | 2185 | |
치토 | 24.06.2723:24 | 398 | |
talas | 24.06.2617:24 | 193 | |
블루사탕 | 24.06.2120:58 | 116 | |
gtrfxdsp | 24.06.1609:01 | 511 | |
Mactopia | 24.06.1401:04 | 345 | |
Stultus | 24.06.1120:40 | 726 | |
새콤칠리 | 24.06.1115:07 | 672 | |
좌절금지 | 23.02.2118:35 | 118만 | |
Steer | 24.06.1001:11 | 275 | |
Door | 24.06.0810:09 | 155 | |
Tamy | 24.06.0107:41 | 416 | |
ssdwe346 | 24.05.2923:53 | 299 | |
joy | 24.05.2809:58 | 264 | |
거니 | 24.05.2601:07 | 243 | |
RogerT | 24.05.2520:14 | 247 | |
좌절금지 | 24.05.1812:40 | 913 | |
wjdgkdus | 24.05.1615:02 | 211 | |
Tamy | 24.05.1417:36 | 797 | |
줌바이퍼 | 24.05.1002:04 | 1008 | |
의정이 | 24.05.0821:05 | 144 | |
ryzen | 23.10.0921:28 | 2405 | |
챠니앤차니 | 24.05.0319:15 | 146 | |
챠니앤차니 | 24.05.0220:17 | 174 | |
고맹이 | 24.05.0210:00 | 635 | |
shl628 | 24.04.3013:54 | 1067 |
안녕하세요~
이미지가 깨진 부분이 있는 것 같습니다.