mirror of
git://projects.qi-hardware.com/iris.git
synced 2025-02-07 06:41:55 +02:00
working boot
This commit is contained in:
parent
d0287820e6
commit
20d15f0745
@ -853,7 +853,7 @@ static void kernel_invoke (unsigned target, Kernel::Num protected_data, kCapabil
|
|||||||
return
|
return
|
||||||
|
|
||||||
void invoke (kReceiverP target, Kernel::Num protected_data, kCapability::Context *c):
|
void invoke (kReceiverP target, Kernel::Num protected_data, kCapability::Context *c):
|
||||||
//log_message ("invoke", (unsigned)target, protected_data.l, c)
|
log_message ("invoke", (unsigned)target, protected_data.l, c)
|
||||||
if (unsigned)target & ~KERNEL_MASK:
|
if (unsigned)target & ~KERNEL_MASK:
|
||||||
// This is not a kernel capability: send a message to the receiver.
|
// This is not a kernel capability: send a message to the receiver.
|
||||||
if must_wait:
|
if must_wait:
|
||||||
|
@ -280,5 +280,6 @@ void kCapability::invoke (kCapability::Context *c):
|
|||||||
::invoke (target, protected_data, c)
|
::invoke (target, protected_data, c)
|
||||||
|
|
||||||
#define assert(x) do { if (!(x)) panic (__LINE__, "assertion failed"); } while (0)
|
#define assert(x) do { if (!(x)) panic (__LINE__, "assertion failed"); } while (0)
|
||||||
|
#define dbg_log_line() do { dbg_log ("debug: line "); dbg_log_num (__LINE__); dbg_log_char ('\n'); } while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -232,7 +232,7 @@ void init (unsigned mem):
|
|||||||
#endif
|
#endif
|
||||||
must_wait = false
|
must_wait = false
|
||||||
// Disable interrupts and set interrupt vectors to normal.
|
// Disable interrupts and set interrupt vectors to normal.
|
||||||
cp0_set0 (CP0_STATUS)
|
cp0_set (CP0_STATUS, 0x00404304)
|
||||||
// Initialize kernel variables to empty.
|
// Initialize kernel variables to empty.
|
||||||
unsigned count = init_memory (mem)
|
unsigned count = init_memory (mem)
|
||||||
// initialize system control coprocessor.
|
// initialize system control coprocessor.
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
load = 0x80000000
|
load = 0x80000000
|
||||||
|
|
||||||
ARCH_CXXFLAGS = -DNUM_THREADS=2
|
ARCH_CXXFLAGS = -DNUM_THREADS=2
|
||||||
ARCH_CPPFLAGS = -I. -Imips -Imips/nanonote -Wa,-mips32 -DNANONOTE
|
ARCH_CPPFLAGS = -I. -Imips -Imips/nanonote -Wa,-mips32 -DNANONOTE -DUSE_SERIAL
|
||||||
CROSS = mipsel-linux-gnu-
|
CROSS = mipsel-linux-gnu-
|
||||||
OBJDUMP = $(CROSS)objdump
|
OBJDUMP = $(CROSS)objdump
|
||||||
junk = mdebug.abi32 reginfo comment pdr
|
junk = mdebug.abi32 reginfo comment pdr
|
||||||
@ -31,7 +31,7 @@ arch_headers = mips/arch.hh mips/nanonote/jz4740.hh mips/nanonote/board.hh
|
|||||||
boot_threads = init udc
|
boot_threads = init udc
|
||||||
|
|
||||||
test: iris.raw nanonote-boot
|
test: iris.raw nanonote-boot
|
||||||
./nanonote-boot iris.raw 0xa$(shell /bin/sh -c '$(OBJDUMP) -t iris | grep __start$$ | cut -b2-8')
|
./nanonote-boot iris.raw 0xa$(shell /bin/sh -c '$(OBJDUMP) -t iris.elf | grep __start$$ | cut -b2-8')
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
|
|
||||||
%.elf: %.o
|
%.elf: %.o
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "kernel.hh"
|
#include "kernel.hh"
|
||||||
|
|
||||||
void board_init ():
|
void board_init ():
|
||||||
|
pll_init ()
|
||||||
cpm_start_all ()
|
cpm_start_all ()
|
||||||
gpio_as_uart0 ()
|
gpio_as_uart0 ()
|
||||||
gpio_as_sdram_16bit ()
|
gpio_as_sdram_16bit ()
|
||||||
@ -40,12 +41,16 @@ void board_init ():
|
|||||||
tcu_unmask_full_match_irq (0)
|
tcu_unmask_full_match_irq (0)
|
||||||
tcu_start_counter (0)
|
tcu_start_counter (0)
|
||||||
// Set up uart.
|
// Set up uart.
|
||||||
uart_disable (0)
|
|
||||||
uart_set_baud (0, JZ_EXTAL, 9600)
|
|
||||||
uart_set_8n1 (0)
|
|
||||||
UART0_IER = 0
|
UART0_IER = 0
|
||||||
|
UART0_FCR = 0
|
||||||
UART0_MCR = 0
|
UART0_MCR = 0
|
||||||
UART0_SIRCR = 0
|
UART0_SIRCR = 0
|
||||||
UART0_UMR = 0
|
UART0_UMR = 0
|
||||||
UART0_UACR = 0
|
UART0_UACR = 0
|
||||||
UART0_FCR |= UARTFCR_UUE | UARTFCR_RFLS | UARTFCR_TFLS
|
UART0_LCR = UARTLCR_WLEN_8 | UARTLCR_STOP1 | UARTLCR_DLAB
|
||||||
|
unsigned uart_div = 3000000 / 16 / 9600
|
||||||
|
UART0_DLHR = uart_div >> 8
|
||||||
|
UART0_DLLR = uart_div
|
||||||
|
UART0_LCR = UARTLCR_WLEN_8 | UARTLCR_STOP1
|
||||||
|
UART0_FCR = UARTFCR_UUE | UARTFCR_FE | UARTFCR_RFLS | UARTFCR_TFLS
|
||||||
|
dbg_log ("Serial port initialized\n")
|
||||||
|
@ -2346,6 +2346,19 @@ static void gpio_disable_pull (unsigned p, unsigned pins):
|
|||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// CPM
|
// CPM
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
static void pll_init ():
|
||||||
|
unsigned PHM_DIV = 3
|
||||||
|
unsigned int cfcr, plcr1
|
||||||
|
int n2FR[33] = { 0, 0, 1, 2, 3, 0, 4, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9 }
|
||||||
|
int nf, pllout2;
|
||||||
|
cfcr = CPM_CPCCR_CLKOEN | (n2FR[1] << CPM_CPCCR_CDIV_BIT) | (n2FR[PHM_DIV] << CPM_CPCCR_HDIV_BIT) | (n2FR[PHM_DIV] << CPM_CPCCR_PDIV_BIT) | (n2FR[PHM_DIV] << CPM_CPCCR_MDIV_BIT) | (n2FR[PHM_DIV] << CPM_CPCCR_LDIV_BIT)
|
||||||
|
pllout2 = (cfcr & CPM_CPCCR_PCS) ? 252000000 : (252000000 / 2)
|
||||||
|
CPM_UHCCDR = pllout2 / 48000000 - 1
|
||||||
|
nf = 252000000 * 2 / 12000000
|
||||||
|
plcr1 = ((nf - 2) << CPM_CPPCR_PLLM_BIT) | (0 << CPM_CPPCR_PLLN_BIT) | (0 << CPM_CPPCR_PLLOD_BIT) | (0x20 << CPM_CPPCR_PLLST_BIT) | CPM_CPPCR_PLLEN
|
||||||
|
CPM_CPCCR = cfcr
|
||||||
|
CPM_CPPCR = plcr1
|
||||||
|
|
||||||
static unsigned cpm_get_pllm ():
|
static unsigned cpm_get_pllm ():
|
||||||
return (CPM_CPPCR & CPM_CPPCR_PLLM_MASK) >> CPM_CPPCR_PLLM_BIT
|
return (CPM_CPPCR & CPM_CPPCR_PLLM_MASK) >> CPM_CPPCR_PLLM_BIT
|
||||||
static unsigned cpm_get_plln ():
|
static unsigned cpm_get_plln ():
|
||||||
|
@ -77,7 +77,7 @@ bool nanonote::try_open (struct usb_device *dev):
|
|||||||
return false
|
return false
|
||||||
|
|
||||||
interface = dev->config->interface->altsetting->bInterfaceNumber
|
interface = dev->config->interface->altsetting->bInterfaceNumber
|
||||||
int have_in = 0, have_out = 0
|
bool have_in = false, have_out = false
|
||||||
for unsigned i = 0; i < dev->config->interface->altsetting->bNumEndpoints; ++i:
|
for unsigned i = 0; i < dev->config->interface->altsetting->bNumEndpoints; ++i:
|
||||||
if (dev->config->interface->altsetting->endpoint[i].bmAttributes & USB_ENDPOINT_TYPE_MASK) != USB_ENDPOINT_TYPE_BULK:
|
if (dev->config->interface->altsetting->endpoint[i].bmAttributes & USB_ENDPOINT_TYPE_MASK) != USB_ENDPOINT_TYPE_BULK:
|
||||||
usb_close (handle)
|
usb_close (handle)
|
||||||
@ -89,7 +89,7 @@ bool nanonote::try_open (struct usb_device *dev):
|
|||||||
usb_close (handle)
|
usb_close (handle)
|
||||||
std::cerr << "Device has multiple IN endpoints.\n"
|
std::cerr << "Device has multiple IN endpoints.\n"
|
||||||
return false
|
return false
|
||||||
have_in = 1
|
have_in = true
|
||||||
in_ep = dev->config->interface->altsetting->endpoint[i].bEndpointAddress & USB_ENDPOINT_ADDRESS_MASK
|
in_ep = dev->config->interface->altsetting->endpoint[i].bEndpointAddress & USB_ENDPOINT_ADDRESS_MASK
|
||||||
if in_ep != 1:
|
if in_ep != 1:
|
||||||
usb_close (handle)
|
usb_close (handle)
|
||||||
@ -101,7 +101,7 @@ bool nanonote::try_open (struct usb_device *dev):
|
|||||||
usb_close (handle)
|
usb_close (handle)
|
||||||
std::cerr << "Device has multiple OUT endpoints.\n"
|
std::cerr << "Device has multiple OUT endpoints.\n"
|
||||||
return false
|
return false
|
||||||
have_out = 1
|
have_out = true
|
||||||
out_ep = dev->config->interface->altsetting->endpoint[i].bEndpointAddress & USB_ENDPOINT_ADDRESS_MASK
|
out_ep = dev->config->interface->altsetting->endpoint[i].bEndpointAddress & USB_ENDPOINT_ADDRESS_MASK
|
||||||
if out_ep != 1:
|
if out_ep != 1:
|
||||||
usb_close (handle)
|
usb_close (handle)
|
||||||
|
@ -134,3 +134,19 @@ void start_cpp ():
|
|||||||
EMC_DMCR = dmcr | EMC_DMCR_RFSH | EMC_DMCR_MRSET
|
EMC_DMCR = dmcr | EMC_DMCR_RFSH | EMC_DMCR_MRSET
|
||||||
|
|
||||||
// everything is ok now: return to boot loader to load stage 2.
|
// everything is ok now: return to boot loader to load stage 2.
|
||||||
|
|
||||||
|
pll_init ()
|
||||||
|
cpm_start_all ()
|
||||||
|
gpio_as_uart0 ()
|
||||||
|
UART0_IER = 0
|
||||||
|
UART0_FCR = 0
|
||||||
|
UART0_MCR = 0
|
||||||
|
UART0_SIRCR = 0
|
||||||
|
UART0_UMR = 0
|
||||||
|
UART0_UACR = 0
|
||||||
|
UART0_LCR = UARTLCR_WLEN_8 | UARTLCR_STOP1 | UARTLCR_DLAB
|
||||||
|
unsigned uart_div = 3000000 / 16 / 9600
|
||||||
|
UART0_DLHR = uart_div >> 8
|
||||||
|
UART0_DLLR = uart_div
|
||||||
|
UART0_LCR = UARTLCR_WLEN_8 | UARTLCR_STOP1
|
||||||
|
UART0_FCR = UARTFCR_UUE | UARTFCR_FE | UARTFCR_RFLS | UARTFCR_TFLS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user