NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/51676: Enhancement - interrupt support for RPI gpio, kevents for gpio.c, PPS driver for gpio, and more



>Number:         51676
>Category:       kern
>Synopsis:       Enhancement - interrupt support for RPI gpio, kevents for gpio.c, PPS driver for gpio, and more
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 01 00:15:00 +0000 2016
>Originator:     Brad Spencer
>Release:        NetBSD 7.99.42
>Organization:
Personal project
>Environment:
System: NetBSD erebor 7.99.42 NetBSD 7.99.42 (EREBOR) #0: Tue Nov 29 09:05:19 EST 2016  brad%braddev.brad@localhost.local:/usr/src/sys/arch/evbarm/compile/EREBOR evbarm
Architecture: earmv6hf
Machine: evbarm
>Description:

I had a desire to build one of these:

http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html

...but did not want to run Linux and NetBSD lacked any interrupts on
the RPI's gpio pins and did not have a PPS driver for GPIO.  This is
an enhancement PR that is the result of working on this:

o Adds support for interrupts to arch/arm/broadcom/bcm2835_gpio.c

o Adds a "demo" driver for GPIO interrupts called gpioirq. 

o Adds simple kevents to dev/gpio/gpio.c that trigger on a number of
conditions, including an interrupt.

o Adds a demo userland program that demonstrates the use of kevents on
GPIO pins.  This can be used with the gpioirq or gpiopps driver to
actually see something happen.

o Adds a PPS driver called gpiopps that seems to make ntpd happy with
the type 20 and type 22 reference driver.  The type 28 driver can also
be used when gpsd is running, but I could not get the type 46 driver
to work and gpsd did not like the PPS device even with the type 28
driver.  I am not entirely sure gpsd from pkgsrc compiles in PPS
support on NetBSD.

>How-To-Repeat:

The tar.bz2 below includes a script that patches a source tree.
Unpack the tar file and do something like the following.  The script
will want the top of a checked out src tree:

./install_gpio_enhancement /development/usr/src

There are 20 diffs that are applied to the src tree and three new
directories.  Poorly worded man pages have been provided for gpioirq
and gpiopps and diffs against gpio.4 are included.

Simple usage:

modload gpioirq
modload gpiopps

gpioctl gpio0 attach gpioirq 4 0x01 0x01
gpioctl gpio0 attach gpiopps 26 0x01

Forgot...  to include diffs for MAKEDEV for gpiopps:

erebor: {15} ls -l /dev/gpiopps0
crw-rw-r--  1 root  _gpio  342, 0 Nov 29 17:02 /dev/gpiopps0

Maybe someone other than me will find this useful.


>Fix:

begin 644 GPIO_ENHANCEMENT.tar.bz2
M0EIH.3%!629361Z,R1L`283_W_YT%$!_________[O____]````0H`0`$0`"
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
9VP-3),,QA\X/`(&0`/_Q=R13A0D!Z,R1L*U`
`
end



Home | Main Index | Thread Index | Old Index