Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp6672397iob; Wed, 11 May 2022 02:50:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzJZW40GJcHBjIkqd/P5XE3RtjP33Mw5pc2CGZAItL4Ilak+FLpJbwCoNMxitwITbyRIP4s X-Received: by 2002:a05:6402:3585:b0:427:ccd4:bec3 with SMTP id y5-20020a056402358500b00427ccd4bec3mr28055226edc.2.1652262616887; Wed, 11 May 2022 02:50:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652262616; cv=none; d=google.com; s=arc-20160816; b=B4iCE4MfE5oR846cqI5s+iX2XGeXE3VHIAtJgh5FV8RVInhGAIIFiGK6cUe+2TxuZO HttKoN1fYX1T3OjY4jt/iV3TKyRo7mDDhRy8+4ZfZQVEwdSch5xm0RAJiqJupFeOyUfp 0+qPyPPAnu2agaD7gin80YkYdNF1EklWvugxqwtqGP8Hne22kNWjsGq8g7X+y5CDBf1D iRc0DH1SU77ldapbyZrVvVBOqLvN09NlGlv2Rw8Sa8gEPruOq6n8+QotdPiqXSYRSFyX jVBH5zL/zSaXZdxk3quP6nbKK85iqASL4BInV9zH1e+TfPgWuljWB7nhVkwxQrobwndA lRxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=gPsVkWSCq5qCEWTtV99WIS53lBFdv1NNATet2c7D6Q8=; b=H4dNc1vp6RRKVJ5VrTY63Jfv8WiOhRiFhxOorq0c1iIV4Ijf61zBTtx45RsPALF03r XWek5kZErDtBuF1lO19mK0WJd3iSZfylZqTOMwgdejXGagjJBeFuo1W/4oAlBgz7XBpN aTtDvD/w2DV1kHH7bvp39XFMZXCk2+AIE7rAbs6/1aTDwm3x/kqM68aci9Y2/dkwvWmy C/oyJdkdexZLBA0T/+UabKhNXyXErqkwRvXBhU0P5kjIc1FigXZi4CS9XruGzAbT+NPB VsuP/y8JpKEZOwjDs8BXPaATDkXgDClRO1eUiGHRPkiz3PN1S2wF3doU/1hUz2Pna2EK 1HhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@metrotek.ru header.s=mail header.b=ldKQ+oOI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dp19-20020a170906c15300b006e8943257bfsi2413125ejc.319.2022.05.11.02.49.52; Wed, 11 May 2022 02:50:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@metrotek.ru header.s=mail header.b=ldKQ+oOI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243442AbiEKIQP (ORCPT + 99 others); Wed, 11 May 2022 04:16:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54054 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239529AbiEKIQK (ORCPT ); Wed, 11 May 2022 04:16:10 -0400 Received: from mail.pr-group.ru (mail.pr-group.ru [178.18.215.3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 62BD73FBCB; Wed, 11 May 2022 01:15:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=metrotek.ru; s=mail; h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to: references; bh=hTDd4TSeU1fwQ6OaAmsGqmYgAJLDuU+/nhoN5LyCky4=; b=ldKQ+oOIE/MncLwS3922wAbJevpexSt+HIQxIYg1unHt/01VteHHELxNQxNb+R1+KiqjTOsQgy2ne DuHGgS1XmmAtT6yr9aGsyRSS9V2SMw2SyECTM6pZ+CuRcoc9YLffWIuV977YTHC0JpthZYFqsaXMhy 0waSNrTrfjWwpheLYEOJ96j+mhDCFYmC8kqIds/088PSv/oRnZ1jyugaljHdWYmeEr8yB1Bc7XOVHU ktKpu8wb7hf8KGl7eKPSX4V3LTEG1XBZCVRQhGQkD6lpTsEGuyLTNeadAGsU/Kg2U4GZWYDRNimAOY betkaC2da3ivsJSOYDg+T51TMwygUiQ== X-Kerio-Anti-Spam: Build: [Engines: 2.16.3.1422, Stamp: 3], Multi: [Enabled, t: (0.000010,0.016053)], BW: [Enabled, t: (0.000015,0.000001)], RTDA: [Enabled, t: (0.071124), Hit: No, Details: v2.39.0; Id: 15.52k1cv.1g2p30lbn.venk; mclb], total: 0(700) X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Level: X-Footer: bWV0cm90ZWsucnU= Received: from h-e2.ddg ([85.143.252.66]) (authenticated user i.bornyakov@metrotek.ru) by mail.pr-group.ru with ESMTPSA (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256 bits)); Wed, 11 May 2022 11:15:51 +0300 Date: Wed, 11 May 2022 11:15:32 +0300 From: Ivan Bornyakov To: Conor Dooley Cc: Conor.Dooley@microchip.com, mdf@kernel.org, hao.wu@intel.com, yilun.xu@intel.com, trix@redhat.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, linux-fpga@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, system@metrotek.ru Subject: Re: [PATCH v11 2/3] fpga: microchip-spi: add Microchip MPF FPGA manager Message-ID: <20220511081532.7gkmz3uumzxgwfaf@h-e2.ddg> References: <20220507074304.11144-1-i.bornyakov@metrotek.ru> <20220507074304.11144-3-i.bornyakov@metrotek.ru> <20220509171621.zk4owxwlngxjodgz@x260> <4b752147-1a09-a4af-bc5d-3b132b84ef49@conchuod.ie> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4b752147-1a09-a4af-bc5d-3b132b84ef49@conchuod.ie> X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 10, 2022 at 12:29:54PM +0100, Conor Dooley wrote: > On 09/05/2022 19:56, Conor Dooley wrote: > > On 09/05/2022 18:16, Ivan Bornyakov wrote: > > > On Mon, May 09, 2022 at 11:41:18AM +0000, Conor.Dooley@microchip.com wrote: > > > > Hey Ivan, one comment below. > > > > Thanks, > > > > Conor. > > > > > > > > On 07/05/2022 08:43, Ivan Bornyakov wrote: > > > > > ... snip ... > > > > > +static int mpf_read_status(struct spi_device *spi) > > > > > +{ > > > > > + u8 status, status_command = MPF_SPI_READ_STATUS; > > > > > + struct spi_transfer xfer = { > > > > > + .tx_buf = &status_command, > > > > > + .rx_buf = &status, > > > > > + .len = 1, > > > > > + }; > > > > > + int ret = spi_sync_transfer(spi, &xfer, 1); > > > > > + > > > > > + if ((status & MPF_STATUS_SPI_VIOLATION) || > > > > > + (status & MPF_STATUS_SPI_ERROR)) > > > > > + ret = -EIO; > > > > > + > > > > > + return ret ? : status; > > > > > +} > > > > > + > > > > > ... snip ... > > > > > + > > > > > +static int poll_status_not_busy(struct spi_device *spi, u8 mask) > > > > > +{ > > > > > + int status, timeout = MPF_STATUS_POLL_TIMEOUT; > > > > > + > > > > > + while (timeout--) { > > > > > + status = mpf_read_status(spi); > > > > > + if (status < 0 || > > > > > + (!(status & MPF_STATUS_BUSY) && (!mask || (status & mask)))) > > > > > + return status; > > > > > + > > > > > + usleep_range(1000, 2000); > > > > > + } > > > > > + > > > > > + return -EBUSY; > > > > > +} > > > > > > > > Is there a reason you changed this from the snippet you sent me > > > > in the responses to version 8: > > > > static int poll_status_not_busy(struct spi_device *spi, u8 mask) > > > > { > > > > u8 status, status_command = MPF_SPI_READ_STATUS; > > > > int ret, timeout = MPF_STATUS_POLL_TIMEOUT; > > > > struct spi_transfer xfer = { > > > > .tx_buf = &status_command, > > > > .rx_buf = &status, > > > > .len = 1, > > > > }; > > > > > > > > while (timeout--) { > > > > ret = spi_sync_transfer(spi, &xfer, 1); > > > > if (ret < 0) > > > > return ret; > > > > > > > > if (!(status & MPF_STATUS_BUSY) && (!mask || (status & mask))) > > > > return status; > > > > > > > > usleep_range(1000, 2000); > > > > } > > > > > > > > return -EBUSY; > > > > } > > > > > > > > With the current version, I hit the "Failed to write bitstream > > > > frame" check in mpf_ops_write at random points in the transfer. > > > > Replacing poll_status_not_busy with the above allows it to run > > > > to completion. > > > > > > In my eyes they are equivalent, aren't they? > > > > > > > I was in a bit of a rush today & didn't have time to do proper > > debugging, I'll put some debug code in tomorrow and try to find > > exactly what is different between the two. > > > > Off the top of my head, since I don't have a board on me to test, > > the only difference I can see is that with the snippet you only > > checked if spi_sync_transfer was negative whereas now you check > > if it has a value at all w/ that ternary operator. > > > > But even that seems like it *shouldn't* be the problem, since ret > > should contain -errno or zero, right? > > Either way, I will do some digging tomorrow. > > I put a printk("status %x, ret %d", status, ret); into the failure > path of mpf_read_status() & it looks like a status 0xA is being > returned - error & ready? That seems like a very odd combo to be > getting back out of it. It shouldn't be dodgy driver/connection > either, b/c that's what I see if I connect my protocol analyser: > https://i.imgur.com/VbjgfCk.png > > That's mosi (hex), ss, sclk, mosi, miso (hex), miso in descending > order. > > I think what was happening was with the snippet you returned one > of the following: -EBUSY, ret (aka -errno) or status. Since status > is positive, the checks in mpf_spi_write.*() saw nothing wrong at > all and programming continued despite there being a problem. > > The new version fixes this by returning -EIO rather than status from > poll_status_not_busy(). > > I wish I had a socketable PolarFire so I could investigate further, > but this looks like it might a be hardware issue somewhere on my > end? > > So ye, sorry for the noise and carry on! I'll try tofind what is to > blame for it. > > Thanks, > Conor. > Hi, Conor. I've just noticed in SPI-DirectC User Guide [1] ch. 9 SmartFusion2 and IGLOO2 SPI-Slave Programming Waveform Analysis, that hw status checked two times every time. Does MPF family also need double check hw status? Does adding second mpf_read_status() to poll_status_not_busy() routine help with your issue?