[U-Boot] [PATCH PPC_4xx V3] Print simple row of dots instead of spinning wheel

Replace the "spinning wheel" eye candy by printing a simple row of dots. This avoids problems with control charactersin log files etc.
Also, it saves a few bytes.
Signed-off-by: Wolfgang Denk wd@denx.de --- Hey, seems I'm heading for the record of submitting the maximum number of patch versions in the shorted time :-(
This patch version fixes a few typos in the first version, and gets rid of a few variables no longer needed because of the changes.
board/esd/common/cmd_loadpci.c | 6 +----- board/esd/pci405/cmd_pci405.c | 6 +----- board/esd/pmc440/cmd_pmc440.c | 6 +----- cpu/ppc4xx/44x_spd_ddr2.c | 14 ++++---------- cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c | 16 ++++------------ 5 files changed, 11 insertions(+), 37 deletions(-)
diff --git a/board/esd/common/cmd_loadpci.c b/board/esd/common/cmd_loadpci.c index d88b387..aaf8b0c 100644 --- a/board/esd/common/cmd_loadpci.c +++ b/board/esd/common/cmd_loadpci.c @@ -38,9 +38,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { unsigned int *ptr = 0; int count = 0; - int count2 = 0; char addr[16]; - char str[] = "\|/-"; char *local_args[2];
while(1) { @@ -59,9 +57,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) while (*ptr == 0xffffffff) { count++; if (!(count % 100)) { - count2++; - putc(0x08); /* backspace */ - putc(str[count2 % 4]); + putc('.'); }
/* Abort if ctrl-c was pressed */ diff --git a/board/esd/pci405/cmd_pci405.c b/board/esd/pci405/cmd_pci405.c index 5c717e2..9ffe686 100644 --- a/board/esd/pci405/cmd_pci405.c +++ b/board/esd/pci405/cmd_pci405.c @@ -47,11 +47,9 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { unsigned int *ptr = 0; int count = 0; - int count2 = 0; int status; int i; char addr[16]; - char str[] = "\|/-"; char *local_args[2];
/* @@ -67,9 +65,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) while (*ptr == 0xffffffff) { count++; if (!(count % 100)) { - count2++; - putc(0x08); /* backspace */ - putc(str[count2 % 4]); + putc('.'); }
/* Abort if ctrl-c was pressed */ diff --git a/board/esd/pmc440/cmd_pmc440.c b/board/esd/pmc440/cmd_pmc440.c index 38ee74e..42d2fe6 100644 --- a/board/esd/pmc440/cmd_pmc440.c +++ b/board/esd/pmc440/cmd_pmc440.c @@ -121,10 +121,8 @@ int do_fifo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) int i; int n = 0; u32 ctrl, data, f; - char str[] = "\|/-"; int abort = 0; int count = 0; - int count2 = 0;
switch (argc) { case 1: @@ -174,9 +172,7 @@ int do_fifo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) while (!got_fifoirq) { count++; if (!(count % 100)) { - count2++; - putc(0x08); /* backspace */ - putc(str[count2 % 4]); + putc('.'); }
/* Abort if ctrl-c was pressed */ diff --git a/cpu/ppc4xx/44x_spd_ddr2.c b/cpu/ppc4xx/44x_spd_ddr2.c index b40e4b1..586fa74 100644 --- a/cpu/ppc4xx/44x_spd_ddr2.c +++ b/cpu/ppc4xx/44x_spd_ddr2.c @@ -2362,10 +2362,8 @@ static void program_ecc_addr(unsigned long start_address, unsigned long end_address; unsigned long address_increment; unsigned long mcopt1; - char str[] = "ECC generation -"; - char slash[] = "\|/-\|/-"; + char str[] = "ECC generation: "; int loop = 0; - int loopi = 0;
current_address = start_address; mfsdram(SDRAM_MCOPT1, mcopt1); @@ -2390,8 +2388,7 @@ static void program_ecc_addr(unsigned long start_address, current_address += address_increment;
if ((loop++ % (2 << 20)) == 0) { - putc('\b'); - putc(slash[loopi++ % 8]); + putc('.'); } }
@@ -2571,9 +2568,7 @@ static void DQS_calibration_process(void) u32 rqfd; u32 rqfd_start; u32 rqfd_average; - int loopi = 0; - char str[] = "Auto calibration -"; - char slash[] = "\|/-\|/-"; + char str[] = "Auto calibration: ";
/*------------------------------------------------------------------ * Test to determine the best read clock delay tuning bits. @@ -2760,8 +2755,7 @@ calibration_loop: *-----------------------------------------------------------------*/ if (window_found == FALSE) { if (rqfd_start < SDRAM_RQDC_RQFD_MAX) { - putc('\b'); - putc(slash[loopi++ % 8]); + putc('.');
/* try again from with a different RQFD start value */ rqfd_start++; diff --git a/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c b/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c index 1e3e20d..109bcc7 100644 --- a/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c +++ b/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c @@ -428,9 +428,6 @@ static u32 DQS_calibration_methodA(struct ddrautocal *cal) #endif ulong rdcc;
- char slash[] = "\|/-\|/-"; - int loopi = 0; - /* start */ in_window = 0;
@@ -483,15 +480,13 @@ static u32 DQS_calibration_methodA(struct ddrautocal *cal) debug("<%s>SDRAM_RFDC=0x%x\n", __func__, temp); #endif
- putc(' '); for (rqfd = 0; rqfd <= SDRAM_RQDC_RQFD_MAX; rqfd++) {
mfsdram(SDRAM_RQDC, rqdc_reg); rqdc_reg &= ~(SDRAM_RQDC_RQFD_MASK); mtsdram(SDRAM_RQDC, rqdc_reg | SDRAM_RQDC_RQFD_ENCODE(rqfd));
- putc('\b'); - putc(slash[loopi++ % 8]); + putc('.');
curr_win_min.rffd = 0; curr_win_max.rffd = 0; @@ -944,8 +939,6 @@ u32 DQS_autocalibration(void) u32 val; int verbose_lvl = 0; char *str; - char slash[] = "\|/-\|/-"; - int loopi = 0; struct sdram_timing *scan_list;
#if defined(DEBUG_PPC4xx_DDR_AUTOCALIBRATION) @@ -962,9 +955,9 @@ u32 DQS_autocalibration(void)
mfsdram(SDRAM_MCOPT1, val); if ((val & SDRAM_MCOPT1_MCHK_CHK_REP) == SDRAM_MCOPT1_MCHK_CHK_REP) - str = "ECC Auto calibration -"; + str = "ECC Auto calibration: "; else - str = "Auto calibration -"; + str = "Auto calibration: ";
puts(str);
@@ -1000,8 +993,7 @@ u32 DQS_autocalibration(void)
relock_memory_DLL();
- putc('\b'); - putc(slash[loopi++ % 8]); + putc('.');
#ifdef DEBUG debug("\n");

Hi Wolfgang,
On Thursday 23 October 2008, Wolfgang Denk wrote:
Replace the "spinning wheel" eye candy by printing a simple row of dots. This avoids problems with control charactersin log files etc.
Also, it saves a few bytes.
Signed-off-by: Wolfgang Denk wd@denx.de
Hey, seems I'm heading for the record of submitting the maximum number of patch versions in the shorted time :-(
;)
This patch version fixes a few typos in the first version, and gets rid of a few variables no longer needed because of the changes.
board/esd/common/cmd_loadpci.c | 6 +----- board/esd/pci405/cmd_pci405.c | 6 +----- board/esd/pmc440/cmd_pmc440.c | 6 +-----
We need the ACK from esd (Matthias) for this esd specific change. He is on vacation right now. I suggest that you split this patch so that we can apply the ppc4xx specific part directly.
Thanks.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================

Dear Stefan,
In message 200810231308.04027.sr@denx.de you wrote:
We need the ACK from esd (Matthias) for this esd specific change. He is on vacation right now. I suggest that you split this patch so that we can apply the ppc4xx specific part directly.
Let's just wait until he's back from vacation. It seems useful to me to keep this in a single commit.
Best regards,
Wolfgang Denk

Dear Matthias,
In message 200810231308.04027.sr@denx.de Stefan Roese wrote:
On Thursday 23 October 2008, Wolfgang Denk wrote:
Replace the "spinning wheel" eye candy by printing a simple row of dots. This avoids problems with control charactersin log files etc.
Also, it saves a few bytes.
Signed-off-by: Wolfgang Denk wd@denx.de
Hey, seems I'm heading for the record of submitting the maximum number of patch versions in the shorted time :-(
;)
This patch version fixes a few typos in the first version, and gets rid of a few variables no longer needed because of the changes.
board/esd/common/cmd_loadpci.c | 6 +----- board/esd/pci405/cmd_pci405.c | 6 +----- board/esd/pmc440/cmd_pmc440.c | 6 +-----
We need the ACK from esd (Matthias) for this esd specific change. He is on vacation right now. I suggest that you split this patch so that we can apply the ppc4xx specific part directly.
What do you think about this change, at least as far as the ESD boards are concerned?
Best regards,
Wolfgang Denk

Hi Wolfgang,
please do not remove the spinning cursor from the 'esd' files.
a) Changing this will trigger some documentation update processes which I do not like :-) b) Your patch results in 10 dots per second. Sometimes the touched boards stay a long time in the waiting states and I want to keep the previous messages in my console. Lots of dots will scroll them out. c) I like the spinning cursor :-) d) The control characters did not cause trouble for me or our customers so far.
So please accept my NAK.
Matthias
On Thursday 23 October 2008 12:59, Wolfgang Denk wrote:
Replace the "spinning wheel" eye candy by printing a simple row of dots. This avoids problems with control charactersin log files etc.
Also, it saves a few bytes.
Signed-off-by: Wolfgang Denk wd@denx.de
Hey, seems I'm heading for the record of submitting the maximum number of patch versions in the shorted time :-(
This patch version fixes a few typos in the first version, and gets rid of a few variables no longer needed because of the changes.
board/esd/common/cmd_loadpci.c | 6 +----- board/esd/pci405/cmd_pci405.c | 6 +----- board/esd/pmc440/cmd_pmc440.c | 6 +----- cpu/ppc4xx/44x_spd_ddr2.c | 14 ++++---------- cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c | 16 ++++------------ 5 files changed, 11 insertions(+), 37 deletions(-)
diff --git a/board/esd/common/cmd_loadpci.c b/board/esd/common/cmd_loadpci.c index d88b387..aaf8b0c 100644 --- a/board/esd/common/cmd_loadpci.c +++ b/board/esd/common/cmd_loadpci.c @@ -38,9 +38,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { unsigned int *ptr = 0; int count = 0;
int count2 = 0; char addr[16];
char str[] = "\|/-"; char *local_args[2];
while(1) {
@@ -59,9 +57,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) while (*ptr == 0xffffffff) { count++; if (!(count % 100)) {
count2++;
putc(0x08); /* backspace */
putc(str[count2 % 4]);
putc('.'); } /* Abort if ctrl-c was pressed */
diff --git a/board/esd/pci405/cmd_pci405.c b/board/esd/pci405/cmd_pci405.c index 5c717e2..9ffe686 100644 --- a/board/esd/pci405/cmd_pci405.c +++ b/board/esd/pci405/cmd_pci405.c @@ -47,11 +47,9 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { unsigned int *ptr = 0; int count = 0;
int count2 = 0; int status; int i; char addr[16];
char str[] = "\|/-"; char *local_args[2];
/*
@@ -67,9 +65,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) while (*ptr == 0xffffffff) { count++; if (!(count % 100)) {
count2++;
putc(0x08); /* backspace */
putc(str[count2 % 4]);
putc('.');
}
/* Abort if ctrl-c was pressed */
diff --git a/board/esd/pmc440/cmd_pmc440.c b/board/esd/pmc440/cmd_pmc440.c index 38ee74e..42d2fe6 100644 --- a/board/esd/pmc440/cmd_pmc440.c +++ b/board/esd/pmc440/cmd_pmc440.c @@ -121,10 +121,8 @@ int do_fifo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) int i; int n = 0; u32 ctrl, data, f;
char str[] = "\|/-"; int abort = 0; int count = 0;
int count2 = 0;
switch (argc) { case 1:
@@ -174,9 +172,7 @@ int do_fifo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) while (!got_fifoirq) { count++; if (!(count % 100)) {
count2++;
putc(0x08); /* backspace */
putc(str[count2 % 4]);
putc('.'); } /* Abort if ctrl-c was pressed */
diff --git a/cpu/ppc4xx/44x_spd_ddr2.c b/cpu/ppc4xx/44x_spd_ddr2.c index b40e4b1..586fa74 100644 --- a/cpu/ppc4xx/44x_spd_ddr2.c +++ b/cpu/ppc4xx/44x_spd_ddr2.c @@ -2362,10 +2362,8 @@ static void program_ecc_addr(unsigned long start_address, unsigned long end_address; unsigned long address_increment; unsigned long mcopt1;
- char str[] = "ECC generation -";
- char slash[] = "\|/-\|/-";
- char str[] = "ECC generation: "; int loop = 0;
int loopi = 0;
current_address = start_address; mfsdram(SDRAM_MCOPT1, mcopt1);
@@ -2390,8 +2388,7 @@ static void program_ecc_addr(unsigned long start_address, current_address += address_increment;
if ((loop++ % (2 << 20)) == 0) {
putc('\b');
putc(slash[loopi++ % 8]);
putc('.'); } }
@@ -2571,9 +2568,7 @@ static void DQS_calibration_process(void) u32 rqfd; u32 rqfd_start; u32 rqfd_average;
- int loopi = 0;
- char str[] = "Auto calibration -";
- char slash[] = "\|/-\|/-";
char str[] = "Auto calibration: ";
/*------------------------------------------------------------------
- Test to determine the best read clock delay tuning bits.
@@ -2760,8 +2755,7 @@ calibration_loop: *-----------------------------------------------------------------*/ if (window_found == FALSE) { if (rqfd_start < SDRAM_RQDC_RQFD_MAX) {
putc('\b');
putc(slash[loopi++ % 8]);
putc('.'); /* try again from with a different RQFD start value */ rqfd_start++;
diff --git a/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c b/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c index 1e3e20d..109bcc7 100644 --- a/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c +++ b/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c @@ -428,9 +428,6 @@ static u32 DQS_calibration_methodA(struct ddrautocal *cal) #endif ulong rdcc;
- char slash[] = "\|/-\|/-";
- int loopi = 0;
- /* start */ in_window = 0;
@@ -483,15 +480,13 @@ static u32 DQS_calibration_methodA(struct ddrautocal *cal) debug("<%s>SDRAM_RFDC=0x%x\n", __func__, temp); #endif
putc(' '); for (rqfd = 0; rqfd <= SDRAM_RQDC_RQFD_MAX; rqfd++) {
mfsdram(SDRAM_RQDC, rqdc_reg); rqdc_reg &= ~(SDRAM_RQDC_RQFD_MASK); mtsdram(SDRAM_RQDC, rqdc_reg | SDRAM_RQDC_RQFD_ENCODE(rqfd));
putc('\b');
putc(slash[loopi++ % 8]);
putc('.');
curr_win_min.rffd = 0; curr_win_max.rffd = 0;
@@ -944,8 +939,6 @@ u32 DQS_autocalibration(void) u32 val; int verbose_lvl = 0; char *str;
- char slash[] = "\|/-\|/-";
- int loopi = 0; struct sdram_timing *scan_list;
#if defined(DEBUG_PPC4xx_DDR_AUTOCALIBRATION) @@ -962,9 +955,9 @@ u32 DQS_autocalibration(void)
mfsdram(SDRAM_MCOPT1, val); if ((val & SDRAM_MCOPT1_MCHK_CHK_REP) == SDRAM_MCOPT1_MCHK_CHK_REP)
str = "ECC Auto calibration -";
elsestr = "ECC Auto calibration: ";
str = "Auto calibration -";
str = "Auto calibration: ";
puts(str);
@@ -1000,8 +993,7 @@ u32 DQS_autocalibration(void)
relock_memory_DLL();
putc('\b');
putc(slash[loopi++ % 8]);
putc('.');
#ifdef DEBUG debug("\n");

Dear Stefan & Matthias,
In message 1224759565-1334-1-git-send-email-wd@denx.de you wrote:
Replace the "spinning wheel" eye candy by printing a simple row of dots. This avoids problems with control charactersin log files etc.
Also, it saves a few bytes.
Signed-off-by: Wolfgang Denk wd@denx.de
Did you come to a decision about this patch?
Best regards,
Wolfgang Denk

Hi Wolfgang,
On Friday 31 October 2008, Wolfgang Denk wrote:
Dear Stefan & Matthias,
In message 1224759565-1334-1-git-send-email-wd@denx.de you wrote:
Replace the "spinning wheel" eye candy by printing a simple row of dots. This avoids problems with control charactersin log files etc.
Also, it saves a few bytes.
Signed-off-by: Wolfgang Denk wd@denx.de
Did you come to a decision about this patch?
Matthias already did send a NAK for the esd boards (on Monday).
I have to admit that I like the spinning wheel better as well. Especially the resulting output after the calibration is finished looks better on the "normal" terminal:
DRAM: 256 MB (original version)
instead of:
DRAM: Auto calibration: ..........256 MB (your new version)
I understand that the spinning wheel is not optimal for logfiles, but for the normal usage it just looks nicer for my taste. So I would prefer to stay with the spinning wheel, but if you decide that the 4xx DDR2 calibration mustn't use this, then let's apply your patch for the cpu/ppc4xx files.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================

Dear Stefan,
In message 200810310854.28159.sr@denx.de you wrote:
Did you come to a decision about this patch?
Matthias already did send a NAK for the esd boards (on Monday).
OK - it's my fault that I missed this when the code was added :-(
I have to admit that I like the spinning wheel better as well. Especially the resulting output after the calibration is finished looks better on the "normal" terminal:
DRAM: 256 MB (original version)
instead of:
DRAM: Auto calibration: ..........256 MB (your new version)
Of course the end result looks better. There is no doubt about that. But it has disadvantages, too. With the row of dots you can easily see how long you've been waiting - this visualizes variations in timing behaviour that may be indications for problems; also it clearly shows where we have to wait too long, i. e. where optimi- zations are needed.
I understand that the spinning wheel is not optimal for logfiles, but for the normal usage it just looks nicer for my taste. So I would prefer to stay with the spinning wheel, but if you decide that the 4xx DDR2 calibration mustn't use this, then let's apply your patch for the cpu/ppc4xx files.
It is my understanding that a rework of this code is under way which will avoid the long delay for the standard boot sequence (and only need it for board bringup or intentional recalibration). For this purpose, the row of dots is IMHO more useful than the spinning wheel.
Assuming my understanding is correct (is it?), then we could fix this now as well.
BTW: I've added some statements to the documentation to deprecate control sequences on the console - see http://www.denx.de/wiki/U-Boot/DesignPrinciples
Best regards,
Wolfgang Denk

Hi Wolfgang,
On Friday 31 October 2008, Wolfgang Denk wrote:
Of course the end result looks better. There is no doubt about that. But it has disadvantages, too. With the row of dots you can easily see how long you've been waiting - this visualizes variations in timing behaviour that may be indications for problems; also it clearly shows where we have to wait too long, i. e. where optimi- zations are needed.
I understand that the spinning wheel is not optimal for logfiles, but for the normal usage it just looks nicer for my taste. So I would prefer to stay with the spinning wheel, but if you decide that the 4xx DDR2 calibration mustn't use this, then let's apply your patch for the cpu/ppc4xx files.
It is my understanding that a rework of this code is under way which will avoid the long delay for the standard boot sequence (and only need it for board bringup or intentional recalibration).
Are you talking about storing the optimized autocalibration values in FLASH, as discussed on IRC some time ago? I don't know if somebody is working on this. I only know that AMCC is working on a fix for the autocalibration on Kilauea. Not sure if this effects the bootup time, I can only hope it does.
For this purpose, the row of dots is IMHO more useful than the spinning wheel.
Assuming my understanding is correct (is it?), then we could fix this now as well.
Again, if you decide that that's the way to go, then I will not object.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================

Dear Stefan Roese,
In message 200810311009.47348.sr@denx.de you wrote:
It is my understanding that a rework of this code is under way which will avoid the long delay for the standard boot sequence (and only need it for board bringup or intentional recalibration).
Are you talking about storing the optimized autocalibration values in FLASH, as discussed on IRC some time ago? I don't know if somebody is working on
Yes. I see this as a mandatory requirement. The additional delays are not aceptable.
Assuming my understanding is correct (is it?), then we could fix this now as well.
Again, if you decide that that's the way to go, then I will not object.
Thanks.
Best regards,
Wolfgang Denk

Hi Wolfgang,
On Friday 31 October 2008, Wolfgang Denk wrote:
It is my understanding that a rework of this code is under way which will avoid the long delay for the standard boot sequence (and only need it for board bringup or intentional recalibration).
Are you talking about storing the optimized autocalibration values in FLASH, as discussed on IRC some time ago? I don't know if somebody is working on
Yes. I see this as a mandatory requirement. The additional delays are not aceptable.
I just want to raise some concerns about this approach on boards with DIMM modules. Here it will be hard to determine if a new DIMM module is installed. Even a module from the same manufacturer and type (size, width etc, all the same) will need a new autocalibration. This is probably hard to detect.
Just my $0.02.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================

On 13:06 Fri 31 Oct , Stefan Roese wrote:
Hi Wolfgang,
On Friday 31 October 2008, Wolfgang Denk wrote:
It is my understanding that a rework of this code is under way which will avoid the long delay for the standard boot sequence (and only need it for board bringup or intentional recalibration).
Are you talking about storing the optimized autocalibration values in FLASH, as discussed on IRC some time ago? I don't know if somebody is working on
Yes. I see this as a mandatory requirement. The additional delays are not aceptable.
I just want to raise some concerns about this approach on boards with DIMM modules. Here it will be hard to determine if a new DIMM module is installed. Even a module from the same manufacturer and type (size, width etc, all the same) will need a new autocalibration. This is probably hard to detect.
Just my $0.02.
As discuss on IRC with Stefan
we can use the EEPROM present on the DIMM to identify two Modules
as point to this link as example http://www.micron.com/products/spddetail.aspx?part=MT16HTF12864HY-667F1
we have the following interested informations stored
Byte Byte Description Number 64-71 MANUFACTURERS JEDEC ID CODE 73-90 MODULE PART NUMBER 95-98 MODULE SERIAL NUMBER
we can check this 3 fields to be sure if it's a new modules is installed and so re-do the calibration
Why the 3 fields? By experience I've seen 2 Manufacturs use the same Serial Number for 2 differents product and I've also seen a Manufactur using the same Serial Number for 2 differents Part number
Best Regards, J.
participants (4)
-
Jean-Christophe PLAGNIOL-VILLARD
-
Matthias Fuchs
-
Stefan Roese
-
Wolfgang Denk