From owner-freebsd-hackers@freebsd.org Sat Mar 3 20:40:16 2018 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A0525F3A5DF for ; Sat, 3 Mar 2018 20:40:16 +0000 (UTC) (envelope-from Andre.Albsmeier@siemens.com) Received: from thoth.sbs.de (thoth.sbs.de [192.35.17.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "thoth.sbs.de", Issuer "Siemens Issuing CA Internet Server 2017" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 289A67527E; Sat, 3 Mar 2018 20:40:15 +0000 (UTC) (envelope-from Andre.Albsmeier@siemens.com) Received: from mail1.siemens.de (mail1.siemens.de [139.23.33.14]) by thoth.sbs.de (8.15.2/8.15.2) with ESMTPS id w23KNjut028719 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 3 Mar 2018 21:23:45 +0100 Received: from curry.mchp.siemens.de (curry.mchp.siemens.de [139.25.40.130]) by mail1.siemens.de (8.15.2/8.15.2) with ESMTP id w23KNjwr008608; Sat, 3 Mar 2018 21:23:45 +0100 Received: (from user@localhost) by curry.mchp.siemens.de (8.15.2/8.15.2) id w23KNjo9007033; Date: Sat, 3 Mar 2018 21:23:45 +0100 From: Andre Albsmeier To: Daniel Eischen Cc: Andre Albsmeier , freebsd-hackers@FreeBSD.org Subject: Re: Adding support for MosChip 9912 PCIe (serial/parallel) cards Message-ID: <20180303202345.GA32478@bali> References: <20180302061852.GA7887@bali> <20180303064400.GA27337@bali> <20180303184359.GA29745@bali> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.7.2 (2016-11-26) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Mar 2018 20:40:16 -0000 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: 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: 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: on ppc0 > > lpt0: 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