Re: [問題] 如何關掉/打開 arm cpu 快取記憶體
一直忘記講我的思路
我有段時間沒有碰FPGA,可能有寫錯的地方了
※ 引述《hirofumisyo (Ami)》之銘言:
: 標題: [問題] 如何關掉/打開 arm cpu 快取記憶體
: 時間: Thu Apr 2 16:43:16 2020
:
: 大家好,
:
: 我的作業平台是FPGA zynq 開發板,裡面有arm cpu。
:
: 最近在試用dma將寫進DDR的資料搬出來,
:
: 但發現搬出來的資料都有問題。
:
: 後來發現在dma開始搬資料前使用sdk開發平台的date cache disable這個功能就能讓
:
: 結果是正常的。
:
: 不過我之後希望將這個流程搬到灌了linux作業系統的環境下去執行,
:
: 因此想要問一下在linux開發環境下要如何去關掉跟打開快取呢?
:
: 我是用ubuntu的linux,
:
: 謝謝大家。
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.58.88 (臺灣)
: ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1585817001.A.3E3.html
: → descent: dma 要記憶體的 function 可以配置non cacahe/non buffer 04/02 22:43
: → hizuki: linux dma coherent 了解下,劃dma區段可用cma實現,如許 04/05 13:32
: → hizuki: 詳細答覆我回頭寫給你 04/05 13:32
: 感謝回應,我找了一些dma coherent的資料來看後,我的理解是CPU在讀寫DDR時不是直接
: 讀寫DDR,而是透過cache; 但DMA卻是直接搬運DDR的資料,所以才會產生搬的data跟從
: CPU寫入的不一樣。我不太懂你提到的用cma劃dma區段是什麼意思,在我使用的FPGA手冊
: 有給出DDR對應到的memory address range,因此我使用mmap的方法將data寫到對應的
: address上(共4MB)
FGPA因為沒有Iommu,所以必須訪問continguous memory
因此我們使用dts當中將一段memory設定為reserved-memory
https://www.kernel.org/doc/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
這樣linux kernel就不會去使用這一段
Linux當中有兩種memory是不會有cache的問題,一個是io的memory region,一個是dma memory
後者的問題是device/host的一致性問題
我們唯獨需要確保的就是FPGA寫入的東西,在我們讀取的時候不被寫入。這邊的同步請自行
和FPGA進行通訊確保。效率的關鍵就在這裡
然後關於Linux上訪問該區段的問題,我這裡寫一個比較傻的方法,想必你也不需要別的DMA Memory
首先初始化該區段 of_reserved_mem_device_init()
https://elixir.bootlin.com/linux/v5.6.3/source/drivers/media/platform/mtk-vpu/mtk_vpu.c#L854
然後去這個區段取一段memory出來進行mapping(這樣kernel才可以訪問)
dma_alloc_coherent()
https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt
https://elixir.bootlin.com/linux/v5.6.3/source/drivers/media/platform/mtk-vpu/mtk_vpu.c#L679
一般論的話,這段memory其實都是從開頭開始分的
當然還有更簡單的做法,只做reserved-memory那一步,然後對 /dev/mem 進行mmap()操作
這部分只要編譯kernel的時候有許可訪問 /dev/mem 就可以,記憶體的物理位置要自行在程式中配置,
或者從/proc 當中讀dts出來
複雜點的做法可以用 memremap() 就好了
: → WPC001: flush_tlb_mm() / flush_tlb_range() /update_mmu_cache() 04/06 22:38
: → WPC001: 有空自己看一下... 04/06 22:38
別鬧啊,哪個driver這樣寫,很簡單的事情非要用非推薦的書寫方式
: → leolarrel: 參考 volatile 關鍵字 04/07 16:07
這完全就是胡說八道了,這優化的是compiler
--
起初,皇軍進佔滿州, 我沒有反對,因為我要去滿州撈錢。
接著,皇軍發動對支戰爭, 我沒有反對,因為那是支那人自找苦吃。
後來,皇軍發動太平洋戰爭,我沒有反對,因為看鬼畜米英四處奔逃出了一口惡氣。
以後,鬼畜米英來轟炸, 我全力反對,因為我們台灣是無辜的,這是米英的戰爭罪行
最後,天皇宣布無條件投降,我沒有反對。因為我們台灣人是戰勝國國民,
戰爭責任與我無關,我要有跟戰勝國一樣的物資配給好賺錢,也不要坐祥瑞回家!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 38.106.22.59 (美國)
※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1586499854.A.907.html
打了半天會發現別的FPGA有文檔了,思路是萬年不變的
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841683/Linux+Reserved+Memory
※ 編輯: hizuki (38.106.22.59 美國), 04/10/2020 14:30:07
→
04/10 17:49,
4年前
, 1F
04/10 17:49, 1F
推
06/09 10:02,
4年前
, 2F
06/09 10:02, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章