serial: sh-sci: Fix up earlyprintk port mapping.

The earlyprintk path needs to establish the membase cookie, but is too
early for general resource management. Split out the remap logic
accordingly.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c
index 7b2760b..c55cec5 100644
--- a/drivers/serial/sh-sci.c
+++ b/drivers/serial/sh-sci.c
@@ -1602,6 +1602,34 @@
 	return 64;
 }
 
+static int sci_remap_port(struct uart_port *port)
+{
+	unsigned long size = sci_port_size(port);
+
+	/*
+	 * Nothing to do if there's already an established membase.
+	 */
+	if (port->membase)
+		return 0;
+
+	if (port->flags & UPF_IOREMAP) {
+		port->membase = ioremap_nocache(port->mapbase, size);
+		if (unlikely(!port->membase)) {
+			dev_err(port->dev, "can't remap port#%d\n", port->line);
+			return -ENXIO;
+		}
+	} else {
+		/*
+		 * For the simple (and majority of) cases where we don't
+		 * need to do any remapping, just cast the cookie
+		 * directly.
+		 */
+		port->membase = (void __iomem *)port->mapbase;
+	}
+
+	return 0;
+}
+
 static void sci_release_port(struct uart_port *port)
 {
 	if (port->flags & UPF_IOREMAP) {
@@ -1616,25 +1644,16 @@
 {
 	unsigned long size = sci_port_size(port);
 	struct resource *res;
+	int ret;
 
 	res = request_mem_region(port->mapbase, size, sci_type(port));
 	if (unlikely(res == NULL))
 		return -EBUSY;
 
-	if (port->flags & UPF_IOREMAP) {
-		port->membase = ioremap_nocache(port->mapbase, size);
-		if (unlikely(!port->membase)) {
-			dev_err(port->dev, "can't remap port#%d\n", port->line);
-			release_resource(res);
-			return -ENXIO;
-		}
-	} else {
-		/*
-		 * For the simple (and majority of) cases where we don't
-		 * need to do any remapping, just cast the cookie
-		 * directly.
-		 */
-		port->membase = (void __iomem *)port->mapbase;
+	ret = sci_remap_port(port);
+	if (unlikely(ret != 0)) {
+		release_resource(res);
+		return ret;
 	}
 
 	return 0;
@@ -1835,7 +1854,9 @@
 	if (!port->type)
 		return -ENODEV;
 
-	sci_config_port(port, 0);
+	ret = sci_remap_port(port);
+	if (unlikely(ret != 0))
+		return ret;
 
 	if (sci_port->enable)
 		sci_port->enable(port);