Dana H. Myers wrote:


I think it will be a little more work to please the driver; I suspect
the reason asy chokes on the PCI UART is that it has many more than
just the 8 registers for 16550 compatibility, and is, in fact, a
multi-function device.

What's the output of prtconf -v for the Exar UART device?


I have found that my problem was that there wasn't any PCI IO defined reg property under the PCI DUART node. There is only one BAR (BAR0) for that EXAR device, and the BIOS set it as PCI MEM. I will talk to our BIOS people and see if they can change this.
In the meantime I have patched the asy.c driver as follows

         switch (reglist[i].pci_phys_hi & PCI_ADDR_MASK) {
//       case PCI_ADDR_IO:               /* I/O bus reg property */
         case PCI_ADDR_MEM32:            /* MEM bus reg property */
                        if (regnum == -1) /* use only the first one */
                                regnum = i;
                        break;

and the driver now attaches all right:

           pci13a8,152, instance #2   (NOTE: the 2 first instances are ISA)
                System software properties:
                    name='interrupt-priorities' type=int items=1
                        value=0000000c
                Driver properties:
                    name='uart' type=string items=1 dev=(106,2)
                        value='16550A'
                Hardware properties:
                    name='interrupts' type=int items=1
                        value=00000001
                    name='device-id' type=int items=1
                        value=00000152
                    name='vendor-id' type=int items=1
                        value=000013a8
                    name='reg' type=byte items=40

value=00.28.03.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.10.28.03.02.00.00.00.00.00.00.00.00.00.00.00.00.00.04.00.00
                Interrupt Specifications:
                    Interrupt Priority=0xc (ipl 12), vector=0xa (10)
                Device Minor Nodes:
                    dev=(106,2)
                        dev_path=/[EMAIL PROTECTED],0/pci1022,[EMAIL 
PROTECTED]/pci13a8,[EMAIL PROTECTED]:2
                            spectype=chr type=minor
                            dev_link=/dev/term/0
                    dev=(106,131074)
                        dev_path=/[EMAIL PROTECTED],0/pci1022,[EMAIL 
PROTECTED]/pci13a8,[EMAIL PROTECTED]:2,cu
                            spectype=chr type=minor
                            dev_link=/dev/cua/0



But since the EXAR has two UART 16500 ports (1st set of 16550 8 regs is at off 0x000 and 2nd is at 0x200), I am trying to have solaris call the driver twice, so that I can fix the offset to point to the right set of 16550 registers. And thus i am hoping I will have two PCI uart instances created.

I have modified asy.conf as follows:

#
# Copyright (c) 1999 by Sun Microsystems, Inc.
# All rights reserved.
#

#pragma ident   "@(#)asy.conf   1.12    99/03/18 SMI"

interrupt-priorities=12;
name="asy" parent="/devices/[EMAIL PROTECTED],0/pci1022,[EMAIL PROTECTED]" ;
name="asy" parent="/devices/[EMAIL PROTECTED],0/pci1022,[EMAIL PROTECTED]" ;


But the asy driver is only called once for the PCI. (it is called twice for the ISA devices).

Is there anything I can do to fix this?
Thanks a lot
-jf simon

_______________________________________________
driver-discuss mailing list
driver-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to