blob: ba7ba2201d138d3e2715721a25194be019ff6c2f [file]
/****************************************************************************
* arch/arm64/include/imx9/imx9_romapi.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_ARM64_INCLUDE_IMX9_IMX9_ROMAPI_H
#define __ARCH_ARM64_INCLUDE_IMX9_IMX9_ROMAPI_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* infor_type values for imx9_rom_api_query_boot_infor(). */
#define QUERY_ROM_VER 1
#define QUERY_BOOT_DEV 2
#define QUERY_PAGE_SZ 3
#define QUERY_IVT_OFF 4
#define QUERY_BOOT_STAGE 5
#define QUERY_IMG_OFF 6
/* Native return values from ROM API. */
#define ROMAPI_INVALID_PARA 1
#define ROMAPI_READ_FAILURE 2
#define ROMAPI_DEVICE_NOT_READY 3
#define ROMAPI_OUT_OF_DEVICE_MEMORY 4
#define ROMAPI_OK 0xf0
/****************************************************************************
* Public Types
****************************************************************************/
/* Boot device types returned by ROM API (i.MX93). */
enum imx9_romapi_bootdev_e
{
BOOTDEV_SD = 1,
BOOTDEV_MMC = 2,
BOOTDEV_NAND = 3,
BOOTDEV_FLEXSPI_NOR = 4,
BOOTDEV_SPI_NOR = 6,
BOOTDEV_FLEXSPI_NAND = 8,
BOOTDEV_USB = 0xe,
BOOTDEV_MEM_DEV = 0xf,
BOOTDEV_INVALID = 0xff
};
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: imx9_romapi_load_image
*
* Description:
* Use the i.MX9 ROM API, to copy data from the boot device to memory.
*
* Input Parameters:
* dest - Copy destination.
* offset - Offset from boot device to copy from.
* size - Size in bytes to copy.
*
* Returned Value:
* ROMAPI_OK - Success.
* ROMAPI_INVALID_PARA - Invalid parameters.
* ROMAPI_READ_FAILURE - Low level device read failure.
* ROMAPI_DEVICE_NOT_READY - The device isn't initialized or is invalid.
* ROMAPI_OUT_OF_DEVICE_MEMORY - Attempted to read data outside of the
* boot device's memory.
*
****************************************************************************/
uint32_t imx9_romapi_load_image(uint8_t *dest, uint32_t offset,
uint32_t size);
/****************************************************************************
* Name: imx9_romapi_query_boot_infor
*
* Description:
* Query information from the ROM API.
*
* Input Parameters:
* infor_type - Type of information to query.
* infor - Points to the word to save the queried information.
*
* Returned Value:
* ROMAPI_OK - Success.
* ROMAPI_INVALID_PARA - Invalid parameters.
*
****************************************************************************/
uint32_t imx9_romapi_query_boot_infor(uint32_t infor_type, uint32_t *infor);
/****************************************************************************
* Name: imx9_romapi_get_boot_device
*
* Description:
* Get the boot device type.
*
* Returned Value:
* The device type.
*
****************************************************************************/
enum imx9_romapi_bootdev_e imx9_romapi_get_boot_device(void);
/****************************************************************************
* Name: imx9_romapi_get_seq_cntr_base
*
* Description:
* Get the offset in bytes from the boot device of the cntr_idx container.
* The containers are assumed to be sequential in the boot device's
* memory.
*
* Input Parameters:
* image_offset - Image offset of the first container in the boot device.
* pagesize - Pagesize of the boot device.
* cntr_idx - Index of the container.
*
* Returned Value:
* The offset from the boot device in bytes of the cntr_idx container.
* -1 is returned in case of error.
*
****************************************************************************/
int64_t imx9_romapi_get_seq_cntr_base(uint32_t image_offset,
uint32_t pagesize,
uint8_t cntr_idx);
#endif /* __ARCH_ARM64_INCLUDE_IMX9_IMX9_ROMAPI_H */