From patchwork Fri Mar 6 12:46:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serge Semin X-Patchwork-Id: 11423805 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7269A1580 for ; Fri, 6 Mar 2020 12:49:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5D3DF2166E for ; Fri, 6 Mar 2020 12:49:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727210AbgCFMtD (ORCPT ); Fri, 6 Mar 2020 07:49:03 -0500 Received: from mail.baikalelectronics.com ([87.245.175.226]:35638 "EHLO mail.baikalelectronics.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727241AbgCFMtD (ORCPT ); Fri, 6 Mar 2020 07:49:03 -0500 Received: from localhost (unknown [127.0.0.1]) by mail.baikalelectronics.ru (Postfix) with ESMTP id 8D4668030700; Fri, 6 Mar 2020 12:49:01 +0000 (UTC) X-Virus-Scanned: amavisd-new at baikalelectronics.ru Received: from mail.baikalelectronics.ru ([127.0.0.1]) by localhost (mail.baikalelectronics.ru [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JEJKWpV-l5T0; Fri, 6 Mar 2020 15:49:01 +0300 (MSK) From: To: Thomas Bogendoerfer CC: Serge Semin , Serge Semin , Alexey Malahov , Paul Burton , Ralf Baechle , , Subject: [PATCH 14/22] mips: early_printk_8250: Use offset-sized IO-mem accessors Date: Fri, 6 Mar 2020 15:46:57 +0300 In-Reply-To: <20200306124705.6595-1-Sergey.Semin@baikalelectronics.ru> References: <20200306124705.6595-1-Sergey.Semin@baikalelectronics.ru> MIME-Version: 1.0 X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) Message-Id: <20200306124901.8D4668030700@mail.baikalelectronics.ru> Sender: linux-mips-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org From: Serge Semin Some platforms may prohibit to access the IO-memory with instructions of certain memory widths. For instance Bailal-T1 has devices placed behind memory OCP port (which also the reason of DMA accesses being incoherent) and can't be accessed through CCA uncacheable memory with other than 4-bytes aligned (LW/SW) instructions. Ignoring this rule will cause the APB EHB error with 0xFFs returned on read operations. In order to fix the issue for this platform and for others, which may have similar problems, lets recode serial_in()/serial_out() to call a certain memory accessors in accordance with the UART registers shift setting. Signed-off-by: Serge Semin Signed-off-by: Alexey Malahov Cc: Thomas Bogendoerfer Cc: Paul Burton Cc: Ralf Baechle --- arch/mips/kernel/early_printk_8250.c | 34 ++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/arch/mips/kernel/early_printk_8250.c b/arch/mips/kernel/early_printk_8250.c index 567c6ec0cfae..e2c2405cff62 100644 --- a/arch/mips/kernel/early_printk_8250.c +++ b/arch/mips/kernel/early_printk_8250.c @@ -23,12 +23,42 @@ void setup_8250_early_printk_port(unsigned long base, unsigned int reg_shift, static inline u8 serial_in(int offset) { - return readb(serial8250_base + (offset << serial8250_reg_shift)); + u8 ret = 0xFF; + + offset <<= serial8250_reg_shift; + switch (serial8250_reg_shift) { + case 0: + ret = readb(serial8250_base + offset); + break; + case 1: + ret = readw(serial8250_base + offset); + break; + case 2: + ret = readl(serial8250_base + offset); + break; + default: + break; + } + + return ret; } static inline void serial_out(int offset, char value) { - writeb(value, serial8250_base + (offset << serial8250_reg_shift)); + offset <<= serial8250_reg_shift; + switch (serial8250_reg_shift) { + case 0: + writeb(value, serial8250_base + offset); + break; + case 1: + writew(value, serial8250_base + offset); + break; + case 2: + writel(value, serial8250_base + offset); + break; + default: + break; + } } void prom_putchar(char c)