Message ID | 1473342103-30554-1-git-send-email-linus.walleij@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thursday, September 8, 2016 3:41:43 PM CEST Linus Walleij wrote: > The SMSC9112 ethernet controller is connected to chip select 2 > on the EBI2 bus on the APQ8060 Dragonboard. We set this up by > activating EBI2, creating a chipselect entry as a subnode, and then > putting the ethernet controller in a subnode of the chipselect. > > After the chipselect is configured, the SMSC device will be > instantiated. > > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- One more thing I noticed recently is that we still have some hardcoded configuration in the driver: #ifdef CONFIG_ARCH_PXA #define SMC_USE_PXA_DMA 1 #define SMC_USE_16BIT 0 #define SMC_USE_32BIT 1 #define SMC_IRQ_SENSE IRQF_TRIGGER_FALLING #elif defined(CONFIG_SH_MAGIC_PANEL_R2) #define SMC_USE_16BIT 0 #define SMC_USE_32BIT 1 #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW #elif defined(CONFIG_ARCH_OMAP3) #define SMC_USE_16BIT 0 #define SMC_USE_32BIT 1 #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW #define SMC_MEM_RESERVED 1 #elif defined(CONFIG_ARCH_OMAP2) #define SMC_USE_16BIT 0 #define SMC_USE_32BIT 1 #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW #define SMC_MEM_RESERVED 1 #else /* * Default configuration */ #define SMC_DYNAMIC_BUS_CONFIG #endif and I suspect we have to convert the OMAP2/OMAP3 portion here to use dynamic configuration, otherwise things may go wrong in a multiplatform kernel. Arnd
On Thu, Sep 8, 2016 at 3:52 PM, Arnd Bergmann <arnd@arndb.de> wrote: > On Thursday, September 8, 2016 3:41:43 PM CEST Linus Walleij wrote: >> The SMSC9112 ethernet controller is connected to chip select 2 >> on the EBI2 bus on the APQ8060 Dragonboard. We set this up by >> activating EBI2, creating a chipselect entry as a subnode, and then >> putting the ethernet controller in a subnode of the chipselect. >> >> After the chipselect is configured, the SMSC device will be >> instantiated. >> >> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> >> --- > > One more thing I noticed recently is that we still have some > hardcoded configuration in the driver: > > #ifdef CONFIG_ARCH_PXA > #define SMC_USE_PXA_DMA 1 > #define SMC_USE_16BIT 0 > #define SMC_USE_32BIT 1 > #define SMC_IRQ_SENSE IRQF_TRIGGER_FALLING > #elif defined(CONFIG_SH_MAGIC_PANEL_R2) > #define SMC_USE_16BIT 0 > #define SMC_USE_32BIT 1 > #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW > #elif defined(CONFIG_ARCH_OMAP3) > #define SMC_USE_16BIT 0 > #define SMC_USE_32BIT 1 > #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW > #define SMC_MEM_RESERVED 1 > #elif defined(CONFIG_ARCH_OMAP2) > #define SMC_USE_16BIT 0 > #define SMC_USE_32BIT 1 > #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW > #define SMC_MEM_RESERVED 1 > #else > /* > * Default configuration > */ > > #define SMC_DYNAMIC_BUS_CONFIG > #endif > > and I suspect we have to convert the OMAP2/OMAP3 portion here to use > dynamic configuration, otherwise things may go wrong in a multiplatform > kernel. Yes, but that is not the driver enabled by this patch. This is compatible = "smsc,lan9221", "smsc,lan9115"; which has the driver smsc911x.c, but the problem you're pointing to is in the driver smc911x.c. or rather its header file. One letter difference I know, the naming of these drivers is not human-friendly. I make the mistake all the time. Yours, Linus Walleij
On Thursday, September 8, 2016 4:03:38 PM CEST Linus Walleij wrote: > > Yes, but that is not the driver enabled by this patch. This is > compatible = "smsc,lan9221", "smsc,lan9115"; > which has the driver smsc911x.c, but the problem > you're pointing to is in the driver smc911x.c. > or rather its header file. > > One letter difference I know, the naming of these > drivers is not human-friendly. I make the mistake > all the time. Ah, right. I also see now that the last user of smc911x was removed from the kernel in January 2015 with a521422ea4ae ("ARM: shmobile: mackerel: Remove Legacy C board code"), and everything is now using the smsc911x driver, so I suppose we can finally delete the old one as planned originally: commit fd9abb3d97c2ab883e4732ec1214fe64190236e7 Author: Steve Glendinning <steve.glendinning@smsc.com> Date: Wed Nov 5 00:35:37 2008 +0000 SMSC LAN911x and LAN921x vendor driver Attached is a driver for SMSC's LAN911x and LAN921x families of embedded ethernet controllers. There is an existing smc911x driver in the tree; this is intended to replace it. Dustin McIntire (the author of the smc911x driver) has expressed his support for switching to this driver. This driver contains workarounds for all known hardware issues, and has been tested on all flavours of the chip on multiple architectures. This driver now uses phylib, so this patch also adds support for the device's internal phy Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com> Signed-off-by: Bahadir Balban <Bahadir.Balban@arm.com> Signed-off-by: Dustin Mcintire <dustin@sensoria.com> Signed-off-by: Bill Gatliff <bgat@billgatliff.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com> Arnd
diff --git a/arch/arm/boot/dts/qcom-apq8060-dragonboard.dts b/arch/arm/boot/dts/qcom-apq8060-dragonboard.dts index 0abc93e5bb00..75a11cf75cbc 100644 --- a/arch/arm/boot/dts/qcom-apq8060-dragonboard.dts +++ b/arch/arm/boot/dts/qcom-apq8060-dragonboard.dts @@ -51,6 +51,29 @@ regulator-boot-on; }; + /* GPIO controlled ethernet power regulator */ + dragon_veth: xc622a331mrg { + compatible = "regulator-fixed"; + regulator-name = "XC6222A331MR-G"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vph>; + gpio = <&pm8058_gpio 40 GPIO_ACTIVE_HIGH>; + enable-active-high; + pinctrl-names = "default"; + pinctrl-0 = <&dragon_veth_gpios>; + regulator-always-on; + }; + + /* VDDvario fixed regulator */ + dragon_vario: nds332p { + compatible = "regulator-fixed"; + regulator-name = "NDS332P"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&pm8058_s3>; + }; + /* This is a levelshifter for SDCC5 */ dragon_vio_txb: txb0104rgyr { compatible = "regulator-fixed"; @@ -167,6 +190,41 @@ bias-pull-up; }; }; + + dragon_ebi2_pins: ebi2 { + /* + * Pins used by EBI2 on the Dragonboard, actually only + * only CS2 is used by a real peripheral. CS0 is just + * routed to a test point. + */ + mux0 { + /* + * Pins used by EBI2 on the Dragonboard, actually only + * only CS2 is used by a real peripheral. CS0 is just + * routed to a test point. + */ + pins = + /* "gpio39", CS1A_N this is not good to mux */ + "gpio40", /* CS2A_N */ + "gpio134"; /* CS0_N testpoint TP29 */ + function = "ebi2cs"; + }; + mux1 { + pins = + /* EBI2_ADDR_7 downto EBI2_ADDR_0 address bus */ + "gpio123", "gpio124", "gpio125", "gpio126", + "gpio127", "gpio128", "gpio129", "gpio130", + /* EBI2_DATA_15 downto EBI2_DATA_0 data bus */ + "gpio135", "gpio136", "gpio137", "gpio138", + "gpio139", "gpio140", "gpio141", "gpio142", + "gpio143", "gpio144", "gpio145", "gpio146", + "gpio147", "gpio148", "gpio149", "gpio150", + "gpio151", /* EBI2_OE_N */ + "gpio153", /* EBI2_ADV */ + "gpio157"; /* EBI2_WE_N */ + function = "ebi2"; + }; + }; }; qcom,ssbi@500000 { @@ -201,6 +259,15 @@ }; gpio@150 { + dragon_ethernet_gpios: ethernet-gpios { + pinconf { + pins = "gpio7"; + function = "normal"; + input-enable; + bias-disable; + power-source = <PM8058_GPIO_S3>; + }; + }; dragon_bmp085_gpios: bmp085-gpios { pinconf { pins = "gpio16"; @@ -238,6 +305,14 @@ power-source = <PM8058_GPIO_S3>; }; }; + dragon_veth_gpios: veth-gpios { + pinconf { + pins = "gpio40"; + function = "normal"; + bias-disable; + drive-push-pull; + }; + }; }; }; }; @@ -283,6 +358,55 @@ }; }; + ebi2@1a100000 { + /* The EBI2 will instantiate first, then populate its children */ + status = "ok"; + pinctrl-names = "default"; + pinctrl-0 = <&dragon_ebi2_pins>; + + /* + * An on-board SMSC LAN9221 chip for "debug ethernet", + * which is actually just an ordinary ethernet on the + * EBI2. This has a 25MHz chrystal next to it, so no + * clocking is needed. + */ + ethernet-ebi2@2,0 { + compatible = "smsc,lan9221", "smsc,lan9115"; + reg = <2 0x0 0x100>; + /* + * GPIO7 has interrupt 198 on the PM8058 + * The second interrupt is the PME interrupt + * for network wakeup, connected to the TLMM. + */ + interrupts-extended = <&pmicintc 198 IRQ_TYPE_EDGE_FALLING>, + <&tlmm 29 IRQ_TYPE_EDGE_RISING>; + reset-gpios = <&tlmm 30 GPIO_ACTIVE_LOW>; + vdd33a-supply = <&dragon_veth>; + vddvario-supply = <&dragon_vario>; + pinctrl-names = "default"; + pinctrl-0 = <&dragon_ethernet_gpios>; + phy-mode = "mii"; + reg-io-width = <2>; + smsc,force-external-phy; + /* IRQ on edge falling = active low */ + smsc,irq-active-low; + smsc,irq-push-pull; + + /* + * SLOW chipselect config + * Delay 9 cycles (140ns@64MHz) between SMSC + * LAN9221 Ethernet controller reads and writes + * on CS2. + */ + qcom,xmem-recovery-cycles = <0>; + qcom,xmem-write-hold-cycles = <3>; + qcom,xmem-write-delta-cycles = <31>; + qcom,xmem-read-delta-cycles = <28>; + qcom,xmem-write-wait-cycles = <9>; + qcom,xmem-read-wait-cycles = <9>; + }; + }; + rpm@104000 { /* * Set up of the PMIC RPM regulators for this board
The SMSC9112 ethernet controller is connected to chip select 2 on the EBI2 bus on the APQ8060 Dragonboard. We set this up by activating EBI2, creating a chipselect entry as a subnode, and then putting the ethernet controller in a subnode of the chipselect. After the chipselect is configured, the SMSC device will be instantiated. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- ChangeLog v2->v3: - Name chipselected device to ethernet-ebi2@2,0 - Update to the latest (v5) version of the bindings and what the EBI2 driver expects. - The SMSC911x bindings were ACKed by Arnd Bergmann and are merged to the netdev tree by David Miller. - The EBI2 bindings were ACKed by Rob Herring and a pull request for both bindings and driver is pending for ARM SoC. - This should be safe to merge for v4.9. ChangeLog v1->v2: - Use the new bindings with the first address cell indicating the chipselect - Use offset zero into the range in the EBI2 node (the range defines the base address of the chipselect) - Move all the XMEM setup to arrays in the EBI2 node --- arch/arm/boot/dts/qcom-apq8060-dragonboard.dts | 124 +++++++++++++++++++++++++ 1 file changed, 124 insertions(+)