lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <BANLkTikzBHJxToLPXQZCLN-GjbYHMfASLw@mail.gmail.com>
Date:	Wed, 6 Apr 2011 09:17:58 -0400
From:	Ben Gardiner <bengardiner@...ometrics.ca>
To:	Bill Gatliff <bgat@...lgatliff.com>
Cc:	linux-kernel@...r.kernel.org, linux-embedded@...r.kernel.org
Subject: Re: [PWM v9 2/3] PWM: GPIO+hrtimer device emulation

Hi Bill,

I tested this series on da850evm from commit
60124de319dc2800c0f75f44bf84471a8de0dbc5 of
git://git.billgatliff.com/pwm.git.

With the following commands I was able to observe the production of a
100Hz 50% output on a GPIO (specifically GPIO #125 which is GPIO7[13]
on the SoC and J15[13] on the baseboard for other da850 users).

     mount config /config -t configfs
     mkdir /config/gpio_pwm/125
     echo 1 > /sys/class/pwm/gpio_pwm\:125/export
     echo 10000000 > /sys/class/pwm/gpio_pwm\:125/period_ns
     echo 5000000 > /sys/class/pwm/gpio_pwm\:125/duty_ns
     echo 1 > /sys/class/pwm/gpio_pwm\:125/run

I noticed that the following command did not stop the pwm output.
     echo 0 > /sys/class/pwm/gpio_pwm\:125/run

But the following command did (and I did not need to echo 1 >
/sys/class/pwm/gpio_pwm\:125/unexport first)
     rm -rf /config/gpio_pwm/125

The observations from my testing above are repeated in context below:

On Thu, Mar 31, 2011 at 11:59 PM, Bill Gatliff <bgat@...lgatliff.com> wrote:
> Emulates a PWM device using a GPIO pin and an hrtimer.  Subject
> to CPU, scheduler and hardware limitations, can support many
> PWM outputs, e.g. as many as you have GPIO pins available for.
>
> On a 200 MHz ARM9 processor, a PWM frequency of 100 Hz can be attained
> with this code so long as the duty cycle remains between about 20-80%.
> At higher or lower duty cycles, the transition events may arrive too
> close for the scheduler and CPU to reliably service.
>
> This driver supports creation of new GPIO+hrtimer PWM devices via
> configfs:
>
>   # mount config /config -t configfs
>   # mkdir /config/gpio-pwm/<gpio number>

minor: I observed that the configfs directory was 'gpio_pwm' not 'gpio-pwm.'

> The new PWM device will appear as /sys/class/pwm/gpio-pwm.<gpio number>.
>
> Caveats:
>   * The GPIO pin number must be valid, not already in use
>   * The output state of the GPIO pin is configured when the PWM starts
>     running i.e. not immediately upon request, because the polarity of
>     the inactive state of the pin isn't known until the pwm device's
>     'polarity' attribute is configured
>   * After creating and binding the pwm device, you must then request
>     it by writing to /sys/class/pwm/gpio-pwm.<gpio number>/export
>
> Unbind and destroy the pwm device by first stopping and unexporting
> the pwm device under sysfs as usual; then do:

I observed that

# echo 0 > /sys/class/pwm/gpio_pwm\:125/run

did not stop the pwm output and that

# echo 1 > /sys/class/pwm/gpio_pwm\:125/unexport

was not required before rm -rf'ing the /config directory:
>   # rm -rf /config/gpio-pwm/<gpio number>

> Signed-off-by: Bill Gatliff <bgat@...lgatliff.com>

Overall this is a really easy to user userspace interface -- it was a
pleasure to setup and test.

Tested-by: Ben Gardiner <bengardiner@...ometrics.ca>

Best Regards,
Ben Gardiner

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ