Pi uart: Begin first attempts at UART communication on Pi.
* Make Kernel ARM UART slightly more generic through (BOARD_UART_CLOCK) configured per board * Add initial Raspberry Pi serial code * Still rough and non-working
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
#ifndef _BOARD_OVERO_BOARD_CONFIG_H
|
#ifndef _BOARD_OVERO_BOARD_CONFIG_H
|
||||||
#define _BOARD_OVERO_BOARD_CONFIG_H
|
#define _BOARD_OVERO_BOARD_CONFIG_H
|
||||||
|
|
||||||
|
|
||||||
#define BOARD_NAME_PRETTY "Beagle Board"
|
#define BOARD_NAME_PRETTY "Beagle Board"
|
||||||
|
|
||||||
#define BOARD_CPU_TYPE_OMAP 1
|
#define BOARD_CPU_TYPE_OMAP 1
|
||||||
@@ -12,10 +13,15 @@
|
|||||||
|
|
||||||
#include <arch/arm/omap3.h>
|
#include <arch/arm/omap3.h>
|
||||||
|
|
||||||
|
// UART Settings
|
||||||
#define BOARD_UART1_BASE OMAP_UART1_BASE
|
#define BOARD_UART1_BASE OMAP_UART1_BASE
|
||||||
#define BOARD_UART2_BASE OMAP_UART2_BASE
|
#define BOARD_UART2_BASE OMAP_UART2_BASE
|
||||||
#define BOARD_UART3_BASE OMAP_UART3_BASE
|
#define BOARD_UART3_BASE OMAP_UART3_BASE
|
||||||
|
|
||||||
#define BOARD_DEBUG_UART 2
|
#define BOARD_DEBUG_UART 2
|
||||||
|
|
||||||
|
#define BOARD_UART_CLOCK 48000000
|
||||||
|
// 48MHz (APLL96/2)
|
||||||
|
|
||||||
|
|
||||||
#endif /* _BOARD_OVERO_BOARD_CONFIG_H */
|
#endif /* _BOARD_OVERO_BOARD_CONFIG_H */
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#ifndef _BOARD_FREERUNNER_BOARD_CONFIG_H
|
#ifndef _BOARD_FREERUNNER_BOARD_CONFIG_H
|
||||||
#define _BOARD_FREERUNNER_BOARD_CONFIG_H
|
#define _BOARD_FREERUNNER_BOARD_CONFIG_H
|
||||||
|
|
||||||
|
|
||||||
#define BOARD_NAME_PRETTY "Openmoko Neo FreeRunner"
|
#define BOARD_NAME_PRETTY "Openmoko Neo FreeRunner"
|
||||||
|
|
||||||
#define BOARD_CPU_TYPE_ARM9 1
|
#define BOARD_CPU_TYPE_ARM9 1
|
||||||
@@ -12,10 +13,15 @@
|
|||||||
|
|
||||||
#include <arch/arm/arm920t.h>
|
#include <arch/arm/arm920t.h>
|
||||||
|
|
||||||
|
// UART Settings
|
||||||
#define BOARD_UART1_BASE UART0_BASE
|
#define BOARD_UART1_BASE UART0_BASE
|
||||||
#define BOARD_UART2_BASE UART1_BASE
|
#define BOARD_UART2_BASE UART1_BASE
|
||||||
#define BOARD_UART3_BASE UART2_BASE
|
#define BOARD_UART3_BASE UART2_BASE
|
||||||
|
|
||||||
#define BOARD_DEBUG_UART 2
|
#define BOARD_DEBUG_UART 2
|
||||||
|
|
||||||
|
#define BOARD_UART_CLOCK 48000000
|
||||||
|
// 48MHz (APLL96/2)
|
||||||
|
|
||||||
|
|
||||||
#endif /* _BOARD_FREERUNNER_BOARD_CONFIG_H */
|
#endif /* _BOARD_FREERUNNER_BOARD_CONFIG_H */
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#ifndef _BOARD_OVERO_BOARD_CONFIG_H
|
#ifndef _BOARD_OVERO_BOARD_CONFIG_H
|
||||||
#define _BOARD_OVERO_BOARD_CONFIG_H
|
#define _BOARD_OVERO_BOARD_CONFIG_H
|
||||||
|
|
||||||
|
|
||||||
#define BOARD_NAME_PRETTY "Gumstix Overo"
|
#define BOARD_NAME_PRETTY "Gumstix Overo"
|
||||||
|
|
||||||
#define BOARD_CPU_TYPE_OMAP 1
|
#define BOARD_CPU_TYPE_OMAP 1
|
||||||
@@ -12,10 +13,15 @@
|
|||||||
|
|
||||||
#include <arch/arm/omap3.h>
|
#include <arch/arm/omap3.h>
|
||||||
|
|
||||||
|
// UART Settings
|
||||||
#define BOARD_UART1_BASE OMAP_UART1_BASE
|
#define BOARD_UART1_BASE OMAP_UART1_BASE
|
||||||
#define BOARD_UART2_BASE OMAP_UART2_BASE
|
#define BOARD_UART2_BASE OMAP_UART2_BASE
|
||||||
#define BOARD_UART3_BASE OMAP_UART3_BASE
|
#define BOARD_UART3_BASE OMAP_UART3_BASE
|
||||||
|
|
||||||
#define BOARD_DEBUG_UART 2
|
#define BOARD_DEBUG_UART 2
|
||||||
|
|
||||||
|
#define BOARD_UART_CLOCK 48000000
|
||||||
|
// 48MHz (APLL96/2)
|
||||||
|
|
||||||
|
|
||||||
#endif /* _BOARD_OVERO_BOARD_CONFIG_H */
|
#endif /* _BOARD_OVERO_BOARD_CONFIG_H */
|
||||||
|
|||||||
@@ -15,12 +15,15 @@
|
|||||||
|
|
||||||
#include <arch/arm/bcm2708.h>
|
#include <arch/arm/bcm2708.h>
|
||||||
|
|
||||||
|
// UART Settings
|
||||||
#define BOARD_UART1_BASE UART0_BASE
|
#define BOARD_UART1_BASE UART0_BASE
|
||||||
#define BOARD_UART2_BASE UART1_BASE
|
#define BOARD_UART2_BASE UART1_BASE
|
||||||
#define BOARD_UART3_BASE UART1_BASE
|
#define BOARD_UART3_BASE 0
|
||||||
#warning NO UART3!!!
|
|
||||||
|
|
||||||
#define BOARD_DEBUG_UART 0
|
#define BOARD_DEBUG_UART 0
|
||||||
|
|
||||||
|
#define BOARD_UART_CLOCK 125000000
|
||||||
|
/* 125Mhz, strange */
|
||||||
|
|
||||||
|
|
||||||
#endif /* _BOARD_RASPBERRY_PI_BOARD_CONFIG_H */
|
#endif /* _BOARD_RASPBERRY_PI_BOARD_CONFIG_H */
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#ifndef _BOARD_VERDEX_BOARD_CONFIG_H
|
#ifndef _BOARD_VERDEX_BOARD_CONFIG_H
|
||||||
#define _BOARD_VERDEX_BOARD_CONFIG_H
|
#define _BOARD_VERDEX_BOARD_CONFIG_H
|
||||||
|
|
||||||
|
|
||||||
#define BOARD_NAME_PRETTY "Gumstix Verdex"
|
#define BOARD_NAME_PRETTY "Gumstix Verdex"
|
||||||
|
|
||||||
#define BOARD_CPU_TYPE_PXA 1
|
#define BOARD_CPU_TYPE_PXA 1
|
||||||
@@ -12,10 +13,15 @@
|
|||||||
|
|
||||||
#include <arch/arm/pxa270.h>
|
#include <arch/arm/pxa270.h>
|
||||||
|
|
||||||
|
// UART Settings
|
||||||
#define BOARD_UART1_BASE FFUART_BASE
|
#define BOARD_UART1_BASE FFUART_BASE
|
||||||
#define BOARD_UART2_BASE BTUART_BASE
|
#define BOARD_UART2_BASE BTUART_BASE
|
||||||
#define BOARD_UART3_BASE STUART_BASE
|
#define BOARD_UART3_BASE STUART_BASE
|
||||||
|
|
||||||
#define BOARD_DEBUG_UART 0
|
#define BOARD_DEBUG_UART 0
|
||||||
|
|
||||||
|
#define BOARD_UART_CLOCK 48000000
|
||||||
|
// 48MHz (APLL96/2)
|
||||||
|
|
||||||
|
|
||||||
#endif /* _BOARD_VERDEX_BOARD_CONFIG_H */
|
#endif /* _BOARD_VERDEX_BOARD_CONFIG_H */
|
||||||
|
|||||||
@@ -17,12 +17,6 @@ UsePrivateHeaders [ FDirName storage ] ;
|
|||||||
|
|
||||||
SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons accelerants common ] ;
|
SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons accelerants common ] ;
|
||||||
|
|
||||||
local genericPlatformSources =
|
|
||||||
text_menu.cpp
|
|
||||||
# video_blit.cpp
|
|
||||||
# video_splash.cpp
|
|
||||||
;
|
|
||||||
|
|
||||||
KernelMergeObject boot_platform_raspberrypi_arm.o :
|
KernelMergeObject boot_platform_raspberrypi_arm.o :
|
||||||
entry.S
|
entry.S
|
||||||
start.c
|
start.c
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ gpio_init()
|
|||||||
// Set up pointer to Raspberry Pi GPIO base
|
// Set up pointer to Raspberry Pi GPIO base
|
||||||
gGPIOBase = (volatile unsigned *)GPIO_BASE;
|
gGPIOBase = (volatile unsigned *)GPIO_BASE;
|
||||||
|
|
||||||
// Take control of general use pins, status led, uart
|
// Take control of ok led and general use pins
|
||||||
int pin = 0;
|
int pin = 0;
|
||||||
for (pin = 14; pin <= 25; pin++) {
|
for (pin = 16; pin <= 25; pin++) {
|
||||||
GPIO_IN(pin);
|
GPIO_IN(pin);
|
||||||
GPIO_OUT(pin);
|
GPIO_OUT(pin);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright 2004-2008, Axel D??rfler, [email protected].
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
* Copyright 2009 Jonas Sundström, [email protected]
|
* Copyright 2009 Jonas Sundström, [email protected]
|
||||||
* All rights reserved. Distributed under the terms of the MIT License.
|
* All rights reserved. Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
|
#include "uart.h"
|
||||||
|
|
||||||
#include <boot/platform.h>
|
#include <boot/platform.h>
|
||||||
#include <arch/cpu.h>
|
#include <arch/cpu.h>
|
||||||
@@ -13,31 +17,57 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int32 sSerialEnabled = 0;
|
||||||
|
|
||||||
|
static char sBuffer[16384];
|
||||||
|
static uint32 sBufferPosition;
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
serial_putc(char c)
|
serial_putc(char c)
|
||||||
{
|
{
|
||||||
#warning IMPLEMENT serial_putc
|
uart_putc(uart_debug_port(), c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
serial_puts(const char* string, size_t size)
|
serial_puts(const char* string, size_t size)
|
||||||
{
|
{
|
||||||
#warning IMPLEMENT serial_puts
|
if (sSerialEnabled <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (sBufferPosition + size < sizeof(sBuffer)) {
|
||||||
|
memcpy(sBuffer + sBufferPosition, string, size);
|
||||||
|
sBufferPosition += size;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (size-- != 0) {
|
||||||
|
char c = string[0];
|
||||||
|
|
||||||
|
if (c == '\n') {
|
||||||
|
serial_putc('\r');
|
||||||
|
serial_putc('\n');
|
||||||
|
} else if (c != '\r')
|
||||||
|
serial_putc(c);
|
||||||
|
|
||||||
|
string++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
serial_disable(void)
|
serial_disable(void)
|
||||||
{
|
{
|
||||||
#warning IMPLEMENT serial_disable
|
sSerialEnabled--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
serial_enable(void)
|
serial_enable(void)
|
||||||
{
|
{
|
||||||
#warning IMPLEMENT serial_enable
|
uart_init_early();
|
||||||
|
uart_init();
|
||||||
|
sSerialEnabled++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -51,6 +81,8 @@ serial_cleanup(void)
|
|||||||
extern "C" void
|
extern "C" void
|
||||||
serial_init(void)
|
serial_init(void)
|
||||||
{
|
{
|
||||||
#warning IMPLEMENT serial_init
|
serial_enable();
|
||||||
|
|
||||||
|
serial_putc('S');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,6 @@ pi_start(void)
|
|||||||
mmu_init();
|
mmu_init();
|
||||||
serial_init();
|
serial_init();
|
||||||
console_init();
|
console_init();
|
||||||
serial_enable();
|
|
||||||
|
|
||||||
args.heap_size = HEAP_SIZE;
|
args.heap_size = HEAP_SIZE;
|
||||||
args.arguments = NULL;
|
args.arguments = NULL;
|
||||||
|
|||||||
@@ -95,18 +95,17 @@ static inline unsigned char read_uart_reg(int port, uint reg)
|
|||||||
#define MCRVAL (MCR_DTR | MCR_RTS) /* RTS/DTR */
|
#define MCRVAL (MCR_DTR | MCR_RTS) /* RTS/DTR */
|
||||||
#define FCRVAL (FCR_FIFO_EN | FCR_RXSR | FCR_TXSR) /* Clear & enable FIFOs */
|
#define FCRVAL (FCR_FIFO_EN | FCR_RXSR | FCR_TXSR) /* Clear & enable FIFOs */
|
||||||
|
|
||||||
#define V_NS16550_CLK (48000000) /* 48MHz (APLL96/2) */
|
|
||||||
|
|
||||||
|
|
||||||
int uart_debug_port(void)
|
int uart_debug_port(void)
|
||||||
{
|
{
|
||||||
return DEBUG_UART;
|
return DEBUG_UART;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void uart_init_port(int port, uint baud)
|
void uart_init_port(int port, uint baud)
|
||||||
{
|
{
|
||||||
/* clear the tx & rx fifo and disable */
|
/* clear the tx & rx fifo and disable */
|
||||||
uint16 baud_divisor = (V_NS16550_CLK / 16 / baud);
|
uint16 baud_divisor = (BOARD_UART_CLOCK / 16 / baud);
|
||||||
|
|
||||||
write_uart_reg(port, UART_IER, 0);
|
write_uart_reg(port, UART_IER, 0);
|
||||||
write_uart_reg(port, UART_LCR, LCR_BKSE | LCRVAL); // config mode A
|
write_uart_reg(port, UART_LCR, LCR_BKSE | LCRVAL); // config mode A
|
||||||
|
|||||||
Reference in New Issue
Block a user