|
@@ -1,969 +0,0 @@
|
|
|
-Remove duplicated files to stop the linker from complaining about duplicate
|
|
|
-symbols
|
|
|
-
|
|
|
-Signed-off-by: Alexandre Belloni <abelloni@adeneo-embedded.com>
|
|
|
----
|
|
|
---- a/csps/lpc32xx/bsps/fdi3250/startup/examples/s1l/sysapi_timer.c 2011-10-05 19:10:37.000000000 +0200
|
|
|
-+++ /dev/null 2012-01-01 16:39:47.918907000 +0100
|
|
|
-@@ -1,212 +0,0 @@
|
|
|
--/***********************************************************************
|
|
|
-- * $Id:: sysapi_timer.c 3394 2010-05-06 17:56:27Z usb10132 $
|
|
|
-- *
|
|
|
-- * Project: Time support functions
|
|
|
-- *
|
|
|
-- * Description:
|
|
|
-- * Implements the following functions required for the S1L API
|
|
|
-- * time_init
|
|
|
-- * time_reset
|
|
|
-- * time_start
|
|
|
-- * time_stop
|
|
|
-- * time_get
|
|
|
-- * time_get_rate
|
|
|
-- *
|
|
|
-- ***********************************************************************
|
|
|
-- * Software that is described herein is for illustrative purposes only
|
|
|
-- * which provides customers with programming information regarding the
|
|
|
-- * products. This software is supplied "AS IS" without any warranties.
|
|
|
-- * NXP Semiconductors assumes no responsibility or liability for the
|
|
|
-- * use of the software, conveys no license or title under any patent,
|
|
|
-- * copyright, or mask work right to the product. NXP Semiconductors
|
|
|
-- * reserves the right to make changes in the software without
|
|
|
-- * notification. NXP Semiconductors also make no representation or
|
|
|
-- * warranty that such application will be suitable for the specified
|
|
|
-- * use without further testing or modification.
|
|
|
-- **********************************************************************/
|
|
|
--
|
|
|
--#include "s1l_sys_inf.h"
|
|
|
--#include "lpc32xx_intc_driver.h"
|
|
|
--#include "lpc32xx_timer_driver.h"
|
|
|
--
|
|
|
--static UNS_64 base_rate;
|
|
|
--static INT_32 tdev = 0;
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: time_init
|
|
|
-- *
|
|
|
-- * Purpose: Initializes time system
|
|
|
-- *
|
|
|
-- * Processing: Initializes the system timer.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: 0 if the init failed, otherwise non-zero
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--INT_32 time_init(void)
|
|
|
--{
|
|
|
-- TMR_PSCALE_SETUP_T pscale;
|
|
|
--
|
|
|
-- /* Open timer driver */
|
|
|
-- if (tdev == 0)
|
|
|
-- {
|
|
|
-- tdev = timer_open((void *) TIMER_CNTR0, 0);
|
|
|
-- if (tdev != 0)
|
|
|
-- {
|
|
|
-- /* Use a prescale count to 100000 */
|
|
|
-- pscale.ps_tick_val = 100000;
|
|
|
-- pscale.ps_us_val = 0; /* Not needed when ps_tick_val != 0 */
|
|
|
-- timer_ioctl(tdev, TMR_SETUP_PSCALE, (INT_32) &pscale);
|
|
|
--
|
|
|
-- /* Get timer clock rate */
|
|
|
-- base_rate = (UNS_64) timer_ioctl(tdev, TMR_GET_STATUS,
|
|
|
-- TMR_GET_CLOCK);
|
|
|
-- }
|
|
|
-- }
|
|
|
--
|
|
|
-- return tdev;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: time_reset
|
|
|
-- *
|
|
|
-- * Purpose: Resets system timer
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: Nothing
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--void time_reset(void)
|
|
|
--{
|
|
|
-- if (tdev != 0)
|
|
|
-- {
|
|
|
-- timer_ioctl(tdev, TMR_RESET, 1);
|
|
|
-- }
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: time_start
|
|
|
-- *
|
|
|
-- * Purpose: Starts system timer
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: Nothing
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--void time_start(void)
|
|
|
--{
|
|
|
-- if (tdev != 0)
|
|
|
-- {
|
|
|
-- timer_ioctl(tdev, TMR_ENABLE, 1);
|
|
|
-- }
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: time_stop
|
|
|
-- *
|
|
|
-- * Purpose: Stops system timer
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: Nothing
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--void time_stop(void)
|
|
|
--{
|
|
|
-- if (tdev != 0)
|
|
|
-- {
|
|
|
-- timer_ioctl(tdev, TMR_ENABLE, 0);
|
|
|
-- }
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: time_get
|
|
|
-- *
|
|
|
-- * Purpose: Returns current system time value
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: The number of ticks of the timer counter
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--UNS_64 time_get(void)
|
|
|
--{
|
|
|
-- TMR_COUNTS_T tcounts;
|
|
|
-- UNS_64 ticks = 0;
|
|
|
--
|
|
|
-- if (tdev != 0)
|
|
|
-- {
|
|
|
-- timer_ioctl(tdev, TMR_GET_COUNTS, (INT_32) &tcounts);
|
|
|
--
|
|
|
-- /* Compute number of timer ticks */
|
|
|
-- ticks = (UNS_64) tcounts.count_val * 100000;
|
|
|
-- ticks = ticks + (UNS_64) tcounts.ps_count_val;
|
|
|
-- }
|
|
|
--
|
|
|
-- return ticks;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: time_get_rate
|
|
|
-- *
|
|
|
-- * Purpose:
|
|
|
-- * Returns base tick rate (ticks per second) of the time counter
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: The timer tick rate (in ticks per second)
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--UNS_64 time_get_rate(void)
|
|
|
--{
|
|
|
-- return base_rate;
|
|
|
--}
|
|
|
--
|
|
|
---- a/csps/lpc32xx/bsps/fdi3250/startup/examples/s1l/sys_mmu_cmd_group.c 2011-10-05 19:10:37.000000000 +0200
|
|
|
-+++ /dev/null 2012-01-01 16:39:47.918907000 +0100
|
|
|
-@@ -1,746 +0,0 @@
|
|
|
--/***********************************************************************
|
|
|
-- * $Id:: sys_mmu_cmd_group.c 3430 2010-05-07 17:39:08Z usb10132 $
|
|
|
-- *
|
|
|
-- * Project: Command processor for peek, poke, dump, and fill
|
|
|
-- *
|
|
|
-- * Description:
|
|
|
-- * Processes commands from the command prompt
|
|
|
-- *
|
|
|
-- ***********************************************************************
|
|
|
-- * Software that is described herein is for illustrative purposes only
|
|
|
-- * which provides customers with programming information regarding the
|
|
|
-- * products. This software is supplied "AS IS" without any warranties.
|
|
|
-- * NXP Semiconductors assumes no responsibility or liability for the
|
|
|
-- * use of the software, conveys no license or title under any patent,
|
|
|
-- * copyright, or mask work right to the product. NXP Semiconductors
|
|
|
-- * reserves the right to make changes in the software without
|
|
|
-- * notification. NXP Semiconductors also make no representation or
|
|
|
-- * warranty that such application will be suitable for the specified
|
|
|
-- * use without further testing or modification.
|
|
|
-- **********************************************************************/
|
|
|
--
|
|
|
--#include "lpc_arm922t_cp15_driver.h"
|
|
|
--#include "lpc_string.h"
|
|
|
--#include "startup.h"
|
|
|
--#include "s1l_cmds.h"
|
|
|
--#include "s1l_sys_inf.h"
|
|
|
--
|
|
|
--/* dcache command */
|
|
|
--BOOL_32 cmd_dcache(void);
|
|
|
--static UNS_32 cmd_dcache_plist[] =
|
|
|
--{
|
|
|
-- (PARSE_TYPE_STR), /* The "dcache" command */
|
|
|
-- (PARSE_TYPE_DEC | PARSE_TYPE_END)
|
|
|
--};
|
|
|
--static CMD_ROUTE_T core_dcache_cmd =
|
|
|
--{
|
|
|
-- (UNS_8 *) "dcache",
|
|
|
-- cmd_dcache,
|
|
|
-- (UNS_8 *) "Enables, disables, or flushes data cache",
|
|
|
-- (UNS_8 *) "dcache [0(disable), 1(enable), 2(flush)]",
|
|
|
-- cmd_dcache_plist,
|
|
|
-- NULL
|
|
|
--};
|
|
|
--
|
|
|
--/* icache command */
|
|
|
--BOOL_32 cmd_icache(void);
|
|
|
--static UNS_32 cmd_icache_plist[] =
|
|
|
--{
|
|
|
-- (PARSE_TYPE_STR), /* The "icache" command */
|
|
|
-- (PARSE_TYPE_DEC | PARSE_TYPE_END)
|
|
|
--};
|
|
|
--static CMD_ROUTE_T core_icache_cmd =
|
|
|
--{
|
|
|
-- (UNS_8 *) "icache",
|
|
|
-- cmd_icache,
|
|
|
-- (UNS_8 *) "Enables or disables instruction cache",
|
|
|
-- (UNS_8 *) "icache [0(disable), 1(enable)]",
|
|
|
-- cmd_icache_plist,
|
|
|
-- NULL
|
|
|
--};
|
|
|
--
|
|
|
--/* inval command */
|
|
|
--BOOL_32 cmd_inval(void);
|
|
|
--static UNS_32 cmd_inval_plist[] =
|
|
|
--{
|
|
|
-- (PARSE_TYPE_STR | PARSE_TYPE_END) /* The "inval" command */
|
|
|
--};
|
|
|
--static CMD_ROUTE_T core_inval_cmd =
|
|
|
--{
|
|
|
-- (UNS_8 *) "inval",
|
|
|
-- cmd_inval,
|
|
|
-- (UNS_8 *) "Flushes data cache and invalidates instruction cache",
|
|
|
-- (UNS_8 *) "inval",
|
|
|
-- cmd_inval_plist,
|
|
|
-- NULL
|
|
|
--};
|
|
|
--
|
|
|
--/* mmuenab command */
|
|
|
--BOOL_32 cmd_mmuenab(void);
|
|
|
--static UNS_32 cmd_mmuenab_plist[] =
|
|
|
--{
|
|
|
-- (PARSE_TYPE_STR), /* The "mmuenab" command */
|
|
|
-- (PARSE_TYPE_DEC | PARSE_TYPE_END)
|
|
|
--};
|
|
|
--static CMD_ROUTE_T core_mmuenab_cmd =
|
|
|
--{
|
|
|
-- (UNS_8 *) "mmuenab",
|
|
|
-- cmd_mmuenab,
|
|
|
-- (UNS_8 *) "Enables or disables the MMU",
|
|
|
-- (UNS_8 *) "mmuenab [0(disable), 1(enable)]",
|
|
|
-- cmd_mmuenab_plist,
|
|
|
-- NULL
|
|
|
--};
|
|
|
--
|
|
|
--/* map command */
|
|
|
--BOOL_32 cmd_map(void);
|
|
|
--static UNS_32 cmd_map_plist[] =
|
|
|
--{
|
|
|
-- (PARSE_TYPE_STR), /* The "map" command */
|
|
|
-- (PARSE_TYPE_HEX),
|
|
|
-- (PARSE_TYPE_HEX),
|
|
|
-- (PARSE_TYPE_DEC),
|
|
|
-- (PARSE_TYPE_DEC | PARSE_TYPE_END),
|
|
|
--};
|
|
|
--static CMD_ROUTE_T core_map_cmd =
|
|
|
--{
|
|
|
-- (UNS_8 *) "map",
|
|
|
-- cmd_map,
|
|
|
-- (UNS_8 *) "Maps a range of physical address sections to virtual addresses",
|
|
|
-- (UNS_8 *) "map [virt hex addr][phy hex addr][sections][0(uncached), 1(cached), 2(unmap)]",
|
|
|
-- cmd_map_plist,
|
|
|
-- NULL
|
|
|
--};
|
|
|
--
|
|
|
--/* mmuinfo command */
|
|
|
--static BOOL_32 cmd_mmuinfo(void);
|
|
|
--static UNS_32 cmd_mmuinfo_plist[] =
|
|
|
--{
|
|
|
-- (PARSE_TYPE_STR | PARSE_TYPE_END) /* The "mmuinfo" command */
|
|
|
--};
|
|
|
--static CMD_ROUTE_T core_mmuinfo_cmd =
|
|
|
--{
|
|
|
-- (UNS_8 *) "mmuinfo",
|
|
|
-- cmd_mmuinfo,
|
|
|
-- (UNS_8 *) "Dumps page table and MMU info",
|
|
|
-- (UNS_8 *) "mmuinfo",
|
|
|
-- cmd_mmuinfo_plist,
|
|
|
-- NULL
|
|
|
--};
|
|
|
--
|
|
|
--/* MMU group */
|
|
|
--static GROUP_LIST_T mmu_group =
|
|
|
--{
|
|
|
-- (UNS_8 *) "mmu", /* mmu group */
|
|
|
-- (UNS_8 *) "MMU command group",
|
|
|
-- NULL,
|
|
|
-- NULL
|
|
|
--};
|
|
|
--
|
|
|
--static UNS_8 enabled_msg [] =" enabled";
|
|
|
--static UNS_8 disabled_msg [] =" disabled";
|
|
|
--static UNS_8 dcache_msg[] = "Data cache";
|
|
|
--static UNS_8 icache_msg[] = "Instruction cache";
|
|
|
--static UNS_8 pagetab_msg[] = "Page table at address: ";
|
|
|
--static UNS_8 slist_msg[] = "Type Virt Phy fl Size";
|
|
|
--static UNS_8 mmu_msg [] ="MMU";
|
|
|
--static UNS_8 cpage_msg[] = "Coarse page:";
|
|
|
--static UNS_8 fpage_msg[] = "Fine page :";
|
|
|
--static UNS_8 sect_msg[] = "Section :";
|
|
|
--static UNS_8 mbytes_msg[] = "M";
|
|
|
--static UNS_8 map1_err_msg[] =
|
|
|
-- "Error : section addresses must be aligned on a 32-bit boundary";
|
|
|
--static UNS_8 map2_err_msg[] =
|
|
|
-- "Error : Number of sections exceeds address range of device";
|
|
|
--static UNS_8 phya_msg[] = "Virtual address ";
|
|
|
--static UNS_8 mapped_msg[] = " mapped to physical address ";
|
|
|
--static UNS_8 unmapped_msg[] = " unmapped from physical address ";
|
|
|
--static UNS_8 cached_msg[] = " (cached)";
|
|
|
--static UNS_8 inval_msg[] = " invalidated";
|
|
|
--static UNS_8 caches_msg [] ="Caches";
|
|
|
--static UNS_8 flushed_msg[] = " flushed";
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: show_section
|
|
|
-- *
|
|
|
-- * Purpose: Display section information
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters:
|
|
|
-- * mmu_reg : MMU settings for this section
|
|
|
-- * virt_addr : Starting virtual address for this section
|
|
|
-- * segs : Number of 1M segments for this section
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: Nothing
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--static void show_section(UNS_32 mmu_reg,
|
|
|
-- UNS_32 virt_addr,
|
|
|
-- UNS_32 segs)
|
|
|
--{
|
|
|
-- UNS_8 straddr [16];
|
|
|
-- UNS_32 mmu_phy;
|
|
|
--
|
|
|
-- if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) !=
|
|
|
-- ARM922T_L1D_TYPE_FAULT)
|
|
|
-- {
|
|
|
-- if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) ==
|
|
|
-- ARM922T_L1D_TYPE_CPAGE)
|
|
|
-- {
|
|
|
-- term_dat_out(cpage_msg);
|
|
|
-- }
|
|
|
-- else if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) ==
|
|
|
-- ARM922T_L1D_TYPE_FPAGE)
|
|
|
-- {
|
|
|
-- term_dat_out(fpage_msg);
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out(sect_msg);
|
|
|
-- }
|
|
|
--
|
|
|
-- /* Compute virtual address */
|
|
|
-- str_makehex(straddr, virt_addr, 8);
|
|
|
-- term_dat_out(straddr);
|
|
|
-- term_dat_out((UNS_8 *) " ");
|
|
|
--
|
|
|
-- /* Compute mapped physical address */
|
|
|
-- if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) ==
|
|
|
-- ARM922T_L1D_TYPE_SECTION)
|
|
|
-- {
|
|
|
-- mmu_phy = mmu_reg & 0xFFF00000;
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- /* Don't compute addresses for non-sections */
|
|
|
-- mmu_phy = 0;
|
|
|
-- }
|
|
|
-- str_makehex(straddr, mmu_phy, 8);
|
|
|
-- term_dat_out(straddr);
|
|
|
-- term_dat_out((UNS_8 *) " ");
|
|
|
--
|
|
|
-- /* MMU flags */
|
|
|
-- if ((mmu_reg & ARM922T_L1D_BUFFERABLE) != 0)
|
|
|
-- {
|
|
|
-- term_dat_out((UNS_8 *) "b");
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out((UNS_8 *) " ");
|
|
|
-- }
|
|
|
-- if ((mmu_reg & ARM922T_L1D_CACHEABLE) != 0)
|
|
|
-- {
|
|
|
-- term_dat_out((UNS_8 *) "c");
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out((UNS_8 *) " ");
|
|
|
-- }
|
|
|
-- term_dat_out((UNS_8 *) " ");
|
|
|
--
|
|
|
-- /* Displays used megabytes */
|
|
|
-- str_makedec(straddr, segs);
|
|
|
-- term_dat_out(straddr);
|
|
|
-- term_dat_out_crlf(mbytes_msg);
|
|
|
-- }
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: mmu_dumpinfo
|
|
|
-- *
|
|
|
-- * Purpose: Display MMU info
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * Display the MMU information, including enable status, cache
|
|
|
-- * status, and page table.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--static BOOL_32 mmu_dumpinfo(void)
|
|
|
--{
|
|
|
-- UNS_32 segsz, last_mmu_reg, mmu_vrt, mmu_reg, mmu_vrtsav = 0, *pt;
|
|
|
-- UNS_32 mlast_mmu_reg, mmmu_reg;
|
|
|
-- int idx;
|
|
|
-- UNS_8 hexaddr [16];
|
|
|
--
|
|
|
-- term_dat_out(mmu_msg);
|
|
|
-- if (cp15_mmu_enabled() == FALSE)
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(disabled_msg);
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(enabled_msg);
|
|
|
--
|
|
|
-- /* Get MMU control register word */
|
|
|
-- mmu_reg = cp15_get_mmu_control_reg();
|
|
|
--
|
|
|
-- /* Instruction cache status */
|
|
|
-- term_dat_out(icache_msg);
|
|
|
-- if ((mmu_reg & ARM922T_MMU_CONTROL_I) == 0)
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(disabled_msg);
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(enabled_msg);
|
|
|
-- }
|
|
|
--
|
|
|
-- /* Data cache status */
|
|
|
-- term_dat_out(dcache_msg);
|
|
|
-- if ((mmu_reg & ARM922T_MMU_CONTROL_C) == 0)
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(disabled_msg);
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(enabled_msg);
|
|
|
-- }
|
|
|
--
|
|
|
-- term_dat_out(pagetab_msg);
|
|
|
-- mmu_reg = (UNS_32) cp15_get_ttb();
|
|
|
-- str_makehex(hexaddr, mmu_reg, 8);
|
|
|
-- term_dat_out_crlf(hexaddr);
|
|
|
-- term_dat_out_crlf(slist_msg);
|
|
|
--
|
|
|
-- /* Process MMU table - assume that the physical and
|
|
|
-- virtual locations of table are the same */
|
|
|
-- pt = (UNS_32 *) mmu_reg;
|
|
|
-- mmu_vrt = 0x0;
|
|
|
-- segsz = 0xFFFFFFFF;
|
|
|
-- last_mmu_reg = mlast_mmu_reg = 0xFFFFFFFF;
|
|
|
-- for (idx = 0; idx < 4096; idx++)
|
|
|
-- {
|
|
|
-- mmu_reg = *pt;
|
|
|
-- mmmu_reg = (mmu_reg & (ARM922T_L1D_TYPE_PG_SN_MASK |
|
|
|
-- ARM922T_L1D_BUFFERABLE | ARM922T_L1D_CACHEABLE));
|
|
|
-- segsz = segsz + 1;
|
|
|
--
|
|
|
-- if ((last_mmu_reg != 0xFFFFFFFF) &&
|
|
|
-- (mlast_mmu_reg != mmmu_reg))
|
|
|
-- {
|
|
|
-- show_section(last_mmu_reg, mmu_vrtsav, segsz);
|
|
|
-- segsz = 0;
|
|
|
-- }
|
|
|
--
|
|
|
-- if (mlast_mmu_reg != mmmu_reg)
|
|
|
-- {
|
|
|
-- mmu_vrtsav = mmu_vrt;
|
|
|
-- last_mmu_reg = mmu_reg;
|
|
|
-- mlast_mmu_reg = mmmu_reg;
|
|
|
-- }
|
|
|
--
|
|
|
-- pt++;
|
|
|
-- mmu_vrt += 0x00100000;
|
|
|
-- }
|
|
|
-- }
|
|
|
--
|
|
|
-- return TRUE;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: mmu_dumpmap
|
|
|
-- *
|
|
|
-- * Purpose: Map a virtual address range to a physical range
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * From the input addresses and number of sections, generate the
|
|
|
-- * appropriate entries in the page table.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--static BOOL_32 mmu_dumpmap(UNS_32 vrt,
|
|
|
-- UNS_32 phy,
|
|
|
-- UNS_32 sections,
|
|
|
-- UNS_32 cache)
|
|
|
--{
|
|
|
-- BOOL_32 processed = FALSE;
|
|
|
-- UNS_32 mmu_phy, mmu_vrt, tmp1 = 0, tmp2, *pt;
|
|
|
-- UNS_8 hexaddr [16];
|
|
|
--
|
|
|
-- /* Verify address boundaries are sectional */
|
|
|
-- mmu_vrt = vrt & ~ARM922T_L2D_SN_BASE_MASK;
|
|
|
-- mmu_phy = phy & ~ARM922T_L2D_SN_BASE_MASK;
|
|
|
-- if ((mmu_vrt != 0) || (mmu_phy != 0))
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(map1_err_msg);
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- /* Verify that address range and section count will not
|
|
|
-- exceed address range of device */
|
|
|
-- tmp1 = vrt >> 20;
|
|
|
-- tmp1 = (tmp1 + sections) - 1;
|
|
|
-- tmp2 = phy >> 20;
|
|
|
-- tmp2 = (tmp2 + sections) - 1;
|
|
|
-- if ((tmp1 < 4096) && (tmp2 < 4096))
|
|
|
-- {
|
|
|
-- /* Good address range and good section count */
|
|
|
-- processed = TRUE;
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out_crlf(map2_err_msg);
|
|
|
-- }
|
|
|
-- }
|
|
|
--
|
|
|
-- /* Generate static part of MMU word */
|
|
|
-- if (cache == 0)
|
|
|
-- {
|
|
|
-- /* Section mapped with cache disabled */
|
|
|
-- tmp1 = ARM922T_L1D_TYPE_SECTION;
|
|
|
-- }
|
|
|
-- else if (cache == 1)
|
|
|
-- {
|
|
|
-- /* Section mapped with cache enabled */
|
|
|
-- tmp1 = (ARM922T_L1D_BUFFERABLE | ARM922T_L1D_CACHEABLE |
|
|
|
-- ARM922T_L1D_TYPE_SECTION);
|
|
|
-- }
|
|
|
-- else if (cache == 2)
|
|
|
-- {
|
|
|
-- /* Section unmapped */
|
|
|
-- tmp1 = ARM922T_L1D_TYPE_FAULT;
|
|
|
-- }
|
|
|
-- tmp1 |= ARM922T_L1D_AP_ALL;
|
|
|
--
|
|
|
-- /* Offset into page table for virtual address */
|
|
|
-- tmp2 = (vrt >> 20);
|
|
|
-- pt = cp15_get_ttb() + tmp2;
|
|
|
--
|
|
|
-- /* Loop until all sections are complete */
|
|
|
-- while ((sections > 0) && (processed == TRUE))
|
|
|
-- {
|
|
|
-- /* Add in physical address */
|
|
|
-- tmp2 = tmp1 | (phy & ARM922T_L2D_SN_BASE_MASK);
|
|
|
--
|
|
|
-- /* Save new section descriptor for virtual address */
|
|
|
-- *pt = tmp2;
|
|
|
--
|
|
|
-- /* Output message shown the map */
|
|
|
-- term_dat_out(phya_msg);
|
|
|
-- str_makehex(hexaddr, phy, 8);
|
|
|
-- term_dat_out(hexaddr);
|
|
|
-- if (cache == 2)
|
|
|
-- {
|
|
|
-- term_dat_out(unmapped_msg);
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- term_dat_out(mapped_msg);
|
|
|
-- }
|
|
|
-- str_makehex(hexaddr, vrt, 8);
|
|
|
-- term_dat_out(hexaddr);
|
|
|
-- if (cache == 1)
|
|
|
-- {
|
|
|
-- term_dat_out(cached_msg);
|
|
|
-- }
|
|
|
-- term_dat_out_crlf((UNS_8 *) "");
|
|
|
--
|
|
|
-- /* Next section and page table entry*/
|
|
|
-- phy += 0x00100000;
|
|
|
-- vrt += 0x00100000;
|
|
|
-- pt++;
|
|
|
-- sections--;
|
|
|
-- }
|
|
|
--
|
|
|
-- return processed;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: cmd_mmuinfo
|
|
|
-- *
|
|
|
-- * Purpose: Display MMU information
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--static BOOL_32 cmd_mmuinfo(void)
|
|
|
--{
|
|
|
-- mmu_dumpinfo();
|
|
|
--
|
|
|
-- return TRUE;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: cmd_map
|
|
|
-- *
|
|
|
-- * Purpose: Map a physical address region to a virtual region
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--BOOL_32 cmd_map(void)
|
|
|
--{
|
|
|
-- UNS_32 phy, virt, sects, ce = 0;
|
|
|
--
|
|
|
-- /* Get arguments */
|
|
|
-- virt = cmd_get_field_val(1);
|
|
|
-- phy = cmd_get_field_val(2);
|
|
|
-- sects = cmd_get_field_val(3);
|
|
|
-- ce = cmd_get_field_val(4);
|
|
|
--
|
|
|
-- if (ce <= 2)
|
|
|
-- {
|
|
|
-- mmu_dumpmap(virt, phy, sects, ce);
|
|
|
-- }
|
|
|
--
|
|
|
-- return TRUE;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: cmd_inval
|
|
|
-- *
|
|
|
-- * Purpose: MMU cache flush and invalidate
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--BOOL_32 cmd_inval(void)
|
|
|
--{
|
|
|
-- dcache_flush();
|
|
|
-- icache_inval();
|
|
|
-- term_dat_out(caches_msg);
|
|
|
-- term_dat_out(inval_msg);
|
|
|
--
|
|
|
-- return TRUE;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: cmd_dcache
|
|
|
-- *
|
|
|
-- * Purpose: MMU data cache enable and disable
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * If the value passed in the parser is 1, enable the data cache,
|
|
|
-- * otherwise disable the data cache.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--BOOL_32 cmd_dcache(void)
|
|
|
--{
|
|
|
-- UNS_32 cenable;
|
|
|
-- UNS_8 *ppar;
|
|
|
--
|
|
|
-- /* Get argument */
|
|
|
-- cenable = cmd_get_field_val(1);
|
|
|
--
|
|
|
-- switch (cenable)
|
|
|
-- {
|
|
|
-- case 0:
|
|
|
-- dcache_flush();
|
|
|
-- cp15_set_dcache(0);
|
|
|
-- ppar = disabled_msg;
|
|
|
-- break;
|
|
|
--
|
|
|
-- case 1:
|
|
|
-- cp15_invalidate_cache();
|
|
|
-- cp15_set_dcache(1);
|
|
|
-- ppar = enabled_msg;
|
|
|
-- break;
|
|
|
--
|
|
|
-- case 2:
|
|
|
-- default:
|
|
|
-- dcache_flush();
|
|
|
-- ppar = flushed_msg;
|
|
|
-- break;
|
|
|
-- }
|
|
|
--
|
|
|
-- term_dat_out(dcache_msg);
|
|
|
-- term_dat_out_crlf(ppar);
|
|
|
--
|
|
|
-- return TRUE;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: cmd_icache
|
|
|
-- *
|
|
|
-- * Purpose: MMU instruction cache enable and disable
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * If the value passed in the parser is 1, enable the instruction
|
|
|
-- * cache, otherwise disable the instruction cache.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--BOOL_32 cmd_icache(void)
|
|
|
--{
|
|
|
-- UNS_32 cenable;
|
|
|
-- UNS_8 *ppar;
|
|
|
--
|
|
|
-- /* Get argument */
|
|
|
-- cenable = cmd_get_field_val(1);
|
|
|
--
|
|
|
-- if (cenable == 1)
|
|
|
-- {
|
|
|
-- dcache_flush();
|
|
|
-- cp15_invalidate_cache();
|
|
|
-- cp15_set_icache(1);
|
|
|
-- ppar = enabled_msg;
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- cp15_set_icache(0);
|
|
|
-- ppar = disabled_msg;
|
|
|
-- }
|
|
|
--
|
|
|
-- term_dat_out(icache_msg);
|
|
|
-- term_dat_out_crlf(ppar);
|
|
|
--
|
|
|
-- return TRUE;
|
|
|
--}
|
|
|
--
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: cmd_mmuenab
|
|
|
-- *
|
|
|
-- * Purpose: Enable or disable MMU
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: TRUE if the command was processed, otherwise FALSE
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--BOOL_32 cmd_mmuenab(void)
|
|
|
--{
|
|
|
-- UNS_8 *ppar;
|
|
|
-- UNS_32 cenable;
|
|
|
--
|
|
|
-- term_dat_out_crlf((UNS_8 *) "Warning: Changing MMU status on "
|
|
|
-- " cached and buffered code can cause system crashes.");
|
|
|
--
|
|
|
-- /* Get argument */
|
|
|
-- cenable = cmd_get_field_val(1);
|
|
|
--
|
|
|
-- if (cenable == 1)
|
|
|
-- {
|
|
|
-- if ((cp15_get_mmu_control_reg() & ARM922T_MMU_CONTROL_C) != 0)
|
|
|
-- {
|
|
|
-- cp15_invalidate_cache();
|
|
|
-- }
|
|
|
--
|
|
|
-- cp15_set_mmu(1);
|
|
|
-- ppar = enabled_msg;
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- cp15_dcache_flush();
|
|
|
-- cp15_write_buffer_flush();
|
|
|
-- cp15_invalidate_cache();
|
|
|
-- cp15_set_mmu(0);
|
|
|
-- ppar = disabled_msg;
|
|
|
-- }
|
|
|
--
|
|
|
-- term_dat_out(mmu_msg);
|
|
|
-- term_dat_out_crlf(ppar);
|
|
|
--
|
|
|
-- return TRUE;
|
|
|
--}
|
|
|
--
|
|
|
--/***********************************************************************
|
|
|
-- *
|
|
|
-- * Function: mmu_cmd_group_init
|
|
|
-- *
|
|
|
-- * Purpose: Initialize MMU command group
|
|
|
-- *
|
|
|
-- * Processing:
|
|
|
-- * See function.
|
|
|
-- *
|
|
|
-- * Parameters: None
|
|
|
-- *
|
|
|
-- * Outputs: None
|
|
|
-- *
|
|
|
-- * Returns: Nothin
|
|
|
-- *
|
|
|
-- * Notes: None
|
|
|
-- *
|
|
|
-- **********************************************************************/
|
|
|
--void mmu_cmd_group_init(void)
|
|
|
--{
|
|
|
-- /* Add MMU group */
|
|
|
-- cmd_add_group(&mmu_group);
|
|
|
--
|
|
|
-- /* Add commands to the MMU group */
|
|
|
-- cmd_add_new_command(&mmu_group, &core_dcache_cmd);
|
|
|
-- cmd_add_new_command(&mmu_group, &core_icache_cmd);
|
|
|
-- cmd_add_new_command(&mmu_group, &core_inval_cmd);
|
|
|
-- cmd_add_new_command(&mmu_group, &core_mmuenab_cmd);
|
|
|
-- cmd_add_new_command(&mmu_group, &core_map_cmd);
|
|
|
-- cmd_add_new_command(&mmu_group, &core_mmuinfo_cmd);
|
|
|
--}
|