project/bcm63xx/u-boot.git
9 years agoddr: altera: Clean up rw_mgr_*_vfifo() part 2
Marek Vasut [Sun, 19 Jul 2015 04:37:51 +0000 (06:37 +0200)]
ddr: altera: Clean up rw_mgr_*_vfifo() part 2

Pluck out all this VFIFO value counting, which turns out to be
completely unused. Thus, remove it to simplify the code.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up rw_mgr_*_vfifo() part 1
Marek Vasut [Sun, 19 Jul 2015 04:25:27 +0000 (06:25 +0200)]
ddr: altera: Clean up rw_mgr_*_vfifo() part 1

Perform minor cleanup, fix data types and constify where applicable.
Add kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 10
Marek Vasut [Sun, 19 Jul 2015 04:04:00 +0000 (06:04 +0200)]
ddr: altera: Clean up sdr_*_phase() part 10

Clean up data types, constify where applicable and document the
functions with kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 9
Marek Vasut [Sun, 19 Jul 2015 03:48:30 +0000 (05:48 +0200)]
ddr: altera: Clean up sdr_*_phase() part 9

The "d" variable is set to 0 in sdr_backup_phase() and is not used
at all in sdr_nonworking_phase(). Make it local and zap it respectively.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 8
Marek Vasut [Sun, 19 Jul 2015 03:42:43 +0000 (05:42 +0200)]
ddr: altera: Clean up sdr_*_phase() part 8

The work_bgn parameter of sdr_nonworking_phase() is unused, zap it.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 7
Marek Vasut [Sun, 19 Jul 2015 03:40:06 +0000 (05:40 +0200)]
ddr: altera: Clean up sdr_*_phase() part 7

Wrap dtaps_per_ptap into the sdr_working_phase() function to trim
down the number of params. It's a constant too.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 6
Marek Vasut [Sun, 19 Jul 2015 03:35:40 +0000 (05:35 +0200)]
ddr: altera: Clean up sdr_*_phase() part 6

It is now clear that the max_working_cnt variable is totally unused.
Zap the variable and zap other variables which became unused due to
this change too.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 5
Marek Vasut [Sun, 19 Jul 2015 03:26:49 +0000 (05:26 +0200)]
ddr: altera: Clean up sdr_*_phase() part 5

Pull out the loop for eaching working/non-working DQS enable phase
into a separate function, as this is mostly common code between.
Clean up sdr_working_phase() and sdr_nonworking_phase() while switching
these two functions to the common sdr_find_phase().

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 4
Marek Vasut [Sun, 19 Jul 2015 03:01:12 +0000 (05:01 +0200)]
ddr: altera: Clean up sdr_*_phase() part 4

Get rid of found_{begin,end} variables. Instead of breaking out
through all of the loops, just return when the begin/end of the
window is found and be done with it. Also clean up the trailing
conditional expression, which is now much easier.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 3
Marek Vasut [Sun, 19 Jul 2015 02:37:08 +0000 (04:37 +0200)]
ddr: altera: Clean up sdr_*_phase() part 3

Fix the arguments passed to these functions. The bit_chk is
overriden by rw_mgr_mem_calibrate_read_test_all_ranks() which
is invoked by all three sdr_*_phase() functions, so just make
this into local variable.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 2
Marek Vasut [Sun, 19 Jul 2015 02:34:12 +0000 (04:34 +0200)]
ddr: altera: Clean up sdr_*_phase() part 2

Fix the arguments passed to these functions. The grp argument
does not have to be passed via reference, it's never modified
within either of those functions, so make it into a value.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_*_phase() part 1
Marek Vasut [Sun, 19 Jul 2015 02:29:21 +0000 (04:29 +0200)]
ddr: altera: Clean up sdr_*_phase() part 1

Rename find_working_phase() to sdr_working_phase() for the
sake of consistency.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_find_window_centre() part 3
Marek Vasut [Sun, 19 Jul 2015 02:14:32 +0000 (04:14 +0200)]
ddr: altera: Clean up sdr_find_window_centre() part 3

Reorder the end of the function a little by moving the conditional
debug output around a little. Rename the function from _centre() to
_center(). Document the function in kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_find_window_centre() part 2
Marek Vasut [Sun, 19 Jul 2015 02:04:33 +0000 (04:04 +0200)]
ddr: altera: Clean up sdr_find_window_centre() part 2

This function is a treasure trove of ad-hoc iterative
implementations of mathematical functions. Replace all
of those with their non-iterative counterpart.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up sdr_find_window_centre() part 1
Marek Vasut [Sun, 19 Jul 2015 00:56:59 +0000 (02:56 +0200)]
ddr: altera: Clean up sdr_find_window_centre() part 1

Clean up the arguments of this function. Most of the pointers
passed into the function are either not needed at all, or can
be passed as value instead of reference. Also fix the broken
multiline debug strings. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay...
Marek Vasut [Sat, 18 Jul 2015 02:28:42 +0000 (04:28 +0200)]
ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay() part 4

This function is only invoked from rw_mgr_mem_calibrate_dqs_enable_calibration()
and at this point, it is just one level of indirection, so wrap the
rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay() into
rw_mgr_mem_calibrate_dqs_enable_calibration() to get rid of the level
of indirection.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay...
Marek Vasut [Sat, 18 Jul 2015 02:24:49 +0000 (04:24 +0200)]
ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay() part 3

Replace at least one of the loops in this function with call of a
standard function call instead of the ad-hoc implementation. The
other one cannot be replaced, since the delay is incremented for
each group.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay...
Marek Vasut [Sat, 18 Jul 2015 02:20:26 +0000 (04:20 +0200)]
ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay() part 2

The read_group and write_group params have the same value for all (one)
invocations of this function, just merge them into a single param.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay...
Marek Vasut [Sat, 18 Jul 2015 02:16:45 +0000 (04:16 +0200)]
ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_find_dqs_en_phase_sweep_dq_in_delay() part 1

Start cleaning up this function. In the first part, just fix
the incorrectly broken debug strings and fix return value to
respect the common convention.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up rw_mgr_mem_calibrate_read_test_patterns()
Marek Vasut [Sat, 18 Jul 2015 01:55:07 +0000 (03:55 +0200)]
ddr: altera: Clean up rw_mgr_mem_calibrate_read_test_patterns()

Rework this function such that the code is more readable. Zap
unused parameter "num_tries" while at it. Also wrap parameter
"bit_chk" into this function as it's value is not used outside.
Finally, fix the return value from this function to match the
common expectation, where 0 means success.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Zap rw_mgr_mem_calibrate_read_test_patterns_all_ranks()
Marek Vasut [Sat, 18 Jul 2015 01:36:09 +0000 (03:36 +0200)]
ddr: altera: Zap rw_mgr_mem_calibrate_read_test_patterns_all_ranks()

This function is called from one single place and it's sole purpose
is to call one single function with slightly modified arguments.
Zap this function to skip this useless intermediate step.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Minor rw_mgr_mem_calibrate_read_load_patterns() cleanup
Marek Vasut [Sat, 18 Jul 2015 01:34:22 +0000 (03:34 +0200)]
ddr: altera: Minor rw_mgr_mem_calibrate_read_load_patterns() cleanup

Just do an easy data type cleanup of this function, no functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Extract Centering DQ/DQS from rw_mgr_mem_calibrate_vfifo()
Marek Vasut [Sat, 18 Jul 2015 01:10:31 +0000 (03:10 +0200)]
ddr: altera: Extract Centering DQ/DQS from rw_mgr_mem_calibrate_vfifo()

Just extract this piece of functionality into separate function
to make the code better separated. This matches the division in
Altera documentation, Altera EMI_RM 2015.05.04 , section 1, the
UniPHY Calibration Stages.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Extract DQS enable calibration from rw_mgr_mem_calibrate_vfifo()
Marek Vasut [Sat, 18 Jul 2015 00:57:32 +0000 (02:57 +0200)]
ddr: altera: Extract DQS enable calibration from rw_mgr_mem_calibrate_vfifo()

Just extract this piece of functionality into separate function
to make the code better separated. This matches the division in
Altera documentation, Altera EMI_RM 2015.05.04 , section 1, the
UniPHY Calibration Stages.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Extract guaranteed write from rw_mgr_mem_calibrate_vfifo()
Marek Vasut [Sat, 18 Jul 2015 00:46:56 +0000 (02:46 +0200)]
ddr: altera: Extract guaranteed write from rw_mgr_mem_calibrate_vfifo()

Just extract this piece of functionality into separate function
to make the code better separated. This matches the division in
Altera documentation, Altera EMI_RM 2015.05.04 , section 1, the
UniPHY Calibration Stages.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 7
Marek Vasut [Sat, 18 Jul 2015 01:15:34 +0000 (03:15 +0200)]
ddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 7

Mildly reorder the function so that the reg_file_set*() calls are
in the same place. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 6
Marek Vasut [Fri, 17 Jul 2015 02:24:18 +0000 (04:24 +0200)]
ddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 6

This is kind of microseries-within-series indent cleanup.
It is clear that the read_group and write_group variables
have the same value, to just make them into one variable
called rw_group. While doing this, constify the variables
as they are constant.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 5
Marek Vasut [Fri, 17 Jul 2015 01:54:34 +0000 (03:54 +0200)]
ddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 5

This is kind of microseries-within-series indent cleanup.
This patch fixes the broken formatting strings in debug_cond()
invocations.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 4
Marek Vasut [Fri, 17 Jul 2015 01:50:17 +0000 (03:50 +0200)]
ddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 4

This is kind of microseries-within-series indent cleanup.
This patch cleans up the handling of grp_calibrated such
that the variable isn't used all over the place, but just
very localy. This allows trimming down the indent issues.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 3
Marek Vasut [Fri, 17 Jul 2015 01:44:26 +0000 (03:44 +0200)]
ddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 3

This is kind of microseries-within-series indent cleanup.
This patch just tweaks the indentation so it is visible
what to do with the grp_calibrated variable.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 2
Marek Vasut [Fri, 17 Jul 2015 01:22:31 +0000 (03:22 +0200)]
ddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 2

This is kind of microseries-within-series indent cleanup.
This patch just tweaks the indentation so it is visible
what is supposed to go where.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 1
Marek Vasut [Fri, 17 Jul 2015 01:16:45 +0000 (03:16 +0200)]
ddr: altera: Internal rw_mgr_mem_calibrate_vfifo() cleanup part 1

This patch just adds an expanded documentation header to the
aforementioned function. This is needed to make it easier to
match the purpose of this function with the documentation.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Minor clean up of rw_mgr_mem_initialize()
Marek Vasut [Sun, 26 Jul 2015 08:57:06 +0000 (10:57 +0200)]
ddr: altera: Minor clean up of rw_mgr_mem_initialize()

Add kerneldoc and do a minor comment cleanup. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal mem_calibrate() cleanup part 6
Marek Vasut [Mon, 20 Jul 2015 02:34:51 +0000 (04:34 +0200)]
ddr: altera: Internal mem_calibrate() cleanup part 6

Add kerneldoc to this function.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal mem_calibrate() cleanup part 5
Marek Vasut [Fri, 17 Jul 2015 00:50:56 +0000 (02:50 +0200)]
ddr: altera: Internal mem_calibrate() cleanup part 5

This is kind of microseries-within-series indent cleanup.
Rework the code for the the middle-loop of the mega-loop
this time and deal with the group_failed variable. Instead
of checking if the group failed in the previous calibration
part, just jump to the end of the loop if calibration did
fail and increment the counter. This shaves away one more
level of indent while making the code slightly more readable.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal mem_calibrate() cleanup part 4
Marek Vasut [Fri, 17 Jul 2015 00:40:21 +0000 (02:40 +0200)]
ddr: altera: Internal mem_calibrate() cleanup part 4

This is kind of microseries-within-series indent cleanup.
Rework the code for the last loop within the mega-loop
to make it actually readable and not an insane cryptic pile
of indent failure.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal mem_calibrate() cleanup part 3
Marek Vasut [Fri, 17 Jul 2015 00:38:51 +0000 (02:38 +0200)]
ddr: altera: Internal mem_calibrate() cleanup part 3

This is kind of microseries-within-series indent cleanup.
Rework the code for the third loop within the middle-loop
of the mega-loop to make it actually readable and not an
insane cryptic pile of indent failure.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal mem_calibrate() cleanup part 2
Marek Vasut [Fri, 17 Jul 2015 00:31:04 +0000 (02:31 +0200)]
ddr: altera: Internal mem_calibrate() cleanup part 2

This is kind of microseries-within-series indent cleanup.
Rework the code for the second loop within the middle-loop
of the mega-loop to make it actually readable and not an
insane cryptic pile of indent failure.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal mem_calibrate() cleanup part 1
Marek Vasut [Fri, 17 Jul 2015 00:21:47 +0000 (02:21 +0200)]
ddr: altera: Internal mem_calibrate() cleanup part 1

This is kind of microseries-within-series indent cleanup.
Rework the code for the first loop within the middle-loop
of the mega-loop to make it actually readable and not an
insane cryptic pile of indent failure.

It is likely that this patch has checkpatch warnings, but
for the sake of not breaking the code, these are ignored.

No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Trivial mem_calibrate() indent cleanup
Marek Vasut [Fri, 17 Jul 2015 00:07:12 +0000 (02:07 +0200)]
ddr: altera: Trivial mem_calibrate() indent cleanup

Redo the mega-condition such that if the calibration is to be skipped,
the positive branch of the condition does all the work and returns.
The negative branch, which is in fact the default behavior, is then
converted to a code which is no longer conditional. This trims down
the indent by one level.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Minor clean up of mem_skip_calibrate()
Marek Vasut [Sun, 26 Jul 2015 08:54:15 +0000 (10:54 +0200)]
ddr: altera: Minor clean up of mem_skip_calibrate()

Perform minor coding style cleanup of the mem_skip_calibrate() function,
clean up comments and add kerneldoc. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up set_rank_and_odt_mask() part 3
Marek Vasut [Mon, 20 Jul 2015 06:15:57 +0000 (08:15 +0200)]
ddr: altera: Clean up set_rank_and_odt_mask() part 3

Clean up comments and add kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up set_rank_and_odt_mask() part 2
Marek Vasut [Mon, 20 Jul 2015 06:09:05 +0000 (08:09 +0200)]
ddr: altera: Clean up set_rank_and_odt_mask() part 2

Turn the big inner if (RW_MGR_MEM_NUMBER_OF_RANKS == ...) conditional
into a switch {} statement instead. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up set_rank_and_odt_mask() part 1
Marek Vasut [Mon, 20 Jul 2015 06:03:11 +0000 (08:03 +0200)]
ddr: altera: Clean up set_rank_and_odt_mask() part 1

First, invert the logic of the if (odt_mode == ...) conditional to make
the OFF mode harder to miss. It is a short piece of code right at the
end, so move it up.

Also, clean up data types and constify where applicable and clean up
the cs_and_odt_mask assignment. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up mem_precharge_and_activate()
Marek Vasut [Mon, 20 Jul 2015 05:33:33 +0000 (07:33 +0200)]
ddr: altera: Clean up mem_precharge_and_activate()

Perform minor cleanup of this function, fix datatype and add kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up mem_config()
Marek Vasut [Thu, 16 Jul 2015 23:57:41 +0000 (01:57 +0200)]
ddr: altera: Clean up mem_config()

Clean mem_config() function. First, reorder the math done in the
function such that WLAT and RLAT computation is together. Then,
scrap contradictory comments which do not match the result of the
math at all. Next, extract the mem_precharge_and_activate() call
from the end of the function as it is completely unrelated here.
Finally, rename the function to mem_init_latency().

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up phy_mgr_initialize()
Marek Vasut [Thu, 16 Jul 2015 23:36:32 +0000 (01:36 +0200)]
ddr: altera: Clean up phy_mgr_initialize()

Zap the cryptic casts and rework the code into a slightly more
readable form. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up run_mem_calibrate()
Marek Vasut [Thu, 16 Jul 2015 23:20:21 +0000 (01:20 +0200)]
ddr: altera: Clean up run_mem_calibrate()

Clean the function up slightly by using clrsetbits_le32() to flip
bits in registers instead of cryptic bitmasks. Zap condition checking
for PHY_DEBUG_IN_DEBUG_MODE flag, which is never set. Split the
calibration report into separate debug_mem_calibrate() function.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Rename initialize() to phy_mgr_initialize()
Marek Vasut [Thu, 16 Jul 2015 23:12:07 +0000 (01:12 +0200)]
ddr: altera: Rename initialize() to phy_mgr_initialize()

Just perform the rename to make the name more descriptive,
no functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Init my_param and my_gbl
Marek Vasut [Thu, 16 Jul 2015 23:05:36 +0000 (01:05 +0200)]
ddr: altera: Init my_param and my_gbl

Init both structures with zeroes and zap all those zeroing shenanigans
further down in the sdram_calibration_full().

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Rework initialize_tracking()
Marek Vasut [Thu, 16 Jul 2015 22:45:11 +0000 (00:45 +0200)]
ddr: altera: Rework initialize_tracking()

Clean the function up by getting rid of all the insane XOR-leftshift
combos when assembling register values. While at it, remove all the
ad-hoc variables necessary for this XOR-leftshift voodoo. Finally,
get rid of the iterative division implementation of two constants
and replace it with a DIV_ROUND_UP() macro :-)

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Fix ad-hoc iterative division implementation
Marek Vasut [Fri, 17 Jul 2015 01:11:06 +0000 (03:11 +0200)]
ddr: altera: Fix ad-hoc iterative division implementation

Contemporary CPUs can perform division just fine, use this
functionality and zap another implementation of iterative
division :-)

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Minor clean up of set_jump_as_return()
Marek Vasut [Sun, 26 Jul 2015 09:07:19 +0000 (11:07 +0200)]
ddr: altera: Minor clean up of set_jump_as_return()

Add kerneldoc and do a minor comment cleanup.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Factor out common code
Marek Vasut [Sun, 12 Jul 2015 22:51:05 +0000 (00:51 +0200)]
ddr: altera: Factor out common code

Factor out almost common code from rw_mgr_mem_handoff() and
rw_mgr_mem_initialize() into separate rw_mgr_mem_load_user().
No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Factor out instruction loading from rw_mgr_mem_initialize()
Marek Vasut [Sun, 12 Jul 2015 22:44:30 +0000 (00:44 +0200)]
ddr: altera: Factor out instruction loading from rw_mgr_mem_initialize()

Pull the duplicate code out into a separate function.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_apply_group_all_out_delay_add_all_ranks()
Marek Vasut [Sun, 19 Jul 2015 00:18:21 +0000 (02:18 +0200)]
ddr: altera: Clean up scc_mgr_apply_group_all_out_delay_add_all_ranks()

Zap unused group_bgn parameter, fix and constify data types.
Document in kerneldoc. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal scc_mgr_apply_group_all_out_delay_add() cleanup part 2
Marek Vasut [Fri, 17 Jul 2015 03:33:28 +0000 (05:33 +0200)]
ddr: altera: Internal scc_mgr_apply_group_all_out_delay_add() cleanup part 2

Clean the DQS and OCT parts of the function, clean up the chopped
formatting strings in debug_cond() and slightly improve the code.
Zap group_bgn argument as it is used only in debug messages. Document
the function using kerneldoc. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Internal scc_mgr_apply_group_all_out_delay_add() cleanup part 1
Marek Vasut [Fri, 17 Jul 2015 03:30:14 +0000 (05:30 +0200)]
ddr: altera: Internal scc_mgr_apply_group_all_out_delay_add() cleanup part 1

Apparently, in case of the DQ and DM, the value if the new_delay variable
is calculated, but the value is not used. Zap the entire code which does
calculate the value.

It is not clear to me whether or not the code is doing the right thing
in the first place. Right now, it calls scc_mgr_load_dq() and
scc_mgr_load_dm() respectively, but I suspect it might need to call
scc_mgr_apply_group_dq_out1_delay() and scc_mgr_apply_group_dm_out1_delay()
instead. This is something Altera must investigate.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_zero_group()
Marek Vasut [Mon, 20 Jul 2015 06:41:04 +0000 (08:41 +0200)]
ddr: altera: Clean up scc_mgr_zero_group()

First, zap unused argument of the function. Next, clean up
the data types, constify where applicable, clean up comments
and add kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_zero_all()
Marek Vasut [Mon, 20 Jul 2015 02:41:53 +0000 (04:41 +0200)]
ddr: altera: Clean up scc_mgr_zero_all()

Add kerneldoc, clean up datatypes and fix minor indentation issue.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Extract scc_mgr_set_hhp_extras()
Marek Vasut [Sat, 18 Jul 2015 23:34:43 +0000 (01:34 +0200)]
ddr: altera: Extract scc_mgr_set_hhp_extras()

Move scc_mgr_set_hhp_extras() out of scc_set_bypass_mode() as it
has nothing to do in there. Instead, invoke it from mem_calibrate()
just before invoking scc_set_bypass_mode().

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_set_hhp_extras()
Marek Vasut [Sat, 18 Jul 2015 23:32:55 +0000 (01:32 +0200)]
ddr: altera: Clean up scc_mgr_set_hhp_extras()

Minor coding style cleanup for this function. Furthermore, move
ad-hoc debug_cond() calls from the only location from where this
function is invoked into this actual function.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_*_delay() args
Marek Vasut [Fri, 17 Jul 2015 04:07:13 +0000 (06:07 +0200)]
ddr: altera: Clean up scc_mgr_*_delay() args

Zap args which are not used by these functions, in particular
the write_group is often passed, but unused.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_apply_group_dq_out1_delay()
Marek Vasut [Fri, 17 Jul 2015 03:42:49 +0000 (05:42 +0200)]
ddr: altera: Clean up scc_mgr_apply_group_dq_out1_delay()

Remove unused write_group and group_bgn argument from this function.
Document the function using kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_set_oct_out1_delay()
Marek Vasut [Sun, 12 Jul 2015 21:39:06 +0000 (23:39 +0200)]
ddr: altera: Clean up scc_mgr_set_oct_out1_delay()

Make this function more readable, no functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_set_bypass_mode()
Marek Vasut [Fri, 17 Jul 2015 00:06:20 +0000 (02:06 +0200)]
ddr: altera: Clean up scc_set_bypass_mode()

The mode argument of this function is not used at all, zap it.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_load_dqs_for_write_group()
Marek Vasut [Sun, 12 Jul 2015 22:30:09 +0000 (00:30 +0200)]
ddr: altera: Clean up scc_mgr_load_dqs_for_write_group()

Make this function more readable, no functional change. Also, zap the
forward declaration, which is no longer needed.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Implement universal scc_mgr_set_all_ranks()
Marek Vasut [Sun, 12 Jul 2015 21:25:21 +0000 (23:25 +0200)]
ddr: altera: Implement universal scc_mgr_set_all_ranks()

Implement universal scc_mgr_set_all_ranks() function and convert
various ad-hoc implementations of similar functionality to use
this single function. Document the function in kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Shuffle around scc_mgr_set_*all_ranks()
Marek Vasut [Sun, 12 Jul 2015 21:14:33 +0000 (23:14 +0200)]
ddr: altera: Shuffle around scc_mgr_set_*all_ranks()

Shuffle the code around a bit, but without any functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc_mgr_initialize()
Marek Vasut [Mon, 20 Jul 2015 05:16:42 +0000 (07:16 +0200)]
ddr: altera: Clean up scc_mgr_initialize()

Clean up the comments and add kerneldoc. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Implement universal scc manager config function
Marek Vasut [Sun, 12 Jul 2015 20:28:33 +0000 (22:28 +0200)]
ddr: altera: Implement universal scc manager config function

Implement unified scc_mgr_set() function and convert all those
9 scc_mgr_set_*() ad-hoc functions to call this one function.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Reorder scc manager functions
Marek Vasut [Sun, 12 Jul 2015 20:11:55 +0000 (22:11 +0200)]
ddr: altera: Reorder scc manager functions

This patch just puts functions which look similar next to each
other, so they can be sorted out. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up scc manager function args
Marek Vasut [Sun, 12 Jul 2015 20:07:33 +0000 (22:07 +0200)]
ddr: altera: Clean up scc manager function args

Clean up the unused args of the functions used to configure the
SCC manager.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up reg_file_set*()
Marek Vasut [Sun, 12 Jul 2015 19:10:24 +0000 (21:10 +0200)]
ddr: altera: Clean up reg_file_set*()

Turn the insides of these functions into trivial clrsetbits_le32()
and fix the data type of their argument to reflect it's actual size.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up initialize_hps_phy()
Marek Vasut [Sun, 19 Jul 2015 04:14:04 +0000 (06:14 +0200)]
ddr: altera: Clean up initialize_hps_phy()

Add brief kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up initialize_reg_file()
Marek Vasut [Sun, 19 Jul 2015 04:13:37 +0000 (06:13 +0200)]
ddr: altera: Clean up initialize_reg_file()

Add brief kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up hc_initialize_rom_data()
Marek Vasut [Sun, 19 Jul 2015 04:12:42 +0000 (06:12 +0200)]
ddr: altera: Clean up hc_initialize_rom_data()

Clean the function up, fix data types, add kerneldoc.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Massage addr into I/O accessors
Marek Vasut [Sun, 12 Jul 2015 19:05:08 +0000 (21:05 +0200)]
ddr: altera: Massage addr into I/O accessors

Get rid of invocations of this sort:
  addr = (u32)&base->reg;
  writel(val, addr);

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Stop using SDR_CTRLGRP_ADDRESS directly
Marek Vasut [Sun, 12 Jul 2015 18:49:39 +0000 (20:49 +0200)]
ddr: altera: Stop using SDR_CTRLGRP_ADDRESS directly

Use the proper structure which describes these registers,
especially since this is already in place.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Wrap SOCFPGA_SDR_ADDRESS into SDR_PHYGRP.*ADDRESS
Marek Vasut [Sun, 12 Jul 2015 18:05:54 +0000 (20:05 +0200)]
ddr: altera: Wrap SOCFPGA_SDR_ADDRESS into SDR_PHYGRP.*ADDRESS

Just trim down the constant SOCFPGA_SDR_ADDRESS + SDR_PHYGRP.*ADDRESS
in the code.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Pluck out remaining sdr_get_addr() calls
Marek Vasut [Sun, 12 Jul 2015 17:03:33 +0000 (19:03 +0200)]
ddr: altera: Pluck out remaining sdr_get_addr() calls

Remove the remaining invocations of sdr_get_addr() and the function
itself. This makes the code a bit less cryptic.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Dissolve invocation of sdr_get_addr(&sdr_mgr_.*->.*)
Marek Vasut [Sun, 12 Jul 2015 16:54:37 +0000 (18:54 +0200)]
ddr: altera: Dissolve invocation of sdr_get_addr(&sdr_mgr_.*->.*)

Instead of this indirection, just adjust the register pointer and
directly use the register base address.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Dissolve invocation of sdr_get_addr(&sdr_rw_load.*->.*)
Marek Vasut [Sun, 12 Jul 2015 16:46:52 +0000 (18:46 +0200)]
ddr: altera: Dissolve invocation of sdr_get_addr(&sdr_rw_load.*->.*)

Instead of this indirection, just adjust the register pointer and
directly use the register base address.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Dissolve invocation of sdr_get_addr(&sdr_scc_mgr->.*)
Marek Vasut [Sun, 12 Jul 2015 16:42:34 +0000 (18:42 +0200)]
ddr: altera: Dissolve invocation of sdr_get_addr(&sdr_scc_mgr->.*)

Instead of this indirection, just adjust the register pointer and
directly use the register base address.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Dissolve invocation of sdr_get_addr(&sdr_reg_file->.*)
Marek Vasut [Sun, 12 Jul 2015 16:31:05 +0000 (18:31 +0200)]
ddr: altera: Dissolve invocation of sdr_get_addr(&sdr_reg_file->.*)

Instead of this indirection, just adjust the register pointer and
directly use the register base address.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Zap invocation of sdr_get_addr((u32 *)BASE_RW_MGR)"
Marek Vasut [Sun, 12 Jul 2015 15:52:36 +0000 (17:52 +0200)]
ddr: altera: Zap invocation of sdr_get_addr((u32 *)BASE_RW_MGR)"

Instead of this indirection, just adjust the register pointer and
directly use the register base address.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Clean up ugly casts in sdram_calibration_full()
Marek Vasut [Sun, 12 Jul 2015 23:05:27 +0000 (01:05 +0200)]
ddr: altera: Clean up ugly casts in sdram_calibration_full()

Use the correct formating string in those debug_cond() invocations
and zap those unnecessary ugly casts.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoddr: altera: Minor indent fix in set_rank_and_odt_mask()
Marek Vasut [Sat, 18 Jul 2015 00:23:29 +0000 (02:23 +0200)]
ddr: altera: Minor indent fix in set_rank_and_odt_mask()

Fix the position of the } else { statement to make it correctly
indented.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoMakefile: Add target for building bootable SPL image for SoCFPGA
Marek Vasut [Wed, 15 Jul 2015 00:53:45 +0000 (02:53 +0200)]
Makefile: Add target for building bootable SPL image for SoCFPGA

Add build target for generating boot partition images recognised by
the SoCFPGA BootROM. The SoCFPGA BootROM expects four copies of the
u-boot-spl-dtb.sfp at the beginning of boot partition. Those are
u-boot-spl-dtb.bin augmented by a header with which the BootROM can
work. The u-boot-dtb.img uImage is appended to this to produce a
full boot partition image, the u-boot-with-spl-dtb.sfp . This is
the name of the final target.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: config: Make CONFIG_SPI_FLASH_MTD useful
Marek Vasut [Fri, 24 Jul 2015 04:15:14 +0000 (06:15 +0200)]
arm: socfpga: config: Make CONFIG_SPI_FLASH_MTD useful

Enable the mtdparts command and related options to make support
for SPI NOR MTD useful in any way. With the mtdparts command in
place, it is possible to use partition of the SPI NOR in U-Boot.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: config: Fix LOADADDR
Marek Vasut [Wed, 22 Jul 2015 04:18:19 +0000 (06:18 +0200)]
arm: socfpga: config: Fix LOADADDR

Setting LOADADDR to 0x8000 is a bad idea, it is very likely that
some kind of overlap will happen. Move the LOADADDR 0x01000000
(16MiB from start of RAM) to make sure no overlap happens when
loading kernel for example.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: config: Enable CONFIG_SPI_FLASH_BAR
Marek Vasut [Mon, 20 Jul 2015 03:48:37 +0000 (05:48 +0200)]
arm: socfpga: config: Enable CONFIG_SPI_FLASH_BAR

This is needed to access broken (read: Micron) SPI flashes which
are larger than 16 MiB and don't correctly support 4-byte addressing.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: config: Exclude CONFIG_SPI_FLASH_MTD from SPL build
Marek Vasut [Tue, 21 Jul 2015 14:17:39 +0000 (16:17 +0200)]
arm: socfpga: config: Exclude CONFIG_SPI_FLASH_MTD from SPL build

We do not need full MTD support in the SPL build, it only adds size
and is not usable in any way. Exclude it.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: config: Zap incorrect config options
Marek Vasut [Thu, 9 Jul 2015 01:41:53 +0000 (03:41 +0200)]
arm: socfpga: config: Zap incorrect config options

There is no need to disable support for partitions in the SPL,
we can support partitions in SPL perfectly well. This is likely
some remnant from old times, so just remove this configuration
option.

Moreover, the CRC32 chunk size doesn't have to be adjusted anymore,
since both the GD and malloc area are in RAM by the time this CRC
check can be used and there's plenty of space. Zap this abomination
as well.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: config: Move SPL GD and malloc to RAM
Marek Vasut [Sun, 12 Jul 2015 13:23:28 +0000 (15:23 +0200)]
arm: socfpga: config: Move SPL GD and malloc to RAM

Now that the SPL structure is organised such that it matches the
U-Boot's SPL design, it is possible to use the option of relocating
GD to RAM. And since we have GD in RAM, move malloc area to RAM as
well. We point the malloc base pointer 1 MiB past U-Boot's load
address. We use simple malloc for SPL because it is 3kiB smaller
in terms of code size than regular malloc which was used thus far.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: misc: Reset ethernet from OF
Marek Vasut [Sat, 25 Jul 2015 17:33:56 +0000 (19:33 +0200)]
arm: socfpga: misc: Reset ethernet from OF

Reset the GMAC ethernets based on the "resets" OF node instead of ad-hoc
hardcoded values in the U-Boot code. Since we don't have a proper reset
framework in place yet, we have to do this slightly ad-hoc parsing of the
OF tree instead.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
Cc: Joe Hershberger <joe.hershberger@ni.com>
9 years agoarm: socfpga: misc: Probe ethernet GMAC from OF
Marek Vasut [Sat, 25 Jul 2015 16:47:02 +0000 (18:47 +0200)]
arm: socfpga: misc: Probe ethernet GMAC from OF

The GMAC can now be probed from OF, so enable DM ethernet and remove the
old ad-hoc designware_initialize() invocation.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
Cc: Joe Hershberger <joe.hershberger@ni.com>
9 years agoarm: socfpga: misc: Export bootmode into environment variable
Marek Vasut [Wed, 22 Jul 2015 03:40:12 +0000 (05:40 +0200)]
arm: socfpga: misc: Export bootmode into environment variable

setenv an environment variable called "bootmode" , which contains the
board boot mode. This can be in turn used in scripts to determine from
where to load kernel and such.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: misc: Add support for printing boot mode
Marek Vasut [Tue, 21 Jul 2015 14:10:13 +0000 (16:10 +0200)]
arm: socfpga: misc: Add support for printing boot mode

Add support for printing from which device the SoCFPGA board booted.
This decodes the BSEL settings and prints it in human readable form.

Signed-off-by: Marek Vasut <marex@denx.de>
9 years agoarm: socfpga: misc: Fix warm reset
Marek Vasut [Sun, 12 Jul 2015 13:11:03 +0000 (15:11 +0200)]
arm: socfpga: misc: Fix warm reset

Write necessary magic value into the Warm Boot from ON-Chip RAM
group Enable register to enable Warm reset support. Instead of
doing this in the reset_cpu() function, we do it in arch early
init to avoid breaking old kernel code which expects this magic
value to be already written into this register.

This magic is originally excavated from common/spl/spl.c in the
u-boot port from altera, where this value was written just before
the SPL jumped to actual U-Boot in the RAM.

Signed-off-by: Marek Vasut <marex@denx.de>