123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- HCU5 configuration details and startup sequence
- (C) Copyright 2007 Netstal Maschinen AG
- Niklaus Giger (Niklaus.Giger@netstal.com)
- TODO:
- -----
- - Fix error: Waiting for PHY auto negotiation to complete..... TIMEOUT !
- - Does not occur if both EMAC are connected
- - Fix RTS/CTS problem (HW?)
- CONFIG_SERIAL_MULTI/CONFIG_SERIAL_SOFTWARE_FIFO hangs after
- Switching to interrupt driven serial input mode
- Caveats:
- --------
- Errata CHIP_8: Incorrect Write to DDR SDRAM. (was not applied to sequoia.c)
- see hcu5.c.
- Memory Bank 0 -- Flash chip
- ---------------------------
- 0xfff00000 - 0xffffffff
- The flash chip is really only 512Kbytes, but the high address bit of
- the 1Meg region is ignored, so the flash is replicated through the
- region. Thus, this is consistent with a flash base address 0xfff80000.
- The placement at the end is to be consistent with reset behavior,
- where the processor itself initially uses this bus to load the branch
- vector and start running.
- On-Chip Memory
- --------------
- 0xe0010000- 0xe0013fff CONFIG_SYS_OCM_BASE
- The 440EPx includes a 16K on-chip memory that can be placed however
- software chooses.
- Internal Peripherals
- --------------------
- 0xef600300 - 0xef6008ff
- These are scattered various peripherals internal to the PPC440EPX
- chip.
- Chip-Select 2: Flash Memory
- ---------------------------
- Not used
- Chip-Select 3: CAN Interface
- ----------------------------
- 0xc800000: 2 Intel 82527 CAN-Controller
- Chip-Select 4: IMC-bus standard
- -------------------------------
- 0xcc00000: Netstal specific IO-Bus
- Chip-Select 5: IMC-bus fast (inactive)
- --------------------------------------
- 0xce00000: Netstal specific IO-Bus (fast, but not yet used)
- Memory Bank 1 -- DDR2
- -------------------------------------
- 0x00000000 - 0xfffffff # Default 256 MB
- PCI ??
- USB ??
- Only USB_STORAGE is enabled to load vxWorks
- from a memory stick.
- System-LEDs ??? (Analog zu HCU4 ???)
- Startup sequence
- ----------------
- (arch/powerpc/cpu/ppc4xx/resetvec.S)
- depending on configs option
- call _start_440 _start_pci oder _start
- (arch/powerpc/cpu/ppc4xx/start.S)
- _start_440:
- initialize register like
- CCR0
- debug
- setup interrupt vectors
- configure cache regions
- clear and setup TLB
- enable internal RAM
- jump start_ram
- which in turn will jump to start
- _start:
- Clear and set up some registers.
- Debug setup
- Setup the internal SRAM
- Setup the stack in internal SRAM
- setup stack pointer (r1)
- setup GOT
- call cpu_init_f /* run low-level CPU init code (from Flash) */
- call cpu_init_f
- board_init_f: (arch/powerpc/lib\board.c)
- init_sequence defines a list of function to be called
- board_early_init_f: (board/netstal/hcu5/hcu5.c)
- We are using Bootstrap-Option A
- if CPR0_ICFG_RLI_MASK == 0 then set some registers and reboot
- Setup the GPIO pins
- Setup the interrupt controller polarities, triggers, etc.
- Ethernet, PCI, USB enable
- setup BOOT FLASH (Chip timing)
- init_baudrate,
- serial_init
- checkcpu
- misc_init_f #ifdef
- init_func_i2c #ifdef
- post_init_f #ifdef
- init_func_ram -> calls init_dram board/netstal/hcu5/sdram.c
- (EYE function removed!!)
- test_dram call
- * Reserve memory at end of RAM for (top down in that order):
- * - kernel log buffer
- * - protected RAM
- * - LCD framebuffer
- * - monitor code
- * - board info struct
- Save local variables to board info struct
- call relocate_code() does not return
- relocate_code: (arch/powerpc/cpu/ppc4xx/start.S)
- -------------------------------------------------------
- From now on our copy is in RAM and we will run from there,
- starting with board_init_r
- -------------------------------------------------------
- board_init_r: (arch/powerpc/lib\board.c)
- setup bd function pointers
- trap_init
- flash_init: (board/netstal/hcu5/flash.c)
- /* setup for u-boot erase, update */
- setup bd flash info
- cpu_init_r: (arch/powerpc/cpu/ppc4xx/cpu_init.c)
- peripheral chip select in using defines like
- CONFIG_SYS_EBC_PB0A, CONFIG_SYS_EBC_PB0C from hcu5.h
- mem_malloc_init
- malloc_bin_reloc
- spi_init (r or f)??? (CONFIG_ENV_IS_IN_EEPROM)
- env_relocated
- misc_init_r(bd): (board/netstal/hcu5.c)
- ethaddr mit serial number ergänzen
- Then we will somehow go into the command loop
- Most of the HW specific code for the HCU5 may be found in
- include/configs/hcu5.h
- board/netstal/hcu5/*
- arch/powerpc/cpu/ppc4xx/*
- arch/powerpc/lib/*
- include/ppc440.h
- Drivers for serial etc are found under drivers/
- Don't ask question if you did not look at the README !!
- Most CONFIG_SYS_* and CONFIG_* switches are mentioned/explained there.
|