public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS.
@ 2016-03-07 13:19 Purna Chandra Mandal
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: " Purna Chandra Mandal
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Purna Chandra Mandal @ 2016-03-07 13:19 UTC (permalink / raw)
  To: u-boot

MIPS arch implements writes{b,w,l,q}, reads{b,w,l,q}
whereas other archs implement __raw version of them.
So defining macro writes{bwlq}() to __raw_writes{bwlq}()
(and similarly for reads{bwlq}) is not necessary for MIPS.

Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>
---

Changes in v2: None

 drivers/usb/musb-new/linux-compat.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/musb-new/linux-compat.h b/drivers/usb/musb-new/linux-compat.h
index 46f83d9..9ac48c1 100644
--- a/drivers/usb/musb-new/linux-compat.h
+++ b/drivers/usb/musb-new/linux-compat.h
@@ -13,12 +13,14 @@
 		printf(fmt, ##args);		\
 	ret_warn; })
 
+#if !defined(CONFIG_MIPS)
 #define writesl(a, d, s) __raw_writesl((unsigned long)a, d, s)
 #define readsl(a, d, s) __raw_readsl((unsigned long)a, d, s)
 #define writesw(a, d, s) __raw_writesw((unsigned long)a, d, s)
 #define readsw(a, d, s) __raw_readsw((unsigned long)a, d, s)
 #define writesb(a, d, s) __raw_writesb((unsigned long)a, d, s)
 #define readsb(a, d, s) __raw_readsb((unsigned long)a, d, s)
+#endif
 
 #define device_init_wakeup(dev, a) do {} while (0)
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: fix compilation error for MIPS.
  2016-03-07 13:19 [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Purna Chandra Mandal
@ 2016-03-07 13:19 ` Purna Chandra Mandal
  2016-03-07 14:33   ` Lukasz Majewski
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 3/4] drivers: musb-new: Add USB DRC driver for Microchip PIC32 OTG controller Purna Chandra Mandal
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Purna Chandra Mandal @ 2016-03-07 13:19 UTC (permalink / raw)
  To: u-boot

Compiling USB mass storage gadget for MIPS reports redefinition error.
------------------
drivers/usb/gadget/f_mass_storage.c:286:13: error: redefinition of 'set_bit'
 inline void set_bit(int nr, volatile void *addr)
             ^
In file included from include/linux/bitops.h:123:0,
                 from include/common.h:20,
                 from drivers/usb/gadget/f_mass_storage.c:245:
./arch/mips/include/asm/bitops.h:328:24: note: previous definition of 'set_bit' was here
 static __inline__ void set_bit(int nr, volatile void * addr)
                        ^
drivers/usb/gadget/f_mass_storage.c:296:13: error: redefinition of 'clear_bit'
 inline void clear_bit(int nr, volatile void *addr)
             ^
In file included from include/linux/bitops.h:123:0,
                 from include/common.h:20,
                 from drivers/usb/gadget/f_mass_storage.c:245:
./arch/mips/include/asm/bitops.h:370:24: note: previous definition of 'clear_bit' was here
 static __inline__ void clear_bit(int nr, volatile void * addr)
-------------
Fixed it by allowing default implementation of set_bit(), clear_bit()
for non MIPS.

Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>
---

Changes in v2: None

 drivers/usb/gadget/f_mass_storage.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 1ecb92a..8ca02f2 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -283,6 +283,7 @@ static const char fsg_string_interface[] = "Mass Storage";
 struct kref {int x; };
 struct completion {int x; };
 
+#if !defined(CONFIG_MIPS)
 inline void set_bit(int nr, volatile void *addr)
 {
 	int	mask;
@@ -302,6 +303,7 @@ inline void clear_bit(int nr, volatile void *addr)
 	mask = 1 << (nr & 0x1f);
 	*a &= ~mask;
 }
+#endif
 
 struct fsg_dev;
 struct fsg_common;
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH v2 3/4] drivers: musb-new: Add USB DRC driver for Microchip PIC32 OTG controller.
  2016-03-07 13:19 [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Purna Chandra Mandal
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: " Purna Chandra Mandal
@ 2016-03-07 13:19 ` Purna Chandra Mandal
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 4/4] board: pic32mzda: enable USB-host, USB-storage support Purna Chandra Mandal
  2016-03-07 15:48 ` [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Daniel Schwierzeck
  3 siblings, 0 replies; 8+ messages in thread
From: Purna Chandra Mandal @ 2016-03-07 13:19 UTC (permalink / raw)
  To: u-boot

This driver adds support of PIC32 MUSB OTG controller as dual role device.
It implements platform specific glue to reuse musb core.

Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>
---

Changes in v2: None

 drivers/usb/musb-new/Kconfig     |   7 +
 drivers/usb/musb-new/Makefile    |   1 +
 drivers/usb/musb-new/musb_core.c |   2 +-
 drivers/usb/musb-new/pic32.c     | 294 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 303 insertions(+), 1 deletion(-)
 create mode 100644 drivers/usb/musb-new/pic32.c

diff --git a/drivers/usb/musb-new/Kconfig b/drivers/usb/musb-new/Kconfig
index 6a6cb93..4e8a543 100644
--- a/drivers/usb/musb-new/Kconfig
+++ b/drivers/usb/musb-new/Kconfig
@@ -15,6 +15,13 @@ config USB_MUSB_GADGET
 
 if USB_MUSB_HOST || USB_MUSB_GADGET
 
+config USB_MUSB_PIC32
+	bool "Enable Microchip PIC32 DRC USB controller"
+	depends on DM_USB && MACH_PIC32
+	help
+	  Say y to enable PIC32 USB DRC controller support
+	  if it is available on your Microchip PIC32 platform.
+
 config USB_MUSB_SUNXI
 	bool "Enable sunxi OTG / DRC USB controller"
 	depends on ARCH_SUNXI
diff --git a/drivers/usb/musb-new/Makefile b/drivers/usb/musb-new/Makefile
index 072d516..df1c3c8 100644
--- a/drivers/usb/musb-new/Makefile
+++ b/drivers/usb/musb-new/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_USB_MUSB_HOST) += musb_host.o musb_core.o musb_uboot.o
 obj-$(CONFIG_USB_MUSB_DSPS) += musb_dsps.o
 obj-$(CONFIG_USB_MUSB_AM35X) += am35x.o
 obj-$(CONFIG_USB_MUSB_OMAP2PLUS) += omap2430.o
+obj-$(CONFIG_USB_MUSB_PIC32) += pic32.o
 obj-$(CONFIG_USB_MUSB_SUNXI) += sunxi.o
 
 ccflags-y := $(call cc-option,-Wno-unused-variable) \
diff --git a/drivers/usb/musb-new/musb_core.c b/drivers/usb/musb-new/musb_core.c
index a6d6af6..dd0443c 100644
--- a/drivers/usb/musb-new/musb_core.c
+++ b/drivers/usb/musb-new/musb_core.c
@@ -259,7 +259,7 @@ void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
 	}
 }
 
-#if !defined(CONFIG_USB_MUSB_AM35X)
+#if !defined(CONFIG_USB_MUSB_AM35X) && !defined(CONFIG_USB_MUSB_PIC32)
 /*
  * Unload an endpoint's FIFO
  */
diff --git a/drivers/usb/musb-new/pic32.c b/drivers/usb/musb-new/pic32.c
new file mode 100644
index 0000000..980a971
--- /dev/null
+++ b/drivers/usb/musb-new/pic32.c
@@ -0,0 +1,294 @@
+/*
+ * Microchip PIC32 MUSB "glue layer"
+ *
+ * Copyright (C) 2015, Microchip Technology Inc.
+ *  Cristian Birsan <cristian.birsan@microchip.com>
+ *  Purna Chandra Mandal <purna.mandal@microchip.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ *
+ * Based on the dsps "glue layer" code.
+ */
+
+#include <common.h>
+#include <linux/usb/musb.h>
+#include "linux-compat.h"
+#include "musb_core.h"
+#include "musb_uboot.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define PIC32_TX_EP_MASK	0x0f		/* EP0 + 7 Tx EPs */
+#define PIC32_RX_EP_MASK	0x0e		/* 7 Rx EPs */
+
+#define MUSB_SOFTRST		0x7f
+#define  MUSB_SOFTRST_NRST	BIT(0)
+#define  MUSB_SOFTRST_NRSTX	BIT(1)
+
+#define USBCRCON		0
+#define  USBCRCON_USBWKUPEN	BIT(0)  /* Enable Wakeup Interrupt */
+#define  USBCRCON_USBRIE	BIT(1)  /* Enable Remote resume Interrupt */
+#define  USBCRCON_USBIE		BIT(2)  /* Enable USB General interrupt */
+#define  USBCRCON_SENDMONEN	BIT(3)  /* Enable Session End VBUS monitoring */
+#define  USBCRCON_BSVALMONEN	BIT(4)  /* Enable B-Device VBUS monitoring */
+#define  USBCRCON_ASVALMONEN	BIT(5)  /* Enable A-Device VBUS monitoring */
+#define  USBCRCON_VBUSMONEN	BIT(6)  /* Enable VBUS monitoring */
+#define  USBCRCON_PHYIDEN	BIT(7)  /* PHY ID monitoring enable */
+#define  USBCRCON_USBIDVAL	BIT(8)  /* USB ID value */
+#define  USBCRCON_USBIDOVEN	BIT(9)  /* USB ID override enable */
+#define  USBCRCON_USBWK		BIT(24) /* USB Wakeup Status */
+#define  USBCRCON_USBRF		BIT(25) /* USB Resume Status */
+#define  USBCRCON_USBIF		BIT(26) /* USB General Interrupt Status */
+
+static void __iomem *musb_glue;
+
+/* pic32_musb_disable - disable HDRC */
+static void pic32_musb_disable(struct musb *musb)
+{
+}
+
+/* pic32_musb_enable - enable HDRC */
+static int pic32_musb_enable(struct musb *musb)
+{
+	/* soft reset by NRSTx */
+	musb_writeb(musb->mregs, MUSB_SOFTRST, MUSB_SOFTRST_NRSTX);
+	/* set mode */
+	musb_platform_set_mode(musb, musb->board_mode);
+
+	return 0;
+}
+
+static irqreturn_t pic32_interrupt(int irq, void *hci)
+{
+	struct musb  *musb = hci;
+	irqreturn_t ret = IRQ_NONE;
+	u32 epintr, usbintr;
+
+	/* Get usb core interrupts */
+	musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB);
+	if (musb->int_usb)
+		musb_writeb(musb->mregs, MUSB_INTRUSB, musb->int_usb);
+
+	/* Get endpoint interrupts */
+	musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX) & PIC32_RX_EP_MASK;
+	if (musb->int_rx)
+		musb_writew(musb->mregs, MUSB_INTRRX, musb->int_rx);
+
+	musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX) & PIC32_TX_EP_MASK;
+	if (musb->int_tx)
+		musb_writew(musb->mregs, MUSB_INTRTX, musb->int_tx);
+
+	/* Drop spurious RX and TX if device is disconnected */
+	if (musb->int_usb & MUSB_INTR_DISCONNECT) {
+		musb->int_tx = 0;
+		musb->int_rx = 0;
+	}
+
+	if (musb->int_tx || musb->int_rx || musb->int_usb)
+		ret |= musb_interrupt(musb);
+
+	return ret;
+}
+
+static int pic32_musb_set_mode(struct musb *musb, u8 mode)
+{
+	struct device *dev = musb->controller;
+
+	switch (mode) {
+	case MUSB_HOST:
+		clrsetbits_le32(musb_glue + USBCRCON,
+				USBCRCON_USBIDVAL, USBCRCON_USBIDOVEN);
+		break;
+	case MUSB_PERIPHERAL:
+		setbits_le32(musb_glue + USBCRCON,
+			     USBCRCON_USBIDVAL | USBCRCON_USBIDOVEN);
+		break;
+	case MUSB_OTG:
+		dev_err(dev, "MUSB OTG mode enabled\n");
+		break;
+	default:
+		dev_err(dev, "unsupported mode %d\n", mode);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int pic32_musb_init(struct musb *musb)
+{
+	u32 ctrl, hwvers;
+	u8 power;
+
+	/* Returns zero if not clocked */
+	hwvers = musb_read_hwvers(musb->mregs);
+	if (!hwvers)
+		return -ENODEV;
+
+	/* Reset the musb */
+	power = musb_readb(musb->mregs, MUSB_POWER);
+	power = power | MUSB_POWER_RESET;
+	musb_writeb(musb->mregs, MUSB_POWER, power);
+	mdelay(100);
+
+	/* Start the on-chip PHY and its PLL. */
+	power = power & ~MUSB_POWER_RESET;
+	musb_writeb(musb->mregs, MUSB_POWER, power);
+
+	musb->isr = pic32_interrupt;
+
+	ctrl =  USBCRCON_USBIF | USBCRCON_USBRF |
+		USBCRCON_USBWK | USBCRCON_USBIDOVEN |
+		USBCRCON_PHYIDEN | USBCRCON_USBIE |
+		USBCRCON_USBRIE | USBCRCON_USBWKUPEN |
+		USBCRCON_VBUSMONEN;
+	writel(ctrl, musb_glue + USBCRCON);
+
+	return 0;
+}
+
+/* PIC32 supports only 32bit read operation */
+void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
+{
+	void __iomem *fifo = hw_ep->fifo;
+	u32 val;
+	int i;
+
+	/* Read for 32bit-aligned destination address */
+	if (likely((0x03 & (unsigned long)dst) == 0) && len >= 4) {
+		readsl(fifo, dst, len / 4);
+		dst += len & ~0x03;
+		len &= 0x03;
+	}
+
+	/*
+	 * Now read the remaining 1 to 3 byte or complete length if
+	 * unaligned address.
+	 */
+	if (len > 4) {
+		for (i = 0; i < (len / 4); i++) {
+			*(u32 *)dst = musb_readl(fifo, 0);
+			dst += 4;
+		}
+		len &= 0x03;
+	}
+
+	if (len > 0) {
+		val = musb_readl(fifo, 0);
+		memcpy(dst, &val, len);
+	}
+}
+
+const struct musb_platform_ops pic32_musb_ops = {
+	.init		= pic32_musb_init,
+	.set_mode	= pic32_musb_set_mode,
+	.disable	= pic32_musb_disable,
+	.enable		= pic32_musb_enable,
+};
+
+/* PIC32 default FIFO config - fits in 8KB */
+static struct musb_fifo_cfg pic32_musb_fifo_config[] = {
+	{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 3, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 3, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 4, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 4, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 5, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 5, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 6, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 6, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 7, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 7, .style = FIFO_RX, .maxpacket = 512, },
+};
+
+static struct musb_hdrc_config pic32_musb_config = {
+	.fifo_cfg	= pic32_musb_fifo_config,
+	.fifo_cfg_size	= ARRAY_SIZE(pic32_musb_fifo_config),
+	.multipoint     = 1,
+	.dyn_fifo       = 1,
+	.num_eps        = 8,
+	.ram_bits       = 11,
+};
+
+/* PIC32 has one MUSB controller which can be host or gadget */
+static struct musb_hdrc_platform_data pic32_musb_plat = {
+	.mode           = MUSB_HOST,
+	.config         = &pic32_musb_config,
+	.power          = 250,		/* 500mA */
+	.platform_ops	= &pic32_musb_ops,
+};
+
+static int musb_usb_probe(struct udevice *dev)
+{
+	struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
+	struct musb_host_data *mdata = dev_get_priv(dev);
+	struct fdt_resource mc, glue;
+	void *fdt = (void *)gd->fdt_blob;
+	int node = dev->of_offset;
+	void __iomem *mregs;
+	int ret;
+
+	priv->desc_before_addr = true;
+
+	ret = fdt_get_named_resource(fdt, node, "reg", "reg-names",
+				     "mc", &mc);
+	if (ret < 0) {
+		printf("pic32-musb: resource \"mc\" not found\n");
+		return ret;
+	}
+
+	ret = fdt_get_named_resource(fdt, node, "reg", "reg-names",
+				     "control", &glue);
+	if (ret < 0) {
+		printf("pic32-musb: resource \"control\" not found\n");
+		return ret;
+	}
+
+	mregs = ioremap(mc.start, fdt_resource_size(&mc));
+	musb_glue = ioremap(glue.start, fdt_resource_size(&glue));
+
+#ifdef CONFIG_USB_MUSB_HOST
+	/* init controller */
+	mdata->host = musb_init_controller(&pic32_musb_plat, NULL, mregs);
+	if (!mdata->host)
+		return -EIO;
+
+	ret = musb_lowlevel_init(mdata);
+#else
+	pic32_musb_plat.mode = MUSB_PERIPHERAL;
+	ret = musb_register(&pic32_musb_plat, NULL, mregs);
+#endif
+	if (ret == 0)
+		printf("PIC32 MUSB OTG\n");
+
+	return ret;
+}
+
+static int musb_usb_remove(struct udevice *dev)
+{
+	struct musb_host_data *mdata = dev_get_priv(dev);
+
+	musb_stop(mdata->host);
+
+	return 0;
+}
+
+static const struct udevice_id pic32_musb_ids[] = {
+	{ .compatible = "microchip,pic32mzda-usb" },
+	{ }
+};
+
+U_BOOT_DRIVER(usb_musb) = {
+	.name		= "pic32-musb",
+	.id		= UCLASS_USB,
+	.of_match	= pic32_musb_ids,
+	.probe		= musb_usb_probe,
+	.remove		= musb_usb_remove,
+#ifdef CONFIG_USB_MUSB_HOST
+	.ops		= &musb_usb_ops,
+#endif
+	.platdata_auto_alloc_size = sizeof(struct usb_platdata),
+	.priv_auto_alloc_size = sizeof(struct musb_host_data),
+};
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH v2 4/4] board: pic32mzda: enable USB-host, USB-storage support.
  2016-03-07 13:19 [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Purna Chandra Mandal
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: " Purna Chandra Mandal
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 3/4] drivers: musb-new: Add USB DRC driver for Microchip PIC32 OTG controller Purna Chandra Mandal
@ 2016-03-07 13:19 ` Purna Chandra Mandal
  2016-03-07 15:48 ` [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Daniel Schwierzeck
  3 siblings, 0 replies; 8+ messages in thread
From: Purna Chandra Mandal @ 2016-03-07 13:19 UTC (permalink / raw)
  To: u-boot

Enable MUSB host and USB storage support for Microchip
PIC32MZ[DA] Starter Kit.

Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>

---

Changes in v2:
- compilation fix in drivers/usb/musb-new/linux-compat.h seperated
- compilation fix in drivers/gadget/f_mass_storage.c seperated

 arch/mips/dts/pic32mzda.dtsi   | 10 ++++++++++
 arch/mips/dts/pic32mzda_sk.dts |  4 ++++
 configs/pic32mzdask_defconfig  |  6 +++++-
 include/configs/pic32mzdask.h  |  7 +++++++
 4 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/arch/mips/dts/pic32mzda.dtsi b/arch/mips/dts/pic32mzda.dtsi
index 7d180d9..57e4500 100644
--- a/arch/mips/dts/pic32mzda.dtsi
+++ b/arch/mips/dts/pic32mzda.dtsi
@@ -171,4 +171,14 @@
 		#address-cells = <1>;
 		#size-cells = <0>;
 	};
+
+	usb: musb at 1f8e3000 {
+		compatible = "microchip,pic32mzda-usb";
+		reg = <0x1f8e3000 0x1000>,
+		      <0x1f884000 0x1000>;
+		reg-names = "mc", "control";
+		interrupts = <132 IRQ_TYPE_EDGE_RISING>,
+			     <133 IRQ_TYPE_LEVEL_HIGH>;
+		status = "disabled";
+	};
 };
diff --git a/arch/mips/dts/pic32mzda_sk.dts b/arch/mips/dts/pic32mzda_sk.dts
index e5ce0bd..0a7847e 100644
--- a/arch/mips/dts/pic32mzda_sk.dts
+++ b/arch/mips/dts/pic32mzda_sk.dts
@@ -52,4 +52,8 @@
 	ethernet_phy: lan8740_phy at 0 {
 		reg = <0>;
 	};
+};
+
+&usb {
+	status = "okay";
 };
\ No newline at end of file
diff --git a/configs/pic32mzdask_defconfig b/configs/pic32mzdask_defconfig
index 1dbe1b5..544112f 100644
--- a/configs/pic32mzdask_defconfig
+++ b/configs/pic32mzdask_defconfig
@@ -12,6 +12,7 @@ CONFIG_SYS_PROMPT="dask # "
 CONFIG_LOOPW=y
 CONFIG_CMD_MEMTEST=y
 CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_USB=y
 # CONFIG_CMD_FPGA is not set
 CONFIG_CMD_GPIO=y
 CONFIG_CMD_RARP=y
@@ -28,6 +29,9 @@ CONFIG_DM_ETH=y
 CONFIG_PIC32_ETH=y
 CONFIG_PINCTRL=y
 # CONFIG_PINCTRL_FULL is not set
-CONFIG_SYS_VSNPRINTF=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_MUSB_HOST=y
+CONFIG_USB_STORAGE=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_CMD_DHRYSTONE=y
diff --git a/include/configs/pic32mzdask.h b/include/configs/pic32mzdask.h
index 2d35a0b..1d5be2b 100644
--- a/include/configs/pic32mzdask.h
+++ b/include/configs/pic32mzdask.h
@@ -117,6 +117,12 @@
 #define CONFIG_GENERIC_MMC
 #define CONFIG_CMD_MMC
 
+/*--------------------------------------------------
+ * USB Configuration
+ */
+#define CONFIG_USB_MUSB_PIO_ONLY
+#define CONFIG_SYS_CACHELINE_SIZE	16
+
 /*-----------------------------------------------------------------------
  * File System Configuration
  */
@@ -167,6 +173,7 @@
 
 #define BOOT_TARGET_DEVICES(func)	\
 	func(MMC, mmc, 0)		\
+	func(USB, usb, 0)		\
 	func(DHCP, dhcp, na)
 
 #include <config_distro_bootcmd.h>
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: fix compilation error for MIPS.
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: " Purna Chandra Mandal
@ 2016-03-07 14:33   ` Lukasz Majewski
  2016-03-07 15:40     ` Daniel Schwierzeck
  0 siblings, 1 reply; 8+ messages in thread
From: Lukasz Majewski @ 2016-03-07 14:33 UTC (permalink / raw)
  To: u-boot

Hi Purna,

> Compiling USB mass storage gadget for MIPS reports redefinition error.
> ------------------
> drivers/usb/gadget/f_mass_storage.c:286:13: error: redefinition of
> 'set_bit' inline void set_bit(int nr, volatile void *addr)
>              ^
> In file included from include/linux/bitops.h:123:0,
>                  from include/common.h:20,
>                  from drivers/usb/gadget/f_mass_storage.c:245:
> ./arch/mips/include/asm/bitops.h:328:24: note: previous definition of
> 'set_bit' was here static __inline__ void set_bit(int nr, volatile
> void * addr) ^
> drivers/usb/gadget/f_mass_storage.c:296:13: error: redefinition of
> 'clear_bit' inline void clear_bit(int nr, volatile void *addr)
>              ^
> In file included from include/linux/bitops.h:123:0,
>                  from include/common.h:20,
>                  from drivers/usb/gadget/f_mass_storage.c:245:
> ./arch/mips/include/asm/bitops.h:370:24: note: previous definition of
> 'clear_bit' was here static __inline__ void clear_bit(int nr,
> volatile void * addr) -------------
> Fixed it by allowing default implementation of set_bit(), clear_bit()
> for non MIPS.

I seems like MIPS (and few other architectures) is providing
implementation for {set|clear}_bit.

For ARM, those are declared as externs
at ./arch/arm/include/asm/bitops.h

I wonder why it is like that ...

Nonetheless, since I do not know how to fix this issue on ARM:

Acked-by: Lukasz Majewski <l.majewski@samsung.com>

> 
> Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>
> ---
> 
> Changes in v2: None
> 
>  drivers/usb/gadget/f_mass_storage.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/usb/gadget/f_mass_storage.c
> b/drivers/usb/gadget/f_mass_storage.c index 1ecb92a..8ca02f2 100644
> --- a/drivers/usb/gadget/f_mass_storage.c
> +++ b/drivers/usb/gadget/f_mass_storage.c
> @@ -283,6 +283,7 @@ static const char fsg_string_interface[] = "Mass
> Storage"; struct kref {int x; };
>  struct completion {int x; };
>  
> +#if !defined(CONFIG_MIPS)
>  inline void set_bit(int nr, volatile void *addr)
>  {
>  	int	mask;
> @@ -302,6 +303,7 @@ inline void clear_bit(int nr, volatile void *addr)
>  	mask = 1 << (nr & 0x1f);
>  	*a &= ~mask;
>  }
> +#endif
>  
>  struct fsg_dev;
>  struct fsg_common;



-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: fix compilation error for MIPS.
  2016-03-07 14:33   ` Lukasz Majewski
@ 2016-03-07 15:40     ` Daniel Schwierzeck
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel Schwierzeck @ 2016-03-07 15:40 UTC (permalink / raw)
  To: u-boot

2016-03-07 15:33 GMT+01:00 Lukasz Majewski <l.majewski@samsung.com>:
> Hi Purna,
>
>> Compiling USB mass storage gadget for MIPS reports redefinition error.
>> ------------------
>> drivers/usb/gadget/f_mass_storage.c:286:13: error: redefinition of
>> 'set_bit' inline void set_bit(int nr, volatile void *addr)
>>              ^
>> In file included from include/linux/bitops.h:123:0,
>>                  from include/common.h:20,
>>                  from drivers/usb/gadget/f_mass_storage.c:245:
>> ./arch/mips/include/asm/bitops.h:328:24: note: previous definition of
>> 'set_bit' was here static __inline__ void set_bit(int nr, volatile
>> void * addr) ^
>> drivers/usb/gadget/f_mass_storage.c:296:13: error: redefinition of
>> 'clear_bit' inline void clear_bit(int nr, volatile void *addr)
>>              ^
>> In file included from include/linux/bitops.h:123:0,
>>                  from include/common.h:20,
>>                  from drivers/usb/gadget/f_mass_storage.c:245:
>> ./arch/mips/include/asm/bitops.h:370:24: note: previous definition of
>> 'clear_bit' was here static __inline__ void clear_bit(int nr,
>> volatile void * addr) -------------
>> Fixed it by allowing default implementation of set_bit(), clear_bit()
>> for non MIPS.
>
> I seems like MIPS (and few other architectures) is providing
> implementation for {set|clear}_bit.
>
> For ARM, those are declared as externs
> at ./arch/arm/include/asm/bitops.h
>
> I wonder why it is like that ...
>
> Nonetheless, since I do not know how to fix this issue on ARM:

can't we simply remove those functions? Then the ones from
include/linux/bitops.h respectively the arch-specific ones should be
automatically used.

>
> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>
>>
>> Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>
>> ---
>>
>> Changes in v2: None
>>
>>  drivers/usb/gadget/f_mass_storage.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/usb/gadget/f_mass_storage.c
>> b/drivers/usb/gadget/f_mass_storage.c index 1ecb92a..8ca02f2 100644
>> --- a/drivers/usb/gadget/f_mass_storage.c
>> +++ b/drivers/usb/gadget/f_mass_storage.c
>> @@ -283,6 +283,7 @@ static const char fsg_string_interface[] = "Mass
>> Storage"; struct kref {int x; };
>>  struct completion {int x; };
>>
>> +#if !defined(CONFIG_MIPS)
>>  inline void set_bit(int nr, volatile void *addr)
>>  {
>>       int     mask;
>> @@ -302,6 +303,7 @@ inline void clear_bit(int nr, volatile void *addr)
>>       mask = 1 << (nr & 0x1f);
>>       *a &= ~mask;
>>  }
>> +#endif
>>
>>  struct fsg_dev;
>>  struct fsg_common;
>
>
>
> --
> Best regards,
>
> Lukasz Majewski
>
> Samsung R&D Institute Poland (SRPOL) | Linux Platform Group



-- 
- Daniel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS.
  2016-03-07 13:19 [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Purna Chandra Mandal
                   ` (2 preceding siblings ...)
  2016-03-07 13:19 ` [U-Boot] [PATCH v2 4/4] board: pic32mzda: enable USB-host, USB-storage support Purna Chandra Mandal
@ 2016-03-07 15:48 ` Daniel Schwierzeck
  2016-03-10 11:34   ` Purna Chandra Mandal
  3 siblings, 1 reply; 8+ messages in thread
From: Daniel Schwierzeck @ 2016-03-07 15:48 UTC (permalink / raw)
  To: u-boot

2016-03-07 14:19 GMT+01:00 Purna Chandra Mandal <purna.mandal@microchip.com>:
> MIPS arch implements writes{b,w,l,q}, reads{b,w,l,q}
> whereas other archs implement __raw version of them.
> So defining macro writes{bwlq}() to __raw_writes{bwlq}()
> (and similarly for reads{bwlq}) is not necessary for MIPS.
>
> Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>
> ---
>
> Changes in v2: None
>
>  drivers/usb/musb-new/linux-compat.h | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/usb/musb-new/linux-compat.h b/drivers/usb/musb-new/linux-compat.h
> index 46f83d9..9ac48c1 100644
> --- a/drivers/usb/musb-new/linux-compat.h
> +++ b/drivers/usb/musb-new/linux-compat.h
> @@ -13,12 +13,14 @@
>                 printf(fmt, ##args);            \
>         ret_warn; })
>
> +#if !defined(CONFIG_MIPS)
>  #define writesl(a, d, s) __raw_writesl((unsigned long)a, d, s)
>  #define readsl(a, d, s) __raw_readsl((unsigned long)a, d, s)
>  #define writesw(a, d, s) __raw_writesw((unsigned long)a, d, s)
>  #define readsw(a, d, s) __raw_readsw((unsigned long)a, d, s)
>  #define writesb(a, d, s) __raw_writesb((unsigned long)a, d, s)
>  #define readsb(a, d, s) __raw_readsb((unsigned long)a, d, s)
> +#endif

I guess the current musb-new users are ARM boards only. Thus this
should be moved to arch/arm/asm/io.h. Adding I/O primitives to a
architecture-independent linux-compat.h was wrong from the beginning.

>
>  #define device_init_wakeup(dev, a) do {} while (0)
>
> --
> 1.8.3.1
>



-- 
- Daniel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS.
  2016-03-07 15:48 ` [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Daniel Schwierzeck
@ 2016-03-10 11:34   ` Purna Chandra Mandal
  0 siblings, 0 replies; 8+ messages in thread
From: Purna Chandra Mandal @ 2016-03-10 11:34 UTC (permalink / raw)
  To: u-boot

On 03/07/2016 09:18 PM, Daniel Schwierzeck wrote:

> 2016-03-07 14:19 GMT+01:00 Purna Chandra Mandal <purna.mandal@microchip.com>:
>> MIPS arch implements writes{b,w,l,q}, reads{b,w,l,q}
>> whereas other archs implement __raw version of them.
>> So defining macro writes{bwlq}() to __raw_writes{bwlq}()
>> (and similarly for reads{bwlq}) is not necessary for MIPS.
>>
>> Signed-off-by: Purna Chandra Mandal <purna.mandal@microchip.com>
>> ---
>>
>> Changes in v2: None
>>
>>  drivers/usb/musb-new/linux-compat.h | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/usb/musb-new/linux-compat.h b/drivers/usb/musb-new/linux-compat.h
>> index 46f83d9..9ac48c1 100644
>> --- a/drivers/usb/musb-new/linux-compat.h
>> +++ b/drivers/usb/musb-new/linux-compat.h
>> @@ -13,12 +13,14 @@
>>                 printf(fmt, ##args);            \
>>         ret_warn; })
>>
>> +#if !defined(CONFIG_MIPS)
>>  #define writesl(a, d, s) __raw_writesl((unsigned long)a, d, s)
>>  #define readsl(a, d, s) __raw_readsl((unsigned long)a, d, s)
>>  #define writesw(a, d, s) __raw_writesw((unsigned long)a, d, s)
>>  #define readsw(a, d, s) __raw_readsw((unsigned long)a, d, s)
>>  #define writesb(a, d, s) __raw_writesb((unsigned long)a, d, s)
>>  #define readsb(a, d, s) __raw_readsb((unsigned long)a, d, s)
>> +#endif
> I guess the current musb-new users are ARM boards only. Thus this
> should be moved to arch/arm/asm/io.h. Adding I/O primitives to a
> architecture-independent linux-compat.h was wrong from the beginning.

Makes sense! ARM Linux also defines readsl(or similar) to their __raw
version in arch/arm/include/asm/io.h file.

>>  #define device_init_wakeup(dev, a) do {} while (0)
>>
>> --
>> 1.8.3.1
>>
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-03-10 11:34 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-07 13:19 [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Purna Chandra Mandal
2016-03-07 13:19 ` [U-Boot] [PATCH v2 2/4] gadget: f_mass_storge: " Purna Chandra Mandal
2016-03-07 14:33   ` Lukasz Majewski
2016-03-07 15:40     ` Daniel Schwierzeck
2016-03-07 13:19 ` [U-Boot] [PATCH v2 3/4] drivers: musb-new: Add USB DRC driver for Microchip PIC32 OTG controller Purna Chandra Mandal
2016-03-07 13:19 ` [U-Boot] [PATCH v2 4/4] board: pic32mzda: enable USB-host, USB-storage support Purna Chandra Mandal
2016-03-07 15:48 ` [U-Boot] [PATCH v2 1/4] drivers: musb-new: fix compilation error for MIPS Daniel Schwierzeck
2016-03-10 11:34   ` Purna Chandra Mandal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox