2009-08-24 6 views
3

Ich schreibe eine Routine, um den PowerPC750-Datencache zu leeren, bevor er im Write-Back-Modus ausgeschaltet wird.Versuchen, den PowerPC 750-Datencache zu leeren

Ich habe die IBM application note auf die Programmierung der Caches gefunden, die eine Flush-Routine enthält, aber ich bin durch den Beispielcode verwirrt. Ich denke, es könnte ein Fehler im Beispiel sein, dachte aber, ich würde nachsehen. In Listing 2 gibt es zwei Schleifen, die Anweisungen enthalten, "zum nächsten Block zu gehen". Der Wechsel zum nächsten Block erfolgt durch Hinzufügen von 0x10 zur aktuellen Adresse. Ich hätte erwartet, dass dies eine Addition von 0x20 (32) wäre, da ich denke, dass die Cache-Zeilen 32 Bytes breit sind. Kann jemand mein Denken bestätigen oder ablehnen ?!

+1

Ich hätte erwartet, dass es auch 0x20 wäre ... Sie könnten IBM eine E-Mail schicken und fragen, ob das ein Fehler ist? – Goz

+2

Linkrot 20120826: https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/0DD2C54EDDF7EB9287256F3F00592C64/$file/PPC750GXFX_cache.pdf –

Antwort

4

Nach Bestätigung von anderen SO-Benutzern habe ich den Autor der Application Note per E-Mail geschickt. Er stimmte zu, dass 0x10 0x20 sein sollte und könnte die Notiz in Zukunft aktualisieren.

4

Sie scheinen richtig zu sein. Mit ihrer Mathematik an der Spitze der Auflistung angegeben:

! CTR - the number of data blocks needed to fill the cache - save it in r3 
!  32K (size of cache)/32 (bytes per block) = 0x400 

Sie immer das Zählregister auf 0x400 und es heißt, dass es 32bytes pro Block ein paar Orte, die in diesem Dokument. Nach dieser Mathematik müssten Sie also 0x20 und nicht 0x10 inkrementieren. Wie bei jeder Assembly sollten Sie es auf jeden Fall auf beide Arten testen, falls es seltsame Silizium-Errata gibt.