diff mbox

[v3,2/2] ne: DeviceTree support.

Message ID 1444292921-18598-2-git-send-email-ysato@users.sourceforge.jp
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Yoshinori Sato Oct. 8, 2015, 8:28 a.m. UTC
Changes v3
Use dev_of_node
Changes v2
none

Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
---
 Documentation/devicetree/bindings/net/ne2000.txt | 17 +++++++++++++++++
 drivers/net/ethernet/8390/ne.c                   | 20 +++++++++++++++++++-
 2 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/net/ne2000.txt

Comments

kernel test robot Oct. 8, 2015, 8:43 a.m. UTC | #1
Hi Yoshinori,

[auto build test WARNING on v4.3-rc4 -- if it's inappropriate base, please ignore]

config: m68k-multi_defconfig (attached as .config)
reproduce:
        wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=m68k 

All warnings (new ones prefixed by >>):

   drivers/net/ethernet/8390/ne.c: In function 'ne_drv_probe':
>> drivers/net/ethernet/8390/ne.c:817:6: warning: passing argument 1 of 'dev_of_node' from incompatible pointer type
     if (dev_of_node(dev))
         ^
   In file included from include/linux/pnp.h:11:0,
                    from include/linux/isapnp.h:26,
                    from drivers/net/ethernet/8390/ne.c:47:
   include/linux/device.h:967:35: note: expected 'struct device *' but argument is of type 'struct net_device *'
    static inline struct device_node *dev_of_node(struct device *dev)
                                      ^
   drivers/net/ethernet/8390/ne.c:818:24: warning: passing argument 1 of 'dev_of_node' from incompatible pointer type
      of_property_read_u32(dev_of_node(dev),
                           ^
   In file included from include/linux/pnp.h:11:0,
                    from include/linux/isapnp.h:26,
                    from drivers/net/ethernet/8390/ne.c:47:
   include/linux/device.h:967:35: note: expected 'struct device *' but argument is of type 'struct net_device *'
    static inline struct device_node *dev_of_node(struct device *dev)
                                      ^

vim +/dev_of_node +817 drivers/net/ethernet/8390/ne.c

   801			}
   802	
   803		outb_p(ENISR_RDC, nic_base + EN0_ISR);	/* Ack intr. */
   804		ei_status.dmaing &= ~0x01;
   805	}
   806	
   807	static int __init ne_drv_probe(struct platform_device *pdev)
   808	{
   809		struct net_device *dev;
   810		int err, this_dev = pdev->id;
   811		struct resource *res;
   812	
   813		dev = alloc_eip_netdev();
   814		if (!dev)
   815			return -ENOMEM;
   816	
 > 817		if (dev_of_node(dev))
   818			of_property_read_u32(dev_of_node(dev),
   819					     "national,dcr", &of_dcr_val);
   820	
   821		/* ne.c doesn't populate resources in platform_device, but
   822		 * rbtx4927_ne_init and rbtx4938_ne_init do register devices
   823		 * with resources.
   824		 */
   825		res = platform_get_resource(pdev, IORESOURCE_IO, 0);

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/net/ne2000.txt b/Documentation/devicetree/bindings/net/ne2000.txt
new file mode 100644
index 0000000..8b0dfbf
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/ne2000.txt
@@ -0,0 +1,17 @@ 
+NE2000 compatible network controller
+
+Required properties:
+- compatible: "national,ne2000"
+- reg: base address and length of NE2000.
+- interrupts: interrupt specifier for the sole interrupt.
+- national,dcr: DCR setting value.
+
+Example
+
+	ne2000: ethernet@200000 {
+		compatible = "national,ne2000";
+		reg = <0x200000 32>;
+		interrupts = <17 0>;
+		national,dcr = <0x48>;
+	};
+
diff --git a/drivers/net/ethernet/8390/ne.c b/drivers/net/ethernet/8390/ne.c
index 90bf71b..82a4ec3 100644
--- a/drivers/net/ethernet/8390/ne.c
+++ b/drivers/net/ethernet/8390/ne.c
@@ -52,6 +52,7 @@  static const char version2[] =
 #include <linux/etherdevice.h>
 #include <linux/jiffies.h>
 #include <linux/platform_device.h>
+#include <linux/of.h>
 
 #include <asm/io.h>
 
@@ -72,6 +73,7 @@  static int io[MAX_NE_CARDS];
 static int irq[MAX_NE_CARDS];
 static int bad[MAX_NE_CARDS];
 static u32 ne_msg_enable;
+static unsigned int of_dcr_val;
 
 #ifdef MODULE
 module_param_array(io, int, NULL, 0);
@@ -171,6 +173,8 @@  bad_clone_list[] __initdata = {
 #  define DCR_VAL 0x48		/* 8-bit mode */
 #elif defined(CONFIG_ATARI)	/* 8-bit mode on Atari, normal on Q40 */
 #  define DCR_VAL (MACH_IS_ATARI ? 0x48 : 0x49)
+#elif defined(CONFIG_OF_NET)
+#  define DCR_VAL of_dcr_val
 #else
 #  define DCR_VAL 0x49
 #endif
@@ -304,7 +308,8 @@  static int __init ne_probe1(struct net_device *dev, unsigned long ioaddr)
 	struct ei_device *ei_local = netdev_priv(dev);
 
 	if (!request_region(ioaddr, NE_IO_EXTENT, DRV_NAME))
-		return -EBUSY;
+		if (!request_mem_region(ioaddr, NE_IO_EXTENT, DRV_NAME))
+			return -EBUSY;
 
 	reg0 = inb_p(ioaddr);
 	if (reg0 == 0xFF) {
@@ -809,11 +814,18 @@  static int __init ne_drv_probe(struct platform_device *pdev)
 	if (!dev)
 		return -ENOMEM;
 
+	if (dev_of_node(dev))
+		of_property_read_u32(dev_of_node(dev),
+				     "national,dcr", &of_dcr_val);
+
 	/* ne.c doesn't populate resources in platform_device, but
 	 * rbtx4927_ne_init and rbtx4938_ne_init do register devices
 	 * with resources.
 	 */
 	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
+	if (!res)
+		res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
 	if (res) {
 		dev->base_addr = res->start;
 		dev->irq = platform_get_irq(pdev, 0);
@@ -915,12 +927,18 @@  static int ne_drv_resume(struct platform_device *pdev)
 #define ne_drv_resume NULL
 #endif
 
+static const struct of_device_id ne2000_of_table[] __maybe_unused = {
+	{ .compatible = "national,ne2000" },
+	{ }
+};
+
 static struct platform_driver ne_driver = {
 	.remove		= ne_drv_remove,
 	.suspend	= ne_drv_suspend,
 	.resume		= ne_drv_resume,
 	.driver		= {
 		.name	= DRV_NAME,
+		.of_match_table = of_match_ptr(ne2000_of_table),
 	},
 };