The Aspeed 7th generation SoC features two GPIO controllers: one with 12 GPIO pins and another with 216 GPIO pins. The main difference from the previous generation is that the control logic has been updated to support per-pin control, allowing each pin to have its own 32-bit register for configuring value, direction, interrupt type, and more. This patch serial also add low-level operations (llops) to abstract the register access for GPIO registers and the coprocessor request/release in gpio-aspeed.c making it easier to extend the driver to support different hardware register layouts. Change since v6: - Reorder the patch. - Reoder the llops assignments in the same order as the member declarations. - Add a comment explaining the logic used for the debounce timer array. Change since v5: - Reorder the aspeed_gpio_llops api - Add aspeed_gpio prefix for all of the api - Add mask value check before field_get and field_prep - Separate the devm_clk_get_enabled modification into a new patch. Change since v4: - Add `reg_bank_get` callback - `reg_bits_get` -> `reg_bit_get - `dcache_require` -> `require_dcache` - Use `devm_clk_get_enabled` to get the clock source - g4 specific api doesn't need to use the callback function Change since v3: - Add `privilege_ctrl` and `privilege_init` callback - Use `bool aspeed_gpio_support_copro()` api to replace the `cmd_source_supoort` flag - Add the `dcache_require` flag and move the dcache usage into the reg_bit_set callback - `reg_bits_set` -> `reg_bit_set` and `reg_bits_read` -> `reg_bits_get` - `bool copro = 0` -> `bool copro = false` - `if (!gpio->config->llops->reg_bit_set || !gpio->config->llops->reg_bits_get) return -EINVAL;` - Correct the access of reg_irq_status - Remove __init attribute to fix the compiler warning Change since v2: - Correct minItems for gpio-line names - Remove the example for ast2700, because it's the same as the AST2600 - Fix the sparse warning which is reported by the test robot - Remove the version and use the match data to replace it. - Add another two patches one for deferred probe one for flush write. Changes since v1: - Merge the gpio-aspeed-g7.c into the gpio-aspeed.c. - Create the llops in gpio-aspeed.c for flexibility. Billy Tsai (7): gpio: aspeed: Add the flush write to ensure the write complete. gpio: aspeed: Use devm_clk api to manage clock source gpio: aspeed: Change the macro to support deferred probe gpio: aspeed: Remove the name for bank array gpio: aspeed: Create llops to handle hardware access dt-bindings: gpio: aspeed,ast2400-gpio: Support ast2700 gpio: aspeed: Support G7 Aspeed gpio controller .../bindings/gpio/aspeed,ast2400-gpio.yaml | 19 +- drivers/gpio/gpio-aspeed.c | 620 +++++++++++------- 2 files changed, 408 insertions(+), 231 deletions(-) -- 2.25.1
On Tue, Oct 8, 2024 at 10:14 AM Billy Tsai <billy_tsai@aspeedtech.com> wrote: > > The Aspeed 7th generation SoC features two GPIO controllers: one with 12 > GPIO pins and another with 216 GPIO pins. The main difference from the > previous generation is that the control logic has been updated to support > per-pin control, allowing each pin to have its own 32-bit register for > configuring value, direction, interrupt type, and more. > This patch serial also add low-level operations (llops) to abstract the > register access for GPIO registers and the coprocessor request/release in > gpio-aspeed.c making it easier to extend the driver to support different > hardware register layouts. > I picked up the first two patches for v6.12. The rest conflicts with my v6.13 branch so I'll send the fixes to Torvalds, wait for rc3 and then apply the rest. Thanks, Bart
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> On Tue, 08 Oct 2024 16:14:43 +0800, Billy Tsai wrote: > The Aspeed 7th generation SoC features two GPIO controllers: one with 12 > GPIO pins and another with 216 GPIO pins. The main difference from the > previous generation is that the control logic has been updated to support > per-pin control, allowing each pin to have its own 32-bit register for > configuring value, direction, interrupt type, and more. > This patch serial also add low-level operations (llops) to abstract the > register access for GPIO registers and the coprocessor request/release in > gpio-aspeed.c making it easier to extend the driver to support different > hardware register layouts. > > [...] Applied, thanks! [1/7] gpio: aspeed: Add the flush write to ensure the write complete. commit: 1bb5a99e1f3fd27accb804aa0443a789161f843c [2/7] gpio: aspeed: Use devm_clk api to manage clock source commit: a6191a3d18119184237f4ee600039081ad992320 Best regards, -- Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> On Tue, 08 Oct 2024 16:14:43 +0800, Billy Tsai wrote: > The Aspeed 7th generation SoC features two GPIO controllers: one with 12 > GPIO pins and another with 216 GPIO pins. The main difference from the > previous generation is that the control logic has been updated to support > per-pin control, allowing each pin to have its own 32-bit register for > configuring value, direction, interrupt type, and more. > This patch serial also add low-level operations (llops) to abstract the > register access for GPIO registers and the coprocessor request/release in > gpio-aspeed.c making it easier to extend the driver to support different > hardware register layouts. > > [...] Applied, thanks! [3/7] gpio: aspeed: Change the macro to support deferred probe commit: f1bc03e7e9bbbb18ad60ad6c6908b16fb7f40545 [4/7] gpio: aspeed: Remove the name for bank array commit: d787289589202cd449cabed3d7fde84e18fb6dd6 [5/7] gpio: aspeed: Create llops to handle hardware access commit: 79fc9a2fcc457f4375118fbcdb6767163870b5ff [6/7] dt-bindings: gpio: aspeed,ast2400-gpio: Support ast2700 commit: bef6959a3746fc8207a0ca75e239c95d7409fd90 [7/7] gpio: aspeed: Support G7 Aspeed gpio controller commit: b2e861bd1eaf4c5f75139df9b75dade3334a5b6c Best regards, -- Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
© 2016 - 2024 Red Hat, Inc.