mirror of
https://github.com/LuckfoxTECH/luckfox-pico.git
synced 2026-01-19 09:52:31 +01:00
project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp: Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem. sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately. sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades. sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for fastboot. Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
This commit is contained in:
@@ -670,8 +670,6 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
|
||||
|
||||
txerr = hi3110_read(spi, HI3110_READ_TEC);
|
||||
rxerr = hi3110_read(spi, HI3110_READ_REC);
|
||||
cf->data[6] = txerr;
|
||||
cf->data[7] = rxerr;
|
||||
tx_state = txerr >= rxerr ? new_state : 0;
|
||||
rx_state = txerr <= rxerr ? new_state : 0;
|
||||
can_change_state(net, cf, tx_state, rx_state);
|
||||
@@ -684,6 +682,9 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
|
||||
hi3110_hw_sleep(spi);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
cf->data[6] = txerr;
|
||||
cf->data[7] = rxerr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1074,9 +1074,6 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
|
||||
|
||||
mcp251x_read_2regs(spi, CANINTF, &intf, &eflag);
|
||||
|
||||
/* mask out flags we don't care about */
|
||||
intf &= CANINTF_RX | CANINTF_TX | CANINTF_ERR;
|
||||
|
||||
/* receive buffer 0 */
|
||||
if (intf & CANINTF_RX0IF) {
|
||||
mcp251x_hw_rx(spi, 0);
|
||||
@@ -1086,6 +1083,18 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
|
||||
if (mcp251x_is_2510(spi))
|
||||
mcp251x_write_bits(spi, CANINTF,
|
||||
CANINTF_RX0IF, 0x00);
|
||||
|
||||
/* check if buffer 1 is already known to be full, no need to re-read */
|
||||
if (!(intf & CANINTF_RX1IF)) {
|
||||
u8 intf1, eflag1;
|
||||
|
||||
/* intf needs to be read again to avoid a race condition */
|
||||
mcp251x_read_2regs(spi, CANINTF, &intf1, &eflag1);
|
||||
|
||||
/* combine flags from both operations for error handling */
|
||||
intf |= intf1;
|
||||
eflag |= eflag1;
|
||||
}
|
||||
}
|
||||
|
||||
/* receive buffer 1 */
|
||||
@@ -1096,6 +1105,9 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
|
||||
clear_intf |= CANINTF_RX1IF;
|
||||
}
|
||||
|
||||
/* mask out flags we don't care about */
|
||||
intf &= CANINTF_RX | CANINTF_TX | CANINTF_ERR;
|
||||
|
||||
/* any error or tx interrupt we need to clear? */
|
||||
if (intf & (CANINTF_ERR | CANINTF_TX))
|
||||
clear_intf |= intf & (CANINTF_ERR | CANINTF_TX);
|
||||
@@ -1407,11 +1419,14 @@ static int mcp251x_can_probe(struct spi_device *spi)
|
||||
|
||||
ret = mcp251x_gpio_setup(priv);
|
||||
if (ret)
|
||||
goto error_probe;
|
||||
goto out_unregister_candev;
|
||||
|
||||
netdev_info(net, "MCP%x successfully initialized.\n", priv->model);
|
||||
return 0;
|
||||
|
||||
out_unregister_candev:
|
||||
unregister_candev(net);
|
||||
|
||||
error_probe:
|
||||
destroy_workqueue(priv->wq);
|
||||
priv->wq = NULL;
|
||||
|
||||
@@ -426,7 +426,7 @@ struct mcp251xfd_hw_tef_obj {
|
||||
/* The tx_obj_raw version is used in spi async, i.e. without
|
||||
* regmap. We have to take care of endianness ourselves.
|
||||
*/
|
||||
struct mcp251xfd_hw_tx_obj_raw {
|
||||
struct __packed mcp251xfd_hw_tx_obj_raw {
|
||||
__le32 id;
|
||||
__le32 flags;
|
||||
u8 data[sizeof_field(struct canfd_frame, data)];
|
||||
|
||||
Reference in New Issue
Block a user