Skip to content

Commit 00e256d

Browse files
committed
fix(psram): fixecd wrong ap density check
1 parent 89d566b commit 00e256d

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

components/esp_psram/device/esp_psram_impl_ap_quad.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -267,17 +267,33 @@ static void s_config_psram_clock(bool init_state)
267267
#endif //#if !SOC_SPI_MEM_SUPPORT_TIMING_TUNING
268268

269269
/**
270-
* For certain wafer version and 8MB case, we consider it as 4MB mode as it uses 2T mode
270+
* For mrj069000aa, this wafer version and 8MB case, we consider it as 4MB mode as it uses 2T mode
271271
*/
272-
bool s_check_aps3204_2tmode(void)
272+
static bool s_check_mrj069000aa_2tmode(uint32_t eid_47_16)
273+
{
274+
bool is_2t = false;
275+
ESP_EARLY_LOGD(TAG, "(eid_47_16 >> 5) & 0xfffff: 0x%"PRIx32, (eid_47_16 >> 5) & 0xfffff);
276+
if (((eid_47_16 >> 5) & 0xfffff) == 0x8a445) {
277+
is_2t = true;
278+
}
279+
280+
return is_2t;
281+
}
282+
283+
static bool s_check_2tmode(void)
273284
{
274285
uint64_t full_eid = 0;
275286
psram_read_id(PSRAM_CTRLR_LL_MSPI_ID_1, (uint8_t *)&full_eid, PSRAM_QUAD_EID_BITS_NUM);
276287

277288
bool is_2t = false;
278289
uint32_t eid_47_16 = __builtin_bswap32((full_eid >> 16) & UINT32_MAX);
279-
ESP_EARLY_LOGD(TAG, "full_eid: 0x%" PRIx64", eid_47_16: 0x%"PRIx32", (eid_47_16 >> 5) & 0xfffff: 0x%"PRIx32, full_eid, eid_47_16, (eid_47_16 >> 5) & 0xfffff);
280-
if (((eid_47_16 >> 5) & 0xfffff) == 0x8a445) {
290+
ESP_EARLY_LOGD(TAG, "full_eid: 0x%" PRIx64", eid_47_16: 0x%"PRIx32", (eid_47_16 >> 25) & 0x1: 0x%"PRIx32, full_eid, eid_47_16, (eid_47_16 >> 25) & 0x1);
291+
//EID[41]: 0 for 2t mode; 1 for non-2t mode
292+
if (((eid_47_16 >> 25) & 0x1) == 0) {
293+
is_2t = true;
294+
}
295+
296+
if (s_check_mrj069000aa_2tmode(eid_47_16)) {
281297
is_2t = true;
282298
}
283299

@@ -328,10 +344,11 @@ esp_err_t esp_psram_impl_enable(void)
328344
* that are 16MB or 32MB to be interpreted as QEMU PSRAM devices */
329345
eid == PSRAM_QUAD_QEMU_16MB_ID ? PSRAM_SIZE_16MB :
330346
eid == PSRAM_QUAD_QEMU_32MB_ID ? PSRAM_SIZE_32MB : 0;
331-
}
332347

333-
if ((s_psram_size == PSRAM_SIZE_8MB) && s_check_aps3204_2tmode()) {
334-
s_psram_size = PSRAM_SIZE_4MB;
348+
if ((s_psram_size == PSRAM_SIZE_8MB) && s_check_2tmode()) {
349+
//2t mode is only valid for EID[47:45] == 0x10 chips
350+
s_psram_size = s_psram_size / 2;
351+
}
335352
}
336353

337354
//SPI1: send psram reset command

0 commit comments

Comments
 (0)