# SPDX-License-Identifier: GPL-2.0-or-later # Board configuration file for Amazon Kindle Model No. D00701 and D00801 # AKA Kindle 2nd generation and Kindle DX # using a Freescale MCIMX31LDVKN5D i.MX31 processor # # Pins at J9 40-Pin FFC-A: # 1 - GND # 16 - TRSTB # 17 - TDI # 18 - TMS # 19 - TCK # 20 - RTCK # 21 - TDO # 22 - DE # 25 - BOOT_MODE4 # 27 - BOOT_MODE2 source [find target/imx31.cfg] source [find target/imx.cfg] $_TARGETNAME configure -event reset-init { kindle2_init } $_TARGETNAME configure -event reset-start { adapter speed 1000 } # 8MiB NOR Flash set _FLASHNAME $_CHIPNAME.flash flash bank $_FLASHNAME cfi 0xa0000000 0x800000 2 2 $_TARGETNAME # 16kiB internal SRAM $_TARGETNAME configure -work-area-phys 0x1fffc000 \ -work-area-size 0x4000 -work-area-backup 0 # FIXME: currently SRST is not wired to the system reset_config trst_only jtag_ntrst_assert_width 10 jtag_ntrst_delay 30 # this is broken but enabled by default arm11 memwrite burst disable adapter speed 1000 ftdi tdo_sample_edge falling proc kindle2_init {} { imx3x_reset kindle2_clock_setup disable_mmu_and_cache kindle2_misc_init kindle2_sdram_init arm core_state arm } proc kindle2_clock_setup {} { # CCMR: clock from FPM/CKIL mww 0x53f80000 0x074b0b7b # IPU_CONF mww 0x53fc0000 0x040 # 398MHz mww 0x53f80004 0xff871650 mww 0x53f80010 0x00331c23 } proc kindle2_misc_init { } { # AIPS1 mww 0x43f00040 0x0 mww 0x43f00044 0x0 mww 0x43f00048 0x0 mww 0x43f0004c 0x0 mww 0x43f00050 0x0 mww 0x43f00000 0x77777777 mww 0x43f00004 0x77777777 # AIPS2 mww 0x53f00040 0x0 mww 0x53f00044 0x0 mww 0x53f00048 0x0 mww 0x53f0004c 0x0 mww 0x53f00050 0x0 mww 0x53f00000 0x77777777 mww 0x53f00004 0x77777777 # Start 16 bit NorFlash Initialization on CS0 mww 0xb8002000 0x0000cc03 mww 0xb8002004 0xa0330d01 mww 0xb8002008 0x00220800 } proc disable_mmu_and_cache {} { # Mode Supervisor, disable FIQ, IRQ and imprecise data aborts reg cpsr 0x1d3 # flush entire BTAC arm mcr 15 0 7 5 6 0 # invalidate instruction and data cache # MCR CP15, 0, R1, C7, C7, 0 arm mcr 15 0 7 7 0 # clean and invalidate cache arm mcr 15 0 7 15 0 # disable MMU and caches arm mcr 15 0 1 0 0 0 arm mcr 15 0 15 2 4 0 # invalidate TLBs arm mcr 15 0 8 7 0 0 # Drain the write buffer arm mcr 15 0 7 10 4 0 # start from AIPS 2GB region arm mcr 15 0 15 2 4 0x40000015 } proc kindle2_sdram_init {} { #-------------------------------------------- # Samsung K4X1G323PC-8GC3 32Mx32 Mobile DDR SDRAM #-------------------------------------------- # SDCLK mww 0x43fac26c 0 # CAS mww 0x43fac270 0 # RAS mww 0x43fac274 0 # CS2 (CSD0) mww 0x43fac27c 0x1000 # DQM3 mww 0x43fac284 0 # DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2dc) mww 0x43fac288 0 mww 0x43fac28c 0 mww 0x43fac290 0 mww 0x43fac294 0 mww 0x43fac298 0 mww 0x43fac29c 0 mww 0x43fac2a0 0 mww 0x43fac2a4 0 mww 0x43fac2a8 0 mww 0x43fac2ac 0 mww 0x43fac2b0 0 mww 0x43fac2b4 0 mww 0x43fac2b8 0 mww 0x43fac2bc 0 mww 0x43fac2c0 0 mww 0x43fac2c4 0 mww 0x43fac2c8 0 mww 0x43fac2cc 0 mww 0x43fac2d0 0 mww 0x43fac2d4 0 mww 0x43fac2d8 0 mww 0x43fac2dc 0 # ? mww 0xb8002000 0x00006602 mww 0xb8002004 0x00000501 mww 0xb8002008 0x00000000 # LPDDR1 Initialization script mww 0xb8001010 0x00000002 mww 0xb8001010 0x00000004 # ESDCFG0: set timing parameters mww 0xb8001004 0x007fff7f # ESDCTL0: select Prechare-All mode mww 0xb8001000 0x92100000 mww 0x80000f00 0x12344321 # ESDCTL0: Auto Refresh mww 0xb8001000 0xa2100000 mww 0x80000000 0x12344321 mww 0x80000000 0x12344321 # ESDCTL0: Load Mode Register mww 0xb8001000 0xb2100000 mwb 0x80000033 0xda mwb 0x81000000 0xff # ESDCTL0: enable Auto-Refresh mww 0xb8001000 0x82226080 mww 0x80000000 0xdeadbeef }