Re: [PATCH 5/5] tty: serial: Add 8250-core based omap driver

2014-07-18 Thread Tony Lindgren
* Sebastian Andrzej Siewior bige...@linutronix.de [140717 03:09]:
 On 07/17/2014 10:12 AM, Tony Lindgren wrote:
  Hmm it could be that it works for a while because the clocks are on
  from the bootloader and pm_runtime calls won't do anything. This
  could happen if the interconnect data based on the ti,hwmods entry
  is not getting matched to the new driver. This gets initialized when
  the device entry gets created in omap_device_build_from_dt().
  
  Or maybe something now affects the clock aliases? It seems that we
  are still missing the clocks entries in the .dtsi files, see the
  mappings with $ git grep uart drivers/clk/ti/
 
 I've been looking for something completely different while I noticed
 this:
 
 in drivers/tty/serial/omap-serial.c
 | static struct platform_driver serial_omap_driver = {
 | .driver = {
 | .name   = DRIVER_NAME,
 | },
 | };
 |
 
 and DRIVER_NAME should come from include/linux/platform_data/serial-omap.h
 Looking further, I've found arch/arm/mach-omap2/serial.c:
 | void __init omap_serial_init_port(struct omap_board_data *bdata,
 | struct omap_uart_port_info *info)
 | {
 | char *name
 …
 | name = DRIVER_NAME;
 …
 | pdev = omap_device_build(name, uart-num, oh, pdata, pdata_size);
 …
 |
 
 Would this explain it?

That would explain it for legacy booting, but not for device tree
based booting. I can try to debug it further on Monday.

Regards,

Tony
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: AM3517 fails to boot 3.16-rc5 device tree kernel

2014-07-18 Thread Tony Lindgren
* mwelling mwell...@emacinc.com [140717 16:42]:
 I am in the process of porting a device tree compatible version of the
 linux kernel to a AM3517 based device.
 
 First I tried 3.10.x and the device tree port appeared to be incomplete.
 Neither the LCD or Ethernet were supported.
 
 Next I tried 3.14.x and the Ethernet driver appeared to work but still
 no LCD support.
 
 Lastly I tried 3.16-rc5 and found that the kernel hangs in early boot
 without any messages from the serial COM.

For device tree based booting on omap3 I would user v.16-rc4 or later.
There have been multiple issues fixed over past year and PM is working
finally at least for 36xx/37xx. And we do have the DSS panels finally
working too.
 
 I was using the omap2plus_defconfig and the am3517-evm.dtb from each
 kernel build. Is there any reason why the kernel would start hanging
 with the newest release?

No reason that I can think of. AFAIK 3517 has been booting in the test
farms just fine?

Can you please enable debug_ll + earlyprintk and pass also earlyprintk
in the kernel cmdline?
 
 Are there any versions where the LCD output works?

Starting with v3.16-rc1 you should get the LCD working for panel-dpi
based devices. Most of them actually are actually ls037v3dw01, so
see omap3-panel-sharp-ls037v7dw01.dtsi and omap3-evm-common.dtsi
variants if you have similar setup.
 
 Looking at the 3.16-rc5 test results just posted it is supposed to be working
 but I have not been able to replicate this.
 
 Any suggestions would be greatly appreciated.

Hmm maybe double check your're booting device tree based kernel
instead of legacy machine ID based kernel? The legacy booting should
still work just fine and no changes has been made to it, but it will
get removed shortly.

Regards,

Tony
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [v3 PATCH 1/6] drivers: reset: TI: SoC reset controller support.

2014-07-18 Thread Lothar Waßmann
Hi,

Dan Murphy wrote:
 The TI SoC reset controller support utilizes the
 reset controller framework to give device drivers or
 function drivers a common set of APIs to call to reset
 a module.
 
 The reset-ti is a common interface to the reset framework.
  The register data is retrieved during initialization
  of the reset driver through the reset-ti-data
 file.  The array of data is associated with the compatible from the
 respective DT entry.
 
 Once the data is available then this is derefenced within the common
 interface.
 
 The device driver has the ability to assert, deassert or perform a
 complete reset.
 
 This code was derived from previous work by Rajendra Nayak and Afzal Mohammed.
 The code was changed to adopt to the reset core and abstract away the SoC 
 information.
 
 Signed-off-by: Dan Murphy dmur...@ti.com
 ---
 
 v3 - Resolved comments from v2.  To many to call out here - 
 https://patchwork.kernel.org/patch/4116941/
 
  drivers/reset/Kconfig|9 ++
  drivers/reset/Makefile   |1 +
  drivers/reset/reset-ti.c |  373 
 ++
  3 files changed, 383 insertions(+)
  create mode 100644 drivers/reset/reset-ti.c
 
 diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
 index 0615f50..31a5a79 100644
 --- a/drivers/reset/Kconfig
 +++ b/drivers/reset/Kconfig
 @@ -12,4 +12,13 @@ menuconfig RESET_CONTROLLER
  
 If unsure, say no.
  
 +config RESET_TI
 + depends on RESET_CONTROLLER  ARCH_OMAP || COMPILE_TEST
 + bool TI reset controller
 + help
 +   Reset controller support for TI SoC's
 +
 +   Reset controller found in TI's AM series of SoC's like
 +   AM335x and AM43x and OMAP SoC's like OMAP5 and DRA7
 +
  source drivers/reset/sti/Kconfig
 diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
 index 60fed3d..a5986b9 100644
 --- a/drivers/reset/Makefile
 +++ b/drivers/reset/Makefile
 @@ -1,4 +1,5 @@
  obj-$(CONFIG_RESET_CONTROLLER) += core.o
  obj-$(CONFIG_ARCH_SOCFPGA) += reset-socfpga.o
  obj-$(CONFIG_ARCH_SUNXI) += reset-sunxi.o
 +obj-$(CONFIG_RESET_TI) += reset-ti.o
  obj-$(CONFIG_ARCH_STI) += sti/
 diff --git a/drivers/reset/reset-ti.c b/drivers/reset/reset-ti.c
 new file mode 100644
 index 000..e9d4039
 --- /dev/null
 +++ b/drivers/reset/reset-ti.c
 @@ -0,0 +1,373 @@
 +/*
 + * reset-ti.c - PRCM reset driver for TI SoC's
 + *
 + * Copyright (C) 2014 Texas Instruments Incorporated -  http://www.ti.com
 + *
 + * Author: Dan Murphy dmur...@ti.com
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 + */
 +
 +#include linux/delay.h
 +#include linux/device.h
 +#include linux/err.h
 +#include linux/io.h
 +#include linux/kernel.h
 +#include linux/module.h
 +#include linux/of_address.h
 +#include linux/of_device.h
 +#include linux/platform_device.h
 +#include linux/reset.h
 +#include linux/reset-controller.h
 +#include linux/slab.h
 +#include linux/spinlock.h
 +
 +#define DRIVER_NAME prcm_reset_ti
 +#define MAX_RESET_SIGNALS 255
 +
 +/**
 + * struct ti_reset_reg_data - Structure of the reset register information
 + *   for a particular SoC.
 + * @rstctrl_offs: This is the reset control offset value from
 + *   from the parent reset node.
 + * @rstst_offs: This is the reset status offset value from
 + *   from the parent reset node.
 + * @rstctrl_bit: This is the reset control bit for the module.
 + * @rstst_bit: This is the reset status bit for the module.
 + *
 + * Longer description of this structure.
 + */
 +struct ti_reset_reg_data {
 + phandle handle;
 + u32 rstctrl_offs;
 + u32 rstst_offs;
 + u32 rstctrl_bit;
 + u32 rstst_bit;
 +};
 +
 +/**
 + * struct ti_reset_data - Structure that contains the reset register data
 + *   as well as the total number of resets for a particular SoC.
 + * @ti_data: Pointer to this structure to be dereferenced
 + * @reg_data:Pointer to the register data structure.
 + * @rcdev:   Reset controller device instance
 + * @dev: Pointer to the devive structure
 + * @ti_reg_data: Array of register data.  Only reset signal with valid
 + *   phandles will be stored in this array.
 + * @reg_base:Parent register base address
 + * @lock:Spinlock for accessing the registers
 + * @nr_resets:   Total number of resets for the SoC in the reset array.
 + *
 + * This structure contains a pointer to the register data and the modules
 + * register base.  The number of resets and reset controller device data is
 + * stored within this structure.
 + *
 + */
 +struct ti_reset_data {
 + struct ti_reset_data *ti_data;
 + struct ti_reset_reg_data *reg_data;
 + struct reset_controller_dev rcdev;
 + struct device *dev;
 + struct ti_reset_reg_data ti_reg_data[MAX_RESET_SIGNALS];
 + void __iomem 

Re: [PATCH 1/5] arm: dts: omap3-gta04: Add missing nodes to fully describe gta04 board

2014-07-18 Thread Joachim Eastwood
On 16 July 2014 09:17, Dr. H. Nikolaus Schaller h...@goldelico.com wrote:
 Am 15.07.2014 um 14:45 schrieb Joachim Eastwood:

 Hi Marek,

 You seem to add some DT nodes for hw that doesn't have drivers in
 mainline. I think you should leave those out until the driver itself
 is upstream and the bindings for it is documented.
 is there some policy for only having nodes for existing drivers in DT files?

I am not sure about that, better ask the DT maintainers.

There is however a policy that says new bindings should be reviewed
and documented.

 If I understand the device tree concept correctly, it should not describe 
 drivers
 (and hence nothing about the state of them being mainlined), but it should 
 statically
 describe the given hardware in a way that kernel and drivers can read it (or 
 ignore).
 And even other kernels can use it (because they run on the same hardware).

 So unless there is an important reason not to have currently unused nodes
 in the DT source/binary (loading time is IMHO neglectable), I would ask that 
 we
 can keep with the complete DT instead of splitting it up artificially and 
 getting back
 to the same status (because the hardware does not change over time).

The problem with the nodes is that the bindings may change when the
drivers/bindings are submitted to mainline and reviewed. I don't see
why you want nodes for hardware that right now obviously don't work
with mainline and if the bindings change it will churn and confusion
for the users.

One example is the omap-pwm driver. It should really have #pwm-cells
set to 3 and not 2. This driver is not upstream yet, because it
requires some files to move out of arch/arm. See
http://marc.info/?l=linux-omapm=139903867022779w=2 for the suggested
new bindings.

The normal case for new DT boards is to first submit nodes for the
hardware that is working in mainline and then update the DT with more
nodes for hardware as bindings are decided upon and drivers go
upstream.

Please don't top post.

regards,
Joachim Eastwood

 On 14 July 2014 22:20, Marek Belisko ma...@goldelico.com wrote:
 Signed-off-by: Marek Belisko ma...@goldelico.com
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 ---
 arch/arm/boot/dts/omap3-gta04.dts | 443 
 +++---
 1 file changed, 412 insertions(+), 31 deletions(-)

 diff --git a/arch/arm/boot/dts/omap3-gta04.dts 
 b/arch/arm/boot/dts/omap3-gta04.dts
 index 215513b..bd6a71d 100644
 --- a/arch/arm/boot/dts/omap3-gta04.dts
 +++ b/arch/arm/boot/dts/omap3-gta04.dts
 @@ -12,7 +12,7 @@
 #include omap36xx.dtsi

 / {
 -   model = OMAP3 GTA04;
 +   model = Goldelico GTA04;
compatible = ti,omap3-gta04, ti,omap36xx, ti,omap3;

cpus {
 @@ -26,6 +26,11 @@
reg = 0x8000 0x2000; /* 512 MB */
};

 +   aliases {
 +   display0 = lcd;
 +   display1 = tv0;
 +   };
 +
gpio-keys {
compatible = gpio-keys;

 @@ -37,15 +42,78 @@
};
};

 +   gpio-keys-wwan-wakeup {
 +   compatible = gpio-keys;
 +
 +   wwan_wakeup_button: wwan-wakeup-button {
 +   label = 3G_WOE;
 +   linux,code = 240;
 +   gpios = gpio1 10 GPIO_ACTIVE_HIGH;
 +   gpio-key,wakeup;
 +   };
 +   };
 +
 +   hsusb2_phy: hsusb2_phy {
 +   compatible = usb-nop-xceiv;
 +   reset-gpios = gpio6 14 GPIO_ACTIVE_LOW; /* gpio_174 = 
 reset for USB3322 */
 +   };
 +
 +   antenna-detect {
 +   compatible = linux,extcon-gpio;
 +   label = gps_antenna;
 +   gpios = gpio5 16 0; /* gpio_144 */
 +   debounce-delay-ms = 10;
 +   irq-flags = IRQ_TYPE_EDGE_BOTH;
 +   state-on = external;
 +   state-off = internal;
 +   };
 +
sound {
compatible = ti,omap-twl4030;
ti,model = gta04;

ti,mcbsp = mcbsp2;
ti,codec = twl_audio;
 +
 +   ti,mcbsp-voice = mcbsp4;
 +   };
 +
 +   sound_card {
 +   compatible = goldelico,gta04-audio;
 +   gta04,cpu-dai = mcbsp2;
 +   };
 +
 +   gtm601_codec: voice_codec {
 +   compatible = gtm601-codec;
 +   };
 +
 +   sound_voice {
 +   compatible = goldelico,gta04-voice;
 +   gta04,cpu-dai = mcbsp4;
 +   gta04,codec = gtm601_codec;
};

 -   spi_lcd {
 +   w2cbw003_codec: headset_codec {
 +   compatible = w2cbw003-codec;
 +   };
 +
 +   sound_headset {
 +   compatible = goldelico,gta04-headset;
 +   gta04,cpu-dai = mcbsp3;
 +   gta04,codec = w2cbw003_codec;
 +   };
 +
 +   sound_fm {
 +   compatible = goldelico,gta04-fm;
 +   gta04,cpu-dai = mcbsp1;
 +   gta04,codec = 

[PATCH 1/3] omap_hsmmc: reuse mmc/slot-gpio for write protect detection

2014-07-18 Thread Andreas Fenkart
Signed-off-by: Andreas Fenkart afenk...@gmail.com

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 2f944d7..1c10e6c 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -36,6 +36,7 @@
 #include linux/mmc/host.h
 #include linux/mmc/core.h
 #include linux/mmc/mmc.h
+#include linux/mmc/slot-gpio.h
 #include linux/io.h
 #include linux/irq.h
 #include linux/gpio.h
@@ -239,15 +240,6 @@ static int omap_hsmmc_card_detect(struct device *dev, int 
slot)
return !gpio_get_value_cansleep(mmc-slots[0].switch_pin);
 }
 
-static int omap_hsmmc_get_wp(struct device *dev, int slot)
-{
-   struct omap_hsmmc_host *host = dev_get_drvdata(dev);
-   struct omap_mmc_platform_data *mmc = host-pdata;
-
-   /* NOTE: assumes write protect signal is active-high */
-   return gpio_get_value_cansleep(mmc-slots[0].gpio_wp);
-}
-
 static int omap_hsmmc_get_cover_state(struct device *dev, int slot)
 {
struct omap_hsmmc_host *host = dev_get_drvdata(dev);
@@ -449,7 +441,8 @@ static inline int omap_hsmmc_have_reg(void)
 
 #endif
 
-static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
+static int omap_hsmmc_gpio_init(struct mmc_host *mmc,
+   struct omap_mmc_platform_data *pdata)
 {
int ret;
 
@@ -471,31 +464,31 @@ static int omap_hsmmc_gpio_init(struct 
omap_mmc_platform_data *pdata)
pdata-slots[0].switch_pin = -EINVAL;
 
if (gpio_is_valid(pdata-slots[0].gpio_wp)) {
-   pdata-slots[0].get_ro = omap_hsmmc_get_wp;
-   ret = gpio_request(pdata-slots[0].gpio_wp, mmc_wp);
-   if (ret)
-   goto err_free_cd;
-   ret = gpio_direction_input(pdata-slots[0].gpio_wp);
-   if (ret)
-   goto err_free_wp;
-   } else
-   pdata-slots[0].gpio_wp = -EINVAL;
+   /* copy  paste from from mmc_of_parse */
+   ret = mmc_gpio_request_ro(mmc, pdata-slots[0].gpio_wp);
+   if (ret  0) {
+   dev_err(pdata-dev,
+   Failed to request WP GPIO: %d!\n, ret);
+   goto err;
+   } else {
+   dev_info(pdata-dev, Got WP GPIO #%d.\n,
+pdata-slots[0].gpio_wp);
+   }
+   }
 
return 0;
 
-err_free_wp:
-   gpio_free(pdata-slots[0].gpio_wp);
-err_free_cd:
+err:
if (gpio_is_valid(pdata-slots[0].switch_pin))
 err_free_sp:
gpio_free(pdata-slots[0].switch_pin);
return ret;
 }
 
-static void omap_hsmmc_gpio_free(struct omap_mmc_platform_data *pdata)
+static void omap_hsmmc_gpio_free(struct mmc_host *mmc,
+struct omap_mmc_platform_data *pdata)
 {
-   if (gpio_is_valid(pdata-slots[0].gpio_wp))
-   gpio_free(pdata-slots[0].gpio_wp);
+   mmc_gpio_free_ro(mmc);
if (gpio_is_valid(pdata-slots[0].switch_pin))
gpio_free(pdata-slots[0].switch_pin);
 }
@@ -1673,15 +1666,6 @@ static int omap_hsmmc_get_cd(struct mmc_host *mmc)
return mmc_slot(host).card_detect(host-dev, host-slot_id);
 }
 
-static int omap_hsmmc_get_ro(struct mmc_host *mmc)
-{
-   struct omap_hsmmc_host *host = mmc_priv(mmc);
-
-   if (!mmc_slot(host).get_ro)
-   return -ENOSYS;
-   return mmc_slot(host).get_ro(host-dev, 0);
-}
-
 static void omap_hsmmc_init_card(struct mmc_host *mmc, struct mmc_card *card)
 {
struct omap_hsmmc_host *host = mmc_priv(mmc);
@@ -1837,7 +1821,7 @@ static const struct mmc_host_ops omap_hsmmc_ops = {
.request = omap_hsmmc_request,
.set_ios = omap_hsmmc_set_ios,
.get_cd = omap_hsmmc_get_cd,
-   .get_ro = omap_hsmmc_get_ro,
+   .get_ro = mmc_gpio_get_ro,
.init_card = omap_hsmmc_init_card,
.enable_sdio_irq = omap_hsmmc_enable_sdio_irq,
 };
@@ -2063,16 +2047,15 @@ static int omap_hsmmc_probe(struct platform_device 
*pdev)
if (IS_ERR(base))
return PTR_ERR(base);
 
-   ret = omap_hsmmc_gpio_init(pdata);
-   if (ret)
-   goto err;
-
mmc = mmc_alloc_host(sizeof(struct omap_hsmmc_host), pdev-dev);
if (!mmc) {
-   ret = -ENOMEM;
-   goto err_alloc;
+   return -ENOMEM;
}
 
+   ret = omap_hsmmc_gpio_init(mmc, pdata);
+   if (ret)
+   goto err;
+
host= mmc_priv(mmc);
host-mmc   = mmc;
host-pdata = pdata;
@@ -2302,10 +2285,9 @@ err_irq:
if (host-dbclk)
clk_disable_unprepare(host-dbclk);
 err1:
-   mmc_free_host(mmc);
-err_alloc:
-   omap_hsmmc_gpio_free(pdata);
+   omap_hsmmc_gpio_free(mmc, pdata);
 err:
+   mmc_free_host(mmc);
return ret;
 }
 
@@ -2330,7 +2312,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
if 

[PATCH 2/3] omap_hsmmc: separate card_detect/cover detect logic

2014-07-18 Thread Andreas Fenkart
assuming cover is the door like thing on cameras that needs to be closed
after replacing sd cards. card detect is a gpio connected to sdio slot.
in a follow up patch card_detect will be replaced by generic mmc/slot-gpio
a git bisect patch

Signed-off-by: Andreas Fenkart afenk...@gmail.com

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 1c10e6c..1b9f279 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -447,19 +447,32 @@ static int omap_hsmmc_gpio_init(struct mmc_host *mmc,
int ret;
 
if (gpio_is_valid(pdata-slots[0].switch_pin)) {
-   if (pdata-slots[0].cover)
+   if (pdata-slots[0].cover) {
pdata-slots[0].get_cover_state =
omap_hsmmc_get_cover_state;
-   else
+   pdata-slots[0].cover_detect_irq =
+   gpio_to_irq(pdata-slots[0].switch_pin);
+
+   ret = gpio_request(pdata-slots[0].switch_pin,
+  mmc_cd);
+   if (ret)
+   return ret;
+   ret = gpio_direction_input(pdata-slots[0].switch_pin);
+   if (ret)
+   goto err_free_sp;
+   } else {
pdata-slots[0].card_detect = omap_hsmmc_card_detect;
-   pdata-slots[0].card_detect_irq =
+   pdata-slots[0].card_detect_irq =
gpio_to_irq(pdata-slots[0].switch_pin);
-   ret = gpio_request(pdata-slots[0].switch_pin, mmc_cd);
-   if (ret)
-   return ret;
-   ret = gpio_direction_input(pdata-slots[0].switch_pin);
-   if (ret)
-   goto err_free_sp;
+
+   ret = gpio_request(pdata-slots[0].switch_pin,
+  mmc_cd);
+   if (ret)
+   return ret;
+   ret = gpio_direction_input(pdata-slots[0].switch_pin);
+   if (ret)
+   goto err_free_sp;
+   }
} else
pdata-slots[0].switch_pin = -EINVAL;
 
@@ -1282,19 +1295,18 @@ static irqreturn_t omap_hsmmc_detect(int irq, void 
*dev_id)
struct omap_mmc_slot_data *slot = mmc_slot(host);
int carddetect;
 
-   sysfs_notify(host-mmc-class_dev.kobj, NULL, cover_switch);
-
-   if (slot-card_detect)
+   if (slot-card_detect) {
carddetect = slot-card_detect(host-dev, host-slot_id);
-   else {
+   if (carddetect)
+   mmc_detect_change(host-mmc, (HZ * 200) / 1000);
+   else
+   mmc_detect_change(host-mmc, (HZ * 50) / 1000);
+   } else {
+   sysfs_notify(host-mmc-class_dev.kobj, NULL, cover_switch);
omap_hsmmc_protect_card(host);
-   carddetect = -ENOSYS;
+   mmc_detect_change(host-mmc, (HZ * 200) / 1000);
}
 
-   if (carddetect)
-   mmc_detect_change(host-mmc, (HZ * 200) / 1000);
-   else
-   mmc_detect_change(host-mmc, (HZ * 50) / 1000);
return IRQ_HANDLED;
 }
 
diff --git a/include/linux/platform_data/mmc-omap.h 
b/include/linux/platform_data/mmc-omap.h
index 7fe0c14..d113005 100644
--- a/include/linux/platform_data/mmc-omap.h
+++ b/include/linux/platform_data/mmc-omap.h
@@ -136,6 +136,7 @@ struct omap_mmc_platform_data {
 *   0 - closed
 *   1 - open
 */
+   int cover_detect_irq;
int (*get_cover_state)(struct device *dev, int slot);
 
const char *name;
-- 
2.0.0

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 0/3] omap_hsmmc: reuse mmc/slot-gpio functions

2014-07-18 Thread Andreas Fenkart
Hi Balaji,

I'm trying to reuse mmc_of_parse for parsing standard mmc features: 
- cd-gpios / wp-gpios
- bus-width 
- max-frequency
- keep-power-in-suspend
- enable-sdio-wakeup
- ti,non-removable, evtl.

Currently these are open-coded in of_get_hsmmc_pdata. I tried
removing them all from of_get_hsmmc_pdata and call mmc_of_parse
at the end of the probe function:

@@ -2241,8 +2264,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
omap_hsmmc_protect_card(host);
+   mmc_of_parse(host-mmc);
mmc_add_host(mmc);

This should work transparently for most features except,
cd-gpios/wp-gpios. Pls can you have a look at the followup
patches? I tried an intermediate step mapping card detect /
read-only detect onto mmc/slot-gpio that are used by
mmc_of_parse. I don't have card detect/read-only detect pins, :-(

Do we still need cover_detect functionality or could it be merged
with card detect?

Another issue is 'ti,non-removable' which could be mappend to
'non-removable' if 'no_regulator_off_init' could be handled in a
different way.

if (of_find_property(np, ti,non-removable, NULL)) {  
pdata-slots[0].nonremovable = true; 
pdata-slots[0].no_regulator_off_init = true;  
}   

thanks,
Andreas

Andreas Fenkart (3):
  omap_hsmmc: reuse mmc/slot-gpio for write protect detection
  omap_hsmmc: separate card_detect/cover detect logic
  omap_hsmmc: reuse mmc/slot-gpio for card detect instead of open-coded
version

 drivers/mmc/host/omap_hsmmc.c  | 172 ++---
 include/linux/platform_data/mmc-omap.h |   6 +-
 2 files changed, 73 insertions(+), 105 deletions(-)

-- 
2.0.0

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 3/3] omap_hsmmc: reuse mmc/slot-gpio for card detect instead of open-coded version

2014-07-18 Thread Andreas Fenkart
Signed-off-by: Andreas Fenkart afenk...@gmail.com

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 1b9f279..25aafa6 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -231,15 +231,6 @@ struct omap_mmc_of_data {
 
 static void omap_hsmmc_start_dma_transfer(struct omap_hsmmc_host *host);
 
-static int omap_hsmmc_card_detect(struct device *dev, int slot)
-{
-   struct omap_hsmmc_host *host = dev_get_drvdata(dev);
-   struct omap_mmc_platform_data *mmc = host-pdata;
-
-   /* NOTE: assumes card detect signal is active-low */
-   return !gpio_get_value_cansleep(mmc-slots[0].switch_pin);
-}
-
 static int omap_hsmmc_get_cover_state(struct device *dev, int slot)
 {
struct omap_hsmmc_host *host = dev_get_drvdata(dev);
@@ -256,7 +247,7 @@ static int omap_hsmmc_suspend_cdirq(struct device *dev, int 
slot)
struct omap_hsmmc_host *host = dev_get_drvdata(dev);
struct omap_mmc_platform_data *mmc = host-pdata;
 
-   disable_irq(mmc-slots[0].card_detect_irq);
+   disable_irq(mmc-slots[0].cover_detect_irq);
return 0;
 }
 
@@ -265,7 +256,7 @@ static int omap_hsmmc_resume_cdirq(struct device *dev, int 
slot)
struct omap_hsmmc_host *host = dev_get_drvdata(dev);
struct omap_mmc_platform_data *mmc = host-pdata;
 
-   enable_irq(mmc-slots[0].card_detect_irq);
+   enable_irq(mmc-slots[0].cover_detect_irq);
return 0;
 }
 
@@ -458,23 +449,26 @@ static int omap_hsmmc_gpio_init(struct mmc_host *mmc,
if (ret)
return ret;
ret = gpio_direction_input(pdata-slots[0].switch_pin);
-   if (ret)
-   goto err_free_sp;
+   if (ret) {
+   gpio_free(pdata-slots[0].switch_pin);
+   return ret;
+   }
} else {
-   pdata-slots[0].card_detect = omap_hsmmc_card_detect;
-   pdata-slots[0].card_detect_irq =
-   gpio_to_irq(pdata-slots[0].switch_pin);
-
-   ret = gpio_request(pdata-slots[0].switch_pin,
-  mmc_cd);
-   if (ret)
+   /* copy  paste from from mmc_of_parse */
+   ret = mmc_gpio_request_cd(mmc,
+ pdata-slots[0].switch_pin,
+ 0);
+   if (ret  0) {
+   dev_err(pdata-dev,
+   Failed to request CD GPIO #%d: %d!\n,
+   pdata-slots[0].switch_pin, ret);
return ret;
-   ret = gpio_direction_input(pdata-slots[0].switch_pin);
-   if (ret)
-   goto err_free_sp;
+   } else {
+   dev_info(pdata-dev, Got CD GPIO #%d.\n,
+   pdata-slots[0].switch_pin);
+   }
}
-   } else
-   pdata-slots[0].switch_pin = -EINVAL;
+   }
 
if (gpio_is_valid(pdata-slots[0].gpio_wp)) {
/* copy  paste from from mmc_of_parse */
@@ -492,8 +486,9 @@ static int omap_hsmmc_gpio_init(struct mmc_host *mmc,
return 0;
 
 err:
-   if (gpio_is_valid(pdata-slots[0].switch_pin))
-err_free_sp:
+   mmc_gpio_free_cd(mmc);
+   if (gpio_is_valid(pdata-slots[0].switch_pin) 
+   (pdata-slots[0].cover))
gpio_free(pdata-slots[0].switch_pin);
return ret;
 }
@@ -501,8 +496,11 @@ err_free_sp:
 static void omap_hsmmc_gpio_free(struct mmc_host *mmc,
 struct omap_mmc_platform_data *pdata)
 {
+   mmc_gpio_free_cd(mmc);
mmc_gpio_free_ro(mmc);
-   if (gpio_is_valid(pdata-slots[0].switch_pin))
+
+   if (gpio_is_valid(pdata-slots[0].switch_pin) 
+   (pdata-slots[0].cover))
gpio_free(pdata-slots[0].switch_pin);
 }
 
@@ -1289,24 +1287,13 @@ static void omap_hsmmc_protect_card(struct 
omap_hsmmc_host *host)
 /*
  * irq handler to notify the core about card insertion/removal
  */
-static irqreturn_t omap_hsmmc_detect(int irq, void *dev_id)
+static irqreturn_t omap_hsmmc_cover_detect(int irq, void *dev_id)
 {
struct omap_hsmmc_host *host = dev_id;
-   struct omap_mmc_slot_data *slot = mmc_slot(host);
-   int carddetect;
-
-   if (slot-card_detect) {
-   carddetect = slot-card_detect(host-dev, host-slot_id);
-   if (carddetect)
-   mmc_detect_change(host-mmc, (HZ * 200) / 1000);
-   else
-   mmc_detect_change(host-mmc, (HZ * 50) / 1000);
-   } else {
-

Re: [PATCH 4/5] tty: serial: 8250 core: add runtime pm

2014-07-18 Thread Sebastian Andrzej Siewior
On 07/17/2014 06:18 PM, Felipe Balbi wrote:

 No, this is okay. If you look, it checks for up-ier  
 UART_IER_THRI. On the second invocation it will see that this
 bit is already set and therefore won't call get_sync() for the
 second time. That bit is removed in the _stop_tx() path.
 
 oh, right. But that's actually unnecessary. Calling
 pm_runtime_get() multiple times will just increment the usage
 counter multiple times, which means you can call __stop_tx()
 multiple times too and everything gets balanced, right ?

No. start_tx() will be called multiple times but only the first
invocation invoke pm_runtime_get(). Now I noticed that I forgot to
remove pm_runtime_put_autosuspend() at the bottom of it. But you get
the idea right?
pm_get() on the while the UART_IER_THRI is not yet set. pm_put() once
the fifo is completely empty.

 Do you have other ideas? It doesn't look like this is exported at
 all. If we call _stop_tx() right away, then we have 64 bytes in
 the TX fifo in the worst case. They should be gone soon but the
 HW-flow control may delay it (in theory for a long time)).
 
 this can be problematic, specially for OMAP which can go into OFF
 while idle. Whatever is in the FIFO would get lost. It seems like
 omap-serial solved this within transmit_chars().

No, it didn't.

 See how transmit_chars() is called from within IRQ handler with
 clocks enabled then it conditionally calls serial_omap_stop_tx()
 which will pm_runtime_get_sync() - do_the_harlem_shake() - 
 pm_runtime_put_autosuspend(). That leaves one unbalanced 
 pm_runtime_get() which is balanced when we're exitting the IRQ
 handler.

omap-serial and the 8250 do the following on tx path:
- start_tx()
  - sets UART_IER_THRI. This will generate an interrupt once the FIFO
 is empty.
- interrupt, notices the empty fifo, invokes serial8250_start_tx()/
  transmit_chars().
  Both have a while loop that fills the FIFO. This loop is left once
  the tty-buffer is empty (uart_circ_empty() is true) or the FIFO full.

Lets say you filled 64 bytes into the FIFO and then left because your
FIFO is full and tty-buffer is empty. That means you will invoke
serial_omap_stop_tx() and remove UART_IER_THRI bit.
This is okay because you are not interested in further FIFO empty
interrupts because you don't have any TX-bytes to be sent. However,
once you leave the transmit_chars() you leave serial_omap_irq() which
does the last pm_put(). That means you have data in the TX FIFO that is
about to be sent and the device is in auto-suspend.
This is fine as long as the timeout is greater then the time required
for the data be sent (plus assuming HW-float control does not stall it
for too long) so nobody notices a thing.

For that reason I added the hack / #if0 block in the 8250 driver. To
ensure we do not disable the TX-FIFO-empty interrupt even if there is
nothing to send. Instead we enter serial8250_tx_chars() once again with
empty FIFO and empty tty-buffer and will invoke _stop_tx() which also
finally does the pm_put().
That is the plan. The problem I have is how to figure out that the
device is using auto-suspend. If I don't then I would have to remove
the #if0 block and that would mean for everybody an extra interrupt
(which I wanted to avoid).

 This seems work fine and dandy without DMA, but for DMA work, I
 think we need to make sure this IP stays powered until we get DMA
 completion callback. But that's future, I guess.

Yes, probably. That means one get at dma start, one put at dma complete
callback. And I assume we get that callbacks once the DMA transfer is
complete, not when the FIFO is empty :) So lets leave it to the future
for now…

Sebastian
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/5] arm: dts: omap3-gta04: Add missing nodes to fully describe gta04 board

2014-07-18 Thread Javier Martinez Canillas
Hello Marek and Dr. H. Nikolaus,

On Fri, Jul 18, 2014 at 8:55 AM, Joachim Eastwood manab...@gmail.com wrote:
 On 16 July 2014 09:17, Dr. H. Nikolaus Schaller h...@goldelico.com wrote:
 Am 15.07.2014 um 14:45 schrieb Joachim Eastwood:

 Hi Marek,

 You seem to add some DT nodes for hw that doesn't have drivers in
 mainline. I think you should leave those out until the driver itself
 is upstream and the bindings for it is documented.
 is there some policy for only having nodes for existing drivers in DT files?


I strongly agree with Joachim on this regard.

 If I understand the device tree concept correctly, it should not describe 
 drivers
 (and hence nothing about the state of them being mainlined), but it should 
 statically
 describe the given hardware in a way that kernel and drivers can read it (or 
 ignore).
 And even other kernels can use it (because they run on the same hardware).


Yes, it should describe hardware but that description should be
previously agreed and properly documented as was mentioned before.

 So unless there is an important reason not to have currently unused nodes
 in the DT source/binary (loading time is IMHO neglectable), I would ask that 
 we
 can keep with the complete DT instead of splitting it up artificially and 
 getting back
 to the same status (because the hardware does not change over time).


I understand your motivation since it will allow you to not have to
maintain a patch-set for your downstream DTS changes but I would like
to ask you the opposite question. What's the benefit for the kernel
community to keep in a mainline DTS a bunch of device nodes with DT
bindings that have not been neither discussed nor documented?

Developers doing a board bring-up usually use the DTS in mainline as a
reference for their boards and having non-documented/agreed DT binding
on the upstream DTS will only bring confusion and frustration to them
IMHO.

We already have some issues with Device Trees (bindings that broke
backward compatibility, drivers implementing custom DT binding instead
of using standard ones, bindings that don't really reflect the actual
H/W, etc), please don't make this even more complicated to developers.

Thanks a lot and best regards,
Javier
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 0/3] iommu: Remove OMAP IOVMM driver

2014-07-18 Thread Laurent Pinchart
Hello,

The OMAP3 ISP driver was the only user of the OMAP IOVMM API. Now that is has
been ported to the DMA API, remove the unused virtual memory manager.

The removal is split in three patches to ease upstream merge. The first patch
removes the omap-iovmm driver, the second patch removes setting of now unused
platform data fields from arch code, and the last patch cleans up the platform
data structure.

I'd like to get at least the first patch merged in v3.17. To avoid splitting
the series across three kernel versions, it would be nice to also merge at
least the second patch for v3.17. If there's no risk of conflict everything
could be merged in one go through the ARM SoC tree. Otherwise a stable branch
with patch 1/3 will be needed to base the arch change on.

Joerg, Tony, how would you like to proceed ?

Changes compared to v1:

- Fix OMAP_IOMMU_DEBUG dependency on OMAP_IOMMU
- Remove omap_iommu da_start and da_end fields
- Added patches 2/3 and 3/3

Laurent Pinchart (3):
  iommu/omap: Remove virtual memory manager
  ARM: omap: Don't set iommu pdata da_start and da_end fields
  iommu/omap: Remove platform data da_start and da_end fields

 arch/arm/mach-omap2/omap-iommu.c   |   2 -
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |   4 -
 arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   4 -
 drivers/iommu/Kconfig  |  10 +-
 drivers/iommu/Makefile |   1 -
 drivers/iommu/omap-iommu-debug.c   | 114 -
 drivers/iommu/omap-iommu.c |  13 -
 drivers/iommu/omap-iommu.h |   8 +-
 drivers/iommu/omap-iovmm.c | 791 -
 include/linux/omap-iommu.h |  37 +-
 include/linux/platform_data/iommu-omap.h   |   6 -
 11 files changed, 8 insertions(+), 982 deletions(-)
 delete mode 100644 drivers/iommu/omap-iovmm.c

-- 
Regards,

Laurent Pinchart

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 2/3] ARM: omap: Don't set iommu pdata da_start and da_end fields

2014-07-18 Thread Laurent Pinchart
The fields are not used by the driver and will be removed from platform
data. Don't set them.

Signed-off-by: Laurent Pinchart laurent.pinch...@ideasonboard.com
---
 arch/arm/mach-omap2/omap-iommu.c   | 2 --
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 4 
 arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 4 
 3 files changed, 10 deletions(-)

diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c
index f1fab56..4068350 100644
--- a/arch/arm/mach-omap2/omap-iommu.c
+++ b/arch/arm/mach-omap2/omap-iommu.c
@@ -34,8 +34,6 @@ static int __init omap_iommu_dev_init(struct omap_hwmod *oh, 
void *unused)
 
pdata-name = oh-name;
pdata-nr_tlb_entries = a-nr_tlb_entries;
-   pdata-da_start = a-da_start;
-   pdata-da_end = a-da_end;
 
if (oh-rst_lines_cnt == 1) {
pdata-reset_name = oh-rst_lines-name;
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c 
b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 1cd0cfd..e9516b4 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -2986,8 +2986,6 @@ static struct omap_hwmod_class omap3xxx_mmu_hwmod_class = 
{
 /* mmu isp */
 
 static struct omap_mmu_dev_attr mmu_isp_dev_attr = {
-   .da_start   = 0x0,
-   .da_end = 0xf000,
.nr_tlb_entries = 8,
 };
 
@@ -3026,8 +3024,6 @@ static struct omap_hwmod omap3xxx_mmu_isp_hwmod = {
 /* mmu iva */
 
 static struct omap_mmu_dev_attr mmu_iva_dev_attr = {
-   .da_start   = 0x1100,
-   .da_end = 0xf000,
.nr_tlb_entries = 32,
 };
 
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c 
b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 41e54f7..b4acc0a 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -2084,8 +2084,6 @@ static struct omap_hwmod_class omap44xx_mmu_hwmod_class = 
{
 /* mmu ipu */
 
 static struct omap_mmu_dev_attr mmu_ipu_dev_attr = {
-   .da_start   = 0x0,
-   .da_end = 0xf000,
.nr_tlb_entries = 32,
 };
 
@@ -2133,8 +2131,6 @@ static struct omap_hwmod omap44xx_mmu_ipu_hwmod = {
 /* mmu dsp */
 
 static struct omap_mmu_dev_attr mmu_dsp_dev_attr = {
-   .da_start   = 0x0,
-   .da_end = 0xf000,
.nr_tlb_entries = 32,
 };
 
-- 
1.8.5.5

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 3/3] iommu/omap: Remove platform data da_start and da_end fields

2014-07-18 Thread Laurent Pinchart
The fields were used by the now gone omap-iovmm driver. They're not used
anymore, remove them.

Signed-off-by: Laurent Pinchart laurent.pinch...@ideasonboard.com
---
 include/linux/platform_data/iommu-omap.h | 6 --
 1 file changed, 6 deletions(-)

diff --git a/include/linux/platform_data/iommu-omap.h 
b/include/linux/platform_data/iommu-omap.h
index 5b429c4..54a0a95 100644
--- a/include/linux/platform_data/iommu-omap.h
+++ b/include/linux/platform_data/iommu-omap.h
@@ -31,14 +31,10 @@ struct omap_iommu_arch_data {
 
 /**
  * struct omap_mmu_dev_attr - OMAP mmu device attributes for omap_hwmod
- * @da_start:  device address where the va space starts.
- * @da_end:device address where the va space ends.
  * @nr_tlb_entries:number of entries supported by the translation
  * look-aside buffer (TLB).
  */
 struct omap_mmu_dev_attr {
-   u32 da_start;
-   u32 da_end;
int nr_tlb_entries;
 };
 
@@ -46,8 +42,6 @@ struct iommu_platform_data {
const char *name;
const char *reset_name;
int nr_tlb_entries;
-   u32 da_start;
-   u32 da_end;
 
int (*assert_reset)(struct platform_device *pdev, const char *name);
int (*deassert_reset)(struct platform_device *pdev, const char *name);
-- 
1.8.5.5

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 1/3] iommu/omap: Remove virtual memory manager

2014-07-18 Thread Laurent Pinchart
The OMAP3 ISP driver was the only user of the OMAP IOVMM API. Now that
is has been ported to the DMA API, remove the unused virtual memory
manager.

Signed-off-by: Laurent Pinchart laurent.pinch...@ideasonboard.com
---
 drivers/iommu/Kconfig|  10 +-
 drivers/iommu/Makefile   |   1 -
 drivers/iommu/omap-iommu-debug.c | 114 --
 drivers/iommu/omap-iommu.c   |  13 -
 drivers/iommu/omap-iommu.h   |   8 +-
 drivers/iommu/omap-iovmm.c   | 791 ---
 include/linux/omap-iommu.h   |  37 +-
 7 files changed, 8 insertions(+), 966 deletions(-)
 delete mode 100644 drivers/iommu/omap-iovmm.c

diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
index d260605..154e5a8 100644
--- a/drivers/iommu/Kconfig
+++ b/drivers/iommu/Kconfig
@@ -143,16 +143,12 @@ config OMAP_IOMMU
depends on ARCH_OMAP2PLUS
select IOMMU_API
 
-config OMAP_IOVMM
-   tristate OMAP IO Virtual Memory Manager Support
-   depends on OMAP_IOMMU
-
 config OMAP_IOMMU_DEBUG
-   tristate Export OMAP IOMMU/IOVMM internals in DebugFS
-   depends on OMAP_IOVMM  DEBUG_FS
+   tristate Export OMAP IOMMU internals in DebugFS
+   depends on OMAP_IOMMU  DEBUG_FS
help
  Select this to see extensive information about
- the internal state of OMAP IOMMU/IOVMM in debugfs.
+ the internal state of OMAP IOMMU in debugfs.
 
  Say N unless you know you need this.
 
diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile
index 8893bad..6a4a00e 100644
--- a/drivers/iommu/Makefile
+++ b/drivers/iommu/Makefile
@@ -11,7 +11,6 @@ obj-$(CONFIG_IPMMU_VMSA) += ipmmu-vmsa.o
 obj-$(CONFIG_IRQ_REMAP) += intel_irq_remapping.o irq_remapping.o
 obj-$(CONFIG_OMAP_IOMMU) += omap-iommu.o
 obj-$(CONFIG_OMAP_IOMMU) += omap-iommu2.o
-obj-$(CONFIG_OMAP_IOVMM) += omap-iovmm.o
 obj-$(CONFIG_OMAP_IOMMU_DEBUG) += omap-iommu-debug.o
 obj-$(CONFIG_TEGRA_IOMMU_GART) += tegra-gart.o
 obj-$(CONFIG_TEGRA_IOMMU_SMMU) += tegra-smmu.o
diff --git a/drivers/iommu/omap-iommu-debug.c b/drivers/iommu/omap-iommu-debug.c
index 80fffba..531658d 100644
--- a/drivers/iommu/omap-iommu-debug.c
+++ b/drivers/iommu/omap-iommu-debug.c
@@ -213,116 +213,6 @@ static ssize_t debug_read_pagetable(struct file *file, 
char __user *userbuf,
return bytes;
 }
 
-static ssize_t debug_read_mmap(struct file *file, char __user *userbuf,
-  size_t count, loff_t *ppos)
-{
-   struct device *dev = file-private_data;
-   struct omap_iommu *obj = dev_to_omap_iommu(dev);
-   char *p, *buf;
-   struct iovm_struct *tmp;
-   int uninitialized_var(i);
-   ssize_t bytes;
-
-   buf = (char *)__get_free_page(GFP_KERNEL);
-   if (!buf)
-   return -ENOMEM;
-   p = buf;
-
-   p += sprintf(p, %-3s %-8s %-8s %6s %8s\n,
-No, start, end, size, flags);
-   p += sprintf(p, -\n);
-
-   mutex_lock(iommu_debug_lock);
-
-   list_for_each_entry(tmp, obj-mmap, list) {
-   size_t len;
-   const char *str = %3d %08x-%08x %6x %8x\n;
-   const int maxcol = 39;
-
-   len = tmp-da_end - tmp-da_start;
-   p += snprintf(p, maxcol, str,
- i, tmp-da_start, tmp-da_end, len, tmp-flags);
-
-   if (PAGE_SIZE - (p - buf)  maxcol)
-   break;
-   i++;
-   }
-
-   bytes = simple_read_from_buffer(userbuf, count, ppos, buf, p - buf);
-
-   mutex_unlock(iommu_debug_lock);
-   free_page((unsigned long)buf);
-
-   return bytes;
-}
-
-static ssize_t debug_read_mem(struct file *file, char __user *userbuf,
- size_t count, loff_t *ppos)
-{
-   struct device *dev = file-private_data;
-   char *p, *buf;
-   struct iovm_struct *area;
-   ssize_t bytes;
-
-   count = min_t(ssize_t, count, PAGE_SIZE);
-
-   buf = (char *)__get_free_page(GFP_KERNEL);
-   if (!buf)
-   return -ENOMEM;
-   p = buf;
-
-   mutex_lock(iommu_debug_lock);
-
-   area = omap_find_iovm_area(dev, (u32)ppos);
-   if (!area) {
-   bytes = -EINVAL;
-   goto err_out;
-   }
-   memcpy(p, area-va, count);
-   p += count;
-
-   bytes = simple_read_from_buffer(userbuf, count, ppos, buf, p - buf);
-err_out:
-   mutex_unlock(iommu_debug_lock);
-   free_page((unsigned long)buf);
-
-   return bytes;
-}
-
-static ssize_t debug_write_mem(struct file *file, const char __user *userbuf,
-  size_t count, loff_t *ppos)
-{
-   struct device *dev = file-private_data;
-   struct iovm_struct *area;
-   char *p, *buf;
-
-   count = min_t(size_t, count, PAGE_SIZE);
-
-   buf = (char *)__get_free_page(GFP_KERNEL);
-   if (!buf)
-   return -ENOMEM;
-   p = buf;
-
-   

Re: [PATCH] iommu/omap: Remove virtual memory manager

2014-07-18 Thread Laurent Pinchart
Hi Suman,

Thank you for the review.

On Thursday 17 July 2014 10:53:03 Suman Anna wrote:
 On 07/17/2014 06:09 AM, Laurent Pinchart wrote:
  The OMAP3 ISP driver was the only user of the OMAP IOVMM API. Now that
  is has been ported to the DMA API, remove the unused virtual memory
  manager.
  
  Signed-off-by: Laurent Pinchart laurent.pinch...@ideasonboard.com
  ---
  
  Joerg, could you please pick this patch up for v3.17 if possible ?
 
 Need one minor change as below, otherwise patch is good.
 
   drivers/iommu/Kconfig|  10 +-
   drivers/iommu/Makefile   |   1 -
   drivers/iommu/omap-iommu-debug.c | 114 --
   drivers/iommu/omap-iommu.c   |   2 -
   drivers/iommu/omap-iommu.h   |   6 +-
   drivers/iommu/omap-iovmm.c   | 791 --
   include/linux/omap-iommu.h   |  37 +-
   7 files changed, 8 insertions(+), 953 deletions(-)
   delete mode 100644 drivers/iommu/omap-iovmm.c
  
  diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
  index d260605..a1f0fad 100644
  --- a/drivers/iommu/Kconfig
  +++ b/drivers/iommu/Kconfig
  @@ -143,16 +143,12 @@ config OMAP_IOMMU
  depends on ARCH_OMAP2PLUS
  select IOMMU_API
  
  -config OMAP_IOVMM
  -   tristate OMAP IO Virtual Memory Manager Support
  -   depends on OMAP_IOMMU
  -
   config OMAP_IOMMU_DEBUG
  -   tristate Export OMAP IOMMU/IOVMM internals in DebugFS
  -   depends on OMAP_IOVMM  DEBUG_FS
  +   tristate Export OMAP IOMMU internals in DebugFS
  +   depends on DEBUG_FS
 
 This module is relevant only when OMAP_IOMMU is enabled, so this should
 be depends on OMAP_IOMMU  DEBUG_FS. The dependency is inherent before
 through OMAP_IOVMM. Otherwise, this module can be built by itself and
 results in some build errors.

Oops, my bad. I'll fix that in v2.

  help
Select this to see extensive information about
  - the internal state of OMAP IOMMU/IOVMM in debugfs.
  + the internal state of OMAP IOMMU in debugfs.
  
Say N unless you know you need this.

[snip]

  diff --git a/drivers/iommu/omap-iommu.h b/drivers/iommu/omap-iommu.h
  index ea920c3..36a85f3 100644
  --- a/drivers/iommu/omap-iommu.h
  +++ b/drivers/iommu/omap-iommu.h
  @@ -46,9 +46,6 @@ struct omap_iommu {
  
  int nr_tlb_entries;
  
  -   struct list_headmmap;
  -   struct mutexmmap_lock; /* protect mmap */
  -
  void *ctx; /* iommu context: registres saved area */
  u32 da_start;
  u32 da_end;
 
 With the removal of omap-iovmm, the da_start and da_end can also be
 removed. No need to block this patch for that, it can be done in a
 separate patch.

I'll remove the fields from struct omap_iommu in v2. I'll also remove them 
from the platform data, but I'll need to do so in a separate patch, as arch/ 
code needs to be touched as well.

-- 
Regards,

Laurent Pinchart
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: AM3517 fails to boot 3.16-rc5 device tree kernel

2014-07-18 Thread Michael Welling
On Fri, Jul 18, 2014 at 1:38 AM, Tony Lindgren t...@atomide.com wrote:
 * mwelling mwell...@emacinc.com [140717 16:42]:
 I am in the process of porting a device tree compatible version of the
 linux kernel to a AM3517 based device.

 First I tried 3.10.x and the device tree port appeared to be incomplete.
 Neither the LCD or Ethernet were supported.

 Next I tried 3.14.x and the Ethernet driver appeared to work but still
 no LCD support.

 Lastly I tried 3.16-rc5 and found that the kernel hangs in early boot
 without any messages from the serial COM.

 For device tree based booting on omap3 I would user v.16-rc4 or later.
 There have been multiple issues fixed over past year and PM is working
 finally at least for 36xx/37xx. And we do have the DSS panels finally
 working too.

 I was using the omap2plus_defconfig and the am3517-evm.dtb from each
 kernel build. Is there any reason why the kernel would start hanging
 with the newest release?

 No reason that I can think of. AFAIK 3517 has been booting in the test
 farms just fine?

 Can you please enable debug_ll + earlyprintk and pass also earlyprintk
 in the kernel cmdline?
I will try this.

 Are there any versions where the LCD output works?

 Starting with v3.16-rc1 you should get the LCD working for panel-dpi
 based devices. Most of them actually are actually ls037v3dw01, so
 see omap3-panel-sharp-ls037v7dw01.dtsi and omap3-evm-common.dtsi
 variants if you have similar setup.

 Looking at the 3.16-rc5 test results just posted it is supposed to be working
 but I have not been able to replicate this.

 Any suggestions would be greatly appreciated.

 Hmm maybe double check your're booting device tree based kernel
 instead of legacy machine ID based kernel? The legacy booting should
 still work just fine and no changes has been made to it, but it will
 get removed shortly.
I downloaded the version from the test results and it did boot.
These are combining the uImage and dtb. How do you accomplish this?

 Regards,

 Tony
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH CFT v2] arm: omap1: Migrate debug_ll macros to use 8250.S

2014-07-18 Thread Daniel Thompson
The omap1's debug-macro.S is similar to the generic 8250 code. Compared to
the 8520 code the omap1 macro automatically determines what UART to use
based on breadcrumbs left by the bootloader and automatically copes with
the eccentric register layout on OMAP7XX.

This patch drops both these features and relies instead on the generic
8250 macros:

1. Dropping support for the bootloader breadcrumbs is identical to the
   way the migration was handled for OMAP2 (see 808b7e07464d...).

2. Support for OMAP7XX still exists but it must be configured by hand
   (DEBUG_OMAP7XXUART1/2/3) rather than handled at runtime.

Signed-off-by: Daniel Thompson daniel.thomp...@linaro.org
Cc: Russell King li...@arm.linux.org.uk
Cc: Tony Lindgren t...@atomide.com
Cc: Arnd Bergmann arnd.bergm...@linaro.org
Cc: linux-omap@vger.kernel.org
---

Notes:
Changes since v1:

* Removed !ARCH_OMAP7XX from the DEBUG_OMAP1UART1/2/3 options
  (thanks to Aaro Koskinen)

 arch/arm/Kconfig.debug |  57 +-
 arch/arm/mach-omap1/include/mach/debug-macro.S | 101 -
 2 files changed, 56 insertions(+), 102 deletions(-)
 delete mode 100644 arch/arm/mach-omap1/include/mach/debug-macro.S

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 6f9664a..762b3ed 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -463,6 +463,30 @@ choice
  Say Y here if you want kernel low-level debugging support
  on TI-NSPIRE CX models.
 
+   config DEBUG_OMAP1UART1
+   bool Kernel low-level debugging via OMAP1 UART1
+   depends on ARCH_OMAP1
+   select DEBUG_UART_8250
+   help
+ Say Y here if you want kernel low-level debugging support
+ on OMAP1 based platforms (expect OMAP730) on the UART1.
+
+   config DEBUG_OMAP1UART2
+   bool Kernel low-level debugging via OMAP1 UART2
+   depends on ARCH_OMAP1
+   select DEBUG_UART_8250
+   help
+ Say Y here if you want kernel low-level debugging support
+ on OMAP1 based platforms (expect OMAP730) on the UART2.
+
+   config DEBUG_OMAP1UART3
+   bool Kernel low-level debugging via OMAP1 UART3
+   depends on ARCH_OMAP1
+   select DEBUG_UART_8250
+   help
+ Say Y here if you want kernel low-level debugging support
+ on OMAP1 based platforms (expect OMAP730) on the UART3.
+
config DEBUG_OMAP2UART1
bool OMAP2/3/4 UART1 (omap2/3 sdp boards and some omap3 
boards)
depends on ARCH_OMAP2PLUS
@@ -505,6 +529,30 @@ choice
depends on ARCH_OMAP2PLUS
select DEBUG_OMAP2PLUS_UART
 
+   config DEBUG_OMAP7XXUART1
+   bool Kernel low-level debugging via OMAP730 UART1
+   depends on ARCH_OMAP730
+   select DEBUG_UART_8250
+   help
+ Say Y here if you want kernel low-level debugging support
+ on OMAP730 based platforms on the UART1.
+
+   config DEBUG_OMAP7XXUART2
+   bool Kernel low-level debugging via OMAP730 UART2
+   depends on ARCH_OMAP730
+   select DEBUG_UART_8250
+   help
+ Say Y here if you want kernel low-level debugging support
+ on OMAP730 based platforms on the UART2.
+
+   config DEBUG_OMAP7XXUART3
+   bool Kernel low-level debugging via OMAP730 UART3
+   depends on ARCH_OMAP730
+   select DEBUG_UART_8250
+   help
+ Say Y here if you want kernel low-level debugging support
+ on OMAP730 based platforms on the UART3.
+
config DEBUG_TI81XXUART1
bool Kernel low-level debugging messages via TI81XX UART1 
(ti8148evm)
depends on ARCH_OMAP2PLUS
@@ -1106,6 +1154,9 @@ config DEBUG_UART_PHYS
default 0xfe80 if ARCH_IOP32X
default 0xffc02000 if DEBUG_SOCFPGA_UART
default 0xffd82340 if ARCH_IOP13XX
+   default 0xfffb if DEBUG_OMAP1UART1 || DEBUG_OMAP7XXUART1
+   default 0xfffb0800 if DEBUG_OMAP1UART2 || DEBUG_OMAP7XXUART2
+   default 0xfffb9800 if DEBUG_OMAP1UART3 || DEBUG_OMAP7XXUART3
default 0xfff36000 if DEBUG_HIGHBANK_UART
default 0xf700 if ARCH_IOP33X
depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
@@ -1173,6 +1224,9 @@ config DEBUG_UART_VIRT
default 0xfef0 if ARCH_IXP4XX  !CPU_BIG_ENDIAN
default 0xfef3 if ARCH_IXP4XX  CPU_BIG_ENDIAN
default 0xfef36000 if DEBUG_HIGHBANK_UART
+   default 0xfefb if DEBUG_OMAP1UART1 || DEBUG_OMAP7XXUART1
+   default 0xfefb0800 if DEBUG_OMAP1UART2 || DEBUG_OMAP7XXUART2
+   default 0xfefb9800 if DEBUG_OMAP1UART3 || DEBUG_OMAP7XXUART3
default 

Re: AM3517 fails to boot 3.16-rc5 device tree kernel

2014-07-18 Thread Michael Welling
On Fri, Jul 18, 2014 at 09:40:48AM -0500, Michael Welling wrote:
 On Fri, Jul 18, 2014 at 1:38 AM, Tony Lindgren t...@atomide.com wrote:
  * mwelling mwell...@emacinc.com [140717 16:42]:
  I am in the process of porting a device tree compatible version of the
  linux kernel to a AM3517 based device.
 
  First I tried 3.10.x and the device tree port appeared to be incomplete.
  Neither the LCD or Ethernet were supported.
 
  Next I tried 3.14.x and the Ethernet driver appeared to work but still
  no LCD support.
 
  Lastly I tried 3.16-rc5 and found that the kernel hangs in early boot
  without any messages from the serial COM.
 
  For device tree based booting on omap3 I would user v.16-rc4 or later.
  There have been multiple issues fixed over past year and PM is working
  finally at least for 36xx/37xx. And we do have the DSS panels finally
  working too.
 
  I was using the omap2plus_defconfig and the am3517-evm.dtb from each
  kernel build. Is there any reason why the kernel would start hanging
  with the newest release?
 
  No reason that I can think of. AFAIK 3517 has been booting in the test
  farms just fine?
 
  Can you please enable debug_ll + earlyprintk and pass also earlyprintk
  in the kernel cmdline?
 I will try this.

Adding the earlyprintk did not work. It still hangs without any
messages.

 
  Are there any versions where the LCD output works?
 
  Starting with v3.16-rc1 you should get the LCD working for panel-dpi
  based devices. Most of them actually are actually ls037v3dw01, so
  see omap3-panel-sharp-ls037v7dw01.dtsi and omap3-evm-common.dtsi
  variants if you have similar setup.
 
  Looking at the 3.16-rc5 test results just posted it is supposed to be 
  working
  but I have not been able to replicate this.
 
  Any suggestions would be greatly appreciated.
 
  Hmm maybe double check your're booting device tree based kernel
  instead of legacy machine ID based kernel? The legacy booting should
  still work just fine and no changes has been made to it, but it will
  get removed shortly.

How do you determine which you are booting?

 I downloaded the version from the test results and it did boot.
 These are combining the uImage and dtb. How do you accomplish this?
 
  Regards,
 
  Tony
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/5] tty: serial: 8250 core: add runtime pm

2014-07-18 Thread Felipe Balbi
On Fri, Jul 18, 2014 at 10:35:10AM +0200, Sebastian Andrzej Siewior wrote:
 On 07/17/2014 06:18 PM, Felipe Balbi wrote:
 
  No, this is okay. If you look, it checks for up-ier  
  UART_IER_THRI. On the second invocation it will see that this
  bit is already set and therefore won't call get_sync() for the
  second time. That bit is removed in the _stop_tx() path.
  
  oh, right. But that's actually unnecessary. Calling
  pm_runtime_get() multiple times will just increment the usage
  counter multiple times, which means you can call __stop_tx()
  multiple times too and everything gets balanced, right ?
 
 No. start_tx() will be called multiple times but only the first
 invocation invoke pm_runtime_get(). Now I noticed that I forgot to

right, but that's unnecessary. You can pm_runtime_get() every time
start_tx() is called. Just make sure to put everytime stop_tx() is
called too.

 remove pm_runtime_put_autosuspend() at the bottom of it. But you get
 the idea right?
 pm_get() on the while the UART_IER_THRI is not yet set. pm_put() once
 the fifo is completely empty.
 
  Do you have other ideas? It doesn't look like this is exported at
  all. If we call _stop_tx() right away, then we have 64 bytes in
  the TX fifo in the worst case. They should be gone soon but the
  HW-flow control may delay it (in theory for a long time)).
  
  this can be problematic, specially for OMAP which can go into OFF
  while idle. Whatever is in the FIFO would get lost. It seems like
  omap-serial solved this within transmit_chars().
 
 No, it didn't.
 
  See how transmit_chars() is called from within IRQ handler with
  clocks enabled then it conditionally calls serial_omap_stop_tx()
  which will pm_runtime_get_sync() - do_the_harlem_shake() - 
  pm_runtime_put_autosuspend(). That leaves one unbalanced 
  pm_runtime_get() which is balanced when we're exitting the IRQ
  handler.
 
 omap-serial and the 8250 do the following on tx path:
 - start_tx()
   - sets UART_IER_THRI. This will generate an interrupt once the FIFO
  is empty.
 - interrupt, notices the empty fifo, invokes serial8250_start_tx()/
   transmit_chars().
   Both have a while loop that fills the FIFO. This loop is left once
   the tty-buffer is empty (uart_circ_empty() is true) or the FIFO full.
 
 Lets say you filled 64 bytes into the FIFO and then left because your
 FIFO is full and tty-buffer is empty. That means you will invoke
 serial_omap_stop_tx() and remove UART_IER_THRI bit.
 This is okay because you are not interested in further FIFO empty
 interrupts because you don't have any TX-bytes to be sent. However,
 once you leave the transmit_chars() you leave serial_omap_irq() which
 does the last pm_put(). That means you have data in the TX FIFO that is
 about to be sent and the device is in auto-suspend.
 This is fine as long as the timeout is greater then the time required
 for the data be sent (plus assuming HW-float control does not stall it
 for too long) so nobody notices a thing.

the time is set to -1 by default. I guess this only works because nobody
has ever tested long transfers with slow baud rates :-p

 For that reason I added the hack / #if0 block in the 8250 driver. To
 ensure we do not disable the TX-FIFO-empty interrupt even if there is
 nothing to send. Instead we enter serial8250_tx_chars() once again with
 empty FIFO and empty tty-buffer and will invoke _stop_tx() which also
 finally does the pm_put().
 That is the plan. The problem I have is how to figure out that the
 device is using auto-suspend. If I don't then I would have to remove
 the #if0 block and that would mean for everybody an extra interrupt
 (which I wanted to avoid).

looks like the closest you have is:

if (pm_runtime_autosuspend_expiration(dev)  0)
foo();

Another possibility would be to implement the -runtime_idle() callback
and only return 0 if fifo is empty, otherwise return -EAGAIN ? then, if
the autosuspend timer expires, -runtime_idle gets called and you can do
the right thing depending on fifo empty or not.

Take a look at
drivers/usb/core/driver.c::usb_runtime_{idle,resume,suspend} for
examples. That seems to work pretty well.

  This seems work fine and dandy without DMA, but for DMA work, I
  think we need to make sure this IP stays powered until we get DMA
  completion callback. But that's future, I guess.
 
 Yes, probably. That means one get at dma start, one put at dma complete
 callback. And I assume we get that callbacks once the DMA transfer is
 complete, not when the FIFO is empty :) So lets leave it to the future
 for now…

k

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH 4/5] tty: serial: 8250 core: add runtime pm

2014-07-18 Thread Peter Hurley

On 07/18/2014 11:31 AM, Felipe Balbi wrote:

On Fri, Jul 18, 2014 at 10:35:10AM +0200, Sebastian Andrzej Siewior wrote:

On 07/17/2014 06:18 PM, Felipe Balbi wrote:


 No, this is okay. If you look, it checks for up-ier 
 UART_IER_THRI. On the second invocation it will see that this
 bit is already set and therefore won't call get_sync() for the
 second time. That bit is removed in the _stop_tx() path.

 
 oh, right. But that's actually unnecessary. Calling
 pm_runtime_get() multiple times will just increment the usage
 counter multiple times, which means you can call __stop_tx()
 multiple times too and everything gets balanced, right ?


No. start_tx() will be called multiple times but only the first
invocation invoke pm_runtime_get(). Now I noticed that I forgot to

right, but that's unnecessary. You can pm_runtime_get() every time
start_tx() is called. Just make sure to put everytime stop_tx() is
called too.


The interface is asymmetric.

start_tx() may be invoked multiple times for which only 1 interrupt
will occur, and thus only invoke __stop_tx() once.

Regards,
Peter Hurley


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/5] tty: serial: 8250 core: add runtime pm

2014-07-18 Thread Felipe Balbi
On Fri, Jul 18, 2014 at 11:53:21AM -0400, Peter Hurley wrote:
 On 07/18/2014 11:31 AM, Felipe Balbi wrote:
 On Fri, Jul 18, 2014 at 10:35:10AM +0200, Sebastian Andrzej Siewior wrote:
 On 07/17/2014 06:18 PM, Felipe Balbi wrote:
 
  No, this is okay. If you look, it checks for up-ier 
  UART_IER_THRI. On the second invocation it will see that this
  bit is already set and therefore won't call get_sync() for the
  second time. That bit is removed in the _stop_tx() path.
  
  oh, right. But that's actually unnecessary. Calling
  pm_runtime_get() multiple times will just increment the usage
  counter multiple times, which means you can call __stop_tx()
  multiple times too and everything gets balanced, right ?
 
 No. start_tx() will be called multiple times but only the first
 invocation invoke pm_runtime_get(). Now I noticed that I forgot to
 right, but that's unnecessary. You can pm_runtime_get() every time
 start_tx() is called. Just make sure to put everytime stop_tx() is
 called too.
 
 The interface is asymmetric.
 
 start_tx() may be invoked multiple times for which only 1 interrupt
 will occur, and thus only invoke __stop_tx() once.

alright, thanks for the info.

-- 
balbi


signature.asc
Description: Digital signature


Re: AM3517 fails to boot 3.16-rc5 device tree kernel

2014-07-18 Thread Michael Welling
On Fri, Jul 18, 2014 at 09:40:48AM -0500, Michael Welling wrote:
 On Fri, Jul 18, 2014 at 1:38 AM, Tony Lindgren t...@atomide.com wrote:
  * mwelling mwell...@emacinc.com [140717 16:42]:
  I am in the process of porting a device tree compatible version of the
  linux kernel to a AM3517 based device.
 
  First I tried 3.10.x and the device tree port appeared to be incomplete.
  Neither the LCD or Ethernet were supported.
 
  Next I tried 3.14.x and the Ethernet driver appeared to work but still
  no LCD support.
 
  Lastly I tried 3.16-rc5 and found that the kernel hangs in early boot
  without any messages from the serial COM.
 
  For device tree based booting on omap3 I would user v.16-rc4 or later.
  There have been multiple issues fixed over past year and PM is working
  finally at least for 36xx/37xx. And we do have the DSS panels finally
  working too.
 
  I was using the omap2plus_defconfig and the am3517-evm.dtb from each
  kernel build. Is there any reason why the kernel would start hanging
  with the newest release?
 
  No reason that I can think of. AFAIK 3517 has been booting in the test
  farms just fine?
 
  Can you please enable debug_ll + earlyprintk and pass also earlyprintk
  in the kernel cmdline?
 I will try this.
 
  Are there any versions where the LCD output works?
 
  Starting with v3.16-rc1 you should get the LCD working for panel-dpi
  based devices. Most of them actually are actually ls037v3dw01, so
  see omap3-panel-sharp-ls037v7dw01.dtsi and omap3-evm-common.dtsi
  variants if you have similar setup.
 
  Looking at the 3.16-rc5 test results just posted it is supposed to be 
  working
  but I have not been able to replicate this.
 
  Any suggestions would be greatly appreciated.
 
  Hmm maybe double check your're booting device tree based kernel
  instead of legacy machine ID based kernel? The legacy booting should
  still work just fine and no changes has been made to it, but it will
  get removed shortly.
 I downloaded the version from the test results and it did boot.
 These are combining the uImage and dtb. How do you accomplish this?

It should be noted that when you try to boot the seperate zImage and dtb from
the test build it fails. This replicates my issue.

Here are the two binaries that I used:
http://www.pwsan.com/omap/testlogs/test_v3.16-rc5/20140716140950/build_z/omap2plus_defconfig/zImage
http://www.pwsan.com/omap/testlogs/test_v3.16-rc5/20140716140950/dtbs/am3517-evm.dtb

Here is the boot attempt:
U-Boot dhcp;set serverip 10.0.2.168;tftp 0x8200 zImage; tftp 0x8000 
am3517-evm.dtb;bootz 0x8200 - 0x8000
BOOTP broadcast 1
DHCP client bound to address 10.0.3.33
Using DaVinci-EMAC device
TFTP from server 10.0.2.168; our IP address is 10.0.3.33
Filename 'zImage'.
Load address: 0x8200
Loading: #
 #
 #
 #
 ##
 2 MiB/s
done
Bytes transferred = 4360800 (428a60 hex)
Using DaVinci-EMAC device
TFTP from server 10.0.2.168; our IP address is 10.0.3.33
Filename 'am3517-evm.dtb'.
Load address: 0x8000
Loading: 
 1.8 MiB/s
done
Bytes transferred = 50145 (c3e1 hex)
Kernel image @ 0x8200 [ 0x00 - 0x428a60 ]
## Flattened Device Tree blob at 8000
   Booting using the fdt blob at 0x8000
   Loading Device Tree to 9ff05000, end 9ff143e0 ... OK

Starting kernel ...

Using the exact same boot sequence worked for 3.10 and 3.14.

 
  Regards,
 
  Tony
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] iommu/omap: Remove virtual memory manager

2014-07-18 Thread Suman Anna
On 07/18/2014 05:50 AM, Laurent Pinchart wrote:
 Hi Suman,
 
 Thank you for the review.
 
 On Thursday 17 July 2014 10:53:03 Suman Anna wrote:
 On 07/17/2014 06:09 AM, Laurent Pinchart wrote:
 The OMAP3 ISP driver was the only user of the OMAP IOVMM API. Now that
 is has been ported to the DMA API, remove the unused virtual memory
 manager.

 Signed-off-by: Laurent Pinchart laurent.pinch...@ideasonboard.com
 ---

 Joerg, could you please pick this patch up for v3.17 if possible ?

 Need one minor change as below, otherwise patch is good.

  drivers/iommu/Kconfig|  10 +-
  drivers/iommu/Makefile   |   1 -
  drivers/iommu/omap-iommu-debug.c | 114 --
  drivers/iommu/omap-iommu.c   |   2 -
  drivers/iommu/omap-iommu.h   |   6 +-
  drivers/iommu/omap-iovmm.c   | 791 --
  include/linux/omap-iommu.h   |  37 +-
  7 files changed, 8 insertions(+), 953 deletions(-)
  delete mode 100644 drivers/iommu/omap-iovmm.c

 diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
 index d260605..a1f0fad 100644
 --- a/drivers/iommu/Kconfig
 +++ b/drivers/iommu/Kconfig
 @@ -143,16 +143,12 @@ config OMAP_IOMMU
 depends on ARCH_OMAP2PLUS
 select IOMMU_API

 -config OMAP_IOVMM
 -   tristate OMAP IO Virtual Memory Manager Support
 -   depends on OMAP_IOMMU
 -
  config OMAP_IOMMU_DEBUG
 -   tristate Export OMAP IOMMU/IOVMM internals in DebugFS
 -   depends on OMAP_IOVMM  DEBUG_FS
 +   tristate Export OMAP IOMMU internals in DebugFS
 +   depends on DEBUG_FS

 This module is relevant only when OMAP_IOMMU is enabled, so this should
 be depends on OMAP_IOMMU  DEBUG_FS. The dependency is inherent before
 through OMAP_IOVMM. Otherwise, this module can be built by itself and
 results in some build errors.
 
 Oops, my bad. I'll fix that in v2.
 
 help
   Select this to see extensive information about
 - the internal state of OMAP IOMMU/IOVMM in debugfs.
 + the internal state of OMAP IOMMU in debugfs.

   Say N unless you know you need this.
 
 [snip]
 
 diff --git a/drivers/iommu/omap-iommu.h b/drivers/iommu/omap-iommu.h
 index ea920c3..36a85f3 100644
 --- a/drivers/iommu/omap-iommu.h
 +++ b/drivers/iommu/omap-iommu.h
 @@ -46,9 +46,6 @@ struct omap_iommu {

 int nr_tlb_entries;

 -   struct list_headmmap;
 -   struct mutexmmap_lock; /* protect mmap */
 -
 void *ctx; /* iommu context: registres saved area */
 u32 da_start;
 u32 da_end;

 With the removal of omap-iovmm, the da_start and da_end can also be
 removed. No need to block this patch for that, it can be done in a
 separate patch.
 
 I'll remove the fields from struct omap_iommu in v2. I'll also remove them 
 from the platform data, but I'll need to do so in a separate patch, as arch/ 
 code needs to be touched as well.

Yeah, that's the reason I said separate patch :)

regards
Suman

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 0/3] iommu: Remove OMAP IOVMM driver

2014-07-18 Thread Suman Anna
Hi Laurent,

On 07/18/2014 05:49 AM, Laurent Pinchart wrote:
 Hello,
 
 The OMAP3 ISP driver was the only user of the OMAP IOVMM API. Now that is has
 been ported to the DMA API, remove the unused virtual memory manager.
 
 The removal is split in three patches to ease upstream merge. The first patch
 removes the omap-iovmm driver, the second patch removes setting of now unused
 platform data fields from arch code, and the last patch cleans up the platform
 data structure.

Thanks for the revised series, it looks good. I have also tested the
series on OMAP3, OMAP4 and OMAP5.

For the changes in the entire series,
Acked-by: Suman Anna s-a...@ti.com

regards
Suman

 
 I'd like to get at least the first patch merged in v3.17. To avoid splitting
 the series across three kernel versions, it would be nice to also merge at
 least the second patch for v3.17. If there's no risk of conflict everything
 could be merged in one go through the ARM SoC tree. Otherwise a stable branch
 with patch 1/3 will be needed to base the arch change on.
 
 Joerg, Tony, how would you like to proceed ?
 
 Changes compared to v1:
 
 - Fix OMAP_IOMMU_DEBUG dependency on OMAP_IOMMU
 - Remove omap_iommu da_start and da_end fields
 - Added patches 2/3 and 3/3
 
 Laurent Pinchart (3):
   iommu/omap: Remove virtual memory manager
   ARM: omap: Don't set iommu pdata da_start and da_end fields
   iommu/omap: Remove platform data da_start and da_end fields
 
  arch/arm/mach-omap2/omap-iommu.c   |   2 -
  arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |   4 -
  arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   4 -
  drivers/iommu/Kconfig  |  10 +-
  drivers/iommu/Makefile |   1 -
  drivers/iommu/omap-iommu-debug.c   | 114 -
  drivers/iommu/omap-iommu.c |  13 -
  drivers/iommu/omap-iommu.h |   8 +-
  drivers/iommu/omap-iovmm.c | 791 
 -
  include/linux/omap-iommu.h |  37 +-
  include/linux/platform_data/iommu-omap.h   |   6 -
  11 files changed, 8 insertions(+), 982 deletions(-)
  delete mode 100644 drivers/iommu/omap-iovmm.c
 

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GIT PULL] omap dts changes for v3.17 merge window, part1

2014-07-18 Thread Olof Johansson
On Wed, Jul 16, 2014 at 05:55:58AM -0700, Tony Lindgren wrote:
 The following changes since commit 7171511eaec5bf23fb06078f59784a3a0626b38f:
 
   Linux 3.16-rc1 (2014-06-15 17:45:28 -1000)
 
 are available in the git repository at:
 
   git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap 
 tags/omap-for-v3.17/dt-part1
 
 for you to fetch changes up to 3c9464ed75d6c15ee864da6d8f6a4cd3b0f2c934:
 
   ARM: DTS: omap5-uevm: Enable basic audio (McPDM - twl6040) (2014-07-15 
 00:21:25 -0700)
 
 
 First set of .dts changes for omaps for v3.17 merge
 window:
 
 - Enable irqchip crossbar interrupt mapping. These changes
   are based on an immutable irqchip branch set up by Jason
   Cooper to make it easier to merge the related .dts changes.
 
 - Removal of omap2 related static clock data that now comes
   from device tree.
 
 - Enabling of PHY regulators for various omaps
 
 - Enabling of PCIe for dra7
 
 - Add support for am437x starterkit
 
 - Enable audio for for omap5
 
 - Enable display and am335x-evmsk

Merged, but:

1) There was a conflict in the qspi node of dra7.dtsi due to a fix to
   remove the interrupts property. It'd be nice to get these branches
   based on the fixes so that we don't see these conflicts (or at least
   get told about them). Besides, if we happen to have an older base in
   our branch than what had the fix, it'll bubble all the way up to Linus.

2) There was an add/add conflict in the dra7.dtsi file, due to new
   entries just being appended. Please keep these sorted on address to
   avoid that.

-Olof
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html