AM2434: Reading and writing Extended OTP

Part Number: AM2434

Hello,
I am experiencing issues reading the Extended OTP memory regions on an AM243-LP Evaluation Board. I am following the EXT_OTP Example documentation from MCU+ SDK v11.01.00.17.
System Configuration:
  • Hardware: AM243-LP www.ti.com/.../LP-AM243
  • Bootloader: sbl_ospi.release.hs_fs.tiimage (prebuilt)
  • SDK Version: MCU+ SDK v11.01.00.19
  • Firmware: DMSC v10.0.8 (Fiery Fox), ABI rev 4.0
  • VPP of AM243-LP: J22 is open - efuse voltage disconected for reading
Issue Description:
While the Sciclient appears to initialize correctly, all calls to read the OTP MMR regions fail. The Sciclient_otpGetMmr function returns an error, and the reported value for every MMR (0 through 11) is consistently 0x357.

from Sciclient_service we get Success, but respParam.flags are not ACK.

Sharing code for reading: 

MAIN
#include <stdlib.h>
#include "ti_drivers_config.h"
#include "ti_board_config.h"

void ext_otp_printMmrs(void *args);

int main(void)
{
    System_init();
    Board_init();

    ext_otp_printMmrs(NULL);

    Board_deinit();
    System_deinit();

    return 0;
}

ECT_OTP_PRINTMMRS code

#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <kernel/dpl/HwiP.h>
#include <kernel/dpl/CacheP.h>
#include <kernel/dpl/SemaphoreP.h>
#include <kernel/dpl/ClockP.h>
#include <kernel/dpl/HeapP.h>
#include <kernel/dpl/CycleCounterP.h>
#include "ti_drivers_open_close.h"
#include "ti_board_open_close.h"

#include "ti_drivers_config.h"
#include <drivers/sciclient.h>
#include <drivers/sciclient/include/tisci/security/tisci_ext_otp.h>

int32_t ext_otp_readMmr(uint8_t mmrIdx, uint32_t *mmrVal)
{
    int32_t status = SystemP_SUCCESS;
    Sciclient_ReqPrm_t reqParam ;
    Sciclient_RespPrm_t respParam ;
    struct tisci_msg_read_otp_mmr_req request ;
    struct tisci_msg_read_otp_mmr_resp response ;

    request.mmr_idx       = mmrIdx;

    reqParam.messageType    = (uint16_t) TISCI_MSG_READ_OTP_MMR;
    reqParam.flags          = (uint32_t) TISCI_MSG_FLAG_AOP;
    reqParam.pReqPayload    = (const uint8_t *) &request;
    reqParam.reqPayloadSize = (uint32_t) sizeof (request);
    reqParam.timeout        = (uint32_t) SystemP_WAIT_FOREVER;

    respParam.flags           = (uint32_t) 0;   /* Populated by the API */
    respParam.pRespPayload    = (uint8_t *) &response;
    respParam.respPayloadSize = (uint32_t) sizeof (response);

    status = Sciclient_service(&reqParam, &respParam);

	if ( (status==SystemP_SUCCESS) && ((respParam.flags & TISCI_MSG_FLAG_ACK) == TISCI_MSG_FLAG_ACK) )
	{
		*mmrVal = response.mmr_val; 
		DebugP_log("Success Reading OTP MMR \r\n");
		DebugP_log("OTP MMR Value reported :0x%x \r\n", (uint32_t) *mmrVal);
	}
	else
	{
		
		DebugP_log("Error Reading OTP MMR ... \r\n");
		status = SystemP_FAILURE; 
	}

	return status;
}




void ext_otp_printMmrs(void *args)
{
    /* Open drivers to open the UART driver for console */
    Drivers_open();
    Board_driversOpen();

    int32_t status = SystemP_SUCCESS; 
	uint32_t mmrVal, i; 
	for (i=0; i<12; i++)
	{
		status = ext_otp_readMmr(i, &mmrVal);
		DebugP_log("OTP MMR %d: 0x%x \r\n", i, mmrVal);
		//DebugP_log("Error reading MMR %d \r\n", i);
	}
    
#if defined(AMP_FREERTOS_A53)
    DebugP_log("All tests have passed on a53_core%d!!\r\n", Armv8_getCoreId());
#else
    DebugP_log("All tests have passed!!\r\n");
#endif
    Board_driversClose();
    Drivers_close();
}
SerialOutput:
DMSC Firmware Version 10.0.8--v10.00.08 (Fiery Fox)
DMSC Firmware revision 0xa
DMSC ABI revision 4.0

KPI_DATA: [BOOTLOADER_PROFILE] Boot Media       : NOR SPI FLASH 
KPI_DATA: [BOOTLOADER_PROFILE] Boot Media Clock : 100.000 MHz 
KPI_DATA: [BOOTLOADER_PROFILE] Boot Image Size  : 86 KB 
KPI_DATA: [BOOTLOADER_PROFILE] Cores present    : 
r5f0-0
KPI_DATA: [BOOTLOADER PROFILE] SYSFW init                       :      11098us 
KPI_DATA: [BOOTLOADER PROFILE] System_init                      :      11336us 
KPI_DATA: [BOOTLOADER PROFILE] Drivers_open                     :       1637us 
KPI_DATA: [BOOTLOADER PROFILE] Board_driversOpen                :     478934us 
KPI_DATA: [BOOTLOADER PROFILE] Sciclient Get Version            :       9852us 
KPI_DATA: [BOOTLOADER PROFILE] CPU load                         :      16209us 
KPI_DATA: [BOOTLOADER PROFILE] SBL End                          :          2us 
KPI_DATA: [BOOTLOADER_PROFILE] SBL Total Time Taken             :     529072us 

Image loading done, switching to application ...
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 0: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 1: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 2: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 3: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 4: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 5: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 6: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 7: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 8: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 9: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 10: 0x357 
Error Reading OTP MMR ... 
OTP MMR Value reported :0x357 
OTP MMR 11: 0x357 

 

Questions:
  1. Does the HS-FS variant of the AM2434 require specific TISCI host permissions or firewall configurations to access Extended OTP that are not covered in the default SDK example?
  2. What does the reported value/error code 0x357 signify in the context of the TISCI response?
  3. Is there a known compatibility issue between DMSC Firmware v10.0.8 and the TISCI_MSG_GET_OTP_MMR message for this SoC?

 Thank you, Matej.