hostmot2: fix 'set but unused' compiler diagnostics

In these cases, 'r' was intended to be used to hold the negative
errno value in the case of a failure.  Ensure that r starts with a
negative errno value (Arbitrarily, -EINVAL) and propagate it back to the
caller.

In some cases, this means an already detected failure will actually
be propagated up to the caller.  For instance, hm2_bspi_parse_md would
return success even when it failed to allocate memory.

In a few cases, a return of -1 was also changed to -EINVAL, in order to
obey the usual 'return value is negative errno value' idiom.
hostmot2: bspi: Use proper function pointers

This is a potentially incompatible change, because formerly it was OK
to pass incompatible function pointer types and sometimes this would
"just work" (for instance, when they differed only by the type of the
pointer argument, or when the return type was erroneously void instead
of int), but the fix is easy (use correct function prototype;
cast argument to local pointer type; return 0 in the case of success)
and the change to mesa_7i65.comp in this commit provides an example of
such a fix.

This is preparatory work to fixing a diagnostic in bspi.c that the return
value of the read and write functions was ignored.
hostmot2: bspi: fix 'set but unused' compiler diagnostics

.. by showing a HM2_ERR whenever a bspi read or write function fails
(returns nonzero)
hostmot2: fix 'set but unused' compiler diagnostics

In this case, the value really was unused and unnecessary.
libnml: Disable "strict aliasing"

This code violates the "strict aliasing" rule of C89, but nobody's likely to
fix this.  Forbid gcc from making optimizations enabled by the "strict
aliasing" rules (an option which exists because so much code was written before
optimizers began to systematically make optimizations that were possible in
light of the "strict aliasing" rule, like this code), and don't warn about
constructs that violate them.