Ver Fonte

1.修复串口驱动bug;2.修复uboot使用sdmmc2导致的数组越界问题

huangliang há 2 anos atrás
pai
commit
7c28b9588b

+ 1 - 1
linux/drivers/tty/serial/ark_hsuart.c

@@ -1395,7 +1395,7 @@ static unsigned int ark_hsuart_tx_empty(struct uart_port *port)
 {
 	struct ark_hsuart_port *uap = (struct ark_hsuart_port *)port;
 	unsigned int status = readw(uap->port.membase + HSUART_UTS);
-	return status & HSUART_UTS_TXFE ? 0 : TIOCSER_TEMT;
+	return status & HSUART_UTS_TXFE ? TIOCSER_TEMT : 0;
 }
 
 static unsigned int ark_hsuart_get_mctrl(struct uart_port *port)

+ 1 - 0
linux/drivers/tty/serial/ark_uart.c

@@ -2538,6 +2538,7 @@ static int pl011_tx_data(struct uart_amba_port *uap,
 			while(pl011_read(uap, REG_FR) & UART01x_FR_TXFF);
 			pl011_write(buf[c], uap, REG_DR);
 		}
+		spin_unlock_irqrestore(&uap->port.lock, flags);
 		return 0;
 	}
 

+ 3 - 2
u-boot/board/arkmicro/ark1668e_devb/ark1668e_devb.c

@@ -133,8 +133,9 @@ static void usb_controller_reset(void)
 	rSYS_USB1_CFG = 0x3c2e0020;
 }
 
-#define ARK_MMC_CLK     	24000000
-struct dwmci_host dwmcihost[2];
+#define ARK_MMC_CLK     	45000000
+#define ARK_MMC_NUM			3
+struct dwmci_host dwmcihost[ARK_MMC_NUM];
 static int ark_dwmci_init(char *name,u32 regbase, int bus_width, int index)
 {
     struct dwmci_host *host = NULL;

+ 3 - 2
u-boot/board/arkmicro/ark1668e_devb_emmc/ark1668e_devb_emmc.c

@@ -127,8 +127,9 @@ static void usb_controller_reset(void)
 	udelay(10);
 }
 
-#define ARK_MMC_CLK     	24000000
-struct dwmci_host dwmcihost[2];
+#define ARK_MMC_CLK     	45000000
+#define ARK_MMC_NUM			3
+struct dwmci_host dwmcihost[ARK_MMC_NUM];
 static int ark_dwmci_init(char *name,u32 regbase, int bus_width, int index)
 {
     struct dwmci_host *host = NULL;