1113622_ja-JP

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

1113622_ja-JP

1113622_ja-JP

i.MX6 Android R13.4.1に基づくPORリブートのリカバリモードをサポートする方法<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


Overview

このドキュメントの目的は、MX6 Android R13.4.1に基づくPORリブートイベントのリカバリモードをサポートする方法を紹介することです。

バックグラウンド

Android R13.4.1をMX6 SabreSDボードで起動した場合、再起動の理由はWatchdogです。ただし、再起動の理由がウォッチドッグからPORに変更された場合、工場出荷時のリセット後にリカバリモードに入るのに失敗します。

R13.4.1 では、SRC_GPR10 のビット 8 がリカバリ モードの永続ビットとして使用されます。このビットは、U-boot がこのビットを使用してどのモードに入るべきかを区別できるように、再起動後も保持されることが期待されます。ただし、すべての SRC レジスタは、i.MX6DQRM セクション 59.4.1.2.3 IPP_RESET_B (POR) に従って POR シーケンスでリセットされます。したがって、再起動の理由が POR の場合、ソフトウェアが再起動前に設定した場合でも、リカバリ モードの永続ビットはクリアされます。これにより、ブートローダーは再起動後にリカバリモードに入らなくなります。

ソフトウェアの変更

i.MX6DQRMによると、SNVS_LP汎用レジスタは32ビットのリードライトレジスタを提供し、パワーダウンモード中に32ビットデータを保持するために任意のアプリケーションで使用できます。したがって、POR イベントのリカバリ モードをサポートするために、SNVS_LP レジスタを使用してリカバリ モードの永続ビットを格納できます。適用するには、以下の変更が必要です(patches.tar.gz参照)

  • Ubootパッチbootable/bootloader/uboot-imx/0001-ENGR00235817-mx6-use-SNVS-LPGPR-register-to-store-bo.patchを申請してください。

差分 --git a/cpu/arm_cortexa8/mx6/generic.cb/cpu/arm_cortexa8/mx6/generic.c

インデックス257c930..BD47130 100644

--- a/cpu/arm_cortexa8/mx6/generic.c

+++ b/cpu/arm_cortexa8/mx6/generic.c

@@ -1146,14 +1146,14 @@ int check_and_clean_recovery_flag(ボイド)

{

  int flag_set = 0;

  u32 reg;

- reg = readl(SRC_BASE_ADDR + SRC_GPR10);

+ reg = readl(SNVS_BASE_ADDR + SNVS_LPGPR);

flag_set=!!(reg & ANDROID_RECOVERY_BOOT);

/* ここで無限にループする場合に備えて清掃してください.... */

if(flag_set){

reg &= ~ANDROID_RECOVERY_BOOT;

- writel(reg, SRC_BASE_ADDR + SRC_GPR10);

+ writel(reg, SNVS_BASE_ADDR + SNVS_LPGPR);

  }

flag_setを返します。

@@ -1168,14 +1168,15 @@ int fastboot_check_and_clean_flag(無効)

{

  int flag_set = 0;

  u32 reg;

- reg = readl(SRC_BASE_ADDR + SRC_GPR10);

+

+ reg = readl(SNVS_BASE_ADDR + SNVS_LPGPR);

  flag_set = !!(reg & ANDROID_FASTBOOT_BOOT);

/* ここで無限にループする場合に備えて清掃してください.... */

if(flag_set){

   reg &= ~ANDROID_FASTBOOT_BOOT;

- writel(reg, SRC_BASE_ADDR + SRC_GPR10);

+ writel(reg, SNVS_BASE_ADDR + SNVS_LPGPR);

  }

flag_setを返します。

差分 --git a/include/asm-arm/arch-mx6/mx6.hb/include/asm-arm/arch-mx6/mx6.h

index efb90c2..45381e2 100644

--- a/include/asm-arm/arch-mx6/mx6.h

+++ b/include/asm-arm/arch-mx6/mx6.h

@@ -732,6 +732,8 @@

#define SRC_GPR9 0x40

#define SRC_GPR10 0x44

+#define SNVS_LPGPR 0x68

+

/* ボードIDを取得 */

#define board_is_rev(system_rev, rev) (((system_rev & 0x0F00) == rev) ? 1 : 0)

#define chip_is_type(system_rev、rev)\

  • カーネルパッチ kernel_imx/0001-ENGR00235817-mx6-use-SNVS-LPGPR-register-to-store-bo.patch の適用

差分 --git a/arch/arm/mach-mx6/system.cb/アーチ/arm/mach-MX6/system.c

インデックス6d24f22..61649c5 100644

--- a/arch/arm/mach-MX6/system.c

+++ b/arch/arm/mach-MX6/system.c

@@ -563,7 +563,7 @@ void mxc_clear_mfgmode(void)

#endif

#ifdef CONFIG_MXC_REBOOT_ANDROID_CMD

-/* この機能は、入力するSRC_GPR10[7-8]ビットにビットを設定します

+/* この機能は、入力するSNVS_LPGPR[7-8]ビットにビットを設定します

*特別なブートモード。これらのビットはウォッチドッグリセットではクリアされないため、

* ブートローダーで確認して、別のモードに入ることを選択できます。

@@ -574,18 +574,18 @@ ボイド do_switch_recovery(ボイド)

{

  u32 reg;

- reg = __raw_readl(SRC_BASE_ADDR + SRC_GPR10);

+ reg = __raw_readl(MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR);

reg |= ANDROID_RECOVERY_BOOT;

- __raw_writel(reg、SRC_BASE_ADDR + SRC_GPR10);

+ __raw_writel(reg, MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR);

}

ボイドdo_switch_fastboot(ボイド)

{

  u32 reg;

- reg = __raw_readl(SRC_BASE_ADDR + SRC_GPR10);

+ reg = __raw_readl(MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR);

  reg |= ANDROID_FASTBOOT_BOOT;

- __raw_writel(reg、SRC_BASE_ADDR + SRC_GPR10);

+ __raw_writel(reg, MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR);

}

#endif

差分 --git a/arch/arm/plat-mxc/include/mach/mx6.hb /アーチ/アーム/プラット-mxc /インクルード/マッハ/mx6.h

index 48b04b1..bb22de0 100644

--- a/arch/arm/plat-mxc/include/mach/mx6.h

+++ b/arch/arm/plat-mxc/include/mach/mx6.h

@@ -302,6 +302,8 @@

#define SRC_GPR9 0x40

#define SRC_GPR10 0x44

+#define SNVS_LPGPR 0x68

+

/* GPCオフセット */

#define MXC_GPC_CNTR_OFFSET 0x0

Androidi.MX6_All
タグ(1)
評価なし
バージョン履歴
最終更新日:
‎01-06-2026 02:09 AM
更新者: