avoid FireTOS hang on boot
This commit is contained in:
@@ -609,3 +609,4 @@ tos/pci_test/include/MCF5475_USB.h
|
|||||||
tos/pci_test/include/MCF5475_XLB.h
|
tos/pci_test/include/MCF5475_XLB.h
|
||||||
tos/pci_test/include/MCF5475.h
|
tos/pci_test/include/MCF5475.h
|
||||||
tos/pci_test/include/pci.h
|
tos/pci_test/include/pci.h
|
||||||
|
memory_map.txt
|
||||||
|
|||||||
8
Makefile
8
Makefile
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# can be either "Y" or "N" (without quotes). "Y" for using the m68k-elf-, "N" for using the m68k-atari-mint
|
# can be either "Y" or "N" (without quotes). "Y" for using the m68k-elf-, "N" for using the m68k-atari-mint
|
||||||
# toolchain
|
# toolchain
|
||||||
COMPILE_ELF=N
|
COMPILE_ELF=Y
|
||||||
|
|
||||||
ifeq (Y,$(COMPILE_ELF))
|
ifeq (Y,$(COMPILE_ELF))
|
||||||
TCPREFIX=m68k-elf-
|
TCPREFIX=m68k-elf-
|
||||||
@@ -51,7 +51,7 @@ CFLAGS_OPTIMIZED = -mcpu=5474 \
|
|||||||
-Wa,--register-prefix-optional
|
-Wa,--register-prefix-optional
|
||||||
LDFLAGS=
|
LDFLAGS=
|
||||||
|
|
||||||
TRGTDIRS= ./firebee ./m5484lite ./m54455
|
TRGTDIRS= ./firebee ./m5484lite
|
||||||
OBJDIRS=$(patsubst %, %/objs,$(TRGTDIRS))
|
OBJDIRS=$(patsubst %, %/objs,$(TRGTDIRS))
|
||||||
TOOLDIR=util
|
TOOLDIR=util
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ $(1)_MAPFILE=$(1)/$$(basename $$(FLASH_EXEC)).map
|
|||||||
$(1)/$$(FLASH_EXEC): $(1)/$(LIBBAS) $(LDCSRC)
|
$(1)/$$(FLASH_EXEC): $(1)/$(LIBBAS) $(LDCSRC)
|
||||||
$(CPP) $(INCLUDE) -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDCFILE)
|
$(CPP) $(INCLUDE) -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDCFILE)
|
||||||
#$(LD) --oformat $$(FORMAT) -Map $$($(1)_MAPFILE) --cref -T $(1)/$$(LDCFILE) $(LDLIBS) -o $$@
|
#$(LD) --oformat $$(FORMAT) -Map $$($(1)_MAPFILE) --cref -T $(1)/$$(LDCFILE) $(LDLIBS) -o $$@
|
||||||
$(CC) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDCFILE) $(LDLIBS) -o $$@
|
$(CC) $$(CFLAGS) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDCFILE) $(LDLIBS) -o $$@
|
||||||
ifeq ($(COMPILE_ELF),Y)
|
ifeq ($(COMPILE_ELF),Y)
|
||||||
$(OBJCOPY) -O srec $$@ $$(basename $$@).s19
|
$(OBJCOPY) -O srec $$@ $$(basename $$@).s19
|
||||||
else
|
else
|
||||||
@@ -278,7 +278,7 @@ $(1)_MAPFILE_RAM=$(1)/$$(basename $$(RAM_EXEC)).map
|
|||||||
$(1)/$$(RAM_EXEC): $(1)/$(LIBBAS) $(LDCSRC)
|
$(1)/$$(RAM_EXEC): $(1)/$(LIBBAS) $(LDCSRC)
|
||||||
$(CPP) $(INCLUDE) -DCOMPILE_RAM -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDRFILE)
|
$(CPP) $(INCLUDE) -DCOMPILE_RAM -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDRFILE)
|
||||||
#$(LD) $(LDFLAGS) --oformat $$(FORMAT) -Map $$($(1)_MAPFILE_RAM) --cref -T $(1)/$$(LDRFILE) $(LDLIBS) -o $$@
|
#$(LD) $(LDFLAGS) --oformat $$(FORMAT) -Map $$($(1)_MAPFILE_RAM) --cref -T $(1)/$$(LDRFILE) $(LDLIBS) -o $$@
|
||||||
$(CC) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDRFILE) $(LDLIBS) -o $$@
|
$(CC) $$(CFLAGS) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDRFILE) $(LDLIBS) -o $$@
|
||||||
ifeq ($(COMPILE_ELF),Y)
|
ifeq ($(COMPILE_ELF),Y)
|
||||||
$(OBJCOPY) -O srec $$@ $$(basename $$@).s19
|
$(OBJCOPY) -O srec $$@ $$(basename $$@).s19
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define MAJOR_VERSION 0
|
#define MAJOR_VERSION 0
|
||||||
#define MINOR_VERSION 87
|
#define MINOR_VERSION 88
|
||||||
|
|
||||||
|
|
||||||
#endif /* VERSION_H_ */
|
#endif /* VERSION_H_ */
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ define run
|
|||||||
continue
|
continue
|
||||||
end
|
end
|
||||||
|
|
||||||
tbtr
|
tr
|
||||||
ib
|
ib
|
||||||
add-symbol-file ../emutos/emutos2.img 0xe00000
|
#add-symbol-file ../emutos/emutos2.img 0xe00000
|
||||||
#load firebee/ram.elf
|
#load firebee/ram.elf
|
||||||
|
|||||||
8
memory_map.txt
Normal file
8
memory_map.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Firebee memory map
|
||||||
|
==================
|
||||||
|
|
||||||
|
Virt. Start Virt. End Phys. Start Phys. End
|
||||||
|
ST-RAM 0x00000000 0x00dfffff 0x60000000 0x60dfffff
|
||||||
|
TOS 0x00e00000 0x00efffff 0x00e00000 0x00efffff
|
||||||
|
ST I/O area 0x00f00000 0x01000000 0xfff00000 0xffffffff
|
||||||
|
TT-RAM 0x01000000 0x20ffffff 0x00000000 0x1fffffff
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
#include "interrupts.h"
|
#include "interrupts.h"
|
||||||
#include "wait.h"
|
#include "wait.h"
|
||||||
|
|
||||||
#define DEBUG_PCI
|
//#define DEBUG_PCI
|
||||||
#ifdef DEBUG_PCI
|
#ifdef DEBUG_PCI
|
||||||
#define dbg(format, arg...) do { xprintf("DEBUG: %s(): " format, __FUNCTION__, ##arg); } while (0)
|
#define dbg(format, arg...) do { xprintf("DEBUG: %s(): " format, __FUNCTION__, ##arg); } while (0)
|
||||||
#else
|
#else
|
||||||
@@ -1131,7 +1131,7 @@ void init_eport(void)
|
|||||||
|
|
||||||
MCF_EPORT_EPDDR = 0; /* clear data direction register. All pins as input */
|
MCF_EPORT_EPDDR = 0; /* clear data direction register. All pins as input */
|
||||||
MCF_EPORT_EPFR = -1; /* clear all EPORT interrupt flags */
|
MCF_EPORT_EPFR = -1; /* clear all EPORT interrupt flags */
|
||||||
// MCF_EPORT_EPIER = 0xfe; /* enable all EPORT interrupts (for now) */
|
MCF_EPORT_EPIER = 0xfe; /* enable all EPORT interrupts (for now) */
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_xlbus_arbiter(void)
|
void init_xlbus_arbiter(void)
|
||||||
|
|||||||
45
sys/BaS.c
45
sys/BaS.c
@@ -423,16 +423,17 @@ void BaS(void)
|
|||||||
|
|
||||||
xprintf("finished\r\n");
|
xprintf("finished\r\n");
|
||||||
xprintf("enable video: ");
|
xprintf("enable video: ");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* video setup (25MHz)
|
* video setup (25MHz)
|
||||||
*/
|
*/
|
||||||
* (volatile uint32_t *) (0xf0000410 + 0) = 0x032002ba; /* horizontal 640x480 */
|
* (volatile uint32_t *) 0xf0000410 = 0x032002ba; /* horizontal 640x480 */
|
||||||
* (volatile uint32_t *) (0xf0000410 + 4) = 0x020c020a; /* vertical 640x480 */
|
* (volatile uint32_t *) 0xf0000414 = 0x020c020a; /* vertical 640x480 */
|
||||||
* (volatile uint32_t *) (0xf0000410 + 8) = 0x0190015d; /* horizontal 320x240 */
|
* (volatile uint32_t *) 0xf0000418 = 0x0190015d; /* horizontal 320x240 */
|
||||||
* (volatile uint32_t *) (0xf0000410 + 12) = 0x020C020A; /* vertical 320x230 */
|
* (volatile uint32_t *) 0xf000041c = 0x020c020a; /* vertical 320x230 */
|
||||||
|
|
||||||
/* fifo on, refresh on, ddrcs and cke on, video dac on */
|
/* fifo on, refresh on, ddrcs and cke on, video dac on */
|
||||||
* (volatile uint32_t *) (0xf0000410 - 0x20) = 0x01070002;
|
* (volatile uint32_t *) 0xf0000400 = 0x01070082;
|
||||||
|
|
||||||
xprintf("finished\r\n");
|
xprintf("finished\r\n");
|
||||||
#endif /* MACHINE_FIREBEE */
|
#endif /* MACHINE_FIREBEE */
|
||||||
@@ -442,7 +443,7 @@ void BaS(void)
|
|||||||
/*
|
/*
|
||||||
* memory setup
|
* memory setup
|
||||||
*/
|
*/
|
||||||
memset((void *) 0x400, 0, 0x400);
|
memset((void *) 0x200, 0, 0x400);
|
||||||
|
|
||||||
#if defined(MACHINE_FIREBEE)
|
#if defined(MACHINE_FIREBEE)
|
||||||
/* set Falcon bus control register */
|
/* set Falcon bus control register */
|
||||||
@@ -483,6 +484,7 @@ void BaS(void)
|
|||||||
enable_coldfire_interrupts();
|
enable_coldfire_interrupts();
|
||||||
MCF_INTC_IMRH = 0;
|
MCF_INTC_IMRH = 0;
|
||||||
MCF_INTC_IMRL = 0;
|
MCF_INTC_IMRL = 0;
|
||||||
|
|
||||||
dma_irq_enable();
|
dma_irq_enable();
|
||||||
fec_irq_enable(0, 5, 1);
|
fec_irq_enable(0, 5, 1);
|
||||||
|
|
||||||
@@ -495,6 +497,37 @@ void BaS(void)
|
|||||||
|
|
||||||
set_ipl(7); /* disable interrupts */
|
set_ipl(7); /* disable interrupts */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* start FireTOS if DIP switch is set accordingly
|
||||||
|
*/
|
||||||
|
if (!(DIP_SWITCH & (1 << 6)))
|
||||||
|
{
|
||||||
|
extern uint8_t _FIRETOS[];
|
||||||
|
#define FIRETOS ((uint32_t)_FIRETOS) /* where FireTOS is stored in flash */
|
||||||
|
|
||||||
|
/* make sure MMU is disabled */
|
||||||
|
MCF_MMU_MMUCR = 0; /* MMU off */
|
||||||
|
NOP(); /* force pipeline sync */
|
||||||
|
|
||||||
|
/* ST RAM */
|
||||||
|
|
||||||
|
* (uint32_t *) 0x42e = STRAM_END; /* phystop TOS system variable */
|
||||||
|
* (uint32_t *) 0x420 = 0x752019f3; /* memvalid TOS system variable */
|
||||||
|
* (uint32_t *) 0x43a = 0x237698aa; /* memval2 TOS system variable */
|
||||||
|
* (uint32_t *) 0x51a = 0x5555aaaa; /* memval3 TOS system variable */
|
||||||
|
|
||||||
|
/* TT-RAM */
|
||||||
|
|
||||||
|
* (uint32_t *) 0x5a4 = FASTRAM_END; /* ramtop TOS system variable */
|
||||||
|
* (uint32_t *) 0x5a8 = 0x1357bd13; /* ramvalid TOS system variable */
|
||||||
|
|
||||||
|
xprintf("call FireTOS\r\n");
|
||||||
|
/* Jump into FireTOS */
|
||||||
|
typedef void void_func(void);
|
||||||
|
void_func* FireTOS = (void_func*) FIRETOS;
|
||||||
|
FireTOS(); // Should never return
|
||||||
|
}
|
||||||
|
|
||||||
xprintf("call EmuTOS\r\n");
|
xprintf("call EmuTOS\r\n");
|
||||||
struct rom_header *os_header = (struct rom_header *) TOS;
|
struct rom_header *os_header = (struct rom_header *) TOS;
|
||||||
os_header->initial_pc();
|
os_header->initial_pc();
|
||||||
|
|||||||
@@ -144,7 +144,7 @@
|
|||||||
subq.l #8,sp
|
subq.l #8,sp
|
||||||
movem.l d0/a5,(sp) // save registers
|
movem.l d0/a5,(sp) // save registers
|
||||||
|
|
||||||
lea MCF_EPORT_EPFR,a5
|
lea MCF_EPORT_EPFR,a5
|
||||||
move.b #\clr_int,(a5) // clear int pending
|
move.b #\clr_int,(a5) // clear int pending
|
||||||
|
|
||||||
movem.l (sp),d0/a5 // restore registers
|
movem.l (sp),d0/a5 // restore registers
|
||||||
|
|||||||
@@ -561,8 +561,7 @@ static void init_video_ddr(void) {
|
|||||||
_VRAM = 0000070022; /* load MR dll on */
|
_VRAM = 0000070022; /* load MR dll on */
|
||||||
NOP();
|
NOP();
|
||||||
|
|
||||||
* (uint32_t *) 0xf0000400 = 0x01070002; /* fifo on, refresh on, ddrcs und cke on, video dac on */
|
* (uint32_t *) 0xf0000400 = 0x01070082; /* fifo on, refresh on, ddrcs und cke on, video dac on, Falcon shift mode on */
|
||||||
// * (uint32_t *) 0xf0000400 = 0x0107820b; /* fifo on, refresh on, ddrcs und cke on, video dac on */
|
|
||||||
|
|
||||||
xprintf("finished\r\n");
|
xprintf("finished\r\n");
|
||||||
}
|
}
|
||||||
@@ -940,7 +939,7 @@ static void clear_bss_segment(void)
|
|||||||
void initialize_hardware(void)
|
void initialize_hardware(void)
|
||||||
{
|
{
|
||||||
/* Test for FireTOS switch: DIP switch #5 up */
|
/* Test for FireTOS switch: DIP switch #5 up */
|
||||||
#if defined(MACHINE_FIREBEE)
|
#ifdef _NOT_USED_ // #if defined(MACHINE_FIREBEE)
|
||||||
if (!(DIP_SWITCH & (1 << 6))) {
|
if (!(DIP_SWITCH & (1 << 6))) {
|
||||||
/* Minimal hardware initialization */
|
/* Minimal hardware initialization */
|
||||||
init_gpio();
|
init_gpio();
|
||||||
@@ -958,6 +957,7 @@ void initialize_hardware(void)
|
|||||||
|
|
||||||
/* TT-RAM */
|
/* TT-RAM */
|
||||||
|
|
||||||
|
xprintf("FASTRAM_END = %p\r\n", FASTRAM_END);
|
||||||
* (uint32_t *) 0x5a4 = FASTRAM_END; /* ramtop TOS system variable */
|
* (uint32_t *) 0x5a4 = FASTRAM_END; /* ramtop TOS system variable */
|
||||||
* (uint32_t *) 0x5a8 = 0x1357bd13; /* ramvalid TOS system variable */
|
* (uint32_t *) 0x5a8 = 0x1357bd13; /* ramvalid TOS system variable */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user