Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933371AbdCaNzF (ORCPT ); Fri, 31 Mar 2017 09:55:05 -0400 Received: from mail-wr0-f172.google.com ([209.85.128.172]:33399 "EHLO mail-wr0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933159AbdCaNzC (ORCPT ); Fri, 31 Mar 2017 09:55:02 -0400 From: Olliver Schinagl X-Google-Original-From: Olliver Schinagl Subject: Re: [PATCH] serial: Do not treat the IIR register as a bitfield To: Andy Shevchenko , Greg Kroah-Hartman , Jiri Slaby , Laxman Dewangan , Stephen Warren , Thierry Reding , Alexandre Courbot , "David S . Miller" References: <20170329184431.6226-1-oliver@schinagl.nl> <1490867763.708.62.camel@linux.intel.com> Cc: dev@linux-sunxi.org, Ed Blake , Alexander Sverdlin , Yegor Yefremov , Wan Ahmad Zainie , Kefeng Wang , Heikki Krogerus , Heiko Stuebner , Jason Uy , Douglas Anderson , Peter Hurley , Tony Lindgren , Vignesh R , Thor Thayer , David Lechner , Jan Kiszka , linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, sparclinux@vger.kernel.org Message-ID: Date: Fri, 31 Mar 2017 15:54:52 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.6.0 MIME-Version: 1.0 In-Reply-To: <1490867763.708.62.camel@linux.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1622 Lines: 45 Hey Andy, On 30-03-17 11:56, Andy Shevchenko wrote: > On Wed, 2017-03-29 at 20:44 +0200, Olliver Schinagl wrote: >> It seems that at some point, someone made the assumption that the UART >> Interrupt ID Register was a bitfield and started to check if certain >> bits where set. >> >> Actually however the register contains interrupt ID's where only the >> MSB >> seems to be used singular and the rest share at least one bit. Thus >> doing bitfield operations is wrong. >> >> This patch cleans up the serial_reg include file by ordering it and >> replacing the UART_IIR_ID 'mask' with a proper mask for the register. >> The OMAP uart appears to have used the two commonly 'reserved' bits 4 >> and 5 and thus get an UART_IIR_EXT_MASK for these two bits. >> >> This patch then goes over all UART_IIR_* users and changes the code >> from >> bitfield checking, to ID checking instead. > > > Looking to implementation I would rather go with some helper like > > int serial_in_IIR(port, [additional mask]) > { > return port->serial_in(port, UART_IIR) & (_IIR_MASK [| additional > mask]); > } As I just wrote a simply static inline helper function in serial_core.h, I just figured that the helper will only work for some of the calls. All interrupt checks in xxx_serial_in() obviously can't rely on this. So do you still want this helper function added for the other cases? Or have all implementations do the masking manually? And then, is iir = serial_port_in(up, UART_IIR) & UART_IIR_MASK; preferred over splitting it over two lines, like I did? Finally, why rename it to _IIR_MASK, I assume a typo here? Olliver >