summaryrefslogtreecommitdiff
path: root/drivers/ddr/altera/sequencer.c
Commit message (Collapse)AuthorAgeLines
* ddr: altera: Repair DQ window centering codeMarek Vasut2016-04-20-8/+7
| | | | | | | | | | | | The code uses a lot of signed numbers, which ended up in variables of unsigned type, which resulted in all sorts of underflows. This in turn caused incorrect calibration on certain boards. Moreover, repair the readout of the DQ delay, which was being pulled from wrong register. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Staticize global variablesMarek Vasut2016-04-20-4/+4
| | | | | | | | | Just staticize global variables in sequencer, since there is no point in having these symbols available outside of the DDR code. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Make DLEVEL behavior inclusiveMarek Vasut2016-04-20-66/+66
| | | | | | | | | | | | Originally, the DLEVEL selects the debug level within the sequencer code, but only displays the messages on that particular debug level. Tweak the handling such that for particular debug level, debug messages on that level and lower are displayed. This allows better regulation of debug message verbosity. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Zero DM IN delay in scc_mgr_zero_group()Marek Vasut2016-04-20-3/+13
| | | | | | | | | This one last set of delay configuration registers was not properly zeroed out originally, fix it and zero them out. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Remove unnecessary ODT mode configMarek Vasut2016-04-20-1/+0
| | | | | | | | | | | There is no point in resetting the ODT setting if the write test failed, since the code will always retry the calibration and thus reconfigure the ODT anyway OR the code will fail calibration and halt. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Remove unnecessary update of the SCCMarek Vasut2016-04-20-1/+0
| | | | | | | | | | | Every invocation of the scc_mgr_set_dqs_en_delay_all_ranks() is followed by SCC manager update. Moreover, only this function triggers the SCC manager update internally. Thus, remove the internal invocation to avoid triggering the update twice. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Fix scc_mgr_set() argument orderMarek Vasut2016-04-20-1/+1
| | | | | | | | | | The code should be setting registers to zero, not one register to value. Swap the order of arguments to correct the behavior. The behavior is now in-line with code generated by Quartus 15.1 . Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Tweak DQS tracking enable handlingMarek Vasut2016-04-20-2/+5
| | | | | | | | | | In the most unlikely case the DQS tracking was to be disabled, make sure we do not errornously re-enable it. Note that DQS tracking is enabled on all systems observed thus far. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Replace ad-hoc constant with macroMarek Vasut2016-04-20-2/+2
| | | | | | | | | The bit 22 is in fact DQS tracking enable bit (dqstrken) and there is a macro for this bit already, so use it. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Chin Liang See <clsee@altera.com>
* ddr: altera: Repair uninited variableMarek Vasut2015-08-23-1/+1
| | | | | | | | | | | | | Fix the following problem: drivers/ddr/altera/sequencer.c: In function 'sdram_calibration_full': drivers/ddr/altera/sequencer.c:1943:25: warning: 'found_failing_read' may be used uninitialized in this function [-Wmaybe-uninitialized] if (found_passing_read && found_failing_read) ^ drivers/ddr/altera/sequencer.c:1803:26: note: 'found_failing_read' was declared here u32 found_passing_read, found_failing_read, initial_failing_dtap; ^ Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Replace float multiplication with integer oneMarek Vasut2015-08-23-1/+1
| | | | | | | | | | | | | | | | This gem is really really rare, there was an actual float used in the Altera DDR init code, which pulled in floating point ops from the libgcc, just wow. Since we don't support floating point operations the same way Linux does not support them, replace this with an integer multiplication and division combo. This removes some 2kiB of size from the SPL as the floating point ops are no longer pulled in from libgcc. This was detected by enabling CONFIG_USE_PRIVATE_LIBGCC=y , which does not contain the floating point bits. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: sequencer: Clean checkpatch issuesMarek Vasut2015-08-08-71/+88
| | | | | | | | | Fix most of the dangling checkpatch issues, no functional change. There are still 7 warnings, 1 checks , but those are left in place for the sake of readability of the code. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Clean data typesMarek Vasut2015-08-08-48/+48
| | | | | | | Replace uintNN_t with uNN. No functional change. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Pluck out misc macros from codeMarek Vasut2015-08-08-22/+15
| | | | | | | | | | | | | Actually convert the sequencer code to use socfpga_sdram_misc_config instead of the various macros. This is just an sed exercise here, no manual coding needed. This patch actually removes the need to include any board-specific files in sequencer.c , so sequencer.c namespace is now no longer poluted by QTS-generated macros. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Zap SEQ_T(INIT|RESET)_CNTR._VALMarek Vasut2015-08-08-4/+4
| | | | | | | | | This is another macro used to obfuscate the real code. The T(INIT|RESET)_CNTR._VAL is always defined, so this indirection is unnecessary. Get rid of this. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Zap VFIFO_SIZEMarek Vasut2015-08-08-4/+4
| | | | | | | Just use READ_VALID_FIFO_SIZE directly, no need for this macro obfuscation. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Wrap misc remaining macrosMarek Vasut2015-08-08-0/+2
| | | | | | | | | | | Introduce structure socfpga_sdram_misc_config to wrap the remaining misc configuration values in board file. Again, introduce a function, socfpga_get_sdram_misc_config(), which returns this the structure. This is almost the final step toward wrapping the nasty QTS generated macros in board files and reducing the pollution of the namespace. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Pluck out IO_* macros from codeMarek Vasut2015-08-08-101/+100
| | | | | | | | | Actually convert the sequencer code to use socfpga_sdram_io_config instead of the IO_* macros. This is just an sed excercise here, no manual coding needed. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Wrap IO_* macrosMarek Vasut2015-08-08-0/+2
| | | | | | | | | | | Introduce structure socfpga_sdram_io_config to wrap the IO configuration values in board file. Introduce socfpga_get_sdram_io_config() function, which returns this the structure. This is another step toward wrapping the nasty QTS generated macros in board files and reducing the pollution of the namespace. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Pluck out RW_MGR_* macros from codeMarek Vasut2015-08-08-146/+146
| | | | | | | | | Actually convert the sequencer code to use socfpga_sdram_rw_mgr_config instead of the RW_MGR_* macros. This is just an sed exercise here, no manual coding needed. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Wrap RW_MGR_* macrosMarek Vasut2015-08-08-0/+4
| | | | | | | | | | | Introduce structure socfpga_sdram_rw_mgr_config to wrap the RW manager configuration values in board file. Introduce a complementary function, socfpga_get_sdram_rwmgr_config(), which returns this the structure. This is another step toward wrapping the nasty QTS generated macros in board files and reducing the pollution of the namespace. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Wrap ac_rom_init and inst_rom_initMarek Vasut2015-08-08-6/+8
| | | | | | | | | | Introduce two wrapper functions, socfpga_get_seq_ac_init() and socfpga_get_seq_inst_init() to avoid direct inclusion of the sequencer_auto_ac_init.h and sequencer_auto_inst_init.h QTS generated files. This reduces namespace pollution again. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Zap unused params and macrosMarek Vasut2015-08-08-48/+1
| | | | | | | | These parameters are not used in the code, zap them and the macros which are used by them as well. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: sequencer: Move qts-generated files to board dirMarek Vasut2015-08-08-4/+9
| | | | | | | | Move the files generated by QTS into the board directory, they should not be part of the driver files at all. Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>
* ddr: altera: Clean up of delay_for_n_mem_clocks() part 5Marek Vasut2015-08-08-3/+5
| | | | | | Add kerneldoc. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up of delay_for_n_mem_clocks() part 4Marek Vasut2015-08-08-12/+5
| | | | | | | Simplify the loop code, optimizing compiler can deal with this. No functional change. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up of delay_for_n_mem_clocks() part 3Marek Vasut2015-08-08-18/+6
| | | | | | Clean up the computation of c_loop, outer and inner variables. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up of delay_for_n_mem_clocks() part 2Marek Vasut2015-08-08-8/+10
| | | | | | | Factor out (afi_clocks - 1) into a single place instead of having it all around the function. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up of delay_for_n_mem_clocks() part 1Marek Vasut2015-08-08-14/+13
| | | | | | | Fix data types, clean up comments a bit and fix coding style a bit. No functional change. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Minor clean up of rw_mgr_mem_handoff()Marek Vasut2015-08-08-7/+8
| | | | | | Add kerneldoc and perform a minor comment cleanup. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_lfifo()Marek Vasut2015-08-08-22/+27
| | | | | | Minor coding style cleanup, add kerneldoc. No functional change. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_end()Marek Vasut2015-08-08-38/+21
| | | | | | | | | | | | | | | | This function is implementing the DDR calibration Stage 3 as described in Altera EMI_RM 2015.05.04 . The main body of this function is almost identical to Stage 1.3 (DQ/DQS centering) for all but two flags -- use_read_test and update_fom. Convert this function to call rw_mgr_mem_calibrate_dq_dqs_centering() with the correct flags set to trim down the code duplication. Moreover, reorder the remnants in the function a little and convert the function to return either 0 or -EIO in case of success and failure respectively, to match the common return value convention. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_write_test_issue()Marek Vasut2015-08-08-13/+18
| | | | | | Brief clean, add kerneldoc. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_write_test() part 3Marek Vasut2015-08-08-1/+11
| | | | | | Add kerneldoc. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_write_test() part 2Marek Vasut2015-08-08-39/+36
| | | | | | | Clean up coding style, mostly broken multiline formatting strings in debug output. Also clean up data types and constify where applicable. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_write_test() part 1Marek Vasut2015-08-08-205/+201
| | | | | | | Move code around to get rid of the forward declaration. No change to the actual code. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_writes_center() part 5Marek Vasut2015-08-08-1/+6
| | | | | | Add kerneldoc. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_writes_center() part 4Marek Vasut2015-08-08-6/+7
| | | | | | Fix return values to match the common return value convention. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_writes_center() part 3Marek Vasut2015-08-08-3/+2
| | | | | | Zap the useless addr variable. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_writes_center() part 2Marek Vasut2015-08-08-79/+88
| | | | | | Factor out common code for searching best DM/DQS window. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_writes_center() part 1Marek Vasut2015-08-08-61/+63
| | | | | | | Fix data types and constify where applicable, fix broken multiline debug strings and fix comments. No functional change. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 11Marek Vasut2015-08-08-1/+10
| | | | | | Add kerneldoc, no functional change. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 10Marek Vasut2015-08-08-4/+7
| | | | | | | | Fix the return value of the function to match common convention where 0 means success and negative means error. Fix the return values in case of an error to use errno.h codes. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 9Marek Vasut2015-08-08-18/+17
| | | | | | | | | The read_group and write_group arguments are the same in all cases when this function is invoked, just merge them into one rw_group argument. Also, clean up the function argument data types and constify them. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 8Marek Vasut2015-08-08-18/+15
| | | | | | | | | The search_stop_check() always resets the bit_chk to a new value, so bit_chk will never survive between search_left_edge() and search_right_edge() invocation. There is thus no need to pass it into these functions, so make bit_chk local to them. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 7Marek Vasut2015-08-08-12/+9
| | | | | | | Perform minor reordering of the function to make the code more organised, no functional change. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 6Marek Vasut2015-08-08-89/+88
| | | | | | | | Factor out center_dq_windows(), which is common code between stage 2 and stage 3 of the calibration again and cater for the minor differences. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 5Marek Vasut2015-08-08-46/+44
| | | | | | | | Factor out the get_window_mid_index() for finding the best DQ window centering. This is again code common to two stages, so pull it out. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 4Marek Vasut2015-08-08-17/+23
| | | | | | | | | | First of all, don't break strings in the debug_cond() calls across multiple lines. Next, zap a couple of really odd casts in the code. Finally, make i into a signed variable, so it is possible to avoid constructs of the form: for (i = FOO;; i--) { <code>; if (i == 0) break; }. Signed-off-by: Marek Vasut <marex@denx.de>
* ddr: altera: Clean up rw_mgr_mem_calibrate_vfifo_center() part 3Marek Vasut2015-08-08-66/+60
| | | | | | | | | Factor out common code from search_left_edge() and search_right_edge() which checks whether searching for the window edge should stop. The code is almost identical, so pull it into separate function and cater for the minor differences. Signed-off-by: Marek Vasut <marex@denx.de>