From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752355AbcGUSg6 (ORCPT ); Thu, 21 Jul 2016 14:36:58 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:50227 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752013AbcGUSg4 (ORCPT ); Thu, 21 Jul 2016 14:36:56 -0400 Date: Thu, 21 Jul 2016 11:36:55 -0700 From: Andrew Morton To: Alexandre Bounine Cc: Matt Porter , Andre van Herk , Barry Wood , linux-kernel@vger.kernel.org Subject: Re: [PATCH 13/13] rapidio/switches: add driver for IDT gen3 switches Message-Id: <20160721113655.bd8e3fd917205d694aac7edd@linux-foundation.org> In-Reply-To: <1469125134-16523-14-git-send-email-alexandre.bounine@idt.com> References: <1469125134-16523-1-git-send-email-alexandre.bounine@idt.com> <1469125134-16523-14-git-send-email-alexandre.bounine@idt.com> X-Mailer: Sylpheed 3.4.1 (GTK+ 2.24.23; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 21 Jul 2016 14:18:54 -0400 Alexandre Bounine wrote: > Add RapidIO switch driver for IDT Gen3 switch devices: RXS1632 and RXS2448. > > ... > > +static int > +idtg3_em_handler(struct rio_dev *rdev, u8 pnum) > +{ > + u32 err_status; > + u32 rval; > + > + rio_read_config_32(rdev, > + RIO_DEV_PORT_N_ERR_STS_CSR(rdev, pnum), > + &err_status); > + > + /* Do nothing for device/link removal */ > + if (err_status & RIO_PORT_N_ERR_STS_PORT_UNINIT) > + return 0; > + > + /* When link is OK we have a device insertion. > + * Request port soft reset to clear errors if they present. > + * Inbound and outbound ackIDs will be 0 after reset. > + */ > + if (err_status & (RIO_PORT_N_ERR_STS_OUT_ES | > + RIO_PORT_N_ERR_STS_INP_ES)) { > + rio_read_config_32(rdev, RIO_PLM_SPx_IMP_SPEC_CTL(pnum), &rval); > + rio_write_config_32(rdev, RIO_PLM_SPx_IMP_SPEC_CTL(pnum), > + rval | RIO_PLM_SPx_IMP_SPEC_CTL_SOFT_RST); > + udelay(10); > + rio_write_config_32(rdev, RIO_PLM_SPx_IMP_SPEC_CTL(pnum), rval); > + mdelay(500); Yikes, that's a very long busywait. A half-second machine freeze on uniprocessor (if such exists ;)). We can't use msleep()? > + } > + > + return 0; > +} > > ... >