On 4/6/20 4:58 AM, Jaehoon Chung wrote: > On 4/4/20 7:45 PM, Marek Vasut wrote: >> Add extended version of the bounce_buffer_start(), which permits passing in >> a custom alignment checker function for the buffer. This is useful e.g. on >> systems with various DMA restrictions and where the checker function might >> be more complex than a simple CPU cache alignment check. >> >> Signed-off-by: Marek Vasut <marek.vasut+rene...@gmail.com> >> Cc: Daniel Schwierzeck <daniel.schwierz...@gmail.com> >> Cc: Masahiro Yamada <yamada.masah...@socionext.com> >> Cc: Peng Fan <peng....@nxp.com> >> Cc: Simon Glass <s...@chromium.org> >> Cc: Tom Rini <tr...@konsulko.com> >> --- >> V2: No change >> --- >> common/bouncebuf.c | 20 +++++++++++++++----- >> include/bouncebuf.h | 15 +++++++++++++++ >> 2 files changed, 30 insertions(+), 5 deletions(-) >> >> diff --git a/common/bouncebuf.c b/common/bouncebuf.c >> index 614eb36c78..0ace152b98 100644 >> --- a/common/bouncebuf.c >> +++ b/common/bouncebuf.c >> @@ -31,17 +31,19 @@ static int addr_aligned(struct bounce_buffer *state) >> return 1; >> } >> >> -int bounce_buffer_start(struct bounce_buffer *state, void *data, >> - size_t len, unsigned int flags) >> +int bounce_buffer_start_extalign(struct bounce_buffer *state, void *data, >> + size_t len, unsigned int flags, >> + size_t alignment, >> + int (*addr_is_aligned)(struct bounce_buffer >> *state)) >> { >> state->user_buffer = data; >> state->bounce_buffer = data; >> state->len = len; >> - state->len_aligned = roundup(len, ARCH_DMA_MINALIGN); >> + state->len_aligned = roundup(len, alignment); >> state->flags = flags; >> >> - if (!addr_aligned(state)) { >> - state->bounce_buffer = memalign(ARCH_DMA_MINALIGN, >> + if (!addr_is_aligned(state)) { > > how about checking condition whether addr_is_aligned function is present or > not at here?
If it's not present, then you're misusing this function.