Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751849AbdHQJJ0 (ORCPT ); Thu, 17 Aug 2017 05:09:26 -0400 Received: from pandora.armlinux.org.uk ([78.32.30.218]:40500 "EHLO pandora.armlinux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750775AbdHQJJX (ORCPT ); Thu, 17 Aug 2017 05:09:23 -0400 Date: Thu, 17 Aug 2017 10:09:08 +0100 From: Russell King - ARM Linux To: Linus Walleij Cc: Danilo Krummrich , Will Deacon , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Linux Input , Dmitry Torokhov , "devicetree@vger.kernel.org" Subject: Re: [PATCH] serio: PS2 gpio bit banging driver for the serio bus Message-ID: <20170817090908.GP20805@n2100.armlinux.org.uk> References: <20170731222452.22887-1-danilokrummrich@dk-develop.de> <20170807182207.348762301bf3d7f8509b1bf7@dk-develop.de> <8e5e73575b3a70e0e60931698687471d@dk-develop.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1159 Lines: 24 On Fri, Aug 11, 2017 at 11:16:20AM +0200, Linus Walleij wrote: > writel() should be guaranteeing that the values hit the hardware, wmb() is > spelled out "write memory barrier" I don't see what you're after here. Incorrect. writel() has a barrier which ensures that data written to memory (eg, dma coherent memory) is visible to the hardware prior to the write hitting the hardware. There is no barrier to ensure that the write hits the hardware in a timely manner - the write can be buffered by the buses, which will delay it before it hits its destination. PCI particularly buffers MMIO writes, and the requirement there has always been that if you need the write to hit the hardware in a timely fashion, you must perform a read-back to force the bus to deliver the write (since a read is not allowed to overlap a write.) The solution is never to use barrier() - barrier() is a _compiler_ barrier and does nothing for posted writes on hardware buses. -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up According to speedtest.net: 8.21Mbps down 510kbps up