mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-11-15 05:29:42 +02:00
rtems patches: added new UART and IRQ rearrangement, plus include fix
Some of the include paths don't work. Not sure whether my patch is a correct fix or merely an awkward way to work around a problem that's somewhere else.
This commit is contained in:
parent
ed85930f36
commit
58da15e017
39
m1/patches/rtems/fix-sysconf-includes.patch
Normal file
39
m1/patches/rtems/fix-sysconf-includes.patch
Normal file
@ -0,0 +1,39 @@
|
||||
Index: rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c 2011-11-20 16:20:21.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c 2011-11-20 16:20:25.000000000 -0300
|
||||
@@ -19,7 +19,7 @@
|
||||
#include <rtems/termiostypes.h>
|
||||
#include <bsp/irq-generic.h>
|
||||
|
||||
-#include "../include/system_conf.h"
|
||||
+#include "../../milkymist/include/system_conf.h"
|
||||
#include "uart.h"
|
||||
|
||||
BSP_output_char_function_type BSP_output_char = BSP_uart_polled_write;
|
||||
Index: rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c 2011-11-20 16:20:38.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c 2011-11-20 16:20:49.000000000 -0300
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
-#include "../include/system_conf.h"
|
||||
+#include "../../milkymist/include/system_conf.h"
|
||||
#include "uart.h"
|
||||
|
||||
void BSP_uart_init(int baud)
|
||||
Index: rtems/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c 2011-11-20 16:21:11.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c 2011-11-20 16:22:01.000000000 -0300
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <bsp.h>
|
||||
#include <bsp/irq-generic.h>
|
||||
#include <rtems/libio.h>
|
||||
-#include "../include/system_conf.h"
|
||||
+#include "../../milkymist/include/system_conf.h"
|
||||
#include "milkymist_midi.h"
|
||||
|
||||
#define DEVICE_NAME "/dev/midi"
|
257
m1/patches/rtems/milkymist-new-uart.patch
Normal file
257
m1/patches/rtems/milkymist-new-uart.patch
Normal file
@ -0,0 +1,257 @@
|
||||
Index: rtems/c/src/lib/libbsp/lm32/milkymist/include/system_conf.h
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/milkymist/include/system_conf.h 2011-08-01 10:48:11.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/milkymist/include/system_conf.h 2011-11-20 16:02:10.000000000 -0300
|
||||
@@ -26,6 +26,16 @@
|
||||
/* UART */
|
||||
#define MM_UART_RXTX (0xe0000000)
|
||||
#define MM_UART_DIV (0xe0000004)
|
||||
+#define MM_UART_STAT (0xe0000008)
|
||||
+#define MM_UART_CTRL (0xe000000c)
|
||||
+
|
||||
+#define UART_STAT_THRE (0x1)
|
||||
+#define UART_STAT_RX_EVT (0x2)
|
||||
+#define UART_STAT_TX_EVT (0x4)
|
||||
+
|
||||
+#define UART_CTRL_RX_INT (0x1)
|
||||
+#define UART_CTRL_TX_INT (0x2)
|
||||
+#define UART_CTRL_THRU (0x4)
|
||||
|
||||
/* Timers */
|
||||
#define MM_TIMER1_COMPARE (0xe0001024)
|
||||
@@ -225,8 +235,17 @@
|
||||
|
||||
/* MIDI */
|
||||
#define MM_MIDI_RXTX (0xe000b000)
|
||||
-#define MM_MIDI_DIVISOR (0xe000b004)
|
||||
-#define MM_MIDI_THRU (0xe000b008)
|
||||
+#define MM_MIDI_DIV (0xe000b004)
|
||||
+#define MM_MIDI_STAT (0xe000b008)
|
||||
+#define MM_MIDI_CTRL (0xe000b00c)
|
||||
+
|
||||
+#define MIDI_STAT_THRE (0x1)
|
||||
+#define MIDI_STAT_RX_EVT (0x2)
|
||||
+#define MIDI_STAT_TX_EVT (0x4)
|
||||
+
|
||||
+#define MIDI_CTRL_RX_INT (0x1)
|
||||
+#define MIDI_CTRL_TX_INT (0x2)
|
||||
+#define MIDI_CTRL_THRU (0x4)
|
||||
|
||||
/* IR */
|
||||
#define MM_IR_RX (0xe000e000)
|
||||
@@ -248,24 +267,22 @@
|
||||
#define BT656_FILTER_INFRAME (0x4)
|
||||
|
||||
/* Interrupts */
|
||||
-#define MM_IRQ_UARTRX (0)
|
||||
-#define MM_IRQ_UARTTX (1)
|
||||
-#define MM_IRQ_GPIO (2)
|
||||
-#define MM_IRQ_TIMER0 (3)
|
||||
-#define MM_IRQ_TIMER1 (4)
|
||||
-#define MM_IRQ_AC97CRREQUEST (5)
|
||||
-#define MM_IRQ_AC97CRREPLY (6)
|
||||
-#define MM_IRQ_AC97DMAR (7)
|
||||
-#define MM_IRQ_AC97DMAW (8)
|
||||
-#define MM_IRQ_PFPU (9)
|
||||
-#define MM_IRQ_TMU (10)
|
||||
-#define MM_IRQ_ETHRX (11)
|
||||
-#define MM_IRQ_ETHTX (12)
|
||||
-#define MM_IRQ_VIDEOIN (13)
|
||||
-#define MM_IRQ_MIDIRX (14)
|
||||
-#define MM_IRQ_MIDITX (15)
|
||||
-#define MM_IRQ_IR (16)
|
||||
-#define MM_IRQ_USB (17)
|
||||
+#define MM_IRQ_UART (0)
|
||||
+#define MM_IRQ_GPIO (1)
|
||||
+#define MM_IRQ_TIMER0 (2)
|
||||
+#define MM_IRQ_TIMER1 (3)
|
||||
+#define MM_IRQ_AC97CRREQUEST (4)
|
||||
+#define MM_IRQ_AC97CRREPLY (5)
|
||||
+#define MM_IRQ_AC97DMAR (6)
|
||||
+#define MM_IRQ_AC97DMAW (7)
|
||||
+#define MM_IRQ_PFPU (8)
|
||||
+#define MM_IRQ_TMU (9)
|
||||
+#define MM_IRQ_ETHRX (10)
|
||||
+#define MM_IRQ_ETHTX (11)
|
||||
+#define MM_IRQ_VIDEOIN (12)
|
||||
+#define MM_IRQ_MIDI (13)
|
||||
+#define MM_IRQ_IR (14)
|
||||
+#define MM_IRQ_USB (15)
|
||||
|
||||
/* Flash layout */
|
||||
#define FLASH_BASE (0x80000000)
|
||||
Index: rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c 2011-08-01 10:48:39.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c 2011-11-20 16:02:10.000000000 -0300
|
||||
@@ -119,25 +119,24 @@
|
||||
rtems_interrupt_level level;
|
||||
|
||||
rtems_interrupt_disable(level);
|
||||
- BSP_uart_txbusy = true;
|
||||
MM_WRITE(MM_UART_RXTX, *buf);
|
||||
rtems_interrupt_enable(level);
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static rtems_isr mmconsole_txdone(rtems_vector_number n)
|
||||
-{
|
||||
- BSP_uart_txbusy = false;
|
||||
- lm32_interrupt_ack(1 << MM_IRQ_UARTTX);
|
||||
- rtems_termios_dequeue_characters(tty, 1);
|
||||
-}
|
||||
-
|
||||
-static rtems_isr mmconsole_rxdone(rtems_vector_number n)
|
||||
+static rtems_isr mmconsole_interrupt(rtems_vector_number n)
|
||||
{
|
||||
char c;
|
||||
- c = MM_READ(MM_UART_RXTX);
|
||||
- lm32_interrupt_ack(1 << MM_IRQ_UARTRX);
|
||||
- rtems_termios_enqueue_raw_characters(tty, &c, 1);
|
||||
+ while (MM_READ(MM_UART_STAT) & UART_STAT_RX_EVT) {
|
||||
+ c = MM_READ(MM_UART_RXTX);
|
||||
+ MM_WRITE(MM_UART_STAT, UART_STAT_RX_EVT);
|
||||
+ rtems_termios_enqueue_raw_characters(tty, &c, 1);
|
||||
+ }
|
||||
+ if (MM_READ(MM_UART_STAT) & UART_STAT_TX_EVT) {
|
||||
+ MM_WRITE(MM_UART_STAT, UART_STAT_TX_EVT);
|
||||
+ rtems_termios_dequeue_characters(tty, 1);
|
||||
+ }
|
||||
+ lm32_interrupt_ack(1 << MM_IRQ_UART);
|
||||
}
|
||||
|
||||
static const rtems_termios_callbacks mmconsole_callbacks = {
|
||||
@@ -166,10 +165,9 @@
|
||||
if (status != RTEMS_SUCCESSFUL)
|
||||
rtems_fatal_error_occurred(status);
|
||||
|
||||
- rtems_interrupt_catch(mmconsole_txdone, MM_IRQ_UARTTX, &dummy);
|
||||
- rtems_interrupt_catch(mmconsole_rxdone, MM_IRQ_UARTRX, &dummy);
|
||||
- bsp_interrupt_vector_enable(MM_IRQ_UARTTX);
|
||||
- bsp_interrupt_vector_enable(MM_IRQ_UARTRX);
|
||||
+ rtems_interrupt_catch(mmconsole_interrupt, MM_IRQ_UART, &dummy);
|
||||
+ bsp_interrupt_vector_enable(MM_IRQ_UART);
|
||||
+ MM_WRITE(MM_UART_CTRL, UART_CTRL_RX_INT|UART_CTRL_TX_INT);
|
||||
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
Index: rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c 2011-08-01 10:48:39.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c 2011-11-20 16:02:10.000000000 -0300
|
||||
@@ -17,8 +17,6 @@
|
||||
#include "../include/system_conf.h"
|
||||
#include "uart.h"
|
||||
|
||||
-bool BSP_uart_txbusy;
|
||||
-
|
||||
void BSP_uart_init(int baud)
|
||||
{
|
||||
MM_WRITE(MM_UART_DIV, CPU_FREQUENCY/baud/16);
|
||||
@@ -26,40 +24,24 @@
|
||||
|
||||
void BSP_uart_polled_write(char ch)
|
||||
{
|
||||
- int ip;
|
||||
rtems_interrupt_level level;
|
||||
|
||||
rtems_interrupt_disable(level);
|
||||
- if (BSP_uart_txbusy) {
|
||||
- /* wait for the end of the transmission by the IRQ-based driver */
|
||||
- do {
|
||||
- lm32_read_interrupts(ip);
|
||||
- } while (!(ip & (1 << MM_IRQ_UARTTX)));
|
||||
- lm32_interrupt_ack(1 << MM_IRQ_UARTTX);
|
||||
- }
|
||||
+ while(!(MM_READ(MM_UART_STAT) & UART_STAT_THRE));
|
||||
MM_WRITE(MM_UART_RXTX, ch);
|
||||
- do {
|
||||
- lm32_read_interrupts(ip);
|
||||
- } while (!(ip & (1 << MM_IRQ_UARTTX)));
|
||||
- /* if TX was busy, do not ack the IRQ
|
||||
- * so that the IRQ-based driver ISR is run */
|
||||
- if (!BSP_uart_txbusy)
|
||||
- lm32_interrupt_ack(1 << MM_IRQ_UARTTX);
|
||||
+ while(!(MM_READ(MM_UART_STAT) & UART_STAT_THRE));
|
||||
rtems_interrupt_enable(level);
|
||||
}
|
||||
|
||||
int BSP_uart_polled_read(void)
|
||||
{
|
||||
- int ip;
|
||||
char r;
|
||||
rtems_interrupt_level level;
|
||||
|
||||
rtems_interrupt_disable(level);
|
||||
- do {
|
||||
- lm32_read_interrupts(ip);
|
||||
- } while (!(ip & (1 << MM_IRQ_UARTRX)));
|
||||
- lm32_interrupt_ack(1 << MM_IRQ_UARTRX);
|
||||
+ while(!(MM_READ(MM_UART_STAT) & UART_STAT_RX_EVT));
|
||||
r = MM_READ(MM_UART_RXTX);
|
||||
+ MM_WRITE(MM_UART_STAT, UART_STAT_RX_EVT);
|
||||
rtems_interrupt_enable(level);
|
||||
|
||||
return r;
|
||||
Index: rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.h
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.h 2011-08-01 10:48:39.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.h 2011-11-20 16:02:10.000000000 -0300
|
||||
@@ -1,21 +1,16 @@
|
||||
/*
|
||||
- * This file contains definitions for LatticeMico32 UART
|
||||
+ * This file contains definitions for the Milkymist UART
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
* $Id: uart.h,v 1.2 2011/08/01 13:48:39 joel Exp $
|
||||
- *
|
||||
- * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010)
|
||||
- * Telecom SudParis
|
||||
*/
|
||||
|
||||
#ifndef _BSPUART_H
|
||||
#define _BSPUART_H
|
||||
|
||||
-extern bool BSP_uart_txbusy;
|
||||
-
|
||||
void BSP_uart_init(int baud);
|
||||
void BSP_uart_polled_write(char ch);
|
||||
int BSP_uart_polled_read(void);
|
||||
Index: rtems/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c
|
||||
===================================================================
|
||||
--- rtems.orig/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c 2011-08-01 10:48:40.000000000 -0300
|
||||
+++ rtems/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c 2011-11-20 16:02:10.000000000 -0300
|
||||
@@ -31,9 +31,12 @@
|
||||
{
|
||||
unsigned char msg;
|
||||
|
||||
- lm32_interrupt_ack(1 << MM_IRQ_MIDIRX);
|
||||
- msg = MM_READ(MM_MIDI_RXTX);
|
||||
- rtems_message_queue_send(midi_q, &msg, 1);
|
||||
+ while (MM_READ(MM_MIDI_STAT) & MIDI_STAT_RX_EVT) {
|
||||
+ msg = MM_READ(MM_MIDI_RXTX);
|
||||
+ MM_WRITE(MM_MIDI_STAT, MIDI_STAT_RX_EVT);
|
||||
+ rtems_message_queue_send(midi_q, &msg, 1);
|
||||
+ }
|
||||
+ lm32_interrupt_ack(1 << MM_IRQ_MIDI);
|
||||
}
|
||||
|
||||
rtems_device_driver midi_initialize(
|
||||
@@ -57,11 +60,10 @@
|
||||
);
|
||||
RTEMS_CHECK_SC(sc, "create MIDI queue");
|
||||
|
||||
- rtems_interrupt_catch(interrupt_handler, MM_IRQ_MIDIRX, &dummy);
|
||||
- bsp_interrupt_vector_enable(MM_IRQ_MIDIRX);
|
||||
-
|
||||
+ rtems_interrupt_catch(interrupt_handler, MM_IRQ_MIDI, &dummy);
|
||||
+ bsp_interrupt_vector_enable(MM_IRQ_MIDI);
|
||||
/* Only MIDI THRU mode is supported atm */
|
||||
- MM_WRITE(MM_MIDI_THRU, 1);
|
||||
+ MM_WRITE(MM_MIDI_CTRL, MIDI_CTRL_RX_INT|MIDI_CTRL_THRU);
|
||||
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
@ -2,3 +2,5 @@ lm32-stack-alignment.patch
|
||||
rbtree-container-of.patch
|
||||
chain-first-last.patch
|
||||
coremsgsubmit-race.patch
|
||||
milkymist-new-uart.patch
|
||||
fix-sysconf-includes.patch
|
||||
|
Loading…
Reference in New Issue
Block a user