mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 00/11] archosg9: add support for tablet, third round
@ 2012-10-05 22:33 vj
  2012-10-05 22:33 ` [PATCH 01/11] regression: reset can not return vj
                   ` (11 more replies)
  0 siblings, 12 replies; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj

Hello,
 here is the third round of patches including most of the modifications suggested by your comments, which are greatly appreciated.
 one of the modifications not done is the move of the usb-booting infrastructure into a driver. Jean, can you please add more information about this? Thanks.
 
 scripts/checkpatch.pl returns two errors: "Macros with complex values should be enclosed in parenthesis", but in this case parenthesis can't be added, any suggestion?
 
 This new round of patches applies against 026e6aeb8206accdbef88408ae8c6c8bffcdc212 which includes a lots of changes.
 The change 29e4031b460d1c84c1a8fc276199d40680b354d4 "ARM OMAP: switch to gpiolib support" breaks support for the tablet and it's reverted here only to make this patch-list feature-complete.
 Can somebody check if gpiolib works for other OMAP4460-based boards?
 
 About the default serial speed: it's set to 1Mbaud to match the rate of the factory bootloader, this way we can see all the messages printed.
 Before it was set to 57600 because it was the highest speed that worked with linux because of serial port auto-suspend. It was nothing to do with barebox.

 The patch-list adds a regression fix added at faf7b7af6e51a33b88453821d792c89a84f72b1d "ARM: give boards control of the reset entry point"
 
 Regards,
  Vicente.

vj (11):
  regression: reset can not return
  twl6030: add debug info
  omap4: add/rename definitions to match datasheet
  ARM: ensure irqs are disabled
  omap: revert gpiolib
  omap4: add support for booting an omap4 from usb.
  omap4: add serial communications over usb boot
  omap4: add filesystem support over usb boot
  omap4: add support for loading second stage from usb
  mach-types: add ID for Archos G9 tablet
  Add support for Archos G9 tablet

 Documentation/oamp4_usb_booting.txt             |  27 ++
 arch/arm/Kconfig                                |   1 -
 arch/arm/Makefile                               |   1 +
 arch/arm/boards/archosg9/Makefile               |   3 +
 arch/arm/boards/archosg9/board.c                |  65 ++++
 arch/arm/boards/archosg9/config.h               |   1 +
 arch/arm/boards/archosg9/env/config             |   3 +
 arch/arm/boards/archosg9/env/init/usbboot       |   4 +
 arch/arm/boards/archosg9/lowlevel.c             |  79 ++++
 arch/arm/boards/archosg9/mux.c                  | 459 ++++++++++++++++++++++++
 arch/arm/boards/archosg9/mux.h                  |   6 +
 arch/arm/boards/friendlyarm-tiny210/lowlevel.c  |   2 +-
 arch/arm/boards/panda/lowlevel.c                |   2 +-
 arch/arm/boards/panda/mux.c                     |  52 +--
 arch/arm/boards/pcm049/lowlevel.c               |   2 +-
 arch/arm/boards/pcm049/mux.c                    |  44 +--
 arch/arm/boards/phycard-a-xl2/lowlevel.c        |   2 +-
 arch/arm/boards/phycard-a-xl2/mux.c             |  46 +--
 arch/arm/configs/archosg9_defconfig             |  70 ++++
 arch/arm/configs/archosg9_xload_defconfig       |  24 ++
 arch/arm/cpu/cpu.c                              |   6 +
 arch/arm/mach-omap/Kconfig                      |  18 +
 arch/arm/mach-omap/Makefile                     |   1 +
 arch/arm/mach-omap/gpio.c                       | 170 +++++----
 arch/arm/mach-omap/include/mach/omap4-mux.h     |  80 +++--
 arch/arm/mach-omap/include/mach/omap4-silicon.h |  13 +
 arch/arm/mach-omap/include/mach/omap4_rom_usb.h | 142 ++++++++
 arch/arm/mach-omap/include/mach/xload.h         |   1 +
 arch/arm/mach-omap/omap3_generic.c              |  19 -
 arch/arm/mach-omap/omap4_generic.c              |  38 +-
 arch/arm/mach-omap/omap4_rom_usb.c              | 186 ++++++++++
 arch/arm/mach-omap/xload.c                      |  26 ++
 arch/arm/tools/mach-types                       |   1 +
 drivers/mfd/twl6030.c                           |  20 ++
 drivers/serial/Kconfig                          |   7 +
 drivers/serial/Makefile                         |   1 +
 drivers/serial/serial_omap4_usbboot.c           |  83 +++++
 fs/Kconfig                                      |   5 +
 fs/Makefile                                     |   1 +
 fs/omap4_usbbootfs.c                            | 219 +++++++++++
 include/mfd/twl6030.h                           |   8 +
 scripts/.gitignore                              |   1 +
 scripts/Makefile                                |   4 +
 scripts/omap4_usbboot.c                         | 412 +++++++++++++++++++++
 scripts/usb.h                                   |  61 ++++
 scripts/usb_linux.c                             | 397 ++++++++++++++++++++
 46 files changed, 2594 insertions(+), 219 deletions(-)
 create mode 100644 Documentation/oamp4_usb_booting.txt
 create mode 100644 arch/arm/boards/archosg9/Makefile
 create mode 100644 arch/arm/boards/archosg9/board.c
 create mode 100644 arch/arm/boards/archosg9/config.h
 create mode 100644 arch/arm/boards/archosg9/env/config
 create mode 100644 arch/arm/boards/archosg9/env/init/usbboot
 create mode 100644 arch/arm/boards/archosg9/lowlevel.c
 create mode 100644 arch/arm/boards/archosg9/mux.c
 create mode 100644 arch/arm/boards/archosg9/mux.h
 create mode 100644 arch/arm/configs/archosg9_defconfig
 create mode 100644 arch/arm/configs/archosg9_xload_defconfig
 create mode 100644 arch/arm/mach-omap/include/mach/omap4_rom_usb.h
 create mode 100644 arch/arm/mach-omap/omap4_rom_usb.c
 create mode 100644 drivers/serial/serial_omap4_usbboot.c
 create mode 100644 fs/omap4_usbbootfs.c
 create mode 100644 scripts/omap4_usbboot.c
 create mode 100644 scripts/usb.h
 create mode 100644 scripts/usb_linux.c

-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 01/11] regression: reset can not return
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
@ 2012-10-05 22:33 ` vj
  2012-10-07  9:42   ` Sascha Hauer
  2012-10-05 22:33 ` [PATCH 02/11] twl6030: add debug info vj
                   ` (10 subsequent siblings)
  11 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 arch/arm/boards/friendlyarm-tiny210/lowlevel.c | 2 +-
 arch/arm/boards/panda/lowlevel.c               | 2 +-
 arch/arm/boards/pcm049/lowlevel.c              | 2 +-
 arch/arm/boards/phycard-a-xl2/lowlevel.c       | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/boards/friendlyarm-tiny210/lowlevel.c b/arch/arm/boards/friendlyarm-tiny210/lowlevel.c
index 791918a..695f97d 100644
--- a/arch/arm/boards/friendlyarm-tiny210/lowlevel.c
+++ b/arch/arm/boards/friendlyarm-tiny210/lowlevel.c
@@ -61,7 +61,7 @@ void __bare_init reset(void)
 #endif
 
 	if (get_pc() < 0xD0000000) /* Are we running from iRAM? */
-		return; /* No, we don't. */
+		board_init_lowlevel_return(); /* No, we don't. */
 
 	s5p_init_dram_bank_ddr2(S5P_DMC0_BASE, 0x20E00323, 0, 0);
 
diff --git a/arch/arm/boards/panda/lowlevel.c b/arch/arm/boards/panda/lowlevel.c
index 3a24148..33d06be 100644
--- a/arch/arm/boards/panda/lowlevel.c
+++ b/arch/arm/boards/panda/lowlevel.c
@@ -81,7 +81,7 @@ void reset(void)
 	common_reset();
 
 	if (get_pc() > 0x80000000)
-		return;
+		board_init_lowlevel_return();
 
 	r = 0x4030d000;
 	__asm__ __volatile__("mov sp, %0" : : "r"(r));
diff --git a/arch/arm/boards/pcm049/lowlevel.c b/arch/arm/boards/pcm049/lowlevel.c
index 20e40c5..c3fc6c7 100644
--- a/arch/arm/boards/pcm049/lowlevel.c
+++ b/arch/arm/boards/pcm049/lowlevel.c
@@ -91,7 +91,7 @@ void reset(void)
 	common_reset();
 
 	if (get_pc() > 0x80000000)
-		return;
+		board_init_lowlevel_return();
 
 	r = 0x4030d000;
 	__asm__ __volatile__("mov sp, %0" : : "r"(r));
diff --git a/arch/arm/boards/phycard-a-xl2/lowlevel.c b/arch/arm/boards/phycard-a-xl2/lowlevel.c
index d472347..24b4ab8 100644
--- a/arch/arm/boards/phycard-a-xl2/lowlevel.c
+++ b/arch/arm/boards/phycard-a-xl2/lowlevel.c
@@ -91,7 +91,7 @@ void reset(void)
 	common_reset();
 
 	if (get_pc() > 0x80000000)
-		return;
+		board_init_lowlevel_return();
 
 	r = 0x4030d000;
 	__asm__ __volatile__("mov sp, %0" : : "r"(r));
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 02/11] twl6030: add debug info
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
  2012-10-05 22:33 ` [PATCH 01/11] regression: reset can not return vj
@ 2012-10-05 22:33 ` vj
  2012-10-06  9:30   ` Jean-Christophe PLAGNIOL-VILLARD
  2012-10-05 22:33 ` [PATCH 03/11] omap4: add/rename definitions to match datasheet vj
                   ` (9 subsequent siblings)
  11 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 drivers/mfd/twl6030.c | 20 ++++++++++++++++++++
 include/mfd/twl6030.h |  8 ++++++++
 2 files changed, 28 insertions(+)

diff --git a/drivers/mfd/twl6030.c b/drivers/mfd/twl6030.c
index 01728fd..87ee232 100644
--- a/drivers/mfd/twl6030.c
+++ b/drivers/mfd/twl6030.c
@@ -39,6 +39,26 @@ static int twl_probe(struct device_d *dev)
 
 	devfs_create(&(twl_dev->core.cdev));
 
+	if (IS_ENABLED(DEBUG)) {
+		u8 i, jtag_rev, eprom_rev;
+		int r;
+		u64 dieid;
+		r = twl6030_reg_read(twl_dev, TWL6030_JTAG_JTAGVERNUM,
+			&jtag_rev);
+		r |= twl6030_reg_read(twl_dev, TWL6030_JTAG_EPROM_REV,
+			&eprom_rev);
+		for (i = 0; i < 8; i++)
+			r |= twl6030_reg_read(twl_dev, TWL6030_DIEID_0+i,
+				((u8 *)(&dieid))+i);
+		if (r)
+			dev_dbg(dev, "TWL6030 Error reading ID\n");
+		else
+			dev_dbg(dev, "TWL6030 JTAG REV: 0x%02X, "
+				"EPROM REV: 0x%02X, "
+				"DIE ID: 0x%016llX\n",
+				(unsigned)jtag_rev, (unsigned)eprom_rev, dieid);
+	}
+
 	return 0;
 }
 
diff --git a/include/mfd/twl6030.h b/include/mfd/twl6030.h
index f1278d4..bb4f773 100644
--- a/include/mfd/twl6030.h
+++ b/include/mfd/twl6030.h
@@ -371,6 +371,14 @@ enum twl6030_reg {
 	/* JTAG */
 	TWL6030_JTAG_JTAGVERNUM = 0x0287,
 	TWL6030_JTAG_EPROM_REV = 0x02DF,
+	TWL6030_DIEID_0 = 0x02C0,
+	TWL6030_DIEID_1 = 0x02C1,
+	TWL6030_DIEID_2 = 0x02C2,
+	TWL6030_DIEID_3 = 0x02C3,
+	TWL6030_DIEID_4 = 0x02C4,
+	TWL6030_DIEID_5 = 0x02C5,
+	TWL6030_DIEID_6 = 0x02C6,
+	TWL6030_DIEID_7 = 0x02C7,
 	/* GPADC Trimming */
 	TWL6030_GPADC_TRIM1 = 0x02CD,
 	TWL6030_GPADC_TRIM2 = 0x02CE,
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 03/11] omap4: add/rename definitions to match datasheet
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
  2012-10-05 22:33 ` [PATCH 01/11] regression: reset can not return vj
  2012-10-05 22:33 ` [PATCH 02/11] twl6030: add debug info vj
@ 2012-10-05 22:33 ` vj
  2012-10-05 22:33 ` [PATCH 04/11] ARM: ensure irqs are disabled vj
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 arch/arm/boards/panda/mux.c                     | 52 ++++++++--------
 arch/arm/boards/pcm049/mux.c                    | 44 +++++++-------
 arch/arm/boards/phycard-a-xl2/mux.c             | 46 +++++++-------
 arch/arm/mach-omap/include/mach/omap4-mux.h     | 80 ++++++++++++++++---------
 arch/arm/mach-omap/include/mach/omap4-silicon.h | 13 ++++
 arch/arm/mach-omap/include/mach/xload.h         |  1 +
 arch/arm/mach-omap/omap4_generic.c              |  2 +
 7 files changed, 139 insertions(+), 99 deletions(-)

diff --git a/arch/arm/boards/panda/mux.c b/arch/arm/boards/panda/mux.c
index 3783006..8225aa6 100644
--- a/arch/arm/boards/panda/mux.c
+++ b/arch/arm/boards/panda/mux.c
@@ -212,31 +212,31 @@ static const struct pad_conf_entry core_padconf_array[] = {
 };
 
 static const struct pad_conf_entry wkup_padconf_array[] = {
-	{ PAD0_SIM_IO, IEN | M0  /* sim_io */ },
-	{ PAD1_SIM_CLK, M0  /* sim_clk */ },
-	{ PAD0_SIM_RESET, M0  /* sim_reset */ },
-	{ PAD1_SIM_CD, PTU | IEN | M0  /* sim_cd */ },
-	{ PAD0_SIM_PWRCTRL, M0  /* sim_pwrctrl */ },
-	{ PAD1_SR_SCL, PTU | IEN | M0  /* sr_scl */ },
-	{ PAD0_SR_SDA, PTU | IEN | M0  /* sr_sda */ },
-	{ PAD1_FREF_XTAL_IN, M0  /* # */ },
-	{ PAD0_FREF_SLICER_IN, M0  /* fref_slicer_in */ },
-	{ PAD1_FREF_CLK_IOREQ, M0  /* fref_clk_ioreq */ },
-	{ PAD0_FREF_CLK0_OUT, M2  /* sys_drm_msecure */ },
-	{ PAD1_FREF_CLK3_REQ, PTU | IEN | M0  /* # */ },
-	{ PAD0_FREF_CLK3_OUT, M0  /* fref_clk3_out */ },
-	{ PAD1_FREF_CLK4_REQ, PTU | IEN | M0  /* # */ },
-	{ PAD0_FREF_CLK4_OUT, M0  /* # */ },
-	{ PAD1_SYS_32K, IEN | M0  /* sys_32k */ },
-	{ PAD0_SYS_NRESPWRON,  M0  /* sys_nrespwron */ },
-	{ PAD1_SYS_NRESWARM, M0  /* sys_nreswarm */ },
-	{ PAD0_SYS_PWR_REQ, PTU | M0  /* sys_pwr_req */ },
-	{ PAD1_SYS_PWRON_RESET, M3  /* gpio_wk29 */ },
-	{ PAD0_SYS_BOOT6, IEN | M3  /* gpio_wk9 */ },
-	{ PAD1_SYS_BOOT7, IEN | M3  /* gpio_wk10 */ },
-	{ PAD1_FREF_CLK3_REQ, M3 /* gpio_wk30 */ },
-	{ PAD1_FREF_CLK4_REQ, M3 /* gpio_wk7 */ },
-	{ PAD0_FREF_CLK4_OUT, M3 /* gpio_wk8 */ },
+	{ GPIO_WK0, IEN | M0  /* sim_io */ },
+	{ GPIO_WK1, M0  /* sim_clk */ },
+	{ GPIO_WK2, M0  /* sim_reset */ },
+	{ GPIO_WK3, PTU | IEN | M0  /* sim_cd */ },
+	{ GPIO_WK4, M0  /* sim_pwrctrl */ },
+	{ SR_SCL, PTU | IEN | M0  /* sr_scl */ },
+	{ SR_SDA, PTU | IEN | M0  /* sr_sda */ },
+	{ FREF_XTAL_IN, M0  /* # */ },
+	{ FREF_SLICER_IN, M0  /* fref_slicer_in */ },
+	{ FREF_CLK_IOREQ, M0  /* fref_clk_ioreq */ },
+	{ FREF_CLK0_OUT, M2  /* sys_drm_msecure */ },
+	{ FREF_CLK3_REQ, PTU | IEN | M0  /* # */ },
+	{ FREF_CLK3_OUT, M0  /* fref_clk3_out */ },
+	{ FREF_CLK4_REQ, PTU | IEN | M0  /* # */ },
+	{ FREF_CLK4_OUT, M0  /* # */ },
+	{ SYS_32K, IEN | M0  /* sys_32k */ },
+	{ SYS_NRESPWRON,  M0  /* sys_nrespwron */ },
+	{ SYS_NRESWARM, M0  /* sys_nreswarm */ },
+	{ SYS_PWR_REQ, PTU | M0  /* sys_pwr_req */ },
+	{ SYS_PWRON_RESET_OUT, M3  /* gpio_wk29 */ },
+	{ SYS_BOOT6, IEN | M3  /* gpio_wk9 */ },
+	{ SYS_BOOT7, IEN | M3  /* gpio_wk10 */ },
+	{ FREF_CLK3_REQ, M3 /* gpio_wk30 */ },
+	{ FREF_CLK4_REQ, M3 /* gpio_wk7 */ },
+	{ FREF_CLK4_OUT, M3 /* gpio_wk8 */ },
 };
 
 void set_muxconf_regs(void)
@@ -249,7 +249,7 @@ void set_muxconf_regs(void)
 
 	/* gpio_wk7 is used for controlling TPS on 4460 */
 	if (omap4_revision() >= OMAP4460_ES1_0) {
-		writew(M3, OMAP44XX_CONTROL_PADCONF_WKUP + PAD1_FREF_CLK4_REQ);
+		writew(M3, OMAP44XX_CONTROL_PADCONF_WKUP + FREF_CLK4_REQ);
 		/* Enable GPIO-1 clocks before TPS initialization */
 		omap4_enable_gpio1_wup_clocks();
 	}
diff --git a/arch/arm/boards/pcm049/mux.c b/arch/arm/boards/pcm049/mux.c
index 04e1d67..5ea88cd 100644
--- a/arch/arm/boards/pcm049/mux.c
+++ b/arch/arm/boards/pcm049/mux.c
@@ -212,28 +212,28 @@ static const struct pad_conf_entry core_padconf_array[] = {
 };
 
 static const struct pad_conf_entry wkup_padconf_array[] = {
-	{PAD0_SIM_IO, (SAFE_MODE)},					/* nc */
-	{PAD1_SIM_CLK, (SAFE_MODE)},					/* nc */
-	{PAD0_SIM_RESET, (SAFE_MODE)},					/* nc */
-	{PAD1_SIM_CD, (SAFE_MODE)},					/* nc */
-	{PAD0_SIM_PWRCTRL, (SAFE_MODE)},				/* nc */
-	{PAD1_SR_SCL, (PTU | IEN | M0)},				/* sr_scl */
-	{PAD0_SR_SDA, (PTU | IEN | M0)},				/* sr_sda */
-	{PAD1_FREF_XTAL_IN, (M0)},					/* # */
-	{PAD0_FREF_SLICER_IN, (SAFE_MODE)},				/* nc */
-	{PAD1_FREF_CLK_IOREQ, (SAFE_MODE)},				/* nc */
-	{PAD0_FREF_CLK0_OUT, (M2)},					/* sys_drm_msecure */
-	{PAD1_FREF_CLK3_REQ, (IEN | M3)},				/* gpio_wk30 */
-	{PAD0_FREF_CLK3_OUT, (M0)},					/* fref_clk3_out */
-	{PAD1_FREF_CLK4_REQ, (M0)},					/* fref_clk4_req */
-	{PAD0_FREF_CLK4_OUT, (M0)},					/* fref_clk4_out */
-	{PAD1_SYS_32K, (IEN | M0)},					/* sys_32k */
-	{PAD0_SYS_NRESPWRON, (M0)},					/* sys_nrespwron */
-	{PAD1_SYS_NRESWARM, (M0)},					/* sys_nreswarm */
-	{PAD0_SYS_PWR_REQ, (PTU | M0)},					/* sys_pwr_req */
-	{PAD1_SYS_PWRON_RESET, (M0)},					/* sys_pwron_reset_out */
-	{PAD0_SYS_BOOT6, (M0)},						/* sys_boot6 */
-	{PAD1_SYS_BOOT7, (M0)},						/* sys_boot7 */
+	{GPIO_WK0, (SAFE_MODE)},		/* nc */
+	{GPIO_WK1, (SAFE_MODE)},		/* nc */
+	{GPIO_WK2, (SAFE_MODE)},		/* nc */
+	{GPIO_WK3, (SAFE_MODE)},		/* nc */
+	{GPIO_WK4, (SAFE_MODE)},		/* nc */
+	{SR_SCL, (PTU | IEN | M0)},		/* sr_scl */
+	{SR_SDA, (PTU | IEN | M0)},		/* sr_sda */
+	{FREF_XTAL_IN, (M0)},			/* # */
+	{FREF_SLICER_IN, (SAFE_MODE)},		/* nc */
+	{FREF_CLK_IOREQ, (SAFE_MODE)},		/* nc */
+	{FREF_CLK0_OUT, (M2)},			/* sys_drm_msecure */
+	{FREF_CLK3_REQ, (IEN | M3)},		/* gpio_wk30 */
+	{FREF_CLK3_OUT, (M0)},			/* fref_clk3_out */
+	{FREF_CLK4_REQ, (M0)},			/* fref_clk4_req */
+	{FREF_CLK4_OUT, (M0)},			/* fref_clk4_out */
+	{SYS_32K, (IEN | M0)},			/* sys_32k */
+	{SYS_NRESPWRON, (M0)},			/* sys_nrespwron */
+	{SYS_NRESWARM, (M0)},			/* sys_nreswarm */
+	{SYS_PWR_REQ, (PTU | M0)},		/* sys_pwr_req */
+	{SYS_PWRON_RESET_OUT, (M0)},		/* sys_pwron_reset_out */
+	{SYS_BOOT6, (M0)},			/* sys_boot6 */
+	{SYS_BOOT7, (M0)},			/* sys_boot7 */
 };
 
 void set_muxconf_regs(void)
diff --git a/arch/arm/boards/phycard-a-xl2/mux.c b/arch/arm/boards/phycard-a-xl2/mux.c
index dc605e3..e852c84 100644
--- a/arch/arm/boards/phycard-a-xl2/mux.c
+++ b/arch/arm/boards/phycard-a-xl2/mux.c
@@ -212,28 +212,28 @@ static const struct pad_conf_entry core_padconf_array[] = {
 };
 
 static const struct pad_conf_entry wkup_padconf_array[] = {
-	{PAD0_SIM_IO, (SAFE_MODE)},					/* tbd */
-	{PAD1_SIM_CLK, (SAFE_MODE)},					/* nc */
-	{PAD0_SIM_RESET, (SAFE_MODE)},					/* nc */
-	{PAD1_SIM_CD, (SAFE_MODE)},					/* nc */
-	{PAD0_SIM_PWRCTRL, (SAFE_MODE)},				/* nc */
-	{PAD1_SR_SCL, (PTU | IEN | M0)},				/* sr_scl */
-	{PAD0_SR_SDA, (PTU | IEN | M0)},				/* sr_sda */
-	{PAD1_FREF_XTAL_IN, (M0)},					/* # */
-	{PAD0_FREF_SLICER_IN, (SAFE_MODE)},				/* nc */
-	{PAD1_FREF_CLK_IOREQ, (SAFE_MODE)},				/* nc */
-	{PAD0_FREF_CLK0_OUT, (M2)},					/* sys_drm_msecure */
-	{PAD1_FREF_CLK3_REQ, (SAFE_MODE)},				/* nc */
-	{PAD0_FREF_CLK3_OUT, (M0)},					/* fref_clk3_out */
-	{PAD1_FREF_CLK4_REQ, (IEN | M3)},				/* gpio_wk7 */
-	{PAD0_FREF_CLK4_OUT, (M0)},					/* fref_clk4_out */
-	{PAD1_SYS_32K, (IEN | M0)},					/* sys_32k */
-	{PAD0_SYS_NRESPWRON, (M0)},					/* sys_nrespwron */
-	{PAD1_SYS_NRESWARM, (M0)},					/* sys_nreswarm */
-	{PAD0_SYS_PWR_REQ, (PTU | M0)},					/* sys_pwr_req */
-	{PAD1_SYS_PWRON_RESET, (M0)},					/* sys_pwron_reset_out */
-	{PAD0_SYS_BOOT6, (M0)},						/* sys_boot6 */
-	{PAD1_SYS_BOOT7, (M0)},						/* sys_boot7 */
+	{GPIO_WK0, (SAFE_MODE)},		/* tbd */
+	{GPIO_WK1, (SAFE_MODE)},		/* nc */
+	{GPIO_WK2, (SAFE_MODE)},		/* nc */
+	{GPIO_WK3, (SAFE_MODE)},		/* nc */
+	{GPIO_WK4, (SAFE_MODE)},		/* nc */
+	{SR_SCL, (PTU | IEN | M0)},		/* sr_scl */
+	{SR_SDA, (PTU | IEN | M0)},		/* sr_sda */
+	{FREF_XTAL_IN, (M0)},			/* # */
+	{FREF_SLICER_IN, (SAFE_MODE)},		/* nc */
+	{FREF_CLK_IOREQ, (SAFE_MODE)},		/* nc */
+	{FREF_CLK0_OUT, (M2)},			/* sys_drm_msecure */
+	{FREF_CLK3_REQ, (SAFE_MODE)},		/* nc */
+	{FREF_CLK3_OUT, (M0)},			/* fref_clk3_out */
+	{FREF_CLK4_REQ, (IEN | M3)},		/* gpio_wk7 */
+	{FREF_CLK4_OUT, (M0)},			/* fref_clk4_out */
+	{SYS_32K, (IEN | M0)},			/* sys_32k */
+	{SYS_NRESPWRON, (M0)},			/* sys_nrespwron */
+	{SYS_NRESWARM, (M0)},			/* sys_nreswarm */
+	{SYS_PWR_REQ, (PTU | M0)},		/* sys_pwr_req */
+	{SYS_PWRON_RESET_OUT, (M0)},		/* sys_pwron_reset_out */
+	{SYS_BOOT6, (M0)},			/* sys_boot6 */
+	{SYS_BOOT7, (M0)},			/* sys_boot7 */
 };
 
 void set_muxconf_regs(void)
@@ -246,7 +246,7 @@ void set_muxconf_regs(void)
 
 	/* gpio_wk7 is used for controlling TPS on 4460 */
 	if (omap4_revision() >= OMAP4460_ES1_0) {
-		writew(M3, OMAP44XX_CONTROL_PADCONF_WKUP + PAD1_FREF_CLK4_REQ);
+		writew(M3, OMAP44XX_CONTROL_PADCONF_WKUP + FREF_CLK4_REQ);
 		/* Enable GPIO-1 clocks before TPS initialization */
 		omap4_enable_gpio1_wup_clocks();
 	}
diff --git a/arch/arm/mach-omap/include/mach/omap4-mux.h b/arch/arm/mach-omap/include/mach/omap4-mux.h
index 9ed6486..9088631 100644
--- a/arch/arm/mach-omap/include/mach/omap4-mux.h
+++ b/arch/arm/mach-omap/include/mach/omap4-mux.h
@@ -32,6 +32,7 @@ struct pad_conf_entry {
 
 } __attribute__ ((packed));
 
+#define WAKEUP_EN       (1 << 14)
 #ifdef CONFIG_OFF_PADCONF
 #define OFF_PD          (1 << 12)
 #define OFF_PU          (3 << 12)
@@ -123,14 +124,23 @@ struct pad_conf_entry {
 #define GPMC_WAIT0		0x008A
 #define GPMC_WAIT1		0x008C
 #define C2C_DATA11		0x008E
+#define GPMC_WAIT2          0x008E
 #define C2C_DATA12		0x0090
+#define GPMC_NCS4           0x0090
 #define C2C_DATA13		0x0092
+#define GPMC_NCS5           0x0092
 #define C2C_DATA14		0x0094
+#define GPMC_NCS6           0x0094
 #define C2C_DATA15		0x0096
+#define GPMC_NCS7           0x0096
 #define HDMI_HPD		0x0098
+#define GPIO63              0x0098
 #define HDMI_CEC		0x009A
+#define GPIO64              0x009A
 #define HDMI_DDC_SCL		0x009C
+#define GPIO65              0x009C
 #define HDMI_DDC_SDA		0x009E
+#define GPIO66              0x009E
 #define CSI21_DX0		0x00A0
 #define CSI21_DY0		0x00A2
 #define CSI21_DX1		0x00A4
@@ -242,17 +252,29 @@ struct pad_conf_entry {
 #define USBB2_HSIC_DATA		0x0178
 #define USBB2_HSIC_STROBE	0x017A
 #define UNIPRO_TX0		0x017C
+#define KPD_COL3            0x017C
 #define UNIPRO_TY0		0x017E
+#define KPD_COL4            0x017E
 #define UNIPRO_TX1		0x0180
+#define KPD_COL5            0x0180
 #define UNIPRO_TY1		0x0182
+#define KPD_COL0            0x0182
 #define UNIPRO_TX2		0x0184
+#define KPD_COL1            0x0184
 #define UNIPRO_TY2		0x0186
+#define KPD_COL2            0x0186
 #define UNIPRO_RX0		0x0188
+#define KPD_ROW3            0x0188
 #define UNIPRO_RY0		0x018A
+#define KPD_ROW4            0x018A
 #define UNIPRO_RX1		0x018C
+#define KPD_ROW5            0x018C
 #define UNIPRO_RY1		0x018E
+#define KPD_ROW0            0x018E
 #define UNIPRO_RX2		0x0190
+#define KPD_ROW1            0x0190
 #define UNIPRO_RY2		0x0192
+#define KPD_ROW2            0x0192
 #define USBA0_OTG_CE		0x0194
 #define USBA0_OTG_DP		0x0196
 #define USBA0_OTG_DM		0x0198
@@ -286,6 +308,8 @@ struct pad_conf_entry {
 #define DPM_EMU17		0x01D0
 #define DPM_EMU18		0x01D2
 #define DPM_EMU19		0x01D4
+#define CSI22_DX2           0x01D6
+#define CSI22_DY2           0x01F4
 #define WAKEUPEVENT_0		0x01D8
 #define WAKEUPEVENT_1		0x01DC
 #define WAKEUPEVENT_2		0x01E0
@@ -297,34 +321,34 @@ struct pad_conf_entry {
 #define WKUP_REVISION		0x0000
 #define WKUP_HWINFO		0x0004
 #define WKUP_SYSCONFIG		0x0010
-#define PAD0_SIM_IO		0x0040
-#define PAD1_SIM_CLK		0x0042
-#define PAD0_SIM_RESET		0x0044
-#define PAD1_SIM_CD		0x0046
-#define PAD0_SIM_PWRCTRL		0x0048
-#define PAD1_SR_SCL		0x004A
-#define PAD0_SR_SDA		0x004C
-#define PAD1_FREF_XTAL_IN		0x004E
-#define PAD0_FREF_SLICER_IN	0x0050
-#define PAD1_FREF_CLK_IOREQ	0x0052
-#define PAD0_FREF_CLK0_OUT		0x0054
-#define PAD1_FREF_CLK3_REQ		0x0056
-#define PAD0_FREF_CLK3_OUT		0x0058
-#define PAD1_FREF_CLK4_REQ		0x005A
-#define PAD0_FREF_CLK4_OUT		0x005C
-#define PAD1_SYS_32K		0x005E
-#define PAD0_SYS_NRESPWRON		0x0060
-#define PAD1_SYS_NRESWARM		0x0062
-#define PAD0_SYS_PWR_REQ		0x0064
-#define PAD1_SYS_PWRON_RESET	0x0066
-#define PAD0_SYS_BOOT6		0x0068
-#define PAD1_SYS_BOOT7		0x006A
-#define PAD0_JTAG_NTRST		0x006C
-#define PAD1_JTAG_TCK		0x006D
-#define PAD0_JTAG_RTCK		0x0070
-#define PAD1_JTAG_TMS_TMSC		0x0072
-#define PAD0_JTAG_TDI		0x0074
-#define PAD1_JTAG_TDO		0x0076
+#define GPIO_WK0            0x0040
+#define GPIO_WK1            0x0042
+#define GPIO_WK2            0x0044
+#define GPIO_WK3            0x0046
+#define GPIO_WK4            0x0048
+#define SR_SCL              0x004A
+#define SR_SDA              0x004C
+#define FREF_XTAL_IN        0x004E
+#define FREF_SLICER_IN      0x0050
+#define FREF_CLK_IOREQ      0x0052
+#define FREF_CLK0_OUT       0x0054
+#define FREF_CLK3_REQ       0x0056
+#define FREF_CLK3_OUT       0x0058
+#define FREF_CLK4_REQ       0x005A
+#define FREF_CLK4_OUT       0x005C
+#define SYS_32K             0x005E
+#define SYS_NRESPWRON       0x0060
+#define SYS_NRESWARM        0x0062
+#define SYS_PWR_REQ         0x0064
+#define SYS_PWRON_RESET_OUT 0x0066
+#define SYS_BOOT6           0x0068
+#define SYS_BOOT7           0x006A
+#define JTAG_NTRST          0x006C
+#define JTAG_TCK            0x006E
+#define JTAG_RTCK           0x0070
+#define JTAG_TMS_TMSC       0x0072
+#define JTAG_TDI            0x0074
+#define JTAG_TDO            0x0076
 #define PADCONF_WAKEUPEVENT_0	0x007C
 #define CONTROL_SMART1NOPMIO_PADCONF_0		0x05A0
 #define CONTROL_SMART1NOPMIO_PADCONF_1		0x05A4
diff --git a/arch/arm/mach-omap/include/mach/omap4-silicon.h b/arch/arm/mach-omap/include/mach/omap4-silicon.h
index 345e09a..71ffe39 100644
--- a/arch/arm/mach-omap/include/mach/omap4-silicon.h
+++ b/arch/arm/mach-omap/include/mach/omap4-silicon.h
@@ -72,6 +72,12 @@
 #define OMAP44XX_UART2_BASE		(OMAP44XX_L4_PER_BASE + 0x6c000)
 #define OMAP44XX_UART3_BASE		(OMAP44XX_L4_PER_BASE + 0x20000)
 
+/* I2C */
+#define OMAP44XX_I2C1_BASE		(OMAP44XX_L4_PER_BASE + 0x070000)
+#define OMAP44XX_I2C2_BASE		(OMAP44XX_L4_PER_BASE + 0x072000)
+#define OMAP44XX_I2C3_BASE		(OMAP44XX_L4_PER_BASE + 0x060000)
+#define OMAP44XX_I2C4_BASE		(OMAP44XX_L4_PER_BASE + 0x350000)
+
 /* General Purpose Timers */
 #define OMAP44XX_GPT1_BASE		(OMAP44XX_L4_WKUP_BASE + 0x18000)
 #define OMAP44XX_GPT2_BASE		(OMAP44XX_L4_PER_BASE  + 0x32000)
@@ -88,6 +94,13 @@
 /* 32KTIMER */
 #define OMAP_32KTIMER_BASE		(OMAP44XX_L4_WKUP_BASE + 0x4000)
 
+/* MMC */
+#define OMAP44XX_MMC1_BASE		(OMAP44XX_L4_PER_BASE + 0x09C100)
+#define OMAP44XX_MMC2_BASE		(OMAP44XX_L4_PER_BASE + 0x0B4100)
+#define OMAP44XX_MMC3_BASE		(OMAP44XX_L4_PER_BASE + 0x0AD100)
+#define OMAP44XX_MMC4_BASE		(OMAP44XX_L4_PER_BASE + 0x0D1100)
+#define OMAP44XX_MMC5_BASE		(OMAP44XX_L4_PER_BASE + 0x0D5100)
+
 /* GPMC */
 #define OMAP_GPMC_BASE		0x50000000
 
diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
index 63b68df..44d3754 100644
--- a/arch/arm/mach-omap/include/mach/xload.h
+++ b/arch/arm/mach-omap/include/mach/xload.h
@@ -6,6 +6,7 @@ enum omap_boot_src {
 	OMAP_BOOTSRC_MMC1,
 	OMAP_BOOTSRC_NAND,
 	OMAP_BOOTSRC_SPI1,
+	OMAP_BOOTSRC_USB1,
 };
 
 enum omap_boot_src omap3_bootsrc(void);
diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c
index a159dfc..584d724 100644
--- a/arch/arm/mach-omap/omap4_generic.c
+++ b/arch/arm/mach-omap/omap4_generic.c
@@ -481,6 +481,8 @@ enum omap_boot_src omap4_bootsrc(void)
 		return OMAP_BOOTSRC_MMC1;
 	if (bootsrc & (1 << 3))
 		return OMAP_BOOTSRC_NAND;
+	if (bootsrc & (1<<20))
+		return OMAP_BOOTSRC_USB1;
 	return OMAP_BOOTSRC_UNKNOWN;
 }
 
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 04/11] ARM: ensure irqs are disabled
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (2 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 03/11] omap4: add/rename definitions to match datasheet vj
@ 2012-10-05 22:33 ` vj
  2012-10-07  9:46   ` Sascha Hauer
  2012-10-05 22:33 ` [PATCH 05/11] omap: revert gpiolib vj
                   ` (7 subsequent siblings)
  11 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 arch/arm/cpu/cpu.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/arm/cpu/cpu.c b/arch/arm/cpu/cpu.c
index 87ba877..45c3a90 100644
--- a/arch/arm/cpu/cpu.c
+++ b/arch/arm/cpu/cpu.c
@@ -85,6 +85,12 @@ void arch_shutdown(void)
 		: "r0", "r1", "r2", "r3", "r6", "r10", "r12", "lr", "cc", "memory"
 	);
 #endif
+	/*
+	 * barebox normally does not use interrupts, but some functionalities
+	 * (eg. OMAP4_USBBOOT) require them enabled. So be sure interrupts are
+	 * disabled before exiting.
+	 */
+	__asm__ __volatile__ ("cpsid i\n");
 }
 
 #ifdef CONFIG_THUMB2_BAREBOX
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 05/11] omap: revert gpiolib
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (3 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 04/11] ARM: ensure irqs are disabled vj
@ 2012-10-05 22:33 ` vj
  2012-10-07 10:11   ` Sascha Hauer
  2012-10-05 22:33 ` [PATCH 06/11] omap4: add support for booting an omap4 from usb vj
                   ` (6 subsequent siblings)
  11 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj

This patch reverts 29e4031b460d1c84c1a8fc276199d40680b354d4.
This is not meant to revert the gpiolib, this is only a temporal
workaround because it breaks support for ArchosG9 tablet.
Please, can anybody check if using gpiolib works for other omap4460
based boards?

Signed-off-by: vj <vicencb@gmail.com>
---
 arch/arm/Kconfig                   |   1 -
 arch/arm/mach-omap/gpio.c          | 170 ++++++++++++++++++++-----------------
 arch/arm/mach-omap/omap3_generic.c |  19 -----
 arch/arm/mach-omap/omap4_generic.c |  19 -----
 4 files changed, 93 insertions(+), 116 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 8278c82..1cb56c5 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -60,7 +60,6 @@ config ARCH_NOMADIK
 config ARCH_OMAP
 	bool "TI OMAP"
 	select HAS_DEBUG_LL
-	select GPIOLIB
 
 config ARCH_PXA
 	bool "Intel/Marvell PXA based"
diff --git a/arch/arm/mach-omap/gpio.c b/arch/arm/mach-omap/gpio.c
index 376e9a7..bb5f30f 100644
--- a/arch/arm/mach-omap/gpio.c
+++ b/arch/arm/mach-omap/gpio.c
@@ -32,10 +32,11 @@
  * published by the Free Software Foundation.
  */
 #include <common.h>
+#include <mach/gpio.h>
 #include <io.h>
 #include <errno.h>
-#include <gpio.h>
-#include <init.h>
+
+#ifdef CONFIG_ARCH_OMAP3
 
 #define OMAP_GPIO_OE		0x0034
 #define OMAP_GPIO_DATAIN	0x0038
@@ -43,114 +44,129 @@
 #define OMAP_GPIO_CLEARDATAOUT	0x0090
 #define OMAP_GPIO_SETDATAOUT	0x0094
 
-struct omap_gpio_chip {
-	void __iomem *base;
-	struct gpio_chip chip;
+static void __iomem *gpio_bank[] = {
+	(void *)0x48310000,
+	(void *)0x49050000,
+	(void *)0x49052000,
+	(void *)0x49054000,
+	(void *)0x49056000,
+	(void *)0x49058000,
+};
+#endif
+
+#ifdef CONFIG_ARCH_OMAP4
+
+#define OMAP_GPIO_OE		0x0134
+#define OMAP_GPIO_DATAIN	0x0138
+#define OMAP_GPIO_DATAOUT	0x013c
+#define OMAP_GPIO_CLEARDATAOUT	0x0190
+#define OMAP_GPIO_SETDATAOUT	0x0194
+
+static void __iomem *gpio_bank[] = {
+	(void *)0x4a310000,
+	(void *)0x48055000,
+	(void *)0x48057000,
+	(void *)0x48059000,
+	(void *)0x4805b000,
+	(void *)0x4805d000,
 };
+#endif
 
-static inline int omap_get_gpio_index(int gpio)
+static inline void __iomem *get_gpio_base(int gpio)
 {
-	return gpio & 0x1f;
+	return gpio_bank[gpio >> 5];
 }
 
-static void omap_gpio_set_value(struct gpio_chip *chip,
-					unsigned gpio, int value)
+static inline int get_gpio_index(int gpio)
 {
-	struct omap_gpio_chip *omapgpio =
-			container_of(chip, struct omap_gpio_chip, chip);
-	void __iomem *base = omapgpio->base;
-	u32 l = 0;
-
-	if (value)
-		base += OMAP_GPIO_SETDATAOUT;
-	else
-		base += OMAP_GPIO_CLEARDATAOUT;
+	return gpio & 0x1f;
+}
 
-	l = 1 << omap_get_gpio_index(gpio);
+static inline int gpio_valid(int gpio)
+{
+	if (gpio < 0)
+		return -1;
+	if (gpio / 32 < ARRAY_SIZE(gpio_bank))
+		return 0;
+	return -1;
+}
 
-	writel(l, base);
+static int check_gpio(int gpio)
+{
+	if (gpio_valid(gpio) < 0) {
+		printf("ERROR : check_gpio: invalid GPIO %d\n", gpio);
+		return -1;
+	}
+	return 0;
 }
 
-static int omap_gpio_direction_input(struct gpio_chip *chip,
-					unsigned gpio)
+void gpio_set_value(unsigned gpio, int value)
 {
-	struct omap_gpio_chip *omapgpio =
-			container_of(chip, struct omap_gpio_chip, chip);
-	void __iomem *base = omapgpio->base;
-	u32 val;
+	void __iomem *reg;
+	u32 l = 0;
 
-	base += OMAP_GPIO_OE;
+	if (check_gpio(gpio) < 0)
+		return;
 
-	val = readl(base);
-	val |= 1 << omap_get_gpio_index(gpio);
-	writel(val, base);
+	reg = get_gpio_base(gpio);
 
-	return 0;
+	if (value)
+		reg += OMAP_GPIO_SETDATAOUT;
+	else
+		reg += OMAP_GPIO_CLEARDATAOUT;
+	l = 1 << get_gpio_index(gpio);
+
+	__raw_writel(l, reg);
 }
 
-static int omap_gpio_direction_output(struct gpio_chip *chip,
-					unsigned gpio, int value)
+int gpio_direction_input(unsigned gpio)
 {
-	struct omap_gpio_chip *omapgpio =
-			container_of(chip, struct omap_gpio_chip, chip);
-	void __iomem *base = omapgpio->base;
+	void __iomem *reg;
 	u32 val;
 
-	omap_gpio_set_value(chip, gpio, value);
+	if (check_gpio(gpio) < 0)
+		return -EINVAL;
+
+	reg = get_gpio_base(gpio);
 
-	base += OMAP_GPIO_OE;
+	reg += OMAP_GPIO_OE;
 
-	val = readl(base);
-	val &= ~(1 << omap_get_gpio_index(gpio));
-	writel(val, base);
+	val = __raw_readl(reg);
+	val |= 1 << get_gpio_index(gpio);
+	__raw_writel(val, reg);
 
 	return 0;
 }
 
-static int omap_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
+int gpio_direction_output(unsigned gpio, int value)
 {
-	struct omap_gpio_chip *omapgpio =
-			container_of(chip, struct omap_gpio_chip, chip);
-	void __iomem *base = omapgpio->base;
-
-	base  += OMAP_GPIO_DATAIN;
-
-	return (readl(base) & (1 << omap_get_gpio_index(gpio))) != 0;
-
-}
+	void __iomem *reg;
+	u32 val;
 
-static struct gpio_ops omap_gpio_ops = {
-	.direction_input = omap_gpio_direction_input,
-	.direction_output = omap_gpio_direction_output,
-	.get = omap_gpio_get_value,
-	.set = omap_gpio_set_value,
-};
+	if (check_gpio(gpio) < 0)
+		return -EINVAL;
+	reg = get_gpio_base(gpio);
 
-static int omap_gpio_probe(struct device_d *dev)
-{
-	struct omap_gpio_chip *omapgpio;
+	gpio_set_value(gpio, value);
 
-	omapgpio = xzalloc(sizeof(*omapgpio));
-	omapgpio->base = dev_request_mem_region(dev, 0);
-	omapgpio->chip.ops = &omap_gpio_ops;
-	omapgpio->chip.base = -1;
-	omapgpio->chip.ngpio = 32;
-	omapgpio->chip.dev = dev;
-	gpiochip_add(&omapgpio->chip);
+	reg += OMAP_GPIO_OE;
 
-	dev_dbg(dev, "probed gpiochip%d with base %d\n",
-				dev->id, omapgpio->chip.base);
+	val = __raw_readl(reg);
+	val &= ~(1 << get_gpio_index(gpio));
+	__raw_writel(val, reg);
 
 	return 0;
 }
 
-static struct driver_d omap_gpio_driver = {
-	.name = "omap-gpio",
-	.probe = omap_gpio_probe,
-};
-
-static int omap_gpio_add(void)
+int gpio_get_value(unsigned gpio)
 {
-	return platform_driver_register(&omap_gpio_driver);
+	void __iomem *reg;
+
+	if (check_gpio(gpio) < 0)
+		return -EINVAL;
+	reg = get_gpio_base(gpio);
+
+	reg += OMAP_GPIO_DATAIN;
+
+	return (__raw_readl(reg) & (1 << get_gpio_index(gpio))) != 0;
 }
-coredevice_initcall(omap_gpio_add);
diff --git a/arch/arm/mach-omap/omap3_generic.c b/arch/arm/mach-omap/omap3_generic.c
index 5028e9a..af26af4 100644
--- a/arch/arm/mach-omap/omap3_generic.c
+++ b/arch/arm/mach-omap/omap3_generic.c
@@ -511,22 +511,3 @@ const struct gpmc_config omap3_nand_cfg = {
 	.base = 0x28000000,
 	.size = GPMC_SIZE_16M,
 };
-
-static int omap3_gpio_init(void)
-{
-	add_generic_device("omap-gpio", 0, NULL, 0x48310000,
-					0x100, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 1, NULL, 0x49050000,
-					0x100, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 2, NULL, 0x49052000,
-					0x100, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 3, NULL, 0x49054000,
-					0x100, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 4, NULL, 0x49056000,
-					0x100, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 5, NULL, 0x49058000,
-					0x100, IORESOURCE_MEM, NULL);
-
-	return 0;
-}
-coredevice_initcall(omap3_gpio_init);
diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c
index 584d724..6562268 100644
--- a/arch/arm/mach-omap/omap4_generic.c
+++ b/arch/arm/mach-omap/omap4_generic.c
@@ -574,22 +574,3 @@ const struct gpmc_config omap4_nand_cfg = {
 	.base = 0x28000000,
 	.size = GPMC_SIZE_16M,
 };
-
-static int omap4_gpio_init(void)
-{
-	add_generic_device("omap-gpio", 0, NULL, 0x4a310100,
-				0x1000, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 1, NULL, 0x48055100,
-				0x1000, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 2, NULL, 0x48057100,
-				0x1000, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 3, NULL, 0x48059100,
-				0x1000, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 4, NULL, 0x4805b100,
-				0x1000, IORESOURCE_MEM, NULL);
-	add_generic_device("omap-gpio", 5, NULL, 0x4805d100,
-				0x1000, IORESOURCE_MEM, NULL);
-
-	return 0;
-}
-coredevice_initcall(omap4_gpio_init);
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 06/11] omap4: add support for booting an omap4 from usb.
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (4 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 05/11] omap: revert gpiolib vj
@ 2012-10-05 22:33 ` vj
  2012-10-07 10:23   ` Sascha Hauer
  2012-10-05 22:33 ` [PATCH 07/11] omap4: add serial communications over usb boot vj
                   ` (5 subsequent siblings)
  11 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 Documentation/oamp4_usb_booting.txt             |  27 ++
 arch/arm/mach-omap/Kconfig                      |   9 +
 arch/arm/mach-omap/Makefile                     |   1 +
 arch/arm/mach-omap/include/mach/omap4_rom_usb.h | 142 ++++++++
 arch/arm/mach-omap/omap4_generic.c              |  17 +
 arch/arm/mach-omap/omap4_rom_usb.c              | 186 +++++++++++
 scripts/.gitignore                              |   1 +
 scripts/Makefile                                |   4 +
 scripts/omap4_usbboot.c                         | 412 ++++++++++++++++++++++++
 scripts/usb.h                                   |  61 ++++
 scripts/usb_linux.c                             | 397 +++++++++++++++++++++++
 11 files changed, 1257 insertions(+)
 create mode 100644 Documentation/oamp4_usb_booting.txt
 create mode 100644 arch/arm/mach-omap/include/mach/omap4_rom_usb.h
 create mode 100644 arch/arm/mach-omap/omap4_rom_usb.c
 create mode 100644 scripts/omap4_usbboot.c
 create mode 100644 scripts/usb.h
 create mode 100644 scripts/usb_linux.c

diff --git a/Documentation/oamp4_usb_booting.txt b/Documentation/oamp4_usb_booting.txt
new file mode 100644
index 0000000..f0d45a2
--- /dev/null
+++ b/Documentation/oamp4_usb_booting.txt
@@ -0,0 +1,27 @@
+-------------- omap4_usb_booting --------------
+
+omap4 processors have support for booting from the usb port. To be able to fully
+use this feature you will need to enable the following:
+    OMAP4_USBBOOT
+        This CONFIG_ option adds the required infrastructure.
+    DRIVER_SERIAL_OMAP4_USBBOOT
+        This adds console support over the same usb port used for booting.
+    FS_OMAP4_USBBOOT
+        This adds filesystem support over the same usb port used for booting.
+
+To send the bootloader to the processor, execute the utility omap4_usbboot which
+can be found in the scripts subdirectory.
+omap4_usbboot takes two parameters:
+    the bootloader image
+    a directory name which will be the root for the guest system
+Once omap4_usbboot is running it will wait for enumeration of the omap4 cpu on
+the host usb subsystem. Then power on or reset the cpu with the correct sys_boot
+or SAR memory configuration.
+
+If everything works, barebox's first stage will boot and afterwards it will load
+the second stage found at "/barebox.bin".
+Barebox's second stage will still have access to the usb filesystem, so an
+initrd and a zImage can be loaded.
+
+Overall this procedure frees the developer of continously be changing the SD
+card or other boot media from host to target.
diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig
index aa31633..b3dd6a4 100644
--- a/arch/arm/mach-omap/Kconfig
+++ b/arch/arm/mach-omap/Kconfig
@@ -82,6 +82,15 @@ config ARCH_TEXT_BASE
 	default 0x80e80000 if MACH_OMAP343xSDP
 	default 0x80e80000 if MACH_BEAGLE
 
+config OMAP4_USBBOOT
+	bool "enable booting from USB"
+	default n
+	depends on ARCH_OMAP4 && !MMU
+	help
+	  Say Y here if you want to be able to boot an OMAP4 cpu from USB.
+	  You need the utility program omap4_usbboot to boot from USB.
+	  Please read oamp4_usb_booting.txt for more information.
+
 config BOARDINFO
 	default "Texas Instrument's SDP343x" if MACH_OMAP343xSDP
 	default "Texas Instrument's Beagle" if MACH_BEAGLE
diff --git a/arch/arm/mach-omap/Makefile b/arch/arm/mach-omap/Makefile
index f752bc7..17d189d 100644
--- a/arch/arm/mach-omap/Makefile
+++ b/arch/arm/mach-omap/Makefile
@@ -26,4 +26,5 @@ obj-$(CONFIG_OMAP3_CLOCK_CONFIG) += omap3_clock.o
 obj-$(CONFIG_OMAP_GPMC) += gpmc.o devices-gpmc-nand.o
 obj-$(CONFIG_SHELL_NONE) += xload.o
 obj-$(CONFIG_I2C_TWL6030) += omap4_twl6030_mmc.o
+obj-$(CONFIG_OMAP4_USBBOOT) += omap4_rom_usb.o
 obj-y += gpio.o
diff --git a/arch/arm/mach-omap/include/mach/omap4_rom_usb.h b/arch/arm/mach-omap/include/mach/omap4_rom_usb.h
new file mode 100644
index 0000000..b7818df
--- /dev/null
+++ b/arch/arm/mach-omap/include/mach/omap4_rom_usb.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _OMAP4_ROM_USB_H_
+#define _OMAP4_ROM_USB_H_
+
+/* public api */
+#define PUBLIC_API_BASE_4430		(0x28400)
+#define PUBLIC_API_BASE_4460		(0x30400)
+
+#define PUBLIC_GET_DRIVER_MEM_OFFSET (0x04)
+#define PUBLIC_GET_DRIVER_PER_OFFSET (0x08)
+#define PUBLIC_GET_DEVICE_MEM_OFFSET (0x80)
+#define PUBLIC_GET_DEVICE_PER_OFFSET (0x84)
+
+#define DEVICE_NULL	0x40
+#define DEVICE_UART1	0x41
+#define DEVICE_UART2	0x42
+#define DEVICE_UART3	0x43
+#define DEVICE_UART4	0x44
+#define DEVICE_USB	0x45
+#define DEVICE_USBEXT	0x46
+
+#define XFER_MODE_CPU 0
+#define XFER_MODE_DMA 1
+
+#define STATUS_OKAY		0
+#define STATUS_FAILED		1
+#define STATUS_TIMEOUT		2
+#define STATUS_BAD_PARAM	3
+#define STATUS_WAITING		4
+#define STATUS_NO_MEMORY	5
+#define STATUS_INVALID_PTR	6
+
+/* Memory ROM interface */
+struct read_desc {
+	u32 sector_start;
+	u32 sector_count;
+	void *destination;
+};
+
+struct mem_device {
+	u32 initialized;
+	u8 device_type;
+	u8 trials_count;
+	u32 xip_device;
+	u16 search_size;
+	u32 base_address;
+	u16 hs_toc_mask;
+	u16 gp_toc_mask;
+	void *device_data;
+	u16 *boot_options;
+};
+
+struct mem_driver {
+	int (*init)(struct mem_device *md);
+	int (*read)(struct mem_device *md, struct read_desc *rd);
+	int (*configure)(struct mem_device *md, void *config);
+};
+
+
+/* Peripheral ROM interface */
+struct per_handle {
+	void *set_to_null;
+	void (*callback)(struct per_handle *rh);
+	void *data;
+	u32 length;
+	u16 *options;
+	u32 xfer_mode;
+	u32 device_type;
+	u32 status;
+	u16 hs_toc_mask;
+	u16 gp_toc_mask;
+	u32 config_timeout;
+};
+
+struct per_driver {
+	int (*init)(struct per_handle *rh);
+	int (*read)(struct per_handle *rh);
+	int (*write)(struct per_handle *rh);
+	int (*close)(struct per_handle *rh);
+	int (*config)(struct per_handle *rh, void *x);
+};
+
+#define USB_SETCONFIGDESC_ATTRIBUTES      (0)
+#define USB_SETCONFIGDESC_MAXPOWER        (1)
+#define USB_SETSUSPEND_CALLBACK           (2)
+struct per_usb_config {
+	u32 configid;
+	u32 value;
+};
+
+#define API(n) ((void *) (*((u32 *) (n))))
+/* ROM API End */
+
+struct omap4_usbboot {
+	struct per_handle dread;
+	struct per_handle dwrite;
+	struct per_driver *io;
+};
+
+int omap4_usbboot_open(void);
+void omap4_usbboot_close(void);
+
+void omap4_usbboot_queue_read(void *data, unsigned len);
+int omap4_usbboot_wait_read(void);
+int omap4_usbboot_is_read_waiting(void);
+int omap4_usbboot_is_read_ok(void);
+
+void omap4_usbboot_queue_write(void *data, unsigned len);
+int omap4_usbboot_wait_write(void);
+
+int omap4_usbboot_read(void *data, unsigned len);
+int omap4_usbboot_write(void *data, unsigned len);
+void omap4_usbboot_puts(const char *s);
+
+#endif
diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c
index 6562268..0933860 100644
--- a/arch/arm/mach-omap/omap4_generic.c
+++ b/arch/arm/mach-omap/omap4_generic.c
@@ -8,6 +8,7 @@
 #include <mach/xload.h>
 #include <mach/gpmc.h>
 #include <mach/gpio.h>
+#include <mach/omap4_rom_usb.h>
 
 /*
  *  The following several lines are taken from U-Boot to support
@@ -457,6 +458,21 @@ static int watchdog_init(void)
 }
 late_initcall(watchdog_init);
 
+#ifdef CONFIG_OMAP4_USBBOOT
+static int omap4_usbboot_init(void)
+{
+	omap4_usbboot_open();
+	omap4_usbboot_puts("USB communications initialized\n");
+	return 0;
+}
+core_initcall(omap4_usbboot_init);
+#else
+/*
+ * omap4 usbboot interfaces with the omap4 ROM to reuse the USB port
+ * used for booting.
+ * The ROM code uses interrupts for the transfers, so do not modify the
+ * interrupt vectors.
+ */
 static int omap_vector_init(void)
 {
 	__asm__ __volatile__ (
@@ -470,6 +486,7 @@ static int omap_vector_init(void)
 	return 0;
 }
 core_initcall(omap_vector_init);
+#endif
 
 #define OMAP4_TRACING_VECTOR3 0x4030d048
 
diff --git a/arch/arm/mach-omap/omap4_rom_usb.c b/arch/arm/mach-omap/omap4_rom_usb.c
new file mode 100644
index 0000000..4257420
--- /dev/null
+++ b/arch/arm/mach-omap/omap4_rom_usb.c
@@ -0,0 +1,186 @@
+/*
+ * This code is based on:
+ * git://github.com/swetland/omap4boot.git
+ */
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <common.h>
+#include <mach/omap4-silicon.h>
+#include <mach/omap4_rom_usb.h>
+
+struct omap4_usbboot omap4_usbboot_pdata;
+
+int omap4_usbboot_open(void)
+{
+	int (*rom_get_per_driver)(struct per_driver **io, u32 device_type);
+	int (*rom_get_per_device)(struct per_handle **rh);
+	struct per_handle *boot;
+	int n;
+	u32 base;
+
+	if (omap4_revision() >= OMAP4460_ES1_0)
+		base = PUBLIC_API_BASE_4460;
+	else
+		base = PUBLIC_API_BASE_4430;
+
+	rom_get_per_driver = API(base + PUBLIC_GET_DRIVER_PER_OFFSET);
+	rom_get_per_device = API(base + PUBLIC_GET_DEVICE_PER_OFFSET);
+
+	n = rom_get_per_device(&boot);
+	if (n)
+		return n;
+
+	if ((boot->device_type != DEVICE_USB) &&
+	    (boot->device_type != DEVICE_USBEXT))
+		return -1;
+
+	memset(&omap4_usbboot_pdata, 0, sizeof(omap4_usbboot_pdata));
+	n = rom_get_per_driver(&omap4_usbboot_pdata.io, boot->device_type);
+	if (n)
+		return n;
+
+	omap4_usbboot_pdata.dread.status = -1;
+	omap4_usbboot_pdata.dread.xfer_mode = boot->xfer_mode;
+	omap4_usbboot_pdata.dread.options = boot->options;
+	omap4_usbboot_pdata.dread.device_type = boot->device_type;
+
+	omap4_usbboot_pdata.dwrite.status = -1;
+	omap4_usbboot_pdata.dwrite.xfer_mode = boot->xfer_mode;
+	omap4_usbboot_pdata.dwrite.options = boot->options;
+	omap4_usbboot_pdata.dwrite.device_type = boot->device_type;
+	__asm__ __volatile__ ("cpsie i\n");
+	return 0;
+}
+
+
+static void rom_read_callback(struct per_handle *rh)
+{
+	omap4_usbboot_pdata.dread.status = rh->status;
+	return;
+}
+
+void omap4_usbboot_queue_read(void *data, unsigned len)
+{
+	int n;
+	omap4_usbboot_pdata.dread.data = data;
+	omap4_usbboot_pdata.dread.length = len;
+	omap4_usbboot_pdata.dread.status = STATUS_WAITING;
+	omap4_usbboot_pdata.dread.xfer_mode = 1;
+	omap4_usbboot_pdata.dread.callback = rom_read_callback;
+	n = omap4_usbboot_pdata.io->read(&omap4_usbboot_pdata.dread);
+	if (n)
+		omap4_usbboot_pdata.dread.status = n;
+}
+
+int omap4_usbboot_wait_read(void)
+{
+	int ret;
+	while (omap4_usbboot_pdata.dread.status == STATUS_WAITING)
+		/* cpu_relax(); */
+		barrier();
+	ret = omap4_usbboot_pdata.dread.status;
+	omap4_usbboot_pdata.dread.status = -1;
+	return ret;
+}
+int omap4_usbboot_is_read_waiting(void)
+{
+	barrier();
+	return omap4_usbboot_pdata.dread.status == STATUS_WAITING;
+}
+int omap4_usbboot_is_read_ok(void)
+{
+	barrier();
+	return omap4_usbboot_pdata.dread.status == STATUS_OKAY;
+}
+
+static void rom_write_callback(struct per_handle *rh)
+{
+	omap4_usbboot_pdata.dwrite.status = rh->status;
+	return;
+}
+
+void omap4_usbboot_queue_write(void *data, unsigned len)
+{
+	int n;
+	omap4_usbboot_pdata.dwrite.data = data;
+	omap4_usbboot_pdata.dwrite.length = len;
+	omap4_usbboot_pdata.dwrite.status = STATUS_WAITING;
+	omap4_usbboot_pdata.dwrite.xfer_mode = 1;
+	omap4_usbboot_pdata.dwrite.callback = rom_write_callback;
+	n = omap4_usbboot_pdata.io->write(&omap4_usbboot_pdata.dwrite);
+	if (n)
+		omap4_usbboot_pdata.dwrite.status = n;
+}
+
+int omap4_usbboot_wait_write(void)
+{
+	int ret;
+	while (omap4_usbboot_pdata.dwrite.status == STATUS_WAITING)
+		/* cpu_relax(); */
+		barrier();
+	ret = omap4_usbboot_pdata.dwrite.status;
+	omap4_usbboot_pdata.dwrite.status = -1;
+	return ret;
+}
+
+#define USB_MAX_IO 65536
+int omap4_usbboot_read(void *data, unsigned len)
+{
+	unsigned xfer;
+	unsigned char *x = data;
+	int n;
+	while (len > 0) {
+		xfer = (len > USB_MAX_IO) ? USB_MAX_IO : len;
+		omap4_usbboot_queue_read(x, xfer);
+		n = omap4_usbboot_wait_read();
+		if (n)
+			return n;
+		x += xfer;
+		len -= xfer;
+	}
+	return 0;
+}
+
+int omap4_usbboot_write(void *data, unsigned len)
+{
+	omap4_usbboot_queue_write(data, len);
+	return omap4_usbboot_wait_write();
+}
+
+void omap4_usbboot_close(void)
+{
+	omap4_usbboot_pdata.io->close(&omap4_usbboot_pdata.dread);
+}
+
+void omap4_usbboot_puts(const char *s)
+{
+	u32 c;
+	while ((c = *s++))
+		omap4_usbboot_write(&c, 4);
+}
diff --git a/scripts/.gitignore b/scripts/.gitignore
index 3f1cbdb..1ca6603 100644
--- a/scripts/.gitignore
+++ b/scripts/.gitignore
@@ -6,3 +6,4 @@ mk-am35xx-spi-image
 mkimage
 mkublheader
 omap_signGP
+omap4_usbboot
diff --git a/scripts/Makefile b/scripts/Makefile
index 55ccdac..08b325c 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -13,6 +13,10 @@ hostprogs-$(CONFIG_ARCH_OMAP)    += omap_signGP mk-am35xx-spi-image
 hostprogs-$(CONFIG_ARCH_S5PCxx)  += s5p_cksum
 hostprogs-$(CONFIG_ARCH_DAVINCI) += mkublheader
 
+HOSTLOADLIBES_omap4_usbboot = -lpthread
+omap4_usbboot-objs               := usb_linux.o omap4_usbboot.o
+hostprogs-$(CONFIG_OMAP4_USBBOOT)+= omap4_usbboot
+
 always		:= $(hostprogs-y) $(hostprogs-m)
 
 subdir-y                     += mod
diff --git a/scripts/omap4_usbboot.c b/scripts/omap4_usbboot.c
new file mode 100644
index 0000000..b964ecf
--- /dev/null
+++ b/scripts/omap4_usbboot.c
@@ -0,0 +1,412 @@
+/*
+ * 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.
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <pthread.h>
+#include <termios.h>
+
+#include "usb.h"
+
+#define USBBOOT_FS_MAGIC     0x5562464D
+#define USBBOOT_FS_CMD_OPEN  0x46530000
+#define USBBOOT_FS_CMD_CLOSE 0x46530001
+#define USBBOOT_FS_CMD_READ  0x46530002
+#define USBBOOT_FS_CMD_END   0x4653FFFF
+#define MAX_OPEN_FILES       1000
+
+#define RESET   0
+#define BRIGHT  1
+#define WHITE   8
+#define RED     1
+#define BLACK   0
+#define FORMAT        "%c[%d;%d;%dm"
+#define TARGET_FORMAT 0x1B, BRIGHT, RED+30, BLACK+40
+#define HOST_FORMAT   0x1B, RESET, WHITE+30, BLACK+40
+#define host_print(fmt, arg...)	printf(FORMAT fmt FORMAT"\n", \
+					HOST_FORMAT, ##arg, TARGET_FORMAT)
+
+struct thread_vars {
+	struct usb_handle *usb;
+	int hide;
+	struct termios to;
+};
+void *listenerTask(void *argument)
+{
+	struct thread_vars *vars = argument;
+	int c;
+	for (;;) {
+		c = getchar();
+		if (c == EOF)
+			return NULL;
+		while (vars->hide)
+			usleep(10000);
+		if (usb_write(vars->usb, &c, 4) != 4) {
+			host_print("could not send '%c' to target", c);
+			tcsetattr(STDIN_FILENO, TCSANOW, &vars->to);
+			exit(1);
+		}
+	}
+	return NULL;
+}
+struct file_data {
+	size_t size;
+	void *data;
+};
+
+int read_asic_id(struct usb_handle *usb)
+{
+#define LINEWIDTH 16
+	const uint32_t msg_getid = 0xF0030003;
+	int i, j, k, ret;
+	uint8_t id[81];
+	char line[LINEWIDTH*3+8];
+
+	printf("reading ASIC ID\n");
+	memset(id , 0xee, sizeof(id));
+	if (usb_write(usb, &msg_getid, sizeof(msg_getid)) !=
+		sizeof(msg_getid)
+	) {
+		printf("Could not send msg_getid request\n");
+		return -1;
+	}
+	if (usb_read(usb, id, sizeof(id)) != sizeof(id)) {
+		printf("Could not read msg_getid answer\n");
+		return -1;
+	}
+	for (i = 0; i < sizeof(id); i += LINEWIDTH) {
+		sprintf(line, "%02X: ", i);
+		for (j = 0; j < LINEWIDTH && j < sizeof(id)-i; j++)
+			sprintf(line+4+j*3, "%02X ", id[i+j]);
+		line[4+j*3+0] = '\n';
+		line[4+j*3+1] = 0;
+		printf(line);
+	}
+	ret = 0;
+	for (i = 1, j = 0; i < sizeof(id) && j < id[0]; i += 2+id[i+1], j++) {
+		if (i+2+id[i+1] > sizeof(id)) {
+			printf("Truncated subblock\n");
+			ret++;
+			continue;
+		}
+		switch (id[i]) {
+		case 0x01: /* ID subblock */
+			if (id[i+1] != 0x05) {
+				printf("Unexpected ID subblock size\n");
+				ret++;
+				continue;
+			}
+			if (id[i+2] != 0x01)
+				printf("Unexpected fixed value\n");
+			k = (id[i+3]<<8) | id[i+4];
+			switch (k) {
+			case 0x4440:
+				printf("OMAP 4460 Device\n");
+				break;
+			default:
+				printf("Unknown Device\n");
+				break;
+			}
+			switch (id[i+5]) {
+			case 0x07:
+				printf("CH enabled (read from eFuse)\n");
+				break;
+			case 0x17:
+				printf("CH disabled (read from eFuse)\n");
+				break;
+			default:
+				printf("Unknown CH setting\n");
+				break;
+			}
+			printf("Rom version: %hhu\n", id[i+6]);
+			break;
+		case 0x15: /* Checksum subblock */
+			if (id[i+1] != 0x09) {
+				printf("Unexpected Checksum subblock size\n");
+				ret++;
+				continue;
+			}
+			if (id[i+2] != 0x01)
+				printf("Unexpected fixed value\n");
+			k = (id[i+3]<<24) | (id[i+4]<<16) |
+				(id[i+5]<<8) | id[i+6];
+			printf("Rom CRC: 0x%08X\n", k);
+			k = (id[i+7]<<24) | (id[i+8]<<16) |
+				(id[i+9]<<8) | id[i+10];
+			switch (k) {
+			case  0:
+				printf("A GP device\n");
+				break;
+			default:
+				printf("Unknown device\n");
+				break;
+			}
+			break;
+		}
+	}
+	if (i != sizeof(id) || j != id[0]) {
+		printf("Unexpected ASIC ID structure size.\n");
+		ret++;
+	}
+	return ret;
+}
+
+int process_file(
+	struct usb_handle *usb, const char *rootfs, struct file_data *fd_vector)
+{
+	uint32_t i, j, pos, size;
+	struct stat s;
+	int fd, ret;
+	char line[256];
+
+	if (usb_read(usb, &i, 4) != 4) {
+		host_print("USB error");
+		exit(1);
+	}
+	ret = 0;
+	switch (i) {
+	case USBBOOT_FS_CMD_OPEN:
+		for (j = 0; rootfs[j]; j++)
+			line[j] = rootfs[j];
+		for (;; j++) {
+			if (usb_read(usb, &i, 4) != 4) {
+				host_print("USB error");
+				exit(1);
+			}
+			if (i == USBBOOT_FS_CMD_END) {
+				line[j] = 0;
+				break;
+			} else if (i > 0xFF) {
+				host_print("Error in filename");
+				ret++;
+				line[j] = 0;
+				break;
+			} else
+				line[j] = i;
+		}
+		for (i = 0; i < MAX_OPEN_FILES && fd_vector[i].data; i++)
+			;
+		if (i >= MAX_OPEN_FILES) {
+			host_print("MAX_OPEN_FILES exceeded");
+			ret++;
+			goto open_error_1;
+		}
+		fd = open(line, O_RDONLY);
+		if (fd < 0) {
+			host_print("cannot open '%s'", line);
+			ret++;
+			goto open_error_1;
+		}
+		if (fstat(fd, &s)) {
+			host_print("cannot stat '%s'", line);
+			ret++;
+			goto open_error_2;
+		}
+		fd_vector[i].data = mmap(NULL, s.st_size, PROT_READ,
+			MAP_PRIVATE, fd, 0);
+		if (fd_vector[i].data == MAP_FAILED) {
+			host_print("cannot mmap '%s'", line);
+			ret++;
+			goto open_error_2;
+		}
+		close(fd);
+		fd_vector[i].size = size = s.st_size;
+		fd = i;
+		goto open_ok;
+
+open_error_2:
+		close(fd);
+open_error_1:
+		fd_vector[i].size = size = 0;
+		fd = -1;
+open_ok:
+		if (usb_write(usb, &fd, 4) != 4 ||
+			usb_write(usb, &size, 4) != 4
+		) {
+			host_print("could not send file size to target");
+			exit(1);
+		}
+		break;
+	case USBBOOT_FS_CMD_CLOSE:
+		if (usb_read(usb, &i, 4) != 4) {
+			host_print("USB error");
+			exit(1);
+		}
+		if (i >= MAX_OPEN_FILES || !fd_vector[i].data) {
+			host_print("invalid close index");
+			ret++;
+			break;
+		}
+		if (usb_read(usb, &j, 4) != 4) {
+			host_print("USB error");
+			exit(1);
+		}
+		if (j != USBBOOT_FS_CMD_END) {
+			host_print("invalid close");
+			ret++;
+			break;
+		}
+		munmap(fd_vector[i].data, fd_vector[i].size);
+		fd_vector[i].data = NULL;
+		break;
+	case USBBOOT_FS_CMD_READ:
+		if (usb_read(usb, &i, 4) != 4) {
+			host_print("USB error");
+			exit(1);
+		}
+		if (i >= MAX_OPEN_FILES || !fd_vector[i].data) {
+			host_print("invalid read index");
+			ret++;
+			break;
+		}
+		if (usb_read(usb, &pos, 4) != 4) {
+			host_print("USB error");
+			exit(1);
+		}
+		if (pos >= fd_vector[i].size) {
+			host_print("invalid read pos");
+			ret++;
+			break;
+		}
+		if (usb_read(usb, &size, 4) != 4) {
+			host_print("USB error");
+			exit(1);
+		}
+		if (pos+size > fd_vector[i].size) {
+			host_print("invalid read size");
+			ret++;
+			break;
+		}
+		if (usb_read(usb, &j, 4) != 4) {
+			host_print("USB error");
+			exit(1);
+		}
+		if (j != USBBOOT_FS_CMD_END) {
+			host_print("invalid read");
+			ret++;
+			break;
+		}
+		if (usb_write(usb, fd_vector[i].data+pos, size) != size) {
+			host_print("could not send file to target");
+			exit(1);
+		}
+		break;
+	case USBBOOT_FS_CMD_END:
+	default:
+		host_print("Unknown filesystem command");
+		ret++;
+		break;
+	}
+	return ret;
+}
+
+int usb_boot(
+	struct usb_handle *usb, void *data, unsigned sz, const char *rootfs)
+{
+	const uint32_t msg_boot  = 0xF0030002;
+	uint32_t msg_size = sz;
+	int i;
+	pthread_t thread;
+	struct thread_vars vars;
+	struct termios tn;
+	struct file_data fd_vector[MAX_OPEN_FILES];
+
+	read_asic_id(usb);
+
+	printf("sending xload to target...\n");
+	usb_write(usb, &msg_boot, sizeof(msg_boot));
+	usb_write(usb, &msg_size, sizeof(msg_size));
+	usb_write(usb, data, sz);
+	munmap(data, msg_size);
+	for (i = 0; i < MAX_OPEN_FILES; i++)
+		fd_vector[i].data = NULL;
+
+	vars.usb = usb;
+	vars.hide = 0;
+	tcgetattr(STDIN_FILENO, &vars.to);
+	tn = vars.to;
+	tn.c_lflag &= ~(ICANON | ECHO);
+	printf(FORMAT, TARGET_FORMAT);
+	tcsetattr(STDIN_FILENO, TCSANOW, &tn);
+	if (pthread_create(&thread, NULL, listenerTask, &vars))
+		host_print("listenerTask failed");
+	for (;;) {
+		if (usb_read(usb, &i, 4) != 4)
+			break;
+		if (i == USBBOOT_FS_MAGIC) {
+			vars.hide = 1;
+			process_file(usb, rootfs, fd_vector);
+			vars.hide = 0;
+			continue;
+		}
+		printf("%c", i);
+		fflush(stdout);
+	}
+	tcsetattr(STDIN_FILENO, TCSANOW, &vars.to);
+	return 0;
+}
+
+int match_omap4_bootloader(struct usb_ifc_info *ifc)
+{
+	if (ifc->dev_vendor != 0x0451)
+		return -1;
+	if ((ifc->dev_product != 0xD010) && (ifc->dev_product != 0xD00F))
+		return -1;
+	return 0;
+}
+
+int main(int argc, char **argv)
+{
+	void *data;
+	unsigned sz;
+	struct stat s;
+	int fd;
+	struct usb_handle *usb;
+	int once;
+
+	if (argc != 3) {
+		printf("usage: %s <xloader> <rootfs>\n", argv[0]);
+		return 0;
+	}
+	argv++;
+	fd = open(argv[0], O_RDONLY);
+	if (fd < 0 || fstat(fd, &s)) {
+		printf("cannot open '%s'\n", argv[0]);
+		return -1;
+	}
+	data = mmap(NULL, s.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+	if (data == MAP_FAILED) {
+		printf("cannot mmap '%s'\n", argv[0]);
+		return -1;
+	}
+	sz = s.st_size;
+	close(fd);
+	argv++;
+	printf(FORMAT, HOST_FORMAT);
+	for (once = 1;;) {
+		usb = usb_open(match_omap4_bootloader);
+		if (usb)
+			return usb_boot(usb, data, sz, argv[0]);
+		if (once) {
+			once = 0;
+			printf("waiting for OMAP44xx device...\n");
+		}
+		usleep(250000);
+	}
+	return -1;
+}
diff --git a/scripts/usb.h b/scripts/usb.h
new file mode 100644
index 0000000..d50aa6a
--- /dev/null
+++ b/scripts/usb.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _USB_H_
+#define _USB_H_
+
+struct usb_ifc_info {
+	/* from device descriptor */
+	unsigned short dev_vendor;
+	unsigned short dev_product;
+
+	unsigned char dev_class;
+	unsigned char dev_subclass;
+	unsigned char dev_protocol;
+
+	unsigned char ifc_class;
+	unsigned char ifc_subclass;
+	unsigned char ifc_protocol;
+
+	unsigned char has_bulk_in;
+	unsigned char has_bulk_out;
+
+	unsigned char writable;
+
+	char serial_number[256];
+};
+
+typedef int (*ifc_match_func)(struct usb_ifc_info *ifc);
+
+struct usb_handle *usb_open(ifc_match_func callback);
+int usb_close(struct usb_handle *h);
+int usb_read(struct usb_handle *h, void *_data, int len);
+int usb_write(struct usb_handle *h, const void *_data, int len);
+
+
+#endif
diff --git a/scripts/usb_linux.c b/scripts/usb_linux.c
new file mode 100644
index 0000000..43529aa
--- /dev/null
+++ b/scripts/usb_linux.c
@@ -0,0 +1,397 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <pthread.h>
+#include <ctype.h>
+
+#include <linux/usbdevice_fs.h>
+#include <linux/usbdevice_fs.h>
+#include <linux/version.h>
+#include <linux/usb/ch9.h>
+#include <asm/byteorder.h>
+
+#include "usb.h"
+
+#define MAX_RETRIES 5
+
+#ifdef TRACE_USB
+#define DBG1(x...) fprintf(stderr, x)
+#define DBG(x...) fprintf(stderr, x)
+#else
+#define DBG(x...)
+#define DBG1(x...)
+#endif
+
+struct usb_handle {
+	char fname[64];
+	int desc;
+	unsigned char ep_in;
+	unsigned char ep_out;
+};
+
+static inline int badname(const char *name)
+{
+	while (*name) {
+		if (!isdigit(*name++))
+			return 1;
+	}
+	return 0;
+}
+
+static int check(void *_desc, int len, unsigned type, int size)
+{
+	unsigned char *desc = _desc;
+
+	if (len < size)
+		return -1;
+	if (desc[0] < size)
+		return -1;
+	if (desc[0] > len)
+		return -1;
+	if (desc[1] != type)
+		return -1;
+
+	return 0;
+}
+
+static int filter_usb_device(int fd, char *ptr, int len, int writable,
+	ifc_match_func callback, int *ept_in_id, int *ept_out_id, int *ifc_id)
+{
+	struct usb_device_descriptor *dev;
+	struct usb_config_descriptor *cfg;
+	struct usb_interface_descriptor *ifc;
+	struct usb_endpoint_descriptor *ept;
+	struct usb_ifc_info info;
+
+	int in, out;
+	unsigned i;
+	unsigned e;
+
+	if (check(ptr, len, USB_DT_DEVICE, USB_DT_DEVICE_SIZE))
+		return -1;
+	dev = (void *) ptr;
+	len -= dev->bLength;
+	ptr += dev->bLength;
+
+	if (check(ptr, len, USB_DT_CONFIG, USB_DT_CONFIG_SIZE))
+		return -1;
+	cfg = (void *) ptr;
+	len -= cfg->bLength;
+	ptr += cfg->bLength;
+
+	info.dev_vendor = dev->idVendor;
+	info.dev_product = dev->idProduct;
+	info.dev_class = dev->bDeviceClass;
+	info.dev_subclass = dev->bDeviceSubClass;
+	info.dev_protocol = dev->bDeviceProtocol;
+	info.writable = writable;
+
+	/* read device serial number (if there is one) */
+	info.serial_number[0] = 0;
+	if (dev->iSerialNumber) {
+		struct usbdevfs_ctrltransfer  ctrl;
+		__u16 buffer[128];
+		int result;
+
+		memset(buffer, 0, sizeof(buffer));
+
+		ctrl.bRequestType = USB_DIR_IN|
+			USB_TYPE_STANDARD|USB_RECIP_DEVICE;
+		ctrl.bRequest = USB_REQ_GET_DESCRIPTOR;
+		ctrl.wValue = (USB_DT_STRING << 8) | dev->iSerialNumber;
+		ctrl.wIndex = 0;
+		ctrl.wLength = sizeof(buffer);
+		ctrl.data = buffer;
+		ctrl.timeout = 50;
+
+		result = ioctl(fd, USBDEVFS_CONTROL, &ctrl);
+		if (result > 0) {
+			int i;
+			/* skip first word, and copy the rest to the serial
+			string, changing shorts to bytes. */
+			result /= 2;
+			for (i = 1; i < result; i++)
+				info.serial_number[i - 1] = buffer[i];
+			info.serial_number[i - 1] = 0;
+		}
+	}
+
+	for (i = 0; i < cfg->bNumInterfaces; i++) {
+		if (check(ptr, len, USB_DT_INTERFACE, USB_DT_INTERFACE_SIZE))
+			return -1;
+		ifc = (void *) ptr;
+		len -= ifc->bLength;
+		ptr += ifc->bLength;
+
+		in = -1;
+		out = -1;
+		info.ifc_class = ifc->bInterfaceClass;
+		info.ifc_subclass = ifc->bInterfaceSubClass;
+		info.ifc_protocol = ifc->bInterfaceProtocol;
+
+		for (e = 0; e < ifc->bNumEndpoints; e++) {
+			if (check(ptr, len, USB_DT_ENDPOINT,
+				USB_DT_ENDPOINT_SIZE)
+			)
+				return -1;
+			ept = (void *) ptr;
+			len -= ept->bLength;
+			ptr += ept->bLength;
+
+			if ((ept->bmAttributes & 0x03) != 0x02)
+				continue;
+
+			if (ept->bEndpointAddress & 0x80)
+				in = ept->bEndpointAddress;
+			else
+				out = ept->bEndpointAddress;
+		}
+
+		info.has_bulk_in = (in != -1);
+		info.has_bulk_out = (out != -1);
+
+		if (callback(&info) == 0) {
+			*ept_in_id = in;
+			*ept_out_id = out;
+			*ifc_id = ifc->bInterfaceNumber;
+			return 0;
+		}
+	}
+
+	return -1;
+}
+
+static struct usb_handle *find_usb_device(
+	const char *base, ifc_match_func callback)
+{
+	struct usb_handle *usb = 0;
+	char busname[64], devname[64];
+	char desc[1024];
+	int n, in, out, ifc;
+
+	DIR *busdir, *devdir;
+	struct dirent *de;
+	int fd;
+	int writable;
+
+	busdir = opendir(base);
+	if (busdir == 0)
+		return 0;
+
+	while ((de = readdir(busdir)) && (usb == 0)) {
+		if (badname(de->d_name))
+			continue;
+
+		sprintf(busname, "%s/%s", base, de->d_name);
+		devdir = opendir(busname);
+		if (devdir == 0)
+			continue;
+
+		/* DBG("[ scanning %s ]\n", busname); */
+		while ((de = readdir(devdir)) && (usb == 0)) {
+
+			if (badname(de->d_name))
+				continue;
+			sprintf(devname, "%s/%s", busname, de->d_name);
+
+			/* DBG("[ scanning %s ]\n", devname); */
+			writable = 1;
+			fd = open(devname, O_RDWR);
+			if (fd < 0) {
+				/* Check if we have read-only access,
+				so we can give a helpful diagnostic
+				like "adb devices" does. */
+				writable = 0;
+				fd = open(devname, O_RDONLY);
+				if (fd < 0)
+					continue;
+			}
+
+			n = read(fd, desc, sizeof(desc));
+
+			if (filter_usb_device(fd, desc, n, writable,
+				callback, &in, &out, &ifc) == 0
+			) {
+				usb = calloc(1, sizeof(struct usb_handle));
+				strcpy(usb->fname, devname);
+				usb->ep_in = in;
+				usb->ep_out = out;
+				usb->desc = fd;
+
+				n = ioctl(fd, USBDEVFS_CLAIMINTERFACE, &ifc);
+				if (n != 0) {
+					close(fd);
+					free(usb);
+					usb = 0;
+					continue;
+				}
+			} else
+				close(fd);
+		}
+		closedir(devdir);
+	}
+	closedir(busdir);
+
+	return usb;
+}
+
+int usb_write(struct usb_handle *h, const void *_data, int len)
+{
+	unsigned char *data = (unsigned char *) _data;
+	unsigned count = 0;
+	struct usbdevfs_bulktransfer bulk;
+	int n;
+
+	if (h->ep_out == 0)
+		return -1;
+
+	if (len == 0) {
+		bulk.ep = h->ep_out;
+		bulk.len = 0;
+		bulk.data = data;
+		bulk.timeout = 0;
+
+		n = ioctl(h->desc, USBDEVFS_BULK, &bulk);
+		if (n != 0) {
+			fprintf(stderr, "ERROR: n = %d, errno = %d (%s)\n",
+			n, errno, strerror(errno));
+			return -1;
+		}
+		return 0;
+	}
+
+	while (len > 0) {
+		int xfer;
+		xfer = (len > 4096) ? 4096 : len;
+
+		bulk.ep = h->ep_out;
+		bulk.len = xfer;
+		bulk.data = data;
+		bulk.timeout = 0;
+
+		n = ioctl(h->desc, USBDEVFS_BULK, &bulk);
+		if (n != xfer) {
+			DBG("ERROR: n = %d, errno = %d (%s)\n",
+				n, errno, strerror(errno));
+			return -1;
+		}
+
+		count += xfer;
+		len -= xfer;
+		data += xfer;
+	}
+
+	return count;
+}
+
+int usb_read(struct usb_handle *h, void *_data, int len)
+{
+	unsigned char *data = (unsigned char *) _data;
+	unsigned count = 0;
+	struct usbdevfs_bulktransfer bulk;
+	int n, retry;
+
+	if (h->ep_in == 0)
+		return -1;
+
+	while (len > 0) {
+		int xfer = (len > 4096) ? 4096 : len;
+
+		bulk.ep = h->ep_in;
+		bulk.len = xfer;
+		bulk.data = data;
+		bulk.timeout = 0;
+		retry = 0;
+
+		do {
+			DBG("[ usb read %d fd = %d], fname=%s\n",
+				xfer, h->desc, h->fname);
+			n = ioctl(h->desc, USBDEVFS_BULK, &bulk);
+			DBG("[ usb read %d ] = %d, fname=%s, Retry %d\n",
+			xfer, n, h->fname, retry);
+
+			if (n < 0) {
+				DBG1("ERROR: n = %d, errno = %d (%s)\n",
+				n, errno, strerror(errno));
+				if (++retry > MAX_RETRIES)
+					return -1;
+				sleep(1);
+			}
+		} while (n < 0);
+
+		count += n;
+		len -= n;
+		data += n;
+
+		if (n < xfer)
+			break;
+	}
+
+	return count;
+}
+
+void usb_kick(struct usb_handle *h)
+{
+	int fd;
+
+	fd = h->desc;
+	h->desc = -1;
+	if (fd >= 0) {
+		close(fd);
+		DBG("[ usb closed %d ]\n", fd);
+	}
+}
+
+int usb_close(struct usb_handle *h)
+{
+	int fd;
+
+	fd = h->desc;
+	h->desc = -1;
+	if (fd >= 0) {
+		close(fd);
+		DBG("[ usb closed %d ]\n", fd);
+	}
+
+	return 0;
+}
+
+struct usb_handle *usb_open(ifc_match_func callback)
+{
+	return find_usb_device("/dev/bus/usb", callback);
+}
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 07/11] omap4: add serial communications over usb boot
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (5 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 06/11] omap4: add support for booting an omap4 from usb vj
@ 2012-10-05 22:33 ` vj
  2012-10-05 22:33 ` [PATCH 08/11] omap4: add filesystem support " vj
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 drivers/serial/Kconfig                |  7 +++
 drivers/serial/Makefile               |  1 +
 drivers/serial/serial_omap4_usbboot.c | 83 +++++++++++++++++++++++++++++++++++
 3 files changed, 91 insertions(+)
 create mode 100644 drivers/serial/serial_omap4_usbboot.c

diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 7eb96ed..0627b6e 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -100,4 +100,11 @@ config DRIVER_SERIAL_PXA
 	bool "PXA serial driver"
 	depends on ARCH_PXA
 
+config DRIVER_SERIAL_OMAP4_USBBOOT
+	bool "serial driver over omap4 usb"
+	default n
+	depends on OMAP4_USBBOOT
+	help
+	  Enable this to get console support over the usb bus used to boot an OMAP4
+
 endmenu
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index e2d56b9..ff99e72 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -19,3 +19,4 @@ obj-$(CONFIG_DRIVER_SERIAL_S3C)			+= serial_s3c.o
 obj-$(CONFIG_DRIVER_SERIAL_ALTERA)		+= serial_altera.o
 obj-$(CONFIG_DRIVER_SERIAL_ALTERA_JTAG)		+= serial_altera_jtag.o
 obj-$(CONFIG_DRIVER_SERIAL_PXA)			+= serial_pxa.o
+obj-$(CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT)	+= serial_omap4_usbboot.o
diff --git a/drivers/serial/serial_omap4_usbboot.c b/drivers/serial/serial_omap4_usbboot.c
new file mode 100644
index 0000000..f0a2fd1
--- /dev/null
+++ b/drivers/serial/serial_omap4_usbboot.c
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ *
+ * 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 <common.h>
+#include <init.h>
+#include <malloc.h>
+#include <errno.h>
+#include <mach/omap4_rom_usb.h>
+
+struct serial_omap4_usbboot_priv {
+	struct console_device cdev;
+	u32 val;
+};
+
+static void serial_omap4_usbboot_putc(struct console_device *cdev, char c)
+{
+	unsigned b = c;
+	omap4_usbboot_write(&b, 4);
+}
+
+static int serial_omap4_usbboot_tstc(struct console_device *cdev)
+{
+	struct serial_omap4_usbboot_priv *priv =
+		container_of(cdev, struct serial_omap4_usbboot_priv, cdev);
+	if (omap4_usbboot_is_read_waiting())
+		return 0;
+	else if (omap4_usbboot_is_read_ok())
+		return 1;
+	omap4_usbboot_queue_read(&priv->val, 4);
+	udelay(100);
+	if (omap4_usbboot_is_read_waiting())
+		return 0;
+	else if (omap4_usbboot_is_read_ok())
+		return 1;
+	return 0;
+}
+
+static int serial_omap4_usbboot_getc(struct console_device *cdev)
+{
+	struct serial_omap4_usbboot_priv *priv =
+		container_of(cdev, struct serial_omap4_usbboot_priv, cdev);
+	if (omap4_usbboot_is_read_waiting() || omap4_usbboot_is_read_ok()) {
+		omap4_usbboot_wait_read();
+		return priv->val;
+	}
+	omap4_usbboot_read(&priv->val, 4);
+	return priv->val;
+}
+
+static int serial_omap4_usbboot_probe(struct device_d *dev)
+{
+	struct serial_omap4_usbboot_priv *priv;
+	priv = xzalloc(sizeof(*priv));
+
+	priv->cdev.dev = dev;
+	priv->cdev.f_caps = CONSOLE_STDIN | CONSOLE_STDOUT | CONSOLE_STDERR;
+	priv->cdev.tstc = serial_omap4_usbboot_tstc;
+	priv->cdev.putc = serial_omap4_usbboot_putc;
+	priv->cdev.getc = serial_omap4_usbboot_getc;
+	priv->cdev.setbrg = NULL;
+
+	return console_register(&priv->cdev);
+}
+
+static struct driver_d serial_omap4_usbboot_driver = {
+	.name = "serial_omap4_usbboot",
+	.probe = serial_omap4_usbboot_probe,
+};
+
+static int serial_omap4_usbboot_init(void)
+{
+	return platform_driver_register(&serial_omap4_usbboot_driver);
+}
+console_initcall(serial_omap4_usbboot_init);
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 08/11] omap4: add filesystem support over usb boot
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (6 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 07/11] omap4: add serial communications over usb boot vj
@ 2012-10-05 22:33 ` vj
  2012-10-05 22:33 ` [PATCH 09/11] omap4: add support for loading second stage from usb vj
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 fs/Kconfig           |   5 ++
 fs/Makefile          |   1 +
 fs/omap4_usbbootfs.c | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 225 insertions(+)
 create mode 100644 fs/omap4_usbbootfs.c

diff --git a/fs/Kconfig b/fs/Kconfig
index 4c66543..0ab69d7 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -29,6 +29,11 @@ config FS_TFTP
 	prompt "tftp support"
 	depends on NET
 
+config FS_OMAP4_USBBOOT
+	bool
+	prompt "Filesystem over usb boot"
+	depends on OMAP4_USBBOOT
+
 config FS_NFS
 	depends on NET
 	bool
diff --git a/fs/Makefile b/fs/Makefile
index 1b52bee..ad745d9 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -5,4 +5,5 @@ obj-$(CONFIG_FS_DEVFS)	+= devfs.o
 obj-$(CONFIG_FS_FAT)	+= fat/
 obj-y	+= fs.o
 obj-$(CONFIG_FS_TFTP)	+= tftp.o
+obj-$(CONFIG_FS_OMAP4_USBBOOT)	+= omap4_usbbootfs.o
 obj-$(CONFIG_FS_NFS)	+= nfs.o
diff --git a/fs/omap4_usbbootfs.c b/fs/omap4_usbbootfs.c
new file mode 100644
index 0000000..0dc7682
--- /dev/null
+++ b/fs/omap4_usbbootfs.c
@@ -0,0 +1,219 @@
+/*
+ * 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.
+ *
+ * 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 <common.h>
+#include <malloc.h>
+#include <fs.h>
+#include <fcntl.h>
+#include <init.h>
+#include <linux/stat.h>
+#include <linux/err.h>
+#include <mach/omap4_rom_usb.h>
+
+#define OMAP4_USBBOOT_FS_MAGIC		0x5562464D
+#define OMAP4_USBBOOT_FS_CMD_OPEN	0x46530000
+#define OMAP4_USBBOOT_FS_CMD_CLOSE	0x46530001
+#define OMAP4_USBBOOT_FS_CMD_READ	0x46530002
+#define OMAP4_USBBOOT_FS_CMD_END	0x4653FFFF
+
+struct file_priv {
+	s32 id;
+	u32 size;
+};
+/*
+static int omap4_usbbootfs_create(
+	struct device_d *dev, const char *pathname, mode_t mode)
+{
+	return -ENOSYS;
+}
+
+static int omap4_usbbootfs_unlink(struct device_d *dev, const char *pathname)
+{
+	return -ENOSYS;
+}
+
+static int omap4_usbbootfs_mkdir(struct device_d *dev, const char *pathname)
+{
+	return -ENOSYS;
+}
+
+static int omap4_usbbootfs_rmdir(struct device_d *dev, const char *pathname)
+{
+	return -ENOSYS;
+}
+
+static int omap4_usbbootfs_write(
+	struct device_d *_dev, FILE *f, const void *inbuf, size_t size)
+{
+	return -ENOSYS;
+}
+
+static int omap4_usbbootfs_truncate(struct device_d *dev, FILE *f, ulong size)
+{
+	return -ENOSYS;
+}
+*/
+
+static struct file_priv *omap4_usbbootfs_do_open(
+	struct device_d *dev, int accmode, const char *filename)
+{
+	struct file_priv *priv;
+	u32 data;
+
+	if (accmode & O_ACCMODE)
+		return ERR_PTR(-ENOSYS);
+
+	priv = xzalloc(sizeof(*priv));
+	if (!priv)
+		return ERR_PTR(-ENOMEM);
+
+	data = OMAP4_USBBOOT_FS_MAGIC	; omap4_usbboot_write(&data, 4);
+	data = OMAP4_USBBOOT_FS_CMD_OPEN; omap4_usbboot_write(&data, 4);
+	omap4_usbboot_puts(filename);
+	data = OMAP4_USBBOOT_FS_CMD_END	; omap4_usbboot_write(&data, 4);
+
+	if (omap4_usbboot_read(&priv->id, 4) ||
+		omap4_usbboot_read(&priv->size, 4)
+	) {
+		free(priv);
+		return ERR_PTR(-EIO);
+	}
+	if (priv->id < 0) {
+		free(priv);
+		return ERR_PTR(-ENOENT);
+	}
+
+	return priv;
+}
+
+static int omap4_usbbootfs_open(
+	struct device_d *dev, FILE *file, const char *filename)
+{
+	struct file_priv *priv;
+
+	priv = omap4_usbbootfs_do_open(dev, file->flags, filename);
+	if (IS_ERR(priv))
+		return PTR_ERR(priv);
+
+	file->inode = priv;
+	file->size = priv->size;
+
+	return 0;
+}
+
+static int omap4_usbbootfs_do_close(struct file_priv *priv)
+{
+	u32 data;
+	data = OMAP4_USBBOOT_FS_MAGIC	; omap4_usbboot_write(&data, 4);
+	data = OMAP4_USBBOOT_FS_CMD_CLOSE; omap4_usbboot_write(&data, 4);
+	omap4_usbboot_write(&priv->id, 4);
+	data = OMAP4_USBBOOT_FS_CMD_END	; omap4_usbboot_write(&data, 4);
+	free(priv);
+	return 0;
+}
+
+static int omap4_usbbootfs_close(struct device_d *dev, FILE *f)
+{
+	struct file_priv *priv = f->inode;
+	return omap4_usbbootfs_do_close(priv);
+}
+
+static int omap4_usbbootfs_read(
+	struct device_d *dev, FILE *f, void *buf, size_t size)
+{
+	struct file_priv *priv = f->inode;
+	u32 data;
+
+	if (size > priv->size - f->pos)
+		size = priv->size - f->pos;
+	if (!size)
+		return 0;
+
+	data = OMAP4_USBBOOT_FS_MAGIC	; omap4_usbboot_write(&data, 4);
+	data = OMAP4_USBBOOT_FS_CMD_READ; omap4_usbboot_write(&data, 4);
+	omap4_usbboot_write(&priv->id, 4);
+	omap4_usbboot_write(&f->pos, 4);
+	omap4_usbboot_write(&size, 4);
+	data = OMAP4_USBBOOT_FS_CMD_END	; omap4_usbboot_write(&data, 4);
+
+	if (omap4_usbboot_read(buf, size))
+		return -EIO;
+
+	return size;
+}
+
+static loff_t omap4_usbbootfs_lseek(struct device_d *dev, FILE *f, loff_t pos)
+{
+	f->pos = pos;
+	return pos;
+}
+
+static DIR *omap4_usbbootfs_opendir(struct device_d *dev, const char *pathname)
+{
+	return NULL;
+}
+
+static int omap4_usbbootfs_stat(
+	struct device_d *dev, const char *filename, struct stat *s)
+{
+	struct file_priv *priv;
+
+	priv = omap4_usbbootfs_do_open(dev, O_RDONLY, filename);
+	if (IS_ERR(priv))
+		return PTR_ERR(priv);
+
+	s->st_mode = S_IFREG |
+				 S_IRUSR | S_IRGRP | S_IROTH |
+				 S_IXUSR | S_IXGRP | S_IXOTH ;
+	s->st_size = priv->size;
+
+	omap4_usbbootfs_do_close(priv);
+
+	return 0;
+}
+
+static int omap4_usbbootfs_probe(struct device_d *dev)
+{
+	return 0;
+}
+static void omap4_usbbootfs_remove(struct device_d *dev)
+{
+}
+
+static struct fs_driver_d omap4_usbbootfs_driver = {
+	.open    = omap4_usbbootfs_open,
+	.close   = omap4_usbbootfs_close,
+	.read    = omap4_usbbootfs_read,
+	.lseek   = omap4_usbbootfs_lseek,
+	.opendir = omap4_usbbootfs_opendir,
+	.stat    = omap4_usbbootfs_stat,
+/*
+	.create	= omap4_usbbootfs_create,
+	.unlink	= omap4_usbbootfs_unlink,
+	.mkdir	= omap4_usbbootfs_mkdir,
+	.rmdir	= omap4_usbbootfs_rmdir,
+	.write	= omap4_usbbootfs_write,
+	.truncate= omap4_usbbootfs_truncate,
+*/
+	.flags	 = 0,
+	.drv = {
+		.probe	= omap4_usbbootfs_probe,
+		.remove	= omap4_usbbootfs_remove,
+		.name	= "omap4_usbbootfs",
+	}
+};
+
+static int omap4_usbbootfs_init(void)
+{
+	return register_fs_driver(&omap4_usbbootfs_driver);
+}
+coredevice_initcall(omap4_usbbootfs_init);
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 09/11] omap4: add support for loading second stage from usb
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (7 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 08/11] omap4: add filesystem support " vj
@ 2012-10-05 22:33 ` vj
  2012-10-05 22:33 ` [PATCH 10/11] mach-types: add ID for Archos G9 tablet vj
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 arch/arm/mach-omap/xload.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 9fa8221..240d3ff 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -139,6 +139,24 @@ static void *omap_xload_boot_spi(int offset)
 	return to;
 }
 
+static void *omap4_xload_boot_usb(void){
+	int ret;
+	void *buf;
+	int len;
+
+	ret = mount("omap4_usbboot", "omap4_usbbootfs", "/");
+	if (ret) {
+		printf("Unable to mount omap4_usbbootfs (%d)\n", ret);
+		return NULL;
+	}
+
+	buf = read_file("/barebox.bin", &len);
+	if (!buf)
+		printf("could not read barebox.bin from omap4_usbbootfs\n");
+
+	return buf;
+}
+
 enum omap_boot_src omap_bootsrc(void)
 {
 #if defined(CONFIG_ARCH_OMAP3)
@@ -161,6 +179,14 @@ int run_shell(void)
 		printf("booting from MMC1\n");
 		func = omap_xload_boot_mmc();
 		break;
+	case OMAP_BOOTSRC_USB1:
+		if (IS_ENABLED(CONFIG_FS_OMAP4_USBBOOT)) {
+			printf("booting from USB1\n");
+			func = omap4_xload_boot_usb();
+			break;
+		} else {
+			printf("booting from usb1 not enabled\n");
+		}
 	case OMAP_BOOTSRC_UNKNOWN:
 		printf("unknown boot source. Fall back to nand\n");
 	case OMAP_BOOTSRC_NAND:
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 10/11] mach-types: add ID for Archos G9 tablet
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (8 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 09/11] omap4: add support for loading second stage from usb vj
@ 2012-10-05 22:33 ` vj
  2012-10-07 10:30   ` Sascha Hauer
  2012-10-05 22:33 ` [PATCH 11/11] Add support " vj
  2012-10-07 10:34 ` [PATCH 00/11] archosg9: add support for tablet, third round Sascha Hauer
  11 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 arch/arm/tools/mach-types | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
index 325513f..a21da3b 100644
--- a/arch/arm/tools/mach-types
+++ b/arch/arm/tools/mach-types
@@ -4148,3 +4148,4 @@ msm8625_evt		MACH_MSM8625_EVT	MSM8625_EVT		4193
 mx53_sellwood		MACH_MX53_SELLWOOD	MX53_SELLWOOD		4194
 somiq_am35		MACH_SOMIQ_AM35		SOMIQ_AM35		4195
 somiq_am37		MACH_SOMIQ_AM37		SOMIQ_AM37		4196
+omap4_archosg9		MACH_OMAP4_ARCHOSG9	OMAP4_ARCHOSG9		5032
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 11/11] Add support for Archos G9 tablet
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (9 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 10/11] mach-types: add ID for Archos G9 tablet vj
@ 2012-10-05 22:33 ` vj
  2012-10-07 10:34 ` [PATCH 00/11] archosg9: add support for tablet, third round Sascha Hauer
  11 siblings, 0 replies; 28+ messages in thread
From: vj @ 2012-10-05 22:33 UTC (permalink / raw)
  To: barebox; +Cc: vj


Signed-off-by: vj <vicencb@gmail.com>
---
 arch/arm/Makefile                         |   1 +
 arch/arm/boards/archosg9/Makefile         |   3 +
 arch/arm/boards/archosg9/board.c          |  65 +++++
 arch/arm/boards/archosg9/config.h         |   1 +
 arch/arm/boards/archosg9/env/config       |   3 +
 arch/arm/boards/archosg9/env/init/usbboot |   4 +
 arch/arm/boards/archosg9/lowlevel.c       |  79 +++++
 arch/arm/boards/archosg9/mux.c            | 459 ++++++++++++++++++++++++++++++
 arch/arm/boards/archosg9/mux.h            |   6 +
 arch/arm/configs/archosg9_defconfig       |  70 +++++
 arch/arm/configs/archosg9_xload_defconfig |  24 ++
 arch/arm/mach-omap/Kconfig                |   9 +
 12 files changed, 724 insertions(+)
 create mode 100644 arch/arm/boards/archosg9/Makefile
 create mode 100644 arch/arm/boards/archosg9/board.c
 create mode 100644 arch/arm/boards/archosg9/config.h
 create mode 100644 arch/arm/boards/archosg9/env/config
 create mode 100644 arch/arm/boards/archosg9/env/init/usbboot
 create mode 100644 arch/arm/boards/archosg9/lowlevel.c
 create mode 100644 arch/arm/boards/archosg9/mux.c
 create mode 100644 arch/arm/boards/archosg9/mux.h
 create mode 100644 arch/arm/configs/archosg9_defconfig
 create mode 100644 arch/arm/configs/archosg9_xload_defconfig

diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 855043a..de570d7 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -101,6 +101,7 @@ board-$(CONFIG_MACH_OMAP343xSDP)		:= omap343xdsp
 board-$(CONFIG_MACH_BEAGLE)			:= beagle
 board-$(CONFIG_MACH_OMAP3EVM)			:= omap3evm
 board-$(CONFIG_MACH_PANDA)			:= panda
+board-$(CONFIG_MACH_ARCHOSG9)			:= archosg9
 board-$(CONFIG_MACH_PCM049)			:= pcm049
 board-$(CONFIG_MACH_PCA100)			:= phycard-i.MX27
 board-$(CONFIG_MACH_PCAAL1)			:= phycard-a-l1
diff --git a/arch/arm/boards/archosg9/Makefile b/arch/arm/boards/archosg9/Makefile
new file mode 100644
index 0000000..256eaf6
--- /dev/null
+++ b/arch/arm/boards/archosg9/Makefile
@@ -0,0 +1,3 @@
+obj-y += board.o
+obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += lowlevel.o mux.o
+pbl-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += lowlevel.o mux.o
diff --git a/arch/arm/boards/archosg9/board.c b/arch/arm/boards/archosg9/board.c
new file mode 100644
index 0000000..ca891a9
--- /dev/null
+++ b/arch/arm/boards/archosg9/board.c
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ * 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 <common.h>
+#include <init.h>
+#include <ns16550.h>
+#include <asm/armlinux.h>
+#include <generated/mach-types.h>
+#include <mach/silicon.h>
+#include <sizes.h>
+#include <i2c/i2c.h>
+#include <gpio.h>
+
+static struct NS16550_plat serial_plat = {
+	.clock = 48000000, /* 48MHz (APLL96/2) */
+	.shift = 2,
+};
+static int archosg9_console_init(void){
+	if (IS_ENABLED(CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT))
+		add_generic_device("serial_omap4_usbboot", DEVICE_ID_DYNAMIC
+			, NULL, 0, 0, 0, NULL);
+	if (IS_ENABLED(CONFIG_DRIVER_SERIAL_NS16550)) {
+		gpio_direction_output(41, 0); /* gps_disable */
+		gpio_direction_output(34, 1); /* 1v8_pwron */
+		add_ns16550_device(DEVICE_ID_DYNAMIC, OMAP44XX_UART1_BASE, 1024,
+			IORESOURCE_MEM_8BIT, &serial_plat);
+	}
+	return 0;
+}
+console_initcall(archosg9_console_init);
+
+static int archosg9_mem_init(void){
+	arm_add_mem_device("ram0", 0x80000000, SZ_1G);
+	return 0;
+}
+mem_initcall(archosg9_mem_init);
+
+static struct i2c_board_info i2c_devices[] = {
+	{ I2C_BOARD_INFO("twl6030", 0x48), },
+};
+
+static int archosg9_devices_init(void){
+	i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices));
+	add_generic_device("i2c-omap"  , DEVICE_ID_DYNAMIC, NULL,
+		OMAP44XX_I2C1_BASE, 0x100, IORESOURCE_MEM, NULL);
+	add_generic_device("omap-hsmmc", DEVICE_ID_DYNAMIC, NULL,
+		OMAP44XX_MMC1_BASE, SZ_4K, IORESOURCE_MEM, NULL);
+	add_generic_device("omap-hsmmc", DEVICE_ID_DYNAMIC, NULL,
+		OMAP44XX_MMC2_BASE, SZ_4K, IORESOURCE_MEM, NULL);
+
+	armlinux_set_bootparams((void *)0x80000100);
+	armlinux_set_architecture(MACH_TYPE_OMAP4_ARCHOSG9);
+
+	return 0;
+}
+device_initcall(archosg9_devices_init);
diff --git a/arch/arm/boards/archosg9/config.h b/arch/arm/boards/archosg9/config.h
new file mode 100644
index 0000000..da84fa5
--- /dev/null
+++ b/arch/arm/boards/archosg9/config.h
@@ -0,0 +1 @@
+/* nothing */
diff --git a/arch/arm/boards/archosg9/env/config b/arch/arm/boards/archosg9/env/config
new file mode 100644
index 0000000..336b980
--- /dev/null
+++ b/arch/arm/boards/archosg9/env/config
@@ -0,0 +1,3 @@
+autoboot_timeout=2
+#global.linux.bootargs.base="earlyprintk=serial console=ttyO1,1000000n8 keep_bootcon pm_disable initcall_debug ignore_loglevel no_console_suspend=1"
+global.linux.bootargs.base="earlyprintk=serial console=ttyO1,1000000n8 keep_bootcon pm_disable ignore_loglevel no_console_suspend=1 root=/dev/ram0 init=/linuxrc"
diff --git a/arch/arm/boards/archosg9/env/init/usbboot b/arch/arm/boards/archosg9/env/init/usbboot
new file mode 100644
index 0000000..01b7340
--- /dev/null
+++ b/arch/arm/boards/archosg9/env/init/usbboot
@@ -0,0 +1,4 @@
+. /env/config
+mkdir /usb
+mount -t omap4_usbbootfs omap4_usbboot /usb
+bootm -r /usb/boot/initrd /usb/boot/zImage
diff --git a/arch/arm/boards/archosg9/lowlevel.c b/arch/arm/boards/archosg9/lowlevel.c
new file mode 100644
index 0000000..fa5be1d
--- /dev/null
+++ b/arch/arm/boards/archosg9/lowlevel.c
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ *
+ * 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 <common.h>
+#include <io.h>
+#include <init.h>
+#include <mach/omap4-mux.h>
+#include <mach/omap4-silicon.h>
+#include <mach/omap4-clock.h>
+#include <mach/syslib.h>
+#include <asm/barebox-arm.h>
+#include <asm/barebox-arm-head.h>
+#include "mux.h"
+
+#define TPS62361_VSEL0_GPIO    7
+
+static const struct ddr_regs ddr_regs_400_mhz_2cs = {
+	.tim1         = 0x10EB0662,
+	.tim2         = 0x20370DD2,
+	.tim3         = 0x00B1C33F,
+	.phy_ctrl_1   = 0x849FF408,
+	.ref_ctrl     = 0x00000618,
+	.config_init  = 0x80000EB9,
+	.config_final = 0x80001AB9,
+	.zq_config    = 0xD00B3215,
+	.mr1          = 0x83,
+	.mr2          = 0x4
+};
+
+static noinline void archosg9_init_lowlevel(void)
+{
+	struct dpll_param core = OMAP4_CORE_DPLL_PARAM_19M2_DDR400;
+	struct dpll_param mpu = OMAP4_MPU_DPLL_PARAM_19M2_MPU600;
+	struct dpll_param iva = OMAP4_IVA_DPLL_PARAM_19M2;
+	struct dpll_param per = OMAP4_PER_DPLL_PARAM_19M2;
+	struct dpll_param abe = OMAP4_ABE_DPLL_PARAM_19M2;
+	struct dpll_param usb = OMAP4_USB_DPLL_PARAM_19M2;
+
+	writel(CM_SYS_CLKSEL_19M2, CM_SYS_CLKSEL);
+
+	/* Configure all DPLL's at 100% OPP */
+	omap4_configure_mpu_dpll(&mpu);
+	omap4_configure_iva_dpll(&iva);
+	omap4_configure_per_dpll(&per);
+	omap4_configure_abe_dpll(&abe);
+	omap4_configure_usb_dpll(&usb);
+
+	/* Enable all clocks */
+	omap4_enable_all_clocks();
+
+	set_muxconf_regs();
+
+	omap4_ddr_init(&ddr_regs_400_mhz_2cs, &core);
+
+	/* Set VCORE1 = 1.3 V, VCORE2 = VCORE3 = 1.21V */
+	omap4_scale_vcores(TPS62361_VSEL0_GPIO);
+	board_init_lowlevel_return();
+}
+
+void __naked __bare_init reset(void)
+{
+	u32 r;
+
+	common_reset();
+
+	r = 0x4030D000;
+	__asm__ __volatile__("mov sp, %0" : : "r"(r));
+
+	archosg9_init_lowlevel();
+}
diff --git a/arch/arm/boards/archosg9/mux.c b/arch/arm/boards/archosg9/mux.c
new file mode 100644
index 0000000..7ca5057
--- /dev/null
+++ b/arch/arm/boards/archosg9/mux.c
@@ -0,0 +1,459 @@
+/*
+ * 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.
+ *
+ * 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 <common.h>
+#include <init.h>
+#include <io.h>
+#include <mach/omap4-silicon.h>
+#include <mach/omap4-mux.h>
+#include <mach/omap4-clock.h>
+#include "mux.h"
+
+static const struct pad_conf_entry core_padconf_array[] = {
+	/* sdmmc2_dat0         */ /* internal FLASH */
+	{ GPMC_AD0            ,                               IEN | PTU | M1 },
+	/* sdmmc2_dat1         */ /* internal FLASH */
+	{ GPMC_AD1            ,                               IEN | PTU | M1 },
+	/* sdmmc2_dat2         */ /* internal FLASH */
+	{ GPMC_AD2            ,                               IEN | PTU | M1 },
+	/* sdmmc2_dat3         */ /* internal FLASH */
+	{ GPMC_AD3            ,                               IEN | PTU | M1 },
+	/* sdmmc2_dat4         */ /* internal FLASH */
+	{ GPMC_AD4            ,                               IEN | PTU | M1 },
+	/* sdmmc2_dat5         */ /* internal FLASH */
+	{ GPMC_AD5            ,                               IEN | PTU | M1 },
+	/* sdmmc2_dat6         */ /* internal FLASH */
+	{ GPMC_AD6            ,                               IEN | PTU | M1 },
+	/* sdmmc2_dat7         */ /* internal FLASH */
+	{ GPMC_AD7            ,                               IEN | PTU | M1 },
+	/* gpio_32             */
+	{ GPMC_AD8            ,                               IEN | PTD | M3 },
+	/* gpmc_ad9            */
+	{ GPMC_AD9            ,                               IEN | PTU | M0 },
+	/* gpio_34             */ /* 1v8_pwron */
+	{ GPMC_AD10           ,                               IEN | PTU | M3 },
+	/* gpio_35             */ /* vcc_pwron */
+	{ GPMC_AD11           ,                               IEN | PTU | M3 },
+	/* gpio_36             */ /* 5v_pwron */
+	{ GPMC_AD12           ,                               IEN       | M3 },
+	/* gpio_37             */ /* hdmi_pwr */
+	{ GPMC_AD13           ,                               IEN       | M3 },
+	/* gpio_38             */ /* lcd_pwon */
+	{ GPMC_AD14           ,                               IEN       | M3 },
+	/* gpio_39             */ /* lvds_en */
+	{ GPMC_AD15           ,                               IEN       | M3 },
+	/* gpio_40             */ /* 3g_enable */
+	{ GPMC_A16            ,                               IEN       | M3 },
+	/* gpio_41             */ /* gps_enable */
+	{ GPMC_A17            ,                               IEN       | M3 },
+	/* gpio_42             */ /* ehci_enable */
+	{ GPMC_A18            ,                               IEN       | M3 },
+	/* gpio_43             */ /* volume up */
+	{ GPMC_A19            ,                               IEN       | M3 },
+	/* gpio_44             */ /* volume down */
+	{ GPMC_A20            ,                               IEN       | M3 },
+	/* gpio_45             */ /* accel_int1 */
+	{ GPMC_A21            ,                               IEN | PTU | M3 },
+	/* kpd_col6            */
+	{ GPMC_A22            ,                               IEN | PTD | M1 },
+	/* kpd_col7            */
+	{ GPMC_A23            ,                               IEN | PTD | M1 },
+	/* gpio_48             */ /* vbus_detect */
+	{ GPMC_A24            ,                               IEN       | M3 },
+	/* gpio_49             */ /* id */
+	{ GPMC_A25            ,                               IEN | PTU | M3 },
+	/* gpmc_ncs0           */
+	{ GPMC_NCS0           ,                               IEN | PTU | M0 },
+	/* gpio_51             */ /* compass_data_ready */
+	{ GPMC_NCS1           ,                               IEN       | M3 },
+	/* safe_mode           */
+	{ GPMC_NCS2           ,                               IEN | PTU | M7 },
+	/* gpio_53             */ /* lcd_rst */
+	{ GPMC_NCS3           ,                               IEN       | M3 },
+	/* gpmc_nwp            */
+	{ GPMC_NWP            ,                               IEN | PTD | M0 },
+	/* gpmc_clk            */
+	{ GPMC_CLK            ,                               IEN | PTD | M0 },
+	/* gpmc_nadv_ale       */
+	{ GPMC_NADV_ALE       ,                               IEN | PTD | M0 },
+	/* sdmmc2_clk          */ /* internal FLASH */
+	{ GPMC_NOE            ,                               IEN | PTU | M1 },
+	/* sdmmc2_cmd          */ /* internal FLASH */
+	{ GPMC_NWE            ,                               IEN | PTU | M1 },
+	/* gpmc_nbe0_cle       */
+	{ GPMC_NBE0_CLE       ,                               IEN | PTD | M0 },
+	/* safe_mode           */
+	{ GPMC_NBE1           ,                               IEN | PTD | M7 },
+	/* gpmc_wait0          */
+	{ GPMC_WAIT0          ,                               IEN | PTU | M0 },
+	/* gpio_62             */ /* camera_reset */
+	{ GPMC_WAIT1          ,                               IEN       | M3 },
+	/* safe_mode           */
+	{ GPMC_WAIT2          ,                               IEN | PTD | M7 },
+	/* gpio_101            */ /* lcd_stdby */
+	{ GPMC_NCS4           ,                                           M3 },
+	/* gpio_102            */ /* wifi_irq */
+	{ GPMC_NCS5           ,                               IEN       | M3 },
+	/* gpio_103            */ /* wifi_power */
+	{ GPMC_NCS6           ,                                           M3 },
+	/* gpio_104            */ /* bt_power */
+	{ GPMC_NCS7           ,                               IEN       | M3 },
+	/* gpio_63             */ /* hdmi_hpd ?? */
+	{ GPIO63              ,                               IEN | PTD | M3 },
+	/*                     */
+	{ GPIO64              ,                               IEN       | M0 },
+	/*                     */
+	{ GPIO65              ,                               IEN       | M0 },
+	/*                     */
+	{ GPIO66              ,                               IEN       | M0 },
+	/* csi21_dx0           */
+	{ CSI21_DX0           ,                               IEN       | M0 },
+	/* csi21_dy0           */
+	{ CSI21_DY0           ,                               IEN       | M0 },
+	/* csi21_dx1           */
+	{ CSI21_DX1           ,                               IEN       | M0 },
+	/* csi21_dy1           */
+	{ CSI21_DY1           ,                               IEN       | M0 },
+	/* safe_mode           */
+	{ CSI21_DX2           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI21_DY2           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI21_DX3           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI21_DY3           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI21_DX4           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI21_DY4           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI22_DX0           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI22_DY0           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI22_DX1           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI22_DY1           ,                               IEN | PTD | M7 },
+	/* cam_shutter         */
+	{ CAM_SHUTTER         ,                                     PTD | M0 },
+	/* cam_strobe          */
+	{ CAM_STROBE          ,                                     PTD | M0 },
+	/* gpio_83             */
+	{ CAM_GLOBALRESET     ,                                     PTD | M3 },
+	/* usbb1_ulpiphy_clk   */
+	{ USBB1_ULPITLL_CLK   ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_stp   */
+	{ USBB1_ULPITLL_STP   ,                                           M4 },
+	/* usbb1_ulpiphy_dir   */
+	{ USBB1_ULPITLL_DIR   ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_nxt   */
+	{ USBB1_ULPITLL_NXT   ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat0  */
+	{ USBB1_ULPITLL_DAT0  , WAKEUP_EN                   | IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat1  */
+	{ USBB1_ULPITLL_DAT1  ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat2  */
+	{ USBB1_ULPITLL_DAT2  ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat3  */
+	{ USBB1_ULPITLL_DAT3  ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat4  */
+	{ USBB1_ULPITLL_DAT4  ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat5  */
+	{ USBB1_ULPITLL_DAT5  ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat6  */
+	{ USBB1_ULPITLL_DAT6  ,                               IEN | PTD | M4 },
+	/* usbb1_ulpiphy_dat7  */
+	{ USBB1_ULPITLL_DAT7  ,                               IEN | PTD | M4 },
+	/* usbb1_hsic_data     */
+	{ USBB1_HSIC_DATA     ,                                           M0 },
+	/* usbb1_hsic_strobe   */
+	{ USBB1_HSIC_STROBE   ,                                           M0 },
+	/* usbc1_icusb_dp      */
+	{ USBC1_ICUSB_DP      ,                                           M0 },
+	/* usbc1_icusb_dm      */
+	{ USBC1_ICUSB_DM      ,                                           M0 },
+	/* sdmmc1_clk          */ /* SD card */
+	{ SDMMC1_CLK          ,                                     PTU | M0 },
+	/* sdmmc1_cmd          */ /* SD card */
+	{ SDMMC1_CMD          ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat0         */ /* SD card */
+	{ SDMMC1_DAT0         ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat1         */ /* SD card */
+	{ SDMMC1_DAT1         ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat2         */ /* SD card */
+	{ SDMMC1_DAT2         ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat3         */ /* SD card */
+	{ SDMMC1_DAT3         ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat4         */ /* SD card */
+	{ SDMMC1_DAT4         ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat5         */ /* SD card */
+	{ SDMMC1_DAT5         ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat6         */ /* SD card */
+	{ SDMMC1_DAT6         ,                               IEN | PTU | M0 },
+	/* sdmmc1_dat7         */ /* SD card */
+	{ SDMMC1_DAT7         ,                               IEN | PTU | M0 },
+	/* gpio_110            */ /* tsp_pwr_gpio */
+	{ ABE_MCBSP2_CLKX     ,                                           M3 },
+	/* gpio_111            */ /* vbus_musb_pwron */
+	{ ABE_MCBSP2_DR       ,                               IEN       | M3 },
+	/* gpio_112            */ /* tsp_irq_gpio */
+	{ ABE_MCBSP2_DX       , WAKEUP_EN                   | IEN | PTU | M3 },
+	/* gpio_113            */ /* vbus_flag */
+	{ ABE_MCBSP2_FSX      ,                               IEN | PTU | M3 },
+	/* safe_mode           */
+	{ ABE_MCBSP1_CLKX     ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ ABE_MCBSP1_DR       ,                               IEN | PTD | M7 },
+	/* abe_mcbsp1_dx       */
+	{ ABE_MCBSP1_DX       ,                                           M0 },
+	/* abe_mcbsp1_fsx      */
+	{ ABE_MCBSP1_FSX      ,                               IEN       | M0 },
+	/* abe_pdm_ul_data     */
+	{ ABE_PDM_UL_DATA     ,                               IEN       | M0 },
+	/* abe_pdm_dl_data     */
+	{ ABE_PDM_DL_DATA     ,                                           M0 },
+	/* abe_pdm_frame       */
+	{ ABE_PDM_FRAME       ,                               IEN       | M0 },
+	/* abe_pdm_lb_clk      */
+	{ ABE_PDM_LB_CLK      ,                               IEN       | M0 },
+	/* abe_clks            */
+	{ ABE_CLKS            ,                               IEN       | M0 },
+	/* safe_mode           */
+	{ ABE_DMIC_CLK1       ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ ABE_DMIC_DIN1       ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ ABE_DMIC_DIN2       ,                               IEN | PTD | M7 },
+	/* safe_mode           */ /* bkl_en on gpio_122 ?? */
+	{ ABE_DMIC_DIN3       ,                               IEN | PTD | M7 },
+	/* uart2_cts           */
+	{ UART2_CTS           , WAKEUP_EN | OFF_PU | OFF_IN             | M0 },
+	/* safe_mode           */
+	{ UART2_RTS           ,             OFF_PU | OFF_IN             | M7 },
+	/* uart2_rx            */
+	{ UART2_RX            ,                               IEN | PTU | M0 },
+	/* uart2_tx            */
+	{ UART2_TX            ,                                           M0 },
+	/* gpio_127            */ /* audio_power_on */
+	{ HDQ_SIO             ,                                           M3 },
+	/* i2c1_scl            */
+	{ I2C1_SCL            ,                               IEN       | M0 },
+	/* i2c1_sda            */
+	{ I2C1_SDA            ,                               IEN       | M0 },
+	/* i2c2_scl            */
+	{ I2C2_SCL            ,                               IEN       | M0 },
+	/* i2c2_sda            */
+	{ I2C2_SDA            ,                               IEN       | M0 },
+	/* i2c3_scl            */
+	{ I2C3_SCL            ,                               IEN       | M0 },
+	/* i2c3_sda            */
+	{ I2C3_SDA            ,                               IEN       | M0 },
+	/* i2c4_scl            */
+	{ I2C4_SCL            ,                               IEN       | M0 },
+	/* i2c4_sda            */
+	{ I2C4_SDA            ,                               IEN       | M0 },
+	/* mcspi1_clk          */
+	{ MCSPI1_CLK          ,                               IEN       | M0 },
+	/* mcspi1_somi         */
+	{ MCSPI1_SOMI         ,                               IEN       | M0 },
+	/* mcspi1_simo         */
+	{ MCSPI1_SIMO         ,                               IEN       | M0 },
+	/* mcspi1_cs0          */
+	{ MCSPI1_CS0          ,                               IEN | PTD | M0 },
+	/* uart1_rx            */
+	{ MCSPI1_CS1          , WAKEUP_EN                   | IEN       | M1 },
+	/* gpio_139            */
+	{ MCSPI1_CS2          ,                                           M3 },
+	/* safe_mode           */
+	{ MCSPI1_CS3          ,                               IEN | PTU | M7 },
+	/* uart1_tx            */
+	{ UART3_CTS_RCTX      ,                                           M1 },
+	/* uart3_rts_sd        */
+	{ UART3_RTS_SD        ,                                           M0 },
+	/* safe_mode           */
+	{ UART3_RX_IRRX       ,                               IEN | PTU | M7 },
+	/* safe_mode           */
+	{ UART3_TX_IRTX       ,                               IEN | PTD | M7 },
+	/* sdmmc5_clk          */
+	{ SDMMC5_CLK          ,                                     PTU | M0 },
+	/* sdmmc5_cmd          */
+	{ SDMMC5_CMD          ,                               IEN | PTU | M0 },
+	/* sdmmc5_dat0         */
+	{ SDMMC5_DAT0         ,                               IEN | PTU | M0 },
+	/* sdmmc5_dat1         */
+	{ SDMMC5_DAT1         ,                               IEN | PTU | M0 },
+	/* sdmmc5_dat2         */
+	{ SDMMC5_DAT2         ,                               IEN | PTU | M0 },
+	/* sdmmc5_dat3         */
+	{ SDMMC5_DAT3         ,                               IEN | PTU | M0 },
+	/* sdmmc4_clk          */
+	{ MCSPI4_CLK          ,                               IEN | PTU | M1 },
+	/* sdmmc4_cmd          */
+	{ MCSPI4_SIMO         ,                               IEN | PTU | M1 },
+	/* sdmmc4_dat0         */
+	{ MCSPI4_SOMI         ,                               IEN | PTU | M1 },
+	/* sdmmc4_dat3         */
+	{ MCSPI4_CS0          ,                               IEN | PTU | M1 },
+	/* sdmmc4_dat2         */
+	{ UART4_RX            ,                               IEN | PTU | M1 },
+	/* sdmmc4_dat1         */
+	{ UART4_TX            ,                               IEN | PTU | M1 },
+	/* gpio_157            */
+	{ USBB2_ULPITLL_CLK   ,                                           M3 },
+	/* dispc2_data23       */
+	{ USBB2_ULPITLL_STP   ,                                           M5 },
+	/* dispc2_data22       */
+	{ USBB2_ULPITLL_DIR   ,                                           M5 },
+	/* dispc2_data21       */
+	{ USBB2_ULPITLL_NXT   ,                                           M5 },
+	/* dispc2_data20       */
+	{ USBB2_ULPITLL_DAT0  ,                                           M5 },
+	/* dispc2_data19       */
+	{ USBB2_ULPITLL_DAT1  ,                                           M5 },
+	/* dispc2_data18       */
+	{ USBB2_ULPITLL_DAT2  ,                                           M5 },
+	/* dispc2_data15       */
+	{ USBB2_ULPITLL_DAT3  ,                                           M5 },
+	/* dispc2_data14       */
+	{ USBB2_ULPITLL_DAT4  ,                                           M5 },
+	/* dispc2_data13       */
+	{ USBB2_ULPITLL_DAT5  ,                                           M5 },
+	/* dispc2_data12       */
+	{ USBB2_ULPITLL_DAT6  ,                                           M5 },
+	/* dispc2_data11       */
+	{ USBB2_ULPITLL_DAT7  ,                                           M5 },
+	/* gpio_169            */
+	{ USBB2_HSIC_DATA     ,                                           M3 },
+	/* gpio_170            */
+	{ USBB2_HSIC_STROBE   ,                                           M3 },
+	/* kpd_col0            */
+	{ KPD_COL3            ,                               IEN | PTD | M1 },
+	/* kpd_col1            */
+	{ KPD_COL4            ,                               IEN | PTD | M1 },
+	/* kpd_col2            */
+	{ KPD_COL5            ,                               IEN | PTD | M1 },
+	/* gpio_174            */ /* accel_int2 */
+	{ KPD_COL0            ,                               IEN | PTU | M3 },
+	/* gpio_0              */ /* tsp_shtdwn_gpio */
+	{ KPD_COL1            ,                               IEN | PTD | M3 },
+	/* gpio_1              */
+	{ KPD_COL2            ,                               IEN | PTD | M3 },
+	/* kpd_row0            */
+	{ KPD_ROW3            ,                               IEN | PTD | M1 },
+	/* kpd_row1            */
+	{ KPD_ROW4            ,                               IEN | PTD | M1 },
+	/* kpd_row2            */
+	{ KPD_ROW5            ,                               IEN | PTD | M1 },
+	/* kpd_row3            */
+	{ KPD_ROW0            ,                               IEN | PTD | M1 },
+	/* kpd_row4            */
+	{ KPD_ROW1            ,                               IEN | PTD | M1 },
+	/* kpd_row5            */
+	{ KPD_ROW2            ,                               IEN | PTD | M1 },
+	/* usba0_otg_ce        */
+	{ USBA0_OTG_CE        ,                                     PTU | M0 },
+	/* usba0_otg_dp        */
+	{ USBA0_OTG_DP        ,                                           M0 },
+	/* usba0_otg_dm        */
+	{ USBA0_OTG_DM        ,                                           M0 },
+	/* safe_mode           */
+	{ FREF_CLK1_OUT       ,                               IEN | PTD | M7 },
+	/* fref_clk2_out       */
+	{ FREF_CLK2_OUT       ,                                           M0 },
+	/* sys_nirq1           */
+	{ SYS_NIRQ1           , WAKEUP_EN                   | IEN | PTU | M0 },
+	/* sys_nirq2           */ /* audio_irq */
+	{ SYS_NIRQ2           ,                               IEN | PTU | M0 },
+	/* sys_boot0           */
+	{ SYS_BOOT0           ,                               IEN | PTD | M0 },
+	/* sys_boot1           */
+	{ SYS_BOOT1           ,                               IEN | PTD | M0 },
+	/* sys_boot2           */
+	{ SYS_BOOT2           ,                               IEN | PTD | M0 },
+	/* sys_boot3           */
+	{ SYS_BOOT3           ,                               IEN | PTD | M0 },
+	/* sys_boot4           */
+	{ SYS_BOOT4           ,                               IEN | PTD | M0 },
+	/* sys_boot5           */
+	{ SYS_BOOT5           ,                               IEN | PTD | M0 },
+	/* dpm_emu0            */
+	{ DPM_EMU0            ,                               IEN | PTU | M0 },
+	/* gpio_12             */ /* lcd_avdd_en */
+	{ DPM_EMU1            ,                               IEN       | M3 },
+	/* safe_mode           */
+	{ DPM_EMU2            ,                               IEN | PTD | M7 },
+	/* dispc2_data10       */
+	{ DPM_EMU3            ,                                           M5 },
+	/* dispc2_data9        */
+	{ DPM_EMU4            ,                                           M5 },
+	/* dispc2_data16       */
+	{ DPM_EMU5            ,                                           M5 },
+	/* dispc2_data17       */
+	{ DPM_EMU6            ,                                           M5 },
+	/* dispc2_hsync        */
+	{ DPM_EMU7            ,                                           M5 },
+	/* dispc2_pclk         */
+	{ DPM_EMU8            ,                                           M5 },
+	/* dispc2_vsync        */
+	{ DPM_EMU9            ,                                           M5 },
+	/* dispc2_de           */
+	{ DPM_EMU10           ,                                           M5 },
+	/* dispc2_data8        */
+	{ DPM_EMU11           ,                                           M5 },
+	/* dispc2_data7        */
+	{ DPM_EMU12           ,                                           M5 },
+	/* dispc2_data6        */
+	{ DPM_EMU13           ,                                           M5 },
+	/* dispc2_data5        */
+	{ DPM_EMU14           ,                                           M5 },
+	/* dispc2_data4        */
+	{ DPM_EMU15           ,                                           M5 },
+	/* dispc2_data3        */
+	{ DPM_EMU16           ,                                           M5 },
+	/* dispc2_data2        */
+	{ DPM_EMU17           ,                                           M5 },
+	/* dispc2_data1        */
+	{ DPM_EMU18           ,                                           M5 },
+	/* dispc2_data0        */
+	{ DPM_EMU19           ,                                           M5 },
+	/* safe_mode           */
+	{ CSI22_DX2           ,                               IEN | PTD | M7 },
+	/* safe_mode           */
+	{ CSI22_DY2           ,                               IEN | PTD | M7 },
+};
+
+static const struct pad_conf_entry wkup_padconf_array[] = {
+	/* sr_scl              */
+	{ SR_SCL               , IEN            },
+	/* sr_sda              */
+	{ SR_SDA               , IEN            },
+	/* fref_clk0_out       */
+	{ FREF_CLK0_OUT        ,             M0 },
+	/* gpio_wk30           */
+	{ FREF_CLK3_REQ        ,             M3 },
+	/* gpio_wk7            */ /* tps62361_vsel0 */
+	{ FREF_CLK4_REQ        , IEN | PTU | M3 },
+};
+
+void set_muxconf_regs(void){
+	omap4_do_set_mux(OMAP44XX_CONTROL_PADCONF_CORE,
+		core_padconf_array, ARRAY_SIZE(core_padconf_array));
+	omap4_do_set_mux(OMAP44XX_CONTROL_PADCONF_WKUP,
+		wkup_padconf_array, ARRAY_SIZE(wkup_padconf_array));
+
+	/* gpio_wk7 is used for controlling TPS on 4460 */
+	if (omap4_revision() >= OMAP4460_ES1_0) {
+		writew(M3, OMAP44XX_CONTROL_PADCONF_WKUP + FREF_CLK4_REQ);
+		/* Enable GPIO-1 clocks before TPS initialization */
+		omap4_enable_gpio1_wup_clocks();
+	}
+}
diff --git a/arch/arm/boards/archosg9/mux.h b/arch/arm/boards/archosg9/mux.h
new file mode 100644
index 0000000..97297b6
--- /dev/null
+++ b/arch/arm/boards/archosg9/mux.h
@@ -0,0 +1,6 @@
+#ifndef _MUX_H
+#define _MUX_H
+
+void set_muxconf_regs(void);
+
+#endif /* _MUX_H */
diff --git a/arch/arm/configs/archosg9_defconfig b/arch/arm/configs/archosg9_defconfig
new file mode 100644
index 0000000..e598258
--- /dev/null
+++ b/arch/arm/configs/archosg9_defconfig
@@ -0,0 +1,70 @@
+CONFIG_MACH_ARCHOSG9=y
+CONFIG_ARCH_OMAP=y
+CONFIG_ARCH_OMAP4=y
+CONFIG_AEABI=y
+# CONFIG_MACH_DO_LOWLEVEL_INIT is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ARM_UNWIND=y
+# CONFIG_MMU is not set
+CONFIG_OMAP4_USBBOOT=y
+CONFIG_TEXT_BASE=0xa0000000
+CONFIG_MALLOC_BASE=0x90000000
+CONFIG_MALLOC_SIZE=0x10000000
+CONFIG_KALLSYMS=y
+CONFIG_PROMPT="barebox> "
+CONFIG_LONGHELP=y
+CONFIG_GLOB=y
+CONFIG_HUSH_FANCY_PROMPT=y
+CONFIG_CMDLINE_EDITING=y
+CONFIG_AUTO_COMPLETE=y
+# CONFIG_CONSOLE_ACTIVATE_FIRST is not set
+CONFIG_CONSOLE_ACTIVATE_ALL=y
+# CONFIG_TIMESTAMP is not set
+CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
+CONFIG_DEFAULT_ENVIRONMENT_PATH="defaultenv-2 arch/arm/boards/archosg9/env"
+CONFIG_CMD_EDIT=y
+CONFIG_CMD_SLEEP=y
+CONFIG_CMD_SAVEENV=y
+CONFIG_CMD_EXPORT=y
+CONFIG_CMD_PRINTENV=y
+CONFIG_CMD_READLINE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_ECHO_E=y
+CONFIG_CMD_LOADB=y
+CONFIG_CMD_IOMEM=y
+CONFIG_CMD_FLASH=y
+CONFIG_CMD_MD5SUM=y
+CONFIG_CMD_SHA1SUM=y
+CONFIG_CMD_SHA224SUM=y
+CONFIG_CMD_SHA256SUM=y
+CONFIG_CMD_BOOTM_SHOW_TYPE=y
+CONFIG_CMD_BOOTM_VERBOSE=y
+CONFIG_CMD_BOOTM_INITRD=y
+CONFIG_CMD_BOOTM_OFTREE=y
+CONFIG_CMD_BOOTM_OFTREE_UIMAGE=y
+CONFIG_CMD_BOOTM_AIMAGE=y
+CONFIG_CMD_RESET=y
+CONFIG_CMD_GO=y
+CONFIG_CMD_TIMEOUT=y
+CONFIG_CMD_PARTITION=y
+CONFIG_CMD_MAGICVAR=y
+CONFIG_CMD_MAGICVAR_HELP=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_UNCOMPRESS=y
+CONFIG_CMD_I2C=y
+CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y
+CONFIG_DRIVER_SERIAL_NS16550=y
+CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
+CONFIG_BAUDRATE=1000000
+# CONFIG_SPI is not set
+CONFIG_I2C=y
+CONFIG_I2C_OMAP=y
+CONFIG_I2C_TWLCORE=y
+CONFIG_I2C_TWL6030=y
+CONFIG_MCI=y
+CONFIG_MCI_STARTUP=y
+CONFIG_MCI_OMAP_HSMMC=y
+CONFIG_FS_FAT=y
+CONFIG_FS_FAT_WRITE=y
+CONFIG_FS_FAT_LFN=y
+CONFIG_FS_OMAP4_USBBOOT=y
diff --git a/arch/arm/configs/archosg9_xload_defconfig b/arch/arm/configs/archosg9_xload_defconfig
new file mode 100644
index 0000000..6c6782f
--- /dev/null
+++ b/arch/arm/configs/archosg9_xload_defconfig
@@ -0,0 +1,24 @@
+CONFIG_MACH_ARCHOSG9=y
+CONFIG_ARCH_OMAP=y
+CONFIG_ARCH_OMAP4=y
+# CONFIG_OMAP_GPMC is not set
+CONFIG_OMAP_BUILD_IFT=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0xC000
+CONFIG_AEABI=y
+CONFIG_OMAP4_USBBOOT=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_TEXT_BASE=0x40300000
+CONFIG_MEMORY_LAYOUT_FIXED=y
+CONFIG_STACK_BASE=0x8f000000
+CONFIG_MALLOC_BASE=0x84000000
+CONFIG_MALLOC_SIZE=0x2000000
+CONFIG_SHELL_NONE=y
+# CONFIG_ERRNO_MESSAGES is not set
+# CONFIG_TIMESTAMP is not set
+# CONFIG_CONSOLE_FULL is not set
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y
+# CONFIG_SPI is not set
+# CONFIG_FS_RAMFS is not set
+# CONFIG_FS_DEVFS is not set
+CONFIG_FS_OMAP4_USBBOOT=y
diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig
index b3dd6a4..da39530 100644
--- a/arch/arm/mach-omap/Kconfig
+++ b/arch/arm/mach-omap/Kconfig
@@ -92,6 +92,7 @@ config OMAP4_USBBOOT
 	  Please read oamp4_usb_booting.txt for more information.
 
 config BOARDINFO
+	default "Archos G9" if MACH_ARCHOSG9
 	default "Texas Instrument's SDP343x" if MACH_OMAP343xSDP
 	default "Texas Instrument's Beagle" if MACH_BEAGLE
 	default "Texas Instrument's OMAP3EVM" if MACH_OMAP3EVM
@@ -131,6 +132,14 @@ config MACH_PANDA
 	help
 	  Say Y here if you are using OMAP4 Panda board
 
+config MACH_ARCHOSG9
+	bool "Archos G9 tablets"
+	select HAVE_NOSHELL
+	select MACH_HAS_LOWLEVEL_INIT
+	depends on ARCH_OMAP4
+	help
+	  Say Y here if you are using OMAP4-based Archos G9 tablet
+
 config MACH_PCM049
 	bool "Phytec phyCORE pcm049"
 	select HAVE_NOSHELL
-- 
1.7.12.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 02/11] twl6030: add debug info
  2012-10-05 22:33 ` [PATCH 02/11] twl6030: add debug info vj
@ 2012-10-06  9:30   ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-06  9:30 UTC (permalink / raw)
  To: vj; +Cc: barebox

On 00:33 Sat 06 Oct     , vj wrote:
> 
> Signed-off-by: vj <vicencb@gmail.com>
> ---
>  drivers/mfd/twl6030.c | 20 ++++++++++++++++++++
>  include/mfd/twl6030.h |  8 ++++++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/drivers/mfd/twl6030.c b/drivers/mfd/twl6030.c
> index 01728fd..87ee232 100644
> --- a/drivers/mfd/twl6030.c
> +++ b/drivers/mfd/twl6030.c
> @@ -39,6 +39,26 @@ static int twl_probe(struct device_d *dev)
>  
>  	devfs_create(&(twl_dev->core.cdev));
>  
> +	if (IS_ENABLED(DEBUG)) {
CONFIG_DEBUG instead?


> +		u8 i, jtag_rev, eprom_rev;
> +		int r;
> +		u64 dieid;
add one empty line
> +		r = twl6030_reg_read(twl_dev, TWL6030_JTAG_JTAGVERNUM,
> +			&jtag_rev);
> +		r |= twl6030_reg_read(twl_dev, TWL6030_JTAG_EPROM_REV,
> +			&eprom_rev);
> +		for (i = 0; i < 8; i++)
> +			r |= twl6030_reg_read(twl_dev, TWL6030_DIEID_0+i,
> +				((u8 *)(&dieid))+i);
> +		if (r)
> +			dev_dbg(dev, "TWL6030 Error reading ID\n");
> +		else
> +			dev_dbg(dev, "TWL6030 JTAG REV: 0x%02X, "
> +				"EPROM REV: 0x%02X, "
> +				"DIE ID: 0x%016llX\n",
> +				(unsigned)jtag_rev, (unsigned)eprom_rev, dieid);
> +	}
> +
>  	return 0;
>  }
>  
> diff --git a/include/mfd/twl6030.h b/include/mfd/twl6030.h
> index f1278d4..bb4f773 100644
> --- a/include/mfd/twl6030.h
> +++ b/include/mfd/twl6030.h
> @@ -371,6 +371,14 @@ enum twl6030_reg {
>  	/* JTAG */
>  	TWL6030_JTAG_JTAGVERNUM = 0x0287,
>  	TWL6030_JTAG_EPROM_REV = 0x02DF,
> +	TWL6030_DIEID_0 = 0x02C0,
> +	TWL6030_DIEID_1 = 0x02C1,
> +	TWL6030_DIEID_2 = 0x02C2,
> +	TWL6030_DIEID_3 = 0x02C3,
> +	TWL6030_DIEID_4 = 0x02C4,
> +	TWL6030_DIEID_5 = 0x02C5,
> +	TWL6030_DIEID_6 = 0x02C6,
> +	TWL6030_DIEID_7 = 0x02C7,
>  	/* GPADC Trimming */
>  	TWL6030_GPADC_TRIM1 = 0x02CD,
>  	TWL6030_GPADC_TRIM2 = 0x02CE,
> -- 
> 1.7.12.2
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 01/11] regression: reset can not return
  2012-10-05 22:33 ` [PATCH 01/11] regression: reset can not return vj
@ 2012-10-07  9:42   ` Sascha Hauer
  0 siblings, 0 replies; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07  9:42 UTC (permalink / raw)
  To: vj; +Cc: barebox

On Sat, Oct 06, 2012 at 12:33:03AM +0200, vj wrote:
> 
> Signed-off-by: vj <vicencb@gmail.com>

Applied to master.

Thanks
 Sascha

> ---
>  arch/arm/boards/friendlyarm-tiny210/lowlevel.c | 2 +-
>  arch/arm/boards/panda/lowlevel.c               | 2 +-
>  arch/arm/boards/pcm049/lowlevel.c              | 2 +-
>  arch/arm/boards/phycard-a-xl2/lowlevel.c       | 2 +-
>  4 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/boards/friendlyarm-tiny210/lowlevel.c b/arch/arm/boards/friendlyarm-tiny210/lowlevel.c
> index 791918a..695f97d 100644
> --- a/arch/arm/boards/friendlyarm-tiny210/lowlevel.c
> +++ b/arch/arm/boards/friendlyarm-tiny210/lowlevel.c
> @@ -61,7 +61,7 @@ void __bare_init reset(void)
>  #endif
>  
>  	if (get_pc() < 0xD0000000) /* Are we running from iRAM? */
> -		return; /* No, we don't. */
> +		board_init_lowlevel_return(); /* No, we don't. */
>  
>  	s5p_init_dram_bank_ddr2(S5P_DMC0_BASE, 0x20E00323, 0, 0);
>  
> diff --git a/arch/arm/boards/panda/lowlevel.c b/arch/arm/boards/panda/lowlevel.c
> index 3a24148..33d06be 100644
> --- a/arch/arm/boards/panda/lowlevel.c
> +++ b/arch/arm/boards/panda/lowlevel.c
> @@ -81,7 +81,7 @@ void reset(void)
>  	common_reset();
>  
>  	if (get_pc() > 0x80000000)
> -		return;
> +		board_init_lowlevel_return();
>  
>  	r = 0x4030d000;
>  	__asm__ __volatile__("mov sp, %0" : : "r"(r));
> diff --git a/arch/arm/boards/pcm049/lowlevel.c b/arch/arm/boards/pcm049/lowlevel.c
> index 20e40c5..c3fc6c7 100644
> --- a/arch/arm/boards/pcm049/lowlevel.c
> +++ b/arch/arm/boards/pcm049/lowlevel.c
> @@ -91,7 +91,7 @@ void reset(void)
>  	common_reset();
>  
>  	if (get_pc() > 0x80000000)
> -		return;
> +		board_init_lowlevel_return();
>  
>  	r = 0x4030d000;
>  	__asm__ __volatile__("mov sp, %0" : : "r"(r));
> diff --git a/arch/arm/boards/phycard-a-xl2/lowlevel.c b/arch/arm/boards/phycard-a-xl2/lowlevel.c
> index d472347..24b4ab8 100644
> --- a/arch/arm/boards/phycard-a-xl2/lowlevel.c
> +++ b/arch/arm/boards/phycard-a-xl2/lowlevel.c
> @@ -91,7 +91,7 @@ void reset(void)
>  	common_reset();
>  
>  	if (get_pc() > 0x80000000)
> -		return;
> +		board_init_lowlevel_return();
>  
>  	r = 0x4030d000;
>  	__asm__ __volatile__("mov sp, %0" : : "r"(r));
> -- 
> 1.7.12.2
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 04/11] ARM: ensure irqs are disabled
  2012-10-05 22:33 ` [PATCH 04/11] ARM: ensure irqs are disabled vj
@ 2012-10-07  9:46   ` Sascha Hauer
  0 siblings, 0 replies; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07  9:46 UTC (permalink / raw)
  To: vj; +Cc: barebox

On Sat, Oct 06, 2012 at 12:33:06AM +0200, vj wrote:
> 
> Signed-off-by: vj <vicencb@gmail.com>
> ---
>  arch/arm/cpu/cpu.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/arch/arm/cpu/cpu.c b/arch/arm/cpu/cpu.c
> index 87ba877..45c3a90 100644
> --- a/arch/arm/cpu/cpu.c
> +++ b/arch/arm/cpu/cpu.c
> @@ -85,6 +85,12 @@ void arch_shutdown(void)
>  		: "r0", "r1", "r2", "r3", "r6", "r10", "r12", "lr", "cc", "memory"
>  	);
>  #endif
> +	/*
> +	 * barebox normally does not use interrupts, but some functionalities
> +	 * (eg. OMAP4_USBBOOT) require them enabled. So be sure interrupts are
> +	 * disabled before exiting.
> +	 */
> +	__asm__ __volatile__ ("cpsid i\n");

This cannot be applied since on ARMv5 we have to do something different,
see the disable_irq macro:

#if __LINUX_ARM_ARCH__ >= 6
	.macro	disable_irq
	cpsid	i
	.endm

	.macro	enable_irq
	cpsie	i
	.endm
#else
	.macro	disable_irq
	msr	cpsr_c, #PSR_I_BIT | SVC_MODE
	.endm

	.macro	enable_irq
	msr	cpsr_c, #SVC_MODE
	.endm
#endif


Note, for now it's ok to have this a compile time decision, but this
should become a runtime decision over time.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 05/11] omap: revert gpiolib
  2012-10-05 22:33 ` [PATCH 05/11] omap: revert gpiolib vj
@ 2012-10-07 10:11   ` Sascha Hauer
  2012-10-09  6:30     ` Teresa Gamez
  0 siblings, 1 reply; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07 10:11 UTC (permalink / raw)
  To: vj; +Cc: barebox

On Sat, Oct 06, 2012 at 12:33:07AM +0200, vj wrote:
> This patch reverts 29e4031b460d1c84c1a8fc276199d40680b354d4.
> This is not meant to revert the gpiolib, this is only a temporal
> workaround because it breaks support for ArchosG9 tablet.
> Please, can anybody check if using gpiolib works for other omap4460
> based boards?

Teresa, have you tested this on OMAP4?


I can't find anything obviously wrong int this patch.
>  
> -static int omap_gpio_probe(struct device_d *dev)
> -{
> -	struct omap_gpio_chip *omapgpio;
> +	gpio_set_value(gpio, value);
>  
> -	omapgpio = xzalloc(sizeof(*omapgpio));
> -	omapgpio->base = dev_request_mem_region(dev, 0);
> -	omapgpio->chip.ops = &omap_gpio_ops;
> -	omapgpio->chip.base = -1;

base should be calculated as dev->id * 32. Otherwise the gpio numbering
gets depended on the probe order.

> -	omapgpio->chip.ngpio = 32;
> -	omapgpio->chip.dev = dev;
> -	gpiochip_add(&omapgpio->chip);
> +	reg += OMAP_GPIO_OE;
>  
> -	dev_dbg(dev, "probed gpiochip%d with base %d\n",
> -				dev->id, omapgpio->chip.base);
> +	val = __raw_readl(reg);
> +	val &= ~(1 << get_gpio_index(gpio));
> +	__raw_writel(val, reg);
>  
>  	return 0;
>  }

[...]

>  
> -coredevice_initcall(omap3_gpio_init);
> diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c
> index 584d724..6562268 100644
> --- a/arch/arm/mach-omap/omap4_generic.c
> +++ b/arch/arm/mach-omap/omap4_generic.c
> @@ -574,22 +574,3 @@ const struct gpmc_config omap4_nand_cfg = {
>  	.base = 0x28000000,
>  	.size = GPMC_SIZE_16M,
>  };
> -
> -static int omap4_gpio_init(void)
> -{
> -	add_generic_device("omap-gpio", 0, NULL, 0x4a310100,
> -				0x1000, IORESOURCE_MEM, NULL);

It seems on OMAP4 the register addresses are at an additional 0x100
offset compared to OMAP3. This little trick here to compensate that
will lead to problems should we add devicetree support for omap. For
now it's ok, but the region size should be reduced to 0x0f00 so that
there's no risk that it overlaps with the next region.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 06/11] omap4: add support for booting an omap4 from usb.
  2012-10-05 22:33 ` [PATCH 06/11] omap4: add support for booting an omap4 from usb vj
@ 2012-10-07 10:23   ` Sascha Hauer
  0 siblings, 0 replies; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07 10:23 UTC (permalink / raw)
  To: vj; +Cc: barebox

On Sat, Oct 06, 2012 at 12:33:08AM +0200, vj wrote:
> 
> Signed-off-by: vj <vicencb@gmail.com>

[...]

>  
>  /*
>   *  The following several lines are taken from U-Boot to support
> @@ -457,6 +458,21 @@ static int watchdog_init(void)
>  }
>  late_initcall(watchdog_init);
>  
> +#ifdef CONFIG_OMAP4_USBBOOT
> +static int omap4_usbboot_init(void)
> +{
> +	omap4_usbboot_open();
> +	omap4_usbboot_puts("USB communications initialized\n");
> +	return 0;
> +}
> +core_initcall(omap4_usbboot_init);
> +#else

I remember a hunk in a previous patch which detects whether we actually
are booting from USB. We could protect the code above with a
if (booting_from_usb) instead of deciding it at compile time.


> +/*
> + * omap4 usbboot interfaces with the omap4 ROM to reuse the USB port
> + * used for booting.
> + * The ROM code uses interrupts for the transfers, so do not modify the
> + * interrupt vectors.
> + */
>  static int omap_vector_init(void)
>  {

same here.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 10/11] mach-types: add ID for Archos G9 tablet
  2012-10-05 22:33 ` [PATCH 10/11] mach-types: add ID for Archos G9 tablet vj
@ 2012-10-07 10:30   ` Sascha Hauer
  2012-10-07 12:07     ` vj
  0 siblings, 1 reply; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07 10:30 UTC (permalink / raw)
  To: vj; +Cc: barebox

On Sat, Oct 06, 2012 at 12:33:12AM +0200, vj wrote:
> 
> Signed-off-by: vj <vicencb@gmail.com>
> ---
>  arch/arm/tools/mach-types | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
> index 325513f..a21da3b 100644
> --- a/arch/arm/tools/mach-types
> +++ b/arch/arm/tools/mach-types
> @@ -4148,3 +4148,4 @@ msm8625_evt		MACH_MSM8625_EVT	MSM8625_EVT		4193
>  mx53_sellwood		MACH_MX53_SELLWOOD	MX53_SELLWOOD		4194
>  somiq_am35		MACH_SOMIQ_AM35		SOMIQ_AM35		4195
>  somiq_am37		MACH_SOMIQ_AM37		SOMIQ_AM37		4196
> +omap4_archosg9		MACH_OMAP4_ARCHOSG9	OMAP4_ARCHOSG9		5032

Please no manual updates to this file, they will be overwritten once the
next update from:

http://www.arm.linux.org.uk/developer/machines/download.php

comes in. I see that the Archos G9 does not have a machine id
registered. You can register one yourself at:

http://www.arm.linux.org.uk/developer/machines/

btw is 5032 the id Archos uses or did you think it up yourself?

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 00/11] archosg9: add support for tablet, third round
  2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
                   ` (10 preceding siblings ...)
  2012-10-05 22:33 ` [PATCH 11/11] Add support " vj
@ 2012-10-07 10:34 ` Sascha Hauer
  2012-10-07 12:12   ` vj
  11 siblings, 1 reply; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07 10:34 UTC (permalink / raw)
  To: vj; +Cc: barebox

Hi vj,

On Sat, Oct 06, 2012 at 12:33:02AM +0200, vj wrote:
> Hello,
>  here is the third round of patches including most of the
>  modifications suggested by your comments, which are greatly
>  appreciated.  one of the modifications not done is the move of the
>  usb-booting infrastructure into a driver. Jean, can you please add
>  more information about this? Thanks.
>  
>  scripts/checkpatch.pl returns two errors: "Macros with complex values
>  should be enclosed in parenthesis", but in this case parenthesis
>  can't be added, any suggestion?

Could you post the macros which give this error?

Overall apart from the little comments I made the series looks quite
good now. Thanks, nice work ;)

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 10/11] mach-types: add ID for Archos G9 tablet
  2012-10-07 10:30   ` Sascha Hauer
@ 2012-10-07 12:07     ` vj
  2012-10-07 12:16       ` Sascha Hauer
  0 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-07 12:07 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox


[-- Attachment #1.1: Type: text/plain, Size: 1714 bytes --]

On Sun, Oct 7, 2012 at 12:30 PM, Sascha Hauer <s.hauer@pengutronix.de>wrote:

> On Sat, Oct 06, 2012 at 12:33:12AM +0200, vj wrote:
> >
> > Signed-off-by: vj <vicencb@gmail.com>
> > ---
> >  arch/arm/tools/mach-types | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
> > index 325513f..a21da3b 100644
> > --- a/arch/arm/tools/mach-types
> > +++ b/arch/arm/tools/mach-types
> > @@ -4148,3 +4148,4 @@ msm8625_evt             MACH_MSM8625_EVT
>  MSM8625_EVT             4193
> >  mx53_sellwood                MACH_MX53_SELLWOOD      MX53_SELLWOOD
>       4194
> >  somiq_am35           MACH_SOMIQ_AM35         SOMIQ_AM35
>  4195
> >  somiq_am37           MACH_SOMIQ_AM37         SOMIQ_AM37
>  4196
> > +omap4_archosg9               MACH_OMAP4_ARCHOSG9     OMAP4_ARCHOSG9
>      5032
>
> Please no manual updates to this file, they will be overwritten once the
> next update from:
>
> http://www.arm.linux.org.uk/developer/machines/download.php
>
> comes in. I see that the Archos G9 does not have a machine id
> registered. You can register one yourself at:
>
> http://www.arm.linux.org.uk/developer/machines/
>
> btw is 5032 the id Archos uses or did you think it up yourself?
>
> Sascha
>
> --
> Pengutronix e.K.                           |                             |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
>

5032 is chosen by Archos in it's Android kernel:
http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/master/arch/arm/tools/mach-types

[-- Attachment #1.2: Type: text/html, Size: 2762 bytes --]

[-- Attachment #2: Type: text/plain, Size: 149 bytes --]

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 00/11] archosg9: add support for tablet, third round
  2012-10-07 10:34 ` [PATCH 00/11] archosg9: add support for tablet, third round Sascha Hauer
@ 2012-10-07 12:12   ` vj
  2012-10-07 12:23     ` Sascha Hauer
  0 siblings, 1 reply; 28+ messages in thread
From: vj @ 2012-10-07 12:12 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On Sun, Oct 7, 2012 at 12:34 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
>
> Hi vj,
>
> On Sat, Oct 06, 2012 at 12:33:02AM +0200, vj wrote:
> > Hello,
> >  here is the third round of patches including most of the
> >  modifications suggested by your comments, which are greatly
> >  appreciated.  one of the modifications not done is the move of the
> >  usb-booting infrastructure into a driver. Jean, can you please add
> >  more information about this? Thanks.
> >
> >  scripts/checkpatch.pl returns two errors: "Macros with complex values
> >  should be enclosed in parenthesis", but in this case parenthesis
> >  can't be added, any suggestion?
>
> Could you post the macros which give this error?
>
> Overall apart from the little comments I made the series looks quite
> good now. Thanks, nice work ;)
>
> Sascha
>
> --
> Pengutronix e.K.                           |                             |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |


The macros are:
#define TARGET_FORMAT 0x1B, BRIGHT, RED+30, BLACK+40
#define HOST_FORMAT   0x1B, RESET, WHITE+30, BLACK+40

which are used in this way:
#define FORMAT        "%c[%d;%d;%dm"
#define host_print(fmt, arg...)    printf(FORMAT fmt FORMAT"\n",
HOST_FORMAT, ##arg, TARGET_FORMAT)
printf(FORMAT, TARGET_FORMAT);

The reason is that scripts/omap4_usbboot has to print two types of
messages, the ones comming from the OMAP4 and the ones coming from the
PC. This is the way chosen to differentiate them.

Regards,
  Vicente.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 10/11] mach-types: add ID for Archos G9 tablet
  2012-10-07 12:07     ` vj
@ 2012-10-07 12:16       ` Sascha Hauer
  2012-10-07 12:26         ` vj
  2012-10-07 13:29         ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 2 replies; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07 12:16 UTC (permalink / raw)
  To: vj; +Cc: barebox

On Sun, Oct 07, 2012 at 02:07:28PM +0200, vj wrote:
> On Sun, Oct 7, 2012 at 12:30 PM, Sascha Hauer <s.hauer@pengutronix.de>wrote:
> 
> > Please no manual updates to this file, they will be overwritten once the
> > next update from:
> >
> > http://www.arm.linux.org.uk/developer/machines/download.php
> >
> > comes in. I see that the Archos G9 does not have a machine id
> > registered. You can register one yourself at:
> >
> > http://www.arm.linux.org.uk/developer/machines/
> >
> > btw is 5032 the id Archos uses or did you think it up yourself?
> >
> > Sascha
> >
> > --
> > Pengutronix e.K.                           |                             |
> > Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> > Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> >
> 
> 5032 is chosen by Archos in it's Android kernel:
> http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/master/arch/arm/tools/mach-types

Appearently the Archos guys can't read :(

In this case I suggest that you just hardcode this number in your board
file and add a big fat warning comment that you only did that to make
the Archos kernel bootable.
Another, maybe better solution would be to:

- register a proper id for the G9
- use it as default in barebox
- Add some template in the environment to overwrite it to make the
  Archos provided Kernel boot.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 00/11] archosg9: add support for tablet, third round
  2012-10-07 12:12   ` vj
@ 2012-10-07 12:23     ` Sascha Hauer
  0 siblings, 0 replies; 28+ messages in thread
From: Sascha Hauer @ 2012-10-07 12:23 UTC (permalink / raw)
  To: vj; +Cc: barebox

On Sun, Oct 07, 2012 at 02:12:26PM +0200, vj wrote:
> On Sun, Oct 7, 2012 at 12:34 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
> >
> > Hi vj,
> >
> > On Sat, Oct 06, 2012 at 12:33:02AM +0200, vj wrote:
> > > Hello,
> > >  here is the third round of patches including most of the
> > >  modifications suggested by your comments, which are greatly
> > >  appreciated.  one of the modifications not done is the move of the
> > >  usb-booting infrastructure into a driver. Jean, can you please add
> > >  more information about this? Thanks.
> > >
> > >  scripts/checkpatch.pl returns two errors: "Macros with complex values
> > >  should be enclosed in parenthesis", but in this case parenthesis
> > >  can't be added, any suggestion?
> >
> > Could you post the macros which give this error?
> >
> > Overall apart from the little comments I made the series looks quite
> > good now. Thanks, nice work ;)
> >
> > Sascha
> >
> > --
> > Pengutronix e.K.                           |                             |
> > Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> > Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> 
> The macros are:
> #define TARGET_FORMAT 0x1B, BRIGHT, RED+30, BLACK+40
> #define HOST_FORMAT   0x1B, RESET, WHITE+30, BLACK+40
> 
> which are used in this way:
> #define FORMAT        "%c[%d;%d;%dm"
> #define host_print(fmt, arg...)    printf(FORMAT fmt FORMAT"\n",
> HOST_FORMAT, ##arg, TARGET_FORMAT)
> printf(FORMAT, TARGET_FORMAT);
> 
> The reason is that scripts/omap4_usbboot has to print two types of
> messages, the ones comming from the OMAP4 and the ones coming from the
> PC. This is the way chosen to differentiate them.

Let's ignore the warnings. In the end they are just warnings. The 'use
checkpath' answer is just a simple way for reviewers to say that the
patch has coding style issues without having to go into details.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 10/11] mach-types: add ID for Archos G9 tablet
  2012-10-07 12:16       ` Sascha Hauer
@ 2012-10-07 12:26         ` vj
  2012-10-07 13:33           ` Jean-Christophe PLAGNIOL-VILLARD
  2012-10-07 13:29         ` Jean-Christophe PLAGNIOL-VILLARD
  1 sibling, 1 reply; 28+ messages in thread
From: vj @ 2012-10-07 12:26 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On Sun, Oct 7, 2012 at 2:16 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
> On Sun, Oct 07, 2012 at 02:07:28PM +0200, vj wrote:
>> On Sun, Oct 7, 2012 at 12:30 PM, Sascha Hauer <s.hauer@pengutronix.de>wrote:
>>
>> > Please no manual updates to this file, they will be overwritten once the
>> > next update from:
>> >
>> > http://www.arm.linux.org.uk/developer/machines/download.php
>> >
>> > comes in. I see that the Archos G9 does not have a machine id
>> > registered. You can register one yourself at:
>> >
>> > http://www.arm.linux.org.uk/developer/machines/
>> >
>> > btw is 5032 the id Archos uses or did you think it up yourself?
>> >
>> > Sascha
>> >
>> > --
>> > Pengutronix e.K.                           |                             |
>> > Industrial Linux Solutions                 | http://www.pengutronix.de/  |
>> > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
>> > Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
>> >
>>
>> 5032 is chosen by Archos in it's Android kernel:
>> http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/master/arch/arm/tools/mach-types
>
> Appearently the Archos guys can't read :(
>
> In this case I suggest that you just hardcode this number in your board
> file and add a big fat warning comment that you only did that to make
> the Archos kernel bootable.
> Another, maybe better solution would be to:
>
> - register a proper id for the G9
> - use it as default in barebox
> - Add some template in the environment to overwrite it to make the
>   Archos provided Kernel boot.
>
> Sascha
>
> --
> Pengutronix e.K.                           |                             |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Well, booting the factory provided kernel would be great and that
would be a reason to preserve the 5032.
But the fact is that's not possible for now. Archos has added some
tweaks to their bootloader and kernel so they write board specific
information in the boot sector and the bootloader passes it to the
kernel.
To be able to boot their kernel this "feature_tags" should be
implemented in barebox.
For more information see:
http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/master/arch/arm/include/asm/feature_list.h

Regards,
  Vicente.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 10/11] mach-types: add ID for Archos G9 tablet
  2012-10-07 12:16       ` Sascha Hauer
  2012-10-07 12:26         ` vj
@ 2012-10-07 13:29         ` Jean-Christophe PLAGNIOL-VILLARD
  1 sibling, 0 replies; 28+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-07 13:29 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox, vj

On 14:16 Sun 07 Oct     , Sascha Hauer wrote:
> On Sun, Oct 07, 2012 at 02:07:28PM +0200, vj wrote:
> > On Sun, Oct 7, 2012 at 12:30 PM, Sascha Hauer <s.hauer@pengutronix.de>wrote:
> > 
> > > Please no manual updates to this file, they will be overwritten once the
> > > next update from:
> > >
> > > http://www.arm.linux.org.uk/developer/machines/download.php
> > >
> > > comes in. I see that the Archos G9 does not have a machine id
> > > registered. You can register one yourself at:
> > >
> > > http://www.arm.linux.org.uk/developer/machines/
> > >
> > > btw is 5032 the id Archos uses or did you think it up yourself?
> > >
> > > Sascha
> > >
> > > --
> > > Pengutronix e.K.                           |                             |
> > > Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> > > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> > > Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> > >
> > 
> > 5032 is chosen by Archos in it's Android kernel:
> > http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/master/arch/arm/tools/mach-types
> 
> Appearently the Archos guys can't read :(
> 
> In this case I suggest that you just hardcode this number in your board
> file and add a big fat warning comment that you only did that to make
> the Archos kernel bootable.
> Another, maybe better solution would be to:
> 
> - register a proper id for the G9
> - use it as default in barebox
> - Add some template in the environment to overwrite it to make the
>   Archos provided Kernel boot.
in the past I use devio to add the 2 asm intruction to change the machine
before the zImage

with machine id 1509 05e5

(
 devio 'wl 0xe3a01c05,4' 'wl 0xe38110e5,4'
 cat zImage
) zImage.1509

Best Regards,
J.
> 
> Sascha
> 
> -- 
> Pengutronix e.K.                           |                             |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 10/11] mach-types: add ID for Archos G9 tablet
  2012-10-07 12:26         ` vj
@ 2012-10-07 13:33           ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-07 13:33 UTC (permalink / raw)
  To: vj; +Cc: barebox

On 14:26 Sun 07 Oct     , vj wrote:
> On Sun, Oct 7, 2012 at 2:16 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
> > On Sun, Oct 07, 2012 at 02:07:28PM +0200, vj wrote:
> >> On Sun, Oct 7, 2012 at 12:30 PM, Sascha Hauer <s.hauer@pengutronix.de>wrote:
> >>
> >> > Please no manual updates to this file, they will be overwritten once the
> >> > next update from:
> >> >
> >> > http://www.arm.linux.org.uk/developer/machines/download.php
> >> >
> >> > comes in. I see that the Archos G9 does not have a machine id
> >> > registered. You can register one yourself at:
> >> >
> >> > http://www.arm.linux.org.uk/developer/machines/
> >> >
> >> > btw is 5032 the id Archos uses or did you think it up yourself?
> >> >
> >> > Sascha
> >> >
> >> > --
> >> > Pengutronix e.K.                           |                             |
> >> > Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> >> > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> >> > Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> >> >
> >>
> >> 5032 is chosen by Archos in it's Android kernel:
> >> http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/master/arch/arm/tools/mach-types
> >
> > Appearently the Archos guys can't read :(
> >
> > In this case I suggest that you just hardcode this number in your board
> > file and add a big fat warning comment that you only did that to make
> > the Archos kernel bootable.
> > Another, maybe better solution would be to:
> >
> > - register a proper id for the G9
> > - use it as default in barebox
> > - Add some template in the environment to overwrite it to make the
> >   Archos provided Kernel boot.
> >
> > Sascha
> >
> > --
> > Pengutronix e.K.                           |                             |
> > Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> > Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> Well, booting the factory provided kernel would be great and that
> would be a reason to preserve the 5032.
> But the fact is that's not possible for now. Archos has added some
> tweaks to their bootloader and kernel so they write board specific
> information in the boot sector and the bootloader passes it to the
> kernel.
> To be able to boot their kernel this "feature_tags" should be
> implemented in barebox.
> For more information see:
> http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/master/arch/arm/include/asm/feature_list.h
an other example for shit stuff in bootloader

hopefully the DT will fix this

this "feature_tags" need to be used in a way that we do not touch the generic
code

Maybe via a custon bootm

Best Regards,
J.
> 
> Regards,
>   Vicente.
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 05/11] omap: revert gpiolib
  2012-10-07 10:11   ` Sascha Hauer
@ 2012-10-09  6:30     ` Teresa Gamez
  2012-10-09  6:54       ` Sascha Hauer
  0 siblings, 1 reply; 28+ messages in thread
From: Teresa Gamez @ 2012-10-09  6:30 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox, vj

Hello Sascha,

Am 07.10.2012 12:11, schrieb Sascha Hauer:
> On Sat, Oct 06, 2012 at 12:33:07AM +0200, vj wrote:
>> This patch reverts 29e4031b460d1c84c1a8fc276199d40680b354d4.
>> This is not meant to revert the gpiolib, this is only a temporal
>> workaround because it breaks support for ArchosG9 tablet.
>> Please, can anybody check if using gpiolib works for other omap4460
>> based boards?
> Teresa, have you tested this on OMAP4?

Yes, but I have only tested it with OMAP4430.
Now checking it with 4460, I see that it does not work here, too.
Problem is in the omap4_scale_vcores function called by *_init_lowlevel().
It already uses the gpio_direction_output() function on an OMAP4460 and 
crashes there. Should I do the gpio setup
just "manually" here?
But I wonder anyway why It is crashing at all. I would expect the 
condition if (!chip) to be true in the function gpio_direction_output 
(drivers/gpio/gpio.c) and to return at this point. But it doesn't.

>
>
> I can't find anything obviously wrong int this patch.
>>   
>> -static int omap_gpio_probe(struct device_d *dev)
>> -{
>> -	struct omap_gpio_chip *omapgpio;
>> +	gpio_set_value(gpio, value);
>>   
>> -	omapgpio = xzalloc(sizeof(*omapgpio));
>> -	omapgpio->base = dev_request_mem_region(dev, 0);
>> -	omapgpio->chip.ops = &omap_gpio_ops;
>> -	omapgpio->chip.base = -1;
> base should be calculated as dev->id * 32. Otherwise the gpio numbering
> gets depended on the probe order.

I will fix this.

>
>> -	omapgpio->chip.ngpio = 32;
>> -	omapgpio->chip.dev = dev;
>> -	gpiochip_add(&omapgpio->chip);
>> +	reg += OMAP_GPIO_OE;
>>   
>> -	dev_dbg(dev, "probed gpiochip%d with base %d\n",
>> -				dev->id, omapgpio->chip.base);
>> +	val = __raw_readl(reg);
>> +	val &= ~(1 << get_gpio_index(gpio));
>> +	__raw_writel(val, reg);
>>   
>>   	return 0;
>>   }
> [...]
>
>>   
>> -coredevice_initcall(omap3_gpio_init);
>> diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c
>> index 584d724..6562268 100644
>> --- a/arch/arm/mach-omap/omap4_generic.c
>> +++ b/arch/arm/mach-omap/omap4_generic.c
>> @@ -574,22 +574,3 @@ const struct gpmc_config omap4_nand_cfg = {
>>   	.base = 0x28000000,
>>   	.size = GPMC_SIZE_16M,
>>   };
>> -
>> -static int omap4_gpio_init(void)
>> -{
>> -	add_generic_device("omap-gpio", 0, NULL, 0x4a310100,
>> -				0x1000, IORESOURCE_MEM, NULL);
> It seems on OMAP4 the register addresses are at an additional 0x100
> offset compared to OMAP3. This little trick here to compensate that
> will lead to problems should we add devicetree support for omap. For
> now it's ok, but the region size should be reduced to 0x0f00 so that
> there's no risk that it overlaps with the next region.

What about moving the gpio offsets to the *-silicon.h? So we may have
different values for OMAP3 and OMAP4.

Teresa

>
> Sascha
>


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 05/11] omap: revert gpiolib
  2012-10-09  6:30     ` Teresa Gamez
@ 2012-10-09  6:54       ` Sascha Hauer
  0 siblings, 0 replies; 28+ messages in thread
From: Sascha Hauer @ 2012-10-09  6:54 UTC (permalink / raw)
  To: Teresa Gamez; +Cc: barebox, vj

Hi Teresa,

On Tue, Oct 09, 2012 at 08:30:45AM +0200, Teresa Gamez wrote:
> Hello Sascha,
> 
> Am 07.10.2012 12:11, schrieb Sascha Hauer:
> >On Sat, Oct 06, 2012 at 12:33:07AM +0200, vj wrote:
> >>This patch reverts 29e4031b460d1c84c1a8fc276199d40680b354d4.
> >>This is not meant to revert the gpiolib, this is only a temporal
> >>workaround because it breaks support for ArchosG9 tablet.
> >>Please, can anybody check if using gpiolib works for other omap4460
> >>based boards?
> >Teresa, have you tested this on OMAP4?
> 
> Yes, but I have only tested it with OMAP4430.
> Now checking it with 4460, I see that it does not work here, too.
> Problem is in the omap4_scale_vcores function called by *_init_lowlevel().
> It already uses the gpio_direction_output() function on an OMAP4460
> and crashes there. Should I do the gpio setup
> just "manually" here?

I think you have to. Otherwise we would pull the whole gpio/driver stack
into the pbl should we want to build omap as a compressed image.

> But I wonder anyway why It is crashing at all. I would expect the
> condition if (!chip) to be true in the function
> gpio_direction_output (drivers/gpio/gpio.c) and to return at this
> point. But it doesn't.

The bss is not yet cleared which means that all unitialized variables
contain random garbage.

> >>-	struct omap_gpio_chip *omapgpio;
> >>+	gpio_set_value(gpio, value);
> >>-	omapgpio = xzalloc(sizeof(*omapgpio));
> >>-	omapgpio->base = dev_request_mem_region(dev, 0);
> >>-	omapgpio->chip.ops = &omap_gpio_ops;
> >>-	omapgpio->chip.base = -1;
> >base should be calculated as dev->id * 32. Otherwise the gpio numbering
> >gets depended on the probe order.
> 
> I will fix this.

Thanks.

> >>-				0x1000, IORESOURCE_MEM, NULL);
> >It seems on OMAP4 the register addresses are at an additional 0x100
> >offset compared to OMAP3. This little trick here to compensate that
> >will lead to problems should we add devicetree support for omap. For
> >now it's ok, but the region size should be reduced to 0x0f00 so that
> >there's no risk that it overlaps with the next region.
> 
> What about moving the gpio offsets to the *-silicon.h? So we may have
> different values for OMAP3 and OMAP4.

No. That would mean conflicting defines in the header files. These are a
pain I'm currently trying to get rid of at i.MX. The correct way would
be to use the device_id mechanism to abstract between SoC differences.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2012-10-09  6:54 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-05 22:33 [PATCH 00/11] archosg9: add support for tablet, third round vj
2012-10-05 22:33 ` [PATCH 01/11] regression: reset can not return vj
2012-10-07  9:42   ` Sascha Hauer
2012-10-05 22:33 ` [PATCH 02/11] twl6030: add debug info vj
2012-10-06  9:30   ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-05 22:33 ` [PATCH 03/11] omap4: add/rename definitions to match datasheet vj
2012-10-05 22:33 ` [PATCH 04/11] ARM: ensure irqs are disabled vj
2012-10-07  9:46   ` Sascha Hauer
2012-10-05 22:33 ` [PATCH 05/11] omap: revert gpiolib vj
2012-10-07 10:11   ` Sascha Hauer
2012-10-09  6:30     ` Teresa Gamez
2012-10-09  6:54       ` Sascha Hauer
2012-10-05 22:33 ` [PATCH 06/11] omap4: add support for booting an omap4 from usb vj
2012-10-07 10:23   ` Sascha Hauer
2012-10-05 22:33 ` [PATCH 07/11] omap4: add serial communications over usb boot vj
2012-10-05 22:33 ` [PATCH 08/11] omap4: add filesystem support " vj
2012-10-05 22:33 ` [PATCH 09/11] omap4: add support for loading second stage from usb vj
2012-10-05 22:33 ` [PATCH 10/11] mach-types: add ID for Archos G9 tablet vj
2012-10-07 10:30   ` Sascha Hauer
2012-10-07 12:07     ` vj
2012-10-07 12:16       ` Sascha Hauer
2012-10-07 12:26         ` vj
2012-10-07 13:33           ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-07 13:29         ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-05 22:33 ` [PATCH 11/11] Add support " vj
2012-10-07 10:34 ` [PATCH 00/11] archosg9: add support for tablet, third round Sascha Hauer
2012-10-07 12:12   ` vj
2012-10-07 12:23     ` Sascha Hauer

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