Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Jun 2011 21:00:09 +0200
From:      Willy Offermans <Willy@Offermans.Rompen.nl>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Willy@offermans.rompen.nl, Marcel Moolenaar <marcel@freebsd.org>, freebsd-stable@freebsd.org, freebsd-hardware@freebsd.org, Mike Tancsa <mike@sentex.net>
Subject:   Re: modem support MT9234ZPX-PCIE-NV
Message-ID:  <20110603190009.GA5809@vpn.offrom.nl>
In-Reply-To: <201106030948.26246.jhb@freebsd.org>
References:  <20110521092037.GB3271@vpn.offrom.nl> <201105311101.23905.jhb@freebsd.org> <20110603123454.GB3433@vpn.offrom.nl> <201106030948.26246.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hello John and FreeBSD friends,

On Fri, Jun 03, 2011 at 09:48:26AM -0400, John Baldwin wrote:
> On Friday, June 03, 2011 8:34:54 am Willy Offermans wrote:
> > Dear John and FreeBSD friends,
> > 
> > On Tue, May 31, 2011 at 11:01:23AM -0400, John Baldwin wrote:
> > > On Monday, May 30, 2011 5:25:14 am Willy Offermans wrote:
> > > > Hello John and FreeBSD friends,
> > > > 
> > > > On Fri, May 27, 2011 at 10:43:34AM -0400, John Baldwin wrote:
> > > > > On Friday, May 27, 2011 10:38:02 am Willy Offermans wrote:
> > > > > > Dear John and FreeBSD friends,
> > > > > > 
> > > > > > On Fri, May 27, 2011 at 08:05:56AM -0400, John Baldwin wrote:
> > > > > > > On Thursday, May 26, 2011 4:58:37 pm Mike Tancsa wrote:
> > > > > > > > On 5/26/2011 4:12 PM, John Baldwin wrote:
> > > > > > > > > 
> > > > > > > > > Hmm, can you get 'pciconf -lb' output?
> > > > > > > > > 
> > > > > > > > > Hmm, wow, I wonder how uart(4) works at all.  It tries to 
> reuse it's softc
> > > > > > > > > structure in uart_bus_attach() that was setup in 
> uart_bus_probe().  Since 
> > > > > > > it
> > > > > > > > > doesn't return 0 from its probe routine, that is forbidden.   
> I guess it
> > > > > > > > > accidentally works because of the hack where we call 
> DEVICE_PROBE() again
> > > > > > > > > to make sure the device description is correct.
> > > > > > > > 
> > > > > > > > 
> > > > > > > > I think this is a similar card.  Had it laying about for a while 
> and
> > > > > > > > popped it in.  cu -l to it, attaches, but I am not able to 
> interact with it.
> > > > > > > > 
> > > > > > > > none3@pci0:5:0:0:       class=0x070002 card=0x20282205 
> chip=0x015213a8
> > > > > > > > rev=0x02 hdr=0x00
> > > > > > > >     vendor     = 'Exar Corp.'
> > > > > > > >     device     = 'XR17C/D152 Dual PCI UART'
> > > > > > > >     class      = simple comms
> > > > > > > >     subclass   = UART
> > > > > > > >     bar   [10] = type Memory, range 32, base 0xe8950000, size 
> 1024, enabled
> > > > > > > > 
> > > > > > > > 
> > > > > > > > NetBSD supposedly has support for this card
> > > > > > > 
> > > > > > > Oh, hmm, looks like the clock has an unusual multiplier.  Does it 
> work if you
> > > > > > > use 'cu -l -s 1200' to talk at 9600 for example?  (In general use 
> speed / 8
> > > > > > > as the speed to '-s'.)
> > > > > > > 
> > > > > > > Also, is your card a modem or a dual-port card?
> > > > > > > 
> > > > > > > -- 
> > > > > > > John Baldwin
> > > > > > 
> > > > > > It is a modem.
> > > > > > 
> > > > > > As suggested:
> > > > > > 
> > > > > > kosmos# cu -l /dev/cuau0 -s 1200
> > > > > > Stale lock on cuau0 PID=3642... overriding.
> > > > > > Connected
> > > > > > at&F
> > > > > > OK
> > > > > > atdt0045*******
> > > > > > NO DIALTONE
> > > > > 
> > > > > Ok, try this updated patch.  After this you should be able to use the 
> correct
> > > > > speed:
> > > > > 
> > > > > Index: uart_bus_pci.c
> > > > > ===================================================================
> > > > > --- uart_bus_pci.c	(revision 222285)
> > > > > +++ uart_bus_pci.c	(working copy)
> > > > > @@ -110,6 +110,8 @@ static struct pci_id pci_ns8250_ids[] = {
> > > > >  { 0x1415, 0x950b, 0xffff, 0, "Oxford Semiconductor OXCB950 Cardbus 
> 16950 UART",
> > > > >  	0x10, 16384000 },
> > > > >  { 0x151f, 0x0000, 0xffff, 0, "TOPIC Semiconductor TP560 56k modem", 
> 0x10 },
> > > > > +{ 0x13a8, 0x0152, 0x2205, 0x2026, "MultiTech MultiModem ZPX", 0x10,
> > > > > +	8 * DEFAULT_RCLK },
> > > > >  { 0x9710, 0x9820, 0x1000, 1, "NetMos NM9820 Serial Port", 0x10 },
> > > > >  { 0x9710, 0x9835, 0x1000, 1, "NetMos NM9835 Serial Port", 0x10 },
> > > > >  { 0x9710, 0x9865, 0xa000, 0x1000, "NetMos NM9865 Serial Port", 0x10 
> },
> > > > > 
> > > > > -- 
> > > > > John Baldwin
> > > > 
> > > > The structure you have provided in your magic line would also need
> > > > some explanation. The data concerns the description of the chip and the
> > > > card I guess and can be gained by `pciconf -lv` 
> > > > 
> > > > uart0@pci0:6:0:0: class=0x070002 card=0x20262205 chip=0x015213a8 
> rev=0x02 hdr=0x00
> > > >     vendor     = 'Exar Corp.'
> > > >     device     = 'XR17C/D152 Dual PCI UART'
> > > >     class      = simple comms
> > > >     subclass   = UART
> > > > 
> > > > 
> > > > A more detailed explanation would not harm. The data 0x10 and 
> > > > 8 * DEFAULT_RCLK are still totally miraculous to me.
> > > 
> > > 0x10 is the resource id for the first PCI BAR (rids for PCI device 
> resources
> > > use the offset in PCI config space of the associated BAR).  It would 
> perhaps
> > > be more obvious if uart(4) and puc(4) used PCIR_BAR(0) rather than 0x10.
> > > Bumping the clock by a multiple of 8 was based on looking at the change in
> > > NetBSD that Mike Tancsa pointed to and that you verified by noting that
> > > 'cu -s 1200' connected at 9600 (9600 / 1200 == 8).
> > > 
> > > One question though, would you be able to test the patch for puc(4) that I
> > > sent to Mike Tancsa to see if your modem works with puc(4)?  The puc(4)
> > > patch is more general and if it works fine for your modem I'd rather just
> > > commit that.
> > > 
> > > -- 
> > > John Baldwin
> > 
> > I have applied the suggested patch.
> > 
> > The outcome was a new /usr/src/sys/dev/puc/pucdata.c file, which I have
> > enclosed.
> 
> Hmm, there was a newer puc patch.  Please try this one instead:
> 
> Index: pucdata.c
> ===================================================================
> --- pucdata.c	(revision 222565)
> +++ pucdata.c	(working copy)
> @@ -48,8 +48,8 @@ __FBSDID("$FreeBSD$");
>  #include <dev/puc/puc_bfe.h>
>  
>  static puc_config_f puc_config_amc;
> -static puc_config_f puc_config_cronyx;
>  static puc_config_f puc_config_diva;
> +static puc_config_f puc_config_exar;
>  static puc_config_f puc_config_icbook;
>  static puc_config_f puc_config_quatech;
>  static puc_config_f puc_config_syba;
> @@ -548,11 +548,25 @@ const struct puc_cfg puc_pci_devices[] = {
>  	    PUC_PORT_8S, 0x18, 0, 8,
>  	},
>  
> +	{   0x13a8, 0x0152, 0xffff, 0,
> +	    "Exar XR17C/D152",
> +	    DEFAULT_RCLK * 8,
> +	    PUC_PORT_2S, 0x10, 0, -1,
> +	    .config_function = puc_config_exar
> +	},
> +
> +	{   0x13a8, 0x0154, 0xffff, 0,
> +	    "Exar XR17C154",
> +	    DEFAULT_RCLK * 8,
> +	    PUC_PORT_4S, 0x10, 0, -1,
> +	    .config_function = puc_config_exar
> +	},
> +
>  	{   0x13a8, 0x0158, 0xffff, 0,
> -	    "Cronyx Omega2-PCI",
> +	    "Exar XR17C158",
>  	    DEFAULT_RCLK * 8,
>  	    PUC_PORT_8S, 0x10, 0, -1,
> -	    .config_function = puc_config_cronyx
> +	    .config_function = puc_config_exar
>  	},
>  
>  	{   0x13a8, 0x0258, 0xffff, 0,
> @@ -1014,28 +1028,28 @@ puc_config_amc(struct puc_softc *sc, enum puc_cfg_
>  }
>  
>  static int
> -puc_config_cronyx(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
> +puc_config_diva(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
>      intptr_t *res)
>  {
> +	const struct puc_cfg *cfg = sc->sc_cfg;
> +
>  	if (cmd == PUC_CFG_GET_OFS) {
> -		*res = port * 0x200;
> +		if (cfg->subdevice == 0x1282)		/* Everest SP */
> +			port <<= 1;
> +		else if (cfg->subdevice == 0x104b)	/* Maestro SP2 */
> +			port = (port == 3) ? 4 : port;
> +		*res = port * 8 + ((port > 2) ? 0x18 : 0);
>  		return (0);
>  	}
>  	return (ENXIO);
>  }
>  
>  static int
> -puc_config_diva(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
> +puc_config_exar(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
>      intptr_t *res)
>  {
> -	const struct puc_cfg *cfg = sc->sc_cfg;
> -
>  	if (cmd == PUC_CFG_GET_OFS) {
> -		if (cfg->subdevice == 0x1282)		/* Everest SP */
> -			port <<= 1;
> -		else if (cfg->subdevice == 0x104b)	/* Maestro SP2 */
> -			port = (port == 3) ? 4 : port;
> -		*res = port * 8 + ((port > 2) ? 0x18 : 0);
> +		*res = port * 0x200;
>  		return (0);
>  	}
>  	return (ENXIO);
> 
> -- 
> John Baldwin

The latter patch seems to work:

>From the boot.msg:

<snip>
....
puc0: <Exar XR17C/D152> mem 0xfbfffc00-0xfbffffff irq 16 at device 0.0 on pci6
puc0: failed to enable port mapping!
puc0: [FILTER]
uart0: <16750 or compatible> on puc0
uart0: [FILTER]
uart1: <16750 or compatible> on puc0
uart1: [FILTER]
....
</snip>

As I already pointed out, I do not have a line connected to the modem yet. 
This connection will hopefully be established tomorrow. After some rigorous 
testing I will post a mail with the on stream results. On the other hand,
if someone knows some off stream testing procedures, then I'm happy to hear
about that. For the time being I have started minicom and issued:

AT
AT&F
ATI

All with positive and already mentioned results.


-- 
Met vriendelijke groeten,
With kind regards,
Mit freundlichen Gruessen,

Willy

*************************************
 W.K. Offermans
Home:   +31 45 544 49 44
Mobile: +31 681 15 87 68
e-mail: Willy@Offermans.Rompen.nl



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