Re: linux-next: build failure after merge of the usb-gadget tree

From: Felipe Balbi
Date: Mon Dec 16 2013 - 18:39:00 EST


On Tue, Dec 17, 2013 at 10:10:32AM +1100, Stephen Rothwell wrote:
> Hi Felipe,
>
> On Mon, 16 Dec 2013 13:41:13 -0600 Felipe Balbi <balbi@xxxxxx> wrote:
> >
> > On Mon, Dec 16, 2013 at 03:40:20PM +1100, Stephen Rothwell wrote:
> > >
> > > After merging the usb-gadget tree, today's linux-next build (x86_64
> > > allmodconfig) failed like this:
> > >
> > > drivers/usb/phy/phy-keystone.c: In function 'keystone_usbphy_probe':
> > > drivers/usb/phy/phy-keystone.c:96:4: warning: passing argument 3 of 'usb_phy_gen_create_phy' makes pointer from integer without a cast [enabled by default]
> > > USB_PHY_TYPE_USB2, 0, false);
> > > ^
> > > In file included from drivers/usb/phy/phy-keystone.c:25:0:
> > > drivers/usb/phy/phy-generic.h:18:5: note: expected 'struct usb_phy_gen_xceiv_platform_data *' but argument is of type 'int'
> > > int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_gen_xceiv *nop,
> > > ^
> > > drivers/usb/phy/phy-keystone.c:96:4: error: too many arguments to function 'usb_phy_gen_create_phy'
> > > USB_PHY_TYPE_USB2, 0, false);
> > > ^
> > > In file included from drivers/usb/phy/phy-keystone.c:25:0:
> > > drivers/usb/phy/phy-generic.h:18:5: note: declared here
> > > int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_gen_xceiv *nop,
> > > ^
> > >
> > > Caused by commit 25acdd08fd71 ("usb: phy: add Keystone usb phy driver")
> > > interacting with commit bd27fa44e138 ("usb: phy: add Keystone usb phy
> > > driver") which was merged before v3.13-rc1 and is included in the
> > > usb-gadget tree.
> >
> > I cannot see how those commits would cause the error above. I have
> > recompiled my tree with allmodconfig (x86 and ARM) config and
> > omap2plus_defconfig (adding COMPILE_TEST and enabling KEYSTONE PHY) and
> > cannot see this error.
> >
> > Maybe someone applied a drivers/usb/phy/ patch ahead of me ?
>
> That would be your patch (af9f51c5512f "usb: phy: generic: fix how we find
> out about our resources") that went into v3.13-rc4 ...
>
> Can you send me a suitable merge fixup, please?

It's long, sorry, basically what I did was this:

- ret = usb_phy_gen_create_phy(dev, &k_phy->usb_phy_gen,
- USB_PHY_TYPE_USB2, 0, false);
+ ret = usb_phy_gen_create_phy(dev, &k_phy->usb_phy_gen, NULL);

full commit:

commit 7df5cc5f4558955dcba46c328e68df5351f3c958
Merge: 319e2e3 f8800d4
Author: Felipe Balbi <balbi@xxxxxx>
Date: Mon Dec 16 17:36:33 2013 -0600

Merge branch 'next' into tmp-merge

* next: (60 commits)
usb: gadget: f_fs: fix sparse warning
usb: gadget: FunctionFS: add configfs support
usb: gadget: FunctionFS: Remove compatibility layer
usb: gadget: g_ffs: convert to new interface of f_fs
usb: gadget: FunctionFS: convert to new function interface with backward compatibility
usb: gadget: FunctionFS: add devices management code
usb: gadget: FunctionFS: create utility file
usb: gadget: FunctionFS: Remove VLAIS usage from gadget code
usb: gadget: rndis: merge u_rndis.ko with usb_f_rndis.ko
usb: gadget: f_rndis: remove compatibility layer
usb: gadget: g_ffs: convert to new interface of f_rndis
usb: gadget: f_subset: remove compatibility layer
usb: gadget: g_ffs: convert to new interface of f_subset
usb: gadget: f_ecm: remove compatibility layer
usb: gadget: g_ffs: convert to new interface of f_ecm
usb: gadget: g_ffs: remove a reduntant gfs_ether_setup variable
usb: gadget: configfs: allow setting function instance's name
usb: gadget: s3c-hsotg: add flush TX FIFO when kill all requests
usb: gadget: s3c-hsotg: fix maxpacket size in s3c_hsotg_irq_enumdone
usb: phy: initialize the notifier when add a new phy
...

Signed-off-by: Felipe Balbi <balbi@xxxxxx>

diff --cc drivers/usb/phy/phy-keystone.c
index 0000000,a04fb94..533db12
mode 000000,100644..100644
--- a/drivers/usb/phy/phy-keystone.c
+++ b/drivers/usb/phy/phy-keystone.c
@@@ -1,0 -1,142 +1,141 @@@
+ /*
+ * phy-keystone - USB PHY, talking to dwc3 controller in Keystone.
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Author: WingMan Kwok <w-kwok2@xxxxxx>
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+ #include <linux/module.h>
+ #include <linux/platform_device.h>
+ #include <linux/usb/usb_phy_gen_xceiv.h>
+ #include <linux/io.h>
+ #include <linux/of.h>
+
+ #include "phy-generic.h"
+
+ /* USB PHY control register offsets */
+ #define USB_PHY_CTL_UTMI 0x0000
+ #define USB_PHY_CTL_PIPE 0x0004
+ #define USB_PHY_CTL_PARAM_1 0x0008
+ #define USB_PHY_CTL_PARAM_2 0x000c
+ #define USB_PHY_CTL_CLOCK 0x0010
+ #define USB_PHY_CTL_PLL 0x0014
+
+ #define PHY_REF_SSP_EN BIT(29)
+
+ struct keystone_usbphy {
+ struct usb_phy_gen_xceiv usb_phy_gen;
+ void __iomem *phy_ctrl;
+ };
+
+ static inline u32 keystone_usbphy_readl(void __iomem *base, u32 offset)
+ {
+ return readl(base + offset);
+ }
+
+ static inline void keystone_usbphy_writel(void __iomem *base,
+ u32 offset, u32 value)
+ {
+ writel(value, base + offset);
+ }
+
+ static int keystone_usbphy_init(struct usb_phy *phy)
+ {
+ struct keystone_usbphy *k_phy = dev_get_drvdata(phy->dev);
+ u32 val;
+
+ val = keystone_usbphy_readl(k_phy->phy_ctrl, USB_PHY_CTL_CLOCK);
+ keystone_usbphy_writel(k_phy->phy_ctrl, USB_PHY_CTL_CLOCK,
+ val | PHY_REF_SSP_EN);
+ return 0;
+ }
+
+ static void keystone_usbphy_shutdown(struct usb_phy *phy)
+ {
+ struct keystone_usbphy *k_phy = dev_get_drvdata(phy->dev);
+ u32 val;
+
+ val = keystone_usbphy_readl(k_phy->phy_ctrl, USB_PHY_CTL_CLOCK);
+ keystone_usbphy_writel(k_phy->phy_ctrl, USB_PHY_CTL_CLOCK,
+ val &= ~PHY_REF_SSP_EN);
+ }
+
+ static int keystone_usbphy_probe(struct platform_device *pdev)
+ {
+ struct device *dev = &pdev->dev;
+ struct keystone_usbphy *k_phy;
+ struct resource *res;
+ int ret;
+
+ k_phy = devm_kzalloc(dev, sizeof(*k_phy), GFP_KERNEL);
+ if (!k_phy)
+ return -ENOMEM;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res) {
+ dev_err(dev, "missing usb phy resource\n");
+ return -EINVAL;
+ }
+
+ k_phy->phy_ctrl = devm_ioremap_resource(dev, res);
+ if (IS_ERR(k_phy->phy_ctrl))
+ return PTR_ERR(k_phy->phy_ctrl);
+
- ret = usb_phy_gen_create_phy(dev, &k_phy->usb_phy_gen,
- USB_PHY_TYPE_USB2, 0, false);
++ ret = usb_phy_gen_create_phy(dev, &k_phy->usb_phy_gen, NULL);
+ if (ret)
+ return ret;
+
+ k_phy->usb_phy_gen.phy.init = keystone_usbphy_init;
+ k_phy->usb_phy_gen.phy.shutdown = keystone_usbphy_shutdown;
+
+ platform_set_drvdata(pdev, k_phy);
+
+ ret = usb_add_phy_dev(&k_phy->usb_phy_gen.phy);
+ if (ret)
+ return ret;
+
+ return 0;
+ }
+
+ static int keystone_usbphy_remove(struct platform_device *pdev)
+ {
+ struct keystone_usbphy *k_phy = platform_get_drvdata(pdev);
+
+ usb_remove_phy(&k_phy->usb_phy_gen.phy);
+
+ return 0;
+ }
+
+ static const struct of_device_id keystone_usbphy_ids[] = {
+ { .compatible = "ti,keystone-usbphy" },
+ { }
+ };
+ MODULE_DEVICE_TABLE(of, keystone_usbphy_ids);
+
+ static struct platform_driver keystone_usbphy_driver = {
+ .probe = keystone_usbphy_probe,
+ .remove = keystone_usbphy_remove,
+ .driver = {
+ .name = "keystone-usbphy",
+ .owner = THIS_MODULE,
+ .of_match_table = of_match_ptr(keystone_usbphy_ids),
+ },
+ };
+
+ module_platform_driver(keystone_usbphy_driver);
+
+ MODULE_ALIAS("platform:keystone-usbphy");
+ MODULE_AUTHOR("Texas Instruments Inc.");
+ MODULE_DESCRIPTION("Keystone USB phy driver");
+ MODULE_LICENSE("GPL v2");
diff --cc drivers/usb/phy/phy-mxs-usb.c
index 545844b,fa44c0f..b42897b
--- a/drivers/usb/phy/phy-mxs-usb.c
+++ b/drivers/usb/phy/phy-mxs-usb.c
@@@ -160,11 -167,9 +167,9 @@@ static int mxs_phy_probe(struct platfor
mxs_phy->phy.notify_disconnect = mxs_phy_on_disconnect;
mxs_phy->phy.type = USB_PHY_TYPE_USB2;

- ATOMIC_INIT_NOTIFIER_HEAD(&mxs_phy->phy.notifier);
-
mxs_phy->clk = clk;

- platform_set_drvdata(pdev, &mxs_phy->phy);
+ platform_set_drvdata(pdev, mxs_phy);

ret = usb_add_phy_dev(&mxs_phy->phy);
if (ret)

--
balbi

Attachment: signature.asc
Description: Digital signature