Преглед изворни кода

usb: change "console" to "tty", with CON_ used for only the console

Separate out the console from the general tty subsystem, and use the
name CON_* specifically for the console channel.
H. Peter Anvin пре 3 година
родитељ
комит
7dd7eb2ed7
13 измењених фајлова са 56 додато и 46 уклоњено
  1. 11 11
      fpga/iodevs.vh
  2. 2 2
      fpga/max80.qpf
  3. 6 6
      fpga/max80.sv
  4. BIN
      fpga/output/v1.jic
  5. BIN
      fpga/output/v1.sof
  6. BIN
      fpga/output/v2.jic
  7. BIN
      fpga/output/v2.sof
  8. 1 1
      fpga/usb/usb_desc.conf
  9. 2 2
      iodevs.conf
  10. 3 3
      rv32/boot.mif
  11. 1 1
      rv32/console.c
  12. 1 1
      rv32/console.h
  13. 29 19
      rv32/ioregs.h

+ 11 - 11
fpga/iodevs.vh

@@ -1,4 +1,3 @@
-	localparam CONSOLE_CHANNELS        = 'h00000004; // 4
 	localparam IODEV_ADDR_BITS         = 'h00000004; // 4
 	localparam IODEV_ADDR_SHIFT        = 'h00000007; // 7
 	localparam SDRAM_ADDR              = 'h40000000; // 1073741824
@@ -7,6 +6,7 @@
 	localparam SRAM_BITS               = 'h0000000f; // 15
 	localparam SYS_MAGIC_MAX80         = 'h3858414d; // 945307981
 	localparam TIMER_SHIFT             = 'h00000005; // 5
+	localparam TTY_CHANNELS            = 'h00000004; // 4
 	localparam XDEV_ADDR_BITS          = 'h00000002; // 2
 	localparam XDEV_ADDR_SHIFT         = 'h0000001c; // 28
 	localparam _PC_IRQ                 = 'h00000020; // 32
@@ -35,10 +35,10 @@
 	wire [ 0:0] iodev_valid_sysclock = iodev_valid[2:2];
 	tri1 [ 0:0] iodev_wait_n_sysclock;
 
-	wire [31:0] iodev_rdata_console;
-	wire [ 3:0] iodev_irq_console;
-	wire [ 0:0] iodev_valid_console = iodev_valid[3:3];
-	tri1 [ 0:0] iodev_wait_n_console;
+	wire [31:0] iodev_rdata_tty;
+	wire [ 3:0] iodev_irq_tty;
+	wire [ 0:0] iodev_valid_tty = iodev_valid[3:3];
+	tri1 [ 0:0] iodev_wait_n_tty;
 
 	wire [31:0] iodev_rdata_usbdesc;
 	wire [ 0:0] iodev_valid_usbdesc = xdev_valid[1:1];
@@ -79,7 +79,7 @@
 				4'd0:	 iodev_rdata = iodev_rdata_sys;
 				4'd1:	 iodev_rdata = iodev_rdata_abc;
 				4'd2:	 iodev_rdata = iodev_rdata_sysclock;
-				4'd3:	 iodev_rdata = iodev_rdata_console;
+				4'd3:	 iodev_rdata = iodev_rdata_tty;
 				4'd4:	 iodev_rdata = iodev_rdata_romcopy;
 				4'd5:	 iodev_rdata = iodev_rdata_sdcard;
 				4'd6:	 iodev_rdata = iodev_rdata_i2c;
@@ -93,10 +93,10 @@
 	tri0 [31:0] sys_irq;
 	assign sys_irq[ 3] = iodev_irq_abc[0];
 	assign sys_irq[ 4] = iodev_irq_sysclock[0];
-	assign sys_irq[ 5] = iodev_irq_console[0];
-	assign sys_irq[ 6] = iodev_irq_console[1];
-	assign sys_irq[ 7] = iodev_irq_console[2];
-	assign sys_irq[ 8] = iodev_irq_console[3];
+	assign sys_irq[ 5] = iodev_irq_tty[0];
+	assign sys_irq[ 6] = iodev_irq_tty[1];
+	assign sys_irq[ 7] = iodev_irq_tty[2];
+	assign sys_irq[ 8] = iodev_irq_tty[3];
 	assign sys_irq[ 9] = iodev_irq_romcopy[0];
 	assign sys_irq[10] = iodev_irq_sdcard[0];
 	assign sys_irq[11] = iodev_irq_i2c[0];
@@ -110,7 +110,7 @@
 		(&iodev_wait_n_abc) & 
 		(&iodev_wait_n_abcmemmap) & 
 		(&iodev_wait_n_sysclock) & 
-		(&iodev_wait_n_console) & 
+		(&iodev_wait_n_tty) & 
 		(&iodev_wait_n_usbdesc) & 
 		(&iodev_wait_n_romcopy) & 
 		(&iodev_wait_n_sdcard) & 

+ 2 - 2
fpga/max80.qpf

@@ -19,12 +19,12 @@
 #
 # Quartus Prime
 # Version 21.1.0 Build 842 10/21/2021 SJ Lite Edition
-# Date created = 20:11:23  January 09, 2022
+# Date created = 20:26:44  January 09, 2022
 #
 # -------------------------------------------------------------------------- #
 
 QUARTUS_VERSION = "21.1"
-DATE = "20:11:23  January 09, 2022"
+DATE = "20:26:44  January 09, 2022"
 
 # Revisions
 

+ 6 - 6
fpga/max80.sv

@@ -693,11 +693,11 @@ module max80
 
    // The physical tty now just snoops USB ACM channel 0; as such it does
    // not respond to any write requests nor issue any irqs
-   tty console (
+   tty serial_con (
 	    .rst_n ( hard_rst_n ),
 	    .clk   ( sys_clk ),
 
-	    .valid ( iodev_valid_console &
+	    .valid ( iodev_valid_tty &
 		     cpu_mem_addr[6:2] == 5'b00000 &
 		     cpu_mem_wstrb[0] ),
 	    .wstrb ( cpu_mem_wstrb ),
@@ -709,20 +709,20 @@ module max80
 	    .tty_txd ( tty_data_out ) // DTE -> DCE
 	    );
 
-   max80_usb #( .channels( CONSOLE_CHANNELS ) ) usb (
+   max80_usb #( .channels( TTY_CHANNELS ) ) usb (
 		  .hard_rst_n         ( hard_rst_n ),
 		  .clock48            ( usb_clk ),
 
 		  .rst_n              ( rst_n ),
 		  .sys_clk            ( sys_clk ),
 		  .cpu_valid_usbdesc  ( iodev_valid_usbdesc ),
-		  .cpu_valid_cdc      ( iodev_valid_console ),
+		  .cpu_valid_cdc      ( iodev_valid_tty ),
 		  .cpu_addr           ( cpu_mem_addr ),
 		  .cpu_rdata_usbdesc  ( iodev_rdata_usbdesc ),
-		  .cpu_rdata_cdc      ( iodev_rdata_console ),
+		  .cpu_rdata_cdc      ( iodev_rdata_tty ),
 		  .cpu_wdata          ( cpu_mem_wdata ),
 		  .cpu_wstrb          ( cpu_mem_wstrb ),
-		  .irq                ( iodev_irq_console ),
+		  .irq                ( iodev_irq_tty ),
 
 		  .tty_rxd_break ( usb_rxd_break_rst ),
 

BIN
fpga/output/v1.jic


BIN
fpga/output/v1.sof


BIN
fpga/output/v2.jic


BIN
fpga/output/v2.sof


+ 1 - 1
fpga/usb/usb_desc.conf

@@ -115,7 +115,7 @@ usb_device {
 		     byte(500 >> 1)),	 # Up to 500 mA
 
 		# Descriptors for each ACM channel, starting at endpoint 1
-		acm_channels($consts{'CONSOLE_CHANNELS'},1)
+		acm_channels($consts{'TTY_CHANNELS'},1)
     },
 };
 

+ 2 - 2
iodevs.conf

@@ -13,7 +13,7 @@ our %consts = (
     'SDRAM_BITS' => 25,
     'SYS_MAGIC_MAX80' => unpack('V', 'MAX8'),
     'TIMER_SHIFT' => 5,		# 32 Hz
-    'CONSOLE_CHANNELS' => 4
+    'TTY_CHANNELS' => 4
     );
 
 # I/O address definitions
@@ -34,7 +34,7 @@ our @iodevs = (
     { -name => 'abcmemmap', -xdev => 1 },
 
     { -name => 'sysclock',  -irq => 'e' },
-    { -name => 'console',   -irq => 'l' x $consts{'CONSOLE_CHANNELS'} },
+    { -name => 'tty',       -irq => 'l' x $consts{'TTY_CHANNELS'} },
     { -name => 'usbdesc',   -xdev => 1 },
 
     { -name => 'romcopy',   -irq => 'l' },

+ 3 - 3
rv32/boot.mif

@@ -1295,11 +1295,11 @@ CONTENT BEGIN
 0508 : 64656C69;
 0509 : 3A6E6F20;
 050A : 6E614A20;
-050B : 20382020;
+050B : 20392020;
 050C : 32323032;
 050D : 3A303220;
-050E : 303A3834;
-050F : 00000A35;
+050E : 353A3432;
+050F : 00000A33;
 0510 : 00000101;
 0511 : 00000000;
 0512 : 00000000;

+ 1 - 1
rv32/console.c

@@ -11,7 +11,7 @@
 static __always_inline void __con_putc(char c)
 {
     /* Wait for FIFO space */
-    while (CON_FLOW_CTL && (CON_STATUS & CON_STATUS_TX_HIGH))
+    while (CON_FLOW_CTL && (CON_STATUS & TTY_STATUS_TX_HIGH))
 	pause();
 
     if (c == '\n')

+ 1 - 1
rv32/console.h

@@ -13,7 +13,7 @@ void __fmt_printf(1,2) con_printf(const char *, ...);
 
 static __always_inline void con_flush(void)
 {
-    while (CON_FLOW_CTL && !(CON_STATUS & CON_STATUS_TX_EMPTY))
+    while (CON_FLOW_CTL && !(CON_STATUS & TTY_STATUS_TX_EMPTY))
 	pause();
 }
 

+ 29 - 19
rv32/ioregs.h

@@ -79,25 +79,35 @@
 #define ROMCOPY_INPUT		IODEVRL(ROMCOPY,4)
 #define ROMCOPY_STATUS_DONE	1
 
-#define CON_DATA		IODEVB(CONSOLE,0)
-#define CON_WATERCTL		IODEVL(CONSOLE,1)
-#define CON_WATERCTL_TX_LOW(x)	((x) << 0)
-#define CON_WATERCTL_TX_HIGH(x)	((x) << 4)
-#define CON_WATERCTL_RX_LOW(x)	((x) << 8)
-#define CON_WATERCTL_RX_HIGH(x)	((x) << 12)
-#define CON_STATUS		IODEVL(CONSOLE,2)
-#define CON_STATUS_TX_EMPTY	0x0001
-#define CON_STATUS_TX_LOW	0x0002
-#define CON_STATUS_TX_HIGH	0x0004
-#define CON_STATUS_TX_FULL	0x0008
-#define CON_STATUS_RX_EMPTY	0x0010
-#define CON_STATUS_RX_LOW	0x0020
-#define CON_STATUS_RX_HIGH	0x0040
-#define CON_STATUS_RX_FULL	0x0080
-#define CON_STATUS_RX_STALE	0x0100
-#define CON_STATUS_RX_BREAK	0x0200
-#define CON_STATUS_USB_CONFIG	0x0400
-#define CON_IRQEN		IODEVL(CONSOLE,3)
+#define TTY_DATA(n)		IODEVB(TTY,0+((n) << 2))
+#define TTY_WATERCTL(n)		IODEVL(TTY,1+((n) << 2))
+#define TTY_WATERCTL_TX_LOW(x)	((x) << 0)
+#define TTY_WATERCTL_TX_HIGH(x)	((x) << 4)
+#define TTY_WATERCTL_RX_LOW(x)	((x) << 8)
+#define TTY_WATERCTL_RX_HIGH(x)	((x) << 12)
+#define TTY_STATUS(n)		IODEVL(TTY,2+((n) << 2))
+#define TTY_IRQEN(n)		IODEVL(TTY,3+((n) << 2))
+#define TTY_STATUS_TX_EMPTY	0x0001
+#define TTY_STATUS_TX_LOW	0x0002
+#define TTY_STATUS_TX_HIGH	0x0004
+#define TTY_STATUS_TX_FULL	0x0008
+#define TTY_STATUS_RX_EMPTY	0x0010
+#define TTY_STATUS_RX_LOW	0x0020
+#define TTY_STATUS_RX_HIGH	0x0040
+#define TTY_STATUS_RX_FULL	0x0080
+#define TTY_STATUS_RX_STALE	0x0100
+#define TTY_STATUS_RX_BREAK	0x0200
+#define TTY_STATUS_USB_CONFIG	0x0400
+
+#define TTY_CHANNEL_MASK	((1U << TTY_CHANNELS) - 1)
+#define TTY_IRQ_MASK		(TTY_CHANNEL_MASK << TTY_IRQ)
+#define TTY_NIRQ(n)		(TTY_IRQ+(n))
+
+#define CON_DATA		TTY_DATA(0)
+#define CON_WATERCTL		TTY_WATERCTL(0)
+#define CON_STATUS		TTY_STATUS(0)
+#define CON_IRQEN		TTY_IRQEN(0)
+#define CON_IRQ			TTY_NIRQ(0)
 
 #define SDCARD_CTL		IODEVL(SDCARD,0)
 #define SDCARD_CTL_SPEED	IODEVB0(SDCARD,0)