From owner-freebsd-hardware@FreeBSD.ORG Wed May 25 13:46:48 2011 Return-Path: Delivered-To: freebsd-hardware@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5DE88106566C; Wed, 25 May 2011 13:46:48 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42]) by mx1.freebsd.org (Postfix) with ESMTP id 337668FC0C; Wed, 25 May 2011 13:46:48 +0000 (UTC) Received: from bigwig.baldwin.cx (66.111.2.69.static.nyinternet.net [66.111.2.69]) by cyrus.watson.org (Postfix) with ESMTPSA id D882646B32; Wed, 25 May 2011 09:46:47 -0400 (EDT) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 6BAE78A051; Wed, 25 May 2011 09:46:47 -0400 (EDT) From: John Baldwin To: "N.J. Mann" Date: Wed, 25 May 2011 09:46:45 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110325; KDE/4.5.5; amd64; ; ) References: <20110522110002.GB91694@titania.njm.me.uk> <201105241610.49930.jhb@freebsd.org> <20110524215232.GB92553@titania.njm.me.uk> In-Reply-To: <20110524215232.GB92553@titania.njm.me.uk> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201105250946.45653.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.6 (bigwig.baldwin.cx); Wed, 25 May 2011 09:46:47 -0400 (EDT) Cc: Marcel Moolenaar , freebsd-hardware@freebsd.org Subject: Re: Sunix 4056A PCI 4 port RS-232 card - only 2 ports configured X-BeenThere: freebsd-hardware@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General discussion of FreeBSD hardware List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 May 2011 13:46:48 -0000 On Tuesday, May 24, 2011 5:52:32 pm N.J. Mann wrote: > In message <201105241610.49930.jhb@freebsd.org>, > John Baldwin (jhb@freebsd.org) wrote: > [snip] > > > > Ah, uart_puc_probe() always uses the 'uart_ns8250_class' uart driver which > > is defined in uart_dev_ns8250.c. ns8250_bus_probe() is what you want to > > instrument I think. > > ns8250_bus_probe() is called twice for each of the working devices as > follows: > > UART2: > ------ > ns8250_bus_probe:: entry > ns8250_probe::uart_getreg REG_IIR = 1 > ns8250_probe::uart_getreg REG_MCR = 0 > ns8250_bus_probe:: exit > ... > ns8250_bus_probe:: entry > ns8250_probe::uart_getreg REG_IIR = 193 > ns8250_probe::uart_getreg REG_MCR = 8 > ns8250_bus_probe:: exit > > UART3 > ----- > ns8250_bus_probe:: entry > ns8250_probe::uart_getreg REG_IIR = 1 > ns8250_probe::uart_getreg REG_MCR = 0 > ns8250_bus_probe:: exit > ... > ns8250_bus_probe:: entry > ns8250_probe::uart_getreg REG_IIR = 193 > ns8250_probe::uart_getreg REG_MCR = 8 > ns8250_bus_probe:: exit > > For the two devices that fail, ns8250_bus_probe() fails on the first > call: > > UART4 > ----- > ns8250_bus_probe:: entry > ns8250_probe::uart_getreg REG_IIR = 1 > ns8250_probe::uart_getreg REG_MCR = 64 > ns8250_bus_probe::ns8250_probe returned 6 > > UART5 > ----- > ns8250_bus_probe:: entry > ns8250_probe::uart_getreg REG_IIR = 1 > ns8250_probe::uart_getreg REG_MCR = 64 > ns8250_bus_probe::ns8250_probe returned 6 > > The value returned for the read of REG_MCR is 64, or 0x40, which causes > the premature exit: > > static int > ns8250_probe(struct uart_bas *bas) > { > u_char val; > > /* Check known 0 bits that don't depend on DLAB. */ > val = uart_getreg(bas, REG_IIR); > if (val & 0x30) > return (ENXIO); > val = uart_getreg(bas, REG_MCR); > if (val & 0xe0) > return (ENXIO); > > return (0); > } > > Do you need to know the contents of 'bas'? This goes beyond my level of knowledge. I've cc'd Marcel (author of uart) who can hopefully help with this more. -- John Baldwin