Message ID | 20220826080230.1712978-1-weiyongjun1@huawei.com |
---|---|
Headers | show |
Series | allow gpio simulator be used as interrupt controller | expand |
On Fri, Aug 26, 2022 at 9:44 AM Wei Yongjun <weiyongjun1@huawei.com> wrote: > > This series allow gpio simulator be used as interrupt controller, the use > case is mockup some device which using GPIO as interrupt controller, such > as mcp2515 CAN device. With the dts [1], we can mockup a mcp2515 device, > and trigger irq by following commands: > > $ echo pull-down > /sys/bus/gpio/devices/gpiochip0/sim_gpio0/pull > $ echo pull-up > /sys/bus/gpio/devices/gpiochip0/sim_gpio0/pull > > > --[1]--------------------------------------------------------- > /dts-v1/; > > #include <dt-bindings/interrupt-controller/irq.h> > > / { > clk24m: clk24m { > compatible = "fixed-clock"; > clock-output-names = "clk24m"; > clock-frequency = <24000000>; > #clock-cells = <0>; > }; > > gpio-sim { > compatible = "gpio-simulator"; > > bank0: bank0 { > gpio-controller; > #gpio-cells = <2>; > ngpios = <16>; > > interrupt-controller; > #interrupt-cells = <2>; > > line_b-hog { > gpio-hog; > gpios = <0 1>; > input; > line-name = "irq-sim"; > }; Why do you need this hog? The GPIO will be marked as requested once the interrupt is taken by the driver. > }; > }; > > spi: spi { > compatible = "spi-mockup"; > > #address-cells = <1>; > #size-cells = <0>; > > can0: can@1 { > compatible = "microchip,mcp2515"; > reg = <1>; > clocks = <&clk24m>; > interrupt-parent = <&bank0>; > interrupts = <0 IRQ_TYPE_EDGE_BOTH>; > }; > > }; > }; > ------------------------------><----------------------------- > > Wei Yongjun (2): > genirq/irq_sim: Allow both one and two cell bindings > gpio: sim: make gpio simulator can be used as interrupt controller > > drivers/gpio/gpio-sim.c | 2 +- > kernel/irq/irq_sim.c | 1 + > 2 files changed, 2 insertions(+), 1 deletion(-) > > -- > 2.34.1 > Can you add some info about this to the documentation? Otherwise looks good. Bart
On 2022/9/1 0:08, Bartosz Golaszewski wrote: > On Fri, Aug 26, 2022 at 9:44 AM Wei Yongjun <weiyongjun1@huawei.com> wrote: >> >> This series allow gpio simulator be used as interrupt controller, the use >> case is mockup some device which using GPIO as interrupt controller, such >> as mcp2515 CAN device. With the dts [1], we can mockup a mcp2515 device, >> and trigger irq by following commands: >> >> $ echo pull-down > /sys/bus/gpio/devices/gpiochip0/sim_gpio0/pull >> $ echo pull-up > /sys/bus/gpio/devices/gpiochip0/sim_gpio0/pull >> >> >> --[1]--------------------------------------------------------- >> /dts-v1/; >> >> #include <dt-bindings/interrupt-controller/irq.h> >> >> / { >> clk24m: clk24m { >> compatible = "fixed-clock"; >> clock-output-names = "clk24m"; >> clock-frequency = <24000000>; >> #clock-cells = <0>; >> }; >> >> gpio-sim { >> compatible = "gpio-simulator"; >> >> bank0: bank0 { >> gpio-controller; >> #gpio-cells = <2>; >> ngpios = <16>; >> >> interrupt-controller; >> #interrupt-cells = <2>; >> >> line_b-hog { >> gpio-hog; >> gpios = <0 1>; >> input; >> line-name = "irq-sim"; >> }; > > Why do you need this hog? The GPIO will be marked as requested once > the interrupt is taken by the driver. Sorry for reply later. It seems that only if driver request gpio with fwnode_gpiod_get_index() marks GPIO as request one. If driver using request_threaded_irq() request one irq, the requested status will not be marked. We need to use hog or request by userspace to mark as requested. > >> }; >> }; >> >> spi: spi { >> compatible = "spi-mockup"; >> >> #address-cells = <1>; >> #size-cells = <0>; >> >> can0: can@1 { >> compatible = "microchip,mcp2515"; >> reg = <1>; >> clocks = <&clk24m>; >> interrupt-parent = <&bank0>; >> interrupts = <0 IRQ_TYPE_EDGE_BOTH>; >> }; >> >> }; >> }; >> ------------------------------><----------------------------- >> >> Wei Yongjun (2): >> genirq/irq_sim: Allow both one and two cell bindings >> gpio: sim: make gpio simulator can be used as interrupt controller >> >> drivers/gpio/gpio-sim.c | 2 +- >> kernel/irq/irq_sim.c | 1 + >> 2 files changed, 2 insertions(+), 1 deletion(-) >> >> -- >> 2.34.1 >> > > Can you add some info about this to the documentation? Will do that Thanks, Wei Yongjun
On Mon, Sep 26, 2022 at 8:57 AM Wei Yongjun <weiyongjun1@huawei.com> wrote: > > > > On 2022/9/1 0:08, Bartosz Golaszewski wrote: > > On Fri, Aug 26, 2022 at 9:44 AM Wei Yongjun <weiyongjun1@huawei.com> wrote: > >> > >> This series allow gpio simulator be used as interrupt controller, the use > >> case is mockup some device which using GPIO as interrupt controller, such > >> as mcp2515 CAN device. With the dts [1], we can mockup a mcp2515 device, > >> and trigger irq by following commands: > >> > >> $ echo pull-down > /sys/bus/gpio/devices/gpiochip0/sim_gpio0/pull > >> $ echo pull-up > /sys/bus/gpio/devices/gpiochip0/sim_gpio0/pull > >> > >> > >> --[1]--------------------------------------------------------- > >> /dts-v1/; > >> > >> #include <dt-bindings/interrupt-controller/irq.h> > >> > >> / { > >> clk24m: clk24m { > >> compatible = "fixed-clock"; > >> clock-output-names = "clk24m"; > >> clock-frequency = <24000000>; > >> #clock-cells = <0>; > >> }; > >> > >> gpio-sim { > >> compatible = "gpio-simulator"; > >> > >> bank0: bank0 { > >> gpio-controller; > >> #gpio-cells = <2>; > >> ngpios = <16>; > >> > >> interrupt-controller; > >> #interrupt-cells = <2>; > >> > >> line_b-hog { > >> gpio-hog; > >> gpios = <0 1>; > >> input; > >> line-name = "irq-sim"; > >> }; > > > > Why do you need this hog? The GPIO will be marked as requested once > > the interrupt is taken by the driver. > > Sorry for reply later. > > It seems that only if driver request gpio with fwnode_gpiod_get_index() > marks GPIO as request one. > > If driver using request_threaded_irq() request one irq, the requested > status will not be marked. We need to use hog or request by userspace > to mark as requested. > Right, of course. Thanks. > > > >> }; > >> }; > >> > >> spi: spi { > >> compatible = "spi-mockup"; > >> > >> #address-cells = <1>; > >> #size-cells = <0>; > >> > >> can0: can@1 { > >> compatible = "microchip,mcp2515"; > >> reg = <1>; > >> clocks = <&clk24m>; > >> interrupt-parent = <&bank0>; > >> interrupts = <0 IRQ_TYPE_EDGE_BOTH>; > >> }; > >> > >> }; > >> }; > >> ------------------------------><----------------------------- > >> > >> Wei Yongjun (2): > >> genirq/irq_sim: Allow both one and two cell bindings > >> gpio: sim: make gpio simulator can be used as interrupt controller > >> > >> drivers/gpio/gpio-sim.c | 2 +- > >> kernel/irq/irq_sim.c | 1 + > >> 2 files changed, 2 insertions(+), 1 deletion(-) > >> > >> -- > >> 2.34.1 > >> > > > > Can you add some info about this to the documentation? > Ok, I'll wait for v2. And you can drop the -next prefix too, it doesn't fix anything in next. Bart > Will do that > > Thanks, > Wei Yongjun