[U-Boot] [PATCH 02/14] FSL DDR: Rewrite the FSL mpc8xxx DDR controller setup code.

Wolfgang Denk wd at denx.de
Tue Aug 12 21:05:03 CEST 2008


Dear Kumar Gala,

In message <1218557182-1328-2-git-send-email-galak at kernel.crashing.org> you wrote:
> 
> Signed-off-by: James Yang <James.Yang at freescale.com>
> Signed-off-by: Jon Loeliger <jdl at freescale.com>
> Signed-off-by: Becky Bruce <becky.bruce at freescale.com>
> Signed-off-by: Ed Swarthout <Ed.Swarthout at freescale.com>
> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
> ---
>  cpu/mpc85xx/Makefile               |    9 +
>  cpu/mpc86xx/Makefile               |    4 +
>  cpu/mpc8xxx/Makefile               |   30 +
>  cpu/mpc8xxx/common_timing_params.h |   54 +
>  cpu/mpc8xxx/ddr2_dimm_params.h     |   99 ++
>  cpu/mpc8xxx/fsl_ddr1.c             |  383 ++++++
>  cpu/mpc8xxx/fsl_ddr2.c             |  384 ++++++
>  cpu/mpc8xxx/fsl_ddr_sdram.c        | 2537 ++++++++++++++++++++++++++++++++++++

My comments will focus on this file - this is a monster of a file.

...
> +		/*
> +		 * Find maximum tCKmin_X_ps to find slowest DIMM.
> +		 */
> +		tCKmin_X_ps = max(tCKmin_X_ps, dimm_params[i].tCKmin_X_ps);
> +
> +		/*
> +		 * Find minimum tCKmax_ps to find fastest slow speed,
> +		 * i.e., this is the slowest the whole system can go.
> +		 */
> +		tCKmax_ps = min(tCKmax_ps, dimm_params[i].tCKmax_ps);
> +
> +		/*
> +		 * Find maximum tCKmax_ps to find slowest slow speed,
> +		 * i.e., this is the slowest any dimm can go.
> +		 */
> +		tCKmax_max_ps = max(tCKmax_max_ps, dimm_params[i].tCKmax_ps);
> +
> +		/*
> +		 * Find maximum tRCD_ps to find slowest ras-to-cas delay.
> +		 */
> +		tRCD_ps = max(tRCD_ps, dimm_params[i].tRCD_ps);
> +
> +		/*
> +		 * Find maximum tRP_ps to find slowest row precharge time.
> +		 */
> +		tRP_ps = max(tRP_ps, dimm_params[i].tRP_ps);

This goes on for hundrets of lines.

Please change ALL such single-line comments into one-liners.

Also:

> +
> +		/*
> +		 * Find maximum tRAS_ps to find slowest active to
> +		 * precharge time.
> +		 */
> +		tRAS_ps = max(tRAS_ps, dimm_params[i].tRAS_ps);
> +
> +		/*
> +		 * Find maximum tWR_ps to find slowest write recovery time.
> +		 */
> +		tWR_ps = max(tWR_ps, dimm_params[i].tWR_ps);
> +
> +		/*
> +		 * Find maximum tWTR_ps to find slowest write-to-read
> +		 * command delay.
> +		 */
> +		tWTR_ps = max(tWTR_ps, dimm_params[i].tWTR_ps);
> +
> +		/*
> +		 * Find maximum tRFC_ps to find slowest auto-refresh to
> +		 * active/auto refresh command period.
> +		 */
> +		tRFC_ps = max(tRFC_ps, dimm_params[i].tRFC_ps);
> +
> +		/*
> +		 * Find maximum tRRD_ps to find slowest row active to
> +		 * row active delay.
> +		 */
> +		tRRD_ps = max(tRRD_ps, dimm_params[i].tRRD_ps);
> +
> +		/*
> +		 * Find maximum tRC_ps to find slowest
> +		 * active/auto-refresh time.
> +		 */
> +		tRC_ps = max(tRC_ps, dimm_params[i].tRC_ps);
> +
> +		/*
> +		 * Find maximum refresh_rate_ps to find slowest refresh time.
> +		 */
> +		refresh_rate_ps = max(refresh_rate_ps,
> +				      dimm_params[i].refresh_rate_ps);
> +
> +		/*
> +		 * Find maximum tIS_ps to find slowest.
> +		 */
> +		tIS_ps = max(tIS_ps, dimm_params[i].tIS_ps);
> +
> +		/*
> +		 * Find maximum tIH_ps to find slowest.
> +		 */
> +		tIH_ps = max(tIH_ps, dimm_params[i].tIH_ps);
> +
> +		/*
> +		 * Find maximum tDS_ps to find slowest.
> +		 */
> +		tDS_ps = max(tDS_ps, dimm_params[i].tDS_ps);
> +
> +		/*
> +		 * Find maximum tDH_ps to find slowest.
> +		 */
> +		tDH_ps = max(tDH_ps, dimm_params[i].tDH_ps);
> +
> +		/*
> +		 * Find maximum tRTP_ps to find slowest.
> +		 */
> +		tRTP_ps = max(tRTP_ps, dimm_params[i].tRTP_ps);
> +
> +		 *
> +		 * FIXME: is finding the slowest value the correct
> +		 * strategy for this parameter?
> +		 */
> +		tDQSQ_max_ps = max(tDQSQ_max_ps, dimm_params[i].tDQSQ_max_ps);
> +
> +		/*
> +		 * Find maximum tQHS_ps to find slowest.
> +		 */
> +		tQHS_ps = max(tQHS_ps, dimm_params[i].tQHS_ps);

Do we really need a  "find  maximum  FOO  to  find  slowest"  (what?)
comment  for  each and every of these similar lines? A single comment
at the beginning of the block should do.

> +	/* CHECKME: */
> +	if (!outpdimm->all_DIMMs_registered
> +	    && !outpdimm->all_DIMMs_unbuffered) {
> +		printf("ERROR:  Mix of registered buffered and unbuffered DIMMs detected!\n");
> +	}
...
> +			if (dimm_params[i].caslat_X == temp2) {
> +				if (mclk_ps >= dimm_params[i].tCKmin_X_ps) {
> +					debug("CL = %u ok on DIMM %u at tCK=%u ps with its tCKmin_X_ps of %u\n",
> +					       temp2, i, mclk_ps,
> +					       dimm_params[i].tCKmin_X_ps);
> +					continue;
> +				} else {
> +					not_ok++;
> +				}
> +			}
> +
> +			if (dimm_params[i].caslat_X_minus_1 == temp2) {
> +				if (mclk_ps >= dimm_params[i].tCKmin_X_minus_1_ps) {
> +					debug("CL = %u ok on DIMM %u at tCK=%u ps with its tCKmin_X_minus_1_ps of %u\n",
> +					       temp2, i, mclk_ps, dimm_params[i].tCKmin_X_minus_1_ps);

etc. Mind the maximum line length. (LCS: "The limit on the length of
lines is 80 columns and this is a strongly preferred limit.")

There are functions in this file that span for nearly 500 lines of
code - LCS says: "Functions should be short and sweet, and do just one
thing.  They should fit on one or two screenfuls of text (the ISO/ANSI
screen size is 80x24, as we all know), and do one thing and do that
well."

I think this file needs a rework. 

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
I perceive a possibility of an immediate  chronological  sequence  of
events which includes a violence.
                        - Terry Pratchett, _The Dark Side of the Sun_



More information about the U-Boot mailing list