Skip to content

Commit df1ee27

Browse files
Update to v6.5.11 (base hekate v6.5.1)
2 parents da25996 + 9c62a59 commit df1ee27

14 files changed

Lines changed: 209 additions & 98 deletions

File tree

Versions.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# IPL Version.
22
BLVERSION_MAJOR := 6
33
BLVERSION_MINOR := 5
4-
BLVERSION_HOTFX := 10
4+
BLVERSION_HOTFX := 11
55
BLVERSION_REL := 0
66

77
# Nyx Version.
88
NYXVERSION_MAJOR := 1
99
NYXVERSION_MINOR := 9
10-
NYXVERSION_HOTFX := 0
10+
NYXVERSION_HOTFX := 1
1111
NYXVERSION_REL := 0

bdk/display/di.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -694,8 +694,8 @@ static void _display_panel_and_hw_end(bool no_panel_deinit)
694694
DSI(DSI_WR_DATA) = (MIPI_DCS_SET_DISPLAY_OFF << 8) | MIPI_DSI_DCS_SHORT_WRITE;
695695

696696
// Wait for 5 frames (HOST1X_CH0_SYNC_SYNCPT_9).
697-
// Not here. Wait for 1 frame manually.
698-
usleep(20000);
697+
// Not here. Wait for 1 frame + transmission manually.
698+
usleep((_panel_id == PANEL_SAM_AMS699VC01) ? (15933 + 195) : (16666 + 230));
699699

700700
// Propagate changes to all register buffers and disable host cmd packets during video.
701701
DISPLAY_A(DC_CMD_STATE_ACCESS) = READ_MUX_ACTIVE | WRITE_MUX_ACTIVE;

bdk/input/joycon.c

Lines changed: 81 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,11 @@ enum
107107
{
108108
JC_STATE_START = 0,
109109
JC_STATE_HANDSHAKED = 1,
110-
JC_STATE_BRATE_CHANGED = 2,
111-
JC_STATE_BRATE_OK = 3,
112-
JC_STATE_INIT_DONE = 4
110+
JC_STATE_INFO_PARSED = 2,
111+
JC_STATE_BRATE_CHANGED = 3,
112+
JC_STATE_HID_NO_CONN = 4,
113+
JC_STATE_HID_CONN = 5,
114+
JC_STATE_INIT_DONE = 6
113115
};
114116

115117
enum
@@ -650,14 +652,12 @@ static void _jc_send_hid_cmd(jc_dev_t *jc, u8 subcmd, const u8 *data, u16 size)
650652
if (send_l_rumble)
651653
_jc_send_hid_output_rpt(&jc_l, hid_pkt, 0x10, false);
652654

653-
if (send_r_rumble || send_l_rumble)
654-
{
655-
msleep(2);
656-
if (send_r_rumble)
657-
_jc_rcv_pkt(&jc_r);
658-
if (send_l_rumble)
659-
_jc_rcv_pkt(&jc_l);
660-
}
655+
msleep(15);
656+
657+
if (send_r_rumble)
658+
_jc_rcv_pkt(&jc_r);
659+
if (send_l_rumble)
660+
_jc_rcv_pkt(&jc_l);
661661

662662
// Send rumble.
663663
hid_pkt->cmd = JC_HID_RUMBLE_RPT;
@@ -785,23 +785,35 @@ static void _jc_parse_wired_init(jc_dev_t *jc, const jc_wired_hdr_t *pkt, int si
785785
switch (pkt->subcmd)
786786
{
787787
case JC_WIRED_CMD_GET_INFO:
788-
for (int i = 6; i > 0; i--)
788+
if (!pkt->status)
789+
{
790+
for (int i = 6; i > 0; i--)
789791
jc->mac[6 - i] = payload[i];
790-
jc->type = payload[0];
791-
jc->connected = true;
792+
jc->type = payload[0];
793+
jc->state = JC_STATE_INFO_PARSED;
794+
}
792795
break;
793796

794797
case JC_WIRED_CMD_SET_BRATE:
795-
jc->state = JC_STATE_BRATE_CHANGED;
798+
if (!pkt->status)
799+
jc->state = JC_STATE_BRATE_CHANGED;
796800
break;
797801

798802
case JC_WIRED_CMD_HID_DISC:
799-
jc->state = JC_STATE_BRATE_OK;
803+
if (pkt->status == 0xF)
804+
jc->state = JC_STATE_HID_NO_CONN;
800805
break;
801806

802807
case JC_WIRED_CMD_HID_CONN:
808+
if (!pkt->status)
809+
jc->state = JC_STATE_HID_CONN;
810+
break;
811+
803812
case JC_WIRED_CMD_SET_HIDRATE:
804-
// done.
813+
jc->state = JC_STATE_INIT_DONE;
814+
jc->connected = true;
815+
break;
816+
805817
default:
806818
break;
807819
}
@@ -870,12 +882,13 @@ static void _jc_sio_uart_pkt_parse(jc_dev_t *jc, const jc_sio_in_rpt_t *pkt, int
870882
switch (cmd)
871883
{
872884
case JC_SIO_CMD_INIT:
873-
jc->connected = pkt->status == 0;
885+
if (!pkt->status)
886+
jc->state = JC_STATE_HANDSHAKED;
874887
break;
875888

876889
case JC_SIO_CMD_VER_RPT:
877-
if (jc->connected)
878-
jc->connected = pkt->status == 0;
890+
if (!pkt->status)
891+
jc->state = JC_STATE_HID_CONN;
879892
break;
880893

881894
case JC_SIO_CMD_IAP_VER:
@@ -1012,9 +1025,16 @@ static bool _jc_handle_charging(jc_dev_t *jc)
10121025

10131026
static bool _jc_send_enable_rumble(jc_dev_t *jc)
10141027
{
1028+
bool send_r_rumble = jc_r.connected && !jc_r.rumble_sent;
1029+
bool send_l_rumble = jc_l.connected && !jc_l.rumble_sent;
1030+
1031+
// Do not sent report yet if second Joy-Con is expected to be initialized.
1032+
if ((send_r_rumble && !jc_l.rumble_sent && jc_l.state == JC_STATE_HID_CONN) ||
1033+
(send_l_rumble && !jc_r.rumble_sent && jc_r.state == JC_STATE_HID_CONN))
1034+
return 1;
1035+
10151036
// Send init rumble or request nx pad status report.
1016-
if ((jc_r.connected && !jc_r.rumble_sent) ||
1017-
(jc_l.connected && !jc_l.rumble_sent))
1037+
if (send_r_rumble || send_l_rumble)
10181038
{
10191039
_jc_send_hid_cmd(jc, JC_HID_SUBCMD_SND_RUMBLE, NULL, 0);
10201040

@@ -1033,14 +1053,14 @@ static bool _jc_send_enable_rumble(jc_dev_t *jc)
10331053

10341054
static void _jc_req_status(jc_dev_t *jc)
10351055
{
1036-
if (!jc->detected)
1056+
if (!jc->connected)
10371057
return;
10381058

1039-
bool is_nxpad = !(jc->type & JC_ID_HORI) && !jc->sio_mode;
1040-
1041-
if (jc->last_status_req_time > get_tmr_ms() || !jc->connected)
1059+
if (jc->last_status_req_time > get_tmr_ms())
10421060
return;
10431061

1062+
bool is_nxpad = !(jc->type & JC_ID_HORI) && !jc->sio_mode;
1063+
10441064
// Init/maintenance for Joy-Con.
10451065
if (is_nxpad)
10461066
{
@@ -1258,24 +1278,26 @@ static void _jc_conn_init(jc_dev_t *jc)
12581278
// Initialize uart to 1 megabaud and manual RTS.
12591279
uart_init(jc->uart, 1000000, UART_AO_TX_MN_RX);
12601280

1281+
jc->state = JC_STATE_START;
1282+
12611283
if (!jc->sio_mode)
12621284
{
12631285
jc_gamepad.buttons = 0;
1264-
jc->state = JC_STATE_START;
12651286

12661287
// Set TX and RTS inversion for Joycon.
12671288
uart_invert(jc->uart, true, UART_INVERT_TXD | UART_INVERT_RTS);
12681289

1269-
// Wake up the controller.
1270-
_joycon_send_raw(jc->uart, _jc_init_wake, sizeof(_jc_init_wake));
1271-
_jc_rcv_pkt(jc); // Clear RX FIFO.
1272-
1273-
// Do a handshake.
1290+
// Initialize.
12741291
u32 retries = 10;
12751292
while (retries && jc->state != JC_STATE_HANDSHAKED)
12761293
{
1294+
// Wake up the controller.
1295+
_joycon_send_raw(jc->uart, _jc_init_wake, sizeof(_jc_init_wake));
1296+
_jc_rcv_pkt(jc); // Clear RX FIFO.
1297+
1298+
// Do a handshake.
12771299
_joycon_send_raw(jc->uart, _jc_init_handshake, sizeof(_jc_init_handshake));
1278-
msleep(5);
1300+
msleep(4);
12791301
_jc_rcv_pkt(jc);
12801302
retries--;
12811303
}
@@ -1288,6 +1310,9 @@ static void _jc_conn_init(jc_dev_t *jc)
12881310
msleep(2);
12891311
_jc_rcv_pkt(jc);
12901312

1313+
if (jc->state != JC_STATE_INFO_PARSED)
1314+
goto out;
1315+
12911316
if (!(jc->type & JC_ID_HORI))
12921317
{
12931318
// Request 3 megabaud change.
@@ -1301,17 +1326,18 @@ static void _jc_conn_init(jc_dev_t *jc)
13011326
uart_init(jc->uart, 3000000, UART_AO_TX_MN_RX);
13021327
uart_invert(jc->uart, true, UART_INVERT_TXD | UART_INVERT_RTS);
13031328

1304-
// Disconnect HID.
1329+
// Make sure HID is disconnected and check connection. Reply expected after 30ms.
13051330
retries = 10;
1306-
while (retries && jc->state != JC_STATE_BRATE_OK)
1331+
while (retries && jc->state != JC_STATE_HID_NO_CONN)
13071332
{
13081333
_joycon_send_raw(jc->uart, _jc_init_hid_disconnect, sizeof(_jc_init_hid_disconnect));
13091334
msleep(5);
13101335
_jc_rcv_pkt(jc);
13111336
retries--;
13121337
}
13131338

1314-
if (jc->state != JC_STATE_BRATE_OK)
1339+
// Was connected before or no response. Do a reinit.
1340+
if (jc->state != JC_STATE_HID_NO_CONN)
13151341
goto out;
13161342
}
13171343

@@ -1320,10 +1346,15 @@ static void _jc_conn_init(jc_dev_t *jc)
13201346
msleep(2);
13211347
_jc_rcv_pkt(jc);
13221348

1349+
if (jc->state != JC_STATE_HID_CONN)
1350+
goto out;
1351+
13231352
// Set hid packet rate.
13241353
_joycon_send_raw(jc->uart, _jc_init_set_hid_rate, sizeof(_jc_init_set_hid_rate));
13251354
msleep(2);
13261355
_jc_rcv_pkt(jc);
1356+
1357+
goto out; // Wait for set hid rate reply.
13271358
}
13281359
else // Hori. Unset RTS inversion.
13291360
uart_invert(jc->uart, false, UART_INVERT_RTS);
@@ -1342,25 +1373,34 @@ static void _jc_conn_init(jc_dev_t *jc)
13421373

13431374
// Initialize the controller.
13441375
u32 retries = 10;
1345-
while (!jc->connected && retries)
1376+
while (retries && jc->state != JC_STATE_HANDSHAKED)
13461377
{
13471378
_joycon_send_raw(jc->uart, _sio_init, sizeof(_sio_init));
13481379
msleep(5);
13491380
_jc_rcv_pkt(jc);
13501381
retries--;
13511382
}
13521383

1353-
if (!jc->connected)
1384+
if (jc->state != JC_STATE_HANDSHAKED)
13541385
goto out;
13551386

13561387
// Set output report version.
1357-
_joycon_send_raw(jc->uart, _sio_set_rpt_version, sizeof(_sio_set_rpt_version));
1358-
msleep(5);
1359-
_jc_rcv_pkt(jc);
1388+
retries = 10;
1389+
while (retries && jc->state != JC_STATE_HID_CONN)
1390+
{
1391+
_joycon_send_raw(jc->uart, _sio_set_rpt_version, sizeof(_sio_set_rpt_version));
1392+
msleep(5);
1393+
_jc_rcv_pkt(jc);
1394+
retries--;
1395+
}
1396+
1397+
if (jc->state != JC_STATE_HID_CONN)
1398+
goto out;
13601399
}
13611400

13621401
// Initialization done.
13631402
jc->state = JC_STATE_INIT_DONE;
1403+
jc->connected = true;
13641404

13651405
out:
13661406
jc->last_received_time = get_tmr_ms();

bdk/sec/se.c

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -91,29 +91,34 @@ static int _se_op_wait()
9191
return 0;
9292
}
9393

94-
// T210B01: IRAM/TZRAM/DRAM AHB coherency WAR.
95-
if (!tegra_t210 && ll_dst_ptr)
94+
// WAR: Coherency flushing.
95+
if (ll_dst_ptr)
9696
{
97-
u32 timeout = get_tmr_us() + 1000000;
9897
// Ensure data is out from SE.
99-
while (SE(SE_STATUS_REG) & SE_STATUS_MEM_IF_BUSY)
98+
if (tegra_t210)
99+
usleep(15); // Worst case scenario.
100+
else
100101
{
101-
if (get_tmr_us() > timeout)
102-
return 0;
103-
usleep(1);
104-
}
105-
106-
// Ensure data is out from AHB.
107-
if (ll_dst_ptr->addr >= DRAM_START)
108-
{
109-
timeout = get_tmr_us() + 200000;
110-
while (AHB_GIZMO(AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID) & MEM_WRQUE_SE_MST_ID)
102+
// T210B01 has a status bit for that.
103+
u32 retries = 500000;
104+
while (SE(SE_STATUS_REG) & SE_STATUS_MEM_IF_BUSY)
111105
{
112-
if (get_tmr_us() > timeout)
106+
if (!retries)
113107
return 0;
114108
usleep(1);
109+
retries--;
115110
}
116111
}
112+
113+
// Ensure data is out from AHB.
114+
u32 retries = 500000;
115+
while (AHB_GIZMO(AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID) & MEM_WRQUE_SE_MST_ID)
116+
{
117+
if (!retries)
118+
return 0;
119+
usleep(1);
120+
retries--;
121+
}
117122
}
118123

119124
return 1;
@@ -181,7 +186,7 @@ static int _se_execute_aes_oneshot(void *dst, const void *src, u32 size)
181186

182187
u32 size_aligned = ALIGN_DOWN(size, SE_AES_BLOCK_SIZE);
183188
u32 size_residue = size % SE_AES_BLOCK_SIZE;
184-
int res = 0;
189+
int res = 1;
185190

186191
// Handle initial aligned message.
187192
if (size_aligned)
@@ -507,10 +512,14 @@ static int _se_sha_hash_256(void *hash, u64 total_size, const void *src, u32 src
507512
// Set total size: BITS(total_size), up to 2 EB.
508513
SE(SE_SHA_MSG_LENGTH_0_REG) = (u32)(total_size << 3);
509514
SE(SE_SHA_MSG_LENGTH_1_REG) = (u32)(total_size >> 29);
515+
SE(SE_SHA_MSG_LENGTH_2_REG) = 0;
516+
SE(SE_SHA_MSG_LENGTH_3_REG) = 0;
510517

511518
// Set leftover size: BITS(src_size).
512519
SE(SE_SHA_MSG_LEFT_0_REG) = (u32)(msg_left << 3);
513520
SE(SE_SHA_MSG_LEFT_1_REG) = (u32)(msg_left >> 29);
521+
SE(SE_SHA_MSG_LEFT_2_REG) = 0;
522+
SE(SE_SHA_MSG_LEFT_3_REG) = 0;
514523

515524
// Set config based on init or partial continuation.
516525
if (total_size == src_size || !total_size)

bdk/soc/hw_init.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,12 @@ void hw_init()
470470

471471
void hw_deinit(bool keep_display)
472472
{
473-
bool tegra_t210 = hw_get_chip_id() == GP_HIDREV_MAJOR_T210;
473+
// Seamless display or display power off.
474+
if (!keep_display)
475+
{
476+
display_end();
477+
clock_disable_host1x();
478+
}
474479

475480
// Scale down BPMP clock.
476481
bpmp_clk_rate_set(BPMP_CLK_NORMAL);
@@ -495,16 +500,9 @@ void hw_deinit(bool keep_display)
495500
hw_config_arbiter(true);
496501

497502
// Re-enable clocks to Audio Processing Engine as a workaround to rerunning mbist war.
498-
if (tegra_t210)
503+
if (hw_get_chip_id() == GP_HIDREV_MAJOR_T210)
499504
{
500505
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_V_SET) = BIT(CLK_V_AHUB);
501506
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_Y_SET) = BIT(CLK_Y_APE);
502507
}
503-
504-
// Seamless display or display power off.
505-
if (!keep_display)
506-
{
507-
display_end();
508-
clock_disable_host1x();
509-
}
510508
}

0 commit comments

Comments
 (0)