aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSimon Glass2022-10-15 08:08:54 -0600
committerSimon Glass2022-10-17 21:17:12 -0600
commite21ec17d42aa086a2ab95a1ffb1bd09495b9c8e8 (patch)
tree0fe9528ffa5f049da9b812b83f137e9d5498662d /drivers
parent17196e446b6ea11220c3e08cebff839f999e0185 (diff)
dm: regmap: Disable range checks in SPL
A recent change to regmap breaks building of phycore-rk3288 for me. The difference is only a few bytes. Somehow CI seems to pass, even though it fails when I run docker locally. But it prevents me from sending any more pull requests. In any case this board is clearly near the limit. We could revert the offending change, but it is needed for sandbox tests. Instead, add a way to drop the range checks in SPL, since they end up doing nothing if everything is working as expected. This makes phycore-rk3288 build again for me and reduces the size of SPL slightly for a number of boards. Signed-off-by: Simon Glass <sjg@chromium.org> Fixes: 947d4f132b4 ("regmap: fix range checks")
Diffstat (limited to 'drivers')
-rw-r--r--drivers/core/regmap.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c
index 5ccbf9abb8a..e33bb9d798d 100644
--- a/drivers/core/regmap.c
+++ b/drivers/core/regmap.c
@@ -4,6 +4,8 @@
* Written by Simon Glass <sjg@chromium.org>
*/
+#define LOG_CATEGORY LOGC_DM
+
#include <common.h>
#include <dm.h>
#include <errno.h>
@@ -37,6 +39,22 @@ struct regmap_field {
DECLARE_GLOBAL_DATA_PTR;
/**
+ * do_range_check() - Control whether range checks are done
+ *
+ * Returns: true to do range checks, false to skip
+ *
+ * This is used to reduce code size on SPL where range checks are known not to
+ * be needed
+ *
+ * Add this to the top of the file to enable them: #define LOG_DEBUG
+ */
+static inline bool do_range_check(void)
+{
+ return _LOG_DEBUG || !IS_ENABLED(CONFIG_SPL);
+
+}
+
+/**
* regmap_alloc() - Allocate a regmap with a given number of ranges.
*
* @count: Number of ranges to be allocated for the regmap.
@@ -391,7 +409,7 @@ int regmap_raw_read_range(struct regmap *map, uint range_num, uint offset,
struct regmap_range *range;
void *ptr;
- if (range_num >= map->range_count) {
+ if (do_range_check() && range_num >= map->range_count) {
debug("%s: range index %d larger than range count\n",
__func__, range_num);
return -ERANGE;
@@ -399,7 +417,8 @@ int regmap_raw_read_range(struct regmap *map, uint range_num, uint offset,
range = &map->ranges[range_num];
offset <<= map->reg_offset_shift;
- if (offset + val_len > range->size || offset + val_len < offset) {
+ if (do_range_check() &&
+ (offset + val_len > range->size || offset + val_len < offset)) {
debug("%s: offset/size combination invalid\n", __func__);
return -ERANGE;
}