Gnome 우분투에서 디스플레이가 1080만 됩니다

모니터 인식이 안돼서 그런걸까요?

안녕하세요.

현재 배포된 우분투는 wayland compositor 기반 입니다.

x11기반의 경우 해상도 조절이 가능한데 반해 wayland의 경우 해상도 설정이 안되는 단점이 있습니다.

아무래도 embedded system 기반이다 보니, 이런 저런 단점들이 존재하긴 합니다. ㅠㅠ

4k 모니터를 사용하려면 커널 빌드시, display 의 해상도를 4k로 조절하는 device tree 내 설정을 변경해야 합니다.

관련해서 설정하는 방법을 곧 공유드리도록 하겠습니다.

고맙습니다.

안녕하세요.

4K 모니터 설정을 위한 방법 공유 드립니다.

  1. 첫번째로 커널 arch/arm64/boot/dts/telechips/tcc805x/override/topst-d3-g-disp.dtsi를 아래와 같이 변경합니다.

  2. u-boot의 arch/arm64/boot/dts/telechips/tcc805x/override/topst-d3-g-disp.dtsi를 아래와 같이 변경합니다.

  3. u-boot의 arch/arm/dts/telechips/tcc805x/override/topst-d3-g-disp-target-config.dtsi를 아래와 같이 수정합니다.

  4. 4K 이미지의 fwdn을 위해 fwdn시 필요한 dram_param.bin 파일을 교체해야합니다. 아래와 같이 qos 관련 설정을 변경해야합니다.

이후 bitbake -C compile u-boot-topst, bitbake -C compile linux-topst로 빌드하여 이미지를 생성하시면 됩니다.

다만 우분투 이미지는 빌드법이 따로 공개가 되어있지 않기에 4K 우분투로 빌드된 fwdn파일들과 fai이미지 파일 공유 드립니다.

4K Ubuntu Image

단 공유드리는 이미지는 1번째 화면만 4K로 고정할당되어 사용할 수 있으며, 추가 3대의 모니터는 FHD로 동작합니다.

감사합니다 :slight_smile:

설명 감사합니다.

  • 4K 우분투 이미지 링크에 접근 권한이 없습니다.
  • 4K 우분투 이미지는 gnome 우분투인가요?
  • 적어주신 Yocto 관련 명령으로 이미지를 만들면 결과물이 D3G-TOPST-Yocto-image-v1.0.0 요런게 나오나요?
    • 제가 아직 Yocto를 한번도 해보지 않은 상태입니다.
  • 4K 우분투 이미지 링크에 접근 권한이 없습니다.
    → 권한은 다시 확인해보겠습니다. 확인 후 바로 답변 드리겠습니다.

  • 4K 우분투 이미지는 gnome 우분투인가요?
    → 네, 맞습니다. 사용하시고 계시던 Gnome 우분투 4K입니다.

  • 적어주신 Yocto 관련 명령으로 이미지를 만들면 결과물이 D3G-TOPST-Yocto-image-v1.0.0 요런게 나오나요?
    → 네, 맞습니다. 위 내용과 같이 빌드하게 되면, 우분투가 아닌 Yocto image가 생성됩니다.

추가적으로 4K를 사용하시려면, 사용하시는 모니터가 4K를 지원해야 동작이 가능합니다.

감사합니다.

이미지 공유 드립니다.

현재 gnome 우분투는 릴리즈 이전이기 때문에 채팅으로 다운로드 비밀번호 공유 드립니다.

d3g_4k_gnome_ubuntu-v1.0.0.zip

감사합니다.

fwdn.sh를 실행했는데 Segmentation fault가 나왔습니다.

제가 놓힌게 있을까요?

pyohwan@hp-elitedesk-705-g5-desktop-mini-debian12:~/topst-d3-g/d3g_4k_gnome_ubuntu-v1.0.0$ ./fwdn.sh 
[main:30] FWDN V8 v1.4.12 - 2022.8.19 13:49:14
[LoadFWDNRom:417] Start to load FWDN rom
[LoadMCERT:606] /home/pyohwan/topst-d3-g/d3g_4k_gnome_ubuntu-v1.0.0/boot-firmware/./prebuilt/mcert.bin
[LoadHSM:623] /home/pyohwan/topst-d3-g/d3g_4k_gnome_ubuntu-v1.0.0/boot-firmware/./prebuilt/hsm.cs.bin
[SendFWDNHeader:648] /home/pyohwan/topst-d3-g/d3g_4k_gnome_ubuntu-v1.0.0/boot-firmware/./prebuilt/fwdn.rom - Header
[SendFWDNBody_V8:551] /home/pyohwan/topst-d3-g/d3g_4k_gnome_ubuntu-v1.0.0/boot-firmware/./prebuilt/fwdn.rom - Body
[LoadFWDNRom:428] Complete to load FWDN rom
[GetFWDNRomVersion:1588] fwdn.rom version : 23.5.22
[GetFileAndWriteCommand:762] /home/pyohwan/topst-d3-g/d3g_4k_gnome_ubuntu-v1.0.0/boot-firmware/./prebuilt/dram_params.bin
[PrintDeviceInfo:1201] --------------Device info-------------
[PrintDeviceInfo:1202] 

----- Detail of Storages -----
#### eMMC Info ####
Manufacture ID: 0x15
OEM: 0x100
Name: BJTD4 
User Capacity: 29.1 GiB (31268536320 Byte)
Boot Capacity: 4 MiB (4194304 Byte)
RPMB Capacity: 4 MiB (4194304 Byte)
Speed Mode: HS200

----- Summary of Storages -----
eMMC : O
SNOR : X
UFS : X
- O : Init success
- X : Init failed or not exist

----- Summary of DRAM Init -----
DRAM Init : Success (Result 0x0 )
DRAM Size : 8192MB

[PrintDeviceInfo:1203] --------------------------------------
[CMDCommand:1412] Start CMD Command
[CMDCommand:1427] CMD Command - (�a), (size = 6)
[ReceiveFWDNPacket:224] Received Nack
[PrintUSBLog:203] MICOM : Received Commands: �a
Failed to initialize device

[CMDCommand:1439] Failed to receive response(0xf001)
[main:30] FWDN V8 v1.4.12 - 2022.8.19 13:49:14
[GetFWDNRomVersion:1588] fwdn.rom version : 23.5.22
[CMDCommand:1412] Start CMD Command
./fwdn.sh: line 4: 28215 Segmentation fault      ./fwdn --storage emmc --low-format
[main:30] FWDN V8 v1.4.12 - 2022.8.19 13:49:14
[GetFWDNRomVersion:1588] fwdn.rom version : 23.5.22
[CMDCommand:1412] Start CMD Command
./fwdn.sh: line 5: 28217 Segmentation fault      ./fwdn -w boot-firmware/boot.single.json
[main:30] FWDN V8 v1.4.12 - 2022.8.19 13:49:14
[GetFWDNRomVersion:1588] fwdn.rom version : 23.5.22
[CMDCommand:1412] Start CMD Command
[CMDCommand:1427] CMD Command - (�!k), (size = 6)
[ReceiveFWDNPacket:224] Received Nack
[PrintUSBLog:203] MICOM : Received Commands: �!k
Unknown cmd: �!k

[CMDCommand:1439] Failed to receive response(0xf001)

Windows에서만 확인해보고, Linux에서 확인을 해보지 못했습니다.

확인 후 답변 남기도록 하겠습니다.

감사합니다.

우선 공유드린 fai이미지 파일과 boot-firmware/prebuilt/dram_params.bin만 원래 사용하시던 폴더로 복붙하여 진행해주실 수 있으실까요?

확인해보니 스크립트 파일에서 각 줄마다 실행하는 ./fwdn 파일이 잘못되어있었습니다.
최신 버전의 fwdn파일이 아니라 예전 버전의 fwdn파일이어서 동작 실패가 발생했습니다.
정상작동하는 fwdn파일 전달 드립니다.

전달드렸던 fwdn파일 삭제 후 재전달드리는 fwdn파일로 대체하신 후 진행 부탁드립니다.
fwdn

번거롭게 해드려 죄송합니다.

감사합니다!!

감사합니다. 4K 디스플레이 되는것을 확인했습니다.

2K로 조절이 동적으로 조절이 안되는데 이는 wayland의 단점인가 보네요.

2k로 바꿀려면 커널 빌드를 또해야 하는거죠?

네, 맞습니다. 2K를 사용하기 위해선 커널을 2K로 설정하여 재빌드하여야합니다.

현재 디바이스트리에서 해상도를 고정하여 사용하고 있으므로 여러 해상도 지원이 불가합니다.

D3-G GNOME에서 다중 해상도 선택 가능하게 하기 (DTB 수정)

안녕하세요. D3-G에서 GNOME 디스플레이 설정에 1920x1080만 나오는 문제를 DTB 수정으로 해결했습니다.

원인 분석

D3-G의 Telechips DRM 드라이버는 HDMI EDID를 읽지 않고, DTB의 display-timings에 정의된 해상도만 사용합니다. 현재 DTB에 timing이 하나뿐이라 1080p만 나오는 것입니다.

DP 드라이버(telechips_drm_dp.c)의 tccdrm_dp_get_dev_node_modes 함수가 display-timings 내 모든 timing을 순회해서 모드 리스트에 추가하므로, DTB에 timing만 추가하면 GNOME에서 선택 가능해집니다.

수정 방법

kernel-src/arch/arm64/boot/dts/telechips/tcc805x/override/topst-d3-g-disp.dtsitccdrm_dp0 display-timings에 아래 timing을 추가합니다.

timing_drm_dp0_2k: 2560x1440p60@1 {
    clock-frequency = <241500000>;
    hactive = <2560>;
    vactive = <1440>;
    hfront-porch = <48>;
    hback-porch = <80>;
    hsync-len = <32>;
    hsync-active = <1>;
    vback-porch = <33>;
    vfront-porch = <3>;
    vsync-len = <5>;
    vsync-active = <1>;
    de-active = <1>;
    pixelclk-active = <1>;
};

timing_drm_dp0_4k30: 3840x2160p30@2 {
    clock-frequency = <297000000>;
    hactive = <3840>;
    vactive = <2160>;
    hfront-porch = <176>;
    hback-porch = <296>;
    hsync-len = <88>;
    hsync-active = <1>;
    vback-porch = <72>;
    vfront-porch = <8>;
    vsync-len = <10>;
    vsync-active = <1>;
    de-active = <1>;
    pixelclk-active = <1>;
};

timing_drm_dp0_4k60: 3840x2160p60@3 {
    clock-frequency = <594000000>;
    hactive = <3840>;
    vactive = <2160>;
    hfront-porch = <176>;
    hback-porch = <296>;
    hsync-len = <88>;
    hsync-active = <1>;
    vback-porch = <72>;
    vfront-porch = <8>;
    vsync-len = <10>;
    vsync-active = <1>;
    de-active = <1>;
    pixelclk-active = <1>;
};

DTB 빌드 및 적용

# 빌드
cd ~/kernel-src
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs

# 백업 (필수)
sudo dd if=/dev/mmcblk0p3 of=/mnt/ssd/mmcblk0p3_backup.img bs=4096

# 적용
sudo dd if=arch/arm64/boot/dts/telechips/tcc805x/tcc8050-topst-d3-g.dtb of=/dev/mmcblk0p3 bs=4096

# 재부팅
sudo reboot

D3-G는 DTB가 별도 파티션(mmcblk0p3)에 단독으로 저장됩니다. 백업 후 진행하면 복구도 가능합니다.

결과

재부팅 후 아래와 같이 4개 해상도가 노출됩니다:

$ cat /sys/class/drm/card0/card0-DP-1/modes
1920x1080
2560x1440
3840x2160
3840x2160

4K 사용 시 주의사항

4K(3840x2160)로 설정하면 화면이 지지직거리는 현상이 발생합니다. dmesg에서 아래 에러가 반복됩니다:

[  121.812112] tccdrm-vioc tcc-drm-lcd: [drm:lcd_irq_handler] *ERROR* FIFO UNDERRUN
[  121.912114] tccdrm-vioc tcc-drm-lcd: [drm:lcd_irq_handler] *ERROR* FIFO UNDERRUN
[  122.478774] tccdrm-vioc tcc-drm-lcd: [drm:lcd_irq_handler] *ERROR* FIFO UNDERRUN

su.nam 님 댓글을 보니 dram_param.py QoS 설정 변경과 VIC 코드 수정이 필요한 것 같은데, 저는 Yocto 빌드 환경이 없습니다. @su.nam 님, Yocto 없이 QoS 설정을 적용할 수 있는 방법이 있을까요?

현재 안정적으로 사용 가능한 해상도: 2560x1440

fractional scaling 사용하려면:

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
3 Likes

안녕하세요, 생글이님.

알려주신 내용으로 2K, 720p. Ubuntu에서 4K 해상도까지 정상 동작 확인했습니다.
fwdn시 boot.single.json파일을 emmc에 write하는데요, 이 때 write되는 dram_params.bin파일을 qos가 enable된 bin파일로 바꿔주셔야합니다.
기존 fwdn하시던 파일(우분투 fai이미지가 있는파일)에서 boot-firmware/prebuilt/ 경로에 있는 dram_params.bin을 dram_params.bin 파일로 대체 부탁드립니다.
이후 cmd에서 fwdn.exe파일이 있는 경로로 이동해주신 후, 아래 명령어 사용해주시면 됩니다.

.\fwdn.exe --fwdn boot-firmware\fwdn.json --write boot-firmware\boot.si
ngle.json

fwdn 완료 후 재부팅 뒤 4K해상도 변경 확인해주시면 되겠습니다.

감사합니다.

dram_params.bin 다운로드 기간이 만료됐는데 다시 주실 수 있을까요? 그리고 언제 만료되는지 알려주시거나, 좀 길게 설정 부탁합니다.

그리고 TCC8050의 LPDDR4 총 대역폭이 얼마인지 아시나요? QoS 활성화 시 디스플레이 컨트롤러(VIOC)에 우선순위를 주면 CPU/GPU 성능에 영향이 있을지 궁금합니다.

안녕하세요, 생글이님.
공유드리는 dram_params.bin 파일은 다운로드 유효기간이 일주일입니다. 일주일 안에 다운로드 부탁드립니다.

메모리 spec은 아래와 같습니다.

  • LPDDR4 and LPDDR4X DRAM: Up to 2133 MHz
  • 32-bit Data Bus6 x 2-channel
  • Up to 16 GB maximum

감사합니다.

@su.nam 님 dram_params.bin 적용 후에도 4K에서 여전히 FIFO UNDERRUN이 발생합니다. u-boot DTB 수정도 필요한가요? 공유하신 이미지의 수정내용을 텍스트로 알 수 있을까요?

@saenggeuri 님, u-boot설정은 따로 필요없습니다.
제가 다시 확인 후 빠르게 답변 드리도록 하겠습니다.

감사합니다.

@saenggeuri 님, 확인 결과 FIFO DUNDERRUN 없이 정상 작동 확인하였습니다.
아마도 dram_params.bin 적용이 안된 것으로 예상이 되는데요…
방금 확인한 파일 재공유 드립니다. dram_params.bin

기존 fwdn 폴더의 boot/firmware/prebuilt/에 있는 dram_params.bin 파일을 대체 해주시고 cmd에서 아래 명령어 사용해주시면 됩니다.

.\fwdn.exe --fwdn boot-firmware\fwdn.json --write boot-firmware\boot.single.json

dram_params.bin파일 적용은 u-boot에서 아래 커맨드로 00000000이 아닌 0000ffff가 나오는지 확인해주시면 됩니다.

md 0x13500034

expected result: 13500034: 0000ffff

감사합니다.

@su.nam 님 안녕하세요.

md 0x13500034 결과는 0000ffff로 확인됩니다. 그런데도 3840x2160@60Hz에서 FIFO UNDERRUN이 계속 발생합니다.

추가로 확인한 사항입니다:

  • dram_params.bin은 dd로 적용했고 (bs=512 seek=2, boot0/boot1 모두)
  • fwdn 대신 dd를 사용했는데, boot.single.json 확인 결과 dram_params.bin addr이 0x00000002로 동일해서 적용 위치는 같다고 판단했습니다
  • 다만 dd는 dram_params.bin만 교체했고 BL1/BL2는 그대로입니다. fwdn은 boot.single.json 기준으로 BL1/BL2 포함 전체를 다시 구우므로, su.nam님 환경과 BL2 버전이 다를 수 있습니다
  • 0x13500034 = 0000ffff 확인 후에도 증상 동일
  • 커널 소스에서 0x13500000 주소가 TCC807x의 SMMU 레지스터로 나오고, TCC8050 DTB에는 해당 주소가 없어서 검증 방법이 맞는지 확인이 필요할 것 같습니다

몇 가지 여쭤봐도 될까요?

  1. su.nam님 테스트 환경에서 4K는 몇 Hz였나요? (30Hz / 60Hz)
  2. 0x13500034가 TCC8050에서 어떤 레지스터인지 알 수 있을까요?

감사합니다.