summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/mpc55xx/misc/fmpll.S
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-01-23 11:19:22 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-01-23 11:19:22 +0100
commita762dc2a49fad0e7797806fefd34d144b6d998b2 (patch)
tree3f21a6ba6320a3a89581a3d1e2be5162bb8a904f /c/src/lib/libcpu/powerpc/mpc55xx/misc/fmpll.S
parentGoogle C++ Testing Framework 1.6.0. (diff)
downloadrtems-a762dc2a49fad0e7797806fefd34d144b6d998b2.tar.bz2
Support for MPC5643L.
Rework of the start sequence to reduce the amount assembler code and to support configuration tables which may be provided by the application.
Diffstat (limited to 'c/src/lib/libcpu/powerpc/mpc55xx/misc/fmpll.S')
-rw-r--r--c/src/lib/libcpu/powerpc/mpc55xx/misc/fmpll.S193
1 files changed, 0 insertions, 193 deletions
diff --git a/c/src/lib/libcpu/powerpc/mpc55xx/misc/fmpll.S b/c/src/lib/libcpu/powerpc/mpc55xx/misc/fmpll.S
deleted file mode 100644
index 6613f0bd1b..0000000000
--- a/c/src/lib/libcpu/powerpc/mpc55xx/misc/fmpll.S
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * @file
- *
- * @ingroup mpc55xx_asm
- *
- * @brief FMPLL setup.
- */
-
-/*
- * Copyright (c) 2008-2011 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.com/license/LICENSE.
- *
- * $Id$
- */
-
-#include <libcpu/powerpc-utility.h>
-#include <mpc55xx/reg-defs.h>
-#include <bspopts.h>
-
-#define FMPLL_IS_MPC551X (5510 <= MPC55XX_CHIP_TYPE && MPC55XX_CHIP_TYPE <= 5517)
-
-#define FMPLL_IS_MPC5674 (MPC55XX_CHIP_TYPE == 5674)
-
-#define FMPLL_HAS_ENHANCED_FMPLL (FMPLL_IS_MPC551X || FMPLL_IS_MPC5674)
-
- .section ".bsp_start_text", "ax"
-
-/* Timeout for delay in clocks */
-.equ FMPLL_TIMEOUT, 6000
-
-.macro DO_SETTING setting
- lwz r5, \setting
- stw r5, 0(r4)
- msync
- bl fmpll_wait_for_lock
-.endm
-
-/**
- * @fn void mpc55xx_fmpll_init()
- * @brief Configure FMPLL after reset.
- */
-GLOBAL_FUNCTION mpc55xx_fmpll_init
- /* Save link register */
- mflr r9
-
-#if FMPLL_HAS_ENHANCED_FMPLL
- /*
- * for MPC5510: pass in ptr to array with:
- * off 0: temp setting for ESYNCR2
- * off 4: final setting for ESYNCR2
- * off 8: final setting for ESYNCR1
- */
- LA r4, FMPLL_ESYNCR2
-
- lwz r5, 0(r3)
- stw r5, 0(r4)
- msync
-
- lwz r5, 8(r3)
- stw r5, (FMPLL_ESYNCR1-FMPLL_ESYNCR2)(r4)
- msync
- bl fmpll_wait_for_lock
-
- DO_SETTING 4(r3)
-
-#if FMPLL_IS_MPC551X
- /*
- * switch to PLL clock in SIU
- */
- LA r4, SIU_SYSCLK
- lwz r5, 0(r4)
- LWI r6, ~SIU_SYSCLK_SYSCLKSEL_MASK
- and r5, r5, r6
- LWI r6, SIU_SYSCLK_SYSCLKSEL_PLL
- or r5, r5, r6
- stw r5, 0(r4)
-#endif /* FMPLL_IS_MPC551X */
-#else /* !FMPLL_HAS_ENHANCED_FMPLL */
- /*
- * for MPC5566: pass in ptr to array with:
- * off 0: temp setting for SYNCR
- * off 4: final setting for SYNCR
- */
-
- LA r4, FMPLL_SYNCR
-
- DO_SETTING 0(r3)
- DO_SETTING 4(r3)
-
- /* Enable loss-of-clock and loss-of-lock IRQs */
- lwz r5, 0(r4)
- LWI r6, FMPLL_SYNCR_LOCIRQ | FMPLL_SYNCR_LOLIRQ
- or r5, r5, r6
-
- /* Disable loss-of-clock and loss-of-lock resets */
- LWI r6, ~FMPLL_SYNCR_LOCRE & ~FMPLL_SYNCR_LOLRE
- and r5, r5, r6
- stw r5, 0(r4)
-#endif /* !FMPLL_HAS_ENHANCED_FMPLL */
-
- /* Restore link register and return */
- mtlr r9
- blr
-
-fmpll_wait_for_lock:
- LWI r6, FMPLL_TIMEOUT
- mtctr r6
-
- LWI r7, FMPLL_SYNSR_LOCK
-
- LA r6, FMPLL_SYNSR
-
-fmpll_not_locked:
- bdnz fmpll_continue
-
- b mpc55xx_system_reset
-fmpll_continue:
- lwz r5, 0(r6)
- and. r5, r5, r7
- beq fmpll_not_locked
-
- blr
-
- .section ".text", "aw"
-
-/**
- * @fn int mpc55xx_get_system_clock()
- * @brief Returns the system clock.
- */
-GLOBAL_FUNCTION mpc55xx_get_system_clock
-#if FMPLL_HAS_ENHANCED_FMPLL
- LA r4, FMPLL_ESYNCR1
- lwz r3, 0(r4)
- /* EPREDIV */
- rlwinm r5, r3,16, 28, 31
-
- /* MFD */
- rlwinm r6, r3,0, 24, 31
-
- LA r4, FMPLL_ESYNCR2
- lwz r3, 0(r4)
- /* ERFD */
- rlwinm r7, r3,0, 26, 31
-
- LWI r8, MPC55XX_FMPLL_REF_CLOCK
- addi r5, r5, 1
- addi r6, r6,16
- addi r7, r7, 1
- divw r3, r8, r5 /* REF_CLOCK/PREDIV */
- mullw r3, r6, r3 /* REF_CLOCK/PREDIV*MFD */
- divw r3, r3, r7 /* REF_CLOCK/PREDIV*MFD/RFD */
-#else /* !FMPLL_HAS_ENHANCED_FMPLL */
- LA r4, FMPLL_SYNCR
- lwz r3, 0(r4)
-
- /* PREDIV */
- rlwinm r5, r3, 4, 29, 31
-
- /* MFD */
- rlwinm r6, r3, 9, 27, 31
-
- /* RFD */
- rlwinm r7, r3, 13, 29, 31
- /* Calculate system clock (Table 11-10 [MPC5567 Microcontroller Reference Manual]) */
- LWI r8, MPC55XX_FMPLL_REF_CLOCK
- addi r5, r5, 1
- addi r6, r6, 4
- mullw r6, r6, r8
- sraw r6, r6, r7
- divw r3, r6, r5
-#endif /* !FMPLL_HAS_ENHANCED_FMPLL */
-
- blr
-
-/**
- * @fn void mpc55xx_system_reset()
- * @brief Software system reset.
- */
-GLOBAL_FUNCTION mpc55xx_system_reset
- LA r8, SIU_SRCR
- LWI r9, SIU_SRCR_SSR
- stw r9, 0(r8)
-twiddle:
- b twiddle