Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755358AbbLDDlT (ORCPT ); Thu, 3 Dec 2015 22:41:19 -0500 Received: from mail-bl2on0065.outbound.protection.outlook.com ([65.55.169.65]:3712 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755093AbbLDDlQ (ORCPT ); Thu, 3 Dec 2015 22:41:16 -0500 X-Greylist: delayed 935 seconds by postgrey-1.27 at vger.kernel.org; Thu, 03 Dec 2015 22:41:15 EST Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; 8bytes.org; dkim=none (message not signed) header.d=none;8bytes.org; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NYTDKE-07-29B-02 X-M-MSG: From: Wang Hongcheng To: Vinod Koul , Mika Westerberg , Joerg Roedel , "Greg Kroah-Hartman" , "Rafael J. Wysocki" CC: , , , , , Borislav Petkov , Huang Rui , Wan Zongshun , Ken Xue , Tony Li , Wang Hongcheng Subject: [PATCH 7/9] Serial:8250: New Port Type PORT_AMD_8250 Date: Fri, 4 Dec 2015 11:24:24 +0800 Message-ID: <1449199466-6081-8-git-send-email-annie.wang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1449199466-6081-1-git-send-email-annie.wang@amd.com> References: <1449199466-6081-1-git-send-email-annie.wang@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(189002)(199003)(1096002)(5008740100001)(36756003)(101416001)(92566002)(50466002)(2950100001)(5003940100001)(77096005)(48376002)(50986999)(586003)(1220700001)(229853001)(97736004)(575784001)(106466001)(5001770100001)(11100500001)(76176999)(5003600100002)(47776003)(50226001)(33646002)(19580405001)(53416004)(189998001)(19580395003)(87936001)(105586002)(86362001)(326664003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0853;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0853;2:LRooF6gF4RO7fS+0/G4pbY8831mUT6SwX+8FHI18fXQgqv/7i0fAdogXuyzaR0DNAUBcyPTB/bMzrXfmkxhiuP35A0iBzyL5wY/9fut3XKylyPUkp2EvVaLru0ZIhIvTL7FDxQHbSCurNFQ7dqOazA==;3:a8FGgmvp6gqX1tkxBB/dR4P7ok9sT3TR0SSWag7xe8JXxaPmRftlBWCupotRO0pw3as1DQt7CXitvP7QYrqa3S2tKjqEy5hu+kxRRd47/voIYXc65gp0C3QSwNCNI6/ZGfxQg52tQt5qG45szfxB8FtGpA/f8vRgZNy5JtFJOTQ/E+1bO0idJAW4zJqzknt0kj4vCh3Et5C7h9mNNUC5b1few6C6P/xIvdcFCn8ncDg=;25:Y9UMGytBteknQeWowGHsXr66/QVpzfeJtVqm6tJgKXoRCIs7JhAic2byrWEDg4FsUIPVYj14fNUnmbpp6YvRhe0C80gtq9MIe3NqGi9NyOinNLAbC/BHoKVvEXSIDIrLa8xs82Sc7wFX/P8AFKgOKtaS3BWVIfWy6ZrabxBNic0g4G6VYVRwoqeXVHC0/kV30rUt9z4RYi37ZJsH3K/YDcveC1mrk/7ttXdcukYJvOYcdOizJecwDuYFwbUsnQv2HJzdj0+qPsx8oW1Xuf0cfg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0853; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0853;20:oS+l8acEgCt3diqlR4x+Weo3HIGSSdxnN+YpTzIBsFlt1CwFpqEZXmaZg/KpTQaqScnL6j+SXMvbAZdniKnTcgt4KwL5NW3Hh0/cYfVz7nDguFW3/YkK3PBBYrTBBKWoM+YgpT9CCNhETDDlLKEPJlkMtA1taD6tUQ+wNbDhYNLMplE6GPGb9LlOCgmHZyNrka3K+3Pr251HmwRLiyG79w/h9kf88pWJn6AqROK2O2pZmASc6vNl1WR2imJdBsntQ3148gynGLfOHnqE9Cc8wOZ8xqa9OWIhpFhtn4TA8l6WRlmp1AWx/zrflTEY39pLCcwpmJMhRYMhWbO3+kLuwyAyqEuo17zZ594BJHASc2wM0M9gkwCEXwe6nI/gs1HpTgqQbhMMotb3LUTQ/H5JyxRIOVEQ34M369MGuFDVMVeEhRvOWTi8ojia1sPYzxTuXdrkwBctuo2PCgknTJ69bDoVwEXa7AxI+avye2yZnwE9nPgfKraMxziatRCkmlgm;4:X5NecyTjeCZ3ZJaMcw5ehPwIWERl6QJF4ih4pvBk0QiQiZBGZJMli6oXYH/tuFoz5qfASne/O8NV6MMbONURcuCwfOSRirGuv37Vt+btkls3WGceJHE0a+g2L4HxxqDAmKu6FLttbGhnRbTcTGvc9zzHc75YeY4j+s3gpfXyf2kYr7RhVCIT8NU9bSwBemIQsETfOgPE2zm+nPikG6JEGuU6EhjSupQZ+3JmJea4WreoczBTi7JYPFeT2uPU8u1n00ItoLY1BaZ15Vreyld4nGhqQGR3WIUPViFR1Wpdz99Zi37YZ3zCSOe1NK61VltHNKLUL688DqfH4Tgf67VFcrxTDndLVFkU3ey/GBZz+gHxExNysXooOq/71fA9m2tZF0/s7BCMe/Mv6XIulAjHFtGAxNL0QrgnAbWILmcu/DQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(10201501046)(3002001);SRVR:CY1PR12MB0853;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0853; X-Forefront-PRVS: 07807C55DC X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR12MB0853;23:VrvU48jirgkC0nyzCbdoM1FCCGMRINRA4jwFVb3Z7?= =?us-ascii?Q?J2zGnGHq3rAjjstggQsY94RY6UpLZm9emtxIy5HYqOr7P1HFM84Y1t+k0Vhm?= =?us-ascii?Q?6S6Avix2L7IXjR1tR0FAXH+yVmts+dO0ZcJqiGRZe5sOoGCl/1rH0QzD6Imt?= =?us-ascii?Q?qv+D8HH+Bvpb107Y1meRskpu7+ThEx8ZN3qMZQZaqvhYB7CYXRMQ5b0pYGPq?= =?us-ascii?Q?xwGqqDQteWVRZV0VqpJmOAXh+HIW0Sv0UYBquvRUMhMDZ55vzPB9JL/jzl3k?= =?us-ascii?Q?bWJhtVmj/OBQ/P7Y/W97MWObwDg/sOX573yYkgdN4OyVHkodCPcuG01Rthpi?= =?us-ascii?Q?4cSDYdpDpxxzHaei0M3ho8UYfbq0qCdDNHHJC5PI+tc/6dgNNUeuvBKn+2TI?= =?us-ascii?Q?23oGzS3YVe6LVS/Llb9xOmgrCMRNUaYWD1M+77uEm69Qn6dr4h/TgcnoiQFG?= =?us-ascii?Q?psfJMomkjprNadkiEbZHgRVh/wVl3JN9pRc4fXAhuvA5+L+8NN7dMmOlPvWS?= =?us-ascii?Q?/Mm0XCwMI1kdlxT7qizqE8xKLl10X4UGOfqcJ6++Dr1djhCj4feY9ltldb4l?= =?us-ascii?Q?Cq18it9uem/WUcKZONrW2fPKq1nxDOPbtEgeXgeZE/xyjRE+F3ud/knxMc6T?= =?us-ascii?Q?eW6MRYHSe2WYucLuvJ6ge362AR/kU9B5UKOOCPt1a3wVB9rG6WfZIXcbMio5?= =?us-ascii?Q?G35CvpfG/R6WyW4z+QChHPNrnj43ZsApVTSK7mH8NyXpxuY2z1Y+WPsevW+B?= =?us-ascii?Q?7LM6hfX+toXsXhIpIJyq5Kfx+KnP/XfUEUH91Ab5hIgRv5VgeoHAe/r9ZtUj?= =?us-ascii?Q?WsqVjvgK+lXSN482h0NBl0rwGjw39uMqoHp8tW3VTBuq+D6BcafGORXy9ME1?= =?us-ascii?Q?xGKlmGoAuY1F7wVBuBQJS1/YIGzUXg96h9a5oIlej3i1TWVCGX5JIkCXBlmi?= =?us-ascii?Q?cDI982jtPQEFHwSj83PvI86yeotJRXYYb6CC7Jm3SXwsLyXb+Wbj6s4Phclr?= =?us-ascii?Q?qU6f4yJSZBVh4cre3FbgJFS?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0853;5:3WEUUpa7owCsR1EvxVgWW4TOCtJBHfd88BA6koTxqCJEpg506/smDIDF0nOTgBETD62Ppr4MbKdqZYoy9/nPfG4Emr2mn5v/jDKv+5onQNrFJNIkpe5L/DCQOopHq1ZEnLSZXVCaaq2h3gU0h1B0Ug==;24:fQZ5i8xi19yYjnJfAp0prB1mi5yT7H2lq2VCo5REaaZlX2Zfm0cbUzDO+TKzUh4cRnWcwFKemYqQcZ330mroakUNToB39FWiER8N5EvR1eA=;20:oJgbNONz6ER+8Smo3hYErFOOIXx9wl1gQVxspVevb82ZW5aci9LPFiJmoxSt4u18/Grs7Y7jQEU7qb738jCxBgpfpGW6xjYgxdnSd3CPiTv1QB/SEvuYJgPhRysA02UUAFOegSxZH9Sx0oIvb8kd+5TM3jbBg6RzqoZO19wwiV92Zr3zLT/JxIkeTrnYxCdTnWpycovOl+DSIpm49OkkGmwd6wfcxald9U88Wvg8VxD2wZ9FfyZjkU6H02gd+i4g SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2015 03:26:39.9500 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0853 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5982 Lines: 180 Set a new port type for AMD Carrizo. Add has_pl330_dma to 8250_dw's private data and init fcr,ier as well as dma rx size. Signed-off-by: Wang Hongcheng --- drivers/acpi/acpi_apd.c | 10 ++++++++++ drivers/tty/serial/8250/8250_dw.c | 16 ++++++++++++++++ drivers/tty/serial/8250/8250_port.c | 9 +++++++++ include/linux/serial_8250.h | 4 ++++ include/uapi/linux/serial_core.h | 3 ++- include/uapi/linux/serial_reg.h | 2 ++ 6 files changed, 43 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c index 906a20f..787f477 100644 --- a/drivers/acpi/acpi_apd.c +++ b/drivers/acpi/acpi_apd.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "internal.h" @@ -49,6 +50,10 @@ static struct dma_pl330_platdata amd_pl330 = { .acpi_xlate_filter = apd_acpi_xlate_filter, }; +static struct plat_dw8250_data amd_dw8250 = { + .has_pl330_dma = 1, +}; + /** * struct apd_device_desc - a descriptor for apd device. * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM; @@ -164,6 +169,11 @@ static int acpi_apd_create_device(struct acpi_device *adev, goto err_out; if (!strncmp(pdev->name, "AMD0020", 7)) { + ret = platform_device_add_data(pdev, &amd_dw8250, + sizeof(amd_dw8250)); + if (ret) + goto err_out; + memset(&amba_quirks, 0, sizeof(amba_quirks)); setup_quirks(pdev, &amba_quirks); diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index a5d319e..a5ae9b6 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -66,6 +66,8 @@ struct dw8250_data { unsigned int skip_autocfg:1; unsigned int uart_16550_compatible:1; + + unsigned has_pl330_dma:1; }; #define BYT_PRV_CLK 0x800 @@ -304,6 +306,7 @@ static void dw8250_setup_port(struct uart_port *p) { struct uart_8250_port *up = up_to_u8250p(p); u32 reg; + struct dw8250_data *d = p->private_data; /* * If the Component Version Register returns zero, we know that @@ -326,6 +329,16 @@ static void dw8250_setup_port(struct uart_port *p) p->flags |= UPF_FIXED_TYPE; p->fifosize = DW_UART_CPR_FIFO_SIZE(reg); up->capabilities = UART_CAP_FIFO; + if (d->has_pl330_dma) { + p->type = PORT_AMD_8250; + p->flags |= UPF_SHARE_IRQ; + + up->ier |= UART_IER_PTIME | UART_IER_THRI | + UART_IER_RLSI | UART_IER_RDI; + up->fcr |= UART_FCR_R_TRIG_10 | UART_FCR_T_TRIG_11 | + UART_FCR_DMA_SELECT; + up->tx_loadsz = p->fifosize / 2; + } } if (reg & DW_UART_CPR_AFCE_MODE) @@ -339,6 +352,7 @@ static int dw8250_probe(struct platform_device *pdev) int irq = platform_get_irq(pdev, 0); struct uart_port *p = &uart.port; struct dw8250_data *data; + struct plat_dw8250_data *pdata = dev_get_platdata(&pdev->dev); int err; u32 val; @@ -468,6 +482,7 @@ static int dw8250_probe(struct platform_device *pdev) p->handle_irq = NULL; } + data->has_pl330_dma = pdata ? pdata->has_pl330_dma : 0; if (!data->skip_autocfg) dw8250_setup_port(p); @@ -475,6 +490,7 @@ static int dw8250_probe(struct platform_device *pdev) if (p->fifosize) { data->dma.rxconf.src_maxburst = p->fifosize / 4; data->dma.txconf.dst_maxburst = p->fifosize / 4; + data->dma.rx_size = data->has_pl330_dma ? (p->fifosize / 2 + 2) : 0; uart.dma = &data->dma; } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index 52d82d2..b258edc 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -269,6 +269,15 @@ configured less than Maximum supported fifo bytes */ .rxtrig_bytes = {1, 4, 8, 14}, .flags = UART_CAP_FIFO, }, + [PORT_AMD_8250] = { + .name = "AMD_8250", + .fifo_size = 256, + .tx_loadsz = 128, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 | + UART_FCR_T_TRIG_11 | UART_FCR_DMA_SELECT, + .rxtrig_bytes = {1, 4, 8}, + .flags = UART_CAP_FIFO, + }, }; /* Uart divisor latch read */ diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index faa0e03..4652783 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h @@ -42,6 +42,10 @@ struct plat_serial8250_port { void (*handle_break)(struct uart_port *); }; +struct plat_dw8250_data { + unsigned has_pl330_dma:1; +}; + /* * Allocate 8250 platform device IDs. Nothing is implied by * the numbering here, except for the legacy entry being -1. diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h index 93ba148..6a06651 100644 --- a/include/uapi/linux/serial_core.h +++ b/include/uapi/linux/serial_core.h @@ -56,7 +56,8 @@ #define PORT_ALTR_16550_F128 28 /* Altera 16550 UART with 128 FIFOs */ #define PORT_RT2880 29 /* Ralink RT2880 internal UART */ #define PORT_16550A_FSL64 30 /* Freescale 16550 UART with 64 FIFOs */ -#define PORT_MAX_8250 30 /* max port ID */ +#define PORT_AMD_8250 31 +#define PORT_MAX_8250 32 /* max port ID */ /* * ARM specific type numbers. These are not currently guaranteed diff --git a/include/uapi/linux/serial_reg.h b/include/uapi/linux/serial_reg.h index 1e5ac4e7..13e8294 100644 --- a/include/uapi/linux/serial_reg.h +++ b/include/uapi/linux/serial_reg.h @@ -25,6 +25,8 @@ #define UART_IER_RLSI 0x04 /* Enable receiver line status interrupt */ #define UART_IER_THRI 0x02 /* Enable Transmitter holding register int. */ #define UART_IER_RDI 0x01 /* Enable receiver data interrupt */ +/* Enable Programmable Transmitter holding register int. */ +#define UART_IER_PTIME 0x80 /* * Sleep mode for ST16650 and TI16750. For the ST16650, EFR[4]=1 */ -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/