Re: [問題] 如何關掉/打開 arm cpu 快取記憶體

看板LinuxDev作者 (入贅桧月家,我妻彩花)時間4年前 (2020/04/10 14:24), 4年前編輯推噓1(101)
留言2則, 2人參與, 3年前最新討論串2/2 (看更多)
一直忘記講我的思路 我有段時間沒有碰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, 3年前 , 2F
感謝分享
06/09 10:02, 2F
文章代碼(AID): #1Ua14Ea7 (LinuxDev)
文章代碼(AID): #1Ua14Ea7 (LinuxDev)