add icnova_sam9g45_sodimm support
authorLars Poeschel <lars@kiwigrid.com>
Wed, 26 Oct 2011 14:52:53 +0000 (16:52 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 13 Feb 2012 12:04:00 +0000 (12:04 +0000)
This adds support for in-circuit icnova sam9g45 sodimm: http://www.ic-board.de/product_info.php?info=p214_ICnova-SAM9G45-SODIMM.html|ICnova
The NAND flash is not yet working.

Change-Id: I94ca5203f8d8a55dec1e4e87cd0631bd2b8393f9
Signed-off-by: lars@kiwigrid.com
Reviewed-on: http://openocd.zylin.com/418
Tested-by: jenkins
Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
tcl/board/icnova_sam9g45_sodimm.cfg [new file with mode: 0644]

diff --git a/tcl/board/icnova_sam9g45_sodimm.cfg b/tcl/board/icnova_sam9g45_sodimm.cfg
new file mode 100644 (file)
index 0000000..84dab38
--- /dev/null
@@ -0,0 +1,278 @@
+#################################################################################################
+#                                                                                                                                              #
+# Author: Lars Poeschel (larsi@wh2.tu-dresden.de)                                                                                              #
+# Generated for In-Circuit ICnova SAM9G45 SODIMM                                                                                               #
+# http://www.ic-board.de/product_info.php?info=p214_ICnova-SAM9G45-SODIMM.html|ICnova                  #
+#                                                                                                                                                                                              #
+#################################################################################################
+
+# FIXME use some standard target config, maybe create one from this
+#
+#      source [find target/...cfg]
+
+source [find target/at91sam9g45.cfg]
+
+# Set reset type.
+# reset_config trst_and_srst
+
+# adapter_nsrst_delay 200
+# jtag_ntrst_delay 200
+
+
+# If you don't want to execute built-in boot rom code (and there are good reasons at times not to do that) in the
+# AT91SAM9 family, the microcontroller is a lump on a log without initialization.  Because this family has
+# some powerful features, we want to have a special function that handles "reset init".  To do this we declare
+# an event handler where these special activities can take place.
+
+scan_chain
+$_TARGETNAME configure -event reset-init {at91sam9g45_init}
+
+# Set fallback clock to 1/6 of worst-case clock speed (which would be the 32.768 kHz slow clock).
+# Slow-speed oscillator enabled at reset, so run jtag speed slow.
+$_TARGETNAME configure -event reset-start {at91sam9g45_start}
+
+
+# NandFlash configuration and definition
+# Future TBD
+# Flash configuration
+# flash bank cfi <base> <size> <chip width> <bus width> <target#>
+set _FLASHNAME $_CHIPNAME.flash
+# set _NANDNAME $_CHIPNAME.nand
+flash bank $_FLASHNAME cfi 0x10000000 0x00800000 2 2 $_TARGETNAME
+# nand device $_NANDNAME at91sam9 $_TARGETNAME 0x40000000 0xFFFFE800
+
+
+proc read_register {register} {
+        set result ""
+        mem2array result 32 $register 1
+        return $result(0)
+}
+
+proc at91sam9g45_start { } {
+
+       # Make sure that the the jtag is running slow, since there are a number of different ways the board
+       # can be configured coming into this state that can cause communication problems with the jtag
+       # adapter.  Also since this call can be made following a "reset init" where fast memory accesses
+       # are enabled, need to temporarily shut this down so that the RSTC_MR register can be written at slower
+       # jtag speed without causing GDB keep alive problem.
+
+       arm7_9 fast_memory_access disable
+    # Slow-speed oscillator enabled at reset, so run jtag speed slow.
+       adapter_khz 4
+    # Make sure processor is halted, or error will result in following steps.
+       halt
+       wait_halt 10000
+    # RSTC_MR : enable user reset.
+       mww 0xfffffd08 0xa5000501
+}
+
+
+proc at91sam9g45_init { } {
+
+       # At reset AT91SAM9G45 chip runs on slow clock (32.768 kHz).  To shift over to a normal clock requires
+       # a number of steps that must be carefully performed.  The process outline below follows the
+       # recommended procedure outlined in the AT91SAM9G45 technical manual.
+       #
+       # Several key and very important things to keep in mind:
+       # The SDRAM parts used currently on the board are -75 grade parts.  This
+       # means the master clock (MCLK) must be at or below 133 MHz or timing errors will occur.  The processor
+       # core can operate up to 400 MHz and therefore PCLK must be at or below this to function properly.
+
+       # Make sure processor is halted, or error will result in following steps.
+       halt
+       # RSTC_MR : enable user reset.
+       mww 0xfffffd08 0xa5000501
+       # WDT_MR : disable watchdog.
+       mww 0xfffffd44 0x00008000
+
+       # Enable the main 15.000 MHz oscillator in CKGR_MOR register.
+       # Wait for MOSCS in PMC_SR to assert indicating oscillator is again stable after change to CKGR_MOR.
+
+       mww 0xfffffc20 0x00004001
+       while { [expr [read_register 0xfffffc68] & 0x01] != 1 } { sleep 1 }
+
+       # Set PLLA Register for 792.576 MHz (divider: bypass, multiplier: 43).
+       # Wait for LOCKA signal in PMC_SR to assert indicating PLLA is stable.
+
+       #mww 0xfffffc28 0x202a3f01
+       mww 0xfffffc28 0x20c73f03
+       while { [expr [read_register 0xfffffc68] & 0x02] != 2 } { sleep 1 }
+
+       # Set master system clock prescaler divide by 6 and processor clock divide by 2 in PMC_MCKR.
+       # Wait for MCKRDY signal from PMC_SR to assert.
+
+       #mww 0xfffffc30 0x00000101
+       mww 0xfffffc30 0x00001301
+       while { [expr [read_register 0xfffffc68] & 0x08] != 8 } { sleep 1 }
+
+       # Now change PMC_MCKR register to select PLLA.
+       # Wait for MCKRDY signal from PMC_SR to assert.
+
+       mww 0xfffffc30 0x00001302
+       while { [expr [read_register 0xfffffc68] & 0x08] != 8 } { sleep 1 }
+
+       # Processor and master clocks are now operating and stable at maximum frequency possible:
+       #       -> MCLK = 132.096 MHz
+       #       -> PCLK = 396.288 MHz
+
+       # Switch over to adaptive clocking.
+
+       adapter_khz 6000
+
+       # Enable faster DCC downloads.
+
+       arm7_9 dcc_downloads enable
+
+       # To be able to use external SDRAM, several peripheral configuration registers must
+       # be modified.  The first change is made to PIO_ASR to select peripheral functions
+       # for D15 through D31.  The second change is made to the PIO_PDR register to disable
+       # this for D15 through D31.
+
+#      mww 0xfffff870 0xffff0000
+#      mww 0xfffff804 0xffff0000
+
+       # The EBI chip select register EBI_CS must be specifically configured to enable the internal SDRAM controller
+       # using CS1.  Additionally we want CS3 assigned to NandFlash.  Also VDDIO is connected physically on
+       # the board to the 3.3 VDC power supply so set the appropriate register bit to notify the micrcontroller.
+
+       # mww 0xffffef1c 0x000100a
+
+       # The ICnova SAM9G45 SODIMM has built-in NandFlash.  The exact physical timing characteristics
+       # for the memory type used on the current board (MT29F2G08AACWP) can be established by setting
+       # four registers in order:  SMC_SETUP3, SMC_PULSE3, SMC_CYCLE3, and SMC_MODE3.
+
+       # mww 0xffffec30 0x00020002
+       # mww 0xffffec34 0x04040404
+       # mww 0xffffec38 0x00070007
+       # mww 0xffffec3c 0x00030003
+
+       # Identify NandFlash bank 0.  Disabled at the moment because a memory driver is not yet complete.
+
+#      nand probe 0
+
+    # SMC_SETUP0 : Setup SMC for NOR Flash
+       mww 0xffffe800 0x0012000a
+    # SMC_PULSE0
+       mww 0xffffe804 0x3b38343b
+    # SMC_CYCLE0
+       mww 0xffffe808 0x003f003f
+    # SMC_MODE0
+       mww 0xffffe80c 0x00001000
+    # Identify flash bank 0
+       flash probe 0
+
+       # Now setup SDRAM.  This is tricky and configuration is very important for reliability!  The current calculations
+       # are based on 2 x Samsung K4T51083QG memory.
+
+       # 0. Enable DDR2 Clock
+       mww 0xfffffc00 0x4
+       # 1. Program memory device type
+       # 1.1 configure the DDR controller
+       mww 0xffffe620 0x16
+       # 1.2 program the DDR controller
+       mww 0xffffe608 0x3d
+
+       # 2. program memory device features
+       # 2.1 assume timings for 7.5ns min clock period
+       mww 0xffffe60c 0x21128226
+       # 2.2 pSDDRC->HDDRSDRC2_T1PR
+       mww 0xffffe610 0x02c8100e
+       # 2.3 pSDDRC->HDDRSDRC2_T2PR
+       mww 0xffffe614 0x01000702
+       # 3. NOP
+       mww 0xffffe600 0x1
+       mww 0x70000000 0x1
+       # 3.1 delay 200us
+       sleep 1
+       # jim tcl alternative: after ms
+       # after 0.2
+
+       # 4. NOP
+       mww 0xffffe600 0x1
+       mww 0x70000000 0x1
+       # 4.1 delay 400ns
+
+       # 5. set all bank precharge
+       mww 0xffffe600 0x2
+       mww 0x70000000 0x1
+       # 5.1 delay 400ns
+
+       # 6. set EMR operation (EMRS2)
+       mww 0xffffe600 0x5
+       mww 0x74000000 0x1
+       # 6.1 delay 2 cycles
+
+       # 7. set EMR operation (EMRS3)
+       mww 0xffffe600 0x5
+       mww 0x76000000 0x1
+       # 7.1 delay 2 cycles
+
+       # 8. set EMR operation (EMRS1)
+       mww 0xffffe600 0x5
+       mww 0x72000000 0x1
+       # 8.1 delay 200 cycles (400Mhz -> 5 * 10^-7s)
+       sleep 1
+
+       # 9. Enable DLL Reset (set DLL bit)
+       set CR  [expr [read_register 0xffffe608] | 0x80]
+       mww 0xffffe608 $CR
+
+       # 10. mode register cycle to reset the DLL
+       mww 0xffffe600 0x5
+       mww 0x70000000 0x1
+       # 10.1 delay 2 cycles
+
+       # 11. set all bank precharge
+       mww 0xffffe600 0x2
+       mww 0x70000000 0x1
+       # 11.1 delay 400 ns
+
+       # 12. two auto-refresh (CBR) cycles are provided.
+       mww 0xffffe600 0x4
+       mww 0x70000000 0x1
+       # 12.1 delay 10 cycles
+       # 12.2 2nd cycle (schreiben des Mode Register sparen wir uns)
+       mww 0x70000000 0x1
+       # 12.3 delay 10 cycles
+
+       # 13. disable DLL reset (clear DLL bit)
+       set CR  [expr [read_register 0xffffe608] & 0xffffff7f]
+       mww 0xffffe608 $CR
+
+       # 14. mode register set cycle
+       mww 0xffffe600 0x3
+       mww 0x70000000 0x1
+
+       # 15. program OCD field (set OCD bits)
+       set CR  [expr [read_register 0xffffe608] | 0x7000]
+       mww 0xffffe608 $CR
+
+       # 16. (EMRS1)
+       mww 0xffffe600 0x5
+       mww 0x72000000 0x1
+       # 16.1 delay 2 cycles
+
+       # 17. disable OCD field (clear OCD bits)
+       set CR  [expr [read_register 0xffffe608] & 0xffff8fff]
+       mww 0xffffe608 $CR
+
+       # 18. (EMRS1)
+       mww 0xffffe600 0x5
+       mww 0x76000000 0x1
+       # 18.1 delay 2 cycles
+
+       # 19. normal mode command
+       mww 0xffffe600 0x0
+       mww 0x70000000 0x1
+
+       # 20. perform write to any address
+       #mww 0x70000000 0x1
+
+       # 21. write refresh rate into the count field of the refresh rate register
+       mww 0xffffe604 0x24b
+       # 21.1 delay (500 * 6 cycles)
+
+       arm7_9 fast_memory_access enable
+}
+
+

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)