Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 May 2004 23:58:11 -0700 (PDT)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/dev/uart uart_dev_z8530.c
Message-ID:  <200405040658.i446wBEh073711@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
marcel      2004/05/03 23:58:10 PDT

  FreeBSD src repository

  Modified files:
    sys/dev/uart         uart_dev_z8530.c 
  Log:
  Fix hangs caused by z8530_bus_ipend() returning UART_IPEND_TXIDLE
  not as a pending interrupt status, but as a matter of status quo.
  Consequently, when there's no data to be transmitted the condition
  is not cleared and uart_intr() is stuck in an infinite loop trying
  to clear the UART_IPEND_TXIDLE status.
  The z8530_bus_ipend() function is changed to return idle only once
  after having sent any data.
  
  The root cause for this problem is that we cannot use the interrupt
  status bits of the SCC itself. The register that holds the interrupt
  status can only be accessed by channel A and holds the status for
  both channels. Using the interrupt status register would complicate
  the driver because we need to synchronize access to the SCC between
  the channels.
  
  Elementary testing: marius
  
  Revision  Changes    Path
  1.7       +7 -1      src/sys/dev/uart/uart_dev_z8530.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405040658.i446wBEh073711>