diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-07-21 08:38:04 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-07-21 08:38:04 +0000 |
commit | d374492cc69fa8bd041852d868ae379b79c59ba4 (patch) | |
tree | 14fa506e5c9564844d5fa0436ae4d2d456a74dda /c/src/lib/libbsp/powerpc/mpc55xxevb/startup | |
parent | Update to binutils-2.19.51-20090721. (diff) | |
download | rtems-d374492cc69fa8bd041852d868ae379b79c59ba4.tar.bz2 |
Update for MPC55XX changes
Diffstat (limited to 'c/src/lib/libbsp/powerpc/mpc55xxevb/startup')
-rw-r--r-- | c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c | 82 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/mpc55xxevb/startup/sd-card-init.c | 63 |
2 files changed, 86 insertions, 59 deletions
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c index 690a72a092..a4cb7b4483 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c @@ -92,28 +92,11 @@ void bsp_predriver_hook() static void mpc55xx_ebi_init() { - struct EBI_CS_tag cs = { BR : MPC55XX_ZERO_FLAGS, OR : MPC55XX_ZERO_FLAGS }; + struct EBI_CS_tag cs = { .BR = MPC55XX_ZERO_FLAGS, .OR = MPC55XX_ZERO_FLAGS }; union SIU_PCR_tag pcr = MPC55XX_ZERO_FLAGS; + struct MMU_tag mmu = MMU_DEFAULT; int i = 0; - /* External SRAM (0 wait states, 512kB, 4 word burst) */ - cs.BR.B.BA = 0; - cs.BR.B.PS = 1; - cs.BR.B.BL = 1; - cs.BR.B.WEBS = 0; - cs.BR.B.TBDIP = 0; - cs.BR.B.BI = 1; /* TODO: Enable burst */ - cs.BR.B.V = 1; - - cs.OR.B.AM = 0x1fff0; - cs.OR.B.SCY = 0; - cs.OR.B.BSCY = 0; - - EBI.CS [0] = cs; - - /* !CS [0] */ - SIU.PCR [0].R = 0x443; - /* ADDR [8 : 31] */ for (i = 4; i < 4 + 24; ++i) { SIU.PCR [i].R = 0x440; @@ -140,6 +123,64 @@ static void mpc55xx_ebi_init() /* !TS */ SIU.PCR [69].R = 0x443; + + /* External SRAM (2 wait states, 512kB, 4 word burst) */ + + cs.BR.B.BA = 0; + cs.BR.B.PS = 1; + cs.BR.B.BL = 1; + cs.BR.B.WEBS = 0; + cs.BR.B.TBDIP = 0; + cs.BR.B.BI = 1; /* TODO: Enable burst */ + cs.BR.B.V = 1; + + cs.OR.B.AM = 0x1fff0; + cs.OR.B.SCY = 0; + cs.OR.B.BSCY = 0; + + EBI.CS [0] = cs; + + /* !CS [0] */ + SIU.PCR [0].R = 0x443; + + /* External Ethernet Controller (3 wait states, 64kB) */ + + mmu.MAS0.B.ESEL = 5; + mmu.MAS1.B.VALID = 1; + mmu.MAS1.B.IPROT = 1; + mmu.MAS1.B.TSIZ = 1; + mmu.MAS2.B.EPN = 0x3fff8; + mmu.MAS2.B.I = 1; + mmu.MAS2.B.G = 1; + mmu.MAS3.B.RPN = 0x3fff8; + mmu.MAS3.B.UW = 1; + mmu.MAS3.B.SW = 1; + mmu.MAS3.B.UR = 1; + mmu.MAS3.B.SR = 1; + + PPC_SET_SPECIAL_PURPOSE_REGISTER( FREESCALE_EIS_MAS0, mmu.MAS0.R); + PPC_SET_SPECIAL_PURPOSE_REGISTER( FREESCALE_EIS_MAS1, mmu.MAS1.R); + PPC_SET_SPECIAL_PURPOSE_REGISTER( FREESCALE_EIS_MAS2, mmu.MAS2.R); + PPC_SET_SPECIAL_PURPOSE_REGISTER( FREESCALE_EIS_MAS3, mmu.MAS3.R); + + asm volatile ("tlbwe"); + + cs.BR.B.BA = 0x7fff; + cs.BR.B.PS = 1; + cs.BR.B.BL = 0; + cs.BR.B.WEBS = 0; + cs.BR.B.TBDIP = 0; + cs.BR.B.BI = 1; + cs.BR.B.V = 1; + + cs.OR.B.AM = 0x1ffff; + cs.OR.B.SCY = 1; + cs.OR.B.BSCY = 0; + + EBI.CS [3] = cs; + + /* !CS [3] */ + SIU.PCR [3].R = 0x443; } /** @@ -198,7 +239,8 @@ void bsp_start(void) DEBUG_DONE(); } - RTEMS_DEBUG_PRINT( "BSP start done\n"); + /* Initialize eMIOS */ + mpc55xx_emios_initialize( 1); return; diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/sd-card-init.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/sd-card-init.c index 37308f420e..c18382a0cd 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/sd-card-init.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/sd-card-init.c @@ -18,20 +18,16 @@ * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. */ -#include <stdio.h> +#include <stdio.h> #include <mpc55xx/mpc55xx.h> #include <mpc55xx/regs.h> #include <mpc55xx/dspi.h> -#include <libchip/spi-sd-card.h> - -#define DEBUG +#include <bsp.h> #include <rtems/status-checks.h> -#include <bsp.h> - static rtems_status_code mpc55xx_dspi_init(void) { int rv = 0; @@ -88,17 +84,14 @@ static rtems_status_code mpc55xx_dspi_init(void) return RTEMS_SUCCESSFUL; } -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <fcntl.h> -#include <dirent.h> #include <stdio.h> #include <rtems/fsmount.h> #include <rtems/dosfs.h> -#include <rtems/ide_part_table.h> +#include <rtems/bdpart.h> #include <rtems/console.h> +#include <libchip/spi-sd-card.h> + #define MPC55XX_DEVICE "sd-card-a" #define MPC55XX_DEVICE_FILE "/dev/" MPC55XX_DEVICE #define MPC55XX_PARTITION "/dev/sd-card-a1" @@ -117,21 +110,10 @@ static fstab_t mpc55xx_fs_table [] = { { } }; -#define SD_CARD_NUMBER 1 - -sd_card_driver_entry sd_card_driver_table [SD_CARD_NUMBER] = { { -#if 0 - .driver = { - .ops = &sd_card_driver_ops, - .size = sizeof( sd_card_driver_entry) - }, - .table_index = 0, - .minor = 0, -#endif - .device_name = "sd-card-a", -#if 0 - .disk_device_name = "/dev/sd-card-a", -#endif +sd_card_driver_entry sd_card_driver_table [] = { + { + .device_name = "/dev/sd-card-a", + .bus = 0, .transfer_mode = SD_CARD_TRANSFER_MODE_DEFAULT, .command = SD_CARD_COMMAND_DEFAULT, /* response : whatever, */ @@ -140,13 +122,15 @@ sd_card_driver_entry sd_card_driver_table [SD_CARD_NUMBER] = { { .block_number = 0, .block_size = 0, .block_size_shift = 0, - .busy = 1, - .verbose = 1, - .schedule_if_busy = 0, + .busy = true, + .verbose = true, + .schedule_if_busy = false } }; -rtems_status_code mpc55xx_sd_card_init(void) +size_t sd_card_driver_table_size = sizeof( sd_card_driver_table) / sizeof( sd_card_driver_table [0]); + +rtems_status_code mpc55xx_sd_card_init( bool mount) { rtems_status_code sc = RTEMS_SUCCESSFUL; int rv = 0; @@ -157,17 +141,18 @@ rtems_status_code mpc55xx_sd_card_init(void) sc = mpc55xx_dspi_init(); RTEMS_CHECK_SC( rv, "Intitalize DSPI bus"); - rv = rtems_libi2c_register_drv( e->device_name, (rtems_libi2c_drv_t *) e, mpc55xx_dspi_bus_table [0].bus_number, 0); - RTEMS_CHECK_RV_SC( rv, "Register SD Card driver"); + e->bus = mpc55xx_dspi_bus_table [0].bus_number; - sc = rtems_ide_part_table_initialize( MPC55XX_DEVICE_FILE); - RTEMS_CHECK_SC( sc, "Initialize IDE partition table"); + sc = sd_card_register(); + RTEMS_CHECK_SC( sc, "Register SD Card"); - rv = mkdir( MPC55XX_MOUNT_POINT, S_IRWXU); - RTEMS_CHECK_RV_SC( rv, "Create mount point"); + if (mount) { + sc = rtems_bdpart_register_from_disk( MPC55XX_DEVICE_FILE); + RTEMS_CHECK_SC( sc, "Initialize IDE partition table"); - rv = rtems_fsmount( mpc55xx_fs_table, sizeof( mpc55xx_fs_table) / sizeof( mpc55xx_fs_table [0]), NULL); - RTEMS_CHECK_RV_SC( rv, "Mount file systems"); + rv = rtems_fsmount( mpc55xx_fs_table, sizeof( mpc55xx_fs_table) / sizeof( mpc55xx_fs_table [0]), NULL); + RTEMS_CHECK_RV_SC( rv, "Mount file systems"); + } return RTEMS_SUCCESSFUL; } |