serial: 8250_fintek: Fix finding base_port with activated SuperIO
authorJi-Ze Hong (Peter Hong) <hpeter@gmail.com>
Tue, 17 Oct 2017 06:23:08 +0000 (14:23 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Oct 2017 12:06:46 +0000 (14:06 +0200)
The SuperIO will be configured at boot time by BIOS, but some BIOS
will not deactivate the SuperIO when the end of configuration. It'll
lead to mismatch for pdata->base_port in probe_setup_port(). So we'll
deactivate all SuperIO before activate special base_port in
fintek_8250_enter_key().

Tested on iBASE MI802.

Cc: stable@vger.kernel.org
Tested-by: Ji-Ze Hong (Peter Hong) <hpeter+linux_kernel@gmail.com>
Signed-off-by: Ji-Ze Hong (Peter Hong) <hpeter+linux_kernel@gmail.com>
Reviewd-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_fintek.c

index 96cc45f25ee90dbd952dabc36f3d35a4e11cdd22..b346239144132d2a19f9bf96a91ce37c73a42e5b 100644 (file)
@@ -128,6 +128,9 @@ static int fintek_8250_enter_key(u16 base_port, u8 key)
        if (!request_muxed_region(base_port, 2, "8250_fintek"))
                return -EBUSY;
 
+       /* Force to deactive all SuperIO in this base_port */
+       outb(EXIT_KEY, base_port + ADDR_PORT);
+
        outb(key, base_port + ADDR_PORT);
        outb(key, base_port + ADDR_PORT);
        return 0;