หากต้องการอนุญาตให้มีการเข้าถึงที่สอดคล้องกันกับแคชจากตรรกะซอฟต์ลอจิกFPGAไปยังจํานวนหน่วยความจํา HPS ต้องอยู่ในสถานที่:
- ตารางหน้า MMU
- การตั้งค่าการรักษาความปลอดภัย NOC
- การกําหนดค่า CoreLink™ Level 2 Cache Controller L2C-310
- สัญญาณ sideband AXI: Axi_cache_security Bridge
- AxCache และ AxUser
- AXPROT
ตารางหน้า MMU
ต้องตั้งค่าตารางหน้า MMU เพื่อกําหนดพื้นที่หน่วยความจําเป้าหมายที่สามารถแคชได้ และปลอดภัยหรือไม่ปลอดภัย ดูเอกสารประกอบ Linux และ ARM สําหรับรายละเอียดเพิ่มเติมเกี่ยวกับคุณลักษณะการจัดสรรตารางหน้า MMU และโหมดที่ปลอดภัย (โซนความเชื่อถือ)
- ต้องทําเครื่องหมายหน่วยความจําเป็น Write back Write Allocate (WBWA)
- เพื่อให้เข้าถึงหน่วยความจําจากแอปพลิเคชันพื้นที่ผู้ใช้ Linux หรือ Kernel โหมดความปลอดภัยควรไม่ปลอดภัย
- ควรใช้การรักษาความปลอดภัยเพื่อให้หน่วยความจําเข้าถึงได้โดยกระบวนการที่ทํางานอยู่ในสถานะปลอดภัยของ ARM (อย่าสับสนกับโหมดผู้ควบคุม)
เปิดใช้งานโหมดปลอดภัยหาก CP15: SDR:NS = 1 หมายเหตุ: การลงทะเบียน NS จะพร้อมใช้งานในโหมดผู้ควบคุมเท่านั้น
การตั้งค่าการรักษาความปลอดภัย NOC
Arria® 10 SoC Network บน Chip iinterconnect (NOC) สามารถกําหนดค่าได้ด้วยไฟร์วอลล์บนแต่ละบริดจ์และตลอดทั้งการเชื่อมต่อ เพื่ออนุญาตการเข้าถึงผ่านบริดจ์ HPS
- ต้องกําหนดค่าไฟร์วอลล์เพื่อให้สามารถทําธุรกรรมผ่านบริดจ์ได้
- ต้องตั้งค่าการควบคุมหลักเพื่ออนุญาต/ไม่อนุญาตให้มีการเข้าถึงที่ปลอดภัย
- หากตั้งค่าหลักให้ไม่อนุญาตให้มีการเข้าถึงที่ปลอดภัย ธุรกรรมทั้งหมดจะถูกเปลี่ยนเป็นสถานะไม่ปลอดภัย ซึ่งสามารถทําลายการทํางานร่วมกันได้
U-boot ที่สร้างขึ้นจากซอฟต์แวร์ SoC EDS เวอร์ชั่น 16.0 และใหม่กว่าจะปิดใช้งานไฟร์วอลล์ NOC แต่ตั้งค่ามาสเตอร์ให้ไม่อนุญาตให้มีการเข้าถึงที่ปลอดภัย
เพื่ออนุญาตการเข้าถึงที่ปลอดภัยผ่านบริดจ์ FPGA2HPA:
ตั้งค่าfpga2soc_ctrlลงทะเบียน: allow_secureเป็น 1 (ค่าเริ่มต้น = 0 ไม่อนุญาตให้มีความปลอดภัย)
การกําหนดค่าคอนโทรลเลอร์แคชระดับ 2
การกําหนดค่า CoreLink™ Level 2 Cache Controller L2C-310
ขอแนะนําให้ตั้งค่าบิตการลงทะเบียนตัวควบคุม Aux [22]: ตั้ง การแทนที่คุณลักษณะที่ใช้ร่วมกัน เป็นเปิดบิต การตั้งค่านี้จะปิดใช้งานการเพิ่มประสิทธิภาพในคอนโทรลเลอร์แคช L2 ซึ่งเปลี่ยนการเข้าถึงที่ไม่สามารถแคชบางส่วนจากคอร์ MPU หรือพอร์ต ACP เป็นการเข้าถึงที่ไม่สามารถจัดสรรแคชได้ และย้ายจุดที่สอดคล้องกันจาก SDRAM ไปยังแคช L2 การเปลี่ยนแปลงในจุดที่สอดคล้องกันอาจทําให้เกิดปัญหาหากผู้เชี่ยวชาญเข้าถึง SDRAM ผ่าน L3 หรือบริดจ์ FPGA2SDRAM
อ้างอิง: CoreLink™ Level 2 Cache Controller L2C-310, การปรับปรุงแก้ไข: คู่มืออ้างอิงทางเทคนิค r3p3 (ARM DDI 0246H (ID080112):: คุณลักษณะที่ใช้ร่วมกันได้หัวข้อ 2.3.2
ข้างต้นได้รับการตั้งค่าตามค่าเริ่มต้นในเวอร์ชั่น u-boot-socfpga ล่าสุดที่มีให้ใช้งานจาก https://github.com/altera-opensource/u-boot-socfpga
ขับเคลื่อนสัญญาณ sideband AXI จาก Qsys: Axi_cache_security Bridge
ควรใช้บริดจ์ Axi_cache_security เพื่อขับเคลื่อนสัญญาณ Sideband AxCache/AxUser/AxProt ไปยังค่าที่ถูกต้อง Axi_cache_security Bridge สามารถพบได้ในตัวอย่าง Arria 10 Bridge https://www.altera.com/support/support-resources/design-examples.h tml
สัญญาณ Sideband AxCache[3:0]
การตั้งค่า AxCache [3:0] ที่ถูกต้องจะขึ้นอยู่กับการตั้งค่าตารางหน้า MMU
ดู คู่มืออ้างอิงสถาปัตยกรรม ARM® ARMv7-A และ ARMv7-R edition (ARM DDI 0406C.c (ID051414) ) : ประเภทและคุณลักษณะของหน่วยความจํา A3.5 และรุ่นการสั่งซื้อหน่วยความจํา AxCache[1] ต้องเป็น 1 สําหรับการเข้าถึงที่สอดคล้องกัน
อ้างอิง: Cortex-A9™ MPCore® Revision: คู่มืออ้างอิงทางเทคนิค r3p0 (ARM DDI 0407G (ID072711): พอร์ตร่วมตัวเร่งความเร็ว 2.4
แคช AW®[3:0]
[3] - เขียนแบบจัดสรรได้
[2] - อ่านต่อได้
[1] - แคชได้
[0] - บัฟเฟอร์
ค่าเริ่มต้นที่แนะนําสําหรับแคช AW®[3:0]
awcache = 0xF; 4'b1111 Write Allocate, การจัดสรรการอ่าน, บัฟเฟอร์, แคชได้
arcache = 0xF; 4'b1111 Write Allocate, การจัดสรรการอ่าน, บัฟเฟอร์, แคชได้
หมายเหตุ: ควรแก้ไขการตั้งค่าเหล่านี้ตามกรณีการใช้งาน
สัญญาณ Sideband AxUser[4-0]
สัญญาณ AxUser จะถูกใช้เพื่อส่งผ่านข้อมูลเพิ่มเติม และสําหรับธุรกรรม ACP ที่ใช้เพื่อส่งผ่านข้อมูลแคชภายในและภายนอก
ผู้ใช้ AW®[3:0]
[0] - คุณลักษณะที่ใช้ร่วมกันต้องตั้งค่าเป็น 1 สําหรับการเข้าถึงที่สอดคล้องกัน
[3:1] - ไม่ได้ตีความโดย SCU เนื่องจาก ACP ไม่มีนโยบายแคชภายใน และจะถูกส่งผ่านไปยัง L2 Cache Controller สําหรับใช้หากแคชถูกตั้งค่าในโหมดพิเศษ
ข้อมูลอ้างอิง: Cortex-A9™ MPCore® Revision: คู่มืออ้างอิงทางเทคนิค r3p0 (ARM DDI 0407G (ID072711): พอร์ตร่วมตัวเร่งความเร็ว 2.4,
ค่าเริ่มต้นที่แนะนําสําหรับ AxUSER[4:0]
awuser = 0x1; 5'b00001
aruser = 0x1; 5'b00001
หมายเหตุ: ใน Arria 10 แอททริบิวต์ที่ใช้ร่วมกันของ AXI จะผูกกับ "1" ภายใน
สัญญาณ Sideband ของ AxProt[2:0]
AxProt ระบุสถานะที่ปลอดภัยของทรานแซคชัน และต้องตรงกับสถานะความปลอดภัยของหน่วยความจําเป้าหมายเพื่อให้แน่ใจว่าแคชถูกโจมตี
AW®PROT[2:0]
[2] - การดึงข้อมูลคําสั่ง
[1] - การเข้าถึงแบบไม่ปลอดภัย
[0] - สิทธิ์การเข้าถึง
ค่าเริ่มต้นที่แนะนําสําหรับ AxProt[2:0]
การตั้งค่าความปลอดภัยของหน่วยความจําตารางหน้า MMU และการตั้งค่าความปลอดภัยของ CPU และสถานะความปลอดภัยธุรกรรม ACP ต้องตรงกันทั้งหมดเพื่อให้แน่ใจว่าแคชถูกโจมตี
ธุรกรรม ACP ที่ไม่ปลอดภัยไปยังตําแหน่งหน่วยความจําที่ปลอดภัยที่เข้าถึงโดย CPU ในสถานะที่ปลอดภัยจะส่งผลให้แคชพลาด และการเข้าถึงที่สอดคล้องกัน
สรุปสถานการณ์ที่รองรับ:
ไม่ปลอดภัย
- ตารางหน้า MMU ถูกตั้งค่าให้กําหนดพื้นที่หน่วยความจําเป้าหมายว่าไม่ปลอดภัย
- มีการตั้งค่าไฟร์วอลล์ NOC เพื่อให้สามารถเข้าถึงพื้นที่เป้าหมายได้อย่างปลอดภัย
- F2H Bridge ช่วยให้เข้าถึงพื้นที่เป้าหมายได้อย่างปลอดภัยหรือไม่ปลอดภัย
ปลอดภัย
- ตารางหน้า MMU ถูกตั้งค่าให้กําหนดพื้นที่หน่วยความจําเป้าหมายว่าปลอดภัย
- มีการตั้งค่าไฟร์วอลล์ NOC เพื่อให้สามารถเข้าถึงพื้นที่เป้าหมายได้อย่างปลอดภัย
- บริดจ์ F2H ดําเนินการเข้าถึงพื้นที่เป้าหมายอย่างปลอดภัย