RE: [PATCH] irqchip: gic: Don't complain in gic_get_cpumask() if UP system

2013-07-20 Thread Bedia, Vaibhav
Hi,

On Sat, Jul 06, 2013 at 05:09:33, Stephen Boyd wrote:
> In a uniprocessor implementation the interrupt processor targets
> registers are read-as-zero/write-ignored (RAZ/WI). Unfortunately
> gic_get_cpumask() will print a critical message saying
> 
>  GIC CPU mask not found - kernel will fail to boot.
> 
> if these registers all read as zero, but there won't actually be
> a problem on uniprocessor systems and the kernel will boot just
> fine. Skip this check if we're running a UP kernel or if we
> detect that the hardware only supports a single processor.
> 
> Cc: Nicolas Pitre 
> Cc: Russell King 
> Signed-off-by: Stephen Boyd 
> ---
> 
> Maybe we should just drop the check entirely? It looks like it may
> just be debug code that won't ever trigger in practice, even on the
> 11MPCore that caused this code to be introduced.
> 

Apologies if I missed v2 of this patch if there was one. I could not
locate it in my inbox or the list archives.

We have a yet to be released single-core A9 MPCore system (AM437x) which
needs to co-exist in omap2plus_defconfig wherein NR_CPUS is set to 2. 
This currently leads to the "GIC CPU mask not found..." being printed
twice during bootup. If the check is really some debug code, can it be
completely dropped?

Regards,
Vaibhav B.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] irqchip: gic: Don't complain in gic_get_cpumask() if UP system

2013-07-20 Thread Bedia, Vaibhav
Hi,

On Sat, Jul 06, 2013 at 05:09:33, Stephen Boyd wrote:
 In a uniprocessor implementation the interrupt processor targets
 registers are read-as-zero/write-ignored (RAZ/WI). Unfortunately
 gic_get_cpumask() will print a critical message saying
 
  GIC CPU mask not found - kernel will fail to boot.
 
 if these registers all read as zero, but there won't actually be
 a problem on uniprocessor systems and the kernel will boot just
 fine. Skip this check if we're running a UP kernel or if we
 detect that the hardware only supports a single processor.
 
 Cc: Nicolas Pitre n...@linaro.org
 Cc: Russell King rmk+ker...@arm.linux.org.uk
 Signed-off-by: Stephen Boyd sb...@codeaurora.org
 ---
 
 Maybe we should just drop the check entirely? It looks like it may
 just be debug code that won't ever trigger in practice, even on the
 11MPCore that caused this code to be introduced.
 

Apologies if I missed v2 of this patch if there was one. I could not
locate it in my inbox or the list archives.

We have a yet to be released single-core A9 MPCore system (AM437x) which
needs to co-exist in omap2plus_defconfig wherein NR_CPUS is set to 2. 
This currently leads to the GIC CPU mask not found... being printed
twice during bootup. If the check is really some debug code, can it be
completely dropped?

Regards,
Vaibhav B.

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


RE: [RFC PATCH 0/2] cpufreq/regulator: Limit minimum voltage only

2013-04-22 Thread Bedia, Vaibhav
(removing Anil's email-id since it's no longer valid)

On Sat, Apr 20, 2013 at 05:54:10, Kondratiuk, Taras wrote:
> On 04/19/2013 07:21 PM, Nishanth Menon wrote:
> > On 14:55-20130419, Taras Kondratiuk wrote:
> >> Using a "voltage tolerance" for doing DVFS is not a proper way.
> >> It leads to a few issues:
> >> - voltage is limited to a narrow range near OPP voltage,
> >>   so other consumers of the same regulator can't set their own constraints
> >>   if they don't overlap with this narrow range. No ganged rails :(
> >> - usually OPP voltage is an absolute minimum voltage
> >>   necessary for correct work (not taking into account AVS).

The absolute minimum voltage part is not applicable for all SoCs.
In case of AM335x there a nominal voltage that is specified in the
OPP table and there's a plus/minus tolerance at the IO level within
which things are guaranteed to work. To lower the power consumption
we would want to go as low as possible without violating the
requirement at the SoC boundary level. I don't know how the OPP voltages
are speced for non TI devices but if there's a permissible range I guess
everyone would like to set the voltage near the lower end of the spectrum.

> >>   Applying plus/minus tolerance can lead to an unstable device.
> >>   For example omap-cpufreq has 4% tolerance configured,
> >>   so for OMAP4430 MPU OPP50 we get 0.984V instead of 1.025V. 

So if you set the tolerance to 0% instead of removing it completely
won't the problem go away?

> > there is a reason for this - board level IRDROP and the real PMIC
> > accuracy compared to the SoC assumption about the PMIC accuracy.
> 
> I don't see how current implementation of voltage-tolerance can help with 
> this.
> 

It does help (more below).

> >
> > That said, I had been always been a little confused with the usage
> > in AM335x. For that matter, I dont even think this is constrainted to
> > TI SoC usage, other SoCs also probably have the same pain.
> >
> > How does it actually work?
> 
> I think this is a question to Afzal as he is an original author
> of commit 42daffd2d6c665716d442d518022ecaad17ddf64 which later
> migrated to cpufreq-cpu0 driver.
> 
> I can only guess...
> Without tolerance cpufreq requests the same value for min_uV and max_uV.
> So regulator have to set an exact voltage value on the rail,
> which is not always possible if different PMICs can be used for the SoC.
> For example in v3.9-rc7 voltage-tolerance is used *only*
> in AM33xx which can use two PMICs: TPS65217 and TPS65910.
> These PMICs have different voltage steps so they can't set the same voltage.
> I think this was the reason for adding voltage-tolerance.
> 

The PMICs have the same step size of 12.5mV but unfortunately they don't have
a register setting to meet the nominal voltage requirement for all the OPPs.
As per the SoC datasheet, for OPP120 the nominal voltage is 1.26V but the 
closest
that the PMIC outputs can come is either 1.25V or 1.275V. Now i think there's
been some confusion in the implementation phase due to things like board level
IR drops and variations mentioned in the PMIC datasheets which has resulted in
the tolerance being used both in am33xx.dtsi and then again in the cpufreq 
driver.

Ignoring the PMIC variations and board level IR drops for moment, the way I 
think
it should have been done is - OPP entries have the nominal voltages and we 
specify
the tolerance either in % in the DT file. The cpufreq driver looks up the 
nominal
voltage from the OPP table and then requests the regulator framework to factor 
in
the tolerance and then select the lowest permissible voltage. 

> *But* there is a trick.
> If you compare MPU OPP voltages in AM335x datasheet and am33xx.dtsi
> you will see that am33xx.dtsi has already applied tolerance (2%) on top
> of nominal voltages.
> So final range passed to regulator is [Vnom; Vnom+2*tol]
> instead of [Vnom-tol; Vnom+tol].
> That's why it works for AM335x, but IMHO it is a hack.

I agree. It sort of ended up a hack that needs to be fixed by removing the
additional tolerance in am33xx.dtsi.

> That patch broke omap-cpufreq functionality, since mach-omap2/opp_data.c
> files doesn't have tolerance added on top of nominal voltages.
> 

Again, if you specify 0% as the tolerance this would be fine, no?

> regulator_set_voltage_min() should solve AM335x issue
> without introducing voltage-tolerance hack.

No, we want to pass on all the factors to be considered to the appropriate
framework which in this case is the regulator framework and let it decide
the min voltage. If you consider multiple users like ABB and AVS, I think
it makes much more sense to have the requirements from the different users
being passed on to the regulator framework and letting it decide what works
for all of them.

> Probably I need to add one more patch to the series which will remove
> voltage-tolerance from am335x.dtsi and set CPU voltages back to nominal.
> 
> >
> > Lets say ntarget/Vnom has PMIC tolerance of 5% 

RE: [RFC PATCH 0/2] cpufreq/regulator: Limit minimum voltage only

2013-04-22 Thread Bedia, Vaibhav
(removing Anil's email-id since it's no longer valid)

On Sat, Apr 20, 2013 at 05:54:10, Kondratiuk, Taras wrote:
 On 04/19/2013 07:21 PM, Nishanth Menon wrote:
  On 14:55-20130419, Taras Kondratiuk wrote:
  Using a voltage tolerance for doing DVFS is not a proper way.
  It leads to a few issues:
  - voltage is limited to a narrow range near OPP voltage,
so other consumers of the same regulator can't set their own constraints
if they don't overlap with this narrow range. No ganged rails :(
  - usually OPP voltage is an absolute minimum voltage
necessary for correct work (not taking into account AVS).

The absolute minimum voltage part is not applicable for all SoCs.
In case of AM335x there a nominal voltage that is specified in the
OPP table and there's a plus/minus tolerance at the IO level within
which things are guaranteed to work. To lower the power consumption
we would want to go as low as possible without violating the
requirement at the SoC boundary level. I don't know how the OPP voltages
are speced for non TI devices but if there's a permissible range I guess
everyone would like to set the voltage near the lower end of the spectrum.

Applying plus/minus tolerance can lead to an unstable device.
For example omap-cpufreq has 4% tolerance configured,
so for OMAP4430 MPU OPP50 we get 0.984V instead of 1.025V. 

So if you set the tolerance to 0% instead of removing it completely
won't the problem go away?

  there is a reason for this - board level IRDROP and the real PMIC
  accuracy compared to the SoC assumption about the PMIC accuracy.
 
 I don't see how current implementation of voltage-tolerance can help with 
 this.
 

It does help (more below).

 
  That said, I had been always been a little confused with the usage
  in AM335x. For that matter, I dont even think this is constrainted to
  TI SoC usage, other SoCs also probably have the same pain.
 
  How does it actually work?
 
 I think this is a question to Afzal as he is an original author
 of commit 42daffd2d6c665716d442d518022ecaad17ddf64 which later
 migrated to cpufreq-cpu0 driver.
 
 I can only guess...
 Without tolerance cpufreq requests the same value for min_uV and max_uV.
 So regulator have to set an exact voltage value on the rail,
 which is not always possible if different PMICs can be used for the SoC.
 For example in v3.9-rc7 voltage-tolerance is used *only*
 in AM33xx which can use two PMICs: TPS65217 and TPS65910.
 These PMICs have different voltage steps so they can't set the same voltage.
 I think this was the reason for adding voltage-tolerance.
 

The PMICs have the same step size of 12.5mV but unfortunately they don't have
a register setting to meet the nominal voltage requirement for all the OPPs.
As per the SoC datasheet, for OPP120 the nominal voltage is 1.26V but the 
closest
that the PMIC outputs can come is either 1.25V or 1.275V. Now i think there's
been some confusion in the implementation phase due to things like board level
IR drops and variations mentioned in the PMIC datasheets which has resulted in
the tolerance being used both in am33xx.dtsi and then again in the cpufreq 
driver.

Ignoring the PMIC variations and board level IR drops for moment, the way I 
think
it should have been done is - OPP entries have the nominal voltages and we 
specify
the tolerance either in % in the DT file. The cpufreq driver looks up the 
nominal
voltage from the OPP table and then requests the regulator framework to factor 
in
the tolerance and then select the lowest permissible voltage. 

 *But* there is a trick.
 If you compare MPU OPP voltages in AM335x datasheet and am33xx.dtsi
 you will see that am33xx.dtsi has already applied tolerance (2%) on top
 of nominal voltages.
 So final range passed to regulator is [Vnom; Vnom+2*tol]
 instead of [Vnom-tol; Vnom+tol].
 That's why it works for AM335x, but IMHO it is a hack.

I agree. It sort of ended up a hack that needs to be fixed by removing the
additional tolerance in am33xx.dtsi.

 That patch broke omap-cpufreq functionality, since mach-omap2/opp_data.c
 files doesn't have tolerance added on top of nominal voltages.
 

Again, if you specify 0% as the tolerance this would be fine, no?

 regulator_set_voltage_min() should solve AM335x issue
 without introducing voltage-tolerance hack.

No, we want to pass on all the factors to be considered to the appropriate
framework which in this case is the regulator framework and let it decide
the min voltage. If you consider multiple users like ABB and AVS, I think
it makes much more sense to have the requirements from the different users
being passed on to the regulator framework and letting it decide what works
for all of them.

 Probably I need to add one more patch to the series which will remove
 voltage-tolerance from am335x.dtsi and set CPU voltages back to nominal.
 
 
  Lets say ntarget/Vnom has PMIC tolerance of 5% (SoC tolerance assumed
  for OPP voltage documented in data manual for the SoC), say the
 

RE: [PATCHv3] driver: serial: prevent UART console idle on suspend while using "no_console_suspend"

2013-04-15 Thread Bedia, Vaibhav
Hi Kevin,

On Thu, Apr 11, 2013 at 19:45:33, Kevin Hilman wrote:
> Kevin Hilman  writes:
> 
> > "Bedia, Vaibhav"  writes:
> >
> >> Hi Sourav,
> >>
> >> On Wed, Apr 10, 2013 at 15:13:44, Poddar, Sourav wrote:
> >> [...]
> >>> Yes, had a look at that and found your situation similar to UART.
> >>> 
> >>> But how exactly this gets used, I mean I don't  see any drivers/ in 
> >>> mainline
> >>> making use of this compatible string  "ti,am3352-ocmcram".  ?
> >>
> >> OCMC clock is enabled during bootup (not sure whether that's the h/w
> >> default or ROM does it) since the initial bootloader runs from there.
> >> By marking the corresponding hwmod with HWMOD_INIT_NO_IDLE we leave the
> >> clock running. Right now the sram code under arch/arm/plat-omap/ is what
> >> manages the OCMC. I guess this needs to move somewhere under drivers/
> >> and start managing the clocks. Even then we'll need a mechanism
> >> to leave the clocks running as part of the kernel suspend process
> >> since the assembly code which runs at the fag end of the suspend
> >> process runs out of OCMC and hence we can't cut its clock.
> >>
> >> On AM335x, the OCMC clock is cut to have PER power domain transition
> >> but that's done in the WKUP-M3 firmware when going down. During the
> >> wakeup sequence, WKUP-M3 re-enables the OCMC clock so that when the
> >> kernel resumes the h/w state is same.
> >
> > OK, but *today*, in *mainline*, where in the linux kernel (not the M3
> > firmware) is the OCMRAM clock cut during suspend?
> >
> > From what I can see, there is no driver for this device, so there are no
> > system PM calls being done for that device, and thus no omap_device
> > calls being done for that device, so the no_idle_on_suspend has no
> > effect.
> 
> OK, I think I confused things here, sorry. I was thinking runtime PM
> here, but wrote system PM.  The no_idle_on_suspend feature only affects
> system PM, and the omap_device calls will still be called during system
> PM, even without a driver.
> 
> That being said, the commit below[1], added in v3.6 should prevent the
> any automaic clock gating for devices without drivers bound.  Since
> there is no driver for the OCM RAM block, you shouldn't be affected by
> the automatic idle on suspend anyways.
> 
> So, my proposal is that Sourav remove that flag from the AM33xx hwmod
> when he removes this feature.
> 

Apologies for the delayed response. I was out of office for a couple of
days.

I don't recall the exact kernel version in which I ended up adding this flag
to keep the clock running but yes after the change mentioned below this flag
is not required. I just did a sanity check by removing this flag on v3.8
kernel and things work fine across suspend.

Regards,
Vaibhav 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCHv3] driver: serial: prevent UART console idle on suspend while using no_console_suspend

2013-04-15 Thread Bedia, Vaibhav
Hi Kevin,

On Thu, Apr 11, 2013 at 19:45:33, Kevin Hilman wrote:
 Kevin Hilman khil...@linaro.org writes:
 
  Bedia, Vaibhav vaibhav.be...@ti.com writes:
 
  Hi Sourav,
 
  On Wed, Apr 10, 2013 at 15:13:44, Poddar, Sourav wrote:
  [...]
  Yes, had a look at that and found your situation similar to UART.
  
  But how exactly this gets used, I mean I don't  see any drivers/ in 
  mainline
  making use of this compatible string  ti,am3352-ocmcram.  ?
 
  OCMC clock is enabled during bootup (not sure whether that's the h/w
  default or ROM does it) since the initial bootloader runs from there.
  By marking the corresponding hwmod with HWMOD_INIT_NO_IDLE we leave the
  clock running. Right now the sram code under arch/arm/plat-omap/ is what
  manages the OCMC. I guess this needs to move somewhere under drivers/
  and start managing the clocks. Even then we'll need a mechanism
  to leave the clocks running as part of the kernel suspend process
  since the assembly code which runs at the fag end of the suspend
  process runs out of OCMC and hence we can't cut its clock.
 
  On AM335x, the OCMC clock is cut to have PER power domain transition
  but that's done in the WKUP-M3 firmware when going down. During the
  wakeup sequence, WKUP-M3 re-enables the OCMC clock so that when the
  kernel resumes the h/w state is same.
 
  OK, but *today*, in *mainline*, where in the linux kernel (not the M3
  firmware) is the OCMRAM clock cut during suspend?
 
  From what I can see, there is no driver for this device, so there are no
  system PM calls being done for that device, and thus no omap_device
  calls being done for that device, so the no_idle_on_suspend has no
  effect.
 
 OK, I think I confused things here, sorry. I was thinking runtime PM
 here, but wrote system PM.  The no_idle_on_suspend feature only affects
 system PM, and the omap_device calls will still be called during system
 PM, even without a driver.
 
 That being said, the commit below[1], added in v3.6 should prevent the
 any automaic clock gating for devices without drivers bound.  Since
 there is no driver for the OCM RAM block, you shouldn't be affected by
 the automatic idle on suspend anyways.
 
 So, my proposal is that Sourav remove that flag from the AM33xx hwmod
 when he removes this feature.
 

Apologies for the delayed response. I was out of office for a couple of
days.

I don't recall the exact kernel version in which I ended up adding this flag
to keep the clock running but yes after the change mentioned below this flag
is not required. I just did a sanity check by removing this flag on v3.8
kernel and things work fine across suspend.

Regards,
Vaibhav 

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


RE: [PATCHv3] driver: serial: prevent UART console idle on suspend while using "no_console_suspend"

2013-04-10 Thread Bedia, Vaibhav
Hi Sourav,

On Wed, Apr 10, 2013 at 15:13:44, Poddar, Sourav wrote:
[...]
> Yes, had a look at that and found your situation similar to UART.
> 
> But how exactly this gets used, I mean I don't  see any drivers/ in mainline
> making use of this compatible string  "ti,am3352-ocmcram".  ?

OCMC clock is enabled during bootup (not sure whether that's the h/w
default or ROM does it) since the initial bootloader runs from there.
By marking the corresponding hwmod with HWMOD_INIT_NO_IDLE we leave the
clock running. Right now the sram code under arch/arm/plat-omap/ is what
manages the OCMC. I guess this needs to move somewhere under drivers/
and start managing the clocks. Even then we'll need a mechanism
to leave the clocks running as part of the kernel suspend process
since the assembly code which runs at the fag end of the suspend
process runs out of OCMC and hence we can't cut its clock.

On AM335x, the OCMC clock is cut to have PER power domain transition
but that's done in the WKUP-M3 firmware when going down. During the
wakeup sequence, WKUP-M3 re-enables the OCMC clock so that when the
kernel resumes the h/w state is same.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCHv3] driver: serial: prevent UART console idle on suspend while using "no_console_suspend"

2013-04-10 Thread Bedia, Vaibhav
Hi Sourav, Kevin,

On Wed, Apr 10, 2013 at 11:37:28, Poddar, Sourav wrote:
> Hi,
> On Wednesday 10 April 2013 12:37 AM, Kevin Hilman wrote:
> > Sourav Poddar  writes:
> >
> >> Hi Kevin,
> >> On Friday 05 April 2013 11:10 PM, Kevin Hilman wrote:
> >>> Sourav Poddar   writes:
> >>>
>  With dt boot, uart wakeup after suspend is non functional while using
>  "no_console_suspend" in the bootargs. With "no_console_suspend" used, we
>  should prevent the runtime suspend of the uart port which is getting used
>  as an console.
> 
>  Cc: Santosh Shilimkar
>  Cc: Felipe Balbi
>  Cc: Rajendra nayak
>  Tested on omap5430evm, omap4430sdp.
> 
>  Signed-off-by: Sourav Poddar
> >>> Rather than make these special checks inside the driver's runtime PM
> >>> callbacks, you should just disable runtime PM (pm_runtime_disable())
> >>>
> >>> Then, this should be broken into 2 patches.
> >>>
> >>> 1) serial core: add the '->is_console' flag.  (nit on naming: don't call
> >>>  it port_is_console, since the struct is already a uart_port)
> >>>
> >>> 2) In the OMAP UART driver's ->prepare callback, check the is_console flag
> >>>  and pm_runtime_disable() accordingly  (then pm_runtime_enable() in
> >>>  the drivers's ->complete callback.
> >>>
> >>> Kevin
> >> I was working on your above suggestions, but realised there is not
> >> only console
> >> uart which has the requirement of keeping the clocks enabled while going on
> >> suspend.
> >>
> >> If you see arch/arm/boot/dts/am33xx.dtsi, there is a ocmcram which has
> >> "no_idle_on_suspend" property used.
> > Can you please ask the AM33xx folks how (and why) this is being used?
> >
> > I don't see/find a driver for this device in mainline, so without a
> > driver this flag will not be used.
> >
> Looping in Vaibhav Bedia for ocmcram..
> 
> [Vaibhav]:
>There is a discussion going on about a cleaner way of handling
>ti, no_idle_on_suspend" part (as this is a sort of hack). We got a way
>around for UART ($subject) by making serial core/driver handle this 
> for us.
>But with this, we will delete codes around "no_idle_on_suspend" flag in
>omap_device file.
> 
>But, we realised that its not only UART which requires the clocks to 
> be active
>whie going for suspend. There is a dts entry for ocmcram also.
> 
>As Kevin also pointed out, we don't see a driver for this device in 
> mainline, It would be
>great if you can explain how its getting used?
> 
>You can find the complete discussion on v3 here:
>   https://lkml.org/lkml/2013/4/5/239
> 

The flag in question is used to ensure that the clock to OCMC RAM is not
disabled by the PM code.

>From the changelog which added this flag:

"Note: OCMC RAM is part of the PER power domain and supports
 retention. The assembly code for low power entry/exit will
 run from OCMC RAM. To ensure that the OMAP PM code does not
 attempt to disable the clock to OCMC RAM as part of the
 suspend process add the no_idle_on_suspend flag."

We had discussed about the usage of this flag in the RFC version
of the patch [1].

Regards,
Vaibhav

[1] 
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-November/129510.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCHv3] driver: serial: prevent UART console idle on suspend while using no_console_suspend

2013-04-10 Thread Bedia, Vaibhav
Hi Sourav, Kevin,

On Wed, Apr 10, 2013 at 11:37:28, Poddar, Sourav wrote:
 Hi,
 On Wednesday 10 April 2013 12:37 AM, Kevin Hilman wrote:
  Sourav Poddarsourav.pod...@ti.com  writes:
 
  Hi Kevin,
  On Friday 05 April 2013 11:10 PM, Kevin Hilman wrote:
  Sourav Poddarsourav.pod...@ti.com   writes:
 
  With dt boot, uart wakeup after suspend is non functional while using
  no_console_suspend in the bootargs. With no_console_suspend used, we
  should prevent the runtime suspend of the uart port which is getting used
  as an console.
 
  Cc: Santosh Shilimkarsantosh.shilim...@ti.com
  Cc: Felipe Balbiba...@ti.com
  Cc: Rajendra nayakrna...@ti.com
  Tested on omap5430evm, omap4430sdp.
 
  Signed-off-by: Sourav Poddarsourav.pod...@ti.com
  Rather than make these special checks inside the driver's runtime PM
  callbacks, you should just disable runtime PM (pm_runtime_disable())
 
  Then, this should be broken into 2 patches.
 
  1) serial core: add the '-is_console' flag.  (nit on naming: don't call
   it port_is_console, since the struct is already a uart_port)
 
  2) In the OMAP UART driver's -prepare callback, check the is_console flag
   and pm_runtime_disable() accordingly  (then pm_runtime_enable() in
   the drivers's -complete callback.
 
  Kevin
  I was working on your above suggestions, but realised there is not
  only console
  uart which has the requirement of keeping the clocks enabled while going on
  suspend.
 
  If you see arch/arm/boot/dts/am33xx.dtsi, there is a ocmcram which has
  no_idle_on_suspend property used.
  Can you please ask the AM33xx folks how (and why) this is being used?
 
  I don't see/find a driver for this device in mainline, so without a
  driver this flag will not be used.
 
 Looping in Vaibhav Bedia for ocmcram..
 
 [Vaibhav]:
There is a discussion going on about a cleaner way of handling
ti, no_idle_on_suspend part (as this is a sort of hack). We got a way
around for UART ($subject) by making serial core/driver handle this 
 for us.
But with this, we will delete codes around no_idle_on_suspend flag in
omap_device file.
 
But, we realised that its not only UART which requires the clocks to 
 be active
whie going for suspend. There is a dts entry for ocmcram also.
 
As Kevin also pointed out, we don't see a driver for this device in 
 mainline, It would be
great if you can explain how its getting used?
 
You can find the complete discussion on v3 here:
   https://lkml.org/lkml/2013/4/5/239
 

The flag in question is used to ensure that the clock to OCMC RAM is not
disabled by the PM code.

From the changelog which added this flag:

Note: OCMC RAM is part of the PER power domain and supports
 retention. The assembly code for low power entry/exit will
 run from OCMC RAM. To ensure that the OMAP PM code does not
 attempt to disable the clock to OCMC RAM as part of the
 suspend process add the no_idle_on_suspend flag.

We had discussed about the usage of this flag in the RFC version
of the patch [1].

Regards,
Vaibhav

[1] 
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-November/129510.html
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCHv3] driver: serial: prevent UART console idle on suspend while using no_console_suspend

2013-04-10 Thread Bedia, Vaibhav
Hi Sourav,

On Wed, Apr 10, 2013 at 15:13:44, Poddar, Sourav wrote:
[...]
 Yes, had a look at that and found your situation similar to UART.
 
 But how exactly this gets used, I mean I don't  see any drivers/ in mainline
 making use of this compatible string  ti,am3352-ocmcram.  ?

OCMC clock is enabled during bootup (not sure whether that's the h/w
default or ROM does it) since the initial bootloader runs from there.
By marking the corresponding hwmod with HWMOD_INIT_NO_IDLE we leave the
clock running. Right now the sram code under arch/arm/plat-omap/ is what
manages the OCMC. I guess this needs to move somewhere under drivers/
and start managing the clocks. Even then we'll need a mechanism
to leave the clocks running as part of the kernel suspend process
since the assembly code which runs at the fag end of the suspend
process runs out of OCMC and hence we can't cut its clock.

On AM335x, the OCMC clock is cut to have PER power domain transition
but that's done in the WKUP-M3 firmware when going down. During the
wakeup sequence, WKUP-M3 re-enables the OCMC clock so that when the
kernel resumes the h/w state is same.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] ARM: OMAP2+: am33xx: preserve JTAG clock aka debugss_ick.

2013-03-07 Thread Bedia, Vaibhav
On Thu, Mar 07, 2013 at 18:43:27, Andreas Fenkart wrote:
> This fixes JTAG support on am33xx.
> 

Please refer to http://www.spinics.net/lists/linux-omap/msg87476.html

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] ARM: OMAP2+: am33xx: preserve JTAG clock aka debugss_ick.

2013-03-07 Thread Bedia, Vaibhav
On Thu, Mar 07, 2013 at 18:43:27, Andreas Fenkart wrote:
 This fixes JTAG support on am33xx.
 

Please refer to http://www.spinics.net/lists/linux-omap/msg87476.html

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] cpsw: Fix interrupt storm among other things

2013-01-30 Thread Bedia, Vaibhav
Hi Antoniou,

On Wed, Jan 30, 2013 at 19:07:19, Pantelis Antoniou wrote:
> Hi Vaibhav,
> 
> On Jan 30, 2013, at 3:29 PM, Bedia, Vaibhav wrote:
> 
> > On Wed, Jan 30, 2013 at 18:14:30, Pantelis Antoniou wrote:
> >> Hi Vaibhav,
> >> 
> >> On Jan 30, 2013, at 2:38 PM, Bedia, Vaibhav wrote:
> >> 
> >>> On Wed, Jan 30, 2013 at 16:38:50, Pantelis Antoniou wrote:
> >>> [...]
> >>>> 
> >>>> TBH I haven't found a simple way to print out the silicon revision 
> >>>> number.
> >>>> Anyone on the list know a quick and dirty method? 
> >>>> 
> >>> 
> >>> You can dump the DEVICE_ID register @ 0x44e10600.
> >>> Bits 31:28 should be 0 for PG1.0 and 1 for PG2.0.
> >>> 
> >> 
> >> Thanks this works perfectly:
> >> 
> >> original-bone:
> >> root@beaglebone:~# devmem2 0x44e10600 w
> >> Read at address  0x44E10600 (0xb6ff4600): 0x0B94402E
> >> 
> >> bone-black:
> >> root@beaglebone:~# devmem2 0x44e10600 w
> >> Read at address  0x44E10600 (0xb6fcc600): 0x1B94402E
> >> 
> > 
> > I just re-read the mail-chain and I am confused here.
> > So the patch in question is meant for Bone-A4 which has
> > PG1.0?
> > 
> 
> It is a general bug fix. The problem was discovered only on 
> the bone black which has PG2.0 silicon. The driver has been
> tested and it works on the original bone with PG1.0 as well.
> 

But Mugunthan mentioned that he doesn't see this on an EVM
with PG2.0 silicon... is there any board dependency here?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] cpsw: Fix interrupt storm among other things

2013-01-30 Thread Bedia, Vaibhav
On Wed, Jan 30, 2013 at 18:14:30, Pantelis Antoniou wrote:
> Hi Vaibhav,
> 
> On Jan 30, 2013, at 2:38 PM, Bedia, Vaibhav wrote:
> 
> > On Wed, Jan 30, 2013 at 16:38:50, Pantelis Antoniou wrote:
> > [...]
> >> 
> >> TBH I haven't found a simple way to print out the silicon revision number.
> >> Anyone on the list know a quick and dirty method? 
> >> 
> > 
> > You can dump the DEVICE_ID register @ 0x44e10600.
> > Bits 31:28 should be 0 for PG1.0 and 1 for PG2.0.
> > 
> 
> Thanks this works perfectly:
> 
> original-bone:
> root@beaglebone:~# devmem2 0x44e10600 w
> Read at address  0x44E10600 (0xb6ff4600): 0x0B94402E
> 
> bone-black:
> root@beaglebone:~# devmem2 0x44e10600 w
> Read at address  0x44E10600 (0xb6fcc600): 0x1B94402E
> 

I just re-read the mail-chain and I am confused here.
So the patch in question is meant for Bone-A4 which has
PG1.0?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] cpsw: Fix interrupt storm among other things

2013-01-30 Thread Bedia, Vaibhav
On Wed, Jan 30, 2013 at 16:38:50, Pantelis Antoniou wrote:
[...]
> 
> TBH I haven't found a simple way to print out the silicon revision number.
> Anyone on the list know a quick and dirty method? 
> 

You can dump the DEVICE_ID register @ 0x44e10600.
Bits 31:28 should be 0 for PG1.0 and 1 for PG2.0.

Regards,
Vaibhav 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] cpsw: Fix interrupt storm among other things

2013-01-30 Thread Bedia, Vaibhav
On Wed, Jan 30, 2013 at 16:38:50, Pantelis Antoniou wrote:
[...]
 
 TBH I haven't found a simple way to print out the silicon revision number.
 Anyone on the list know a quick and dirty method? 
 

You can dump the DEVICE_ID register @ 0x44e10600.
Bits 31:28 should be 0 for PG1.0 and 1 for PG2.0.

Regards,
Vaibhav 

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


RE: [PATCH] cpsw: Fix interrupt storm among other things

2013-01-30 Thread Bedia, Vaibhav
On Wed, Jan 30, 2013 at 18:14:30, Pantelis Antoniou wrote:
 Hi Vaibhav,
 
 On Jan 30, 2013, at 2:38 PM, Bedia, Vaibhav wrote:
 
  On Wed, Jan 30, 2013 at 16:38:50, Pantelis Antoniou wrote:
  [...]
  
  TBH I haven't found a simple way to print out the silicon revision number.
  Anyone on the list know a quick and dirty method? 
  
  
  You can dump the DEVICE_ID register @ 0x44e10600.
  Bits 31:28 should be 0 for PG1.0 and 1 for PG2.0.
  
 
 Thanks this works perfectly:
 
 original-bone:
 root@beaglebone:~# devmem2 0x44e10600 w
 Read at address  0x44E10600 (0xb6ff4600): 0x0B94402E
 
 bone-black:
 root@beaglebone:~# devmem2 0x44e10600 w
 Read at address  0x44E10600 (0xb6fcc600): 0x1B94402E
 

I just re-read the mail-chain and I am confused here.
So the patch in question is meant for Bone-A4 which has
PG1.0?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH] cpsw: Fix interrupt storm among other things

2013-01-30 Thread Bedia, Vaibhav
Hi Antoniou,

On Wed, Jan 30, 2013 at 19:07:19, Pantelis Antoniou wrote:
 Hi Vaibhav,
 
 On Jan 30, 2013, at 3:29 PM, Bedia, Vaibhav wrote:
 
  On Wed, Jan 30, 2013 at 18:14:30, Pantelis Antoniou wrote:
  Hi Vaibhav,
  
  On Jan 30, 2013, at 2:38 PM, Bedia, Vaibhav wrote:
  
  On Wed, Jan 30, 2013 at 16:38:50, Pantelis Antoniou wrote:
  [...]
  
  TBH I haven't found a simple way to print out the silicon revision 
  number.
  Anyone on the list know a quick and dirty method? 
  
  
  You can dump the DEVICE_ID register @ 0x44e10600.
  Bits 31:28 should be 0 for PG1.0 and 1 for PG2.0.
  
  
  Thanks this works perfectly:
  
  original-bone:
  root@beaglebone:~# devmem2 0x44e10600 w
  Read at address  0x44E10600 (0xb6ff4600): 0x0B94402E
  
  bone-black:
  root@beaglebone:~# devmem2 0x44e10600 w
  Read at address  0x44E10600 (0xb6fcc600): 0x1B94402E
  
  
  I just re-read the mail-chain and I am confused here.
  So the patch in question is meant for Bone-A4 which has
  PG1.0?
  
 
 It is a general bug fix. The problem was discovered only on 
 the bone black which has PG2.0 silicon. The driver has been
 tested and it works on the original bone with PG1.0 as well.
 

But Mugunthan mentioned that he doesn't see this on an EVM
with PG2.0 silicon... is there any board dependency here?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/9] mailbox: OMAP: introduce mailbox framework

2013-01-09 Thread Bedia, Vaibhav
On Wed, Jan 09, 2013 at 17:59:39, Loic PALLARDY wrote:
> Hi Vaibhav,
> 
> On 01/09/2013 01:11 PM, Bedia, Vaibhav wrote:
> > Hi Loic,
> >
> > On Fri, Dec 21, 2012 at 16:23:24, Loic PALLARDY wrote:
> >>
> >>
> >> On 12/21/2012 11:49 AM, Bedia, Vaibhav wrote:
> >>> On Fri, Dec 21, 2012 at 14:24:26, Loic PALLARDY wrote:
> >>>>
> >>> I have a few patches which are dependent on this patch series.
> >>> Could you please keep me in cc for the future versions.
> >>>
> >> Sure, I'll.
> >>
> >
> > When do you plan to post an updated version of these patches?
> I'm synchronizing with Omar to include TI RPMsg and tidspbridge patches 
> in next update.
> So I plan update for end of the week, beginning of next week.
> 

Ok. Thanks.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/9] mailbox: OMAP: introduce mailbox framework

2013-01-09 Thread Bedia, Vaibhav
Hi Loic,

On Fri, Dec 21, 2012 at 16:23:24, Loic PALLARDY wrote:
> 
> 
> On 12/21/2012 11:49 AM, Bedia, Vaibhav wrote:
> > On Fri, Dec 21, 2012 at 14:24:26, Loic PALLARDY wrote:
> >>
> > I have a few patches which are dependent on this patch series.
> > Could you please keep me in cc for the future versions.
> >
> Sure, I'll.
> 

When do you plan to post an updated version of these patches?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/9] mailbox: OMAP: introduce mailbox framework

2013-01-09 Thread Bedia, Vaibhav
Hi Loic,

On Fri, Dec 21, 2012 at 16:23:24, Loic PALLARDY wrote:
 
 
 On 12/21/2012 11:49 AM, Bedia, Vaibhav wrote:
  On Fri, Dec 21, 2012 at 14:24:26, Loic PALLARDY wrote:
 
  I have a few patches which are dependent on this patch series.
  Could you please keep me in cc for the future versions.
 
 Sure, I'll.
 

When do you plan to post an updated version of these patches?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/9] mailbox: OMAP: introduce mailbox framework

2013-01-09 Thread Bedia, Vaibhav
On Wed, Jan 09, 2013 at 17:59:39, Loic PALLARDY wrote:
 Hi Vaibhav,
 
 On 01/09/2013 01:11 PM, Bedia, Vaibhav wrote:
  Hi Loic,
 
  On Fri, Dec 21, 2012 at 16:23:24, Loic PALLARDY wrote:
 
 
  On 12/21/2012 11:49 AM, Bedia, Vaibhav wrote:
  On Fri, Dec 21, 2012 at 14:24:26, Loic PALLARDY wrote:
 
  I have a few patches which are dependent on this patch series.
  Could you please keep me in cc for the future versions.
 
  Sure, I'll.
 
 
  When do you plan to post an updated version of these patches?
 I'm synchronizing with Omar to include TI RPMsg and tidspbridge patches 
 in next update.
 So I plan update for end of the week, beginning of next week.
 

Ok. Thanks.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/9] mailbox: OMAP: introduce mailbox framework

2012-12-21 Thread Bedia, Vaibhav
On Fri, Dec 21, 2012 at 14:24:26, Loic PALLARDY wrote:
> 
> 
> On 12/18/2012 05:59 PM, Tony Lindgren wrote:
> > * Loic Pallardy  [121218 05:15]:
> >>
> >> Signed-off-by: Omar Ramirez Luna
> >
> > AFAIK the first two patches should have:
> > From: Omar Ramirez Luna
> Yes right, my mistake.
> I'll fix that on next version.
> /Loic

I have a few patches which are dependent on this patch series.
Could you please keep me in cc for the future versions.

Thanks,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 4/9] mailbox: create opened message type

2012-12-21 Thread Bedia, Vaibhav
On Tue, Dec 18, 2012 at 18:40:07, Loic Pallardy wrote:
> Current message type is a u32 to fit HW fifo format.
> This should be extended to support any message exchanges
> and type of mailbox.
> Propose structure owns the original u32 and an optional
> pointer on additional data.
> 
> Signed-off-by: Loic Pallardy 
> ---
>  drivers/mailbox/Kconfig |  9 ++
>  drivers/mailbox/mailbox-omap1.c | 18 ++--
>  drivers/mailbox/mailbox-omap2.c | 10 ---
>  drivers/mailbox/mailbox.c   | 64 
> +
>  drivers/mailbox/mailbox.h   |  6 ++--
>  include/linux/mailbox.h | 17 ++-
>  6 files changed, 89 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig
> index d1e7d74..efb766f 100644
> --- a/drivers/mailbox/Kconfig
> +++ b/drivers/mailbox/Kconfig
> @@ -33,4 +33,13 @@ config MBOX_KFIFO_SIZE
>   This can also be changed at runtime (via the mbox_kfifo_size
>   module parameter).
>  
> +config MBOX_DATA_SIZE
> + int "Mailbox associated data max size (bytes)"
> + default 64
> + help
> +   Specify the default size of mailbox's associated data buffer
> +   (bytes)
> +  This can also be changed at runtime (via the mbox_kfifo_size
> +  module parameter).
> +
>  endif
> diff --git a/drivers/mailbox/mailbox-omap1.c b/drivers/mailbox/mailbox-omap1.c
> index 31cb70a..94e90af 100644
> --- a/drivers/mailbox/mailbox-omap1.c
> +++ b/drivers/mailbox/mailbox-omap1.c
> @@ -50,26 +50,26 @@ static inline void mbox_write_reg(u32 val, size_t ofs)
>  }
>  
>  /* msg */
> -static mbox_msg_t omap1_mbox_fifo_read(struct mailbox *mbox)
> +static int omap1_mbox_fifo_read(struct mailbox *mbox, struct mailbox_msg 
> *msg)
>  {
>   struct omap_mbox1_fifo *fifo =
>   &((struct omap_mbox1_priv *)mbox->priv)->rx_fifo;
> - mbox_msg_t msg;
>  
> - msg = mbox_read_reg(fifo->data);
> - msg |= ((mbox_msg_t) mbox_read_reg(fifo->cmd)) << 16;
> + msg->header = mbox_read_reg(fifo->data);
> + msg->header |= ((mbox_msg_t) mbox_read_reg(fifo->cmd)) << 16;

Now that struct mailbox_msg encapsulates the data, you can
get rid of the mbox_msg_t typedef completely. Having the data
as part of the mailbox_msg along with the functions with mbox_msg_t
as the return type just creates confusion IMHO.
 
>  
> - return msg;
> + return 0;
>  }

Convert all return 0 functions to void?

[...]

>  
> diff --git a/include/linux/mailbox.h b/include/linux/mailbox.h
> index 18c9502..d256e1a 100644
> --- a/include/linux/mailbox.h
> +++ b/include/linux/mailbox.h
> @@ -7,7 +7,22 @@ typedef int __bitwise mailbox_irq_t;
>  #define IRQ_TX ((__force mailbox_irq_t) 1)
>  #define IRQ_RX ((__force mailbox_irq_t) 2)
>  
> -int mailbox_msg_send(struct mailbox *, mbox_msg_t msg);
> +struct mailbox_msg {
> + int size;
> + u32 header;
> + void*pdata;
> +};
> +
> +#define MAILBOX_FILL_MSG(_msg, _header, _pdata, _size) { \
> + _msg.header = _header; \
> + _msg.pdata = (void *)_pdata; \
> + _msg.size = _size; \
> +}
> +
> +#define MAILBOX_FILL_HEADER_MSG(_msg, _header) \
> + MAILBOX_FILL_MSG(_msg, _header, NULL, 0);
> +

I used these patches as part of the suspend-resume support for AM335x
which has the same mailbox IP as OMAP4. I used the MAILBOX_FILL_HEADER_MSG
helper and things work as expected.

However, I found the 'header' part to be very confusing. Why not treat the
OMAP case as a special case of the new MAILBOX_FILL_MSG where the data size
is set to 1?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/9] mailbox: change protection mechanisms

2012-12-21 Thread Bedia, Vaibhav
On Tue, Dec 18, 2012 at 18:40:08, Loic Pallardy wrote:
> TX: replace spin by mutex
> RX: replace spin_lock_irq by spin_lock_irqsave
> 

Can you please add a short note on why this is being done?

Regards,
Vaibhav 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/9] mailbox: change protection mechanisms

2012-12-21 Thread Bedia, Vaibhav
On Tue, Dec 18, 2012 at 18:40:08, Loic Pallardy wrote:
 TX: replace spin by mutex
 RX: replace spin_lock_irq by spin_lock_irqsave
 

Can you please add a short note on why this is being done?

Regards,
Vaibhav 

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


RE: [PATCH 4/9] mailbox: create opened message type

2012-12-21 Thread Bedia, Vaibhav
On Tue, Dec 18, 2012 at 18:40:07, Loic Pallardy wrote:
 Current message type is a u32 to fit HW fifo format.
 This should be extended to support any message exchanges
 and type of mailbox.
 Propose structure owns the original u32 and an optional
 pointer on additional data.
 
 Signed-off-by: Loic Pallardy loic.palla...@st.com
 ---
  drivers/mailbox/Kconfig |  9 ++
  drivers/mailbox/mailbox-omap1.c | 18 ++--
  drivers/mailbox/mailbox-omap2.c | 10 ---
  drivers/mailbox/mailbox.c   | 64 
 +
  drivers/mailbox/mailbox.h   |  6 ++--
  include/linux/mailbox.h | 17 ++-
  6 files changed, 89 insertions(+), 35 deletions(-)
 
 diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig
 index d1e7d74..efb766f 100644
 --- a/drivers/mailbox/Kconfig
 +++ b/drivers/mailbox/Kconfig
 @@ -33,4 +33,13 @@ config MBOX_KFIFO_SIZE
   This can also be changed at runtime (via the mbox_kfifo_size
   module parameter).
  
 +config MBOX_DATA_SIZE
 + int Mailbox associated data max size (bytes)
 + default 64
 + help
 +   Specify the default size of mailbox's associated data buffer
 +   (bytes)
 +  This can also be changed at runtime (via the mbox_kfifo_size
 +  module parameter).
 +
  endif
 diff --git a/drivers/mailbox/mailbox-omap1.c b/drivers/mailbox/mailbox-omap1.c
 index 31cb70a..94e90af 100644
 --- a/drivers/mailbox/mailbox-omap1.c
 +++ b/drivers/mailbox/mailbox-omap1.c
 @@ -50,26 +50,26 @@ static inline void mbox_write_reg(u32 val, size_t ofs)
  }
  
  /* msg */
 -static mbox_msg_t omap1_mbox_fifo_read(struct mailbox *mbox)
 +static int omap1_mbox_fifo_read(struct mailbox *mbox, struct mailbox_msg 
 *msg)
  {
   struct omap_mbox1_fifo *fifo =
   ((struct omap_mbox1_priv *)mbox-priv)-rx_fifo;
 - mbox_msg_t msg;
  
 - msg = mbox_read_reg(fifo-data);
 - msg |= ((mbox_msg_t) mbox_read_reg(fifo-cmd))  16;
 + msg-header = mbox_read_reg(fifo-data);
 + msg-header |= ((mbox_msg_t) mbox_read_reg(fifo-cmd))  16;

Now that struct mailbox_msg encapsulates the data, you can
get rid of the mbox_msg_t typedef completely. Having the data
as part of the mailbox_msg along with the functions with mbox_msg_t
as the return type just creates confusion IMHO.
 
  
 - return msg;
 + return 0;
  }

Convert all return 0 functions to void?

[...]

  
 diff --git a/include/linux/mailbox.h b/include/linux/mailbox.h
 index 18c9502..d256e1a 100644
 --- a/include/linux/mailbox.h
 +++ b/include/linux/mailbox.h
 @@ -7,7 +7,22 @@ typedef int __bitwise mailbox_irq_t;
  #define IRQ_TX ((__force mailbox_irq_t) 1)
  #define IRQ_RX ((__force mailbox_irq_t) 2)
  
 -int mailbox_msg_send(struct mailbox *, mbox_msg_t msg);
 +struct mailbox_msg {
 + int size;
 + u32 header;
 + void*pdata;
 +};
 +
 +#define MAILBOX_FILL_MSG(_msg, _header, _pdata, _size) { \
 + _msg.header = _header; \
 + _msg.pdata = (void *)_pdata; \
 + _msg.size = _size; \
 +}
 +
 +#define MAILBOX_FILL_HEADER_MSG(_msg, _header) \
 + MAILBOX_FILL_MSG(_msg, _header, NULL, 0);
 +

I used these patches as part of the suspend-resume support for AM335x
which has the same mailbox IP as OMAP4. I used the MAILBOX_FILL_HEADER_MSG
helper and things work as expected.

However, I found the 'header' part to be very confusing. Why not treat the
OMAP case as a special case of the new MAILBOX_FILL_MSG where the data size
is set to 1?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/9] mailbox: OMAP: introduce mailbox framework

2012-12-21 Thread Bedia, Vaibhav
On Fri, Dec 21, 2012 at 14:24:26, Loic PALLARDY wrote:
 
 
 On 12/18/2012 05:59 PM, Tony Lindgren wrote:
  * Loic Pallardyloic.pallardy-...@stericsson.com  [121218 05:15]:
 
  Signed-off-by: Omar Ramirez Lunaomar.l...@linaro.org
 
  AFAIK the first two patches should have:
  From: Omar Ramirez Lunaomar.l...@linaro.org
 Yes right, my mistake.
 I'll fix that on next version.
 /Loic

I have a few patches which are dependent on this patch series.
Could you please keep me in cc for the future versions.

Thanks,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: BUG: spinlock bad magic on CPU#0 on BeagleBone

2012-12-19 Thread Bedia, Vaibhav
On Thu, Dec 20, 2012 at 11:55:24, Stephen Boyd wrote:
> On 12/19/2012 8:48 PM, Bedia, Vaibhav wrote:
> > I tried out 3 variants of AM335x boards - 2 of these (BeagleBone and EVM) 
> > have DDR2
> > and 1 has DDR3 (EVM-SK). The BUG is triggered on all of these at the same 
> > point.
> >
> > With Stephen's change I don't see this on any of the board variants :)
> > New bootlog below.
> 
> Great! Can I have your Tested-by then? I'll wrap it up into a patch. Is
> this is a new regression? From a glance at the code it looks to have
> existed for quite a while now.

I went back to a branch based off 3.7-rc4 and don't see the issue there. Not 
sure
what is triggering this now.

Tested-by: Vaibhav Bedia 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: BUG: spinlock bad magic on CPU#0 on BeagleBone

2012-12-19 Thread Bedia, Vaibhav
On Thu, Dec 20, 2012 at 01:53:42, Stephen Boyd wrote:
> On 12/19/12 08:53, Paul Walmsley wrote:
> > On Wed, 19 Dec 2012, Bedia, Vaibhav wrote:
> >
> >> Current mainline on Beaglebone using the omap2plus_defconfig + 3 build 
> >> fixes
> >> is triggering a BUG()
> > ...
> >
> >> [0.109688] Security Framework initialized
> >> [0.109889] Mount-cache hash table entries: 512
> >> [0.112674] BUG: spinlock bad magic on CPU#0, swapper/0/0
> >> [0.112724]  lock: atomic64_lock+0x240/0x400, .magic: , .owner: 
> >> /-1, .owner_cpu: 0
> >> [0.112782] [] (unwind_backtrace+0x0/0xf0) from [] 
> >> (do_raw_spin_lock+0x158/0x198)
> >> [0.112813] [] (do_raw_spin_lock+0x158/0x198) from 
> >> [] (_raw_spin_lock_irqsave+0x4c/0x58)
> >> [0.112844] [] (_raw_spin_lock_irqsave+0x4c/0x58) from 
> >> [] (atomic64_add_return+0x30/0x5c)
> >> [0.112886] [] (atomic64_add_return+0x30/0x5c) from 
> >> [] (alloc_mnt_ns.clone.14+0x44/0xac)
> >> [0.112914] [] (alloc_mnt_ns.clone.14+0x44/0xac) from 
> >> [] (create_mnt_ns+0xc/0x54)
> >> [0.112951] [] (create_mnt_ns+0xc/0x54) from [] 
> >> (mnt_init+0x120/0x1d4)
> >> [0.112978] [] (mnt_init+0x120/0x1d4) from [] 
> >> (vfs_caches_init+0xe0/0x10c)
> >> [0.113005] [] (vfs_caches_init+0xe0/0x10c) from [] 
> >> (start_kernel+0x29c/0x300)
> >> [0.113029] [] (start_kernel+0x29c/0x300) from [<80008078>] 
> >> (0x80008078)
> >> [0.118290] CPU: Testing write buffer coherency: ok
> >> [0.118968] CPU0: thread -1, cpu 0, socket -1, mpidr 0
> >> [0.119053] Setting up static identity map for 0x804de2c8 - 0x804de338
> >> [0.120698] Brought up 1 CPUs
> > This is probably a memory corruption bug, there's probably some code 
> > executing early that's writing outside its own data and trashing some 
> > previously-allocated memory.
> 
> I'm not so sure. It looks like atomic64s use spinlocks on processors
> that don't have 64-bit atomic instructions (see lib/atomic64.c). And
> those spinlocks are not initialized until a pure initcall runs,
> init_atomic64_lock(). Pure initcalls don't run until after
> vfs_caches_init() and so you get this BUG() warning that the spinlock is
> not initialized.
> 
> How about we initialize the locks statically? Does that fix your problem?
> 
> >8-
> 
> diff --git a/lib/atomic64.c b/lib/atomic64.c
> index 9785378..08a4f06 100644
> --- a/lib/atomic64.c
> +++ b/lib/atomic64.c
> @@ -31,7 +31,11 @@
>  static union {
> raw_spinlock_t lock;
> char pad[L1_CACHE_BYTES];
> -} atomic64_lock[NR_LOCKS] __cacheline_aligned_in_smp;
> +} atomic64_lock[NR_LOCKS] __cacheline_aligned_in_smp = {
> +   [0 ... (NR_LOCKS - 1)] = {
> +   .lock =  __RAW_SPIN_LOCK_UNLOCKED(atomic64_lock.lock),
> +   },
> +};
>  
>  static inline raw_spinlock_t *lock_addr(const atomic64_t *v)
>  {
> @@ -173,14 +177,3 @@ int atomic64_add_unless(atomic64_t *v, long long a, long 
> long u)
> return ret;
>  }
>  EXPORT_SYMBOL(atomic64_add_unless);
> -
> -static int init_atomic64_lock(void)
> -{
> -   int i;
> -
> -   for (i = 0; i < NR_LOCKS; ++i)
> -   raw_spin_lock_init(_lock[i].lock);
> -   return 0;
> -}
> -
> -pure_initcall(init_atomic64_lock);
> 

I tried out 3 variants of AM335x boards - 2 of these (BeagleBone and EVM) have 
DDR2
and 1 has DDR3 (EVM-SK). The BUG is triggered on all of these at the same point.

With Stephen's change I don't see this on any of the board variants :)
New bootlog below.

Thanks,
Vaibhav

---


[0.00] Booting Linux on physical CPU 0x0
[0.00] Linux version 3.7.0-01415-g55bc169-dirty (a0393953@psplinux063) 
(gcc version 4.5.3 20110311 (prerelease) (GCC) ) #4 SMP Thu Dec 20 09:59:12 IST 
2012
[0.00] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7d
[0.00] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing 
instruction cache
[0.00] Machine: Generic AM33XX (Flattened Device Tree), model: TI 
AM335x BeagleBone
[0.00] Memory policy: ECC disabled, Data cache writeback
[0.00] AM335X ES1.0 (neon )
[0.00] PERCPU: Embedded 9 pages/cpu @c0f1a000 s12992 r8192 d15680 u36864
[0.00] Built 1 zonelists in Zone order, mobility grouping on.  Total 
pages: 64768
[0.00] Kernel command line: console=ttyO0,115200n8 mem=256M 
root=/dev/ram rw initrd=0x8200,16MB ramdisk_size=65536 earlyprintk=serial
[0.00] PID hash table entries: 1024 (order: 0, 4096 bytes)
[0.00] Dentry cache hash table en

RE: BUG: spinlock bad magic on CPU#0 on BeagleBone

2012-12-19 Thread Bedia, Vaibhav
On Thu, Dec 20, 2012 at 01:53:42, Stephen Boyd wrote:
 On 12/19/12 08:53, Paul Walmsley wrote:
  On Wed, 19 Dec 2012, Bedia, Vaibhav wrote:
 
  Current mainline on Beaglebone using the omap2plus_defconfig + 3 build 
  fixes
  is triggering a BUG()
  ...
 
  [0.109688] Security Framework initialized
  [0.109889] Mount-cache hash table entries: 512
  [0.112674] BUG: spinlock bad magic on CPU#0, swapper/0/0
  [0.112724]  lock: atomic64_lock+0x240/0x400, .magic: , .owner: 
  none/-1, .owner_cpu: 0
  [0.112782] [c001af64] (unwind_backtrace+0x0/0xf0) from [c02c2010] 
  (do_raw_spin_lock+0x158/0x198)
  [0.112813] [c02c2010] (do_raw_spin_lock+0x158/0x198) from 
  [c04d89ec] (_raw_spin_lock_irqsave+0x4c/0x58)
  [0.112844] [c04d89ec] (_raw_spin_lock_irqsave+0x4c/0x58) from 
  [c02cabf0] (atomic64_add_return+0x30/0x5c)
  [0.112886] [c02cabf0] (atomic64_add_return+0x30/0x5c) from 
  [c0124564] (alloc_mnt_ns.clone.14+0x44/0xac)
  [0.112914] [c0124564] (alloc_mnt_ns.clone.14+0x44/0xac) from 
  [c0124f4c] (create_mnt_ns+0xc/0x54)
  [0.112951] [c0124f4c] (create_mnt_ns+0xc/0x54) from [c06f31a4] 
  (mnt_init+0x120/0x1d4)
  [0.112978] [c06f31a4] (mnt_init+0x120/0x1d4) from [c06f2d50] 
  (vfs_caches_init+0xe0/0x10c)
  [0.113005] [c06f2d50] (vfs_caches_init+0xe0/0x10c) from [c06d4798] 
  (start_kernel+0x29c/0x300)
  [0.113029] [c06d4798] (start_kernel+0x29c/0x300) from [80008078] 
  (0x80008078)
  [0.118290] CPU: Testing write buffer coherency: ok
  [0.118968] CPU0: thread -1, cpu 0, socket -1, mpidr 0
  [0.119053] Setting up static identity map for 0x804de2c8 - 0x804de338
  [0.120698] Brought up 1 CPUs
  This is probably a memory corruption bug, there's probably some code 
  executing early that's writing outside its own data and trashing some 
  previously-allocated memory.
 
 I'm not so sure. It looks like atomic64s use spinlocks on processors
 that don't have 64-bit atomic instructions (see lib/atomic64.c). And
 those spinlocks are not initialized until a pure initcall runs,
 init_atomic64_lock(). Pure initcalls don't run until after
 vfs_caches_init() and so you get this BUG() warning that the spinlock is
 not initialized.
 
 How about we initialize the locks statically? Does that fix your problem?
 
 8-
 
 diff --git a/lib/atomic64.c b/lib/atomic64.c
 index 9785378..08a4f06 100644
 --- a/lib/atomic64.c
 +++ b/lib/atomic64.c
 @@ -31,7 +31,11 @@
  static union {
 raw_spinlock_t lock;
 char pad[L1_CACHE_BYTES];
 -} atomic64_lock[NR_LOCKS] __cacheline_aligned_in_smp;
 +} atomic64_lock[NR_LOCKS] __cacheline_aligned_in_smp = {
 +   [0 ... (NR_LOCKS - 1)] = {
 +   .lock =  __RAW_SPIN_LOCK_UNLOCKED(atomic64_lock.lock),
 +   },
 +};
  
  static inline raw_spinlock_t *lock_addr(const atomic64_t *v)
  {
 @@ -173,14 +177,3 @@ int atomic64_add_unless(atomic64_t *v, long long a, long 
 long u)
 return ret;
  }
  EXPORT_SYMBOL(atomic64_add_unless);
 -
 -static int init_atomic64_lock(void)
 -{
 -   int i;
 -
 -   for (i = 0; i  NR_LOCKS; ++i)
 -   raw_spin_lock_init(atomic64_lock[i].lock);
 -   return 0;
 -}
 -
 -pure_initcall(init_atomic64_lock);
 

I tried out 3 variants of AM335x boards - 2 of these (BeagleBone and EVM) have 
DDR2
and 1 has DDR3 (EVM-SK). The BUG is triggered on all of these at the same point.

With Stephen's change I don't see this on any of the board variants :)
New bootlog below.

Thanks,
Vaibhav

---


[0.00] Booting Linux on physical CPU 0x0
[0.00] Linux version 3.7.0-01415-g55bc169-dirty (a0393953@psplinux063) 
(gcc version 4.5.3 20110311 (prerelease) (GCC) ) #4 SMP Thu Dec 20 09:59:12 IST 
2012
[0.00] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7d
[0.00] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing 
instruction cache
[0.00] Machine: Generic AM33XX (Flattened Device Tree), model: TI 
AM335x BeagleBone
[0.00] Memory policy: ECC disabled, Data cache writeback
[0.00] AM335X ES1.0 (neon )
[0.00] PERCPU: Embedded 9 pages/cpu @c0f1a000 s12992 r8192 d15680 u36864
[0.00] Built 1 zonelists in Zone order, mobility grouping on.  Total 
pages: 64768
[0.00] Kernel command line: console=ttyO0,115200n8 mem=256M 
root=/dev/ram rw initrd=0x8200,16MB ramdisk_size=65536 earlyprintk=serial
[0.00] PID hash table entries: 1024 (order: 0, 4096 bytes)
[0.00] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
[0.00] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[0.00] __ex_table already sorted, skipping sort
[0.00] Memory: 255MB = 255MB total
[0.00] Memory: 229012k/229012k available, 33132k reserved, 0K highmem
[0.00] Virtual kernel memory layout:
[0.00] vector  : 0x - 0x1000   (   4 kB)
[0.00] fixmap  : 0xfff0 - 0xfffe   ( 896 kB)
[0.00

RE: BUG: spinlock bad magic on CPU#0 on BeagleBone

2012-12-19 Thread Bedia, Vaibhav
On Thu, Dec 20, 2012 at 11:55:24, Stephen Boyd wrote:
 On 12/19/2012 8:48 PM, Bedia, Vaibhav wrote:
  I tried out 3 variants of AM335x boards - 2 of these (BeagleBone and EVM) 
  have DDR2
  and 1 has DDR3 (EVM-SK). The BUG is triggered on all of these at the same 
  point.
 
  With Stephen's change I don't see this on any of the board variants :)
  New bootlog below.
 
 Great! Can I have your Tested-by then? I'll wrap it up into a patch. Is
 this is a new regression? From a glance at the code it looks to have
 existed for quite a while now.

I went back to a branch based off 3.7-rc4 and don't see the issue there. Not 
sure
what is triggering this now.

Tested-by: Vaibhav Bedia vaibhav.be...@ti.com

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


RE: arch/arm/mach-omap2/i2c.c:130:2: error: implicit declaration of function 'omap_pm_set_max_mpu_wakeup_lat'

2012-12-18 Thread Bedia, Vaibhav
On Wed, Dec 19, 2012 at 07:52:47, Fengguang Wu wrote:
> [add more CC]
> 
> On Wed, Dec 19, 2012 at 10:11:02AM +0800, Fengguang Wu wrote:
> > Hi Linus, Wolfram,
> > 
> > FYI, kernel build failed on
> > 
> > tree:   git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux master
> > head:   752451f01c4567b506bf4343082682dbb8fb30dd
> > commit: 752451f01c4567b506bf4343082682dbb8fb30dd Merge branch 
> > 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux
> > date:   56 minutes ago
> > config: make ARCH=arm omap2plus_defconfig
> > 
> > All error/warnings:
> > 
> > arch/arm/mach-omap2/i2c.c: In function 
> > 'omap_pm_set_max_mpu_wakeup_lat_compat':
> > arch/arm/mach-omap2/i2c.c:130:2: error: implicit declaration of function 
> > 'omap_pm_set_max_mpu_wakeup_lat' [-Werror=implicit-function-declaration]
> > cc1: some warnings being treated as errors
> > 
> > The root cause is, i2c.c (which is always compiled in 
> > arch/arm/mach-omap2/Makefile)
> > uses omap_pm_set_max_mpu_wakeup_lat() which is defined in omap-pm-noop.c 
> > (which
> > is compiled only on CONFIG_OMAP_PM_NOOP).

CONFIG_OMAP_PM_NOOP is defined. The build breakage is due to a missing header 
inclusion.
I just sent a patch for this [1]

There are still a couple of patches missing before omap2plus_defconfig compiles
https://patchwork.kernel.org/patch/1810481/
https://patchwork.kernel.org/patch/1810441/

I guess they are on the way from some other tree.

Regards,
Vaibhav

[1] http://marc.info/?l=linux-arm-kernel=135589966017628=2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: arch/arm/mach-omap2/i2c.c:130:2: error: implicit declaration of function 'omap_pm_set_max_mpu_wakeup_lat'

2012-12-18 Thread Bedia, Vaibhav
On Wed, Dec 19, 2012 at 07:52:47, Fengguang Wu wrote:
 [add more CC]
 
 On Wed, Dec 19, 2012 at 10:11:02AM +0800, Fengguang Wu wrote:
  Hi Linus, Wolfram,
  
  FYI, kernel build failed on
  
  tree:   git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux master
  head:   752451f01c4567b506bf4343082682dbb8fb30dd
  commit: 752451f01c4567b506bf4343082682dbb8fb30dd Merge branch 
  'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux
  date:   56 minutes ago
  config: make ARCH=arm omap2plus_defconfig
  
  All error/warnings:
  
  arch/arm/mach-omap2/i2c.c: In function 
  'omap_pm_set_max_mpu_wakeup_lat_compat':
  arch/arm/mach-omap2/i2c.c:130:2: error: implicit declaration of function 
  'omap_pm_set_max_mpu_wakeup_lat' [-Werror=implicit-function-declaration]
  cc1: some warnings being treated as errors
  
  The root cause is, i2c.c (which is always compiled in 
  arch/arm/mach-omap2/Makefile)
  uses omap_pm_set_max_mpu_wakeup_lat() which is defined in omap-pm-noop.c 
  (which
  is compiled only on CONFIG_OMAP_PM_NOOP).

CONFIG_OMAP_PM_NOOP is defined. The build breakage is due to a missing header 
inclusion.
I just sent a patch for this [1]

There are still a couple of patches missing before omap2plus_defconfig compiles
https://patchwork.kernel.org/patch/1810481/
https://patchwork.kernel.org/patch/1810441/

I guess they are on the way from some other tree.

Regards,
Vaibhav

[1] http://marc.info/?l=linux-arm-kernelm=135589966017628w=2

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


RE: [PATCH v3 03/10] ARM: OMAP: AM33xx hwmod: Add parent-child relationship for PWM subsystem

2012-11-26 Thread Bedia, Vaibhav
Hi Benoit,

On Mon, Nov 26, 2012 at 14:32:59, Cousson, Benoit wrote:
> Hi Vaibhav,
> 
> On 11/26/2012 06:19 AM, Bedia, Vaibhav wrote:
> > On Fri, Nov 23, 2012 at 16:36:06, Philip, Avinash wrote:
> >> On Tue, Nov 20, 2012 at 10:33:44, Philip, Avinash wrote:
> >>> As part of PWM subsystem integration, PWM subsystem are sharing
> >>> resources like clock across submodules (ECAP, EQEP & EHRPWM).
> >>> To handle resource sharing & IP integration
> >>> 1. Rework on parent child relation between PWMSS and
> >>>ECAP, EQEP & EHRPWM child devices to support runtime PM.
> >>> 2. Add support for opt_clks in EHRPWM HWMOD entry to handle additional
> >>>clock gating from control module.
> >>> 3. Add HWMOD entries for EQEP PWM submodule.
> >>>
> >>
> >> Is there any review on this patch?
> >> This patch depends on ECAP & EHRPWM to work in am335x.
> > 
> > First of all, I think you should break up this patch as per the 3 points
> > that you mentioned above.
> > 
> > The usage of opt_clks for this does not look right to me. Based on your
> > description this clock is necessary and not optional on AM335x and on 
> > Davinci platforms this clock does not exist.

I checked the DA830 TRM and looks like TBCLK for eHRPWM is an always on clock
there. So, the only difference in AM335x is an additional enable bit.

Instead of adding this as opt_clk in hwmod, we could add an always on clock node
in Davinci clock data and have the driver always do a clk_enable() on the tbclk
as part of the probe sequence. On AM335x, with the right clock node this will 
enable
the clock in hardware and on DA830 it turns into a NOP. This way we can avoid 
adding
the opt_clk entry in hwmod of eHRPWM.

> > 
> > I think the custom activate/deactivate functions in the OMAP runtime PM
> > implementation was a good fit for keeping this SoC integration detail out
> > of the driver code. However, the current DT flow in omap_device.c seems to
> > assign the default activate/deactivate ops. Is that approach deprecated?
> 
> The issue is that this approach is not doable anymore with DT, that's
> why I had to provide a default set of functions.
> 

So once all OMAP drivers get converted to DT, will there be no notion of
latency based activate/deactivate functions? Or will it get used in a different
manner?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH v3 03/10] ARM: OMAP: AM33xx hwmod: Add parent-child relationship for PWM subsystem

2012-11-26 Thread Bedia, Vaibhav
Hi Benoit,

On Mon, Nov 26, 2012 at 14:32:59, Cousson, Benoit wrote:
 Hi Vaibhav,
 
 On 11/26/2012 06:19 AM, Bedia, Vaibhav wrote:
  On Fri, Nov 23, 2012 at 16:36:06, Philip, Avinash wrote:
  On Tue, Nov 20, 2012 at 10:33:44, Philip, Avinash wrote:
  As part of PWM subsystem integration, PWM subsystem are sharing
  resources like clock across submodules (ECAP, EQEP  EHRPWM).
  To handle resource sharing  IP integration
  1. Rework on parent child relation between PWMSS and
 ECAP, EQEP  EHRPWM child devices to support runtime PM.
  2. Add support for opt_clks in EHRPWM HWMOD entry to handle additional
 clock gating from control module.
  3. Add HWMOD entries for EQEP PWM submodule.
 
 
  Is there any review on this patch?
  This patch depends on ECAP  EHRPWM to work in am335x.
  
  First of all, I think you should break up this patch as per the 3 points
  that you mentioned above.
  
  The usage of opt_clks for this does not look right to me. Based on your
  description this clock is necessary and not optional on AM335x and on 
  Davinci platforms this clock does not exist.

I checked the DA830 TRM and looks like TBCLK for eHRPWM is an always on clock
there. So, the only difference in AM335x is an additional enable bit.

Instead of adding this as opt_clk in hwmod, we could add an always on clock node
in Davinci clock data and have the driver always do a clk_enable() on the tbclk
as part of the probe sequence. On AM335x, with the right clock node this will 
enable
the clock in hardware and on DA830 it turns into a NOP. This way we can avoid 
adding
the opt_clk entry in hwmod of eHRPWM.

  
  I think the custom activate/deactivate functions in the OMAP runtime PM
  implementation was a good fit for keeping this SoC integration detail out
  of the driver code. However, the current DT flow in omap_device.c seems to
  assign the default activate/deactivate ops. Is that approach deprecated?
 
 The issue is that this approach is not doable anymore with DT, that's
 why I had to provide a default set of functions.
 

So once all OMAP drivers get converted to DT, will there be no notion of
latency based activate/deactivate functions? Or will it get used in a different
manner?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH v3 03/10] ARM: OMAP: AM33xx hwmod: Add parent-child relationship for PWM subsystem

2012-11-25 Thread Bedia, Vaibhav
On Fri, Nov 23, 2012 at 16:36:06, Philip, Avinash wrote:
> On Tue, Nov 20, 2012 at 10:33:44, Philip, Avinash wrote:
> > As part of PWM subsystem integration, PWM subsystem are sharing
> > resources like clock across submodules (ECAP, EQEP & EHRPWM).
> > To handle resource sharing & IP integration
> > 1. Rework on parent child relation between PWMSS and
> >ECAP, EQEP & EHRPWM child devices to support runtime PM.
> > 2. Add support for opt_clks in EHRPWM HWMOD entry to handle additional
> >clock gating from control module.
> > 3. Add HWMOD entries for EQEP PWM submodule.
> > 
> 
> Is there any review on this patch?
> This patch depends on ECAP & EHRPWM to work in am335x.

First of all, I think you should break up this patch as per the 3 points
that you mentioned above.

The usage of opt_clks for this does not look right to me. Based on your
description this clock is necessary and not optional on AM335x and on 
Davinci platforms this clock does not exist. 

I think the custom activate/deactivate functions in the OMAP runtime PM
implementation was a good fit for keeping this SoC integration detail out
of the driver code. However, the current DT flow in omap_device.c seems to
assign the default activate/deactivate ops. Is that approach deprecated?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH v3 03/10] ARM: OMAP: AM33xx hwmod: Add parent-child relationship for PWM subsystem

2012-11-25 Thread Bedia, Vaibhav
On Fri, Nov 23, 2012 at 16:36:06, Philip, Avinash wrote:
 On Tue, Nov 20, 2012 at 10:33:44, Philip, Avinash wrote:
  As part of PWM subsystem integration, PWM subsystem are sharing
  resources like clock across submodules (ECAP, EQEP  EHRPWM).
  To handle resource sharing  IP integration
  1. Rework on parent child relation between PWMSS and
 ECAP, EQEP  EHRPWM child devices to support runtime PM.
  2. Add support for opt_clks in EHRPWM HWMOD entry to handle additional
 clock gating from control module.
  3. Add HWMOD entries for EQEP PWM submodule.
  
 
 Is there any review on this patch?
 This patch depends on ECAP  EHRPWM to work in am335x.

First of all, I think you should break up this patch as per the 3 points
that you mentioned above.

The usage of opt_clks for this does not look right to me. Based on your
description this clock is necessary and not optional on AM335x and on 
Davinci platforms this clock does not exist. 

I think the custom activate/deactivate functions in the OMAP runtime PM
implementation was a good fit for keeping this SoC integration detail out
of the driver code. However, the current DT flow in omap_device.c seems to
assign the default activate/deactivate ops. Is that approach deprecated?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/8] ARM: OMAP: AM33xx hwmod: Add parent-child relationship for PWM subsystem

2012-11-06 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:24, Philip, Avinash wrote:
[...]

> +
> +static struct omap_hwmod_ocp_if am33xx_epwmss0__ecap0 = {
> + .master = _epwmss0_hwmod,
> + .slave  = _ecap0_hwmod,
> + .clk= "l4ls_gclk",
> + .addr   = am33xx_ecap0_addr_space,
> + .user   = OCP_USER_MPU,
> +};

Noticed this in another patch which is quite similar so commenting here
again. Is the user field required if you are just creating a parent-child
relationship here?

Regards,
Vaibhav 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/8] ARM: OMAP: AM33xx hwmod: Add parent-child relationship for PWM subsystem

2012-11-06 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:24, Philip, Avinash wrote:
[...]

 +
 +static struct omap_hwmod_ocp_if am33xx_epwmss0__ecap0 = {
 + .master = am33xx_epwmss0_hwmod,
 + .slave  = am33xx_ecap0_hwmod,
 + .clk= l4ls_gclk,
 + .addr   = am33xx_ecap0_addr_space,
 + .user   = OCP_USER_MPU,
 +};

Noticed this in another patch which is quite similar so commenting here
again. Is the user field required if you are just creating a parent-child
relationship here?

Regards,
Vaibhav 

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


RE: [PATCH 8/8] ARM: dts: AM33XX: Add PWM backlight DT data to am335x-evm

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:29, Philip, Avinash wrote:
[...]

> + am33xx_pinmux: pinmux@44e10800 {
> + ecap0_pins: backlight_pins {
> + pinctrl-single,pins = <
> + 0x164 0x0   /* 
> eCAP0_in_PWM0_out.eCAP0_in_PWM0_out MODE0 */
> + >;
> + };
> + };
> +
Ok I see the pinctrl entries here. Shouldn't this be done before
the change in the driver?

Regards.
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/8] pwm: pwm-tiehrpwm: Add device-tree binding support for EHRPWM driver

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:26, Philip, Avinash wrote:
[...]

> +#include 
> +#include 

Pinctrl changes should be separate patch. Morevoer, you don't mention
that you making this change.

> +
> +#include "tipwmss.h"
>  
>  /* EHRPWM registers and bits definitions */
>  
> @@ -107,6 +111,10 @@
>  #define AQCSFRC_CSFA_FRCHIGH BIT(1)
>  #define AQCSFRC_CSFA_DISSWFRC(BIT(1) | BIT(0))
>  
> +#define EPWMCLK_EN_SHIFT 8
> +
> +#define PWM_CELL_SIZE3
> +
>  #define NUM_PWM_CHANNEL  2   /* EHRPWM channels */
>  
>  struct ehrpwm_pwm_chip {
> @@ -392,12 +400,27 @@ static const struct pwm_ops ehrpwm_pwm_ops = {
>   .owner  = THIS_MODULE,
>  };
>  
> +#ifdef CONFIG_OF
> +static const struct of_device_id ehrpwm_of_match[] = {
> + {
> + .compatible = "ti,am33xx-ehrpwm",
> + },
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, ehrpwm_of_match);
> +#endif
> +
>  static int __devinit ehrpwm_pwm_probe(struct platform_device *pdev)
>  {
>   int ret;
>   struct resource *r;
>   struct clk *clk;
>   struct ehrpwm_pwm_chip *pc;
> + struct pinctrl *pinctrl;
> +
> + pinctrl = devm_pinctrl_get_select_default(>dev);

I didn't see a patch adding the pinctrl entries.

> + if (IS_ERR(pinctrl))
> + dev_warn(>dev, "failed to configure pins from driver\n");
>  
>   pc = devm_kzalloc(>dev, sizeof(*pc), GFP_KERNEL);
>   if (!pc) {
> @@ -419,6 +442,7 @@ static int __devinit ehrpwm_pwm_probe(struct 
> platform_device *pdev)
>  
>   pc->chip.dev = >dev;
>   pc->chip.ops = _pwm_ops;
> + pc->chip.of_pwm_n_cells = PWM_CELL_SIZE;
>   pc->chip.base = -1;
>   pc->chip.npwm = NUM_PWM_CHANNEL;
>  
> @@ -437,8 +461,11 @@ static int __devinit ehrpwm_pwm_probe(struct 
> platform_device *pdev)
>   dev_err(>dev, "pwmchip_add() failed: %d\n", ret);
>   return ret;
>   }
> -
>   pm_runtime_enable(>dev);
> + pm_runtime_get_sync(>dev);
> + pwmss_submodule_state_change(pdev->dev.parent, EPWMCLK_EN_SHIFT, true);

I think you should modify this API to return the status for drivers to check.

Another related question, why should this clock be enabled in probe and not 
only when it
is required? Shouldn't it be disabled in suspend?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 6/8] pwm: pwm-tiehrpwm: Adding TBCLK gating support.

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:27, Philip, Avinash wrote:
[...]

> + /* Some platforms require explicit tbclk gating */
> + if (of_property_read_bool(pdev->dev.of_node, "tbclkgating")) {
> + pc->tbclk = clk_get(>dev, "tbclk");
> + if (IS_ERR(pc->tbclk)) {
> + dev_err(>dev, "Could not get EHRPWM TBCLK\n");
> + return PTR_ERR(pc->tbclk);
> + }
> + }
> +
> + /* Enable tbclk & leave */
> + if (pc->tbclk)
> + clk_enable(pc->tbclk);
> +

Here also why are you leaving this clock always running?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/8] PWMSS: Add PWM Subsystem driver for parent<->child relationship

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:22, Philip, Avinash wrote:
[...]
> +pwmss0: pwmss@4830 {
> + compatible = "ti,am33xx-pwmss";
> + reg = <0x4830 0x10
> + 0x48300100 0x80
> + 0x48300180 0x80
> + 0x48300200 0x80>;
Do you really need the 4 address ranges here? You eventually do add in
child nodes with other address ranges so isn't the first entry sufficient?
I haven't really looked at the DT details so it is enforced by that let me
know.

[...]
> +
> +#define PWMSS_CLKCONFIG  8
> +

This #def can use a comment.

> +void pwmss_submodule_state_change(struct device *dev, int pos, bool enable)
> +{
> + struct pwmss_info *info = dev_get_drvdata(dev);
> + u16 val;
> +
> + val = readw(info->mmio_base + PWMSS_CLKCONFIG);
> + if (enable)
> + val |= 1 << pos;
> + else
> + val &= ~(1 << pos);
> + mutex_lock(>pwmss_lock);
> + writew(val , info->mmio_base + PWMSS_CLKCONFIG);
> + mutex_unlock(>pwmss_lock);
> +}
> +EXPORT_SYMBOL(pwmss_submodule_state_change);

I see a clk_en_ack field in the clock status register. You should be checking 
that.

[...]

> +
> +MODULE_DESCRIPTION("pwmss driver");
> +MODULE_AUTHOR("Texas Instruments");
> +MODULE_LICENSE("GPL");
> diff --git a/drivers/pwm/tipwmss.h b/drivers/pwm/tipwmss.h
> new file mode 100644
> index 000..83fdc29
> --- /dev/null
> +++ b/drivers/pwm/tipwmss.h
> @@ -0,0 +1,8 @@

License text?
 
> +#ifdef CONFIG_PWM_TIPWMSS
> +extern void pwmss_submodule_state_change(struct device *dev, int pos,
> + bool enable);
> +#else
> +static inline void pwmss_submodule_state_change(struct device *dev, int pos,
> + bool enable)
> +{}
> +#endif

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/8] PWMSS: Add PWM Subsystem driver for parent-child relationship

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:22, Philip, Avinash wrote:
[...]
 +pwmss0: pwmss@4830 {
 + compatible = ti,am33xx-pwmss;
 + reg = 0x4830 0x10
 + 0x48300100 0x80
 + 0x48300180 0x80
 + 0x48300200 0x80;
Do you really need the 4 address ranges here? You eventually do add in
child nodes with other address ranges so isn't the first entry sufficient?
I haven't really looked at the DT details so it is enforced by that let me
know.

[...]
 +
 +#define PWMSS_CLKCONFIG  8
 +

This #def can use a comment.

 +void pwmss_submodule_state_change(struct device *dev, int pos, bool enable)
 +{
 + struct pwmss_info *info = dev_get_drvdata(dev);
 + u16 val;
 +
 + val = readw(info-mmio_base + PWMSS_CLKCONFIG);
 + if (enable)
 + val |= 1  pos;
 + else
 + val = ~(1  pos);
 + mutex_lock(info-pwmss_lock);
 + writew(val , info-mmio_base + PWMSS_CLKCONFIG);
 + mutex_unlock(info-pwmss_lock);
 +}
 +EXPORT_SYMBOL(pwmss_submodule_state_change);

I see a clk_en_ack field in the clock status register. You should be checking 
that.

[...]

 +
 +MODULE_DESCRIPTION(pwmss driver);
 +MODULE_AUTHOR(Texas Instruments);
 +MODULE_LICENSE(GPL);
 diff --git a/drivers/pwm/tipwmss.h b/drivers/pwm/tipwmss.h
 new file mode 100644
 index 000..83fdc29
 --- /dev/null
 +++ b/drivers/pwm/tipwmss.h
 @@ -0,0 +1,8 @@

License text?
 
 +#ifdef CONFIG_PWM_TIPWMSS
 +extern void pwmss_submodule_state_change(struct device *dev, int pos,
 + bool enable);
 +#else
 +static inline void pwmss_submodule_state_change(struct device *dev, int pos,
 + bool enable)
 +{}
 +#endif

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 6/8] pwm: pwm-tiehrpwm: Adding TBCLK gating support.

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:27, Philip, Avinash wrote:
[...]

 + /* Some platforms require explicit tbclk gating */
 + if (of_property_read_bool(pdev-dev.of_node, tbclkgating)) {
 + pc-tbclk = clk_get(pdev-dev, tbclk);
 + if (IS_ERR(pc-tbclk)) {
 + dev_err(pdev-dev, Could not get EHRPWM TBCLK\n);
 + return PTR_ERR(pc-tbclk);
 + }
 + }
 +
 + /* Enable tbclk  leave */
 + if (pc-tbclk)
 + clk_enable(pc-tbclk);
 +

Here also why are you leaving this clock always running?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/8] pwm: pwm-tiehrpwm: Add device-tree binding support for EHRPWM driver

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:26, Philip, Avinash wrote:
[...]

 +#include linux/of_device.h
 +#include linux/pinctrl/consumer.h

Pinctrl changes should be separate patch. Morevoer, you don't mention
that you making this change.

 +
 +#include tipwmss.h
  
  /* EHRPWM registers and bits definitions */
  
 @@ -107,6 +111,10 @@
  #define AQCSFRC_CSFA_FRCHIGH BIT(1)
  #define AQCSFRC_CSFA_DISSWFRC(BIT(1) | BIT(0))
  
 +#define EPWMCLK_EN_SHIFT 8
 +
 +#define PWM_CELL_SIZE3
 +
  #define NUM_PWM_CHANNEL  2   /* EHRPWM channels */
  
  struct ehrpwm_pwm_chip {
 @@ -392,12 +400,27 @@ static const struct pwm_ops ehrpwm_pwm_ops = {
   .owner  = THIS_MODULE,
  };
  
 +#ifdef CONFIG_OF
 +static const struct of_device_id ehrpwm_of_match[] = {
 + {
 + .compatible = ti,am33xx-ehrpwm,
 + },
 + {},
 +};
 +MODULE_DEVICE_TABLE(of, ehrpwm_of_match);
 +#endif
 +
  static int __devinit ehrpwm_pwm_probe(struct platform_device *pdev)
  {
   int ret;
   struct resource *r;
   struct clk *clk;
   struct ehrpwm_pwm_chip *pc;
 + struct pinctrl *pinctrl;
 +
 + pinctrl = devm_pinctrl_get_select_default(pdev-dev);

I didn't see a patch adding the pinctrl entries.

 + if (IS_ERR(pinctrl))
 + dev_warn(pdev-dev, failed to configure pins from driver\n);
  
   pc = devm_kzalloc(pdev-dev, sizeof(*pc), GFP_KERNEL);
   if (!pc) {
 @@ -419,6 +442,7 @@ static int __devinit ehrpwm_pwm_probe(struct 
 platform_device *pdev)
  
   pc-chip.dev = pdev-dev;
   pc-chip.ops = ehrpwm_pwm_ops;
 + pc-chip.of_pwm_n_cells = PWM_CELL_SIZE;
   pc-chip.base = -1;
   pc-chip.npwm = NUM_PWM_CHANNEL;
  
 @@ -437,8 +461,11 @@ static int __devinit ehrpwm_pwm_probe(struct 
 platform_device *pdev)
   dev_err(pdev-dev, pwmchip_add() failed: %d\n, ret);
   return ret;
   }
 -
   pm_runtime_enable(pdev-dev);
 + pm_runtime_get_sync(pdev-dev);
 + pwmss_submodule_state_change(pdev-dev.parent, EPWMCLK_EN_SHIFT, true);

I think you should modify this API to return the status for drivers to check.

Another related question, why should this clock be enabled in probe and not 
only when it
is required? Shouldn't it be disabled in suspend?

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 8/8] ARM: dts: AM33XX: Add PWM backlight DT data to am335x-evm

2012-11-05 Thread Bedia, Vaibhav
On Mon, Nov 05, 2012 at 14:42:29, Philip, Avinash wrote:
[...]

 + am33xx_pinmux: pinmux@44e10800 {
 + ecap0_pins: backlight_pins {
 + pinctrl-single,pins = 
 + 0x164 0x0   /* 
 eCAP0_in_PWM0_out.eCAP0_in_PWM0_out MODE0 */
 + ;
 + };
 + };
 +
Ok I see the pinctrl entries here. Shouldn't this be done before
the change in the driver?

Regards.
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC PATCH v3 00/16] DMA Engine support for AM33XX

2012-10-21 Thread Bedia, Vaibhav
On Fri, Oct 19, 2012 at 22:16:15, Porter, Matt wrote:
> On Fri, Oct 19, 2012 at 12:02:42PM +0000, Bedia, Vaibhav wrote:
> > On Fri, Oct 19, 2012 at 16:45:58, Porter, Matt wrote:
> > > On Fri, Oct 19, 2012 at 10:26:20AM +0000, Bedia, Vaibhav wrote:
> > [...]
> > > > 
> > > > I didn't see all the patches that you posted on edma-dmaengine-v3
> > > > but I do seem them on edma-dmaengine-am33xx-v3 branch.
> > > 
> > > I see I referenced the wrong branch in the cover letter. Thanks for
> > > testing and noticing this. Sorry to make you hunt for the correct
> > > branch in that repo. ;) 
> > > 
> > 
> > No problem.
> > 
> > > https://github.com/ohporter/linux/tree/edma-dmaengine-am33xx-v3
> > > is indeed the correct branch for those wanting to pull this in or
> > > grab some of the not-to-be-merged drivers I used for testing.
> > > 
> > > > I added a couple of patches to enable earlyprintk and build the DTB
> > > > appended kernel image uImage-dtb.am335x-evm
> > > > 
> > > > Here's what i see
> > > > 
> > > > [...]
> > > 
> > > 
> > > 
> > > > [0.175354] edma: probe of 4900.edma failed with error -16
> > > 
> > > I missed an uninitialized pdata case in the bug fixes mentioned in
> > > the changelog and the folks previously failing the same way didn't
> > > hit the case I suspect you are hitting. Can you try this and let me
> > > know how it works?
> > > 
> > 
> > That doesn't help :(
> 
> Ok, so I dumped my Linaro toolchain which was masking this issue that
> you got unlucky with on EVM, whereas I was lucky. Switching toolchains I
> was able to reproduce the problem. Pantelis Antoniou suggested some
> changes and the following fixes this issue for me...verified on both
> BeagleBone and EVM. Let me know if that works on your end and I'll
> incorporate some version of it in the next update.

Heh I would not have suspected the toolchain so early ;)

> 
> diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
> index b761b7a..6ed394f 100644
> --- a/arch/arm/common/edma.c
> +++ b/arch/arm/common/edma.c
> @@ -1598,6 +1598,8 @@ static struct of_dma_filter_info edma_filter_info = {
>  static int __init edma_probe(struct platform_device *pdev)
>  {
>   struct edma_soc_info**info = pdev->dev.platform_data;
> + struct edma_soc_info*ninfo[EDMA_MAX_CC] = {NULL, NULL};
> + struct edma_soc_infotmpinfo;
>   s8  (*queue_priority_mapping)[2];
>   s8  (*queue_tc_mapping)[2];
>   int i, j, off, ln, found = 0;
> @@ -1614,15 +1616,13 @@ static int __init edma_probe(struct platform_device 
> *pdev)
>   charirq_name[10];
>   struct device_node  *node = pdev->dev.of_node;
>   struct device   *dev = >dev;
> - struct edma_soc_info*pdata;
>   int ret;
>  
>   if (node) {
> - pdata = devm_kzalloc(dev,
> -  sizeof(struct edma_soc_info),
> -  GFP_KERNEL);
> - edma_of_parse_dt(dev, node, pdata);
> - info = 
> + info = ninfo;
> + edma_of_parse_dt(dev, node, );
> + info[0] = 
> +
>   dma_cap_set(DMA_SLAVE, edma_filter_info.dma_cap);
>   of_dma_controller_register(dev->of_node,
>  of_dma_simple_xlate,
> 

With the above diff, the kernel boots fine on the EVM.

> > Looking at the original crash log, I suspect something is not correct
> > with the irq portion, probably in the DT or the driver. 
> > 
> > "genirq: Flags mismatch irq 28.  (edma) vs.  (edma)"
> > 
> > The warning below that is coming due to fail case in edma_probe not tracking
> > the request_irq status properly and but IMO that's a separate issue.
> 
> It is a separate issue, indeed. My ideal goal was to avoid changing
> anything in this existing davinci dma implementation, that's why the
> error paths were unmodified. Since I'm having to rework a few more things
> I'll look at those and generate an improved version.
> 
> Russ Dill also made some good simplification/cleanup suggestions for the
> of parsing on irc which I'll incorporate in the next version.

Ok, sounds good.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC PATCH v3 00/16] DMA Engine support for AM33XX

2012-10-21 Thread Bedia, Vaibhav
On Fri, Oct 19, 2012 at 22:16:15, Porter, Matt wrote:
 On Fri, Oct 19, 2012 at 12:02:42PM +, Bedia, Vaibhav wrote:
  On Fri, Oct 19, 2012 at 16:45:58, Porter, Matt wrote:
   On Fri, Oct 19, 2012 at 10:26:20AM +, Bedia, Vaibhav wrote:
  [...]

I didn't see all the patches that you posted on edma-dmaengine-v3
but I do seem them on edma-dmaengine-am33xx-v3 branch.
   
   I see I referenced the wrong branch in the cover letter. Thanks for
   testing and noticing this. Sorry to make you hunt for the correct
   branch in that repo. ;) 
   
  
  No problem.
  
   https://github.com/ohporter/linux/tree/edma-dmaengine-am33xx-v3
   is indeed the correct branch for those wanting to pull this in or
   grab some of the not-to-be-merged drivers I used for testing.
   
I added a couple of patches to enable earlyprintk and build the DTB
appended kernel image uImage-dtb.am335x-evm

Here's what i see

[...]
   
   snip
   
[0.175354] edma: probe of 4900.edma failed with error -16
   
   I missed an uninitialized pdata case in the bug fixes mentioned in
   the changelog and the folks previously failing the same way didn't
   hit the case I suspect you are hitting. Can you try this and let me
   know how it works?
   
  
  That doesn't help :(
 
 Ok, so I dumped my Linaro toolchain which was masking this issue that
 you got unlucky with on EVM, whereas I was lucky. Switching toolchains I
 was able to reproduce the problem. Pantelis Antoniou suggested some
 changes and the following fixes this issue for me...verified on both
 BeagleBone and EVM. Let me know if that works on your end and I'll
 incorporate some version of it in the next update.

Heh I would not have suspected the toolchain so early ;)

 
 diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
 index b761b7a..6ed394f 100644
 --- a/arch/arm/common/edma.c
 +++ b/arch/arm/common/edma.c
 @@ -1598,6 +1598,8 @@ static struct of_dma_filter_info edma_filter_info = {
  static int __init edma_probe(struct platform_device *pdev)
  {
   struct edma_soc_info**info = pdev-dev.platform_data;
 + struct edma_soc_info*ninfo[EDMA_MAX_CC] = {NULL, NULL};
 + struct edma_soc_infotmpinfo;
   s8  (*queue_priority_mapping)[2];
   s8  (*queue_tc_mapping)[2];
   int i, j, off, ln, found = 0;
 @@ -1614,15 +1616,13 @@ static int __init edma_probe(struct platform_device 
 *pdev)
   charirq_name[10];
   struct device_node  *node = pdev-dev.of_node;
   struct device   *dev = pdev-dev;
 - struct edma_soc_info*pdata;
   int ret;
  
   if (node) {
 - pdata = devm_kzalloc(dev,
 -  sizeof(struct edma_soc_info),
 -  GFP_KERNEL);
 - edma_of_parse_dt(dev, node, pdata);
 - info = pdata;
 + info = ninfo;
 + edma_of_parse_dt(dev, node, tmpinfo);
 + info[0] = tmpinfo;
 +
   dma_cap_set(DMA_SLAVE, edma_filter_info.dma_cap);
   of_dma_controller_register(dev-of_node,
  of_dma_simple_xlate,
 

With the above diff, the kernel boots fine on the EVM.

  Looking at the original crash log, I suspect something is not correct
  with the irq portion, probably in the DT or the driver. 
  
  genirq: Flags mismatch irq 28.  (edma) vs.  (edma)
  
  The warning below that is coming due to fail case in edma_probe not tracking
  the request_irq status properly and but IMO that's a separate issue.
 
 It is a separate issue, indeed. My ideal goal was to avoid changing
 anything in this existing davinci dma implementation, that's why the
 error paths were unmodified. Since I'm having to rework a few more things
 I'll look at those and generate an improved version.
 
 Russ Dill also made some good simplification/cleanup suggestions for the
 of parsing on irc which I'll incorporate in the next version.

Ok, sounds good.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC PATCH v3 00/16] DMA Engine support for AM33XX

2012-10-19 Thread Bedia, Vaibhav
On Fri, Oct 19, 2012 at 16:45:58, Porter, Matt wrote:
> On Fri, Oct 19, 2012 at 10:26:20AM +0000, Bedia, Vaibhav wrote:
[...]
> > 
> > I didn't see all the patches that you posted on edma-dmaengine-v3
> > but I do seem them on edma-dmaengine-am33xx-v3 branch.
> 
> I see I referenced the wrong branch in the cover letter. Thanks for
> testing and noticing this. Sorry to make you hunt for the correct
> branch in that repo. ;) 
> 

No problem.

> https://github.com/ohporter/linux/tree/edma-dmaengine-am33xx-v3
> is indeed the correct branch for those wanting to pull this in or
> grab some of the not-to-be-merged drivers I used for testing.
> 
> > I added a couple of patches to enable earlyprintk and build the DTB
> > appended kernel image uImage-dtb.am335x-evm
> > 
> > Here's what i see
> > 
> > [...]
> 
> 
> 
> > [0.175354] edma: probe of 4900.edma failed with error -16
> 
> I missed an uninitialized pdata case in the bug fixes mentioned in
> the changelog and the folks previously failing the same way didn't
> hit the case I suspect you are hitting. Can you try this and let me
> know how it works?
> 

That doesn't help :(

Looking at the original crash log, I suspect something is not correct
with the irq portion, probably in the DT or the driver. 

"genirq: Flags mismatch irq 28.  (edma) vs.  (edma)"

The warning below that is coming due to fail case in edma_probe not tracking
the request_irq status properly and but IMO that's a separate issue.

BTW, I am trying this on the EVM.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC PATCH v3 00/16] DMA Engine support for AM33XX

2012-10-19 Thread Bedia, Vaibhav
Hi Matt,

On Thu, Oct 18, 2012 at 18:56:39, Porter, Matt wrote:
> Changes since v2:
>   - Rebased on 3.7-rc1
>   - Fixed bug in DT/pdata parsing first found by Gururaja
> that turned out to be masked by some toolchains
>   - Dropped unused mach-omap2/devices.c hsmmc patch
>   - Added AM33XX crossbar DMA event mux support
>   - Added am335x-evm support
> 
> Changes since v1:
>   - Rebased on top of mainline from 12250d8
>   - Dropped the feature removal schedule patch
>   - Implemented dma_request_slave_channel_compat() and
> converted the mmc and spi drivers to use it
>   - Dropped unneeded #address-cells and #size-cells from
> EDMA DT support
>   - Moved private EDMA header to linux/platform_data/ and
> removed some unneeded definitions
>   - Fixed parsing of optional properties
> 
> TODO:
>   - Add dmaengine support for per-channel caps so the
> hack to set the maximum segments can be replaced with
> a query to the dmaengine driver
> 
> This series adds DMA Engine support for AM33xx, which uses
> an EDMA DMAC. The EDMA DMAC has been previously supported by only
> a private API implementation (much like the situation with OMAP
> DMA) found on the DaVinci family of SoCs.
> 
> The series applies on top of 3.7-rc1 and the following patches:
> 
>   - GPMC fails to reserve memory fix:
> http://www.spinics.net/lists/linux-omap/msg79675.html
>   - TPS65910 regulator fix:
> https://patchwork.kernel.org/patch/1593651/
>   - dmaengine DT support from Vinod's dmaengine_dt branch in
> git://git.infradead.org/users/vkoul/slave-dma.git since
> 027478851791df751176398be02a3b1c5f6aa824
> 
> The approach taken is similar to how OMAP DMA is being converted to
> DMA Engine support. With the functional EDMA private API already
> existing in mach-davinci/dma.c, we first move that to an ARM common
> area so it can be shared. Adding DT and runtime PM support to the
> private EDMA API implementation allows it to run on AM33xx. AM33xx
> *only* boots using DT so we leverage Jon's generic DT DMA helpers to
> register EDMA DMAC with the of_dma framework and then add support
> for calling the dma_request_slave_channel() API to both the mmc
> and spi drivers.
> 
> With this series both BeagleBone and the AM335x EVM have working
> MMC and SPI support.
> 
> This is tested on BeagleBone with a SPI framebuffer driver and MMC
> rootfs. A trivial gpio DMA event misc driver was used to test the
> crossbar DMA event support. It is also tested on the AM335x EVM
> with the onboard SPI flash and MMC rootfs. The branch at
> https://github.com/ohporter/linux/tree/edma-dmaengine-v3 has the
> complete series, dependencies, and some test drivers/defconfigs.
> 

I didn't see all the patches that you posted on edma-dmaengine-v3
but I do seem them on edma-dmaengine-am33xx-v3 branch.

I added a couple of patches to enable earlyprintk and build the DTB
appended kernel image uImage-dtb.am335x-evm

Here's what i see

[...]
[0.128831] regulator-dummy: no parameters
[0.130793] NET: Registered protocol family 16
[0.131694] DMA: preallocated 256 KiB pool for atomic coherent allocations
[0.133030] omap-gpmc omap-gpmc: GPMC revision 6.0
[0.153136] platform 4900.edma: alias fck already exists
[0.153176] platform 4900.edma: alias fck already exists
[0.153199] platform 4900.edma: alias fck already exists
[0.158184] OMAP GPIO hardware version 0.1
[0.172844] No ATAGs?
[0.172868] hw-breakpoint: debug architecture 0x4 unsupported.
[0.174282] genirq: Flags mismatch irq 28.  (edma) vs.  
(edma)
[0.174536] [ cut here ]
[0.174576] WARNING: at kernel/irq/manage.c:1211 __free_irq+0x9c/0x1c0()
[0.174586] Trying to free already-free IRQ 28
[0.174596] Modules linked in:
[0.174645] [] (unwind_backtrace+0x0/0xf0) from [] 
(warn_slowpath_common+0x4c/0x64)
[0.174668] [] (warn_slowpath_common+0x4c/0x64) from [] 
(warn_slowpath_fmt+0x30/0x40)
[0.174688] [] (warn_slowpath_fmt+0x30/0x40) from [] 
(__free_irq+0x9c/0x1c0)
[0.174708] [] (__free_irq+0x9c/0x1c0) from [] 
(free_irq+0x4c/0xa8)
[0.174739] [] (free_irq+0x4c/0xa8) from [] 
(edma_probe+0x93c/0xa24)
[0.174770] [] (edma_probe+0x93c/0xa24) from [] 
(platform_drv_probe+0x18/0x1c)
[0.174793] [] (platform_drv_probe+0x18/0x1c) from [] 
(driver_probe_device+0x84/0x224)
[0.174814] [] (driver_probe_device+0x84/0x224) from [] 
(__driver_attach+0x94/0x98)
[0.174834] [] (__driver_attach+0x94/0x98) from [] 
(bus_for_each_dev+0x50/0x7c)
[0.174854] [] (bus_for_each_dev+0x50/0x7c) from [] 
(bus_add_driver+0xa0/0x240)
[0.174874] [] (bus_add_driver+0xa0/0x240) from [] 
(driver_register+0x78/0x144)
[0.174896] [] (driver_register+0x78/0x144) from [] 
(platform_driver_probe+0x18/0x9c)
[0.174918] [] (platform_driver_probe+0x18/0x9c) from [] 

RE: [RFC PATCH v3 00/16] DMA Engine support for AM33XX

2012-10-19 Thread Bedia, Vaibhav
Hi Matt,

On Thu, Oct 18, 2012 at 18:56:39, Porter, Matt wrote:
 Changes since v2:
   - Rebased on 3.7-rc1
   - Fixed bug in DT/pdata parsing first found by Gururaja
 that turned out to be masked by some toolchains
   - Dropped unused mach-omap2/devices.c hsmmc patch
   - Added AM33XX crossbar DMA event mux support
   - Added am335x-evm support
 
 Changes since v1:
   - Rebased on top of mainline from 12250d8
   - Dropped the feature removal schedule patch
   - Implemented dma_request_slave_channel_compat() and
 converted the mmc and spi drivers to use it
   - Dropped unneeded #address-cells and #size-cells from
 EDMA DT support
   - Moved private EDMA header to linux/platform_data/ and
 removed some unneeded definitions
   - Fixed parsing of optional properties
 
 TODO:
   - Add dmaengine support for per-channel caps so the
 hack to set the maximum segments can be replaced with
 a query to the dmaengine driver
 
 This series adds DMA Engine support for AM33xx, which uses
 an EDMA DMAC. The EDMA DMAC has been previously supported by only
 a private API implementation (much like the situation with OMAP
 DMA) found on the DaVinci family of SoCs.
 
 The series applies on top of 3.7-rc1 and the following patches:
 
   - GPMC fails to reserve memory fix:
 http://www.spinics.net/lists/linux-omap/msg79675.html
   - TPS65910 regulator fix:
 https://patchwork.kernel.org/patch/1593651/
   - dmaengine DT support from Vinod's dmaengine_dt branch in
 git://git.infradead.org/users/vkoul/slave-dma.git since
 027478851791df751176398be02a3b1c5f6aa824
 
 The approach taken is similar to how OMAP DMA is being converted to
 DMA Engine support. With the functional EDMA private API already
 existing in mach-davinci/dma.c, we first move that to an ARM common
 area so it can be shared. Adding DT and runtime PM support to the
 private EDMA API implementation allows it to run on AM33xx. AM33xx
 *only* boots using DT so we leverage Jon's generic DT DMA helpers to
 register EDMA DMAC with the of_dma framework and then add support
 for calling the dma_request_slave_channel() API to both the mmc
 and spi drivers.
 
 With this series both BeagleBone and the AM335x EVM have working
 MMC and SPI support.
 
 This is tested on BeagleBone with a SPI framebuffer driver and MMC
 rootfs. A trivial gpio DMA event misc driver was used to test the
 crossbar DMA event support. It is also tested on the AM335x EVM
 with the onboard SPI flash and MMC rootfs. The branch at
 https://github.com/ohporter/linux/tree/edma-dmaengine-v3 has the
 complete series, dependencies, and some test drivers/defconfigs.
 

I didn't see all the patches that you posted on edma-dmaengine-v3
but I do seem them on edma-dmaengine-am33xx-v3 branch.

I added a couple of patches to enable earlyprintk and build the DTB
appended kernel image uImage-dtb.am335x-evm

Here's what i see

[...]
[0.128831] regulator-dummy: no parameters
[0.130793] NET: Registered protocol family 16
[0.131694] DMA: preallocated 256 KiB pool for atomic coherent allocations
[0.133030] omap-gpmc omap-gpmc: GPMC revision 6.0
[0.153136] platform 4900.edma: alias fck already exists
[0.153176] platform 4900.edma: alias fck already exists
[0.153199] platform 4900.edma: alias fck already exists
[0.158184] OMAP GPIO hardware version 0.1
[0.172844] No ATAGs?
[0.172868] hw-breakpoint: debug architecture 0x4 unsupported.
[0.174282] genirq: Flags mismatch irq 28.  (edma) vs.  
(edma)
[0.174536] [ cut here ]
[0.174576] WARNING: at kernel/irq/manage.c:1211 __free_irq+0x9c/0x1c0()
[0.174586] Trying to free already-free IRQ 28
[0.174596] Modules linked in:
[0.174645] [c001b0e0] (unwind_backtrace+0x0/0xf0) from [c0042900] 
(warn_slowpath_common+0x4c/0x64)
[0.174668] [c0042900] (warn_slowpath_common+0x4c/0x64) from [c00429ac] 
(warn_slowpath_fmt+0x30/0x40)
[0.174688] [c00429ac] (warn_slowpath_fmt+0x30/0x40) from [c00a8298] 
(__free_irq+0x9c/0x1c0)
[0.174708] [c00a8298] (__free_irq+0x9c/0x1c0) from [c00a8408] 
(free_irq+0x4c/0xa8)
[0.174739] [c00a8408] (free_irq+0x4c/0xa8) from [c07976ec] 
(edma_probe+0x93c/0xa24)
[0.174770] [c07976ec] (edma_probe+0x93c/0xa24) from [c03226d4] 
(platform_drv_probe+0x18/0x1c)
[0.174793] [c03226d4] (platform_drv_probe+0x18/0x1c) from [c0321494] 
(driver_probe_device+0x84/0x224)
[0.174814] [c0321494] (driver_probe_device+0x84/0x224) from [c03216c8] 
(__driver_attach+0x94/0x98)
[0.174834] [c03216c8] (__driver_attach+0x94/0x98) from [c031fd60] 
(bus_for_each_dev+0x50/0x7c)
[0.174854] [c031fd60] (bus_for_each_dev+0x50/0x7c) from [c0320bc4] 
(bus_add_driver+0xa0/0x240)
[0.174874] [c0320bc4] (bus_add_driver+0xa0/0x240) from [c0321bfc] 
(driver_register+0x78/0x144)
[0.174896] [c0321bfc] 

RE: [RFC PATCH v3 00/16] DMA Engine support for AM33XX

2012-10-19 Thread Bedia, Vaibhav
On Fri, Oct 19, 2012 at 16:45:58, Porter, Matt wrote:
 On Fri, Oct 19, 2012 at 10:26:20AM +, Bedia, Vaibhav wrote:
[...]
  
  I didn't see all the patches that you posted on edma-dmaengine-v3
  but I do seem them on edma-dmaengine-am33xx-v3 branch.
 
 I see I referenced the wrong branch in the cover letter. Thanks for
 testing and noticing this. Sorry to make you hunt for the correct
 branch in that repo. ;) 
 

No problem.

 https://github.com/ohporter/linux/tree/edma-dmaengine-am33xx-v3
 is indeed the correct branch for those wanting to pull this in or
 grab some of the not-to-be-merged drivers I used for testing.
 
  I added a couple of patches to enable earlyprintk and build the DTB
  appended kernel image uImage-dtb.am335x-evm
  
  Here's what i see
  
  [...]
 
 snip
 
  [0.175354] edma: probe of 4900.edma failed with error -16
 
 I missed an uninitialized pdata case in the bug fixes mentioned in
 the changelog and the folks previously failing the same way didn't
 hit the case I suspect you are hitting. Can you try this and let me
 know how it works?
 

That doesn't help :(

Looking at the original crash log, I suspect something is not correct
with the irq portion, probably in the DT or the driver. 

genirq: Flags mismatch irq 28.  (edma) vs.  (edma)

The warning below that is coming due to fail case in edma_probe not tracking
the request_irq status properly and but IMO that's a separate issue.

BTW, I am trying this on the EVM.

Regards,
Vaibhav
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC] ARM: sched_clock: update epoch_cyc on resume

2012-07-30 Thread Bedia, Vaibhav
On Sat, Jul 28, 2012 at 03:53:05, Linus Walleij wrote:
> On Tue, Jul 24, 2012 at 11:16 AM, Bedia, Vaibhav  wrote:
> 
> >> > A connecting theme is that of being avle to flag clock sources as
> >> > sched_clock providers. If all clocksources were tagged with
> >> > rating, and only clocksources were used for sched_clock(), the
> >> > kernel could select the highest-rated clock under all circumstances.
> >> >
> >> > But that's quite intrusive, more of an idea. :-P
> >>
> >
> > Too intrusive I guess ;)
> >
> > There were some discussions on this in the context of AM335x [1] [2].
> > Right now only sched_clock can be registered and I guess this restriction
> > is not going to go away any time soon.
> 
> Why do you think that? The restriction to only assign sched_clock() at
> compile-time was recently removed so its now runtime assigned.
> 

Yes it's runtime assigned but multiple calls to setup_sched_clock()
will trigger a WARN_ON() from arch/arm/kernel/sched_clock.c
unless I missing something basic here.

> So yes, a clock source that can die and change frequency is no good
> as primary system time, but the abstraction could still be used for
> those that do, just add another flag NOT_CONTINUOUS or so, and
> make sure the system does not select this for primary system
> clock source.
> 
> Then modelling sched_clock() on clock sources makes all more
> sense: just select the best one. For primary system clock source,
> do not select one which is non-continous.
> 

I think what you are suggesting above is similar to what AM335x was trying
to do but Russell pointed out issues with switching of timing sources and
that's what I was trying to highlight.

Regards,
Vaibhav B.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC] ARM: sched_clock: update epoch_cyc on resume

2012-07-30 Thread Bedia, Vaibhav
On Sat, Jul 28, 2012 at 03:53:05, Linus Walleij wrote:
 On Tue, Jul 24, 2012 at 11:16 AM, Bedia, Vaibhav vaibhav.be...@ti.com wrote:
 
   A connecting theme is that of being avle to flag clock sources as
   sched_clock providers. If all clocksources were tagged with
   rating, and only clocksources were used for sched_clock(), the
   kernel could select the highest-rated clock under all circumstances.
  
   But that's quite intrusive, more of an idea. :-P
 
 
  Too intrusive I guess ;)
 
  There were some discussions on this in the context of AM335x [1] [2].
  Right now only sched_clock can be registered and I guess this restriction
  is not going to go away any time soon.
 
 Why do you think that? The restriction to only assign sched_clock() at
 compile-time was recently removed so its now runtime assigned.
 

Yes it's runtime assigned but multiple calls to setup_sched_clock()
will trigger a WARN_ON() from arch/arm/kernel/sched_clock.c
unless I missing something basic here.

 So yes, a clock source that can die and change frequency is no good
 as primary system time, but the abstraction could still be used for
 those that do, just add another flag NOT_CONTINUOUS or so, and
 make sure the system does not select this for primary system
 clock source.
 
 Then modelling sched_clock() on clock sources makes all more
 sense: just select the best one. For primary system clock source,
 do not select one which is non-continous.
 

I think what you are suggesting above is similar to what AM335x was trying
to do but Russell pointed out issues with switching of timing sources and
that's what I was trying to highlight.

Regards,
Vaibhav B.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC] ARM: sched_clock: update epoch_cyc on resume

2012-07-24 Thread Bedia, Vaibhav
On Tue, Jul 24, 2012 at 05:58:32, Colin Cross wrote:
> On Mon, Jul 23, 2012 at 5:14 PM, Linus Walleij  
> wrote:
> > On Mon, Jul 23, 2012 at 9:27 PM, Colin Cross  wrote:
> >> On Mon, Jul 23, 2012 at 11:55 AM, Linus Walleij
> >
> >> Does the clock you use for sched_clock continue to run in all suspend
> >> modes? All the SoC's I've used only have a 32kHz clock in the deepest
> >> suspend mode,
> >
> > Yes, and yes it is 32kHz.
> >

On the platform that I am working on (AM335x) the sched_clock continues to
run and yes even on this it runs @ 32KHz.

> >> which is not ideal for sched_clock.
> >
> > Not that I know why scheduling with 32kHz is so bad compared to the
> > default system scheduling granularity which is HZ if you don't have
> > sched_clock() implemented.
> >
> > Since this seems to be such an important point, what makes you
> > want MHz:es for scheduling granularity? To me the biggest impact
> > is actually the granularity of the timestamps in the printk:s.
> >

I personally find the timestamps in the printks very late in the suspend
or very early in the resume extremely helpful for debugging. 
The printk timestamps also help figure out which portions of the platform
suspend code are taking long and can be optimized.

> > (It's not that I doubt your needs, more curiosity.)
> 
> There's a comment somewhere about higher resolution sched_clock
> providing fairer scheduling.  With 32 kHz sched_clock, every runtime
> measured by the scheduler will be wrong by up to 31.25 us.  Most
> systems have a faster clock, and if it's available it seems silly not
> to use it.
> 
> It's also used for tracing, where 31.25 us resolution is a little low
> for function tracing or function graph tracing.
> 
> >>  For example, on
> >> Tegra2 the faster 1MHz clock used for sched_clock resets in the
> >> deepest suspend state (LP0) but not the shallowest suspend state
> >> (LP2), and which suspend state the chip hits depends on which hardware
> >> is active.  Opting out of this patch would cause Tegra's clock to
> >> sometimes run in suspend, and sometimes not, which seems worse for
> >> debugging than consistently not running in suspend.  I'd be surprised
> >> if a similar situation didn't apply to your platform.
> >

Is there any other slower on Tegra2 which doesn't reset and hence can be used
for sched_clock in LP0 as well as LP2? 

There's a trade-off that the end-user might choose to make - 
either use a faster clock for sched_clock which stops in suspend
or use a slower, in most cases 32KHz, clock which doesn't.
IMO this aspect should be configurable.

> > Well being able to switch between different sched_clock() providers
> > may be the ideal...
> >

Hmm... not exactly. More below.

> >>> - If it absolutely needs to be in the core code, also have a bool
> >>>   field indicating whether the clock is going to die during suspend
> >>>   and add new registration functions for setting that sched_clock
> >>>   type, e.g. setup_sched_clock_nonsuspendable()
> >>
> >> Sounds reasonable if some platforms need the extra complexity.
> >

I am not sure but I am guessing even on OMAPx the timer used as sched_clock
keeps running.

> > OK agreed.
> >
> > A connecting theme is that of being avle to flag clock sources as
> > sched_clock providers. If all clocksources were tagged with
> > rating, and only clocksources were used for sched_clock(), the
> > kernel could select the highest-rated clock under all circumstances.
> >
> > But that's quite intrusive, more of an idea. :-P
> 

Too intrusive I guess ;)

There were some discussions on this in the context of AM335x [1] [2].
Right now only sched_clock can be registered and I guess this restriction
is not going to go away any time soon.

Regards,
Vaibhav B.

[1] 
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-January/080862.html 
[2] http://lists.infradead.org/pipermail/linux-arm-kernel/2012-April/092890.html


> sched_clock is supposed to be very low overhead compared to ktime_get,
> and has some strict  requirements if CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
> is not set (see kernel/sched/clock.c), but it might be possible.
> 
> ___
> linux-arm-kernel mailing list
> linux-arm-ker...@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [RFC] ARM: sched_clock: update epoch_cyc on resume

2012-07-24 Thread Bedia, Vaibhav
On Tue, Jul 24, 2012 at 05:58:32, Colin Cross wrote:
 On Mon, Jul 23, 2012 at 5:14 PM, Linus Walleij linus.wall...@linaro.org 
 wrote:
  On Mon, Jul 23, 2012 at 9:27 PM, Colin Cross ccr...@android.com wrote:
  On Mon, Jul 23, 2012 at 11:55 AM, Linus Walleij
 
  Does the clock you use for sched_clock continue to run in all suspend
  modes? All the SoC's I've used only have a 32kHz clock in the deepest
  suspend mode,
 
  Yes, and yes it is 32kHz.
 

On the platform that I am working on (AM335x) the sched_clock continues to
run and yes even on this it runs @ 32KHz.

  which is not ideal for sched_clock.
 
  Not that I know why scheduling with 32kHz is so bad compared to the
  default system scheduling granularity which is HZ if you don't have
  sched_clock() implemented.
 
  Since this seems to be such an important point, what makes you
  want MHz:es for scheduling granularity? To me the biggest impact
  is actually the granularity of the timestamps in the printk:s.
 

I personally find the timestamps in the printks very late in the suspend
or very early in the resume extremely helpful for debugging. 
The printk timestamps also help figure out which portions of the platform
suspend code are taking long and can be optimized.

  (It's not that I doubt your needs, more curiosity.)
 
 There's a comment somewhere about higher resolution sched_clock
 providing fairer scheduling.  With 32 kHz sched_clock, every runtime
 measured by the scheduler will be wrong by up to 31.25 us.  Most
 systems have a faster clock, and if it's available it seems silly not
 to use it.
 
 It's also used for tracing, where 31.25 us resolution is a little low
 for function tracing or function graph tracing.
 
   For example, on
  Tegra2 the faster 1MHz clock used for sched_clock resets in the
  deepest suspend state (LP0) but not the shallowest suspend state
  (LP2), and which suspend state the chip hits depends on which hardware
  is active.  Opting out of this patch would cause Tegra's clock to
  sometimes run in suspend, and sometimes not, which seems worse for
  debugging than consistently not running in suspend.  I'd be surprised
  if a similar situation didn't apply to your platform.
 

Is there any other slower on Tegra2 which doesn't reset and hence can be used
for sched_clock in LP0 as well as LP2? 

There's a trade-off that the end-user might choose to make - 
either use a faster clock for sched_clock which stops in suspend
or use a slower, in most cases 32KHz, clock which doesn't.
IMO this aspect should be configurable.

  Well being able to switch between different sched_clock() providers
  may be the ideal...
 

Hmm... not exactly. More below.

  - If it absolutely needs to be in the core code, also have a bool
field indicating whether the clock is going to die during suspend
and add new registration functions for setting that sched_clock
type, e.g. setup_sched_clock_nonsuspendable()
 
  Sounds reasonable if some platforms need the extra complexity.
 

I am not sure but I am guessing even on OMAPx the timer used as sched_clock
keeps running.

  OK agreed.
 
  A connecting theme is that of being avle to flag clock sources as
  sched_clock providers. If all clocksources were tagged with
  rating, and only clocksources were used for sched_clock(), the
  kernel could select the highest-rated clock under all circumstances.
 
  But that's quite intrusive, more of an idea. :-P
 

Too intrusive I guess ;)

There were some discussions on this in the context of AM335x [1] [2].
Right now only sched_clock can be registered and I guess this restriction
is not going to go away any time soon.

Regards,
Vaibhav B.

[1] 
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-January/080862.html 
[2] http://lists.infradead.org/pipermail/linux-arm-kernel/2012-April/092890.html


 sched_clock is supposed to be very low overhead compared to ktime_get,
 and has some strict  requirements if CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
 is not set (see kernel/sched/clock.c), but it might be possible.
 
 ___
 linux-arm-kernel mailing list
 linux-arm-ker...@lists.infradead.org
 http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
 

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