Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933630AbbGVJf5 (ORCPT ); Wed, 22 Jul 2015 05:35:57 -0400 Received: from mail-db3on0081.outbound.protection.outlook.com ([157.55.234.81]:32109 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756364AbbGVJfy (ORCPT ); Wed, 22 Jul 2015 05:35:54 -0400 Authentication-Results: spf=fail (sender IP is 212.179.42.66) smtp.mailfrom=ezchip.com; synopsys.com; dkim=none (message not signed) header.d=none; From: Noam Camus To: , CC: , , , , Noam Camus Subject: [PATCH 1/4] serial: 8250_dw: Add support for big-endian MMIO accesses Date: Wed, 22 Jul 2015 12:34:56 +0300 Message-ID: <1437557699-25722-2-git-send-email-noamc@ezchip.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1437557699-25722-1-git-send-email-noamc@ezchip.com> References: <1437557699-25722-1-git-send-email-noamc@ezchip.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-AS-Product-Ver: SMEX-11.0.0.1191-8.000.1202-21696.003 X-TM-AS-Result: No--4.307100-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD042;1:Mp5N25S6Ab0557mIEsPC9x6+yfjg2tfmY6rlmcLeSIycX8YSADkkAmRvpIj05RfM7GvRq9ykfsh/RckSpDc3GycccFWKm2rr64QVdYl7ZttDQOKvJI5G/c+iLljCpDiYT4m1l4yUoAe1lr2JdOQnOpIu0H3RKH/QBc4PJdxlsuf+WV/d6gsNvXM+WugNH6kopwu1jeYR8cL7qPgBE3/tqG7gxCUd/S7mI8ow4x2Aa/DcuShmeGe8irhVUKAlWCwKJBarHECNz/TeZrZBL2xlbjjKQFVvzc77Cv+O0TDdoELKCay+Ie8xkhBL01HkTAZWkSzrif3qCnd/JaeUckPe+/K1hNOoFi3jvs6f3s0hxMvKOgYHmMj3zOjKk/3dfIqDDG6Z/aA3XD6goKfzfBFPRTczli0oKU5834EJaR+j9rw= X-Forefront-Antispam-Report: CIP:212.179.42.66;CTRY:IL;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(339900001)(199003)(189002)(33646002)(6806004)(62966003)(5001970100001)(77156002)(36756003)(2950100001)(50466002)(50226001)(48376002)(47776003)(49486002)(77096005)(189998001)(5003940100001)(86362001)(107886002)(229853001)(5001920100001)(104016003)(106466001)(5001770100001)(575784001)(92566002)(46102003)(50986999)(105606002)(76176999)(85426001)(19580395003)(87936001)(19580405001)(4001430100001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR02MB1143;H:ezex10.ezchip.com;FPR:;SPF:Fail;MLV:sfv;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB5PR02MB1143;2:J9Qd34fRUfKXr8Tdzc6KvoBRVAvYgdMtET3kMBRYFxdhnizmpQCuY1iKjAot7gcd;3:4HBsH6Pd0qwzpNAm2IPshSgrbOLadapvKFNLxpb2yR6CR9NEYSG8go/jXss4QY+A1XTaoR1LjYFPRlMryjX0zJwUYStJdNNpqjQGrNn5nBTngLtxzZbgLMcDaJqNk4ahMtAQjACua8IZJdOvqUkD+jMWqpUVyPdeFzIlniiR6Vi7AJAg67XfNOtxS8HUSWjd7gJJL85QBdIbYeHez4TxLTnIFg3IwJTdXmzMqeLCkmE=;25:Lvs3rcHVToAuPqKtnMM5Fet4/viDA0HpIszwDS+bbayg8BgjtmirQE5QyX4JXMn19YYS5CBJS0qXHuSevU+OGa8ZInq8g2Y4MBtSfHMDTDqciUHQm5wm4aNljPxaiJfUyRl2gPpqpsZYWE12XZfQqqpgJ2UT75bJ7SIqMF8XFW/7pZlG+VVKdFirxcHlRu6WCyCA1hKqCcZRdESNLHeO9gT8y58IfWYUUjptLXxZTWjoPTMRlSF4aI2EI1G+MxgxYmwrzI1ayRoZ4sJOCllkzw==;20:UJzb/fx2TumAfrDH0xsrAjG19S3l+7L0tAzgCzUSjkNzU2/ftVwi827sDLAGR1p2w9GU5TFGUizxKAzZBVyjOBZnkk+gwytxQjvW1Q8ddHMaO9Tsl8lRHI8bDZ6mO3+Ne8kjL3Z5cejp9OtqJRVANd/AUS1PsOaP0vXEixA5Cg0= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR02MB1143; DB5PR02MB1143: X-MS-Exchange-Organization-RulesExecuted X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:DB5PR02MB1143;BCL:0;PCL:0;RULEID:;SRVR:DB5PR02MB1143; X-Microsoft-Exchange-Diagnostics: 1;DB5PR02MB1143;4:ng9e01gzragsP1lore3cQVTurl3ITssZuP7SVgZmhlEOwZidh4Tsp1G9E9Lmb8kwCYSMyl6HxdgA2PwK2fZ4/Q2cKdVYoHy9HSDE5VHv8W4HMABFd32ZVD6KdGVaQd9RoKntEXfU55HpskVxz72i7ESYmVKFeVkA1Aw47Y2W4MMhEObPglOTYJ/n+Y519bB+OX8YMUUNZgD7chil2qaZLBcH4OOjjwiwZD7qEdkm/DHQOhQGyU9Nyl6pazTpCBB/GjXZ5rcbTZXLqH44L/HeAwK/mcNL9cq+4ZXwmAuott4= X-Forefront-PRVS: 0645BEB7AA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB5PR02MB1143;23:/DZN3TqD4HFiuddONWmF/tik+mh+wTYVi+VBK3Wn0?= =?us-ascii?Q?htZTe7NqrXQywHkbtlkv4BqgPwG9rdH17hA1GcQ+23AlxxOND1LQLvq7c3vs?= =?us-ascii?Q?hWdDNx96C3M56VLgjfsOxJk/7hMNkh9jDZ1Dh8h+NX6aNLB3q7hO93RijhXL?= =?us-ascii?Q?W7YJ2swgoLhmgZ5FYjU+XMMHPYHjkdqR8qp5gNLGp6+AsmhkieZyHhPT3tbi?= =?us-ascii?Q?XXtwgwGklPBpb3pJo2W7RSfqJtsAoeFFrMe0mxZtQAgPsIkNY2vNXRjV/BsD?= =?us-ascii?Q?EaFOzuCA/3GtvtsieXWFXVtomBvyBxEyRzeYlkYS9fdep5K3H6IWnDfF95ad?= =?us-ascii?Q?Bh8D+1Wl5oJ3+CSsbgnbAxHNQLifMIdH0bC0m9twT0uyE+l9S13w526po1z0?= =?us-ascii?Q?hn3kgXDR8nXp5xJuZY6ImjKLviBnOE4JhaLtj/qxo1hy+rRDPRaW7GxaTIOu?= =?us-ascii?Q?kqoP2LEE6H0y+S7nyTy7MgAsQhEe3zFPpt4zdXQEDsHr8qVDh1UZxo4+IbDM?= =?us-ascii?Q?lrVnC/6Qjpjq2JKJqRawS+/KrudW02TicPw522nOcDZvHI3dDIT2lR+u+DA2?= =?us-ascii?Q?JwMjvCCg4c3cuF7El4Gx+rQ/G1EyXNv3IeU7SR+CFuxuRcVISyldeTiY9nGP?= =?us-ascii?Q?Yw/7JyZUfC+jZAmOrp/P79Afa4eX2jUwahSv7n1cje48goP4LxpqlQUVDwtK?= =?us-ascii?Q?vgmeY5C0EtuyX3UPHwhGuD8pOimACqrWxmYMvXgSrAiKgjy0lpKQa8Pue3h4?= =?us-ascii?Q?XqgXJFpz5cdqE2tHjzWYMPD3wfoWyqfScy6Lomx8FzvH23YxS2iTz4RUPOCI?= =?us-ascii?Q?VIa4JISHGpeTbpzVMTMWmo/cI7/hraENwLrHqB5Xje7AGxFcgXQJAfbjYtKv?= =?us-ascii?Q?y2Ug7HCv7IsCXYJj0y23vY4xHGLxUAG4AIaK0nl3JvvrRKH8hQuszNEwIZWC?= =?us-ascii?Q?qOgNn8m2QeM8/tI6VHikPpzJlo6L74ZyVM5dyRq+WNOs4iE3luFpVDJCrNue?= =?us-ascii?Q?lBLUtNQBd6/jE4GGvRFqryIfJqtVhY4S2xdQg+I+IrxmQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR02MB1143;5:oZ5mAhNAVYZtqXq2gzz6oLnsua/UMkNrU0VdX3BEYD2hIq12lY7cY/vxf7HgmNLUHCIWiiX5Ou9YYOgS1kleZZleE9Zqh87UIdVthEht6h/i0nnJiP339MMBg66TYlD21r2mcZXpgyc/nHJVIyarYw==;24:fU3hqzwMgd9lXPB//+csoRsMKaBU/OKaXeoaDv5ganERJpBxrM7xpToM7WgxsjUp0OTZVcHMalG/Ov9QysgYxpLT2fZiAFsqLqVvU+w/XfE=;20:chHHyCu6v+G3iXBQ8KxPXnxp2kkMxrwd6d90k85r+bc8XnphSCF8/J31w7XLXQyTu5euR9PFr+HP2Wa/7TPsJg== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ezchip.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2015 09:35:50.4825 (UTC) X-MS-Exchange-CrossTenant-Id: 0fc16e0a-3cd3-4092-8b2f-0a42cff122c3 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0fc16e0a-3cd3-4092-8b2f-0a42cff122c3;Ip=[212.179.42.66];Helo=[ezex10.ezchip.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR02MB1143 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3425 Lines: 104 From: Noam Camus Add support for UPIO_MEM32BE in addition to UPIO_MEM32. Signed-off-by: Noam Camus --- drivers/tty/serial/8250/8250_dw.c | 42 ++++++++++++++++++++++++++++++------ 1 files changed, 35 insertions(+), 7 deletions(-) diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index d48b506..fe0b487 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -173,15 +173,13 @@ static void dw8250_serial_outq(struct uart_port *p, int offset, int value) } #endif /* CONFIG_64BIT */ -static void dw8250_serial_out32(struct uart_port *p, int offset, int value) +static void dw8250_check_control(struct uart_port *p, int offset, int value) { struct dw8250_data *d = p->private_data; if (offset == UART_MCR) d->last_mcr = value; - writel(value, p->membase + (offset << p->regshift)); - /* Make sure LCR write wasn't ignored */ if (offset == UART_LCR) { int tries = 1000; @@ -190,7 +188,12 @@ static void dw8250_serial_out32(struct uart_port *p, int offset, int value) if ((value & ~UART_LCR_SPAR) == (lcr & ~UART_LCR_SPAR)) return; dw8250_force_idle(p); - writel(value, p->membase + (UART_LCR << p->regshift)); + if (p->iotype == UPIO_MEM32BE) + iowrite32be(value, + p->membase + (UART_LCR << p->regshift)); + else + writel(value, + p->membase + (UART_LCR << p->regshift)); } /* * FIXME: this deadlocks if port->lock is already held @@ -199,6 +202,12 @@ static void dw8250_serial_out32(struct uart_port *p, int offset, int value) } } +static void dw8250_serial_out32(struct uart_port *p, int offset, int value) +{ + writel(value, p->membase + (offset << p->regshift)); + dw8250_check_control(p, offset, value); +} + static unsigned int dw8250_serial_in32(struct uart_port *p, int offset) { unsigned int value = readl(p->membase + (offset << p->regshift)); @@ -206,6 +215,19 @@ static unsigned int dw8250_serial_in32(struct uart_port *p, int offset) return dw8250_modify_msr(p, offset, value); } +static void dw8250_serial_out32be(struct uart_port *p, int offset, int value) +{ + iowrite32be(value, p->membase + (offset << p->regshift)); + dw8250_check_control(p, offset, value); +} + +static unsigned int dw8250_serial_in32be(struct uart_port *p, int offset) +{ + unsigned int value = ioread32be(p->membase + (offset << p->regshift)); + + return dw8250_modify_msr(p, offset, value); +} + static int dw8250_handle_irq(struct uart_port *p) { struct dw8250_data *d = p->private_data; @@ -322,9 +344,15 @@ static int dw8250_probe_of(struct uart_port *p, case 1: break; case 4: - p->iotype = UPIO_MEM32; - p->serial_in = dw8250_serial_in32; - p->serial_out = dw8250_serial_out32; + p->iotype = of_device_is_big_endian(np) ? + UPIO_MEM32BE : UPIO_MEM32; + if (p->iotype == UPIO_MEM32) { + p->serial_in = dw8250_serial_in32; + p->serial_out = dw8250_serial_out32; + } else { + p->serial_in = dw8250_serial_in32be; + p->serial_out = dw8250_serial_out32be; + } break; default: dev_err(p->dev, "unsupported reg-io-width (%u)\n", val); -- 1.7.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/