/********************************************************************* * (c) SEGGER Microcontroller GmbH * * The Embedded Experts * * www.segger.com * ********************************************************************** File : Created : 11 Oct 2019 10:46 Ozone Version : V2.70a */ void Relocate(void) { if (Project.RelocateSymbols("*", 0x38747000) == 0) { Util.Log("Relocate: OK"); } else { Util.Log("Relocate: NOK"); } } /********************************************************************* * * OnProjectLoad * * Function description * Project load routine. Required. * ********************************************************************** */ void OnProjectLoad (void) { // // Dialog-generated settings // Project.AddPathSubstitute ("/home/fusion/workspace/u-boot-imx", "$(ProjectDir)"); Project.SetDevice ("MCIMX6S5"); Project.SetHostIF ("USB", ""); Project.SetTargetIF ("JTAG"); Project.SetTIFSpeed ("1 MHz"); Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-A9.svd"); // // User settings // File.Open ("$(ProjectDir)/u-boot-reloc"); } /********************************************************************* * * OnSnapshotLoad * * Function description * Optional event handler, called upon loading a snapshot. * * Additional information * This function is used to restore the target state in cases * where values cannot simply be written to the target. * Typical use: GPIO clock needs to be enabled, before * GPIO is configured. * ********************************************************************** */ //void OnSnapshotLoad (void) { //} /********************************************************************* * * OnSnapshotSave * * Function description * Optional event handler, called upon saving a snapshot. * * Additional information * This function is usually used to save values of the target * state which can either not be trivially read, * or need to be restored in a specific way or order. * Typically use: Memory Mapped Registers, * such as PLL and GPIO configuration. * ********************************************************************** */ //void OnSnapshotSave (void) { //} /********************************************************************* * * TargetReset * * Function description * Replaces the default target device reset routine. Optional. * * Notes * This example demonstrates the usage when * debugging a RAM program on a Cortex-M target device * ********************************************************************** */ //void TargetReset (void) { // // unsigned int SP; // unsigned int PC; // unsigned int VectorTableAddr; // // VectorTableAddr = Program.GetBaseAddr(); // // if (VectorTableAddr != 0xFFFFFFFF) { // SP = Target.ReadU32(VectorTableAddr); // Target.SetReg("SP", SP); // } else { // Util.Log("Project file error: failed to get program base"); // } // // PC = Elf.GetEntryPointPC(); // // if (PC != 0xFFFFFFFF) { // Target.SetReg("PC", PC); // } else if (VectorTableAddr != 0xFFFFFFFF) { // PC = Target.ReadU32(VectorTableAddr + 4); // Target.SetReg("PC", PC); //} /********************************************************************* * * BeforeTargetReset * * Function description * Event handler routine. Optional. * ********************************************************************** */ //void BeforeTargetReset (void) { //} /********************************************************************* * * AfterTargetReset * * Function description * Event handler routine. * - Sets the PC register to program reset value. * - Sets the SP register to program reset value on Cortex-M. * ********************************************************************** */ void AfterTargetReset (void) { unsigned int PC; Exec.Reset(); Util.Sleep(200); Debug.Halt(); // Delay 500ms to make sure the board is properly out of reset Util.Sleep(500); // Fusion 6Solo with 1024MB of RAM // Initializing target // Disable Watchdog Target.WriteU32(0x020bc000, 0x30); //DDR IO TYPE: Target.WriteU32(0x020e0774, 0x000C0000); Target.WriteU32(0x020e0754, 0x00000000); //CLOCK: Target.WriteU32(0x020e04ac, 0x00000028); Target.WriteU32(0x020e04b0, 0x00000028); //ADDRESS: Target.WriteU32(0x020e0464, 0x00000028); Target.WriteU32(0x020e0490, 0x00000028); Target.WriteU32(0x020e074c, 0x00000028); //Control: Target.WriteU32(0x020e0494, 0x00000028); Target.WriteU32(0x020e04a0, 0x00000000); Target.WriteU32(0x020e04b4, 0x00000028); Target.WriteU32(0x020e04b8, 0x00000028); Target.WriteU32(0x020e076c, 0x00000028); //Data Strobes: Target.WriteU32(0x020e0750, 0x00020000); Target.WriteU32(0x020e04bc, 0x00000028); Target.WriteU32(0x020e04c0, 0x00000028); Target.WriteU32(0x020e04c4, 0x00000028); Target.WriteU32(0x020e04c8, 0x00000028); //Data: Target.WriteU32(0x020e0760, 0x00020000); Target.WriteU32(0x020e0764, 0x00000028); Target.WriteU32(0x020e0770, 0x00000028); Target.WriteU32(0x020e0778, 0x00000028); Target.WriteU32(0x020e077c, 0x00000028); Target.WriteU32(0x020e0470, 0x00000028); Target.WriteU32(0x020e0474, 0x00000028); Target.WriteU32(0x020e0478, 0x00000028); Target.WriteU32(0x020e047c, 0x00000028); // DDR Controller Registers Target.WriteU32(0x021b0800, 0xA1390003); Target.WriteU32(0x021b080c, 0x003B0042); Target.WriteU32(0x021b0810, 0x0024002A); Target.WriteU32(0x021b083c, 0x0244023C); Target.WriteU32(0x021b0840, 0x02180220); Target.WriteU32(0x021b0848, 0x44484846); Target.WriteU32(0x021b0850, 0x36342E2E); Target.WriteU32(0x021b081c, 0x33333333); Target.WriteU32(0x021b0820, 0x33333333); Target.WriteU32(0x021b0824, 0x33333333); Target.WriteU32(0x021b0828, 0x33333333); Target.WriteU32(0x021b08b8, 0x00000800); //MMDC init: Target.WriteU32(0x021b0004, 0x0002002D); Target.WriteU32(0x021b0008, 0x1B333040); Target.WriteU32(0x021b000c, 0x676B52F3); Target.WriteU32(0x021b0010, 0xB66E8B63); Target.WriteU32(0x021b0014, 0x01FF00DB); Target.WriteU32(0x021b0018, 0x00011740); Target.WriteU32(0x021b001c, 0x00008000); Target.WriteU32(0x021b002c, 0x000026D2); Target.WriteU32(0x021b0030, 0x006B1023); Target.WriteU32(0x021b0040, 0x00000027); Target.WriteU32(0x021b0000, 0x84190000); Target.WriteU32(0x021b001c, 0x02008032); Target.WriteU32(0x021b001c, 0x00008033); Target.WriteU32(0x021b001c, 0x00048031); Target.WriteU32(0x021b001c, 0x05208030); Target.WriteU32(0x021b001c, 0x04008040); Target.WriteU32(0x021b0020, 0x00007800); Target.WriteU32(0x021b0818, 0x00022227); Target.WriteU32(0x021b0004, 0x0002556D); Target.WriteU32(0x021b0404, 0x00011006); Target.WriteU32(0x021b001c, 0x00000000); //set the default clock gate to save power Target.WriteU32(0x020c4068, 0xffffffff); Target.WriteU32(0x020c406c, 0xffffffff); Target.WriteU32(0x020c4070, 0xffffffff); Target.WriteU32(0x020c4074, 0xffffffff); Target.WriteU32(0x020c4078, 0xffffffff); Target.WriteU32(0x020c407c, 0xffffffff); Target.WriteU32(0x020c4080, 0xffffffff); Target.WriteU32(0x020c4084, 0xffffffff); //enable AXI cache for VDOA/VPU/IPU Target.WriteU32(0x020e0010, 0xF00000CF); //set IPU AXI-id0 Qos, 0xf(bypass) AXI-id1 Qos, 0x7 Target.WriteU32(0x020e0018, 0x007F007F); Target.WriteU32(0x020e001c, 0x007F007F); Target.WriteU32(0x020c4060, 0x000000fb); Target.SetReg("CPSR", 0xD3); Target.SetReg("SP", 0x0093FF20); Target.SetReg("PC", 0x17800000); Util.Sleep(500); /* PC = Elf.GetEntryPointPC(); if (PC == 0xFFFFFFFF) { PC = Elf.GetBaseAddr(); } if (PC != 0xFFFFFFFF) { Target.SetReg("PC", PC); } else { Util.Log("Project file error: failed to get program base"); } */ } /********************************************************************* * * DebugStart * * Function description * Replaces the default debug session startup routine. Optional. * ********************************************************************** */ //void DebugStart (void) { //} /********************************************************************* * * TargetConnect * * Function description * Replaces the default target IF connection routine. Optional. * ********************************************************************** */ //void TargetConnect (void) { //} /********************************************************************* * * BeforeTargetConnect * * Function description * Event handler routine. Optional. * ********************************************************************** */ //void BeforeTargetConnect (void) { //} /********************************************************************* * * AfterTargetConnect * * Function description * Event handler routine. Optional. * ********************************************************************** */ //void AfterTargetConnect (void) { //} /********************************************************************* * * TargetDownload * * Function description * Replaces the default program download routine. Optional. * ********************************************************************** */ //void TargetDownload (void) { //} /********************************************************************* * * BeforeTargetDownload * * Function description * Event handler routine. Optional. * ********************************************************************** */ //void BeforeTargetDownload (void) { //} /********************************************************************* * * AfterTargetDownload * * Function description * Event handler routine. * - Sets the PC register to program reset value. * - Sets the SP register to program reset value on Cortex-M. * ********************************************************************** */ void AfterTargetDownload (void) { unsigned int PC; PC = Elf.GetEntryPointPC(); if (PC == 0xFFFFFFFF) { PC = Elf.GetBaseAddr(); } if (PC != 0xFFFFFFFF) { Target.SetReg("PC", PC); } else { Util.Log("Project file error: failed to get program base"); } } /********************************************************************* * * BeforeTargetDisconnect * * Function description * Event handler routine. Optional. * ********************************************************************** */ //void BeforeTargetDisconnect (void) { //} /********************************************************************* * * AfterTargetDisconnect * * Function description * Event handler routine. Optional. * ********************************************************************** */ //void AfterTargetDisconnect (void) { //} /********************************************************************* * * AfterTargetHalt * * Function description * Event handler routine. Optional. * ********************************************************************** */ //void AfterTargetHalt (void) { //}