From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752894AbcADFd4 (ORCPT ); Mon, 4 Jan 2016 00:33:56 -0500 Received: from mail-bn1on0057.outbound.protection.outlook.com ([157.56.110.57]:4176 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752862AbcADFds (ORCPT ); Mon, 4 Jan 2016 00:33:48 -0500 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; alien8.de; dkim=none (message not signed) header.d=none;alien8.de; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0O0EY44-07-IAH-02 X-M-MSG: From: Wang Hongcheng To: Andy Shevchenko , Vinod Koul , Mika Westerberg , Greg Kroah-Hartman , "Rafael J. Wysocki" CC: , , , , Borislav Petkov , Huang Rui , Wan Zongshun , Ken Xue , Robin Murphy , Graeme Gregory , Tony Li , Xiangliang Yu , Wang Hongcheng Subject: [PATCH 6/6] Serial:8250: New Port Type PORT_AMD_8250 Date: Mon, 4 Jan 2016 13:31:41 +0800 Message-ID: <1451885501-2710-7-git-send-email-annie.wang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1451885501-2710-1-git-send-email-annie.wang@amd.com> References: <1451885501-2710-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)(5008740100001)(92566002)(77096005)(5001770100001)(50986999)(229853001)(76176999)(50226001)(101416001)(4326007)(106466001)(86362001)(47776003)(189998001)(2950100001)(97736004)(1220700001)(11100500001)(33646002)(50466002)(5003940100001)(87936001)(105586002)(48376002)(1096002)(53416004)(19580395003)(19580405001)(36756003)(586003)(5003600100002)(326664003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0864;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0864;2:QM7UzJXh5WG7zDwyIGmzsf0Fh1YkEFHurVthGM9NRMc03e+l8q4vM1wryn3Z+XvqsAvJ/xhrQiEkb3lHtx87Id9QYMEZxEd8j2iu0SresClEa8EQyq3LdBzwxv37T2aydeSnp8m8kobpbOJd4l93lA==;3:5FSdSAepSvgp9h3iqc5601pXC1Da1D8j5Kv6ORy+ZDSd9Pqy/ClA2WytvsnYIwNgHS3Mo98OyqJaiwdLH+lWKPkU7s4Ds14ivGxisVQ51K9wNtS8Q1xcDFx9oqWon3h9X70HtJ9WMpUPfA8ln9P+csUyjoiPZRx7UuEOkGi8l/ENKFaWgcQUlffXLzt+ysXcC1VWX/EJAzqKW6S9aYxm1sMD9OCS7jOYEL1Az/1U1JU=;25:HjypM01aMNgp1S1ZipxrHlyxt9/7U+FkT0wg25o803Aifqt+KszkxLBcj8uyIKwoOr0GFQ9Htls/scaUy+Ukdx0GNLN1NNF5S1FLVhFHneuHsSpnrOyA/74/bwCMb9O3B/IR1il4J2XKHR15G/wXy1SZLAaUf85Jo2c2rvGh4XS2V/cfc1XVRL7OzCVMCSMDqlfwkhEPWtfpbjJISiFSQK02OK47SVFvSiiQgZ0r9cZTGM9TXPhP473JIArGKNpGbLQXT94EDV3mHNEz37iz2g== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0864; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0864;20:A7cBaFOuqYfc2kPRfihGg7+RSf8DjdCYZpK/iEeQ6T7qgnWLXK7EUyyjZ3eXvvwmiLhO5iUdT7TCfSkHyl6vDl5HSIEzouOfF3DXgWx3YNw9dT2LBV4pNbd7tUfb1u5ChVROyin0nKKpzw8auNraQtLON4YSj2l4SR6WFkUwJ7F3GLZt6HX1JaluRPoHVzp+epwMKqqDNQglBMbxipIDaC1aj/Yt3Pe8jNvIQp3GZFghaP9gFNI6osIZUw/M9u2k+jpgSSCUfXyUrZCLR9Yngvj9ujCUxInvjGWUpnLiOaVRY8z2uXxEafpxJBI8b9HvPpic32DcGHsEBvJ1A33jM/fQrKiSQR1X2pQazdmUxrIzIWZlciBCLNgPb/eo/3CD3ZSMbM6YYFvyvhrdI9kokN6dzHAa6maEbUfUO1nGwGDkgUbL7ZsdB385/gVoJqsFBHRayXOtaxZM5WiByPGBN4QwE/9or80RUQykYxmVHmjJiTjAB3SbGMp9M02qyuC5;4:WDFMgB81GgzhxWHYsr5mRVfxMqzszUXcfqESJmxEy5TLcVfhGSulE5UA3Z2nyCVo18QUBZrkFjKXcK88xuOpSrfIxntPPsrozakmaSjKsVcvnoZgzud4xIiwGxLvr6OcF0YFTMwRDx3ZVfXyfxe1mKR1kHtUG/wWZx90H6O1qadJB1NSvtYLTyYE698xK7fI7juw6y845dKuwDdks+qhG0Yd9Tgq69swgeoWsGBWMpMURkf4n6m7rmqkb8pV05uVpv/je/0zp1xbAWG37zXETkRWYWQTUEqdSac4edK1Iu0XJg01fwZ8o5RjtwAIpRoXDJfGC8nrg6r/rzL2aoIjXLk6RolduVuUlVC+JNo/FiHzjV8RNoxHS+jUWdfhGIseWBJ0TXjvDz2J1nvz3IPMULMVXdWQIB7EHR4jNX+fHq4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(10201501046)(3002001);SRVR:SN1PR12MB0864;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0864; X-Forefront-PRVS: 08118EFC2B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR12MB0864;23:ew3U7UKOKr4dzF4bq3coc9aMMgXa66FA6BhpjRPXT?= =?us-ascii?Q?vABTYWmgdM18LgAaxk8huU8Owy1yCQrsjYUUGwxifSLy7Gm7kwDCpCkwFUty?= =?us-ascii?Q?8kgY7cyq4ayB9rfDobMW34D2P96886qBIsSQui1/LWyaMlspAPLbcPJ7zM0r?= =?us-ascii?Q?n4DbLne4HtLPVf9nQAw7LEQdVO2kDGI9tJ9nXgj40jjjIPcwrizYK3T2It+j?= =?us-ascii?Q?xR52CuQy4kgIN6cGQ2u+jPAbTrOfXOEhQGd+azVfJuHvy3ic+UFgmgRWa4PD?= =?us-ascii?Q?ZzvFVm8Grqoj5iA1AKQsRcM+lnvlqjztAvaAHRcrBHq0ZmaNLtEHhMaroecv?= =?us-ascii?Q?bIpXFgss/wTqlKzmtoh12U2xO9nm5DAcjYGdcwNh4GRTic4i5zXK7i5L1jWR?= =?us-ascii?Q?ZImI6Oc1LNl2r5MgcuozdtZCs/JXej9Ti7rnUK9uMkogW4USGLIRZppujO/M?= =?us-ascii?Q?MLpZU9h6aSeL1yIShGsVAnHKptTvqeXnTbKwVFZDQKovNrp2z6EIrxfiT9d5?= =?us-ascii?Q?7Md13TDVxJ/an1+Ftlw3mi3P94ooD5Z5fWjM5GXHQfL24rf3hJnEdkrCb1LF?= =?us-ascii?Q?ZPubsMZbbAwIdKpUZOXejDj01wBR93+49J91Yj8vGb8aANSFj8T5LaNC9vKg?= =?us-ascii?Q?JQA4JkCO3CzYDLbTNtx22DgQNiCRr29QuoSnkSlQx/P4UDY9mBDgTjGpl/Cf?= =?us-ascii?Q?sNB0NzBcsad9Gi7BKsasnPQxUGt7RSYRA6CFfy5z2b7onI/AviAa61Mfx7nr?= =?us-ascii?Q?h9CGqL9xY/brbOn5RrsBf4wHTmj1sY79J5elxnHZE1sWd/UEkn/zWgEx1XfO?= =?us-ascii?Q?AnP7e50l2jQvy+ludeM9PJrQNCBIvIuBQc/JhTMNVJUOP4HD+yt4blZy4uzP?= =?us-ascii?Q?U14Gmv5K/p4KtJskkHtRo9A8tbEoX9x9nl/16Pv6nEskLLTn3ijAa5G2cne5?= =?us-ascii?Q?OjP42pgqxQrr0TQqbN0FnKZGT+mIGLq8p5cCx52yVosWJv9sX6dZv9QXFGDN?= =?us-ascii?Q?zGqQ5s0MG2q19s7bVrTgFg2?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0864;5:n7wiXmaMeANM02xUx5w/r7tFtyoVuXrj3feJ6/OZdloZqSChsYGTsHFA4avaAt7AC8vREFIOsVsVL3xJ7FgrBqqUQdZEn7GeKnRTNb4vESApS/fjbtTaVBmLTQ4Qet0b2sShzdzFVwaV6bAVQdfkfA==;24:o4FfBHzdpyo3fvmKXbNDi2CLzWDb3XEp2bSzbYwtnB01FxB97CJqiyAbp3lCw4iZax7JPOTR4x92gs5RVUUh1FD7wGEAGov6VD/hxUsH9c0=;20:S4CLh4MytIUYvKc7z8Q4YIBarwnhy4YQSybx90OVI+byIRwDEW+KnTxK8XUFsSHsmm7a2FhBAb0cNj+haniPzHCZ0H13037nG5FJuslfTGKt1Lcx15g7jvD8hzMWNUqPTkBWMYIS/w9fZheACLrTvTLVXi4y8i1Ton+ngkjLX8lJInfLlU9Vg/wTeohQLNaL6/HGwOYXRNo+essUOTH0a99dg7Dw74crtcm30l4JeoyKBIPHQVKT7gL91t0p1vif SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2016 05:33:42.9095 (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: SN1PR12MB0864 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 | 11 +++++++++++ drivers/tty/serial/8250/8250_dw.c | 15 +++++++++++++++ drivers/tty/serial/8250/8250_port.c | 9 +++++++++ include/linux/platform_data/8250-dw.h | 8 ++++++++ include/uapi/linux/serial_core.h | 3 ++- include/uapi/linux/serial_reg.h | 1 + 6 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 include/linux/platform_data/8250-dw.h diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c index 1f16cca..e8e43fb 100644 --- a/drivers/acpi/acpi_apd.c +++ b/drivers/acpi/acpi_apd.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "internal.h" @@ -56,6 +57,11 @@ static struct dma_pl330_platdata amd_pl330[] = { .num = 0, } }; + +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 @@ -115,6 +121,11 @@ static int acpi_apd_setup_quirks(struct apd_private_data *pdata) char amba_devname[100]; int devnum; + ret = platform_device_add_data(pdev, &amd_dw8250, + sizeof(amd_dw8250)); + if (ret) + goto resource_alloc_err; + resource = kzalloc(sizeof(*resource), GFP_KERNEL); if (!resource) goto resource_alloc_err; diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index a5d319e..e7d9f01 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -27,6 +27,7 @@ #include #include #include +#include #include @@ -66,6 +67,7 @@ struct dw8250_data { unsigned int skip_autocfg:1; unsigned int uart_16550_compatible:1; + unsigned int has_pl330_dma:1; }; #define BYT_PRV_CLK 0x800 @@ -303,6 +305,7 @@ static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data) static void dw8250_setup_port(struct uart_port *p) { struct uart_8250_port *up = up_to_u8250p(p); + struct dw8250_data *data = p->private_data; u32 reg; /* @@ -326,6 +329,14 @@ 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 (data->has_pl330_dma) { + p->type = PORT_AMD_8250; + + 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; + up->tx_loadsz = p->fifosize / 2; + } } if (reg & DW_UART_CPR_AFCE_MODE) @@ -339,6 +350,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 +480,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 +488,8 @@ 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..b89a326 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, + .rxtrig_bytes = {1, 4, 8}, + .flags = UART_CAP_FIFO, + }, }; /* Uart divisor latch read */ diff --git a/include/linux/platform_data/8250-dw.h b/include/linux/platform_data/8250-dw.h new file mode 100644 index 0000000..97cdb9d --- /dev/null +++ b/include/linux/platform_data/8250-dw.h @@ -0,0 +1,8 @@ +#ifndef _PLATFORM_DATA_8250_DW_H +#define _PLATFORM_DATA_8250_DW_H + +struct plat_dw8250_data { + unsigned int has_pl330_dma:1; +}; + +#endif diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h index 93ba148..89d44b0 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..66686b9 100644 --- a/include/uapi/linux/serial_reg.h +++ b/include/uapi/linux/serial_reg.h @@ -20,6 +20,7 @@ #define UART_RX 0 /* In: Receive buffer */ #define UART_TX 0 /* Out: Transmit buffer */ +#define UART_IER_PTIME 0x80 /* Enable Programmable Transmitter holding register int. */ #define UART_IER 1 /* Out: Interrupt Enable Register */ #define UART_IER_MSI 0x08 /* Enable Modem status interrupt */ #define UART_IER_RLSI 0x04 /* Enable receiver line status interrupt */ -- 1.9.1