0015-reset-starfive-Add-StarFive-JH7110-reset-driver.patch 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. From ea2f40c943f4a6d39a2f3ea4660266250d37c95a Mon Sep 17 00:00:00 2001
  2. From: Hal Feng <[email protected]>
  3. Date: Sat, 1 Apr 2023 19:19:27 +0800
  4. Subject: [PATCH 015/122] reset: starfive: Add StarFive JH7110 reset driver
  5. Add auxiliary driver to support StarFive JH7110 system
  6. and always-on resets.
  7. Tested-by: Tommaso Merciai <[email protected]>
  8. Reviewed-by: Emil Renner Berthing <[email protected]>
  9. Signed-off-by: Hal Feng <[email protected]>
  10. Signed-off-by: Conor Dooley <[email protected]>
  11. ---
  12. drivers/reset/starfive/Kconfig | 8 +++
  13. drivers/reset/starfive/Makefile | 1 +
  14. .../reset/starfive/reset-starfive-jh7110.c | 70 +++++++++++++++++++
  15. 3 files changed, 79 insertions(+)
  16. create mode 100644 drivers/reset/starfive/reset-starfive-jh7110.c
  17. --- a/drivers/reset/starfive/Kconfig
  18. +++ b/drivers/reset/starfive/Kconfig
  19. @@ -10,3 +10,11 @@ config RESET_STARFIVE_JH7100
  20. default ARCH_STARFIVE
  21. help
  22. This enables the reset controller driver for the StarFive JH7100 SoC.
  23. +
  24. +config RESET_STARFIVE_JH7110
  25. + bool "StarFive JH7110 Reset Driver"
  26. + depends on AUXILIARY_BUS && CLK_STARFIVE_JH7110_SYS
  27. + select RESET_STARFIVE_JH71X0
  28. + default ARCH_STARFIVE
  29. + help
  30. + This enables the reset controller driver for the StarFive JH7110 SoC.
  31. --- a/drivers/reset/starfive/Makefile
  32. +++ b/drivers/reset/starfive/Makefile
  33. @@ -2,3 +2,4 @@
  34. obj-$(CONFIG_RESET_STARFIVE_JH71X0) += reset-starfive-jh71x0.o
  35. obj-$(CONFIG_RESET_STARFIVE_JH7100) += reset-starfive-jh7100.o
  36. +obj-$(CONFIG_RESET_STARFIVE_JH7110) += reset-starfive-jh7110.o
  37. --- /dev/null
  38. +++ b/drivers/reset/starfive/reset-starfive-jh7110.c
  39. @@ -0,0 +1,70 @@
  40. +// SPDX-License-Identifier: GPL-2.0-or-later
  41. +/*
  42. + * Reset driver for the StarFive JH7110 SoC
  43. + *
  44. + * Copyright (C) 2022 StarFive Technology Co., Ltd.
  45. + */
  46. +
  47. +#include <linux/auxiliary_bus.h>
  48. +
  49. +#include "reset-starfive-jh71x0.h"
  50. +
  51. +#include <dt-bindings/reset/starfive,jh7110-crg.h>
  52. +
  53. +struct jh7110_reset_info {
  54. + unsigned int nr_resets;
  55. + unsigned int assert_offset;
  56. + unsigned int status_offset;
  57. +};
  58. +
  59. +static const struct jh7110_reset_info jh7110_sys_info = {
  60. + .nr_resets = JH7110_SYSRST_END,
  61. + .assert_offset = 0x2F8,
  62. + .status_offset = 0x308,
  63. +};
  64. +
  65. +static const struct jh7110_reset_info jh7110_aon_info = {
  66. + .nr_resets = JH7110_AONRST_END,
  67. + .assert_offset = 0x38,
  68. + .status_offset = 0x3C,
  69. +};
  70. +
  71. +static int jh7110_reset_probe(struct auxiliary_device *adev,
  72. + const struct auxiliary_device_id *id)
  73. +{
  74. + struct jh7110_reset_info *info = (struct jh7110_reset_info *)(id->driver_data);
  75. + void __iomem **base = (void __iomem **)dev_get_drvdata(adev->dev.parent);
  76. +
  77. + if (!info || !base)
  78. + return -ENODEV;
  79. +
  80. + return reset_starfive_jh71x0_register(&adev->dev, adev->dev.parent->of_node,
  81. + *base + info->assert_offset,
  82. + *base + info->status_offset,
  83. + NULL,
  84. + info->nr_resets,
  85. + NULL);
  86. +}
  87. +
  88. +static const struct auxiliary_device_id jh7110_reset_ids[] = {
  89. + {
  90. + .name = "clk_starfive_jh7110_sys.rst-sys",
  91. + .driver_data = (kernel_ulong_t)&jh7110_sys_info,
  92. + },
  93. + {
  94. + .name = "clk_starfive_jh7110_sys.rst-aon",
  95. + .driver_data = (kernel_ulong_t)&jh7110_aon_info,
  96. + },
  97. + { /* sentinel */ }
  98. +};
  99. +MODULE_DEVICE_TABLE(auxiliary, jh7110_reset_ids);
  100. +
  101. +static struct auxiliary_driver jh7110_reset_driver = {
  102. + .probe = jh7110_reset_probe,
  103. + .id_table = jh7110_reset_ids,
  104. +};
  105. +module_auxiliary_driver(jh7110_reset_driver);
  106. +
  107. +MODULE_AUTHOR("Hal Feng <[email protected]>");
  108. +MODULE_DESCRIPTION("StarFive JH7110 reset driver");
  109. +MODULE_LICENSE("GPL");