summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/mpc55xxevb/startup
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-07-21 08:38:04 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-07-21 08:38:04 +0000
commitd374492cc69fa8bd041852d868ae379b79c59ba4 (patch)
tree14fa506e5c9564844d5fa0436ae4d2d456a74dda /c/src/lib/libbsp/powerpc/mpc55xxevb/startup
parentUpdate to binutils-2.19.51-20090721. (diff)
downloadrtems-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.c82
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/sd-card-init.c63
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;
}