[RFC 0/5] EDMA: Support to DMA scatter-lists with any no. of entries

2013-07-21 Thread Joel Fernandes
Re: on-going discussion at [1], I've added support to EDMA driver to be
able to accept scatter gather lists of arbitrary length, but still make
use of only a certain MAX number of slots. Thus free-ing up the rest of
the slots to other slave users.  With this there is no need for slave
drivers to query the EDMA driver how much is the MAX. It can send SG lists
of any number of entries to DMA.

Tested with various number of MAX slots , even just 1. In the case where
it is 1, only 1-slot is used to transmit an entire set of scatter list.
If only 1 slot is used for a channel, there is a performance impact, but
it works. A DMA resources vs Performance tradeoff.

[1] http://marc.info/?l=linux-omapm=137416733628831w=2

Joel Fernandes (5):
  dma: edma: Setup parameters to DMA MAX_SG_NR at a time
  dma: edma: Write out and handle MAX_SG_NR at a given time
  ARM: edma: Add function to manually trigger an EDMA channel
  dma: edma: Find missed events and issue them
  DMA: EDMA: Leave linked to Null slot instead of DUMMY slot

 arch/arm/common/edma.c |   21 +++
 drivers/dma/edma.c |  113 ++--
 include/linux/platform_data/edma.h |2 +
 3 files changed, 104 insertions(+), 32 deletions(-)

-- 
1.7.9.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


[RFC 5/5] DMA: EDMA: Leave linked to Null slot instead of DUMMY slot

2013-07-21 Thread Joel Fernandes
Dummy slot has been used as a way for missed-events not to be
reported as missing. This has been particularly troublesome for cases
where we might want to temporarily pause all incoming events.

For EDMA DMAC, there is no way to do any such pausing of events as
the occurence of the next event is not software controlled.
Using edma_pause in IRQ handlers doesn't help as by then the event
in concern from the slave is already missed.

Linking a dummy slot, is seen to absorb these events which we didn't
want to miss. So we don't link to dummy, but instead leave it linked
to NULL set, allow an error condition and detect the channel that
missed it.

Signed-off-by: Joel Fernandes jo...@ti.com
---
 drivers/dma/edma.c |3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index b0b5bcd..e9f1f27 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -160,9 +160,6 @@ static void edma_execute(struct edma_chan *echan)
/* Link to the previous slot if not the last set */
if (i != (total_process - 1))
edma_link(echan-slot[i], echan-slot[i+1]);
-   /* Final pset links to the dummy pset */
-   else
-   edma_link(echan-slot[i], echan-ecc-dummy_slot);
}
 
edesc-total_processed += total_process;
-- 
1.7.9.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


[RFC 2/5] dma: edma: Write out and handle MAX_SG_NR at a given time

2013-07-21 Thread Joel Fernandes
Process SG-elements in batches of MAX_SG_NR if they are greater
than MAX_SG_NR. Due to this, at any given time only those many
slots will be used in the given channel no matter how long the
scatter list is. We keep track of how much has been written
inorder to process the next batch of elements in the scatter-list
and detect completion.

For such intermediate transfer completions (one batch of MAX_SG_NR),
make use of pause and resume functions instead of start and stop
when such intermediate transfer is in progress or completed as we
donot want to clear any pending events.

Signed-off-by: Joel Fernandes jo...@ti.com
---
 drivers/dma/edma.c |   79 +++-
 1 file changed, 54 insertions(+), 25 deletions(-)

diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index 9b9954e..0e7ed79 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -56,6 +56,7 @@ struct edma_desc {
struct list_headnode;
int absync;
int pset_nr;
+   int total_processed;
struct edmacc_param pset[0];
 };
 
@@ -105,22 +106,36 @@ static void edma_desc_free(struct virt_dma_desc *vdesc)
 /* Dispatch a queued descriptor to the controller (caller holds lock) */
 static void edma_execute(struct edma_chan *echan)
 {
-   struct virt_dma_desc *vdesc = vchan_next_desc(echan-vchan);
+   struct virt_dma_desc *vdesc;
struct edma_desc *edesc;
-   int i;
+   struct device *dev = echan-vchan.chan.device-dev;
 
-   if (!vdesc) {
-   echan-edesc = NULL;
-   return;
+   int i, j, total_left, total_process;
+
+   /* If either we processed all psets or we're still not started */
+   if (!echan-edesc ||
+   echan-edesc-pset_nr == echan-edesc-total_processed) {
+   /* Get next vdesc */
+   vdesc = vchan_next_desc(echan-vchan);
+   if (!vdesc) {
+   echan-edesc = NULL;
+   return;
+   }
+   list_del(vdesc-node);
+   echan-edesc = to_edma_desc(vdesc-tx);
}
 
-   list_del(vdesc-node);
+   edesc = echan-edesc;
+
+   /* Find out how many left */
+   total_left = edesc-pset_nr - edesc-total_processed;
+   total_process = total_left  MAX_NR_SG ? MAX_NR_SG : total_left;
 
-   echan-edesc = edesc = to_edma_desc(vdesc-tx);
 
/* Write descriptor PaRAM set(s) */
-   for (i = 0; i  edesc-pset_nr; i++) {
-   edma_write_slot(echan-slot[i], edesc-pset[i]);
+   for (i = 0; i  total_process; i++) {
+   j = i + edesc-total_processed;
+   edma_write_slot(echan-slot[i], edesc-pset[j]);
dev_dbg(echan-vchan.chan.device-dev,
\n pset[%d]:\n
  chnum\t%d\n
@@ -133,24 +148,31 @@ static void edma_execute(struct edma_chan *echan)
  bidx\t%08x\n
  cidx\t%08x\n
  lkrld\t%08x\n,
-   i, echan-ch_num, echan-slot[i],
-   edesc-pset[i].opt,
-   edesc-pset[i].src,
-   edesc-pset[i].dst,
-   edesc-pset[i].a_b_cnt,
-   edesc-pset[i].ccnt,
-   edesc-pset[i].src_dst_bidx,
-   edesc-pset[i].src_dst_cidx,
-   edesc-pset[i].link_bcntrld);
+   j, echan-ch_num, echan-slot[i],
+   edesc-pset[j].opt,
+   edesc-pset[j].src,
+   edesc-pset[j].dst,
+   edesc-pset[j].a_b_cnt,
+   edesc-pset[j].ccnt,
+   edesc-pset[j].src_dst_bidx,
+   edesc-pset[j].src_dst_cidx,
+   edesc-pset[j].link_bcntrld);
/* Link to the previous slot if not the last set */
-   if (i != (edesc-pset_nr - 1))
+   if (i != (total_process - 1))
edma_link(echan-slot[i], echan-slot[i+1]);
/* Final pset links to the dummy pset */
else
edma_link(echan-slot[i], echan-ecc-dummy_slot);
}
 
-   edma_start(echan-ch_num);
+   edesc-total_processed += total_process;
+
+   edma_resume(echan-ch_num);
+
+   if (edesc-total_processed = MAX_NR_SG) {
+   dev_dbg(dev, first transfer starting %d\n, echan-ch_num);
+   edma_start(echan-ch_num);
+   }
 }
 
 static int edma_terminate_all(struct edma_chan *echan)
@@ -366,19 +388,26 @@ static void edma_callback(unsigned ch_num, u16 ch_status, 
void *data)
struct edma_desc *edesc;
unsigned long flags;
 
-   /* Stop the channel */
-   edma_stop(echan-ch_num);
+   /* Pause the channel 

[RFC 4/5] dma: edma: Find missed events and issue them

2013-07-21 Thread Joel Fernandes
In an effort to move to using Scatter gather lists of any size with
EDMA as discussed at [1] instead of placing limitations on the driver,
we work through the limitations of the EDMAC hardware to find missed
events and issue them.

The sequence of events that require this are:

For the scenario where MAX slots for an EDMA channel is 3:

SG1 - SG2 - SG3 - SG4 - SG5 - SG6 - Null

The above SG list will have to be DMA'd in 2 sets:

(1) SG1 - SG2 - SG3 - Null
(2) SG4 - SG5 - SG6 - Null

After (1) is succesfully transferred, the events from the MMC controller
donot stop coming and are missed by the time we have setup the transfer
for (2). So here, we catch the events missed as an error condition and
issue them manually.

[1] http://marc.info/?l=linux-omapm=137416733628831w=2

Signed-off-by: Joel Fernandes jo...@ti.com
---
 drivers/dma/edma.c |   10 +-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index 0e7ed79..b0b5bcd 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -414,7 +414,15 @@ static void edma_callback(unsigned ch_num, u16 ch_status, 
void *data)
 
break;
case DMA_CC_ERROR:
-   dev_dbg(dev, transfer error on channel %d\n, ch_num);
+   if (echan-edesc) {
+   dev_dbg(dev, Missed event on %d, retrying\n,
+   ch_num);
+   edma_clean_channel(echan-ch_num);
+   edma_stop(echan-ch_num);
+   edma_start(echan-ch_num);
+   edma_manual_trigger(echan-ch_num);
+   }
+   dev_dbg(dev, handled error on channel %d\n, ch_num);
break;
default:
break;
-- 
1.7.9.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


[RFC 1/5] dma: edma: Setup parameters to DMA MAX_SG_NR at a time

2013-07-21 Thread Joel Fernandes
Changes are made here for configuring existing parameters to support
DMA'ing them out in batches as needed.

Also allocate as many as slots as needed by the SG list, but not more
than MAX_SG_NR. Then these slots will be reused accordingly.
For ex, if MAX_SG_NR=10, and number of SG entries is 40, still only
10 slots will be allocated to DMA the entire SG list of size 40.

Also enable TC interrupts for slots that are a last in a current
iteration, or that fall on a MAX_SG_NR boundary.

Signed-off-by: Joel Fernandes jo...@ti.com
---
 drivers/dma/edma.c |   21 ++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index 083ecff..9b9954e 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -223,9 +223,11 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg(
enum dma_slave_buswidth dev_width;
u32 burst;
struct scatterlist *sg;
-   int i;
+
int acnt, bcnt, ccnt, src, dst, cidx;
int src_bidx, dst_bidx, src_cidx, dst_cidx;
+   int i, ret;
+   int num_slots_needed;
 
if (unlikely(!echan || !sgl || !sg_len))
return NULL;
@@ -257,8 +259,11 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg(
 
edesc-pset_nr = sg_len;
 
-   for_each_sg(sgl, sg, sg_len, i) {
-   /* Allocate a PaRAM slot, if needed */
+   /* Allocate a PaRAM slot, if needed */
+
+   num_slots_needed = sg_len  MAX_NR_SG ? MAX_NR_SG : sg_len;
+
+   for (i = 0; i  num_slots_needed; i++) {
if (echan-slot[i]  0) {
echan-slot[i] =
edma_alloc_slot(EDMA_CTLR(echan-ch_num),
@@ -268,6 +273,10 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg(
return NULL;
}
}
+   }
+
+   /* Configure PaRAM sets for each SG */
+   for_each_sg(sgl, sg, sg_len, i) {
 
acnt = dev_width;
 
@@ -325,6 +334,12 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg(
/* Configure A or AB synchronized transfers */
if (edesc-absync)
edesc-pset[i].opt |= SYNCDIM;
+
+   /* If this is the last in a current SG set of transactions,
+  enable interrupts so that next set is processed */
+   if (!((i+1) % MAX_NR_SG))
+   edesc-pset[i].opt |= TCINTEN;
+
/* If this is the last set, enable completion interrupt flag */
if (i == sg_len - 1)
edesc-pset[i].opt |= TCINTEN;
-- 
1.7.9.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


[RFC 3/5] ARM: edma: Add function to manually trigger an EDMA channel

2013-07-21 Thread Joel Fernandes
Manual trigger for events missed as a result of splitting a
scatter gather list and DMA'ing it in batches. Add a helper
function to trigger a channel incase any such events are missed.

Signed-off-by: Joel Fernandes jo...@ti.com
---
 arch/arm/common/edma.c |   21 +
 include/linux/platform_data/edma.h |2 ++
 2 files changed, 23 insertions(+)

diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
index 3567ba1..205f5da 100644
--- a/arch/arm/common/edma.c
+++ b/arch/arm/common/edma.c
@@ -1236,6 +1236,27 @@ void edma_resume(unsigned channel)
 }
 EXPORT_SYMBOL(edma_resume);
 
+int edma_manual_trigger(unsigned channel)
+{
+   unsigned ctlr;
+   int j;
+   unsigned int mask;
+
+   ctlr = EDMA_CTLR(channel);
+   channel = EDMA_CHAN_SLOT(channel);
+   mask = BIT(channel  0x1f);
+
+   j = channel  5;
+
+   /* EDMA channels without event association */
+   edma_shadow0_write_array(ctlr, SH_ESR, j, mask);
+
+   pr_debug(EDMA: ESR%d %08x\n, j,
+   edma_shadow0_read_array(ctlr, SH_ESR, j));
+   return 0;
+}
+EXPORT_SYMBOL(edma_manual_trigger);
+
 /**
  * edma_start - start dma on a channel
  * @channel: channel being activated
diff --git a/include/linux/platform_data/edma.h 
b/include/linux/platform_data/edma.h
index 57300fd..0e11eca 100644
--- a/include/linux/platform_data/edma.h
+++ b/include/linux/platform_data/edma.h
@@ -180,4 +180,6 @@ struct edma_soc_info {
const s16   (*xbar_chans)[2];
 };
 
+int edma_manual_trigger(unsigned);
+
 #endif
-- 
1.7.9.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


Changes in OMAP baseline testing for v3.11-rc1 onwards

2013-07-21 Thread Paul Walmsley

Hi,

Unfortunately I'm no longer able to manually track regressions and posted 
solutions (if any).  This process consumes more time and energy than I'm 
able to invest now.  So, starting with v3.11-rc1, the summary reports will 
only report the outcome of automated validation scripts. 

Any comments and testbed bug reports continue to be welcome,


- Paul
--
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


OMAP baseline test results for v3.11-rc1

2013-07-21 Thread Paul Walmsley


Here are some basic OMAP test results for Linux v3.11-rc1.
Logs and other details at:

http://www.pwsan.com/omap/testlogs/test_v3.11-rc1/20130721020309/


Test summary


Build: uImage:
Pass (14/14): n800_multi_omap2xxx, n800_only_a, omap1_defconfig,
  omap1_defconfig_1510innovator_only,
  omap1_defconfig_5912osk_only, omap2plus_defconfig,
  omap2plus_defconfig_2430sdp_only,
  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
  omap2plus_defconfig_omap2_4_only,
  omap2plus_defconfig_omap3_4_only,
  rmk_omap3430_ldp_allnoconfig,
  rmk_omap3430_ldp_oldconfig,
  rmk_omap4430_sdp_allnoconfig

Build: uImage+dtb:
Pass ( 3/ 3): am33xx_only/am335x-bone,
  omap2plus_defconfig/omap4-panda,
  omap2plus_defconfig/omap4-panda-es

Build: zImage:
Pass ( 1/ 1): omap2plus_defconfig

Boot to userspace:
FAIL ( 5/ 11): 2430sdp, 3530es3beagle, 3730beaglexm, 5912osk, am335xbonelt
Pass ( 6/ 11): 3517evm, 37xxevm, 4430es2panda, 4460pandaes, am335xbone, 
cmt3517

PM: chip retention via suspend:
FAIL ( 4/ 6): 2430sdp, 3530es3beagle, 3730beaglexm, 4430es2panda
Pass ( 2/ 6): 37xxevm, 4460pandaes

PM: chip retention via dynamic idle:
FAIL ( 5/ 6): 2430sdp, 3530es3beagle, 3730beaglexm, 4430es2panda, 
4460pandaes
Pass ( 1/ 6): 37xxevm

PM: chip off except CORE via suspend:
FAIL ( 1/ 1): 3730beaglexm

PM: chip off except CORE via dynamic idle:
FAIL ( 1/ 1): 3730beaglexm

PM: chip off via suspend:
FAIL ( 3/ 4): 3530es3beagle, 4430es2panda, 4460pandaes
Pass ( 1/ 4): 37xxevm

PM: chip off via dynamic idle:
FAIL ( 3/ 4): 3530es3beagle, 4430es2panda, 4460pandaes
Pass ( 1/ 4): 37xxevm


vmlinux object size
(delta in bytes from test_v3.10 (8bb495e3f02401ee6f76d1b1d77f3ac9f079e376)):
   text data  bsstotal  kernel
+105416+2632+2000  +110048  am33xx_only
 +42013+1728 +960   +44701  n800_multi_omap2xxx
 +41993+1592 +960   +44545  n800_only_a
 +45499 +832 +472   +46803  omap1_defconfig
 +50118+2584 +472   +53174  omap1_defconfig_1510innovator_only
 +53938+2648 +440   +57026  omap1_defconfig_5912osk_only
+159173-2456+1680  +158397  omap2plus_defconfig
+156519+8608+2752  +167879  omap2plus_defconfig_2430sdp_only
+144258-4400+1680  +141538  omap2plus_defconfig_cpupm
+155750-2800+1744  +154694  omap2plus_defconfig_no_pm
+155973   -27688+1936  +130221  omap2plus_defconfig_omap2_4_only
+103989   -55072+1616   +50533  omap2plus_defconfig_omap3_4_only
 -30840  -110588 -736  -142164  rmk_omap3430_ldp_allnoconfig
 +41080   -28816+3988   +16252  rmk_omap3430_ldp_oldconfig
 -60468  -176540 +560  -236448  rmk_omap4430_sdp_allnoconfig


Boot-time memory difference
(delta in bytes from test_v3.10 (8bb495e3f02401ee6f76d1b1d77f3ac9f079e376))
  avail  rsrvd   high  freed  board  kconfig
   -44k44k  .-4k  2420n800   n800_only_a
 -98412k -32660k  .  -392k  2430sdpomap2plus_defconfig
  -152k  -872k  .   -12k  3517evmomap2plus_defconfig
  -152k  -872k  .   -12k  3530es3beagle  omap2plus_defconfig
  -152k  -872k  .   -12k  3730beaglexm   omap2plus_defconfig
  -216k  -808k  .   -12k  4430es2panda   omap2plus_defconfig
  -204k  -820k  .   -12k  4460pandaesomap2plus_defconfig
   -48k48k  .  .  5912oskomap1_defconfig
  -116k   116k  . 4k  am335xbone am33xx_only
  -152k  -872k  .   -12k  am335xbonelt   am33xx_only


OMAP4 platforms have been switched to DT boots, since board file-based 
booting was deprecated for OMAP4 after v3.10.
--
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 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Sascha Hauer
On Sat, Jul 20, 2013 at 07:59:10PM -0700, Greg KH wrote:
 On Sat, Jul 20, 2013 at 10:32:26PM -0400, Alan Stern wrote:
  On Sat, 20 Jul 2013, Greg KH wrote:
  
That should be passed using platform data.

Ick, don't pass strings around, pass pointers.  If you have platform
data you can get to, then put the pointer there, don't use a name.

I don't think I understood you here :-s We wont have phy pointer
when we create the device for the controller no?(it'll be done in
board file). Probably I'm missing something.
   
   Why will you not have that pointer?  You can't rely on the name as the
   device id will not match up, so you should be able to rely on the
   pointer being in the structure that the board sets up, right?
   
   Don't use names, especially as ids can, and will, change, that is going
   to cause big problems.  Use pointers, this is C, we are supposed to be
   doing that :)
  
  Kishon, I think what Greg means is this:  The name you are using must
  be stored somewhere in a data structure constructed by the board file,
  right?  Or at least, associated with some data structure somehow.  
  Otherwise the platform code wouldn't know which PHY hardware
  corresponded to a particular name.
  
  Greg's suggestion is that you store the address of that data structure 
  in the platform data instead of storing the name string.  Have the 
  consumer pass the data structure's address when it calls phy_create, 
  instead of passing the name.  Then you don't have to worry about two 
  PHYs accidentally ending up with the same name or any other similar 
  problems.
 
 Close, but the issue is that whatever returns from phy_create() should
 then be used, no need to call any find functions, as you can just use
 the pointer that phy_create() returns.  Much like all other class api
 functions in the kernel work.

I think the problem here is to connect two from the bus structure
completely independent devices. Several frameworks (ASoC, soc-camera)
had this problem and this wasn't solved until the advent of devicetrees
and their phandles.
phy_create might be called from the probe function of some i2c device
(the phy device) and the resulting pointer is then needed in some other
platform devices (the user of the phy) probe function.
The best solution we have right now is implemented in the clk framework
which uses a string matching of the device names in clk_get() (at least
in the non-dt case).

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- |
--
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 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Tomasz Figa
Hi,

On Saturday 20 of July 2013 19:59:10 Greg KH wrote:
 On Sat, Jul 20, 2013 at 10:32:26PM -0400, Alan Stern wrote:
  On Sat, 20 Jul 2013, Greg KH wrote:
That should be passed using platform data.

Ick, don't pass strings around, pass pointers.  If you have
platform
data you can get to, then put the pointer there, don't use a
name.

I don't think I understood you here :-s We wont have phy pointer
when we create the device for the controller no?(it'll be done in
board file). Probably I'm missing something.
   
   Why will you not have that pointer?  You can't rely on the name as
   the device id will not match up, so you should be able to rely on
   the pointer being in the structure that the board sets up, right?
   
   Don't use names, especially as ids can, and will, change, that is
   going
   to cause big problems.  Use pointers, this is C, we are supposed to
   be
   doing that :)
  
  Kishon, I think what Greg means is this:  The name you are using must
  be stored somewhere in a data structure constructed by the board file,
  right?  Or at least, associated with some data structure somehow.
  Otherwise the platform code wouldn't know which PHY hardware
  corresponded to a particular name.
  
  Greg's suggestion is that you store the address of that data structure
  in the platform data instead of storing the name string.  Have the
  consumer pass the data structure's address when it calls phy_create,
  instead of passing the name.  Then you don't have to worry about two
  PHYs accidentally ending up with the same name or any other similar
  problems.
 
 Close, but the issue is that whatever returns from phy_create() should
 then be used, no need to call any find functions, as you can just use
 the pointer that phy_create() returns.  Much like all other class api
 functions in the kernel work.

I think there is a confusion here about who registers the PHYs.

All platform code does is registering a platform/i2c/whatever device, 
which causes a driver (located in drivers/phy/) to be instantiated. Such 
drivers call phy_create(), usually in their probe() callbacks, so 
platform_code has no way (and should have no way, for the sake of 
layering) to get what phy_create() returns.

IMHO we need a lookup method for PHYs, just like for clocks, regulators, 
PWMs or even i2c busses because there are complex cases when passing just 
a name using platform data will not work. I would second what Stephen said 
[1] and define a structure doing things in a DT-like way.

Example;

[platform code]

static const struct phy_lookup my_phy_lookup[] = {
PHY_LOOKUP(s3c-hsotg.0, otg, samsung-usbphy.1, phy.2),
/* etc... */
};

static void my_machine_init(void)
{
/* ... */
phy_register_lookup(my_phy_lookup, ARRAY_SIZE(my_phy_lookup));
/* ... */
}

/* Notice nothing stuffed in platform data. */

[provider code - samsung-usbphy driver]

static int samsung_usbphy_probe(...)
{
/* ... */
for (i = 0; i  PHY_COUNT; ++i) {
usbphy-phy[i].name = phy;
usbphy-phy[i].id = i;
/* ... */
ret = phy_create(usbphy-phy);
/* err handling */
}
/* ... */
}

[consumer code - s3c-hsotg driver]

static int s3c_hsotg_probe(...)
{
/* ... */
phy = phy_get(pdev-dev, otg);
/* ... */
}

[1] http://thread.gmane.org/gmane.linux.ports.arm.kernel/252813

Best regards,
Tomasz

--
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 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Kishon Vijay Abraham I

Hi,

On Sunday 21 July 2013 04:01 PM, Tomasz Figa wrote:

Hi,

On Saturday 20 of July 2013 19:59:10 Greg KH wrote:

On Sat, Jul 20, 2013 at 10:32:26PM -0400, Alan Stern wrote:

On Sat, 20 Jul 2013, Greg KH wrote:

That should be passed using platform data.


Ick, don't pass strings around, pass pointers.  If you have
platform
data you can get to, then put the pointer there, don't use a
name.


I don't think I understood you here :-s We wont have phy pointer
when we create the device for the controller no?(it'll be done in
board file). Probably I'm missing something.


Why will you not have that pointer?  You can't rely on the name as
the device id will not match up, so you should be able to rely on
the pointer being in the structure that the board sets up, right?

Don't use names, especially as ids can, and will, change, that is
going
to cause big problems.  Use pointers, this is C, we are supposed to
be
doing that :)


Kishon, I think what Greg means is this:  The name you are using must
be stored somewhere in a data structure constructed by the board file,
right?  Or at least, associated with some data structure somehow.
Otherwise the platform code wouldn't know which PHY hardware
corresponded to a particular name.

Greg's suggestion is that you store the address of that data structure
in the platform data instead of storing the name string.  Have the
consumer pass the data structure's address when it calls phy_create,
instead of passing the name.  Then you don't have to worry about two
PHYs accidentally ending up with the same name or any other similar
problems.


Close, but the issue is that whatever returns from phy_create() should
then be used, no need to call any find functions, as you can just use
the pointer that phy_create() returns.  Much like all other class api
functions in the kernel work.


I think there is a confusion here about who registers the PHYs.

All platform code does is registering a platform/i2c/whatever device,
which causes a driver (located in drivers/phy/) to be instantiated. Such
drivers call phy_create(), usually in their probe() callbacks, so
platform_code has no way (and should have no way, for the sake of
layering) to get what phy_create() returns.


right.


IMHO we need a lookup method for PHYs, just like for clocks, regulators,
PWMs or even i2c busses because there are complex cases when passing just
a name using platform data will not work. I would second what Stephen said
[1] and define a structure doing things in a DT-like way.

Example;

[platform code]

static const struct phy_lookup my_phy_lookup[] = {
PHY_LOOKUP(s3c-hsotg.0, otg, samsung-usbphy.1, phy.2),


The only problem here is that if *PLATFORM_DEVID_AUTO* is used while 
creating the device, the ids in the device name would change and 
PHY_LOOKUP wont be useful.


Thanks
Kishon
--
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: Need help for DT GPIO probing

2013-07-21 Thread Linus Walleij
On Sun, Jul 21, 2013 at 6:54 AM, Javier Martinez Canillas
martinez.jav...@gmail.com wrote:

 Linus, are you still planing to send this patches as fixes for the
 v3.11 -rc cycle or did you decide to wait for v3.12?

It will go into the v3.11 RC:s.

I've just been slow due to the current heatwave over northern Europe...

Yours,
Linus Walleij
--
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 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Tomasz Figa
On Sunday 21 of July 2013 16:37:33 Kishon Vijay Abraham I wrote:
 Hi,
 
 On Sunday 21 July 2013 04:01 PM, Tomasz Figa wrote:
  Hi,
  
  On Saturday 20 of July 2013 19:59:10 Greg KH wrote:
  On Sat, Jul 20, 2013 at 10:32:26PM -0400, Alan Stern wrote:
  On Sat, 20 Jul 2013, Greg KH wrote:
  That should be passed using platform data.
  
  Ick, don't pass strings around, pass pointers.  If you have
  platform
  data you can get to, then put the pointer there, don't use a
  name.
  
  I don't think I understood you here :-s We wont have phy pointer
  when we create the device for the controller no?(it'll be done in
  board file). Probably I'm missing something.
  
  Why will you not have that pointer?  You can't rely on the name
  as
  the device id will not match up, so you should be able to rely on
  the pointer being in the structure that the board sets up, right?
  
  Don't use names, especially as ids can, and will, change, that is
  going
  to cause big problems.  Use pointers, this is C, we are supposed to
  be
  doing that :)
  
  Kishon, I think what Greg means is this:  The name you are using
  must
  be stored somewhere in a data structure constructed by the board
  file,
  right?  Or at least, associated with some data structure somehow.
  Otherwise the platform code wouldn't know which PHY hardware
  corresponded to a particular name.
  
  Greg's suggestion is that you store the address of that data
  structure
  in the platform data instead of storing the name string.  Have the
  consumer pass the data structure's address when it calls phy_create,
  instead of passing the name.  Then you don't have to worry about two
  PHYs accidentally ending up with the same name or any other similar
  problems.
  
  Close, but the issue is that whatever returns from phy_create()
  should
  then be used, no need to call any find functions, as you can just
  use
  the pointer that phy_create() returns.  Much like all other class api
  functions in the kernel work.
  
  I think there is a confusion here about who registers the PHYs.
  
  All platform code does is registering a platform/i2c/whatever device,
  which causes a driver (located in drivers/phy/) to be instantiated.
  Such drivers call phy_create(), usually in their probe() callbacks,
  so platform_code has no way (and should have no way, for the sake of
  layering) to get what phy_create() returns.
 
 right.
 
  IMHO we need a lookup method for PHYs, just like for clocks,
  regulators, PWMs or even i2c busses because there are complex cases
  when passing just a name using platform data will not work. I would
  second what Stephen said [1] and define a structure doing things in a
  DT-like way.
  
  Example;
  
  [platform code]
  
  static const struct phy_lookup my_phy_lookup[] = {
  
  PHY_LOOKUP(s3c-hsotg.0, otg, samsung-usbphy.1, phy.2),
 
 The only problem here is that if *PLATFORM_DEVID_AUTO* is used while
 creating the device, the ids in the device name would change and
 PHY_LOOKUP wont be useful.

I don't think this is a problem. All the existing lookup methods already 
use ID to identify devices (see regulators, clkdev, PWMs, i2c, ...). You 
can simply add a requirement that the ID must be assigned manually, 
without using PLATFORM_DEVID_AUTO to use PHY lookup.

Best regards,
Tomasz

--
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: Need help for DT GPIO probing

2013-07-21 Thread Javier Martinez Canillas
On Sunday, July 21, 2013, Linus Walleij wrote:

 On Sun, Jul 21, 2013 at 6:54 AM, Javier Martinez Canillas
 martinez.jav...@gmail.com wrote:

  Linus, are you still planing to send this patches as fixes for the
  v3.11 -rc cycle or did you decide to wait for v3.12?

 It will go into the v3.11 RC:s.


Great, thanks a lot for your help!

 I've just been slow due to the current heatwave over northern Europe...


Haha, yes weather has been even worst here in southern Europe

 Yours,
 Linus Walleij

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


Re: [PATCH] of: provide of_platform_unpopulate()

2013-07-21 Thread Rob Herring
On 07/19/2013 01:14 PM, Sebastian Andrzej Siewior wrote:
 So I called of_platform_populate() on a device to get each child device
 probed and on rmmod and I need to reverse its doing. After a quick grep
 I did what others did as well and rmmod ended in:
 
 | Unable to handle kernel NULL pointer dereference at virtual address 0018
 | PC is at release_resource+0x18/0x80
 | Process rmmod (pid: 2005, stack limit = 0xedc30238)
 | [c003add0] (release_resource+0x18/0x80) from [c0300e08] 
 (platform_device_del+0x78/0xac)
 | [c0300e08] (platform_device_del+0x78/0xac) from [c0301358] 
 (platform_device_unregister+0xc/0x18)
 
 The problem is that platform_device_del() releases each ressource in its
 tree. This does not work on platform_devices created by OF becuase they
 were never added via insert_resource(). As a consequence old-parent in
 __release_resource() is NULL and we explode while accessing -child.
 So I either I do something completly wrong _or_ nobody here tested the
 rmmod path of their driver.

Wouldn't the correct fix be to call insert_resource somehow? The problem
I have is that while of_platform_populate is all about parsing the DT
and creating devices, the removal side has nothing to do with DT. So
this should not be in the DT code. I think the core device code should
be able to handle removal if the device creation side is done correctly.

It looks to me like of_device_add either needs to call
platform_device_add rather than device_add. I think the device name
setting in platform_device_add should be a nop. If not, a check that the
name is already set could be added.

Rob

 
 This patch provides a common function to unregister / remove devices
 which added to the system via of_platform_populate(). While this works
 now on my test case I have not tested any of the driver I modify here so
 feedback is greatly appreciated.
 
 Cc: Tony Lindgren t...@atomide.com
 Cc: Doug Anderson diand...@chromium.org
 Cc: Vivek Gautam gautam.vi...@samsung.com
 Cc: Naveen Krishna Chatradhi ch.nav...@samsung.com
 Cc: Kukjin Kim kgene@samsung.com
 Cc: Kishon Vijay Abraham I kis...@ti.com
 Cc: Roger Quadros rog...@ti.com
 Cc: George Cherian george.cher...@ti.com
 Cc: Felipe Balbi ba...@ti.com
 Signed-off-by: Sebastian Andrzej Siewior bige...@linutronix.de
 ---
  drivers/bus/omap-ocp2scp.c | 13 ++---
  drivers/iio/adc/exynos_adc.c   | 15 ++-
  drivers/mfd/omap-usb-host.c|  9 +
  drivers/of/platform.c  | 22 ++
  drivers/usb/dwc3/dwc3-exynos.c | 11 +--
  drivers/usb/dwc3/dwc3-omap.c   | 12 +---
  include/linux/of_platform.h|  4 
  7 files changed, 33 insertions(+), 53 deletions(-)
 
 diff --git a/drivers/bus/omap-ocp2scp.c b/drivers/bus/omap-ocp2scp.c
 index 5511f98..510bb9e 100644
 --- a/drivers/bus/omap-ocp2scp.c
 +++ b/drivers/bus/omap-ocp2scp.c
 @@ -23,15 +23,6 @@
  #include linux/of.h
  #include linux/of_platform.h
  
 -static int ocp2scp_remove_devices(struct device *dev, void *c)
 -{
 - struct platform_device *pdev = to_platform_device(dev);
 -
 - platform_device_unregister(pdev);
 -
 - return 0;
 -}
 -
  static int omap_ocp2scp_probe(struct platform_device *pdev)
  {
   int ret;
 @@ -51,7 +42,7 @@ static int omap_ocp2scp_probe(struct platform_device *pdev)
   return 0;
  
  err0:
 - device_for_each_child(pdev-dev, NULL, ocp2scp_remove_devices);
 + of_platform_unpopulate(pdev-dev);
  
   return ret;
  }
 @@ -59,7 +50,7 @@ static int omap_ocp2scp_probe(struct platform_device *pdev)
  static int omap_ocp2scp_remove(struct platform_device *pdev)
  {
   pm_runtime_disable(pdev-dev);
 - device_for_each_child(pdev-dev, NULL, ocp2scp_remove_devices);
 + of_platform_unpopulate(pdev-dev);
  
   return 0;
  }
 diff --git a/drivers/iio/adc/exynos_adc.c b/drivers/iio/adc/exynos_adc.c
 index 9809fc9..10248e1 100644
 --- a/drivers/iio/adc/exynos_adc.c
 +++ b/drivers/iio/adc/exynos_adc.c
 @@ -216,15 +216,6 @@ static const struct iio_chan_spec 
 exynos_adc_iio_channels[] = {
   ADC_CHANNEL(9, adc9),
  };
  
 -static int exynos_adc_remove_devices(struct device *dev, void *c)
 -{
 - struct platform_device *pdev = to_platform_device(dev);
 -
 - platform_device_unregister(pdev);
 -
 - return 0;
 -}
 -
  static void exynos_adc_hw_init(struct exynos_adc *info)
  {
   u32 con1, con2;
 @@ -357,8 +348,7 @@ static int exynos_adc_probe(struct platform_device *pdev)
   return 0;
  
  err_of_populate:
 - device_for_each_child(pdev-dev, NULL,
 - exynos_adc_remove_devices);
 + of_platform_unpopulate(pdev-dev);
   regulator_disable(info-vdd);
   clk_disable_unprepare(info-clk);
  err_iio_dev:
 @@ -375,8 +365,7 @@ static int exynos_adc_remove(struct platform_device *pdev)
   struct iio_dev *indio_dev = platform_get_drvdata(pdev);
   struct exynos_adc *info = iio_priv(indio_dev);
  
 - device_for_each_child(pdev-dev, NULL,
 -  

Re: [PATCH 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Greg KH
On Sun, Jul 21, 2013 at 01:12:07PM +0200, Tomasz Figa wrote:
 On Sunday 21 of July 2013 16:37:33 Kishon Vijay Abraham I wrote:
  Hi,
  
  On Sunday 21 July 2013 04:01 PM, Tomasz Figa wrote:
   Hi,
   
   On Saturday 20 of July 2013 19:59:10 Greg KH wrote:
   On Sat, Jul 20, 2013 at 10:32:26PM -0400, Alan Stern wrote:
   On Sat, 20 Jul 2013, Greg KH wrote:
   That should be passed using platform data.
   
   Ick, don't pass strings around, pass pointers.  If you have
   platform
   data you can get to, then put the pointer there, don't use a
   name.
   
   I don't think I understood you here :-s We wont have phy pointer
   when we create the device for the controller no?(it'll be done in
   board file). Probably I'm missing something.
   
   Why will you not have that pointer?  You can't rely on the name
   as
   the device id will not match up, so you should be able to rely on
   the pointer being in the structure that the board sets up, right?
   
   Don't use names, especially as ids can, and will, change, that is
   going
   to cause big problems.  Use pointers, this is C, we are supposed to
   be
   doing that :)
   
   Kishon, I think what Greg means is this:  The name you are using
   must
   be stored somewhere in a data structure constructed by the board
   file,
   right?  Or at least, associated with some data structure somehow.
   Otherwise the platform code wouldn't know which PHY hardware
   corresponded to a particular name.
   
   Greg's suggestion is that you store the address of that data
   structure
   in the platform data instead of storing the name string.  Have the
   consumer pass the data structure's address when it calls phy_create,
   instead of passing the name.  Then you don't have to worry about two
   PHYs accidentally ending up with the same name or any other similar
   problems.
   
   Close, but the issue is that whatever returns from phy_create()
   should
   then be used, no need to call any find functions, as you can just
   use
   the pointer that phy_create() returns.  Much like all other class api
   functions in the kernel work.
   
   I think there is a confusion here about who registers the PHYs.
   
   All platform code does is registering a platform/i2c/whatever device,
   which causes a driver (located in drivers/phy/) to be instantiated.
   Such drivers call phy_create(), usually in their probe() callbacks,
   so platform_code has no way (and should have no way, for the sake of
   layering) to get what phy_create() returns.

Why not put pointers in the platform data structure that can hold these
pointers?  I thought that is why we created those structures in the
first place.  If not, what are they there for?

   IMHO we need a lookup method for PHYs, just like for clocks,
   regulators, PWMs or even i2c busses because there are complex cases
   when passing just a name using platform data will not work. I would
   second what Stephen said [1] and define a structure doing things in a
   DT-like way.
   
   Example;
   
   [platform code]
   
   static const struct phy_lookup my_phy_lookup[] = {
   
 PHY_LOOKUP(s3c-hsotg.0, otg, samsung-usbphy.1, phy.2),
  
  The only problem here is that if *PLATFORM_DEVID_AUTO* is used while
  creating the device, the ids in the device name would change and
  PHY_LOOKUP wont be useful.
 
 I don't think this is a problem. All the existing lookup methods already 
 use ID to identify devices (see regulators, clkdev, PWMs, i2c, ...). You 
 can simply add a requirement that the ID must be assigned manually, 
 without using PLATFORM_DEVID_AUTO to use PHY lookup.

And I'm saying that this idea, of using a specific name and id, is
frought with fragility and will break in the future in various ways when
devices get added to systems, making these strings constantly have to be
kept up to date with different board configurations.

People, NEVER, hardcode something like an id.  The fact that this
happens today with the clock code, doesn't make it right, it makes the
clock code wrong.  Others have already said that this is wrong there as
well, as systems change and dynamic ids get used more and more.

Let's not repeat the same mistakes of the past just because we refuse to
learn from them...

So again, the find a phy by a string functions should be removed, the
device id should be automatically created by the phy core just to make
things unique in sysfs, and no driver code should _ever_ be reliant on
the number that is being created, and the pointer to the phy structure
should be used everywhere instead.

With those types of changes, I will consider merging this subsystem, but
without them, sorry, I will not.

thanks,

greg k-h
--
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 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Greg KH
On Sun, Jul 21, 2013 at 12:22:48PM +0200, Sascha Hauer wrote:
 On Sat, Jul 20, 2013 at 07:59:10PM -0700, Greg KH wrote:
  On Sat, Jul 20, 2013 at 10:32:26PM -0400, Alan Stern wrote:
   On Sat, 20 Jul 2013, Greg KH wrote:
   
 That should be passed using platform data.
 
 Ick, don't pass strings around, pass pointers.  If you have platform
 data you can get to, then put the pointer there, don't use a name.
 
 I don't think I understood you here :-s We wont have phy pointer
 when we create the device for the controller no?(it'll be done in
 board file). Probably I'm missing something.

Why will you not have that pointer?  You can't rely on the name as the
device id will not match up, so you should be able to rely on the
pointer being in the structure that the board sets up, right?

Don't use names, especially as ids can, and will, change, that is going
to cause big problems.  Use pointers, this is C, we are supposed to be
doing that :)
   
   Kishon, I think what Greg means is this:  The name you are using must
   be stored somewhere in a data structure constructed by the board file,
   right?  Or at least, associated with some data structure somehow.  
   Otherwise the platform code wouldn't know which PHY hardware
   corresponded to a particular name.
   
   Greg's suggestion is that you store the address of that data structure 
   in the platform data instead of storing the name string.  Have the 
   consumer pass the data structure's address when it calls phy_create, 
   instead of passing the name.  Then you don't have to worry about two 
   PHYs accidentally ending up with the same name or any other similar 
   problems.
  
  Close, but the issue is that whatever returns from phy_create() should
  then be used, no need to call any find functions, as you can just use
  the pointer that phy_create() returns.  Much like all other class api
  functions in the kernel work.
 
 I think the problem here is to connect two from the bus structure
 completely independent devices. Several frameworks (ASoC, soc-camera)
 had this problem and this wasn't solved until the advent of devicetrees
 and their phandles.
 phy_create might be called from the probe function of some i2c device
 (the phy device) and the resulting pointer is then needed in some other
 platform devices (the user of the phy) probe function.
 The best solution we have right now is implemented in the clk framework
 which uses a string matching of the device names in clk_get() (at least
 in the non-dt case).

I would argue that clocks are wrong here as well, as others have already
pointed out.

What's wrong with the platform_data structure, why can't that be used
for this?

Or, if not, we can always add pointers to the platform device structure,
or even the main 'struct device' as well, that's what it is there for.

thanks,

greg k-h
--
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] ASoC: omap-mcbsp: Support SND_SOC_DAIFMT_CBM_CFS for omap3/4

2013-07-21 Thread Michael Trimarchi
Add SND_SOC_DAIFMT_CBM_CFS support for omap3/omap4. The patch was tested on
a pandaboard-es board connected to the pcm1792a codec. mcbspx_fsx must
configured as output and mcbspx_clkx must be configured as input.

Signed-off-by: Michael Trimarchi mich...@amarulasolutions.com
---
 sound/soc/omap/omap-mcbsp.c |5 +
 1 file changed, 5 insertions(+)

diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index 7483efb..6c19bba 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -433,6 +433,11 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai 
*cpu_dai,
/* Sample rate generator drives the FS */
regs-srgr2 |= FSGM;
break;
+   case SND_SOC_DAIFMT_CBM_CFS:
+   /* McBSP slave. FS clock as output */
+   regs-srgr2 |= FSGM;
+   regs-pcr0  |= FSXM;
+   break;
case SND_SOC_DAIFMT_CBM_CFM:
/* McBSP slave */
break;
-- 
1.7.9.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


Re: [PATCH 1/3] misc: Add crossbar driver

2013-07-21 Thread Linus Walleij
On Thu, Jul 18, 2013 at 8:25 PM, Felipe Balbi ba...@ti.com wrote:

 The Peripheral irq/dma requests are connected to one crossbar's input
 and the output of the crossbar is connected to controller's input
 line. On POR, there are some mappings which are done by default.
 Those peripherals which do not have a mapping on POR, should be configured
 to route its requests using the crossbar.
(...)
 why isn't this done under pinctrl ? If all it does is mux DMA and IRQ
 request lines, it should be written as a pinctrl driver no ?

Actually I was thinking about this at one time when designing pinctrl,
what if we face the problem of arbitrary signal multiplexing?

However pin control is named for what it does and also controls
things like the electrical properties of pins, biasing and so on which
is ill applicable here.

I would rather say that the pin multiplexing portions of pin control
could be rewritten to use a more generic component dealing with
arbitrary line multiplexing, i.e. something under /lib and maybe then
move over some generic concepts such as the function to group
mapping.

The same concept as found here is found in the muxes used by
drivers/dma/amba-pl08x.c back-ends on ARM reference hardware
which is also multiplexing DMA signals. In that case we have done
platform-specific hooks and implemented this in the per-machine
platform code.

Yours,
Linus Walleij
--
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/3] misc: Add crossbar driver

2013-07-21 Thread Linus Walleij
On Thu, Jul 18, 2013 at 8:56 PM, Nishanth Menon n...@ti.com wrote:

 I carry forward my TI internal objection to this approach:

It is actually a very good sign of FOSS-maturity that you as a company
take unresolved architectural issues to the community. Kudos!

 Lets see what happens as a result of this:

 https://patchwork.kernel.org/patch/2825148/ (introducing DTS for DRA7)
 uart1 to uart6 is defined. while in fact 10 uarts exist on IP block.
 uart1: serial@4806a000 {
 snip
 +   interrupts = 0 72 0x4;
 Assumes that GIC interrupt by default mapping used.

So introducing this inbetween the GIC lines and its actual device IRQ
lines inevitably means that the GIC three-cell concept is completely
ill-devised to handle this.

For routing IRQs, I think the proper solution would be to use a
cascaded struct irqchip, which in turn contains an irqdomain
translation to remux the signal onto the GIC inputs.

I.e. the interrupt-controller given to that serial would be the
crossbar irqchip, and that in turn will hog and allocate apropriate
lines from the gic to it would probably itself list *all* the IRQs
of the GIC as its IRQs.

We already have plenty of cascading irqchips such as GPIO
controller providing IRQs, just that they only multiplex on a
single GIC line instead of the whole lot.

Mock example:

intc: interrupt-controller@0 {
compatible = arm,cortex-a9-gic;
#interrupt-cells = 3;
#address-cells = 1;
interrupt-controller;
reg = ...;
};

crossbar: crossbar@0 {
compatible = ...;
interrupt-controller;
#interrupt-cells = 1;
interrupt-parent = intc;
interrupts = 0 0 IRQ_TYPE_LEVEL_HIGH,
  0 1 IRQ_TYPE_LEVEL_HIGH,
  0 2 IRQ_TYPE_LEVEL_HIGH,
  
  0 n IRQ_TYPE_LEVEL_HIGH;
};

uart0: serial@0 {
compatible = ...;
interrupt-parent = crossbar;
interrupts = 1234;
 };

Maybe the interrupts provided from crossbar cannot even be
specified by a number, maybe a line name need to be used
or so. I don't know the particulars.

Whether this as a whole is a good idea, I don't know,
but you would have to go about it something like this.

What happens if there is no line to mux in a certain IRQ?

Yours,
Linus Walleij
--
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


Unable to randomly boot rootfs (EXT3 or EXT4) from SD: MMC error -110 (TIMEDOUT)

2013-07-21 Thread Kevyn-Alexandre Paré
Hi,

I'm trying to figure out why when randomly booting our system after it =
have been hard shutdown for some time (couple of minutes to couple of =
days) doesn't boot with MMC error?=20

WORKAROUND:
Rebooting the system most of the time remove the issue.

I try couple of version of Kernel from stable 3.2.47  3.4.53 without =
success.
I try to change FS from EXT3 to EXT4 without success.
I try multiple SD..

Any proposition of test that you think that is worth trying, I'm willing =
to try.

Your opinions will really be appreciated,

See below for some output of my environment,
http://pastebin.com/qchsr1FQ

Thx,

-Kevyn-Alexandre Par=E9
ps: My intention are to enable CONFIG_MMC_DEBUG? Try kernel 3.10.1?
--
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 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Sylwester Nawrocki

On 07/21/2013 05:48 PM, Greg KH wrote:

On Sun, Jul 21, 2013 at 12:22:48PM +0200, Sascha Hauer wrote:

On Sat, Jul 20, 2013 at 07:59:10PM -0700, Greg KH wrote:

On Sat, Jul 20, 2013 at 10:32:26PM -0400, Alan Stern wrote:

On Sat, 20 Jul 2013, Greg KH wrote:


That should be passed using platform data.


Ick, don't pass strings around, pass pointers.  If you have platform
data you can get to, then put the pointer there, don't use a name.


I don't think I understood you here :-s We wont have phy pointer
when we create the device for the controller no?(it'll be done in
board file). Probably I'm missing something.


Why will you not have that pointer?  You can't rely on the name as the
device id will not match up, so you should be able to rely on the
pointer being in the structure that the board sets up, right?

Don't use names, especially as ids can, and will, change, that is going
to cause big problems.  Use pointers, this is C, we are supposed to be
doing that :)


Kishon, I think what Greg means is this:  The name you are using must
be stored somewhere in a data structure constructed by the board file,
right?  Or at least, associated with some data structure somehow.
Otherwise the platform code wouldn't know which PHY hardware
corresponded to a particular name.

Greg's suggestion is that you store the address of that data structure
in the platform data instead of storing the name string.  Have the
consumer pass the data structure's address when it calls phy_create,
instead of passing the name.  Then you don't have to worry about two
PHYs accidentally ending up with the same name or any other similar
problems.


Close, but the issue is that whatever returns from phy_create() should
then be used, no need to call any find functions, as you can just use
the pointer that phy_create() returns.  Much like all other class api
functions in the kernel work.


I think the problem here is to connect two from the bus structure
completely independent devices. Several frameworks (ASoC, soc-camera)
had this problem and this wasn't solved until the advent of devicetrees
and their phandles.
phy_create might be called from the probe function of some i2c device
(the phy device) and the resulting pointer is then needed in some other
platform devices (the user of the phy) probe function.
The best solution we have right now is implemented in the clk framework
which uses a string matching of the device names in clk_get() (at least
in the non-dt case).


I would argue that clocks are wrong here as well, as others have already
pointed out.

What's wrong with the platform_data structure, why can't that be used
for this?


At the point the platform data of some driver is initialized, e.g. in
board setup code the PHY pointer is not known, since the PHY supplier
driver has not initialized yet.  Even though we wanted to pass pointer
to a PHY through some notifier call, it would have been not clear
which PHY user driver should match on such notifier.  A single PHY
supplier driver can create M PHY objects and this needs to be mapped
to N PHY user drivers.  This mapping needs to be defined somewhere by
the system integrator.  It works well with device tree, but except that
there seems to be no other reliable infrastructure in the kernel to
define links/dependencies between devices, since device identifiers are
not known in advance in all cases.

What Tomasz proposed seems currently most reasonable to me for non-dt.


Or, if not, we can always add pointers to the platform device structure,
or even the main 'struct device' as well, that's what it is there for.


Still we would need to solve a problem which platform device structure
gets which PHY pointer.

--
Regards,
Sylwester
--
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] ASoC: omap-mcbsp: Support SND_SOC_DAIFMT_CBM_CFS for omap3/4

2013-07-21 Thread Peter Ujfalusi
On 07/21/2013 06:24 PM, Michael Trimarchi wrote:
 Add SND_SOC_DAIFMT_CBM_CFS support for omap3/omap4. The patch was tested on
 a pandaboard-es board connected to the pcm1792a codec. mcbspx_fsx must
 configured as output and mcbspx_clkx must be configured as input.

Acked-by: Peter Ujfalusi peter.ujfal...@ti.com

 
 Signed-off-by: Michael Trimarchi mich...@amarulasolutions.com
 ---
  sound/soc/omap/omap-mcbsp.c |5 +
  1 file changed, 5 insertions(+)
 
 diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
 index 7483efb..6c19bba 100644
 --- a/sound/soc/omap/omap-mcbsp.c
 +++ b/sound/soc/omap/omap-mcbsp.c
 @@ -433,6 +433,11 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai 
 *cpu_dai,
   /* Sample rate generator drives the FS */
   regs-srgr2 |= FSGM;
   break;
 + case SND_SOC_DAIFMT_CBM_CFS:
 + /* McBSP slave. FS clock as output */
 + regs-srgr2 |= FSGM;
 + regs-pcr0  |= FSXM;
 + break;
   case SND_SOC_DAIFMT_CBM_CFM:
   /* McBSP slave */
   break;
 


-- 
Péter
--
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 01/15] drivers: phy: add generic PHY framework

2013-07-21 Thread Alan Stern
On Sun, 21 Jul 2013, Sylwester Nawrocki wrote:

  What's wrong with the platform_data structure, why can't that be used
  for this?
 
 At the point the platform data of some driver is initialized, e.g. in
 board setup code the PHY pointer is not known, since the PHY supplier
 driver has not initialized yet.  Even though we wanted to pass pointer
 to a PHY through some notifier call, it would have been not clear
 which PHY user driver should match on such notifier.  A single PHY
 supplier driver can create M PHY objects and this needs to be mapped
 to N PHY user drivers.  This mapping needs to be defined somewhere by
 the system integrator.  It works well with device tree, but except that
 there seems to be no other reliable infrastructure in the kernel to
 define links/dependencies between devices, since device identifiers are
 not known in advance in all cases.
 
 What Tomasz proposed seems currently most reasonable to me for non-dt.
 
  Or, if not, we can always add pointers to the platform device structure,
  or even the main 'struct device' as well, that's what it is there for.
 
 Still we would need to solve a problem which platform device structure
 gets which PHY pointer.

Can you explain the issues in more detail?  I don't fully understand 
the situation.

Here's what I think I know:

The PHY and the controller it is attached to are both physical
devices.

The connection between them is hardwired by the system
manufacturer and cannot be changed by software.

PHYs are generally described by fixed system-specific board
files or by Device Tree information.  Are they ever discovered
dynamically?

Is the same true for the controllers attached to the PHYs?
If not -- if both a PHY and a controller are discovered 
dynamically -- how does the kernel know whether they are 
connected to each other?

The kernel needs to know which controller is attached to which
PHY.  Currently this information is represented by name or ID
strings embedded in platform data.

The PHY's driver (the supplier) uses the platform data to 
construct a platform_device structure that represents the PHY.  
Until this is done, the controller's driver (the client) cannot 
use the PHY.

Since there is no parent-child relation between the PHY and the 
controller, there is no guarantee that the PHY's driver will be
ready when the controller's driver wants to use it.  A deferred
probe may be needed.

The issue (or one of the issues) in this discussion is that 
Greg does not like the idea of using names or IDs to associate
PHYs with controllers, because they are too prone to
duplications or other errors.  Pointers are more reliable.

But pointers to what?  Since the only data known to be 
available to both the PHY driver and controller driver is the
platform data, the obvious answer is a pointer to platform data
(either for the PHY or for the controller, or maybe both).

Probably some of the details above are wrong; please indicate where I
have gone astray.  Also, I'm not clear about the role played by various 
APIs.  For example, where does phy_create() fit into this picture?

Alan Stern

--
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] of: provide of_platform_unpopulate()

2013-07-21 Thread Sebastian Andrzej Siewior
On 07/21/2013 04:42 PM, Rob Herring wrote:
 Wouldn't the correct fix be to call insert_resource somehow?

Yes unless there was a reason this wasn't done in the first place.

 The problem
 I have is that while of_platform_populate is all about parsing the DT
 and creating devices, the removal side has nothing to do with DT. So
 this should not be in the DT code. I think the core device code should
 be able to handle removal if the device creation side is done correctly.

If there is no need to use the special removal function (in case we add
insert_ressource) then yes. What about a pointer in
of_platform_populate()'s comment referring to the removal function?

 
 It looks to me like of_device_add either needs to call
 platform_device_add rather than device_add. I think the device name
 setting in platform_device_add should be a nop. If not, a check that the
 name is already set could be added.

It does actually the same thing as platform_device_add except the
dynamic device id and the resource insert if I remember correctly. If
you guys prefer the platdorm_device_add() path including
insert_ressource() I can try this.

 
 Rob

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] of: provide of_platform_unpopulate()

2013-07-21 Thread Rob Herring
On 07/21/2013 09:42 AM, Rob Herring wrote:
 On 07/19/2013 01:14 PM, Sebastian Andrzej Siewior wrote:
 So I called of_platform_populate() on a device to get each child device
 probed and on rmmod and I need to reverse its doing. After a quick grep
 I did what others did as well and rmmod ended in:

 | Unable to handle kernel NULL pointer dereference at virtual address 
 0018
 | PC is at release_resource+0x18/0x80
 | Process rmmod (pid: 2005, stack limit = 0xedc30238)
 | [c003add0] (release_resource+0x18/0x80) from [c0300e08] 
 (platform_device_del+0x78/0xac)
 | [c0300e08] (platform_device_del+0x78/0xac) from [c0301358] 
 (platform_device_unregister+0xc/0x18)

 The problem is that platform_device_del() releases each ressource in its
 tree. This does not work on platform_devices created by OF becuase they
 were never added via insert_resource(). As a consequence old-parent in
 __release_resource() is NULL and we explode while accessing -child.
 So I either I do something completly wrong _or_ nobody here tested the
 rmmod path of their driver.
 
 Wouldn't the correct fix be to call insert_resource somehow? The problem
 I have is that while of_platform_populate is all about parsing the DT
 and creating devices, the removal side has nothing to do with DT. So
 this should not be in the DT code. I think the core device code should
 be able to handle removal if the device creation side is done correctly.
 
 It looks to me like of_device_add either needs to call
 platform_device_add rather than device_add. I think the device name
 setting in platform_device_add should be a nop. If not, a check that the
 name is already set could be added.
 

BTW, it looks like Grant has attempted this already:

commit 02bbde7849e68e193cefaa1885fe0df0f03c9fcd
Author: Grant Likely grant.lik...@secretlab.ca
Date:   Sun Feb 17 20:03:27 2013 +

Revert of: use platform_device_add

This reverts commit aac73f34542bc7ae4317928d2eabfeb21d247323. That
commit causes two kinds of breakage; it breaks registration of AMBA
devices when one of the parent nodes already contains overlapping
resource regions, and it breaks calls to request_region() by device
drivers in certain conditions where there are overlapping memory
regions. Both of these problems can probably be fixed, but it is better
to back out the commit and get a proper fix designed before trying
again.

Signed-off-by: Grant Likely grant.lik...@secretlab.ca


Rob

--
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] of: provide of_platform_unpopulate()

2013-07-21 Thread Grant Likely
On Sun, Jul 21, 2013 at 9:48 PM, Rob Herring robherri...@gmail.com wrote:
 On 07/21/2013 09:42 AM, Rob Herring wrote:
 On 07/19/2013 01:14 PM, Sebastian Andrzej Siewior wrote:
 So I called of_platform_populate() on a device to get each child device
 probed and on rmmod and I need to reverse its doing. After a quick grep
 I did what others did as well and rmmod ended in:

 | Unable to handle kernel NULL pointer dereference at virtual address 
 0018
 | PC is at release_resource+0x18/0x80
 | Process rmmod (pid: 2005, stack limit = 0xedc30238)
 | [c003add0] (release_resource+0x18/0x80) from [c0300e08] 
 (platform_device_del+0x78/0xac)
 | [c0300e08] (platform_device_del+0x78/0xac) from [c0301358] 
 (platform_device_unregister+0xc/0x18)

 The problem is that platform_device_del() releases each ressource in its
 tree. This does not work on platform_devices created by OF becuase they
 were never added via insert_resource(). As a consequence old-parent in
 __release_resource() is NULL and we explode while accessing -child.
 So I either I do something completly wrong _or_ nobody here tested the
 rmmod path of their driver.

 Wouldn't the correct fix be to call insert_resource somehow? The problem
 I have is that while of_platform_populate is all about parsing the DT
 and creating devices, the removal side has nothing to do with DT. So
 this should not be in the DT code. I think the core device code should
 be able to handle removal if the device creation side is done correctly.

 It looks to me like of_device_add either needs to call
 platform_device_add rather than device_add. I think the device name
 setting in platform_device_add should be a nop. If not, a check that the
 name is already set could be added.


 BTW, it looks like Grant has attempted this already:

Yup, things broke badly. Unfortunately the of_platform_device and
platform_device history doesn't treat resources in the same way. I
would like to merge the code, but I haven't been able to figure out a
clean way to do it. Looks like we do need the unpopulate function.

g.
--
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] ASoC: omap-mcbsp: Support SND_SOC_DAIFMT_CBM_CFS for omap3/4

2013-07-21 Thread Mark Brown
On Sun, Jul 21, 2013 at 06:24:01PM +0200, Michael Trimarchi wrote:
 Add SND_SOC_DAIFMT_CBM_CFS support for omap3/omap4. The patch was tested on
 a pandaboard-es board connected to the pcm1792a codec. mcbspx_fsx must
 configured as output and mcbspx_clkx must be configured as input.

Applied, thanks.


signature.asc
Description: Digital signature


OMAP baseline test results for Linux v3.11-rc2

2013-07-21 Thread Paul Walmsley

Here are some basic OMAP test results for Linux v3.11-rc2.
Logs and other details at:

http://www.pwsan.com/omap/testlogs/test_v3.11-rc2/20130721203314/


Test summary


Build: uImage:
Pass (14/14): n800_multi_omap2xxx, n800_only_a, omap1_defconfig,
  omap1_defconfig_1510innovator_only,
  omap1_defconfig_5912osk_only, omap2plus_defconfig,
  omap2plus_defconfig_2430sdp_only,
  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
  omap2plus_defconfig_omap2_4_only,
  omap2plus_defconfig_omap3_4_only,
  rmk_omap3430_ldp_allnoconfig,
  rmk_omap3430_ldp_oldconfig,
  rmk_omap4430_sdp_allnoconfig

Build: uImage+dtb:
Pass ( 3/ 3): am33xx_only/am335x-bone,
  omap2plus_defconfig/omap4-panda,
  omap2plus_defconfig/omap4-panda-es

Build: zImage:
Pass ( 1/ 1): omap2plus_defconfig

Boot to userspace:
FAIL ( 5/11): 2430sdp, 3530es3beagle, 3730beaglexm, 5912osk,
  am335xbonelt
Pass ( 6/11): 3517evm, 37xxevm, 4430es2panda, 4460pandaes,
  am335xbone, cmt3517

PM: chip retention via suspend:
FAIL ( 4/ 6): 2430sdp, 3530es3beagle, 3730beaglexm, 4430es2panda
Pass ( 2/ 6): 37xxevm, 4460pandaes

PM: chip retention via dynamic idle:
FAIL ( 5/ 6): 2430sdp, 3530es3beagle, 3730beaglexm, 4430es2panda,
  4460pandaes
Pass ( 1/ 6): 37xxevm

PM: chip off except CORE via suspend:
FAIL ( 1/ 1): 3730beaglexm

PM: chip off except CORE via dynamic idle:
FAIL ( 1/ 1): 3730beaglexm

PM: chip off via suspend:
FAIL ( 3/ 4): 3530es3beagle, 4430es2panda, 4460pandaes
Pass ( 1/ 4): 37xxevm

PM: chip off via dynamic idle:
FAIL ( 3/ 4): 3530es3beagle, 4430es2panda, 4460pandaes
Pass ( 1/ 4): 37xxevm


vmlinux object size
(delta in bytes from test_v3.11-rc1 (ad81f0545ef01ea651886dddac4bef6cec930092)):
   text data  bsstotal  kernel
   +658 +3200 +978  am33xx_only
   +350 +1920 +542  n800_multi_omap2xxx
   +318 +1920 +510  n800_only_a
   +490 +1920 +682  omap1_defconfig
   +554 +2240 +778  omap1_defconfig_1510innovator_only
   +490 +1920 +682  omap1_defconfig_5912osk_only
   +670 +3200 +990  omap2plus_defconfig
  +4834 +3200+5154  omap2plus_defconfig_2430sdp_only
   +618 +3840+1002  omap2plus_defconfig_cpupm
   +670 +2560 +926  omap2plus_defconfig_no_pm
   +670 +3200 +990  omap2plus_defconfig_omap2_4_only
   +670 +3200 +990  omap2plus_defconfig_omap3_4_only
   +336  +96  -72 +360  rmk_omap3430_ldp_allnoconfig
   +318 +1920 +510  rmk_omap3430_ldp_oldconfig
   +288  +96  -24 +360  rmk_omap4430_sdp_allnoconfig

Boot-time memory difference
(delta in bytes from test_v3.11-rc1 (ad81f0545ef01ea651886dddac4bef6cec930092))
  avail  rsrvd   high  freed  board  kconfig
  (no differences)

--
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


[GIT PULL] ARM: OMAP2+: PRCM: drop macros not currently in use

2013-07-21 Thread Paul Walmsley
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Hi Tony,

Sorry for the delay on this - wanted to make sure it passed the local
testbed before sending it upstream.

The following changes since commit 3b2f64d00c46e1e4e9bd0bb9bb12619adac27a4b:

  Linux 3.11-rc2 (2013-07-21 12:05:29 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/pjw/omap-pending.git 
tags/for-v3.11-rc/omap-fixes-a

for you to fetch changes up to 11dab344053f726fe17ede95aa52c1eea1258a66:

  ARM: OMAP5: PRM/CM: Cleanup unused header (2013-07-21 22:10:25 -0600)

- 
This series removes the currently-unused PRCM macros from
arch/arm/mach-omap2.

Basic test logs are available at:

http://www.pwsan.com/omap/testlogs/drop_unused_prcm_macros_v3.11-rc/20130721211401/

Once, years ago, we thought that it would be good to document the PRCM
register bits in the Linux codebase.  Most folks in the broader
community did not have access to the same documentation, so we thought
that they might be able to use these bits to fix bugs and improve the
code.

We were also able to autogenerate most of these macros, so it was
thought that defining them in advance would reduce the risk of error,
inconsistencies, and merge conflicts caused when patch sets
incrementally defined them by hand.

Well, nice thoughts.  But the first rationale was rendered partially
obsolete when TI started to release public TRM documentation PDFs at
some point in the OMAP3 timeframe.  (Despite their weaknesses, TI's
public OMAP TRMs remain the most useful public documentation available
for any ARM Linux SoC -- at least to the extent of my knowledge.)  And
then the current Linux development tropism towards
development-by-negative-diffstat obliterated the remainder of the
above two philosophies.

So, for the few, the masochistic, out there who wish to continue
developing TI PRCM code, I would ask that you resurrect any
additionally-needed macros from these commits, rather than writing
them manually.  Purely for the sake of a pleasant atavism, perhaps; the
way one appreciates a used bookstore, or a video rental store...

And thanks to the upstream maintainers for being patient while we
adjust.

- 
Rajendra Nayak (4):
  ARM: OMAP2: PRM/CM: Cleanup unused header
  ARM: OMAP3: PRM/CM: Cleanup unused header
  ARM: OMAP4: PRM/CM: Cleanup unused header
  ARM: OMAP5: PRM/CM: Cleanup unused header

 arch/arm/mach-omap2/cm-regbits-24xx.h   |  318 
 arch/arm/mach-omap2/cm-regbits-33xx.h   |  749 
 arch/arm/mach-omap2/cm-regbits-34xx.h   |  632 ---
 arch/arm/mach-omap2/cm-regbits-44xx.h   | 1558 ---
 arch/arm/mach-omap2/cm-regbits-54xx.h   | 1633 
 arch/arm/mach-omap2/omap_hwmod_54xx_data.c  |1 -
 arch/arm/mach-omap2/powerdomains54xx_data.c |1 -
 arch/arm/mach-omap2/prm-regbits-24xx.h  |  247 ---
 arch/arm/mach-omap2/prm-regbits-33xx.h  |  306 ---
 arch/arm/mach-omap2/prm-regbits-34xx.h  |  481 -
 arch/arm/mach-omap2/prm-regbits-44xx.h  | 2226 --
 arch/arm/mach-omap2/prm-regbits-54xx.h  | 2701 ---
 12 files changed, 10853 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/prm-regbits-54xx.h
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBAgAGBQJR7Lr/AAoJEMePsQ0LvSpLPCwP/1DiY3jzuSubA9N51NwmnROw
1LZS9ZMcaQ6Mr24pC03wDyQ81vSl+voY54VMyu4zvbt+qJyHkVabpXn3pGyEyzub
fap7VyC/Szfx0GtuuAAhXYAPn6qwuKJ122jbgtEe5x4eEOpvY/X+ArYcwgxp3uG0
CmkJb1O5FSyY+AW3isPQPrrKUIdy98s12v0q1xdN0eTRua31D7I1TPutAD4LbWQ4
oUbFqG4hybFLlXLZvJF4BrPVMFld5gPVDFvdp2jdtH5Kcyp2bRXXv5xmKHhMsxWa
iQnEP8SyLyXI1nlBfFXJ0x2k5G0U0/GPAg+CaO/zhjS/GKB1ALysflVoN+z9oEh6
EmOC9uxwnloWHbTyAsbm0rkkrOJeC07vghTYzQZX8y3k89LBg3L4JEBOkZ2T6Pbj
VR6926W+SbQee6s13t3uyYbYievXtLmj5nYRbsZc4IwtXoHvuKxvMUVFALsABiXx
4osgemCNEgnuff1xYBv0LEniHAZwphfSuXw+GFYb2hXbRNjOLMzElZkCmddfpSXy
wO0nPKMAuT3vbHZ9d1ly4x3BFXFFaOJa1R88/RfRhFnmz0Yut3p2AvG0We7a+5zT
us7S8EtZtePqTkBvlF4HpMXKtcN1ZkrM/Nj+OfV3LObyIVNLjuzt3pOZgwEaL8/I
/F87lgCvP2OvTuy3eABF
=NoFh
-END PGP SIGNATURE-
--
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 02/18] MAINTAINERS: ARM: OMAP2/3: Remove unused clockdomain files

2013-07-21 Thread Paul Walmsley
On Sun, 21 Jul 2013, Joe Perches wrote:

 commit 4bd5259e53a (ARM: OMAP2/3: clockdomain/PRM/CM: move the
 low-level clockdomain functions into PRM/CM) deleted the files,
 update the pattern.
 
 Signed-off-by: Joe Perches j...@perches.com
 cc: Paul Walmsley p...@pwsan.com
 cc: Rajendra Nayak rna...@ti.com
 cc: Santosh Shilimkar santosh.shilim...@ti.com

I don't object to the content of this patch, but Cesar 
Eduardo Barros posted a patch for this already (and cc'ed you) back 
in March:

http://lkml.indiana.edu/hypermail/linux/kernel/1303.0/00904.html

Please take his patch instead, or credit him in your patch.


- Paul
--
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 03/18] MAINTAINERS: OMAP POWERDOMAIN, update patterns

2013-07-21 Thread Paul Walmsley
On Sun, 21 Jul 2013, Joe Perches wrote:

 commit 498153995b9 (ARM: OMAP2+: powerdomain/PRM: move the
 low-level powerdomain) renamed the files, update the patterns.
 
 Signed-off-by: Joe Perches j...@perches.com
 cc: Paul Walmsley p...@pwsan.com
 cc: Rajendra Nayak rna...@ti.com
 cc: Santosh Shilimkar santosh.shilim...@ti.com

I don't object to the content of this patch, but Cesar 
Eduardo Barros posted a patch for this already (and cc'ed you) back 
in March:

http://lkml.indiana.edu/hypermail/linux/kernel/1303.0/00904.html

The regex used in his pattern is also more accurate.  Please take his 
patch instead, or credit him in your patch and use the cm*.[ch]/prm*.[ch] 
notation from his patch.


- Paul
--
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 03/18] MAINTAINERS: OMAP POWERDOMAIN, update patterns

2013-07-21 Thread Joe Perches
On Mon, 2013-07-22 at 05:03 +, Paul Walmsley wrote:
 On Sun, 21 Jul 2013, Joe Perches wrote:
 
  commit 498153995b9 (ARM: OMAP2+: powerdomain/PRM: move the
  low-level powerdomain) renamed the files, update the patterns.
  
  Signed-off-by: Joe Perches j...@perches.com
  cc: Paul Walmsley p...@pwsan.com
  cc: Rajendra Nayak rna...@ti.com
  cc: Santosh Shilimkar santosh.shilim...@ti.com
 
 I don't object to the content of this patch, but Cesar 
 Eduardo Barros posted a patch for this already (and cc'ed you) back 
 in March:
 
 http://lkml.indiana.edu/hypermail/linux/kernel/1303.0/00904.html
 
 The regex used in his pattern is also more accurate.  Please take his 
 patch instead, or credit him in your patch and use the cm*.[ch]/prm*.[ch] 
 notation from his patch.

(cc'ing Cesar)

Hi Paul.

I'm not the MAINTAINERS maintainer and I don't
pick up patches.

I certainly don't object at all if Andrew picks
up the patches you mentioned and drops these 2.

Andrew, here are links to Cesar's original patches
https://patchwork.kernel.org/project/LKML/list/?submitter=3513
https://lkml.org/lkml/2013/3/2/185

It seems a few are similar/duplicated to these 18.

Cesar, maybe you should resend yours.  I thought
they were applied and forgot all about them.

cheers, Joe

--
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] ARM: OMAP3EVM: Marking omap3_evm_display_init() with CONFIG_BROKEN

2013-07-21 Thread Paul Walmsley
From: Lokesh Vutla lokeshvu...@ti.com

On 37xx EVM non-dt boot fails with current mainline,
because of broken GPIO numbering in the board file
that uses hardcoded GPIOs.

So marking omap3_evm_display_init() with CONFIG_BROKEN
for now as suggested by Tony as per the below link:
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg90399.html

Signed-off-by: Lokesh Vutla lokeshvu...@ti.com
Tested-by: Paul Walmsley p...@pwsan.com
Signed-off-by: Tony Lindgren t...@atomide.com

---

Hi -stablers,

OMAP37xx EVM does not boot on v3.10 without this patch, so please consider 
it for the v3.10 stable releases.  It is upstream already as commit ID 
8fb61e8d84e673eebf31e564a83bb71a50b1ed48.  Perhaps if I had managed to 
test it sooner, we could have gotten it up during v3.10-rc, but, alas, 
stable it is...

 arch/arm/mach-omap2/board-omap3evm.c |4 
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/mach-omap2/board-omap3evm.c 
b/arch/arm/mach-omap2/board-omap3evm.c
index f76d0de..278bf25 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -174,6 +174,7 @@ static struct panel_sharp_ls037v7dw01_data 
omap3_evm_lcd_data = {
.ud_gpio = OMAP3EVM_LCD_PANEL_UD,
 };
 
+#ifdef CONFIG_BROKEN
 static void __init omap3_evm_display_init(void)
 {
int r;
@@ -193,6 +194,7 @@ static void __init omap3_evm_display_init(void)
else
gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
 }
+#endif
 
 static struct omap_dss_device omap3_evm_lcd_device = {
.name   = lcd,
@@ -715,7 +717,9 @@ static void __init omap3_evm_init(void)
 
omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL);
omap3evm_init_smsc911x();
+#ifdef CONFIG_BROKEN
omap3_evm_display_init();
+#endif
omap3_evm_wl12xx_init();
omap_twl4030_audio_init(omap3evm, NULL);
 }
-- 
1.7.9.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
--
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 03/18] MAINTAINERS: OMAP POWERDOMAIN, update patterns

2013-07-21 Thread Paul Walmsley
Hi Joe,

On Sun, 21 Jul 2013, Joe Perches wrote:

 I certainly don't object at all if Andrew picks
 up the patches you mentioned and drops these 2.
 
 Andrew, here are links to Cesar's original patches
 https://patchwork.kernel.org/project/LKML/list/?submitter=3513
 https://lkml.org/lkml/2013/3/2/185
 
 It seems a few are similar/duplicated to these 18.
 
 Cesar, maybe you should resend yours.  I thought
 they were applied and forgot all about them.

Another possibility, assuming that there are some fixes from your series 
that Cesar didn't have, would be for you to take his patches into the 
series that you're sending to Andrew, assuming that you agree with them.  
Then we'd benefit from the superset of fixes.

regards,


- Paul
--
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 3/4] arm: dts: Add USB phy nodes for AM33XX

2013-07-21 Thread George Cherian

On 7/20/2013 9:11 AM, George Cherian wrote:

On 7/20/2013 12:12 AM, Sebastian Andrzej Siewior wrote:

On 07/19/2013 08:33 PM, Sergei Shtylyov wrote:

Hello.

Hello,


usb: usb@4740 {
 compatible = ti,am33xx-usb;
  usb0_phy: phy@47401300 {
 compatible = ti,am335x-usb-phy;
 }
 usb0: usb@47401000 {
 musb0: usb@47401400 {
 compatible = mg,musbmhdrc;
 }
 }
 usb1_phy: phy@47402300 {
 compatible = ti,am335x-usb-phy;
 }
 usb1: usb@47402000 {
 musb1: usb@47402400 {
 compatible = mg,musbmhdrc;
 }
 }
}


How about something like this ?

Here am making
wrapper - musb instance 0 - phy0
wrapper - musb instance 1 - phy1

musb: usb@4740 {
compatible = ti,musb-am33xx;
reg = 0x4740 0x1000;
ranges;
#address-cells = 1;
#size-cells = 1;
interrupts = 17;
ti,hwmods = usb_otg_hs;

usb0@47401000 {
reg = 0x47401000 0x800;
interrupts = 18;
interrupt-names = mc;
multipoint = 1;
num-eps = 16;
ram-bits = 12;
port-mode = 3;
power = 250;
phys = phy1;
phy-names = am335x-usb0;
phy1: am335x-usb0 {
compatible = ti,am335x-usb2;
#phy-cells = 0;
id= 0;
};
};

usb1@47401800 {
reg = 0x47401800 0x800;
interrupts = 19;
interrupt-names = mc;
multipoint = 1;
num-eps = 16;
ram-bits = 12;
port-mode = 3;
power = 250;
phys = phy2;
phy-names = am335x-usb1;
phy2: am335x-usb1 {
compatible = ti,am335x-usb2;
#phy-cells = 0;
id= 1;
};
};

};

--
-George

--
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