2372921_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2372921_ja-JP

2372921_ja-JP

i.mx95 Android 16 ブートロゴ: uboot ロゴからカーネルロゴへのスムーズな遷移

ubootはブートロゴを表示し、カーネルに入った後もブートロゴは表示されたままになります。


現在、ubootのコードを修正すると、uboot終了時にディスプレイが閉じられず、カーネルがロードされるまでロゴが表示され続けるという問題が発生しています。

LVDSディスプレイに関する情報については、以下の処理方法があります。

  1. PWMスクリーンバックライト制御に関する問題については、ubootでバックライト関連のピンが初期化されるようにすることで問題を解決し、カーネルの初期化中に設定を通じて、カーネルがLVDS PWMの初期化をリセットしないようにしました。
  2. ディスプレイの電力ドメインについては、scmi_pm_domain.c を修正しました。ディスプレイの電源モジュールがリセットされないように、ドライバのソースコードに以下の情報を追加します。
+               if (strcmp(scmi_pd->name, "display") == 0) {
+                       scmi_pd->genpd.flags = GENPD_FLAG_ACTIVE_WAKEUP | GENPD_FLAG_RPM_ALWAYS_ON;
+               }​



現在の問題は、
カーネル時間の3秒後、カーネルの表示モジュールが起動すると、カーネルは緑色の画面を表示し、カーネルのロゴを正常に表示できなくなります。

回复: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

kernel.log:
カーネルが実行されると、ubootのロゴがカーネルのロゴに切り替わり、画面が2秒間真っ暗になります。
kernel_green.log:
ディスプレイの電源ドメインを維持し、リセットを避けてください。カーネルディスプレイモジュールが実行されると、緑色の画面が表示されます。

--- a/drivers/pmdomain/arm/scmi_pm_domain.c
+++ b/drivers/pmdomain/arm/scmi_pm_domain.c
@@ -105,6 +105,9 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev)
                scmi_pd->genpd.power_on = scmi_pd_power_on;
                scmi_pd->genpd.flags = GENPD_FLAG_ACTIVE_WAKEUP;
 
+               if (strcmp(scmi_pd->name, "display") == 0) {
+                       scmi_pd->genpd.flags = GENPD_FLAG_ACTIVE_WAKEUP | GENPD_FLAG_RPM_ALWAYS_ON;
+               }
                if (!strcmp(scmi_pd->name, "hsio_top"))
                        scmi_pd->genpd.flags = 0;

回复: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

ディスプレイインターフェース: lvds
理論的には、カーネルのディスプレイ関連ドライバはU-Bootの状態を維持し、二次初期化を経ずに直接ディスプレイ動作モードに入るべきである。
あるいは、初期化プロセスはカーネルの動作モードに直接かつ迅速に切り替えてカーネルのロゴを表示することもできます。

カーネル内でどのように処理すればよいでしょうか?
カーネルに表示される関連設定はDRMフレームワークを通じて構成され、そのためには基盤となるハードウェアドライバをDRMフレームワークに適合させる必要がある。

Re: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

こんにちは、

LVDS に適切な dts ファイルを使用していますか?Android のプリビルドイメージでテストしましたか?


Re: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

LVDSに適切なdtsファイルを使用していますか?
----> LVDS画面は既に表示済みです。
LVDSスクリーンは、U-Bootおよびカーネル実行中にロゴを表示できます。

ubootによってロゴが表示された後、システムがカーネルに切り替わり、ディスプレイモジュールデバイスが再初期化されると、ディスプレイの電源ドメインが最初にオフになり、その後オンになるため、2秒間画面が黒くなります。
画面が真っ暗になるとは思っていません。
カーネルがディスプレイモジュールを再初期化する際に、ubootの設定を継承し、カーネルロゴを直接表示した後、Androidに入り、ブートアニメーションを直接表示することを期待しています。この過程で、画面が真っ黒になるのを避けたい。

現在、ubootに修正を加え、uboot終了時にロゴ画像が閉じないようにしました。
diff --git a/arch/arm/lib/bootm.cb/arch/arm/lib/bootm.c
インデックス 81e8ddae..c6f1f8e8 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -72,7 +72,7 @@ static void announce_and_cleanup(int fake)
#endif

#if defined(CONFIG_VIDEO_LINK)
- video_link_shut_down();
+ //video_link_shut_down();
#endif


U-Bootとカーネルの両方でPWMバックライト制御に修正を加え、カーネルドライバがスムーズに制御を引き継げるようにしました。
ubootからカーネルへのPWMバックライトはオフにリセットされません。

さらに、カーネル内のディスプレイ電源ドメインへの継続的な電力供給を確保するために、ディスプレイ電源ドメインの変更を試みました。しかし、この変更の結果、ディスプレイが正常に表示されなくなってしまいました。カーネルのロゴを切り替えた後、画面が緑色に表示された。
この例外はどのように処理すればよいでしょうか?DPUの設定に問題があり、それが原因でディスプレイパイプ全体が誤動作しているようです。


Androidのプリビルドイメージでテストしましたか?
-->はい、LVDSの表示機能は既に正常に動作していると確信しています。
Androidのコードは変更していません

Re: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

GENPD_FLAG_RPM_ALWAYS_ONフラグを追加した後、DPU95はed_cont_shdld_doneで常にタイムアウトします。
その結果、DPU95に渡されるすべてのパラメータが無効になる。


DPU95の設定方法は?DPU開発に関する関連資料はありますか?


+               if (strcmp(scmi_pd->name, "display") == 0) {
+                       scmi_pd->genpd.flags = GENPD_FLAG_ACTIVE_WAKEUP | GENPD_FLAG_RPM_ALWAYS_ON;
+               }​


static void dpu95_crtc_atomic_enable(struct drm_crtc *crtc,
				     struct drm_atomic_state *state)
{
	struct dpu95_drm_device *dpu_drm = to_dpu95_drm_device(crtc->dev);
	struct dpu95_crtc *dpu_crtc = to_dpu95_crtc(crtc);
	struct drm_encoder *encoder = &dpu_drm->encoder[dpu_crtc->stream_id];
	bool enc_is_dsi = encoder->encoder_type == DRM_MODE_ENCODER_DSI;
	pr_err("liucx %s:%d \n", __func__, __LINE__);
	if (!liucx_logo_keep) {
		//return;
	}
	//dpu95_crtc_disable(crtc);
	drm_crtc_vblank_on(crtc);

	enable_irq(dpu_crtc->dec_shdld_irq);
	enable_irq(dpu_crtc->db_shdld_irq);
	enable_irq(dpu_crtc->ed_cont_shdld_irq);

	dpu95_fg_enable_clock(dpu_crtc->fg, enc_is_dsi);
	dpu95_ed_pec_sync_trigger(dpu_crtc->ed_cont);
	dpu95_db_shdtokgen(dpu_crtc->db);//CONTROLTRIGGER  SHDTOKGEN
	dpu95_fg_shdtokgen(dpu_crtc->fg);
	dpu95_fg_enable(dpu_crtc->fg);

    //always timeout,why?How does DPU generate this interrupt?
	DPU95_CRTC_WAIT_FOR_COMPLETION_TIMEOUT(ed_cont_shdld_done);
	DPU95_CRTC_WAIT_FOR_COMPLETION_TIMEOUT(db_shdld_done);
	DPU95_CRTC_WAIT_FOR_COMPLETION_TIMEOUT(dec_shdld_done);

	disable_irq(dpu_crtc->ed_cont_shdld_irq);
	disable_irq(dpu_crtc->db_shdld_irq);
	disable_irq(dpu_crtc->dec_shdld_irq);

	DPU95_CRTC_WAIT_FOR_FRAMEGEN_PRIMARY_SYNCUP(dpu_crtc->fg);

	/* ignore initial empty primary pixel FIFO read status, just clear it */
	dpu95_fg_primary_clear_channel_status(dpu_crtc->fg);

	dpu95_crtc_queue_state_event(crtc);//发送一个event,用于处理vblank事件
}

Re: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

linuxRMを参照してください。

https://www.nxp.com/docs/en/reference-manual/RM00293.pdf

また、ドライバを確認することもできます。

Linux DPU95 DRMドライバツリーは、drivers/gpu/drm/imx/dpu95/にあります。

Linux-tn-imx/ドライバ/gpu/drm/imx/dpu95 (tn-imx_6.18.2_1.0.0-stable) · TechNexion/Linux-tn-imx · GitHub

dpu95-crtc.c

dpu95-extdst.c

dpu95-domainblend.c

U-Boot imx95_dpu.c


Re: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

よく分かりません。

U-Boot imx95_dpu.c について言及されましたが、その機能は何ですか?そして、私は何をすればいいですか?
ファイル U-Boot imx95_dpu.c は、U-Boot 用の DPU ドライバです。
カーネルからU-BootにDPUドライバを移植すべきでしょうか?

Re: i.mx95 android 16 boot logo: Smooth transition from uboot logo to kernel logo

DPU95ディスプレイコントローラーの開発マニュアルはありますか?
現状では、dpu95はubootの状態を維持する必要があります。カーネル内では、この状況においてdpu95の動作原理を参照し、レジスタを設定することでdpu95の初期化を完了させる必要がある。

タグ(1)
評価なし
バージョン履歴
最終更新日:
昨日
更新者: