diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-03-23 16:04:18 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-03-26 10:40:48 +0200 |
commit | a12dcff877bfe4ee8346b35947efab0aae7806e2 (patch) | |
tree | 1b8d86ad9a59c39ee587fa803746a70d202f084a /c/src/lib/libcpu/powerpc/mpc8260/cpm | |
parent | bsps/powerpc: Move libcpu content to bsps (diff) | |
download | rtems-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.c | 198 | ||||
-rw-r--r-- | c/src/lib/libcpu/powerpc/mpc8260/cpm/cp.c | 34 | ||||
-rw-r--r-- | c/src/lib/libcpu/powerpc/mpc8260/cpm/dpram.c | 93 |
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; -} |