Re: [net-next PATCH v2 1/2] net: phy: aquantia: add firmware load support

From: Andrew Lunn
Date: Wed Nov 01 2023 - 12:32:50 EST


> > > + for (pos = 0; pos < len; pos += min(sizeof(u32), len - pos)) {
> > > + u32 word = 0;
> > > +
> > > + memcpy(&word, data + pos, min(sizeof(u32), len - pos));
> >
> > Rather than do a memcpy, use the get_unaligned_ macros. They might map
> > to a memcpy(), but some architectures can do unaligned accesses
> > without problems.
> >
>
> I don't think this is doable for this loop, think we would end up in
> some funny situation where for the last run we have to copy less than
> u32. (get_unaligned would always take u32 of data and that would end up
> reading more than requested) Am I wrong?

Does it happen in practice that the last chunk is not 4 bytes? Since
this is firmware, its probably produced by some sort of linker, and
they often round segments to words. Could you take a look at the
firmware images you have access to and see if this is true?

It could be we do need to keep with the memcpy, but it would be nice
if we could limit it to words, at least until somebody has a firmware
which is not word aligned.

Andrew