Date: Sat, 3 Mar 2018 21:23:45 +0100 From: Andre Albsmeier <Andre.Albsmeier@siemens.com> To: Daniel Eischen <deischen@freebsd.org> Cc: Andre Albsmeier <Andre.Albsmeier@siemens.com>, freebsd-hackers@FreeBSD.org Subject: Re: Adding support for MosChip 9912 PCIe (serial/parallel) cards Message-ID: <20180303202345.GA32478@bali> In-Reply-To: <Pine.GSO.4.64.1803031439210.20340@sea.ntplx.net> References: <20180302061852.GA7887@bali> <Pine.GSO.4.64.1803020833290.14754@sea.ntplx.net> <20180303064400.GA27337@bali> <Pine.GSO.4.64.1803031051290.19549@sea.ntplx.net> <20180303184359.GA29745@bali> <Pine.GSO.4.64.1803031439210.20340@sea.ntplx.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 03-Mar-2018 at 14:41:58 -0500, Daniel Eischen wrote: > On Sat, 3 Mar 2018, Andre Albsmeier wrote: > > > On Sat, 03-Mar-2018 at 10:53:20 -0500, Daniel Eischen wrote: > >> On Sat, 3 Mar 2018, Andre Albsmeier wrote: > >> > >>> On Fri, 02-Mar-2018 at 08:36:40 -0500, Daniel Eischen wrote: > >>>> On Fri, 2 Mar 2018, Andre Albsmeier wrote: > >>>> > >>>>> I have a MosChip 9912 card (PCIe card with 1 parallel and 2 serial > >>>>> ports) sitting here which does not get detected on 11.1. I tried > >>>>> to simply add it to the uart and ppc drivers with > >>>>> > >>>> [ ... ] > >>>> > >>>> Do you try adding similar support to puc_pci_devices[] in > >>>> sys/dev/puc/pucdata.c? > >>> > >>> Just tried that: > >>> > >>> @@ -1204,6 +1204,11 @@ > >>> PUC_PORT_1S1P, 0x10, 4, 0, > >>> }, > >>> > >>> +{ 0x9710, 0x9912, 0xa000, 0x3012, > >>> + "NetMos NM9912 Dual UART and 1284 Printer port", > >>> + DEFAULT_RCLK, > >>> + PUC_PORT_2S1P, 0x10, 4, 0, > >>> +}, > >>> { 0x9710, 0x9865, 0xa000, 0x3012, > >>> "NetMos NM9865 Dual UART and 1284 Printer port", > >>> DEFAULT_RCLK, > >>> > >>> But the results are exactly the same. It also doesn't > >>> matter if puc.ko is loaded at all. > >> > >> Are you sure your subvendor and subdevice are correct? I would > > > > No ;-). I have to use: 0x9710, 0x9912, 0xa000, 0x2000, > > > > Now I have the following behaviour: > > > > When I load puc.ko I get: > > puc0: <NetMos NM9912 Dual UART and 1284 Printer port> at device 0.2 on pci9 > > > > If I load ppc.ko now, I get: > > ppc0: parallel port not found. > > > > But if I unload puc and ppc and load ppc again, I get: > > > > ppc0: <MosChip MCS9912 PCIe to Peripheral Controller> port 0xd000-0xd007,0xd008-0xd00f mem 0x89200000-0x89200fff irq 20 at device 0.2 on pci9 > > ppc0: Generic chipset (EPP/NIBBLE) in COMPATIBLE mode > > ppbus0: <Parallel port bus> on ppc0 > > lpt0: <Printer> on ppbus0 > > lpt0: Interrupt-driven port > > > > For all this I have to disable /boot/device.hints -- otherwise > > the messages "driver bug: Unable to set devclass" comes back. > > > > So I think there are two problems: > > > > First the settings of the ISA stuff in /boot/device.hints conflicted > > with the settings the driver probed. This would be easy to solve -- > > just disable them in /boot/device.hints. > > > > Second it appears that ppc only attaches if puc did some kind of > > initialisation first. But we have to detach puc so the ppc can attach. > > Strange. Did you try setting puc_load="YES" in /boot/loader.conf > and rebooting? Or are you just loading and unloading modules > for now? The latter. After each successful try I reboot to get rid of that magic initialisation puc does. But maybe I am getting closer: The card has 2 serial and 1 parallel port. But these 3 ports appear in pciconf as 3 seperate devices: none7@pci0:9:0:0: class=0x070002 card=0x1000a000 chip=0x99129710 rev=0x00 hdr=0x00 vendor = 'MosChip Semiconductor Technology Ltd.' device = 'PCIe 9912 Multi-I/O Controller' class = simple comms subclass = UART none8@pci0:9:0:1: class=0x070002 card=0x1000a000 chip=0x99129710 rev=0x00 hdr=0x00 vendor = 'MosChip Semiconductor Technology Ltd.' device = 'PCIe 9912 Multi-I/O Controller' class = simple comms subclass = UART none9@pci0:9:0:2: class=0x070103 card=0x2000a000 chip=0x99129710 rev=0x00 hdr=0x00 vendor = 'MosChip Semiconductor Technology Ltd.' device = 'PCIe 9912 Multi-I/O Controller' class = simple comms subclass = parallel port Looking at the source code of puc, I find a place where it checks the number of ports a device provides and aborts if it has only one port. This would match my understanding that puc only exists in order to help uart and ppc to work with multi-port devices where all ports are handled by a single device in pciconf. Until now, I used PUC_PORT_2S1P in my puc entry. So puc assumes that the card 0x2000a000 has 2 serial and 1 parallel port but this is probably wrong as this 0x2000a000 card only has one parallel port and the serials are handled by other devices. So the correct entry would be PUC_PORT_1P but with one single port puc does not attach. If all this is correct, I assume that puc should be left alone and ppc_pci.c is the thing I have to look at. This also matches the fact that uart attaches well to these two serial ports without the need of loading and unloading puc first so there is probably some kind of device specific initialisation missing in ppc_pci.c... -Andre
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180303202345.GA32478>