Skip to content

Commit 12dcbee

Browse files
committed
Merge branch 'master' into outback-forester-22-PR
2 parents d68de85 + ef1a933 commit 12dcbee

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+564
-392
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ repos:
77
- id: check-merge-conflict
88
- id: check-symlinks
99
- repo: https://github.com/pre-commit/mirrors-mypy
10-
rev: v1.5.0
10+
rev: v1.5.1
1111
hooks:
1212
- id: mypy
1313
additional_dependencies: ['git+https://github.com/numpy/numpy-stubs', 'types-requests', 'types-atomicwrites',
1414
'types-pycurl']
1515
- repo: https://github.com/astral-sh/ruff-pre-commit
16-
rev: v0.0.284
16+
rev: v0.0.285
1717
hooks:
1818
- id: ruff

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-instal
5151
ENV PATH="/root/.pyenv/bin:/root/.pyenv/shims:${PATH}"
5252

5353
ENV PANDA_PATH=/tmp/openpilot/panda
54-
ENV OPENPILOT_REF="80bbba14f74e57bbe90216dfd0a99f6f68d77ca2"
55-
ENV OPENDBC_REF="5880fbbccf5a670631b51836f20e446de643795a"
54+
ENV OPENPILOT_REF="5690386d8d731c9bebda536a5c71c890f6dfe98c"
55+
ENV OPENDBC_REF="12dd7675c5ab2f49aedb813a79e6131b370b379f"
5656

5757
COPY requirements.txt /tmp/
5858
RUN pyenv install 3.11.4 && \

Jenkinsfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ pipeline {
9999
}
100100
}
101101

102+
/*
102103
stage ('Acquire resource locks') {
103104
options {
104105
lock(resource: "pandas")
@@ -147,6 +148,7 @@ pipeline {
147148
}
148149
}
149150
}
151+
*/
150152
}
151153
}
152154
}

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ sudo apt-get install dfu-util gcc-arm-none-eabi python3-pip libffi-dev git
2121
```bash
2222
# macOS
2323
brew install --cask gcc-arm-embedded
24-
brew install python3 dfu-util gcc@12
24+
brew install python3 dfu-util gcc@13
2525
```
2626

2727
Clone panda repository:

SConscript

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,5 +186,5 @@ SConscript('board/pedal/SConscript')
186186
SConscript('board/jungle/SConscript')
187187

188188
# test files
189-
if GetOption('test'):
189+
if GetOption('extras'):
190190
SConscript('tests/libpanda/SConscript')

SConstruct

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
AddOption('--test',
2-
action='store_true',
1+
AddOption('--minimal',
2+
action='store_false',
3+
dest='extras',
34
default=True,
4-
help='build test files')
5+
help='the minimum build. no tests, tools, etc.')
56

67
AddOption('--ubsan',
78
action='store_true',

board/drivers/bxcan.h

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ uint8_t can_irq_number[3][3] = {
1111

1212
bool can_set_speed(uint8_t can_number) {
1313
bool ret = true;
14-
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
14+
CAN_TypeDef *CANx = CANIF_FROM_CAN_NUM(can_number);
1515
uint8_t bus_number = BUS_NUM_FROM_CAN_NUM(can_number);
1616

1717
ret &= llcan_set_speed(
18-
CAN,
18+
CANx,
1919
bus_config[bus_number].can_speed,
2020
can_loopback,
2121
(unsigned int)(can_silent) & (1U << can_number)
@@ -74,8 +74,8 @@ void can_set_gmlan(uint8_t bus) {
7474
}
7575

7676
void update_can_health_pkt(uint8_t can_number, uint32_t ir_reg) {
77-
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
78-
uint32_t esr_reg = CAN->ESR;
77+
CAN_TypeDef *CANx = CANIF_FROM_CAN_NUM(can_number);
78+
uint32_t esr_reg = CANx->ESR;
7979

8080
can_health[can_number].bus_off = ((esr_reg & CAN_ESR_BOFF) >> CAN_ESR_BOFF_Pos);
8181
can_health[can_number].bus_off_cnt += can_health[can_number].bus_off;
@@ -98,12 +98,12 @@ void update_can_health_pkt(uint8_t can_number, uint32_t ir_reg) {
9898
can_health[can_number].total_error_cnt += 1U;
9999

100100
// RX message lost due to FIFO overrun
101-
if ((CAN->RF0R & (CAN_RF0R_FOVR0)) != 0) {
101+
if ((CANx->RF0R & (CAN_RF0R_FOVR0)) != 0) {
102102
can_health[can_number].total_rx_lost_cnt += 1U;
103-
CAN->RF0R &= ~(CAN_RF0R_FOVR0);
103+
CANx->RF0R &= ~(CAN_RF0R_FOVR0);
104104
}
105105
can_health[can_number].can_core_reset_cnt += 1U;
106-
llcan_clear_send(CAN);
106+
llcan_clear_send(CANx);
107107
}
108108
}
109109

@@ -119,48 +119,48 @@ void process_can(uint8_t can_number) {
119119

120120
ENTER_CRITICAL();
121121

122-
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
122+
CAN_TypeDef *CANx = CANIF_FROM_CAN_NUM(can_number);
123123
uint8_t bus_number = BUS_NUM_FROM_CAN_NUM(can_number);
124124

125125
// check for empty mailbox
126126
CANPacket_t to_send;
127-
if ((CAN->TSR & (CAN_TSR_TERR0 | CAN_TSR_ALST0)) != 0) { // last TX failed due to error arbitration lost
127+
if ((CANx->TSR & (CAN_TSR_TERR0 | CAN_TSR_ALST0)) != 0) { // last TX failed due to error arbitration lost
128128
can_health[can_number].total_tx_lost_cnt += 1U;
129-
CAN->TSR |= (CAN_TSR_TERR0 | CAN_TSR_ALST0);
129+
CANx->TSR |= (CAN_TSR_TERR0 | CAN_TSR_ALST0);
130130
}
131-
if ((CAN->TSR & CAN_TSR_TME0) == CAN_TSR_TME0) {
131+
if ((CANx->TSR & CAN_TSR_TME0) == CAN_TSR_TME0) {
132132
// add successfully transmitted message to my fifo
133-
if ((CAN->TSR & CAN_TSR_RQCP0) == CAN_TSR_RQCP0) {
134-
if ((CAN->TSR & CAN_TSR_TXOK0) == CAN_TSR_TXOK0) {
133+
if ((CANx->TSR & CAN_TSR_RQCP0) == CAN_TSR_RQCP0) {
134+
if ((CANx->TSR & CAN_TSR_TXOK0) == CAN_TSR_TXOK0) {
135135
CANPacket_t to_push;
136136
to_push.returned = 1U;
137137
to_push.rejected = 0U;
138-
to_push.extended = (CAN->sTxMailBox[0].TIR >> 2) & 0x1U;
139-
to_push.addr = (to_push.extended != 0U) ? (CAN->sTxMailBox[0].TIR >> 3) : (CAN->sTxMailBox[0].TIR >> 21);
140-
to_push.data_len_code = CAN->sTxMailBox[0].TDTR & 0xFU;
138+
to_push.extended = (CANx->sTxMailBox[0].TIR >> 2) & 0x1U;
139+
to_push.addr = (to_push.extended != 0U) ? (CANx->sTxMailBox[0].TIR >> 3) : (CANx->sTxMailBox[0].TIR >> 21);
140+
to_push.data_len_code = CANx->sTxMailBox[0].TDTR & 0xFU;
141141
to_push.bus = bus_number;
142-
WORD_TO_BYTE_ARRAY(&to_push.data[0], CAN->sTxMailBox[0].TDLR);
143-
WORD_TO_BYTE_ARRAY(&to_push.data[4], CAN->sTxMailBox[0].TDHR);
142+
WORD_TO_BYTE_ARRAY(&to_push.data[0], CANx->sTxMailBox[0].TDLR);
143+
WORD_TO_BYTE_ARRAY(&to_push.data[4], CANx->sTxMailBox[0].TDHR);
144144
can_set_checksum(&to_push);
145145

146146
rx_buffer_overflow += can_push(&can_rx_q, &to_push) ? 0U : 1U;
147147
}
148148

149149
// clear interrupt
150150
// careful, this can also be cleared by requesting a transmission
151-
CAN->TSR |= CAN_TSR_RQCP0;
151+
CANx->TSR |= CAN_TSR_RQCP0;
152152
}
153153

154154
if (can_pop(can_queues[bus_number], &to_send)) {
155155
if (can_check_checksum(&to_send)) {
156156
can_health[can_number].total_tx_cnt += 1U;
157157
// only send if we have received a packet
158-
CAN->sTxMailBox[0].TIR = ((to_send.extended != 0U) ? (to_send.addr << 3) : (to_send.addr << 21)) | (to_send.extended << 2);
159-
CAN->sTxMailBox[0].TDTR = to_send.data_len_code;
160-
BYTE_ARRAY_TO_WORD(CAN->sTxMailBox[0].TDLR, &to_send.data[0]);
161-
BYTE_ARRAY_TO_WORD(CAN->sTxMailBox[0].TDHR, &to_send.data[4]);
158+
CANx->sTxMailBox[0].TIR = ((to_send.extended != 0U) ? (to_send.addr << 3) : (to_send.addr << 21)) | (to_send.extended << 2);
159+
CANx->sTxMailBox[0].TDTR = to_send.data_len_code;
160+
BYTE_ARRAY_TO_WORD(CANx->sTxMailBox[0].TDLR, &to_send.data[0]);
161+
BYTE_ARRAY_TO_WORD(CANx->sTxMailBox[0].TDHR, &to_send.data[4]);
162162
// Send request TXRQ
163-
CAN->sTxMailBox[0].TIR |= 0x1U;
163+
CANx->sTxMailBox[0].TIR |= 0x1U;
164164
} else {
165165
can_health[can_number].total_tx_checksum_error_cnt += 1U;
166166
}
@@ -176,10 +176,10 @@ void process_can(uint8_t can_number) {
176176
// CANx_RX0 IRQ Handler
177177
// blink blue when we are receiving CAN messages
178178
void can_rx(uint8_t can_number) {
179-
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
179+
CAN_TypeDef *CANx = CANIF_FROM_CAN_NUM(can_number);
180180
uint8_t bus_number = BUS_NUM_FROM_CAN_NUM(can_number);
181181

182-
while ((CAN->RF0R & CAN_RF0R_FMP0) != 0) {
182+
while ((CANx->RF0R & CAN_RF0R_FMP0) != 0) {
183183
can_health[can_number].total_rx_cnt += 1U;
184184

185185
// can is live
@@ -190,12 +190,12 @@ void can_rx(uint8_t can_number) {
190190

191191
to_push.returned = 0U;
192192
to_push.rejected = 0U;
193-
to_push.extended = (CAN->sFIFOMailBox[0].RIR >> 2) & 0x1U;
194-
to_push.addr = (to_push.extended != 0U) ? (CAN->sFIFOMailBox[0].RIR >> 3) : (CAN->sFIFOMailBox[0].RIR >> 21);
195-
to_push.data_len_code = CAN->sFIFOMailBox[0].RDTR & 0xFU;
193+
to_push.extended = (CANx->sFIFOMailBox[0].RIR >> 2) & 0x1U;
194+
to_push.addr = (to_push.extended != 0U) ? (CANx->sFIFOMailBox[0].RIR >> 3) : (CANx->sFIFOMailBox[0].RIR >> 21);
195+
to_push.data_len_code = CANx->sFIFOMailBox[0].RDTR & 0xFU;
196196
to_push.bus = bus_number;
197-
WORD_TO_BYTE_ARRAY(&to_push.data[0], CAN->sFIFOMailBox[0].RDLR);
198-
WORD_TO_BYTE_ARRAY(&to_push.data[4], CAN->sFIFOMailBox[0].RDHR);
197+
WORD_TO_BYTE_ARRAY(&to_push.data[0], CANx->sFIFOMailBox[0].RDLR);
198+
WORD_TO_BYTE_ARRAY(&to_push.data[4], CANx->sFIFOMailBox[0].RDHR);
199199
can_set_checksum(&to_push);
200200

201201
// forwarding (panda only)
@@ -223,7 +223,7 @@ void can_rx(uint8_t can_number) {
223223
rx_buffer_overflow += can_push(&can_rx_q, &to_push) ? 0U : 1U;
224224

225225
// next
226-
CAN->RF0R |= CAN_RF0R_RFOM0;
226+
CANx->RF0R |= CAN_RF0R_RFOM0;
227227
}
228228
}
229229

@@ -253,9 +253,9 @@ bool can_init(uint8_t can_number) {
253253
REGISTER_INTERRUPT(CAN3_SCE_IRQn, CAN3_SCE_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_3)
254254

255255
if (can_number != 0xffU) {
256-
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
256+
CAN_TypeDef *CANx = CANIF_FROM_CAN_NUM(can_number);
257257
ret &= can_set_speed(can_number);
258-
ret &= llcan_init(CAN);
258+
ret &= llcan_init(CANx);
259259
// in case there are queued up messages
260260
process_can(can_number);
261261
}

board/drivers/can_common.h

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,22 @@ void process_can(uint8_t can_number);
5252
CANPacket_t elems_##x[size]; \
5353
can_ring can_##x = { .w_ptr = 0, .r_ptr = 0, .fifo_size = (size), .elems = (CANPacket_t *)&(elems_##x) };
5454

55+
#define CAN_RX_BUFFER_SIZE 4096U
56+
#define CAN_TX_BUFFER_SIZE 416U
57+
#define GMLAN_TX_BUFFER_SIZE 416U
58+
5559
#ifdef STM32H7
56-
__attribute__((section(".ram_d1"))) can_buffer(rx_q, 0x1000)
57-
__attribute__((section(".ram_d1"))) can_buffer(tx2_q, 0x1A0)
58-
__attribute__((section(".ram_d2"))) can_buffer(txgmlan_q, 0x1A0)
60+
// ITCM RAM and DTCM RAM are the fastest for Cortex-M7 core access
61+
__attribute__((section(".axisram"))) can_buffer(rx_q, CAN_RX_BUFFER_SIZE)
62+
__attribute__((section(".itcmram"))) can_buffer(tx1_q, CAN_TX_BUFFER_SIZE)
63+
__attribute__((section(".itcmram"))) can_buffer(tx2_q, CAN_TX_BUFFER_SIZE)
5964
#else
60-
can_buffer(rx_q, 0x1000)
61-
can_buffer(tx2_q, 0x1A0)
62-
can_buffer(txgmlan_q, 0x1A0)
65+
can_buffer(rx_q, CAN_RX_BUFFER_SIZE)
66+
can_buffer(tx1_q, CAN_TX_BUFFER_SIZE)
67+
can_buffer(tx2_q, CAN_TX_BUFFER_SIZE)
6368
#endif
64-
can_buffer(tx1_q, 0x1A0)
65-
can_buffer(tx3_q, 0x1A0)
69+
can_buffer(tx3_q, CAN_TX_BUFFER_SIZE)
70+
can_buffer(txgmlan_q, GMLAN_TX_BUFFER_SIZE)
6671
// FIXME:
6772
// cppcheck-suppress misra-c2012-9.3
6873
can_ring *can_queues[] = {&can_tx1_q, &can_tx2_q, &can_tx3_q, &can_txgmlan_q};

0 commit comments

Comments
 (0)