83xx HDLC Driver Dev - Multiple PHYs?
From: Russell McGuire <hidden>
Date: 2008-01-30 05:10:52
All, I have gotten my HDLC driver up to the point where it can register itself with the Linux kernel. However now I am faced with a dilemma and style question, that is probably best answered by you driver developers that have more experience. I am putting support for multiple PHY's into the HDLC driver, but after converting it to use the of_device tree, and inserting a UCC@5000 for a single UCC HDLC driver, it occurred to me that if I insert more devices (UCC@6000, UCC@7000, UCC@8000) that the driver will attempt to load multiple times. So here is the question. Solution 1: Should I develop the system to have a single ucc@xxxx entry in the platform.dts file and have a field(s) like phy-count=<4>, to support multiple devices? And have each instance of the module contain private data for one UCC, interrupt handling, etc... OR Solution 2: Is there a way to have a module know if it has already been loaded, so it doesn't insert multiple times and then play the rest like Solution 3? OR Solution 3: Have phy-count=4; defined in the driver header, or a module parameter, and have a single module instance of the driver itself responsible for creating a single private data structure and setting up multiple UCC's and PHY's? This also feeds into a question on SET_NETDEV_DEV. How does it react to multiple net devices attached to a single base driver? -Russ
-----Original Message----- From: Andy Fleming [mailto:afleming@freescale.com] Sent: Tuesday, January 29, 2008 2:33 PM To: rmcguire@videopresence.com Cc: linuxppc-embedded@ozlabs.org Subject: Re: SET_NETDEV_DEV -> 83xx HDLC Driver?? On Jan 25, 2008, at 20:43, Russell McGuire wrote:quoted
All, I am partly done porting a combination of the 83xx ATM driver and dscc4 HDLC driver into a 83xx HDLC driver. However, encounter a call I don't truly understand. SET_NETDEV_DEV(dev, pointer_to_some_handle); I can see plenty of examples of this registering some kind of PCI device handle, however in this case I am not using a PCI device. So what should the pointer be? Or can this call be ignored, and if so what are the consequences? I see the some of the Freescale Ethernet devices don't use this call. Anyway, can somebody shed some light on if I am going to need this, or a way to get it to work, without creating a PCI device?Look at gianfar.c (which uses a platform_device) or ucc_geth (which uses an of_device). Which freescale devices don't use that call? We'll fix them. Andy