From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754273AbcIBOyN (ORCPT ); Fri, 2 Sep 2016 10:54:13 -0400 Received: from mail-db5eur01on0134.outbound.protection.outlook.com ([104.47.2.134]:55657 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753490AbcIBOxp (ORCPT ); Fri, 2 Sep 2016 10:53:45 -0400 X-Greylist: delayed 10863 seconds by postgrey-1.27 at vger.kernel.org; Fri, 02 Sep 2016 10:53:44 EDT Authentication-Results: spf=pass (sender IP is 131.228.2.240) smtp.mailfrom=nokia.com; linuxfoundation.org; dkim=none (message not signed) header.d=none;linuxfoundation.org; dmarc=pass action=none header.from=nokia.com; X-HPESVCS-Source-Ip: 10.151.38.184 To: , CC: Jiri Slaby , Greg Kroah-Hartman From: Alexander Sverdlin Subject: [PATCH] serial: earlycon: Extend earlycon command line option to support 64-bit addresses Message-ID: Date: Fri, 2 Sep 2016 13:20:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.228.2.240;IPV:NLI;CTRY:FI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(7916002)(2980300002)(438002)(189002)(199003)(11100500001)(7846002)(31696002)(50986999)(4326007)(230700001)(68736007)(19580395003)(23676002)(19580405001)(356003)(305945005)(31686004)(106466001)(87936001)(2906002)(36756003)(54356999)(229853001)(16796002)(86362001)(33646002)(92566002)(47776003)(81156014)(65806001)(65956001)(8936002)(8676002)(189998001)(97736004)(50466002)(626004)(5660300001)(65826007)(4001350100001)(81166006)(64126003)(77096005)(5001770100001)(586003)(83506001);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR07MB1085;H:fihe3nok0734.emea.nsn-net.net;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD052;1:JzOQGiTWav3TI5WB9m//keCjJ/i9SgsgnUvI1iPh1j4tcdxYpspP0hAtwp4aXndd+GQk6aqGoExQ0bA7ZFSTyrkWBwlq0a8pHos/Nf/enblO3OKo8EqO9WSHhBkN1PGXZwkN7yJThRVC4aE64Y9lcQocrPJ0CSeezjomrk2O/ZJncywNg1okTytZnTYkRUe4wQ+omMRhMjbQHfNLaU8CB+QzDwRRYcMs/kJFafCFCBltojm+5Vl+pGdZSF15eQ3/aHmomNyT8OXMucwRmoL4zllP68VetrTdeQ4SUBwPZMD7sAQoZB0DUqjVeiOGdj7QZWcMhvOPXG00OAYYSHqFVeehPJT63LrPVFMYuJXNi6XOaWhk5wWePUpDvCYj+D3iH6NgMW9ipVa05Ld1IAhjgFT691cwypm06E4k4BZ45ycID+2iW0BgjWAXnDtBb8tXpiTnYWQPd0sZ+Ga5xwI/5EfxHgYyR8WR3geZ43ybg1OgfOkebUAt4b89LE5MQDAX5hjlDRFjChcCKlUIQuZl7GeztmshT//7lvWgITFZW54= X-MS-Office365-Filtering-Correlation-Id: f6ab26eb-74f0-465d-c725-08d3d3233689 X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1085;2:kLH7916z1mc+gjWoEjYaNml4vDi0iZxFQmn4vL7PcgRvFMTBDJymzQi7QjSTd6ZiqFpFSaqjGeDM9oocfi192DxzkEfDHqeLmolfFk25WxSzHPULi0xgenGp7m7o7jm6NuxGfoiru8Cne3h0i7l99IF4oNWyWAEYyO27Yqq8kK5SCZrBLGyl+QgqpAVcs7Tq;3:BSGIWxtnT5z6lVUD4QSYr4kEmHpHW0M/lAD/lj4T1hQaD9Qihfv5TYqPf2EaxBdbGVzHWkvNvADUqa6xIsVCjWeKJxKlSdRGkw2JfUJmY0neXTXF2VnRpnhqm3y0XHN3hu1WKxGWoglCXasj0jZ6/RFK7EYhkn7KNv6CZo/Nib8Me04+In1MKtFlEV+tRIYfdDsLWtb1xh5tg9NyBQuCCpSgTxJcj58d7Ic70ZhhCYQ3MJJ7FggfyatSP0cnPLRgh1gw21+mFLxKWSiNxR4j8A== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:VI1PR07MB1085; X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1085;25:iogRZfS8Zy9vc8KCBeX0fxgOy4vUg3/Jo7blKab+XoN/HNUtkCOveDwy83fCJh0hbF4U13+FGhc6OUthoC7fPN9uQLSoPVqLrtgKYxPPd9kvEqwxau3UGPTvKLSCrEx6jzEdtW7lRe/o9fauY9ULVYLngaZTCIH1I2GEDRgUvzlrfIdi36in8e9e3SpjZlZ0+TRY8Gsc2Dt3jS4x/Ua+jyrtH4gv2QJllxh+S2es/aoJFJCLksd/1MMHZI28NBSKWSHMeVxvxkWiQOcP/N1pRhyGduCi4AlEWhCgUUZcGtBVWGtSaWXYrZ7gjXWSswGN0beas9edQuSzR8yn3zI09ikP/13Ht/FKSsdjRsTFcwDmkRuKpXaw/Jb8Jbj38xRa+bbYJPai0jbtEvCGJ2rBzQlCJk86SPYU1Ym9RmhiwMhX16IdytYdELTBNFwiDieYQ0Eue5//h/aQf04kbfvDi4Xrtqc/HC3uqHvSyNCqCiQBPbzEygZ8/kpPDJTv9miea5YT42/oEm1fVgM5J1g/iy55R8jzh9X7dzfCn+T09GUfuYHKuqQrczp0I3Snrf0dplxboR9BHCBkHdl2Voq+zDnNas2xvV/Zgd2KYgNKl8hmWe8ibF3IrB2dV3lwIC4TbagS8GoB6lNshNowyF0l1s/91asqGXbmiEeM1OGRCpWt6NCfgxLjYjDawf0yKHiDnMh27yyaaHTAWUj8IWKx+h/lVQlpOiVPi+YOem+cruDfAvMPLm4inBRcuGtVvScGKp/x40aNPz2WwfM9FiAyVM6RTLnVca2pyNP3MRvrN+phXqFUgLmvs7VkoIguC/cG X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1085;31:9EbLqyacXrYctXbF2kcHDDKbAG30VKNNWIGYKALGXFi+hZo7Wk0aoO8QD1wx37dVKeDB/3kjXPlM5k4Gi0ZPd/nZiwBE6uhNbc6Klg3sikcfpBEyfZoZKIpYfg7AU6XDhvu9bUjju8j3AFD9mCGc3jPn0p9CFOLG8rmZ/gE+bEifwljywkN2xPXawFtHWGjVbx22twfiRjFs/yLDxnQDnGi3xAULNj+2fl5/QR6AvNM=;20:qZ8fmsNnJh3bCNKCLdJCqsc1ONmfdg5u/5cwVCLLLvQSHvUpUtn4AIWcQMNlZYwLhFPxCsRYnGXRuSpzjIxbR2OD6uF129X0730YowZH59MbN9f8T/+6D81wPQIhODDPXTt8C05kPBC4dzb85c8vHUs1SA+E3A/w8mYx9kQamP0VDA3X81rimA1sqTfA0fD3yo4cggPIoMhvbyFn37qAFyufgroKAbh4MPYhfVYawscL9IDjxJmvenlsxpeohPe60rYudZ0L1Rv6F0EWC0pC9mlshiDMmPKyNjLGaYS55mjYiLmdv3FOLU2TklOPLDOHA3U+aF1FrPaa8zKfQw6cwxTppkmLeIWtljQJRh19DDu2uGff8jB44z2nnu1WavQSHcGt3dZRDASkUvvQBh7HRFRzsf8tGn+r1l9guIYqgyabJgoDutcf5+Ys6Dm6l1xg6JQGNEIx5UV38AwD7ZKctqdD6dO/4aTFt8bGNtZtppc06ShnIsom7ZowvD6sejQi9Y3xuJLFDLvq2hZ6BK6dYoHSX9G0PPTlQhnA/NcaEMp7jF9y8a3WG2VYgODflvyCn8Ve06CnixfYIwM1b4qumcHfzDZAwVNScejUoa3y2Qs= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597)(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(13016025)(13018025)(3002001)(10201501046)(6055026);SRVR:VI1PR07MB1085;BCL:0;PCL:0;RULEID:;SRVR:VI1PR07MB1085; X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1085;4:XF5SGpTD2Ykl57xIVcWWs4KiUDvDlbKEX1vpVBNnCyQ5sI6l1Qhzb9gxYzS60eLe1Kbv5PTzUeBKesD1KhSoCpbIoa2UHLlTvLXc5naccxpv2nF5DcX4EGpjJDnCWsZntFnlyJGlRHJ6IA0tsrW6dI2QpJY4BAU1wuF7CFCOTEiTnE8ttTywkqF0jLaoRyaC1z2vJQJ2cKJqP1V6xxK4i7iRv0L8k+hGlo4XpBOcyuvZKLBKSx3/YSXzZAWOr4IZzbkbrYQonXUZay3yLNDIA9Jd/1Ypo357SBzV84xYzEwge48wOZl6CbeBlo8kLKnDxCjxJsTXMWR4DydSpACq3WVGdWNpPkNF7n0gIoCbJoyRttDlsZHnCVRs2H70Hz376d/dxr9Fm651a8YKRBdPN+3DOsk4WjcZ11L5CGNQ9mbQjWoerQmmRKjTPNTck1GK3vUX2lGApWl5W3uug4L8zVM2YCeYeELzeqxqlQx9b4zFGh3plJC2FXJpDLpm5Us4LfvpYYwVxTIaQlj+jgFoWQ== X-Forefront-PRVS: 00531FAC2C X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA3TUIxMDg1OzIzOlpKSkVLOHlyZ1NDWCsvaU1DMTFpdk1XSXJE?= =?utf-8?B?Z09vbjhFOEFTVENFay9pZjVDN2tyMm1zY1VJRitIbGN5ZElydlBpc081Q1ph?= =?utf-8?B?K2dzeW83UVVsOFZOZ25HMW9GS2Z3MEZEbWxXQkNhK05ad1VYdXRiZlVDcHhx?= =?utf-8?B?VFNmWHZLUVNwaFRRU3FKaktUekJKQkFSMHFZaG9HczB0SHFYT1Qvc0phaWVP?= =?utf-8?B?Q0JmZEIvdDg4c1Jzc2w3WCs5TEJwQVM4WldSdWZRbldMUGlnK3lOUlF1cVdw?= =?utf-8?B?NTRmY1l0dGdYWmxLSXdPbXRiMzdqaTgvUjlQZC9tOTB3QkZWVDBRa0FqUlMx?= =?utf-8?B?dzBXY2RBQ2pEYVVkR3FaZ2dxNlI0anVwV0NVdDc2SjB1amdpWXdLdUt4MTYv?= =?utf-8?B?VmsrdHhkaUJEVjJMR0o0QWVHa0wzS1lLUFFCQ29tNkxTeC9TblhBRTA3UVZ1?= =?utf-8?B?VWJ3YVJpQnJZdjZ3SjRadGEyQU5POWl2c1pXdjVQRlA2N2hQdjlDaThHV1NF?= =?utf-8?B?ZW1SS29OSjBDZzYwcmVEOS9seHpDRFNEWWE4ckhrRzZoSXU0TGhORFdIaEdG?= =?utf-8?B?NEREeVM1YlZEd0pIa015K3FHanp3U2VFRm9DQ1YvRWNvQXRsSXBMTWY5UHNT?= =?utf-8?B?S2V6bjViRXZNdDUzM3M5Qy9lVzVzd3BZUUUxRzh2YThWTFArdWpqVzZMd2I2?= =?utf-8?B?OUhjMk5aNXZHRHIyWGpEV1lKcWdmZkhxMzE5SkkxMy9nYjl3b0ZSY0hzUjh0?= =?utf-8?B?RnZqQzdBV2FKNTVGQVZmTzBxMjBLZ1VpODk3d1ViNEF5UWZBTHc4d3o5ZmU4?= =?utf-8?B?bitZeEhmWVFVM0gwRlorVUhwNGNZTitvckcvTk81K0srSmtEakxoQTI3STNp?= =?utf-8?B?QlV0blFtS1crY3dVelEyamNLUHFabE1EeDdQOHRSTHZ6YVBlNzdHYlRDR3ZP?= =?utf-8?B?U0dCb2d5d2RtM2JYYnhob2FCcTlIaDhnRkdZYm5yQ1p5Q1Q1YXB4ZkNMekxj?= =?utf-8?B?UUhwZFBRVER1aW9uSEZsMndyc29mbittZm10TmJWU2oxMW5MdGVTUGoxNndZ?= =?utf-8?B?MSt6U1JwbGswc1RpZlZoUkhhaDNYb3lQbXlGTzVQeVl6THN6NzBPSTdWUnhC?= =?utf-8?B?aXdmMmVtMWdPdXVlWmR4SVk3eEh0aE50UmIvaXJwT3pzdU9MU2xWQ1ZQd2VS?= =?utf-8?B?bjN3R1g2ZnkybkxRUXBSSWVDYk9KSmcvcUhXbE9Pb3JzbTcyK1pMeDB5RWVQ?= =?utf-8?B?NWJ0VjRweXNrNitvTlN1UVphZVZkQTFCc1BzQW16WnhCRUpnRCtLTmViQjhB?= =?utf-8?B?OEljUzBXSm1iMVkyZEMwSk5STjQzRUZwWTlJMERxQVh1cFZlY1hjYmFHMWNK?= =?utf-8?B?TThVWjB6WS9rK3FsYVdTMGtuZDNhUDdQQ1FReGR6TnU4MC9rN29lVnVWNnY0?= =?utf-8?B?WXVhTk10ajdBemNXVHBFRld0ZWdPTTh5cjk1eWxLdW8zWHJqdkVsS08zcW04?= =?utf-8?B?Q2loeXdSRk95OWJtTjRRMkF1RDdVYkt4ZEs2UURORHdYdkpZbFJiMjdZRldR?= =?utf-8?B?UGYrTzRrcVloVXRUNjNHMy81MEtXVEE3a1Z6YlBXM0Y4OWwrNFZKUERKdTUz?= =?utf-8?Q?h/JOsiLV7jHtOMVbuFlZ?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1085;6:3ffg8tvfmTFNwX0hmI3e09l5bNaslzdVIVvw/+qjfIfo9Ob07hCnJGFYmbrkZI4YwUHSUn7FpEshf2uAboTcMYWlUL4W12jNd74qEEz0EmrqDaKEs3v0xSwwsu4bsZWts+KVuizT5seKdW3l3HemMIIbS3jUI9Geq07kn+DLKod6A9LHzF3bt35y+yFtxwIUbd+A1FgtIKDwCyZW0IcAuiYgGZPgMWAA/mPOkHUWOS7OjTDboY7Lp1KP38fTqG6jB00l2q6Jk81mHQFKC42x8NGSqO1tDbyP2HHlOgWziVzaxEv7cOmgZZ0pPbcm0RHg8Q93eHxkla8yCbdToL/EhA==;5:m5lSVmrFh8wPqKmCwQ6fSeAn9bQZl4oInzvygbomEJ0c87NMRgU08UmLT7Z9BOoqGexr5LC/3DySc/mwJQtaTqqWtbcTSyD9//zIWH71ba2OFko/CEs6cmD3YxY2d5v7vmgMY/3dAMRAoarBz2MsNw==;24:k28O/DV02z1PW4Oe3GFNjJr0FFRDRF5g9uq533zGcV2Tzvt4sKUDdF2nnPFaQ0wVUzCzxqR7n6PYJnjfB9UKNuZOeNT6isdS2axogl3yiK4=;7:j3isxfE04EVU0+7qR0rOV2058VOIeHqleFqEj0boZzgm8Nhn3OZX+t66Dr/xURuyaMljgLe4IJGW0V3HfOf+VfIfttvxkMGOmIxKVDOmIDEbYPWE1mn/7yPr87G89oi1zr7nwTnEXk6Yv54CXBtwjqq8MB0FW5BzDN5HY7DlUVHp4Nq9EZveMUK3WcE3O16lvVA7WQaSrqEywaYt6SlmwTRVqTq/HnHU8iilApHgee//NRjQVOMzhHbEwTlE33w5 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2016 11:20:58.0127 (UTC) X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5d471751-9675-428d-917b-70f44f9630b0;Ip=[131.228.2.240];Helo=[fihe3nok0734.emea.nsn-net.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB1085 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org earlycon implementation used "unsigned long" internally, but there are systems (ARM with LPAE) where sizeof(unsigned long) == 4 and uart is mapped beyond 4GiB address range. Switch to resource_size_t internally and replace obsoleted simple_strtoul() with kstrtoull(). Signed-off-by: Alexander Sverdlin --- drivers/tty/serial/8250/8250_core.c | 2 +- drivers/tty/serial/earlycon.c | 7 +++---- drivers/tty/serial/serial_core.c | 12 +++++++++--- include/linux/serial_core.h | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c index 13ad5c3..f64d6cd 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -639,7 +639,7 @@ static int univ8250_console_match(struct console *co, char *name, int idx, { char match[] = "uart"; /* 8250-specific earlycon name */ unsigned char iotype; - unsigned long addr; + resource_size_t addr; int i; if (strncmp(name, match, 4) != 0) diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c index 067783f..3940280 100644 --- a/drivers/tty/serial/earlycon.c +++ b/drivers/tty/serial/earlycon.c @@ -38,7 +38,7 @@ static struct earlycon_device early_console_dev = { .con = &early_con, }; -static void __iomem * __init earlycon_map(unsigned long paddr, size_t size) +static void __iomem * __init earlycon_map(resource_size_t paddr, size_t size) { void __iomem *base; #ifdef CONFIG_FIX_EARLYCON_MEM @@ -49,8 +49,7 @@ static void __iomem * __init earlycon_map(unsigned long paddr, size_t size) base = ioremap(paddr, size); #endif if (!base) - pr_err("%s: Couldn't map 0x%llx\n", __func__, - (unsigned long long)paddr); + pr_err("%s: Couldn't map %pa\n", __func__, &paddr); return base; } @@ -92,7 +91,7 @@ static int __init parse_options(struct earlycon_device *device, char *options) { struct uart_port *port = &device->port; int length; - unsigned long addr; + resource_size_t addr; if (uart_parse_earlycon(options, &port->iotype, &addr, &options)) return -EINVAL; diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index 9fc1533..89f5d6a 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1938,11 +1938,14 @@ uart_get_console(struct uart_port *ports, int nr, struct console *co) * console=,0x, * is also accepted; the returned @iotype will be UPIO_MEM. * - * Returns 0 on success or -EINVAL on failure + * Returns 0 on success, -EINVAL or -ERANGE on failure */ -int uart_parse_earlycon(char *p, unsigned char *iotype, unsigned long *addr, +int uart_parse_earlycon(char *p, unsigned char *iotype, resource_size_t *addr, char **options) { + int ret; + unsigned long long tmp; + if (strncmp(p, "mmio,", 5) == 0) { *iotype = UPIO_MEM; p += 5; @@ -1968,7 +1971,10 @@ int uart_parse_earlycon(char *p, unsigned char *iotype, unsigned long *addr, return -EINVAL; } - *addr = simple_strtoul(p, NULL, 0); + ret = kstrtoull(p, 0, &tmp); + if (ret) + return ret; + *addr = tmp; p = strchr(p, ','); if (p) p++; diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 2f44e20..cdba6f1 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h @@ -374,7 +374,7 @@ extern int of_setup_earlycon(const struct earlycon_id *match, struct uart_port *uart_get_console(struct uart_port *ports, int nr, struct console *c); -int uart_parse_earlycon(char *p, unsigned char *iotype, unsigned long *addr, +int uart_parse_earlycon(char *p, unsigned char *iotype, resource_size_t *addr, char **options); void uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow);