<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Dcache as RAM in MPC5777C in MPC5xxx</title>
    <link>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1658736#M23712</link>
    <description>&lt;P&gt;Hi everyone, I am trying to make data cache to be used as ram in mpc5777c for that purpose I've invalidated and enable the dcache in copy back mode, then I've created a tlb entry at address 0x40040000 and set it as cacheable&amp;nbsp;&lt;BR /&gt;The dcache code goes like this:&lt;/P&gt;&lt;DIV&gt;.section .text&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; .global assemblyFunction&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;assemblyFunction:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;cfg_DCACHE:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*--------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Invalidate - Set CINV&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # e_bit in L1CSR0 Register&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #--------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r5, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r5, r5, 0x0002&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010,r5&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Mask out CINV and CAbT to see if&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # invalidation is complete (i.e. CINV=0,&amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # CAbT=0)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;label_DCINV_check:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load Registers with Masks:&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load CINV mask into R8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load CAbT mask into R7&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load CAbT clear mask into R11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r8, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r8, r8, 0x0002&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r7, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r7, r7, 0x0004&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r11, 0xFFFF&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_or2i&amp;nbsp; r11, 0xFFFB&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;CHECK_DCINV:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Read 1010 register, store in r9&amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mfspr r9, 1010&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # check for an Ae_bORT of the cache invalidate #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # operation&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; and.&amp;nbsp; r10, r7, r9&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_beq&amp;nbsp; &amp;nbsp;D_NO_ABORT&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # If ae_bort detected, clear CAe_bT e_bit and&amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # re-run invalidation&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; and.&amp;nbsp; r10, r11, r9&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010, r10&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_b&amp;nbsp; &amp;nbsp; &amp;nbsp;cfg_DCACHE&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;D_NO_ABORT:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Check that invalidation has completed -&amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # (CINV=0). branch if invalidation not&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # complete.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; and.&amp;nbsp; r10, r8, r9&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_bne CHECK_DCINV&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Enable cache by performing a&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # read/modify/write of the CE bit in the&amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # 1010 register&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mfspr r5, 1010&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; r5, r5, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r5, r5, 0x0001&amp;nbsp; &amp;nbsp; /* Store 1010 value to R5 (CE=1) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010, r5&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Write R5 to 1010 register */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Enable cache by performing a&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # read/modify/write of the DCWM bit in the&amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # 1010 register&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mfspr r5, 1010&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_add2is r5,0x0010&amp;nbsp; &amp;nbsp; /* Store 1010 value to R5 (DCWM=1) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010, r5&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Write R5 to 1010 register */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;e_li r3, 0x80 /* Load r3 with loop count = 4KB/32B = 128 = 0x80 */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; mtCTR r3 /* Move loop count to spr CTR */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; e_li r3, 0x4004 /* Point r3 to start of desired address (r3=0x40040000)*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LockingLoop:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; dcbz r0, r3 /* Establish address in cache for 32B cache line of 0's */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; dcbtls 0, r0, r3 /* Lock that line in cache */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; e_addi r3, r3, 0x20 /* Increment address pointer by 32 B */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; e_bdnz LockingLoop&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; se_blr&lt;BR /&gt;&lt;BR /&gt;the tlb entry is:&lt;BR /&gt;e_lis r3, 0x1005 /* Select TLB entry #, define R/W replacment control */&lt;BR /&gt;mtspr 624, r3 /* Load MAS0 with 0x1006 0000 for TLB entry #6 */&lt;BR /&gt;/* Define description context and configuration control:*/&lt;BR /&gt;/* VALID=1, IPROT=0, TID=0, TS=0, TSIZE=1 (4KB size) */&lt;BR /&gt;e_lis r3, 0x8000 /* Load MAS 1 with 0x8000 0100 */&lt;BR /&gt;e_ori r3, r3, 0x0100&lt;BR /&gt;mtspr 625, r3&lt;BR /&gt;/* Define EPN and page attributes: */&lt;BR /&gt;/* EPN = 0x4004 0000, WIMAGE = all 0's */&lt;BR /&gt;e_lis r3, 0x4004 /* Load MAS2 with 0x4004 0000 */&lt;BR /&gt;mtspr 626, r3&lt;BR /&gt;/* Define RPN and access control for data R/W */&lt;BR /&gt;/* RPN = 0x4004 0000, U0:3=0, UX/SX=0, UR/SR/UW/SW=1 */&lt;BR /&gt;e_lis r3, 0x4004 /* Load MAS3 with 0x4004 000F */&lt;BR /&gt;e_ori r3, r3, 0x003F&lt;BR /&gt;mtspr 627, r3&lt;BR /&gt;tlbwe&lt;BR /&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;P&gt;After doing all this I dont see any difference though when writing at memory address 0x40040000 nothing happens even after removing the tlb I dont see any change.&amp;nbsp;&lt;BR /&gt;I've changed the memory to 0x40040000 just for checking the data is written on the ram but not in the dcache (I am using trace32 as debugger) the dcache shows nothing but 0 as defined in the dcache code.&lt;BR /&gt;&lt;BR /&gt;BR,&lt;/P&gt;&lt;P&gt;Indra&lt;/P&gt;</description>
    <pubDate>Sun, 28 May 2023 09:52:55 GMT</pubDate>
    <dc:creator>Indra</dc:creator>
    <dc:date>2023-05-28T09:52:55Z</dc:date>
    <item>
      <title>Dcache as RAM in MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1658736#M23712</link>
      <description>&lt;P&gt;Hi everyone, I am trying to make data cache to be used as ram in mpc5777c for that purpose I've invalidated and enable the dcache in copy back mode, then I've created a tlb entry at address 0x40040000 and set it as cacheable&amp;nbsp;&lt;BR /&gt;The dcache code goes like this:&lt;/P&gt;&lt;DIV&gt;.section .text&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; .global assemblyFunction&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;assemblyFunction:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;cfg_DCACHE:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*--------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Invalidate - Set CINV&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # e_bit in L1CSR0 Register&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #--------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r5, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r5, r5, 0x0002&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010,r5&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Mask out CINV and CAbT to see if&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # invalidation is complete (i.e. CINV=0,&amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # CAbT=0)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;label_DCINV_check:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load Registers with Masks:&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load CINV mask into R8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load CAbT mask into R7&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Load CAbT clear mask into R11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r8, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r8, r8, 0x0002&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r7, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r7, r7, 0x0004&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_li&amp;nbsp; &amp;nbsp;r11, 0xFFFF&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_or2i&amp;nbsp; r11, 0xFFFB&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;CHECK_DCINV:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Read 1010 register, store in r9&amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mfspr r9, 1010&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # check for an Ae_bORT of the cache invalidate #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # operation&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; and.&amp;nbsp; r10, r7, r9&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_beq&amp;nbsp; &amp;nbsp;D_NO_ABORT&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # If ae_bort detected, clear CAe_bT e_bit and&amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # re-run invalidation&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; and.&amp;nbsp; r10, r11, r9&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010, r10&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_b&amp;nbsp; &amp;nbsp; &amp;nbsp;cfg_DCACHE&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;D_NO_ABORT:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Check that invalidation has completed -&amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # (CINV=0). branch if invalidation not&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # complete.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; and.&amp;nbsp; r10, r8, r9&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_bne CHECK_DCINV&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Enable cache by performing a&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # read/modify/write of the CE bit in the&amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # 1010 register&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mfspr r5, 1010&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; r5, r5, 0x0000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_ori&amp;nbsp; &amp;nbsp;r5, r5, 0x0001&amp;nbsp; &amp;nbsp; /* Store 1010 value to R5 (CE=1) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010, r5&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Write R5 to 1010 register */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*-------------------------------------------#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # Enable cache by performing a&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # read/modify/write of the DCWM bit in the&amp;nbsp; &amp;nbsp;#&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; # 1010 register&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; #-------------------------------------------*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mfspr r5, 1010&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; e_add2is r5,0x0010&amp;nbsp; &amp;nbsp; /* Store 1010 value to R5 (DCWM=1) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; msync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; isync&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; mtspr 1010, r5&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Write R5 to 1010 register */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;e_li r3, 0x80 /* Load r3 with loop count = 4KB/32B = 128 = 0x80 */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; mtCTR r3 /* Move loop count to spr CTR */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; e_li r3, 0x4004 /* Point r3 to start of desired address (r3=0x40040000)*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LockingLoop:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; dcbz r0, r3 /* Establish address in cache for 32B cache line of 0's */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; dcbtls 0, r0, r3 /* Lock that line in cache */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; e_addi r3, r3, 0x20 /* Increment address pointer by 32 B */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; e_bdnz LockingLoop&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; se_blr&lt;BR /&gt;&lt;BR /&gt;the tlb entry is:&lt;BR /&gt;e_lis r3, 0x1005 /* Select TLB entry #, define R/W replacment control */&lt;BR /&gt;mtspr 624, r3 /* Load MAS0 with 0x1006 0000 for TLB entry #6 */&lt;BR /&gt;/* Define description context and configuration control:*/&lt;BR /&gt;/* VALID=1, IPROT=0, TID=0, TS=0, TSIZE=1 (4KB size) */&lt;BR /&gt;e_lis r3, 0x8000 /* Load MAS 1 with 0x8000 0100 */&lt;BR /&gt;e_ori r3, r3, 0x0100&lt;BR /&gt;mtspr 625, r3&lt;BR /&gt;/* Define EPN and page attributes: */&lt;BR /&gt;/* EPN = 0x4004 0000, WIMAGE = all 0's */&lt;BR /&gt;e_lis r3, 0x4004 /* Load MAS2 with 0x4004 0000 */&lt;BR /&gt;mtspr 626, r3&lt;BR /&gt;/* Define RPN and access control for data R/W */&lt;BR /&gt;/* RPN = 0x4004 0000, U0:3=0, UX/SX=0, UR/SR/UW/SW=1 */&lt;BR /&gt;e_lis r3, 0x4004 /* Load MAS3 with 0x4004 000F */&lt;BR /&gt;e_ori r3, r3, 0x003F&lt;BR /&gt;mtspr 627, r3&lt;BR /&gt;tlbwe&lt;BR /&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;P&gt;After doing all this I dont see any difference though when writing at memory address 0x40040000 nothing happens even after removing the tlb I dont see any change.&amp;nbsp;&lt;BR /&gt;I've changed the memory to 0x40040000 just for checking the data is written on the ram but not in the dcache (I am using trace32 as debugger) the dcache shows nothing but 0 as defined in the dcache code.&lt;BR /&gt;&lt;BR /&gt;BR,&lt;/P&gt;&lt;P&gt;Indra&lt;/P&gt;</description>
      <pubDate>Sun, 28 May 2023 09:52:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1658736#M23712</guid>
      <dc:creator>Indra</dc:creator>
      <dc:date>2023-05-28T09:52:55Z</dc:date>
    </item>
    <item>
      <title>Re: Dcache as RAM in MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1659221#M23722</link>
      <description>&lt;P&gt;I am not sure what you are trying to do, but this is usually done by startup code, as this area is used for core stack (as this derivative does not have TCM memories). &lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="davidtosenovjan_1-1685369553579.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/225231iC6660F3A3B0B63B0/image-size/medium?v=v2&amp;amp;px=400" role="button" title="davidtosenovjan_1-1685369553579.png" alt="davidtosenovjan_1-1685369553579.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 29 May 2023 14:20:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1659221#M23722</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-05-29T14:20:34Z</dc:date>
    </item>
    <item>
      <title>Re: Dcache as RAM in MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1659242#M23723</link>
      <description>&lt;P&gt;Sorry foe the confusion what I want to achieve is to use dcache as ram to increase the available ram size. i referred a cookbook it says to use cache as ram the cache is invalidated and enabled in copyback mode. All I want is to increase my ram size my using dcache 16kb memory as ram is that possible&lt;/P&gt;</description>
      <pubDate>Mon, 29 May 2023 15:52:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1659242#M23723</guid>
      <dc:creator>Indra</dc:creator>
      <dc:date>2023-05-29T15:52:01Z</dc:date>
    </item>
    <item>
      <title>Re: Dcache as RAM in MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1659725#M23731</link>
      <description>&lt;P&gt;I see. You can use the rest of cache for increasing SRAM capability for instance as TLB6 or increase the area used for stack to 16k. A procedure described in cookbook in correct in principle.&lt;/P&gt;</description>
      <pubDate>Tue, 30 May 2023 08:56:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1659725#M23731</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-05-30T08:56:17Z</dc:date>
    </item>
    <item>
      <title>Re: Dcache as RAM in MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1660816#M23737</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/52613"&gt;@davidtosenovjan&lt;/a&gt;&amp;nbsp; I've implemented everything as per the cookbook i.e. 1. making a tlb entry 2. Invalidating and enabling the cache in copyback mode 3. loacking the cache line&lt;BR /&gt;after this I've tried to write at the memory location but here the data is written to both cache and the main memory. Correct me if I did something wrong&lt;BR /&gt;BR,&lt;BR /&gt;Indra&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 May 2023 13:02:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1660816#M23737</guid>
      <dc:creator>Indra</dc:creator>
      <dc:date>2023-05-31T13:02:30Z</dc:date>
    </item>
    <item>
      <title>Re: Dcache as RAM in MPC5777C</title>
      <link>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1660893#M23739</link>
      <description>&lt;P&gt;The problem is that in the cookbook, used virtual and physical address is 0x4004_0000 but on MPC5777C there is SRAM space on that address.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="davidtosenovjan_0-1685543877932.png" style="width: 715px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/225663i345C1CA46A32DD6F/image-dimensions/715x106?v=v2" width="715" height="106" role="button" title="davidtosenovjan_0-1685543877932.png" alt="davidtosenovjan_0-1685543877932.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Cookbook used MPC55xx and there is nothing in the memory map for that area. That's the point.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="davidtosenovjan_1-1685543970849.png" style="width: 712px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/225664iCE7EA2A52F89C9E9/image-dimensions/712x116?v=v2" width="712" height="116" role="button" title="davidtosenovjan_1-1685543970849.png" alt="davidtosenovjan_1-1685543970849.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;You need to choose different address, but how I already answered on address 0x4008_0000, SW startup may configure stack located in cache as we are doing it this way on MPC5777C device.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 May 2023 14:43:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/Dcache-as-RAM-in-MPC5777C/m-p/1660893#M23739</guid>
      <dc:creator>davidtosenovjan</dc:creator>
      <dc:date>2023-05-31T14:43:55Z</dc:date>
    </item>
  </channel>
</rss>

