From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751969AbcACM2b (ORCPT ); Sun, 3 Jan 2016 07:28:31 -0500 Received: from szxga03-in.huawei.com ([119.145.14.66]:2522 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751613AbcACM21 (ORCPT ); Sun, 3 Jan 2016 07:28:27 -0500 Subject: Re: [PATCH v1 3/3] ARM64 LPC: update binding doc To: Rongrong Zou , Arnd Bergmann References: <1451396032-23708-1-git-send-email-zourongrong@gmail.com> <1899302.RWIn6Bg3Dr@wuerfel> <568537C3.3060902@huawei.com> <17750582.ajK78gYOFz@wuerfel> CC: Corey Minyard , , "Catalin Marinas" , Will Deacon , , , , , From: Rongrong Zou Message-ID: <568912EE.9030009@huawei.com> Date: Sun, 3 Jan 2016 20:24:14 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.177.30.66] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020203.568912FA.0025,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: c8e66213a399bda3cc683539489bdf65 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2015/12/31 23:00, Rongrong Zou 写道: > > > 2015-12-31 22:40 GMT+08:00 Arnd Bergmann >: > > > > On Thursday 31 December 2015 22:12:19 Rongrong Zou wrote: > > > 在 2015/12/30 17:06, Arnd Bergmann 写道: > > > > On Tuesday 29 December 2015 21:33:52 Rongrong Zou wrote: > > > >> +Example: > > > >> + > > > >> + lpc_0: lpc@a01b0000 { > > > >> + #address-cells = <1>; > > > >> + #size-cells = <1>; > > > >> + compatible = "low-pin-count"; > > > >> + reg = <0x0 0xa01b0000 0x0 0x10000>; > > > >> + }; > > > > > > > > One more thought: please try to stick as closely as possible to the existing > > > > ISA binding that is documented at > > > > > > > > http://www.firmware.org/1275/bindings/isa/isa0_4d.ps > > > From the specification, I think I should use 2 32bit integer to describe the isa addr in dts. > > > > > > > > In particular, this should cover the possibility of describing both memory > > > > and I/O spaces in child devices. > > > > > > > > > > I found below config in powerpc dts "arch/powerpc/boot/dts/mpc8544ds.dts" > > > > > > isa@1e { > > > device_type = "isa"; > > > #interrupt-cells = <2>; > > > #size-cells = <1>; > > > #address-cells = <2>; > > > reg = <0xf000 0x0 0x0 0x0 0x0>; > > > ranges = <0x1 0x0 0x1000000 0x0 0x0 > > > 0x1000>; > > > interrupt-parent = <&i8259>; > > > > > > > > > > > > rtc@70 { > > > compatible = "pnpPNP,b00"; > > > reg = <0x1 0x70 0x2>; > > > }; > > > the isa space in child-node: reg = <0x1 0x70 0x2>; > > > 0x1 means IO space, 70 means addr, 0x2 is size. > > > but when i config the following in dts, the ipmi_0 node can't be probed, > > > I think there may be some problems. > > > > > > lpc_0: lpc@a01b0000 { > > > compatible = "low-pin-count"; > > > device_type = "isa"; > > > #address-cells = <2>; > > > #size-cells = <1>; > > > reg = <0x0 0xa01b0000 0x0 0x10000>; > > > > > > ipmi_0:ipmi@000000e4{ > > > device_type = "ipmi"; > > > compatible = "ipmi-bt"; > > > reg = <0x1 0x000000e4 0x4>; > > > }; > > > > The DT sample above looks good in principle. I believe what you are missing > > here is code in your driver to scan the child nodes to create the platform > > devices. of_bus_isa_translate() should work with your definition here > > and create the correct IORESOURCE_IO resources. You don't have any MMIO > > resources, so the absence of a ranges property is ok. Maybe all you > > are missing is a call to of_platform_populate() or of_platform_bus_probe()? > > > > You are right. thanks, i'll try on test board . if i get the correct result , the new patch > will be sent later. By the way, it's my another email account use when i at home. I tried, and there need some additional changes. isa@a01b0000 { /*the node name should start with "isa", because of below definition * static int of_bus_isa_match(struct device_node *np) * { * return !strcmp(np->name, "isa"); * } */ compatible = "low-pin-count"; device_type = "isa"; #address-cells = <2>; #size-cells = <1>; reg = <0x0 0xa01b0000 0x0 0x10000>; ranges = <0x1 0x0 0x0 0x0 0x1000>; /* * ranges is required, then i can get the IORESOURCE_IO <0xe4,4> from "reg = <0x1, 0x000000e4, 4>". * */ ipmi_0:ipmi@000000e4{ device_type = "ipmi"; compatible = "ipmi-bt"; reg = <0x1 0x000000e4 0x4>; }; drivers\of\address.c static int __of_address_to_resource(struct device_node *dev, const __be32 *addrp, u64 size, unsigned int flags, const char *name, struct resource *r) { u64 taddr; if ((flags & (IORESOURCE_IO | IORESOURCE_MEM)) == 0) return -EINVAL; taddr = of_translate_address(dev, addrp); if (taddr == OF_BAD_ADDR) return -EINVAL; memset(r, 0, sizeof(struct resource)); if (flags & IORESOURCE_IO) { unsigned long port; /*****************************************************************/ /*legacy port(< 0x1000) is reserved, and need no translation here*/ /*****************************************************************/ if(taddr + size < PCIBIOS_MIN_IO){ r->start = taddr; r->end = taddr + size - 1; } else{ port = pci_address_to_pio(taddr); if (port == (unsigned long)-1) return -EINVAL; r->start = port; r->end = port + size - 1; } } else { r->start = taddr; r->end = taddr + size - 1; } r->flags = flags; r->name = name ? name : dev->full_name; return 0; } > > > Arnd From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rongrong Zou Subject: Re: [PATCH v1 3/3] ARM64 LPC: update binding doc Date: Sun, 3 Jan 2016 20:24:14 +0800 Message-ID: <568912EE.9030009@huawei.com> References: <1451396032-23708-1-git-send-email-zourongrong@gmail.com> <1899302.RWIn6Bg3Dr@wuerfel> <568537C3.3060902@huawei.com> <17750582.ajK78gYOFz@wuerfel> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: In-Reply-To: Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Rongrong Zou , Arnd Bergmann Cc: Corey Minyard , gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, Catalin Marinas , Will Deacon , linuxarm-hv44wF8Li93QT0dZR+AlfA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: devicetree@vger.kernel.org =E5=9C=A8 2015/12/31 23:00, Rongrong Zou =E5=86=99=E9=81=93: > > > 2015-12-31 22:40 GMT+08:00 Arnd Bergmann >: > > > > On Thursday 31 December 2015 22:12:19 Rongrong Zou wrote: > > > =E5=9C=A8 2015/12/30 17:06, Arnd Bergmann =E5=86=99=E9=81=93: > > > > On Tuesday 29 December 2015 21:33:52 Rongrong Zou wrote: > > > >> +Example: > > > >> + > > > >> + lpc_0: lpc@a01b0000 { > > > >> + #address-cells =3D <1>; > > > >> + #size-cells =3D <1>; > > > >> + compatible =3D "low-pin-count"; > > > >> + reg =3D <0x0 0xa01b0000 0x0 0x10000>; > > > >> + }; > > > > > > > > One more thought: please try to stick as closely as possible t= o the existing > > > > ISA binding that is documented at > > > > > > > > http://www.firmware.org/1275/bindings/isa/isa0_4d.ps > > > From the specification, I think I should use 2 32bit integer to= describe the isa addr in dts. > > > > > > > > In particular, this should cover the possibility of describing= both memory > > > > and I/O spaces in child devices. > > > > > > > > > > I found below config in powerpc dts "arch/powerpc/boot/dts/mpc85= 44ds.dts" > > > > > > isa@1e { > > > device_type =3D "isa"; > > > #interrupt-cells =3D <2>; > > > #size-cells =3D <1>; > > > #address-cells =3D <2>; > > > reg =3D <0xf000 0x0 0x0 0x0 0x0= >; > > > ranges =3D <0x1 0x0 0x1000000 0= x0 0x0 > > > 0x1000>; > > > interrupt-parent =3D <&i8259>; > > > > > > > > > > > > rtc@70 { > > > compatible =3D "pnpPNP,= b00"; > > > reg =3D <0x1 0x70 0x2>; > > > }; > > > the isa space in child-node: reg =3D <0x1 0x70 0x2>; > > > 0x1 means IO space, 70 means addr, 0x2 is size. > > > but when i config the following in dts, the ipmi_0 node can't = be probed, > > > I think there may be some problems. > > > > > > lpc_0: lpc@a01b0000 { > > > compatible =3D "low-pin-count"; > > > device_type =3D "isa"; > > > #address-cells =3D <2>; > > > #size-cells =3D <1>; > > > reg =3D <0x0 0xa01b0000 0x0 0x10000>; > > > > > > ipmi_0:ipmi@000000e4{ > > > device_type =3D "ipmi"; > > > compatible =3D "ipmi-bt"; > > > reg =3D <0x1 0x000000e4 0x4>; > > > }; > > > > The DT sample above looks good in principle. I believe what you ar= e missing > > here is code in your driver to scan the child nodes to create the = platform > > devices. of_bus_isa_translate() should work with your definition h= ere > > and create the correct IORESOURCE_IO resources. You don't have any= MMIO > > resources, so the absence of a ranges property is ok. Maybe all yo= u > > are missing is a call to of_platform_populate() or of_platform_bus= _probe()? > > > > You are right. thanks, i'll try on test board . if i get the correct= result , the new patch > will be sent later. By the way, it's my another email account use whe= n i at home. I tried, and there need some additional changes. isa@a01b0000 { /*the node name should start with "isa", because of below definition * static int of_bus_isa_match(struct device_node *np) * { * return !strcmp(np->name, "isa"); * } */ compatible =3D "low-pin-count"; device_type =3D "isa"; #address-cells =3D <2>; #size-cells =3D <1>; reg =3D <0x0 0xa01b0000 0x0 0x10000>; ranges =3D <0x1 0x0 0x0 0x0 0x1000>; /* * ranges is required, then i can get the IORESOURCE_IO <0xe4,4> from "= reg =3D <0x1, 0x000000e4, 4>". * */ ipmi_0:ipmi@000000e4{ device_type =3D "ipmi"; compatible =3D "ipmi-bt"; reg =3D <0x1 0x000000e4 0x4>; }; drivers\of\address.c static int __of_address_to_resource(struct device_node *dev, const __be32 *addrp, u64 size, unsigned int flags, const char *name, struct resource *r) { u64 taddr; if ((flags & (IORESOURCE_IO | IORESOURCE_MEM)) =3D=3D 0) return -EINVAL; taddr =3D of_translate_address(dev, addrp); if (taddr =3D=3D OF_BAD_ADDR) return -EINVAL; memset(r, 0, sizeof(struct resource)); if (flags & IORESOURCE_IO) { unsigned long port; /*****************************************************************/ /*legacy port(< 0x1000) is reserved, and need no translation here*/ /*****************************************************************/ if(taddr + size < PCIBIOS_MIN_IO){ r->start =3D taddr; r->end =3D taddr + size - 1; } else{ port =3D pci_address_to_pio(taddr); if (port =3D=3D (unsigned long)-1) return -EINVAL; r->start =3D port; r->end =3D port + size - 1; } } else { r->start =3D taddr; r->end =3D taddr + size - 1; } r->flags =3D flags; r->name =3D name ? name : dev->full_name; return 0; } > > > Arnd -- To unsubscribe from this list: send the line "unsubscribe devicetree" i= n the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 From: zourongrong@huawei.com (Rongrong Zou) Date: Sun, 3 Jan 2016 20:24:14 +0800 Subject: [PATCH v1 3/3] ARM64 LPC: update binding doc In-Reply-To: References: <1451396032-23708-1-git-send-email-zourongrong@gmail.com> <1899302.RWIn6Bg3Dr@wuerfel> <568537C3.3060902@huawei.com> <17750582.ajK78gYOFz@wuerfel> Message-ID: <568912EE.9030009@huawei.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org ? 2015/12/31 23:00, Rongrong Zou ??: > > > 2015-12-31 22:40 GMT+08:00 Arnd Bergmann >: > > > > On Thursday 31 December 2015 22:12:19 Rongrong Zou wrote: > > > ? 2015/12/30 17:06, Arnd Bergmann ??: > > > > On Tuesday 29 December 2015 21:33:52 Rongrong Zou wrote: > > > >> +Example: > > > >> + > > > >> + lpc_0: lpc at a01b0000 { > > > >> + #address-cells = <1>; > > > >> + #size-cells = <1>; > > > >> + compatible = "low-pin-count"; > > > >> + reg = <0x0 0xa01b0000 0x0 0x10000>; > > > >> + }; > > > > > > > > One more thought: please try to stick as closely as possible to the existing > > > > ISA binding that is documented at > > > > > > > > http://www.firmware.org/1275/bindings/isa/isa0_4d.ps > > > From the specification, I think I should use 2 32bit integer to describe the isa addr in dts. > > > > > > > > In particular, this should cover the possibility of describing both memory > > > > and I/O spaces in child devices. > > > > > > > > > > I found below config in powerpc dts "arch/powerpc/boot/dts/mpc8544ds.dts" > > > > > > isa at 1e { > > > device_type = "isa"; > > > #interrupt-cells = <2>; > > > #size-cells = <1>; > > > #address-cells = <2>; > > > reg = <0xf000 0x0 0x0 0x0 0x0>; > > > ranges = <0x1 0x0 0x1000000 0x0 0x0 > > > 0x1000>; > > > interrupt-parent = <&i8259>; > > > > > > > > > > > > rtc at 70 { > > > compatible = "pnpPNP,b00"; > > > reg = <0x1 0x70 0x2>; > > > }; > > > the isa space in child-node: reg = <0x1 0x70 0x2>; > > > 0x1 means IO space, 70 means addr, 0x2 is size. > > > but when i config the following in dts, the ipmi_0 node can't be probed, > > > I think there may be some problems. > > > > > > lpc_0: lpc at a01b0000 { > > > compatible = "low-pin-count"; > > > device_type = "isa"; > > > #address-cells = <2>; > > > #size-cells = <1>; > > > reg = <0x0 0xa01b0000 0x0 0x10000>; > > > > > > ipmi_0:ipmi at 000000e4{ > > > device_type = "ipmi"; > > > compatible = "ipmi-bt"; > > > reg = <0x1 0x000000e4 0x4>; > > > }; > > > > The DT sample above looks good in principle. I believe what you are missing > > here is code in your driver to scan the child nodes to create the platform > > devices. of_bus_isa_translate() should work with your definition here > > and create the correct IORESOURCE_IO resources. You don't have any MMIO > > resources, so the absence of a ranges property is ok. Maybe all you > > are missing is a call to of_platform_populate() or of_platform_bus_probe()? > > > > You are right. thanks, i'll try on test board . if i get the correct result , the new patch > will be sent later. By the way, it's my another email account use when i at home. I tried, and there need some additional changes. isa at a01b0000 { /*the node name should start with "isa", because of below definition * static int of_bus_isa_match(struct device_node *np) * { * return !strcmp(np->name, "isa"); * } */ compatible = "low-pin-count"; device_type = "isa"; #address-cells = <2>; #size-cells = <1>; reg = <0x0 0xa01b0000 0x0 0x10000>; ranges = <0x1 0x0 0x0 0x0 0x1000>; /* * ranges is required, then i can get the IORESOURCE_IO <0xe4,4> from "reg = <0x1, 0x000000e4, 4>". * */ ipmi_0:ipmi at 000000e4{ device_type = "ipmi"; compatible = "ipmi-bt"; reg = <0x1 0x000000e4 0x4>; }; drivers\of\address.c static int __of_address_to_resource(struct device_node *dev, const __be32 *addrp, u64 size, unsigned int flags, const char *name, struct resource *r) { u64 taddr; if ((flags & (IORESOURCE_IO | IORESOURCE_MEM)) == 0) return -EINVAL; taddr = of_translate_address(dev, addrp); if (taddr == OF_BAD_ADDR) return -EINVAL; memset(r, 0, sizeof(struct resource)); if (flags & IORESOURCE_IO) { unsigned long port; /*****************************************************************/ /*legacy port(< 0x1000) is reserved, and need no translation here*/ /*****************************************************************/ if(taddr + size < PCIBIOS_MIN_IO){ r->start = taddr; r->end = taddr + size - 1; } else{ port = pci_address_to_pio(taddr); if (port == (unsigned long)-1) return -EINVAL; r->start = port; r->end = port + size - 1; } } else { r->start = taddr; r->end = taddr + size - 1; } r->flags = flags; r->name = name ? name : dev->full_name; return 0; } > > > Arnd