summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/mpc8260/cpm
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-03-23 16:04:18 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-03-26 10:40:48 +0200
commita12dcff877bfe4ee8346b35947efab0aae7806e2 (patch)
tree1b8d86ad9a59c39ee587fa803746a70d202f084a /c/src/lib/libcpu/powerpc/mpc8260/cpm
parentbsps/powerpc: Move libcpu content to bsps (diff)
downloadrtems-a12dcff877bfe4ee8346b35947efab0aae7806e2.tar.bz2
bsp/mpc8260: Move libcpu content to bsps
This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'c/src/lib/libcpu/powerpc/mpc8260/cpm')
-rw-r--r--c/src/lib/libcpu/powerpc/mpc8260/cpm/brg.c198
-rw-r--r--c/src/lib/libcpu/powerpc/mpc8260/cpm/cp.c34
-rw-r--r--c/src/lib/libcpu/powerpc/mpc8260/cpm/dpram.c93
3 files changed, 0 insertions, 325 deletions
diff --git a/c/src/lib/libcpu/powerpc/mpc8260/cpm/brg.c b/c/src/lib/libcpu/powerpc/mpc8260/cpm/brg.c
deleted file mode 100644
index 741f131a8d..0000000000
--- a/c/src/lib/libcpu/powerpc/mpc8260/cpm/brg.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Baud rate generator management functions.
- *
- * This file contains routines for allocating baud rate generators
- * and clock sources to the SCCs and FCCs on the MPC8260. The
- * allocation is a little more complex on this processor because
- * there are restrictions on which brgs and clks can be assigned to
- * a particular port. Rather than coming up with a fixed assignment
- * these routines try to allocate resources sensibly.
- *
- * *** All attempts to allocate a BRG or CLK line should be made via
- * calls to these routines or they simply won't work.
- */
-
-/*
- * Author: Andy Dachs <a.dachs@sstl.co.uk>
- * Copyright Surrey Satellite Technology Limited (SSTL), 2001
- *
- * Derived in part from work by:
- *
- * Author: Jay Monkman (jmonkman@frasca.com)
- * Copyright (C) 1998 by Frasca International, Inc.
- * and
- * W. Eric Norum
- * Saskatchewan Accelerator Laboratory
- * University of Saskatchewan
- * Saskatoon, Saskatchewan, CANADA
- * eric@skatter.usask.ca
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h>
-#include <mpc8260.h>
-#include <mpc8260/cpm.h>
-#include <rtems/bspIo.h>
-
-#define NUM_BRGS 8
-#define NUM_CLKS 20
-
-/* Used to track the usage of the baud rate generators */
-/* (initialised to zeros) */
-static unsigned long brg_spd[NUM_BRGS];
-static unsigned int brg_use_count[NUM_BRGS];
-
-/* Used to track the usage of the clock inputs */
-/* (initialised to zeros) */
-static unsigned int clk_use_count[NUM_BRGS];
-
-/*
- * Compute baud-rate-generator configuration register value
- */
-int
-m8xx_get_brg_cd (int baud)
-{
- int divisor;
- int div16 = 0;
-
- divisor = ((bsp_serial_per_sec) + (baud / 2)) / baud;
- if (divisor > 4096) {
- div16 = 1;
- divisor = (divisor + 8) / 16;
- }
- return M8260_BRG_EN | M8260_BRG_EXTC_BRGCLK |
- ((divisor - 1) << 1) | div16;
-}
-
-/*
- * Allocates an existing brg if one is already programmed for the same
- * baud rate. Otherwise a new brg is assigned
- * AFD: on the mpc8260 only some combinations of SCC/SMC and BRG are allowed
- * so add a mask which specifies which of the BRGs we can choose from
- */
-int
-m8xx_get_brg(unsigned brgmask, int baud)
-{
- int i;
-
- /* first try to find a BRG that is already at the right speed */
- for ( i = 0; i < NUM_BRGS; i++ ) {
- if ( (1 << i) & brgmask ) /* is this brg allowed? */
- if ( brg_spd[i] == baud ) {
- break;
- }
- }
-
- if ( i == NUM_BRGS ) { /* I guess we didn't find one */
- for ( i = 0; i < NUM_BRGS; i++ ) {
- if (((1<<i) & brgmask) && (brg_use_count[i] == 0)) {
- break;
- }
- }
- }
- if (i != NUM_BRGS) {
- brg_use_count[i]++;
- brg_spd[i]=baud;
- switch (i) {
- case 0:
- m8260.brgc1 = M8260_BRG_RST;
- m8260.brgc1 = m8xx_get_brg_cd(baud);
- break;
- case 1:
- m8260.brgc2 = M8260_BRG_RST;
- m8260.brgc2 = m8xx_get_brg_cd(baud);
- break;
- case 2:
- m8260.brgc3 = M8260_BRG_RST;
- m8260.brgc3 = m8xx_get_brg_cd(baud);
- break;
- case 3:
- m8260.brgc4 = M8260_BRG_RST;
- m8260.brgc4 = m8xx_get_brg_cd(baud);
- break;
- case 4:
- m8260.brgc5 = M8260_BRG_RST;
- m8260.brgc5 = m8xx_get_brg_cd(baud);
- break;
- case 5:
- m8260.brgc6 = M8260_BRG_RST;
- m8260.brgc6 = m8xx_get_brg_cd(baud);
- break;
- case 6:
- m8260.brgc7 = M8260_BRG_RST;
- m8260.brgc7 = m8xx_get_brg_cd(baud);
- break;
- case 7:
- m8260.brgc8 = M8260_BRG_RST;
- m8260.brgc8 = m8xx_get_brg_cd(baud);
- break;
- }
- return i;
- }
-
- else {
- printk( "Could not assign a brg for %d\n", baud );
- return -1;
- }
-}
-
-
-/*
- * When the brg is no longer needed call this routine to free the
- * resource for re--use.
- */
-void
-m8xx_free_brg( int brg_num )
-{
- if ( (brg_num>=0) && (brg_num<NUM_BRGS) )
- if (brg_use_count[brg_num] > 0 )
- brg_use_count[brg_num]--;
-}
-
-#ifdef DEBUG_BRG
-static void m8xx_dump_brgs( void )
-{
- int i;
- for (i=0; i<NUM_BRGS; i++ )
- printk( "Brg[%d]: %d %d\n", i, brg_use_count[i], brg_spd[i] );
-}
-#endif
-
-/*
- * Reserve one of a range of clock inputs
- */
-int
-m8xx_get_clk( unsigned clkmask )
-{
- int i;
-
- for ( i = 0; i < NUM_CLKS; i++ ) {
- if (((1<<i) & clkmask) && (clk_use_count[i] == 0)) {
- break;
- }
- }
-
- if (i != NUM_CLKS) {
- clk_use_count[i]++;
- return i;
- } else {
- printk( "Could not assign clock in the range %X\n", clkmask );
- return -1;
- }
-}
-
-
-/*
- * When the clock is no longer needed call this routine to free the
- * resource for re--use.
- */
-void
-m8xx_free_clk( int clk_num )
-{
- if ( (clk_num>=0) && (clk_num<NUM_BRGS) )
- if (clk_use_count[clk_num] > 0 )
- clk_use_count[clk_num]--;
-}
diff --git a/c/src/lib/libcpu/powerpc/mpc8260/cpm/cp.c b/c/src/lib/libcpu/powerpc/mpc8260/cpm/cp.c
deleted file mode 100644
index b8adf9feaf..0000000000
--- a/c/src/lib/libcpu/powerpc/mpc8260/cpm/cp.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * cp.c
- *
- * MPC8xx CPM RISC Communication Processor routines.
- *
- * Based on code (alloc860.c in eth_comm port) by
- * Jay Monkman (jmonkman@frasca.com),
- * which, in turn, is based on code by
- * W. Eric Norum (eric@skatter.usask.ca).
- *
- * Modifications by Darlene Stewart (Darlene.Stewart@iit.nrc.ca):
- * Copyright (c) 1999, National Research Council of Canada
- */
-
-#include <rtems.h>
-#include <mpc8260.h>
-#include <mpc8260/cpm.h>
-
-/*
- * Send a command to the CPM RISC processer
- */
-
-void m8xx_cp_execute_cmd( uint32_t command )
-{
- uint16_t lvl;
-
- rtems_interrupt_disable(lvl);
- while (m8260.cpcr & M8260_CR_FLG) {
- continue;
- }
-
- m8260.cpcr = command | M8260_CR_FLG;
- rtems_interrupt_enable (lvl);
-}
diff --git a/c/src/lib/libcpu/powerpc/mpc8260/cpm/dpram.c b/c/src/lib/libcpu/powerpc/mpc8260/cpm/dpram.c
deleted file mode 100644
index 8b74a9759c..0000000000
--- a/c/src/lib/libcpu/powerpc/mpc8260/cpm/dpram.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * dpram.c
- *
- * MPC8260 dual-port RAM allocation routines
- *
- * Based on code in mpc8xx which is
- * Based on code (alloc860.c in eth_comm port) by
- * Jay Monkman (jmonkman@frasca.com),
- * which, in turn, is based on code by
- * W. Eric Norum (eric@skatter.usask.ca).
- *
- *
- * Modifications :
- * Copyright (c) 1999, National Research Council of Canada
- *
- * MPC8260 modifications Andy Dachs, <a.dachs@sstl.co.uk>
- * Surrey Satellite Technology Limited, 2001
- */
-
-#include <rtems.h>
-#include <rtems/error.h>
-
-#include <mpc8260.h>
-#include <mpc8260/cpm.h>
-
-/*
- * Allocation order:
- * - Dual-Port RAM section 0
- * - Dual-Port RAM section 1
- * - Dual-Port RAM section 2
- * - Dual-Port RAM section 3
- */
-static struct {
- uint8_t *base;
- size_t size;
- unsigned int used;
-} dpram_regions[] = {
-/* { (uint8_t *)&m8260.dpram0[0], sizeof m8260.dpram0, 0 },*/
- { (uint8_t *)&m8260.dpram1[0], sizeof m8260.dpram1, 0 },
-/* { (uint8_t *)&m8260.dpram2[0], sizeof m8260.dpram2, 0 },*/
- { (uint8_t *)&m8260.dpram3[0], sizeof m8260.dpram3, 0 }
-};
-
-#define NUM_DPRAM_REGIONS (sizeof(dpram_regions) / sizeof(dpram_regions[0]))
-
-void *
-m8xx_dpram_allocate( unsigned int byte_count )
-{
- unsigned int i;
- ISR_Level level;
- void *blockp = NULL;
-
- byte_count = (byte_count + 3) & ~0x3;
-
- /*
- * Running with interrupts disabled is usually considered bad
- * form, but this routine is probably being run as part of an
- * initialization sequence so the effect shouldn't be too severe.
- */
- _ISR_Local_disable (level);
-
- for ( i = 0; i < NUM_DPRAM_REGIONS; i++ ) {
- /*
- * Verify that the region is available for use.
- * This test is necessary because if extra microcode modules
- * are installed, some regions are locked and unavailable.
- * See MPC860 User's Manual Pages 19-9 to 19-11.
- */
- if (dpram_regions[i].used == 0) {
- volatile unsigned char *cp = dpram_regions[i].base;
- *cp = 0xAA;
- if (*cp != 0xAA)
- dpram_regions[i].used = dpram_regions[i].size;
- else {
- *cp = 0x55;
- if (*cp != 0x55)
- dpram_regions[i].used = dpram_regions[i].size;
- }
- *cp = 0x0;
- }
- if (dpram_regions[i].size - dpram_regions[i].used >= byte_count) {
- blockp = dpram_regions[i].base + dpram_regions[i].used;
- dpram_regions[i].used += byte_count;
- break;
- }
- }
-
- _ISR_Local_enable(level);
-
- if (blockp == NULL)
- rtems_panic("Can't allocate %d bytes of dual-port RAM.\n", byte_count);
- return blockp;
-}