icE1usb fw: Avoid casting random pointer to struct in set_{rx,tx}_mode
There is really no need here, we can use `memcpy` just as well.
Not sure if this was a problem here but newer gcc are annoying
with aliasing rules and such so better safe than sorry.
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: I110ee4c014e8cfe058f7fc357decb7ab99e0be64
diff --git a/firmware/ice40-riscv/icE1usb/usb_e1.c b/firmware/ice40-riscv/icE1usb/usb_e1.c
index 328ff3f..11c7401 100644
--- a/firmware/ice40-riscv/icE1usb/usb_e1.c
+++ b/firmware/ice40-riscv/icE1usb/usb_e1.c
@@ -345,27 +345,25 @@
static bool
_set_tx_mode_done(struct usb_xfer *xfer)
{
- const struct ice1usb_tx_config *cfg = (const struct ice1usb_tx_config *) xfer->data;
struct usb_ctrl_req *req = xfer->cb_ctx;
int port = _ifnum2port(req->wIndex);
struct usb_e1_state *usb_e1 = _get_state(port);
printf("set_tx_mode[%d] %02x%02x%02x%02x\r\n", port,
xfer->data[0], xfer->data[1], xfer->data[2], xfer->data[3]);
- usb_e1->tx_cfg = *cfg;
- e1_tx_config(port, _tx_config_reg(cfg));
+ memcpy(&usb_e1->tx_cfg, xfer->data, sizeof(struct ice1usb_tx_config));
+ e1_tx_config(port, _tx_config_reg(&usb_e1->tx_cfg));
return true;
}
static bool
_set_rx_mode_done(struct usb_xfer *xfer)
{
- const struct ice1usb_rx_config *cfg = (const struct ice1usb_rx_config *) xfer->data;
struct usb_ctrl_req *req = xfer->cb_ctx;
int port = _ifnum2port(req->wIndex);
struct usb_e1_state *usb_e1 = _get_state(port);
printf("set_rx_mode[%d] %02x\r\n", port, xfer->data[0]);
- usb_e1->rx_cfg = *cfg;
- e1_rx_config(port, _rx_config_reg(cfg));
+ memcpy(&usb_e1->rx_cfg, xfer->data, sizeof(struct ice1usb_rx_config));
+ e1_rx_config(port, _rx_config_reg(&usb_e1->rx_cfg));
return true;
}