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

看板LinuxDev作者 (Ami)時間4年前 (2020/04/02 16:43), 4年前編輯推噓1(107)
留言8則, 5人參與, 4年前最新討論串1/2 (看更多)
大家好, 我的作業平台是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

04/02 22:43, 4年前 , 1F
dma 要記憶體的 function 可以配置non cacahe/non buffer
04/02 22:43, 1F

04/02 22:44, 4年前 , 2F
的區域
04/02 22:44, 2F
我的dma funciton在linux下面不能用,然後我是直接寫dma的register來啟動dma。 所以我才想要知道如果開/關cache呢? ※ 編輯: hirofumisyo (111.251.48.187 臺灣), 04/04/2020 16:57:01

04/04 21:17, 4年前 , 3F
關了可能linux都跑不起來吧,dma w完flush cache一下呢
04/04 21:17, 3F
請問在linix下怎麼flush cache呢? ※ 編輯: hirofumisyo (101.136.141.77 臺灣), 04/04/2020 22:54:55

04/05 13:32, 4年前 , 4F
linux dma coherent 了解下,劃dma區段可用cma實現,如許
04/05 13:32, 4F

04/05 13:32, 4年前 , 5F
詳細答覆我回頭寫給你
04/05 13:32, 5F
感謝回應,我找了一些dma coherent的資料來看後,我的理解是CPU在讀寫DDR時不是直接 讀寫DDR,而是透過cache; 但DMA卻是直接搬運DDR的資料,所以才會產生搬的data跟從 CPU寫入的不一樣。我不太懂你提到的用cma劃dma區段是什麼意思,在我使用的FPGA手冊 有給出DDR對應到的memory address range,因此我使用mmap的方法將data寫到對應的 address上(共4MB)。 ※ 編輯: hirofumisyo (111.251.48.187 臺灣), 04/05/2020 20:35:13

04/06 22:38, 4年前 , 6F
flush_tlb_mm() / flush_tlb_range() /update_mmu_cache()
04/06 22:38, 6F

04/06 22:38, 4年前 , 7F
有空自己看一下...
04/06 22:38, 7F

04/07 16:07, 4年前 , 8F
參考 volatile 關鍵字
04/07 16:07, 8F
文章代碼(AID): #1UXQMfFZ (LinuxDev)
文章代碼(AID): #1UXQMfFZ (LinuxDev)