From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v5 0/6] bcm2835: auxiliar device support for spi Date: Thu, 10 Sep 2015 17:48:33 +0200 Message-ID: <55F1A651.5090102@tronnes.org> References: <1441359711-2800-1-git-send-email-kernel@martin.sperl.org> <87h9n4weg8.fsf@eliezer.anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <87h9n4weg8.fsf@eliezer.anholt.net> Sender: linux-kernel-owner@vger.kernel.org To: Eric Anholt , kernel@martin.sperl.org, Stephen Warren , Lee Jones , Russell King , Mark Brown , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-spi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Phil List-Id: devicetree@vger.kernel.org Den 09.09.2015 03:48, skrev Eric Anholt: > kernel@martin.sperl.org writes: > >> From: Martin Sperl >> >> The BCM2835 contains 3 auxiliar devices: >> * spi1 >> * spi2 >> * uart1 >> >> All of those 3 devices are enabled/disabled via a shared register, >> which is set by default to be disabled. >> >> Access to this register needs to get serialized. >> >> So after several iterations of discussions with the following ideas: >> * syscon - device tree should describe HW not drivers to use - >> 'compatiblity = "brcm,bcm2835-aux-enable", "syscon";' >> is not acceptable >> * regulator - it is not necessarily a regulator or a power gate >> that is implemented in HW, so it is not valid to use >> this framework >> >> The recommendation was made to create a new minimal API in soc >> just for access to this shared enable/disable register. >> >> This patch-series implements: >> * the bcm2835-auxiliar device enable/disable api in soc. >> * the bcm2835-auxiliar spi device driver >> >> The uart1 device driver (ns16550 based) is not implemented so far >> but would be using the same API. >> >> Both spi and uart drivers can run with shared interrupts, >> so there is no need for an interrupt-controller to get implemented. > I finally had a chance to sit down and look at what the hardware's doing > with the enable bit (also, I've read a whole lot more of the hardware > now, so I'm a lot faster at answering questions like this). The enable > bits are a clock gate off of the VPU clock. > > I knocked together the enable bits as a clock gate driver, since I'd > just written very similar code for the audio domain clock driver (and I > assume you are grumpy about how much time you've spent on this one > stupid register). It's up at > https://github.com/anholt/linux/tree/bcm2835-clock-aux and I can submit > it if you like the result. I've compile tested it only, but I'm hoping > you could just drop your aux SPI driver on top of it and have things > work. > This looks interesting. But there's a challenge with the uart1 and the 8250 driver. Phil Elwell has this to say: This means that that UART1 isn't an exact clone of a 8250 UART. In a particular, the clock divisor is calculated differently. A standard 8250 derives the baud rate as clock/(divisor16), whereas the BCM2835 mini UART uses clock/(divisor8). This means that if you want to use the standard driver then you need to lie about the clock frequency, providing a value is twice the real value, in order for a suitable divisor to be calculated. Ref: https://github.com/raspberrypi/linux/pull/1008#issuecomment-139234607 So either we need a new uart1 driver or a doubled clock freq. somehow. Noralf.