Messages in this thread | | | From | "Bounine, Alexandre" <> | Subject | RE: [PATCH 13/13] rapidio/switches: add driver for IDT gen3 switches | Date | Thu, 21 Jul 2016 18:48:17 +0000 |
| |
> -----Original Message----- > From: Andrew Morton [mailto:akpm@linux-foundation.org] > Sent: Thursday, July 21, 2016 2:37 PM > To: Bounine, Alexandre > Cc: Matt Porter; Andre van Herk; Wood, Barry; linux- > kernel@vger.kernel.org > Subject: Re: [PATCH 13/13] rapidio/switches: add driver for IDT gen3 > switches > > On Thu, 21 Jul 2016 14:18:54 -0400 Alexandre Bounine > <alexandre.bounine@idt.com> 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()? >
My bad ;) No problem with msleep() at all. We just need to give enough time for Rapidio link to get back (spec defines 500mS). Do you want a patch on patch?
> > + } > > + > > + return 0; > > +} > > > > ... > >
| |