GPMICLK は Fuesmap と GPMI の章の両方で言及されています。ただし、クロックと電源管理の第10章を見ると、これがどのクロックであるかは明らかではありません。
Linuxのクロックサマリーで次のクロックを見つけました。
bash# grep gpmi clk_summary
gpmi_io 0 0 0 22000000 0 0 50000 N
gpmi_apb 0 0 0 198000000 0 0 50000 N
gpmi_bch_apb 0 0 0 198000000 0 0 50000 N
gpmi_sel 0 0 0 396000000 0 0 50000 Y
gpmi_podf 0 0 0 198000000 0 0 50000 Y
gpmi_bch 0 0 0 198000000 0 0 50000 N
ONFI タイミング情報は U-Boot で無視されますか。
私はU-Bootでこのコードを見つけました:
// Set GPMI_TIMING0 and GPMI_TIMING1 to match Linux kernel settings.
clrsetbits_le32(&info->gpmi_regs->hw_gpmi_timing0,0x10203,0x00020101);
setbits_le32(&info->gpmi_regs->hw_gpmi_timing1,0xb0000000);
このコメントにもかかわらず、Linuxが行っていることははるかに複雑であるため、Linuxがこれらのタイミングを使用しているとは思いません。
以下は、Linuxでの比較可能なGPMIコードのスニペットです。
addr_setup_cycles = TO_CYCLES(sdr->tALS_min, period_ps);
data_setup_cycles = TO_CYCLES(sdr->tDS_min, period_ps);
data_hold_cycles = TO_CYCLES(sdr->tDH_min, period_ps);
busy_timeout_ps = max(sdr->tBERS_max, sdr->tPROG_max);
busy_timeout_cycles = TO_CYCLES(busy_timeout_ps, period_ps);
hw->timing0 = BF_GPMI_TIMING0_ADDRESS_SETUP(addr_setup_cycles) |
BF_GPMI_TIMING0_DATA_HOLD(data_hold_cycles) |
BF_GPMI_TIMING0_DATA_SETUP(data_setup_cycles);
hw->timing1 = BF_GPMI_TIMING1_BUSY_TIMEOUT(DIV_ROUND_UP(busy_timeout_cycles, 4096));では、LinuxはGPMICLKをgpmi_ioと呼んでいるようですか?私はこれをclk_summaryで見つけました:
enfc_podf 0 0 0 22000000 0 0 50000 Y
gpmi_io 0 0 0 22000000 0 0 50000 NGPMICLKは、先ほど送ったドキュメントによるとenfc_clk_podfから派生しており、デフォルトの除数は1と書かれているので、私の場合、少なくともLinuxカーネルによると、GPMICLKは22MHzであることを意味します。