Hi, On Sat, 15 Oct 2022 at 08:39, Simon Glass <s...@chromium.org> wrote: > > 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 <s...@chromium.org> > Fixes: 947d4f132b4 ("regmap: fix range checks") > --- > > drivers/core/regmap.c | 22 ++++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c > index 5ccbf9abb8a..ab02ddba443 100644 > --- a/drivers/core/regmap.c > +++ b/drivers/core/regmap.c > @@ -4,6 +4,8 @@ > * Written by Simon Glass <s...@chromium.org> > */ > > +#define LOG_CATEGORY LOGC_DM > + > #include <common.h> > #include <dm.h> > #include <errno.h> > @@ -36,6 +38,21 @@ 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. > * > @@ -391,7 +408,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 +416,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; > } > -- > 2.38.0.413.g74048e4d9e-goog >
If no objections, I'll pull this in right away (e.g. Monday) as I am blocked from doing a pull request due to phycore-rk3288. Regards, Simon