SEC, cam.o und firmware

Boxenweitwurf
reverser
Neugieriger
Neugieriger
Beiträge: 6
Registriert: Montag 10. Juli 2006, 12:18

SEC, cam.o und firmware

Beitrag von reverser »

Hallo,

ich versuche seit einiger zeit eine SAGEM zu reparieren die den üblichen Fehler beim laden des camd treibers bringt. Nach Analyse der Hardware und des Sourcecode des cam.o Moduls stellen sich mir noch folgende Fragen.

1. Wird die Firmware in einen der externen SEC-128k-RAM-Chips geladen ?

wenn ja 2. Läuft der SEC chip direkt mit dem Code aus dem extrenen RAM (also müsste ja der Adress- und Datenbus des RAMs permanent aktiv sein) oder wird er noch in ein SEC-internes-RAM geladen ?

3. gibt es bereits ein Modifiziertes cam.o Modul, dass den Speicherinhalt des SEC-128k-RAMs mit der zuvor geladenen Firmware vergleicht, so dass man eine defekt des RAMs auschliessen kann ?

Danke für jede Hilfe,
Grüsse Reverser
Carjay
Developer
Beiträge: 122
Registriert: Sonntag 23. April 2006, 12:37

Beitrag von Carjay »

Die 128 kByte sind einmal 64kByte Daten, einmal 64kByte Code.

Daten/Adressleitungen sind allerdings permutiert und während des Betriebs kommt man - wenn ich das richtig in Erinnerung habe - an den Inhalt nicht heran.

Ein spezielles Testmodul zum Vergleichen gibt es nicht, ist aber auch trivial (das Code-RAM wird einfach in den Adressraum eingeblendet).

Es kann sein, daß das Daten-RAM vom PPC aus nur les- aber nicht schreibbar ist. Also nicht wundern, wenn das Reinschreiben möglicherweise nicht klappt.

Ist alles mehr oder weniger aus der Erinnerung, habe mich da schon ewig nicht mehr mit befaßt.
reverser
Neugieriger
Neugieriger
Beiträge: 6
Registriert: Montag 10. Juli 2006, 12:18

Beitrag von reverser »

hab mal versucht in cam.c (function: do_firmwrite) ein paar zeilen einzufügen, die den inhalt des RAM nach laden der firmware überprüfen sollen,
--------------------------
... if ((firmware) && (len)) {

memcpy(code_base, firmware, len);
// --------- test ---------
if ((i=memcmp(code_base, firmware, len)) != 0){
printk(KERN_ERR "cam: Error copying firmware to SEC-RAM - mismatch %i len %i\n", i, len);
return -EFAULT;
}
//-------------------------
}
if (CAM_CODE_SIZE - len)
memset(&code_base[len], 0x5a, CAM_CODE_SIZE - len);
...
---------------------------------
der vergleich scheitert aber leider schon beim ersten byte.
Vielleicht muß ja noch irgendeine CTRL leitung das RAM in den READ-modus bringen, konnte ich aber nicht rausfinden.

Zumindest hab ich festgestellt, daß ein hinweis für das erfolgreiche Laden der richtigen Firmware in den SEC ist, daß der ASCROM PIN (PIN59) des SEC nach dem laden permanent aktiv ist (der SEC also ständig das RAM ausliest) ansonsten springt er auf HI.
Carjay
Developer
Beiträge: 122
Registriert: Sonntag 23. April 2006, 12:37

Beitrag von Carjay »

Ich hab nochmal in alten Notizen nachgeschaut, der Alpha kann das Code-RAM nur lesen, der MPC in Code/Daten-RAM nur schreiben (die Puffer-ICs gehen nur in eine Richtung beim Datenbus).

Also leider keine Chance, das softwaremäßig zu vergleichen.

Pin 59 müßte CS für das Code-RAM sein, 58 für Daten-RAM.
reverser
Neugieriger
Neugieriger
Beiträge: 6
Registriert: Montag 10. Juli 2006, 12:18

Beitrag von reverser »

hab ich fast schon befürchtet. Danke für die Info.