8916/8939プラットフォームでのクラッシュリスタート問題に対するQualcommのソリューション

質問:通常、クラッシュに遭遇したとき、しかしダンプから、手がかりを見つけることができません、それをどのように処理するのですか?
不明なリセット/犬の咬傷/メモリ破損/ビットフリップクラッシュなど。

回答:不明な犬の噛み付き/リセット、ランダムなメモリ破損、ビットフリップ、またはソフトウェアロジックのバグの可能性を嫌う奇妙なカーネルパニックのように見えるクラッシュが多数ある可能性があります。このようなクラッシュの問題については、ハードウェアから確認する必要があります。 、メモリ構成、PVS、CPR、電圧、クロック設定など。
通常、この種の問題では、問題を絞り込むために多くのテストを行う必要があるため、この種の不明なリセットの問題を解決するための正しい方向を見つけることができます。

通常、次のテストを行うことができます。

  1. PDNレポートを確認する
    お客様のハードウェアチームがPDNシミュレーションのケースを提起します。このレポートを確認して、すべての電源レールがクアルコムの要件に一致するかどうかを確認する必要があります。
    パワーレールのいずれかが通常の要件に一致しない場合は、vdd_cx、vdd_mx、vdd_apc(アプリコアのパワーレール)を
    確認する必要があります。クアルコムの要件から外れている場合は、テストのためにブーストする必要があります。 。

  2. ddr QBlazedテスト、テストddrを実行します。QBlazedテストについては、それでも使用方法がわからない場合は、ドキュメント80-NH759-1QBlizzard_2_10_UG.pdfを参照してください。

  3. cprを無効にします。cprを無効にすると、問題を再現できません。その後、cpr設定を採用して、vdd_apcを段階的にブーストする必要があります。
    arch / arm / boot / dts / qcom / msm8916-regulator.dtsi
    <0 0 2 4 8>、
    <1 0 2 4 7>;
    qcom、cpr-quot-adjust-scaling-factor-max = <650>;

  • qcom、cpr-enable;
    };
  1. 提高vdd_apc電気圧
    qcom、cpr-電圧-天井= <1050000 1150000 1350000>;
    qcom、cpr-電圧-床= <1050000 1050000 11375000>;
    —>
    qcom、cpr-電圧-天井= <1350000 1350000 1350000>;
    qcom、cpr-電圧-床= <1350000 1350000 1350000>;

  2. 提高cx電磁圧
    保持電圧を50mV上げます。
    / rpm_proc /core/power/sleep/src/8916/sleep_target_config.c
    // UVにプログラム保持(600000uV = 0.6V)
    静的定数UINT32 vddcx_pvs_retention_data [8] =
    { / * 000 /650000 + 50000 / 001 / 500000+ 50000 / 010 /650000 + 50000 / 011 /650000 + 50000 / 100 /650000 + 50000 / 101 /650000 + 50000 / 110 /650000 + 50000 / 111 * / 650000 + 50000 }。








vdd_cxを50mv上げます
\ rpm_proc \ core \ power \ railway_v2 \ src \ 8916 \ railway_config.c
// VDDCX
{ // VDDCX { .vreg_name =“ vddcx”、


        .vreg_type      = RPM_SMPS_A_REQ,
        .vreg_num       = 1,

        .pm_rail_id     = PM_RAILWAY_CX,
        .pmic_step_size = 12500,     // not used

        .initial_corner = RAILWAY_NOMINAL,

        .supports_explicit_voltage_requests = true,

        .default_uvs = (const unsigned[])
        {
            0,                      // RAILWAY_NO_REQUEST
            700000+50000,                 // RAILWAY_RETENTION
            1050000+50000,                // RAILWAY_SVS_KRAIT
            1050000+50000,                // RAILWAY_SVS_SOC
            1150000+50000,                // RAILWAY_NOMINAL
            1287500+50000,                // RAILWAY_TURBO
            1287500+50000,                // RAILWAY_TURBO_HIGH
            1287500+50000,                // RAILWAY_SUPER_TURBO
            1287500+50000,                // RAILWAY_SUPER_TURBO_NO_CPR
        },


}、

  1. ブーストmx
    はvdd_mxを最大値にバンプアップします

(1)SBLの変更:
次のコードは、PMICレジスターのLDO3(vdd_mx)の範囲を変更します
。pm_device_post_init(void)
{ pm_err_flag_type err = PM_ERR_FLAG__SUCCESS; // LDO_UL_LL_CONFIG:

  • err | = pm_spmi_lite_write_byte(1、0x42d0、0xA5、0);
  • err | = pm_spmi_lite_write_byte(1、0x426a、0x2、0);
  • err | = pm_spmi_lite_write_byte(1、0x42d0、0xA5、0);
  • err | = pm_spmi_lite_write_byte(1、0x426b、0x34、0);
  • err | = pm_spmi_lite_write_byte(1、0x4240、0x2、0);
  • err | = pm_spmi_lite_write_byte(1、0x4241、0x34、0);
    }

(2)RPMの変更:
\ rpm_proc \ core \ power \ railway_v2 \ src \ 8916 \ railway_config.c
//他のレールに投票するとMxの変更が発生するため、最初にVDDMXを初期化する必要があります。
{ .vreg_name =「vddmx」、.vreg_type = RPM_LDO_A_REQ、.vreg_num = 3、.pm_rail_id = PM_RAILWAY_MX、.pmic_step_size = 12500、//使用されていない.initial_corner = RAILWAY_NOMINAL、.supports_explicit_voltage_requests =真、.default_uvs =(constの符号なし[] ){ 0、// RAILWAY_NO_REQUEST 750000 + 50000、// RAILWAY_RETENTION 1050000 + 50000、// RAILWAY_SVS_KRAIT 1050000 + 50000、// RAILWAY_SVS_SOC 1150000 + 50000、// RAILWAY_NOMINAL 1287500 + 50000、// RAILWAY_TURBO















1287500 + 50000、// RAILWAY_TURBO_HIGH
1287500 + 50000、// RAILWAY_SUPER_TURBO
1287500 + 50000、// RAILWAY_SUPER_TURBO_NO_CPR
}、

(3)rpm_proc \ core \ systemdrivers \ pmic \ config \ msm8916 \ pm_config_target.c
次のコードは、ソフトウェアのLDO3(vdd_mx)の範囲を変更します。
pm_rpm_ldo_rail_info_typeのldo_rail_aにおける[NUM_OF_LDO_A] =
変更から:
{5、62.5、0、PM_ACCESS_ALLOWED、PM_ALWAYS_ON、PM_NPA_SW_MODE_LDO__IPEAK、PM_NPA_BYPASS_DISALLOWED、750、1350}、// LDO3 N1200_Stepper
に:
{5、62.5、0、PM_ACCESS_ALLOWED、PM_ALWAYS_ON、PM_NPA_SW_MODE_LDO__IPEAK、PM_NPA_BYPASS_DISALLOWED 、750、1400}、// LDO3 N1200_Stepper

  1. RPM CPRを無効にする
    /rpm_proc/core/power/rbcpr/src/target/8916/rbcpr_bsp.c
    すべての変数(gf_tn1_cpr_settings / gf_tn3_cpr_settings / tsmc_tn1_cpr_settings / tsmc_tn3_cpr_settings)-。
    rbcpr_enable =
  • .rbcpr_enablement = RBCPR_DISABLED、
  1. それでも問題が発生する場合は、上記のすべてのテストを行った後、msmチップのスワップテストが必要です
  2. 問題がmsmチップにある場合は、RMAが必要です

注:一部のコード変更は、参照用に、異なるビルドに基づく変更になります。コードリストはこちらです。

おすすめ

転載: blog.csdn.net/cornerstone1/article/details/112391251