lkml.org 
[lkml]   [2008]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 2/3] Xilinx: hwicap: Verify sync before reading idcode.
On Mon, Mar 17, 2008 at 11:36 AM, Stephen Neuendorffer
<stephen.neuendorffer@xilinx.com> wrote:
> It appears that in some cases, the sync word might not be recognized
> by the hardware correctly. If this happens, then attempting to read
> from the port results in an unrecoverable error because of the design
> of the FPGA core. This patch updates the code to check the status of
> the device before reading the IDCODE, in order to avoid entering this
> unrecoverable state. This patch also adds additional NOOP commands
> into the sychronization sequence, which appears to be necessary to
> avoid the condition on some hardware.
>
> Signed-off-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>

> ---
> drivers/char/xilinx_hwicap/xilinx_hwicap.c | 18 ++++++++++++++++++
> 1 files changed, 18 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
> index 304727d..5b8d646 100644
> --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c
> +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
> @@ -250,8 +250,26 @@ static int hwicap_get_configuration_register(struct hwicap_drvdata *drvdata,
> * Create the data to be written to the ICAP.
> */
> buffer[index++] = XHI_DUMMY_PACKET;
> + buffer[index++] = XHI_NOOP_PACKET;
> buffer[index++] = XHI_SYNC_PACKET;
> buffer[index++] = XHI_NOOP_PACKET;
> + buffer[index++] = XHI_NOOP_PACKET;
> +
> + /*
> + * Write the data to the FIFO and initiate the transfer of data present
> + * in the FIFO to the ICAP device.
> + */
> + status = drvdata->config->set_configuration(drvdata,
> + &buffer[0], index);
> + if (status)
> + return status;
> +
> + /* If the syncword was not found, then we need to start over. */
> + status = drvdata->config->get_status(drvdata);
> + if ((status & XHI_SR_DALIGN_MASK) != XHI_SR_DALIGN_MASK)
> + return -EIO;
> +
> + index = 0;
> buffer[index++] = hwicap_type_1_read(reg) | 1;
> buffer[index++] = XHI_NOOP_PACKET;
> buffer[index++] = XHI_NOOP_PACKET;
> --
> 1.5.3.4-dirty
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>



--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.


\
 
 \ /
  Last update: 2008-03-17 21:21    [W:0.030 / U:0.344 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site