*参照元 [#t338f415]
#backlinks

*説明 [#z5b42d5a]
-パス: [[linux-4.4.1/arch/arm/mm/cache-v7.S]]

-FIXME: これは何?
--説明


**引数 [#j6c2ea52]
-start
--
-end
--


**返り値 [#ndd1d057]
-なし?



**参考 [#bee1b080]


*実装 [#kbaf317d]
 /*
  *      v7_dma_inv_range(start,end)
  *
  *      Invalidate the data cache within the specified region; we will
  *      be performing a DMA operation in this region and we want to
  *      purge old data in the cache.
  *
  *      - start   - virtual start address of region
  *      - end     - virtual end address of region
  */
 v7_dma_inv_range:
         dcache_line_size r2, r3
-
--[[linux-4.4.1/dcache_line_size()]]

         sub     r3, r2, #1
         tst     r0, r3
         bic     r0, r0, r3
 #ifdef CONFIG_ARM_ERRATA_764369
-
--[[linux-4.4.1/CONFIG_ARM_ERRATA_764369]]

         ALT_SMP(W(dsb))
         ALT_UP(W(nop))
-
--[[linux-4.4.1/ALT_SMP()]]
--[[linux-4.4.1/ALT_UP()]]
--[[linux-4.4.1/W()]]

 #endif
         mcrne   p15, 0, r0, c7, c14, 1          @ clean & invalidate D / U line
 
-cp15 CRn=c7, opc1=0, CRm=c14, opc2=1, DCCIMVAC レジスタ
--データまたは統一キャッシュを clean & invalidate する。
--つまり Dirty なら書き出してからキャッシュを破棄。Clean なら破棄。
--レジスタのデータ(このコードは r0 を渡している)は仮想アドレスとして解釈される。

         tst     r1, r3
         bic     r1, r1, r3
         mcrne   p15, 0, r1, c7, c14, 1          @ clean & invalidate D / U line
 1:
         mcr     p15, 0, r0, c7, c6, 1           @ invalidate D / U line
-cp15 CRn=c7, opc1=0, CRm=c6, opc2=1, DCIMVAC レジスタ
--データまたは統一キャッシュを invalidate する。
--つまり Dirty でも Clean でも破棄。
--レジスタのデータ(このコードは r0 を渡している)は仮想アドレスとして解釈される。

         add     r0, r0, r2
         cmp     r0, r1
         blo     1b
         dsb     st
         ret     lr
 ENDPROC(v7_dma_inv_range)
-
--[[linux-4.4.1/ENDPROC()]]


*コメント [#h5c9d8d0]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS