From 26960e864408e590e000c73a0a98872e90fb4393 Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Tue, 17 Dec 2024 22:37:49 +0800 Subject: [PATCH 1/9] [driver] add basic scsi support --- CMakeLists.txt | 1 + cmake/board/avaota-nas.cmake | 1 + include/arch/arm32/byteorder.h | 80 ++++ include/arch/arm32/endian.h | 29 ++ include/drivers/ufs/blk.h | 24 + include/drivers/ufs/reg/reg-ufs.h | 58 +++ include/drivers/ufs/scsi.h | 177 ++++++++ include/drivers/ufs/ufs.h | 719 ++++++++++++++++++++++++++++++ src/drivers/CMakeLists.txt | 1 + src/drivers/ufs/CMakeModule.cmake | 3 +- src/drivers/ufs/scsi.c | 240 ++++++++++ src/drivers/ufs/scsi/scsi.c | 0 12 files changed, 1332 insertions(+), 1 deletion(-) create mode 100644 include/arch/arm32/byteorder.h create mode 100644 include/arch/arm32/endian.h create mode 100644 include/drivers/ufs/blk.h create mode 100644 include/drivers/ufs/reg/reg-ufs.h create mode 100644 include/drivers/ufs/scsi.h create mode 100644 include/drivers/ufs/ufs.h create mode 100644 src/drivers/ufs/scsi.c delete mode 100644 src/drivers/ufs/scsi/scsi.c diff --git a/CMakeLists.txt b/CMakeLists.txt index b41cea508..e6f79f271 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -234,6 +234,7 @@ include_directories( include/drivers/chips include/drivers/reg include/drivers/usb + include/drivers/ufs include/drivers/mtd include/drivers/intc include/lib/fatfs diff --git a/cmake/board/avaota-nas.cmake b/cmake/board/avaota-nas.cmake index 727d30b50..7e23dbb83 100644 --- a/cmake/board/avaota-nas.cmake +++ b/cmake/board/avaota-nas.cmake @@ -8,6 +8,7 @@ set(CONFIG_CHIP_DCACHE True) set(CONFIG_CHIP_MMC_V2 True) set(CONFIG_CHIP_GPIO_V3 True) set(CONFIG_BOARD_AVAOTA-NAS True) +set(CONFIG_CHIP_UFS True) add_definitions(-DCONFIG_CHIP_SUN60IW2) add_definitions(-DCONFIG_CHIP_DCACHE) diff --git a/include/arch/arm32/byteorder.h b/include/arch/arm32/byteorder.h new file mode 100644 index 000000000..098ae934c --- /dev/null +++ b/include/arch/arm32/byteorder.h @@ -0,0 +1,80 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __BYTEORDER_H__ +#define __BYTEORDER_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +static inline u16_t __swab16(u16_t x) { + return ((x << 8) | (x >> 8)); +} + +static inline u32_t __swab32(u32_t x) { + return ((x << 24) | (x >> 24) | + ((x & (u32_t) 0x0000ff00UL) << 8) | + ((x & (u32_t) 0x00ff0000UL) >> 8)); +} + +static inline u64_t __swab64(u64_t x) { + return ((x << 56) | (x >> 56) | + ((x & (u64_t) 0x000000000000ff00ULL) << 40) | + ((x & (u64_t) 0x0000000000ff0000ULL) << 24) | + ((x & (u64_t) 0x00000000ff000000ULL) << 8) | + ((x & (u64_t) 0x000000ff00000000ULL) >> 8) | + ((x & (u64_t) 0x0000ff0000000000ULL) >> 24) | + ((x & (u64_t) 0x00ff000000000000ULL) >> 40)); +} + +/* + * swap bytes bizarrely. + * swahw32 - swap 16-bit half-words in a 32-bit word + */ +static inline u32_t __swahw32(u32_t x) { + return (((x & (u32_t) 0x0000ffffUL) << 16) | ((x & (u32_t) 0xffff0000UL) >> 16)); +} + +/* + * swap bytes bizarrely. + * swahb32 - swap 8-bit halves of each 16-bit half-word in a 32-bit word + */ +static inline u32_t __swahb32(u32_t x) { + return (((x & (u32_t) 0x00ff00ffUL) << 8) | ((x & (u32_t) 0xff00ff00UL) >> 8)); +} + +#if (BYTE_ORDER == BIG_ENDIAN) +#define cpu_to_le64(x) (__swab64((u64_t) (x))) +#define le64_to_cpu(x) (__swab64((u64_t) (x))) +#define cpu_to_le32(x) (__swab32((u32_t) (x))) +#define le32_to_cpu(x) (__swab32((u32_t) (x))) +#define cpu_to_le16(x) (__swab16((u16_t) (x))) +#define le16_to_cpu(x) (__swab16((u16_t) (x))) +#define cpu_to_be64(x) ((u64_t) (x)) +#define be64_to_cpu(x) ((u64_t) (x)) +#define cpu_to_be32(x) ((u32_t) (x)) +#define be32_to_cpu(x) ((u32_t) (x)) +#define cpu_to_be16(x) ((u16_t) (x)) +#define be16_to_cpu(x) ((u16_t) (x)) +#else +#define cpu_to_le64(x) ((u64_t) (x)) +#define le64_to_cpu(x) ((u64_t) (x)) +#define cpu_to_le32(x) ((u32_t) (x)) +#define le32_to_cpu(x) ((u32_t) (x)) +#define cpu_to_le16(x) ((u16_t) (x)) +#define le16_to_cpu(x) ((u16_t) (x)) +#define cpu_to_be64(x) (__swab64((u64_t) (x))) +#define be64_to_cpu(x) (__swab64((u64_t) (x))) +#define cpu_to_be32(x) (__swab32((u32_t) (x))) +#define be32_to_cpu(x) (__swab32((u32_t) (x))) +#define cpu_to_be16(x) (__swab16((u16_t) (x))) +#define be16_to_cpu(x) (__swab16((u16_t) (x))) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __BYTEORDER_H__ */ diff --git a/include/arch/arm32/endian.h b/include/arch/arm32/endian.h new file mode 100644 index 000000000..32b09506a --- /dev/null +++ b/include/arch/arm32/endian.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __ENDIAN_H__ +#define __ENDIAN_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define LITTLE_ENDIAN (0x1234) +#define BIG_ENDIAN (0x4321) + +#if (!defined(__LITTLE_ENDIAN) && !defined(__BIG_ENDIAN)) +#define __LITTLE_ENDIAN +#endif + +#if defined(__LITTLE_ENDIAN) +#define BYTE_ORDER LITTLE_ENDIAN +#elif defined(__BIG_ENDIAN) +#define BYTE_ORDER BIG_ENDIAN +#else +#error "Unknown byte order!" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __ENDIAN_H__ */ diff --git a/include/drivers/ufs/blk.h b/include/drivers/ufs/blk.h new file mode 100644 index 000000000..e21c2fd0a --- /dev/null +++ b/include/drivers/ufs/blk.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __BLK_H__ +#define __BLK_H__ + +#include +#include +#include +#include +#include + +typedef struct blk_desc { + int devnum; /* device number */ + uint8_t part_type; /* partition type */ + uint8_t target; /* target SCSI ID */ + uint8_t lun; /* target LUN */ + uint8_t hwpart; /* HW partition, e.g. for eMMC */ + uint8_t type; /* device type */ + uint8_t removable; /* removable device */ + uint64_t lba; /* number of blocks */ + uint64_t blksz; /* block size */ +} blk_desc_t; + +#endif// __BLK_H__ \ No newline at end of file diff --git a/include/drivers/ufs/reg/reg-ufs.h b/include/drivers/ufs/reg/reg-ufs.h new file mode 100644 index 000000000..52e8913d9 --- /dev/null +++ b/include/drivers/ufs/reg/reg-ufs.h @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __REG_UFS_H__ +#define __REG_UFS_H__ + +/* UFSHCI Registers */ +enum { + REG_CONTROLLER_CAPABILITIES = 0x00, + REG_UFS_VERSION = 0x08, + REG_CONTROLLER_DEV_ID = 0x10, + REG_CONTROLLER_PROD_ID = 0x14, + REG_AUTO_HIBERNATE_IDLE_TIMER = 0x18, + REG_INTERRUPT_STATUS = 0x20, + REG_INTERRUPT_ENABLE = 0x24, + REG_CONTROLLER_STATUS = 0x30, + REG_CONTROLLER_ENABLE = 0x34, + REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER = 0x38, + REG_UIC_ERROR_CODE_DATA_LINK_LAYER = 0x3C, + REG_UIC_ERROR_CODE_NETWORK_LAYER = 0x40, + REG_UIC_ERROR_CODE_TRANSPORT_LAYER = 0x44, + REG_UIC_ERROR_CODE_DME = 0x48, + REG_UTP_TRANSFER_REQ_INT_AGG_CONTROL = 0x4C, + REG_UTP_TRANSFER_REQ_LIST_BASE_L = 0x50, + REG_UTP_TRANSFER_REQ_LIST_BASE_H = 0x54, + REG_UTP_TRANSFER_REQ_DOOR_BELL = 0x58, + REG_UTP_TRANSFER_REQ_LIST_CLEAR = 0x5C, + REG_UTP_TRANSFER_REQ_LIST_RUN_STOP = 0x60, + REG_UTP_TASK_REQ_LIST_BASE_L = 0x70, + REG_UTP_TASK_REQ_LIST_BASE_H = 0x74, + REG_UTP_TASK_REQ_DOOR_BELL = 0x78, + REG_UTP_TASK_REQ_LIST_CLEAR = 0x7C, + REG_UTP_TASK_REQ_LIST_RUN_STOP = 0x80, + REG_UIC_COMMAND = 0x90, + REG_UIC_COMMAND_ARG_1 = 0x94, + REG_UIC_COMMAND_ARG_2 = 0x98, + REG_UIC_COMMAND_ARG_3 = 0x9C, + UFSHCI_REG_SPACE_SIZE = 0xA0, + REG_UFS_CCAP = 0x100, + REG_UFS_CRYPTOCAP = 0x104, + REG_UFS_CFG = 0x200, + REG_UFS_CLK_GATE = 0x204, + REG_UFS_PD_PSW_DLY = 0x314, + REG_UFS_PD_CTRL = 0x320, + REG_UFS_PD_STAT = 0x324, + UFSHCI_CRYPTO_REG_SPACE_SIZE = 0x400, +}; + +/* Controller capability masks */ +enum { + MASK_TRANSFER_REQUESTS_SLOTS = 0x0000001F, + MASK_TASK_MANAGEMENT_REQUEST_SLOTS = 0x00070000, + MASK_AUTO_HIBERN8_SUPPORT = 0x00800000, + MASK_64_ADDRESSING_SUPPORT = 0x01000000, + MASK_OUT_OF_ORDER_DATA_DELIVERY_SUPPORT = 0x02000000, + MASK_UIC_DME_TEST_MODE_SUPPORT = 0x04000000, +}; + +#endif// __REG_UFS_H__ \ No newline at end of file diff --git a/include/drivers/ufs/scsi.h b/include/drivers/ufs/scsi.h new file mode 100644 index 000000000..7b0442bc4 --- /dev/null +++ b/include/drivers/ufs/scsi.h @@ -0,0 +1,177 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __SCSI_H__ +#define __SCSI_H__ + +#include +#include +#include +#include +#include + +#define SCSI_MAX_DEVICE (128) + +typedef struct scsi_cmd { + uint8_t cmd[16]; /* command */ + uint8_t sense_buf[64]; /* sense_buf */ + uint8_t status; /* SCSI Status */ + uint8_t target; /* Target ID */ + uint8_t lun; /* Target LUN */ + uint8_t cmdlen; /* command len */ + uint64_t datalen; /* Total data length */ + uint8_t *pdata; /* pointer to data */ + uint8_t msgout[12]; /* Messge out buffer (NOT USED) */ + uint8_t msgin[12]; /* Message in buffer */ + uint8_t sensecmdlen; /* Sense command len */ + uint64_t sensedatalen; /* Sense data len */ + uint8_t sensecmd[6]; /* Sense command */ + uint64_t contr_stat; /* Controller Status */ + uint64_t trans_bytes; /* tranfered bytes */ + + uint32_t priv; + uint32_t dma_dir; +} scsi_cmd_t; + +/* SCSI constants. */ +/* Messages */ +#define M_COMPLETE (0x00) +#define M_EXTENDED (0x01) +#define M_SAVE_DP (0x02) +#define M_RESTORE_DP (0x03) +#define M_DISCONNECT (0x04) +#define M_ID_ERROR (0x05) +#define M_ABORT (0x06) +#define M_REJECT (0x07) +#define M_NOOP (0x08) +#define M_PARITY (0x09) +#define M_LCOMPLETE (0x0a) +#define M_FCOMPLETE (0x0b) +#define M_RESET (0x0c) +#define M_ABORT_TAG (0x0d) +#define M_CLEAR_QUEUE (0x0e) +#define M_INIT_REC (0x0f) +#define M_REL_REC (0x10) +#define M_TERMINATE (0x11) +#define M_SIMPLE_TAG (0x20) +#define M_HEAD_TAG (0x21) +#define M_ORDERED_TAG (0x22) +#define M_IGN_RESIDUE (0x23) +#define M_IDENTIFY (0x80) + +#define M_X_MODIFY_DP (0x00) +#define M_X_SYNC_REQ (0x01) +#define M_X_WIDE_REQ (0x03) +#define M_X_PPR_REQ (0x04) + +/* Status */ +#define S_GOOD (0x00) +#define S_CHECK_COND (0x02) +#define S_COND_MET (0x04) +#define S_BUSY (0x08) +#define S_INT (0x10) +#define S_INT_COND_MET (0x14) +#define S_CONFLICT (0x18) +#define S_TERMINATED (0x20) +#define S_QUEUE_FULL (0x28) +#define S_ILLEGAL (0xff) +#define S_SENSE (0x80) + +/* Sense_keys */ +#define SENSE_NO_SENSE 0x0 +#define SENSE_RECOVERED_ERROR 0x1 +#define SENSE_NOT_READY 0x2 +#define SENSE_MEDIUM_ERROR 0x3 +#define SENSE_HARDWARE_ERROR 0x4 +#define SENSE_ILLEGAL_REQUEST 0x5 +#define SENSE_UNIT_ATTENTION 0x6 +#define SENSE_DATA_PROTECT 0x7 +#define SENSE_BLANK_CHECK 0x8 +#define SENSE_VENDOR_SPECIFIC 0x9 +#define SENSE_COPY_ABORTED 0xA +#define SENSE_ABORTED_COMMAND 0xB +#define SENSE_VOLUME_OVERFLOW 0xD +#define SENSE_MISCOMPARE 0xE + +/* SCSI CMD */ +#define SCSI_CHANGE_DEF 0x40 /* Change Definition (Optional) */ +#define SCSI_COMPARE 0x39 /* Compare (O) */ +#define SCSI_COPY 0x18 /* Copy (O) */ +#define SCSI_COP_VERIFY 0x3A /* Copy and Verify (O) */ +#define SCSI_INQUIRY 0x12 /* Inquiry (MANDATORY) */ +#define SCSI_LOG_SELECT 0x4C /* Log Select (O) */ +#define SCSI_LOG_SENSE 0x4D /* Log Sense (O) */ +#define SCSI_MODE_SEL6 0x15 /* Mode Select 6-byte (Device Specific) */ +#define SCSI_MODE_SEL10 0x55 /* Mode Select 10-byte (Device Specific) */ +#define SCSI_MODE_SEN6 0x1A /* Mode Sense 6-byte (Device Specific) */ +#define SCSI_MODE_SEN10 0x5A /* Mode Sense 10-byte (Device Specific) */ +#define SCSI_READ_BUFF 0x3C /* Read Buffer (O) */ +#define SCSI_REQ_SENSE 0x03 /* Request Sense (MANDATORY) */ +#define SCSI_START_STOP 0x1b /*start stop unit command */ +#define SCSI_SEND_DIAG 0x1D /* Send Diagnostic (O) */ +#define SCSI_TST_U_RDY 0x00 /* Test Unit Ready (MANDATORY) */ +#define SCSI_WRITE_BUFF 0x3B /* Write Buffer (O) */ +#define SCSI_COMPARE 0x39 /* Compare (O) */ +#define SCSI_FORMAT 0x04 /* Format Unit (MANDATORY) */ +#define SCSI_LCK_UN_CAC 0x36 /* Lock Unlock Cache (O) */ +#define SCSI_PREFETCH 0x34 /* Prefetch (O) */ +#define SCSI_MED_REMOVL 0x1E /* Prevent/Allow medium Removal (O) */ +#define SCSI_READ6 0x08 /* Read 6-byte (MANDATORY) */ +#define SCSI_READ10 0x28 /* Read 10-byte (MANDATORY) */ +#define SCSI_READ16 0x48 +#define SCSI_RD_CAPAC 0x25 /* Read Capacity (MANDATORY) */ +#define SCSI_RD_CAPAC10 SCSI_RD_CAPAC /* Read Capacity (10) */ +#define SCSI_RD_CAPAC16 0x9e /* Read Capacity (16) */ +#define SCSI_RD_DEFECT 0x37 /* Read Defect Data (O) */ +#define SCSI_READ_LONG 0x3E /* Read Long (O) */ +#define SCSI_REASS_BLK 0x07 /* Reassign Blocks (O) */ +#define SCSI_RCV_DIAG 0x1C /* Receive Diagnostic Results (O) */ +#define SCSI_RELEASE 0x17 /* Release Unit (MANDATORY) */ +#define SCSI_REZERO 0x01 /* Rezero Unit (O) */ +#define SCSI_SRCH_DAT_E 0x31 /* Search Data Equal (O) */ +#define SCSI_SRCH_DAT_H 0x30 /* Search Data High (O) */ +#define SCSI_SRCH_DAT_L 0x32 /* Search Data Low (O) */ +#define SCSI_SEEK6 0x0B /* Seek 6-Byte (O) */ +#define SCSI_SEEK10 0x2B /* Seek 10-Byte (O) */ +#define SCSI_SEND_DIAG 0x1D /* Send Diagnostics (MANDATORY) */ +#define SCSI_SET_LIMIT 0x33 /* Set Limits (O) */ +#define SCSI_START_STP 0x1B /* Start/Stop Unit (O) */ +#define SCSI_SYNC_CACHE 0x35 /* Synchronize Cache (O) */ +#define SCSI_VERIFY 0x2F /* Verify (O) */ +#define SCSI_WRITE6 0x0A /* Write 6-Byte (MANDATORY) */ +#define SCSI_WRITE10 0x2A /* Write 10-Byte (MANDATORY) */ +#define SCSI_WRT_VERIFY 0x2E /* Write and Verify (O) */ +#define SCSI_WRITE_LONG 0x3F /* Write Long (O) */ +#define SCSI_WRITE_SAME 0x41 /* Write Same (O) */ + +/** + * struct scsi_plat - stores information about SCSI controller + * + * @base: Controller base address + * @max_lun: Maximum number of logical units + * @max_id: Maximum number of target ids + * @max_bytes_per_req: Maximum number of bytes per read/write request + */ +typedef struct scsi_plat { + uint64_t base; + uint64_t max_lun; + uint64_t max_id; + uint64_t max_bytes_per_req; +} scsi_plat_t; + +#define SCSI_IDENTIFY 0xC0 /* not used */ + +/* Hardware errors */ +#define SCSI_SEL_TIME_OUT 0x00000101 /* Selection time out */ +#define SCSI_HNS_TIME_OUT 0x00000102 /* Handshake */ +#define SCSI_MA_TIME_OUT 0x00000103 /* Phase error */ +#define SCSI_UNEXP_DIS 0x00000104 /* unexpected disconnect */ +#define SCSI_INT_STATE 0x00010000 /* unknown Interrupt number is stored in 16 LSB */ + +enum dma_data_direction { + DMA_BIDIRECTIONAL = 0, + DMA_TO_DEVICE = 1, + DMA_FROM_DEVICE = 2, + DMA_NONE = 3, +}; + +#endif// __SCSI_H__ \ No newline at end of file diff --git a/include/drivers/ufs/ufs.h b/include/drivers/ufs/ufs.h new file mode 100644 index 000000000..19208a364 --- /dev/null +++ b/include/drivers/ufs/ufs.h @@ -0,0 +1,719 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __UFS_H__ +#define __UFS_H__ + +#include +#include +#include +#include +#include + +#include "reg/reg-ufs.h" + +#include "blk.h" +#include "scsi.h" + +#define UFS_CDB_SIZE 16 +#define RESPONSE_UPIU_SENSE_DATA_LENGTH 18 +#define UFS_MAX_LUNS 0x7F +#define UFSHCD_QUIRK_BROKEN_LCC 0x1 + +/* Controller UFSHCI version */ +enum { + UFSHCI_VERSION_10 = 0x00010000, /* 1.0 */ + UFSHCI_VERSION_11 = 0x00010100, /* 1.1 */ + UFSHCI_VERSION_20 = 0x00000200, /* 2.0 */ + UFSHCI_VERSION_21 = 0x00000210, /* 2.1 */ +}; + +/* Interrupt disable masks */ +enum { + /* Interrupt disable mask for UFSHCI v1.0 */ + INTERRUPT_MASK_ALL_VER_10 = 0x30FFF, + INTERRUPT_MASK_RW_VER_10 = 0x30000, + /* Interrupt disable mask for UFSHCI v1.1 */ + INTERRUPT_MASK_ALL_VER_11 = 0x31FFF, + /* Interrupt disable mask for UFSHCI v2.1 */ + INTERRUPT_MASK_ALL_VER_21 = 0x71FFF, +}; + +enum { + PWR_OK = 0x0, + PWR_LOCAL = 0x01, + PWR_REMOTE = 0x02, + PWR_BUSY = 0x03, + PWR_ERROR_CAP = 0x04, + PWR_FATAL_ERROR = 0x05, +}; + +enum { + TASK_REQ_UPIU_SIZE_DWORDS = 8, + TASK_RSP_UPIU_SIZE_DWORDS = 8, + ALIGNED_UPIU_SIZE = 512, +}; + +enum { + UTP_CMD_TYPE_SCSI = 0x0, + UTP_CMD_TYPE_UFS = 0x1, + UTP_CMD_TYPE_DEV_MANAGE = 0x2, +}; + +/* UTP Transfer Request Command Offset */ +#define UPIU_COMMAND_TYPE_OFFSET 28 + +/* Offset of the response code in the UPIU header */ +#define UPIU_RSP_CODE_OFFSET 8 + +/* To accommodate UFS2.0 required Command type */ +enum { + UTP_CMD_TYPE_UFS_STORAGE = 0x1, +}; + +enum { + UTP_SCSI_COMMAND = 0x00000000, + UTP_NATIVE_UFS_COMMAND = 0x10000000, + UTP_DEVICE_MANAGEMENT_FUNCTION = 0x20000000, + UTP_REQ_DESC_INT_CMD = 0x01000000, +}; + +/* UTP Transfer Request Data Direction (DD) */ +enum { + UTP_NO_DATA_TRANSFER = 0x00000000, + UTP_HOST_TO_DEVICE = 0x02000000, + UTP_DEVICE_TO_HOST = 0x04000000, +}; + +/* Overall command status values */ +enum { + OCS_SUCCESS = 0x0, + OCS_INVALID_CMD_TABLE_ATTR = 0x1, + OCS_INVALID_PRDT_ATTR = 0x2, + OCS_MISMATCH_DATA_BUF_SIZE = 0x3, + OCS_MISMATCH_RESP_UPIU_SIZE = 0x4, + OCS_PEER_COMM_FAILURE = 0x5, + OCS_ABORTED = 0x6, + OCS_FATAL_ERROR = 0x7, + OCS_INVALID_COMMAND_STATUS = 0x0F, + MASK_OCS = 0x0F, +}; + +/* + * UFS Protocol Information Unit related definitions + */ +/* Task management functions */ +enum { + UFS_ABORT_TASK = 0x01, + UFS_ABORT_TASK_SET = 0x02, + UFS_CLEAR_TASK_SET = 0x04, + UFS_LOGICAL_RESET = 0x08, + UFS_QUERY_TASK = 0x80, + UFS_QUERY_TASK_SET = 0x81, +}; + +/* UTP UPIU Transaction Codes Initiator to Target */ +enum { + UPIU_TRANSACTION_NOP_OUT = 0x00, + UPIU_TRANSACTION_COMMAND = 0x01, + UPIU_TRANSACTION_DATA_OUT = 0x02, + UPIU_TRANSACTION_TASK_REQ = 0x04, + UPIU_TRANSACTION_QUERY_REQ = 0x16, +}; + +/* UTP UPIU Transaction Codes Target to Initiator */ +enum { + UPIU_TRANSACTION_NOP_IN = 0x20, + UPIU_TRANSACTION_RESPONSE = 0x21, + UPIU_TRANSACTION_DATA_IN = 0x22, + UPIU_TRANSACTION_TASK_RSP = 0x24, + UPIU_TRANSACTION_READY_XFER = 0x31, + UPIU_TRANSACTION_QUERY_RSP = 0x36, + UPIU_TRANSACTION_REJECT_UPIU = 0x3F, +}; + +/* UPIU Read/Write flags */ +enum { + UPIU_CMD_FLAGS_NONE = 0x00, + UPIU_CMD_FLAGS_WRITE = 0x20, + UPIU_CMD_FLAGS_READ = 0x40, +}; + +/* UPIU Task Attributes */ +enum { + UPIU_TASK_ATTR_SIMPLE = 0x00, + UPIU_TASK_ATTR_ORDERED = 0x01, + UPIU_TASK_ATTR_HEADQ = 0x02, + UPIU_TASK_ATTR_ACA = 0x03, +}; + +/* UPIU Query request function */ +enum { + UPIU_QUERY_FUNC_STANDARD_READ_REQUEST = 0x01, + UPIU_QUERY_FUNC_STANDARD_WRITE_REQUEST = 0x81, +}; + +/* Offset of the response code in the UPIU header */ +#define UPIU_RSP_CODE_OFFSET 8 + +enum { + MASK_SCSI_STATUS = 0xFF, + MASK_TASK_RESPONSE = 0xFF00, + MASK_RSP_UPIU_RESULT = 0xFFFF, + MASK_QUERY_DATA_SEG_LEN = 0xFFFF, + MASK_RSP_UPIU_DATA_SEG_LEN = 0xFFFF, + MASK_RSP_EXCEPTION_EVENT = 0x10000, + MASK_TM_SERVICE_RESP = 0xFF, + MASK_TM_FUNC = 0xFF, +}; + +/* UTP QUERY Transaction Specific Fields OpCode */ +enum query_opcode { + UPIU_QUERY_OPCODE_NOP = 0x0, + UPIU_QUERY_OPCODE_READ_DESC = 0x1, + UPIU_QUERY_OPCODE_WRITE_DESC = 0x2, + UPIU_QUERY_OPCODE_READ_ATTR = 0x3, + UPIU_QUERY_OPCODE_WRITE_ATTR = 0x4, + UPIU_QUERY_OPCODE_READ_FLAG = 0x5, + UPIU_QUERY_OPCODE_SET_FLAG = 0x6, + UPIU_QUERY_OPCODE_CLEAR_FLAG = 0x7, + UPIU_QUERY_OPCODE_TOGGLE_FLAG = 0x8, +}; + +/* bRefClkFreq attribute values */ +enum ufs_ref_clk_freq { + REF_CLK_FREQ_19_2_MHZ = 0, + REF_CLK_FREQ_26_MHZ = 1, + REF_CLK_FREQ_38_4_MHZ = 2, + REF_CLK_FREQ_52_MHZ = 3, + REF_CLK_FREQ_INVAL = -1, +}; + +/* Query response result code */ +enum { + QUERY_RESULT_SUCCESS = 0x00, + QUERY_RESULT_NOT_READABLE = 0xF6, + QUERY_RESULT_NOT_WRITEABLE = 0xF7, + QUERY_RESULT_ALREADY_WRITTEN = 0xF8, + QUERY_RESULT_INVALID_LENGTH = 0xF9, + QUERY_RESULT_INVALID_VALUE = 0xFA, + QUERY_RESULT_INVALID_SELECTOR = 0xFB, + QUERY_RESULT_INVALID_INDEX = 0xFC, + QUERY_RESULT_INVALID_IDN = 0xFD, + QUERY_RESULT_INVALID_OPCODE = 0xFE, + QUERY_RESULT_GENERAL_FAILURE = 0xFF, +}; + +enum ufs_dev_pwr_mode { + UFS_ACTIVE_PWR_MODE = 1, + UFS_SLEEP_PWR_MODE = 2, + UFS_POWERDOWN_PWR_MODE = 3, +}; + +enum ufs_notify_change_status { + PRE_CHANGE, + POST_CHANGE, +}; + +enum { + UPIU_COMMAND_SET_TYPE_SCSI = 0x0, + UPIU_COMMAND_SET_TYPE_UFS = 0x1, + UPIU_COMMAND_SET_TYPE_QUERY = 0x2, +}; + +/* Flag idn for Query Requests*/ +enum flag_idn { + QUERY_FLAG_IDN_FDEVICEINIT = 0x01, + QUERY_FLAG_IDN_PERMANENT_WPE = 0x02, + QUERY_FLAG_IDN_PWR_ON_WPE = 0x03, + QUERY_FLAG_IDN_BKOPS_EN = 0x04, + QUERY_FLAG_IDN_LIFE_SPAN_MODE_ENABLE = 0x05, + QUERY_FLAG_IDN_PURGE_ENABLE = 0x06, + QUERY_FLAG_IDN_RESERVED2 = 0x07, + QUERY_FLAG_IDN_FPHYRESOURCEREMOVAL = 0x08, + QUERY_FLAG_IDN_BUSY_RTC = 0x09, + QUERY_FLAG_IDN_RESERVED3 = 0x0A, + QUERY_FLAG_IDN_PERMANENTLY_DISABLE_FW_UPDATE = 0x0B, +}; + +/* Attribute idn for Query requests */ +enum attr_idn { + QUERY_ATTR_IDN_BOOT_LU_EN = 0x00, + QUERY_ATTR_IDN_RESERVED = 0x01, + QUERY_ATTR_IDN_POWER_MODE = 0x02, + QUERY_ATTR_IDN_ACTIVE_ICC_LVL = 0x03, + QUERY_ATTR_IDN_OOO_DATA_EN = 0x04, + QUERY_ATTR_IDN_BKOPS_STATUS = 0x05, + QUERY_ATTR_IDN_PURGE_STATUS = 0x06, + QUERY_ATTR_IDN_MAX_DATA_IN = 0x07, + QUERY_ATTR_IDN_MAX_DATA_OUT = 0x08, + QUERY_ATTR_IDN_DYN_CAP_NEEDED = 0x09, + QUERY_ATTR_IDN_REF_CLK_FREQ = 0x0A, + QUERY_ATTR_IDN_CONF_DESC_LOCK = 0x0B, + QUERY_ATTR_IDN_MAX_NUM_OF_RTT = 0x0C, + QUERY_ATTR_IDN_EE_CONTROL = 0x0D, + QUERY_ATTR_IDN_EE_STATUS = 0x0E, + QUERY_ATTR_IDN_SECONDS_PASSED = 0x0F, + QUERY_ATTR_IDN_CNTX_CONF = 0x10, + QUERY_ATTR_IDN_CORR_PRG_BLK_NUM = 0x11, + QUERY_ATTR_IDN_RESERVED2 = 0x12, + QUERY_ATTR_IDN_RESERVED3 = 0x13, + QUERY_ATTR_IDN_FFU_STATUS = 0x14, + QUERY_ATTR_IDN_PSA_STATE = 0x15, + QUERY_ATTR_IDN_PSA_DATA_SIZE = 0x16, +}; + +/* Descriptor idn for Query requests */ +enum desc_idn { + QUERY_DESC_IDN_DEVICE = 0x0, + QUERY_DESC_IDN_CONFIGURATION = 0x1, + QUERY_DESC_IDN_UNIT = 0x2, + QUERY_DESC_IDN_RFU_0 = 0x3, + QUERY_DESC_IDN_INTERCONNECT = 0x4, + QUERY_DESC_IDN_STRING = 0x5, + QUERY_DESC_IDN_RFU_1 = 0x6, + QUERY_DESC_IDN_GEOMETRY = 0x7, + QUERY_DESC_IDN_POWER = 0x8, + QUERY_DESC_IDN_HEALTH = 0x9, + QUERY_DESC_IDN_MAX, +}; + +enum desc_header_offset { + QUERY_DESC_LENGTH_OFFSET = 0x00, + QUERY_DESC_DESC_TYPE_OFFSET = 0x01, +}; + +enum ufs_desc_def_size { + QUERY_DESC_DEVICE_DEF_SIZE = 0x40, + QUERY_DESC_CONFIGURATION_DEF_SIZE = 0x90, + QUERY_DESC_UNIT_DEF_SIZE = 0x23, + QUERY_DESC_INTERCONNECT_DEF_SIZE = 0x06, + QUERY_DESC_GEOMETRY_DEF_SIZE = 0x48, + QUERY_DESC_POWER_DEF_SIZE = 0x62, + QUERY_DESC_HEALTH_DEF_SIZE = 0x25, +}; + +/* Device descriptor parameters offsets in bytes*/ +enum device_desc_param { + DEVICE_DESC_PARAM_LEN = 0x0, + DEVICE_DESC_PARAM_TYPE = 0x1, + DEVICE_DESC_PARAM_DEVICE_TYPE = 0x2, + DEVICE_DESC_PARAM_DEVICE_CLASS = 0x3, + DEVICE_DESC_PARAM_DEVICE_SUB_CLASS = 0x4, + DEVICE_DESC_PARAM_PRTCL = 0x5, + DEVICE_DESC_PARAM_NUM_LU = 0x6, + DEVICE_DESC_PARAM_NUM_WLU = 0x7, + DEVICE_DESC_PARAM_BOOT_ENBL = 0x8, + DEVICE_DESC_PARAM_DESC_ACCSS_ENBL = 0x9, + DEVICE_DESC_PARAM_INIT_PWR_MODE = 0xA, + DEVICE_DESC_PARAM_HIGH_PR_LUN = 0xB, + DEVICE_DESC_PARAM_SEC_RMV_TYPE = 0xC, + DEVICE_DESC_PARAM_SEC_LU = 0xD, + DEVICE_DESC_PARAM_BKOP_TERM_LT = 0xE, + DEVICE_DESC_PARAM_ACTVE_ICC_LVL = 0xF, + DEVICE_DESC_PARAM_SPEC_VER = 0x10, + DEVICE_DESC_PARAM_MANF_DATE = 0x12, + DEVICE_DESC_PARAM_MANF_NAME = 0x14, + DEVICE_DESC_PARAM_PRDCT_NAME = 0x15, + DEVICE_DESC_PARAM_SN = 0x16, + DEVICE_DESC_PARAM_OEM_ID = 0x17, + DEVICE_DESC_PARAM_MANF_ID = 0x18, + DEVICE_DESC_PARAM_UD_OFFSET = 0x1A, + DEVICE_DESC_PARAM_UD_LEN = 0x1B, + DEVICE_DESC_PARAM_RTT_CAP = 0x1C, + DEVICE_DESC_PARAM_FRQ_RTC = 0x1D, + DEVICE_DESC_PARAM_UFS_FEAT = 0x1F, + DEVICE_DESC_PARAM_FFU_TMT = 0x20, + DEVICE_DESC_PARAM_Q_DPTH = 0x21, + DEVICE_DESC_PARAM_DEV_VER = 0x22, + DEVICE_DESC_PARAM_NUM_SEC_WPA = 0x24, + DEVICE_DESC_PARAM_PSA_MAX_DATA = 0x25, + DEVICE_DESC_PARAM_PSA_TMT = 0x29, + DEVICE_DESC_PARAM_PRDCT_REV = 0x2A, +}; + +enum { + UFSHCD_MAX_CHANNEL = 0, + UFSHCD_MAX_ID = 1, +}; + +enum dev_cmd_type { + DEV_CMD_TYPE_NOP = 0x0, + DEV_CMD_TYPE_QUERY = 0x1, +}; + +/* Link Status*/ +enum link_status { + UFSHCD_LINK_IS_DOWN = 1, + UFSHCD_LINK_IS_UP = 2, +}; + +/* UIC Commands */ +enum uic_cmd_dme { + UIC_CMD_DME_GET = 0x01, + UIC_CMD_DME_SET = 0x02, + UIC_CMD_DME_PEER_GET = 0x03, + UIC_CMD_DME_PEER_SET = 0x04, + UIC_CMD_DME_POWERON = 0x10, + UIC_CMD_DME_POWEROFF = 0x11, + UIC_CMD_DME_ENABLE = 0x12, + UIC_CMD_DME_RESET = 0x14, + UIC_CMD_DME_END_PT_RST = 0x15, + UIC_CMD_DME_LINK_STARTUP = 0x16, + UIC_CMD_DME_HIBER_ENTER = 0x17, + UIC_CMD_DME_HIBER_EXIT = 0x18, + UIC_CMD_DME_TEST_MODE = 0x1A, +}; + +/* UIC Config result code / Generic error code */ +enum { + UIC_CMD_RESULT_SUCCESS = 0x00, + UIC_CMD_RESULT_INVALID_ATTR = 0x01, + UIC_CMD_RESULT_FAILURE = 0x01, + UIC_CMD_RESULT_INVALID_ATTR_VALUE = 0x02, + UIC_CMD_RESULT_READ_ONLY_ATTR = 0x03, + UIC_CMD_RESULT_WRITE_ONLY_ATTR = 0x04, + UIC_CMD_RESULT_BAD_INDEX = 0x05, + UIC_CMD_RESULT_LOCKED_ATTR = 0x06, + UIC_CMD_RESULT_BAD_TEST_FEATURE_INDEX = 0x07, + UIC_CMD_RESULT_PEER_COMM_FAILURE = 0x08, + UIC_CMD_RESULT_BUSY = 0x09, + UIC_CMD_RESULT_DME_FAILURE = 0x0A, +}; + +#define MASK_UIC_COMMAND_RESULT 0xFF + +typedef struct ufs_pa_layer_attr { + uint32_t gear_rx; + uint32_t gear_tx; + uint32_t lane_rx; + uint32_t lane_tx; + uint32_t pwr_rx; + uint32_t pwr_tx; + uint32_t hs_rate; +} ufs_pa_layer_attr_t; + +typedef struct ufs_pwr_mode_info { + bool is_valid; + ufs_pa_layer_attr_t info; +} ufs_pwr_mode_info_t; + +typedef struct ufshcd_sg_entry { + uint32_t base_addr; + uint32_t upper_addr; + uint32_t reserved; + uint32_t size; +} ufshcd_sg_entry_t; + +#define MAX_BUFF (16 * 4)//4M*4 +typedef struct utp_transfer_cmd_desc { + uint8_t command_upiu[ALIGNED_UPIU_SIZE]; + uint8_t response_upiu[ALIGNED_UPIU_SIZE]; + ufshcd_sg_entry_t prd_table[MAX_BUFF]; +} utp_transfer_cmd_desc_t; + +/** + * struct request_desc_header - Descriptor Header common to both UTRD and UTMRD + * @dword0: Descriptor Header DW0 + * @dword1: Descriptor Header DW1 + * @dword2: Descriptor Header DW2 + * @dword3: Descriptor Header DW3 + */ +typedef struct request_desc_header { + uint32_t dword_0; + uint32_t dword_1; + uint32_t dword_2; + uint32_t dword_3; +} request_desc_header_t; + +/** + * struct utp_transfer_req_desc - UTRD structure + * @header: UTRD header DW-0 to DW-3 + * @command_desc_base_addr_lo: UCD base address low DW-4 + * @command_desc_base_addr_hi: UCD base address high DW-5 + * @response_upiu_length: response UPIU length DW-6 + * @response_upiu_offset: response UPIU offset DW-6 + * @prd_table_length: Physical region descriptor length DW-7 + * @prd_table_offset: Physical region descriptor offset DW-7 + */ +typedef struct utp_transfer_req_desc { + /* DW 0-3 */ + request_desc_header_t header; + + /* DW 4-5*/ + uint32_t command_desc_base_addr_lo; + uint32_t command_desc_base_addr_hi; + + /* DW 6 */ + uint16_t response_upiu_length; + uint16_t response_upiu_offset; + + /* DW 7 */ + uint16_t prd_table_length; + uint16_t prd_table_offset; +} utp_transfer_req_desc_t; + +/** + * struct utp_upiu_header - UPIU header structure + * @dword_0: UPIU header DW-0 + * @dword_1: UPIU header DW-1 + * @dword_2: UPIU header DW-2 + */ +typedef struct utp_upiu_header { + uint32_t dword_0; + uint32_t dword_1; + uint32_t dword_2; +} utp_upiu_header_t; + +/** + * struct utp_upiu_query - upiu request buffer structure for + * query request. + * @opcode: command to perform B-0 + * @idn: a value that indicates the particular type of data B-1 + * @index: Index to further identify data B-2 + * @selector: Index to further identify data B-3 + * @reserved_osf: spec reserved field B-4,5 + * @length: number of descriptor bytes to read/write B-6,7 + * @value: Attribute value to be written DW-5 + * @reserved: spec reserved DW-6,7 + */ +typedef struct utp_upiu_query { + uint8_t opcode; + uint8_t idn; + uint8_t index; + uint8_t selector; + uint16_t reserved_osf; + uint16_t length; + uint32_t value; + uint32_t reserved[2]; +} utp_upiu_query_t; + +/** + * struct utp_upiu_cmd - Command UPIU structure + * @data_transfer_len: Data Transfer Length DW-3 + * @cdb: Command Descriptor Block CDB DW-4 to DW-7 + */ +typedef struct utp_upiu_cmd { + uint32_t exp_data_transfer_len; + uint8_t cdb[UFS_CDB_SIZE]; +} utp_upiu_cmd_t; + +/* + * UTMRD structure. + */ +typedef struct utp_task_req_desc { + /* DW 0-3 */ + request_desc_header_t header; + + /* DW 4-11 - Task request UPIU structure */ + utp_upiu_header_t req_header; + uint32_t input_param1; + uint32_t input_param2; + uint32_t input_param3; + uint32_t __reserved1[2]; + + /* DW 12-19 - Task Management Response UPIU structure */ + utp_upiu_header_t rsp_header; + uint32_t output_param1; + uint32_t output_param2; + uint32_t __reserved2[3]; +} utp_task_req_desc_t; + +/** + * struct utp_upiu_req - general upiu request structure + * @header:UPIU header structure DW-0 to DW-2 + * @sc: fields structure for scsi command DW-3 to DW-7 + * @qr: fields structure for query request DW-3 to DW-7 + */ +//#pragma anon_unions +typedef struct utp_upiu_req { + utp_upiu_header_t header; + union { + utp_upiu_cmd_t sc; + utp_upiu_query_t qr; + utp_upiu_query_t tr; + /* use utp_upiu_query to host the 4 dwords of uic command */ + utp_upiu_query_t uc; + }; +} utp_upiu_req_t; + +/** + * struct utp_cmd_rsp - Response UPIU structure + * @residual_transfer_count: Residual transfer count DW-3 + * @reserved: Reserved double words DW-4 to DW-7 + * @sense_data_len: Sense data length DW-8 U16 + * @sense_data: Sense data field DW-8 to DW-12 + */ +typedef struct utp_cmd_rsp { + uint32_t residual_transfer_count; + uint32_t reserved[4]; + uint16_t sense_data_len; + uint8_t sense_data[RESPONSE_UPIU_SENSE_DATA_LENGTH]; +} utp_cmd_rsp_t; + +/** + * struct utp_upiu_rsp - general upiu response structure + * @header: UPIU header structure DW-0 to DW-2 + * @sr: fields structure for scsi command DW-3 to DW-12 + * @qr: fields structure for query request DW-3 to DW-7 + */ +typedef struct utp_upiu_rsp { + utp_upiu_header_t header; + union { + utp_cmd_rsp_t sr; + utp_upiu_query_t qr; + }; +} utp_upiu_rsp_t; + +#define MAX_MODEL_LEN 16 +/** + * ufs_dev_desc - ufs device details from the device descriptor + * + * @wmanufacturerid: card details + * @model: card model + */ +typedef struct ufs_dev_desc { + uint16_t wmanufacturerid; + char model[MAX_MODEL_LEN + 1]; +} ufs_dev_desc_t; + +/** + * struct uic_command - UIC command structure + * @command: UIC command + * @argument1: UIC command argument 1 + * @argument2: UIC command argument 2 + * @argument3: UIC command argument 3 + * @cmd_active: Indicate if UIC command is outstanding + * @result: UIC command result + * @done: UIC command completion + */ +typedef struct uic_command { + uint32_t command; + uint32_t argument1; + uint32_t argument2; + uint32_t argument3; + int cmd_active; + int result; +} uic_command_t; + + +#define GENERAL_UPIU_REQUEST_SIZE (sizeof(utp_upiu_req_t)) +#define QUERY_DESC_MAX_SIZE 255 +#define QUERY_DESC_MIN_SIZE 2 +#define QUERY_DESC_HDR_SIZE 2 +#define QUERY_OSF_SIZE (GENERAL_UPIU_REQUEST_SIZE - (sizeof(utp_upiu_header_t))) +#define RESPONSE_UPIU_SENSE_DATA_LENGTH 18 +#define UPIU_HEADER_DWORD(byte3, byte2, byte1, byte0) \ + cpu_to_be32((byte3 << 24) | (byte2 << 16) | \ + (byte1 << 8) | (byte0)) +/* GenSelectorIndex calculation macros for M-PHY attributes */ +#define UIC_ARG_MPHY_TX_GEN_SEL_INDEX(lane) (lane) +#define UIC_ARG_MPHY_RX_GEN_SEL_INDEX(lane) (PA_MAXDATALANES + (lane)) + +#define UIC_ARG_MIB_SEL(attr, sel) ((((((uint32_t) attr)) & 0xFFFF) << 16) | ((sel) &0xFFFF)) +#define UIC_ARG_MIB(attr) UIC_ARG_MIB_SEL(((uint32_t) attr), 0) +#define UIC_ARG_ATTR_TYPE(t) (((t) &0xFF) << 16) +#define UIC_GET_ATTR_ID(v) (((v) >> 16) & 0xFFFF) + +/* Host <-> Device UniPro Link state */ +enum uic_link_state { + UIC_LINK_OFF_STATE = 0, /* Link powered down or disabled */ + UIC_LINK_ACTIVE_STATE = 1, /* Link is in Fast/Slow/Sleep state */ + UIC_LINK_HIBERN8_STATE = 2, /* Link is in Hibernate state */ +}; + +/* UIC command interfaces for DME primitives */ +#define DME_LOCAL 0 +#define DME_PEER 1 +#define ATTR_SET_NOR 0 /* NORMAL */ +#define ATTR_SET_ST 1 /* STATIC */ + +/** + * struct ufs_query_req - parameters for building a query request + * @query_func: UPIU header query function + * @upiu_req: the query request data + */ +typedef struct ufs_query_req { + uint8_t query_func; + utp_upiu_query_t upiu_req; +} ufs_query_req_t; + +/** + * struct ufs_query_resp - UPIU QUERY + * @response: device response code + * @upiu_res: query response data + */ +typedef struct ufs_query_res { + uint8_t response; + utp_upiu_query_t upiu_res; +} ufs_query_res_t; + +/** + * struct ufs_query - holds relevant data structures for query request + * @request: request upiu and function + * @descriptor: buffer for sending/receiving descriptor + * @response: response upiu and response + */ +typedef struct ufs_query { + ufs_query_req_t request; + uint8_t *descriptor; + ufs_query_res_t response; +} ufs_query_t; + +/** + * struct ufs_dev_cmd - all assosiated fields with device management commands + * @type: device management command type - Query, NOP OUT + * @tag_wq: wait queue until free command slot is available + */ +typedef struct ufs_dev_cmd { + enum dev_cmd_type type; + ufs_query_t query; +} ufs_dev_cmd_t; + +typedef struct ufs_desc_size { + uint32_t dev_desc; + uint32_t pwr_desc; + uint32_t geom_desc; + uint32_t interc_desc; + uint32_t unit_desc; + uint32_t conf_desc; + uint32_t hlth_desc; +} ufs_desc_size_t; + +typedef struct ufs_basic_info { + uint32_t capabilities; + uint32_t version; + uint32_t interrupt_mask; + uint32_t quirks; +} ufs_basic_info_t; + +typedef struct ufs_hba { + ufs_basic_info_t basic_info; + ufs_desc_size_t desc_size; + + /* Virtual memory reference */ + utp_transfer_cmd_desc_t *ucdl; + utp_transfer_req_desc_t *utrdl; + + /* Task Manegement Support */ + utp_task_req_desc_t *utmrdl; + + utp_upiu_req_t *ucd_req_ptr; + utp_upiu_rsp_t *ucd_rsp_ptr; + ufshcd_sg_entry_t *ucd_prdt_ptr; + + /* Power Mode information */ + uint32_t curr_dev_pwr_mode; + ufs_pa_layer_attr_t pwr_info; + ufs_pwr_mode_info_t max_pwr_info; + + ufs_dev_cmd_t dev_cmd; + uint32_t dev_ref_clk_freq; +} ufs_hba_t; + +typedef struct ufs_device { + ufs_hba_t ufs_hba; + scsi_plat_t sc_plat; + void *bd; +} ufs_device_t; + +#endif// __UFS_H__ \ No newline at end of file diff --git a/src/drivers/CMakeLists.txt b/src/drivers/CMakeLists.txt index 44a352af6..8b14371a4 100644 --- a/src/drivers/CMakeLists.txt +++ b/src/drivers/CMakeLists.txt @@ -29,6 +29,7 @@ if (NOT CONFIG_CHIP_MINSYS) sys-trng.c ${USB_DRIVER} + ${UFS_DRIVER} ${INTC_DRIVER} ${MMC_DRIVER} ${MTD_DRIVER} diff --git a/src/drivers/ufs/CMakeModule.cmake b/src/drivers/ufs/CMakeModule.cmake index 168a26da7..b1e150baf 100644 --- a/src/drivers/ufs/CMakeModule.cmake +++ b/src/drivers/ufs/CMakeModule.cmake @@ -1,5 +1,6 @@ if (CONFIG_CHIP_UFS) set(UFS_DRIVER - ufs/ + ufs/ufs.c + ufs/scsi.c ) endif() \ No newline at end of file diff --git a/src/drivers/ufs/scsi.c b/src/drivers/ufs/scsi.c new file mode 100644 index 000000000..5eaafbeda --- /dev/null +++ b/src/drivers/ufs/scsi.c @@ -0,0 +1,240 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#include +#include +#include +#include +#include +#include + +#include + +#include + +static scsi_cmd_t scsi_cmd_buffer; +static uint8_t scsi_buffer[512]; + +static void scsi_print_error(struct scsi_cmd *pccb) { + int i = 0; + printk(LOG_LEVEL_MUTE, "scsi cmd"); + for (i = 0; i < 8; i++) { + printk(LOG_LEVEL_MUTE, "%02X ", pccb->cmd[i]); + } + printk(LOG_LEVEL_MUTE, "\n"); + + printk(LOG_LEVEL_MUTE, "scsi cmd len %d,data len %lu\n", pccb->cmdlen, pccb->datalen); + printk(LOG_LEVEL_MUTE, "scsi first 32 byte data"); + for (i = 0; (i < (pccb->datalen)) && (i < 32); i++) { + printk(LOG_LEVEL_MUTE, "%02X ", pccb->pdata[i]); + } + printk(LOG_LEVEL_MUTE, "\n"); + + printk(LOG_LEVEL_MUTE, "scsi last 32 byte data"); + if (pccb->datalen > 32) { + for (i = pccb->datalen - 32; i < pccb->datalen; i++) { + printk(LOG_LEVEL_MUTE, "%02X ", pccb->pdata[i]); + } + } + printk(LOG_LEVEL_MUTE, "\n"); +} + +static void scsi_setup_inquiry(scsi_cmd_t *pccb) { + pccb->cmd[0] = SCSI_INQUIRY; + pccb->cmd[1] = pccb->lun << 5; + pccb->cmd[2] = 0; + pccb->cmd[3] = 0; + if (pccb->datalen > 255) + pccb->cmd[4] = 255; + else + pccb->cmd[4] = (uint8_t) pccb->datalen; + pccb->cmd[5] = 0; + pccb->cmdlen = 6; + pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */ +} + +static void scsi_setup_test_unit_ready(scsi_cmd_t *pccb) { + pccb->cmd[0] = SCSI_TST_U_RDY; + pccb->cmd[1] = pccb->lun << 5; + pccb->cmd[2] = 0; + pccb->cmd[3] = 0; + pccb->cmd[4] = 0; + pccb->cmd[5] = 0; + pccb->cmdlen = 6; + pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */ +} + +static void scsi_setup_start(scsi_cmd_t *pccb) { + pccb->cmd[0] = SCSI_START_STOP; + pccb->cmd[1] = 1; /* Return immediately */ + pccb->cmd[2] = 0; + pccb->cmd[3] = 0; + pccb->cmd[4] = 1; /* Start spin cycle */ + pccb->cmd[5] = 0; + pccb->cmdlen = 6; + pccb->msgout[0] = SCSI_IDENTIFY; +} + +static int scsi_exec(ufs_device_t *dev, scsi_cmd_t *pccb) { + return 0; +} + +static int scsi_bus_reset(ufs_device_t *dev) { + return 0; +} + +static int scsi_read_capacity(ufs_device_t *dev, scsi_cmd_t *pccb, uint64_t *capacity, uint64_t *blksz) { + *capacity = 0; + + memset(pccb->cmd, '\0', sizeof(pccb->cmd)); + pccb->cmd[0] = SCSI_RD_CAPAC10; + pccb->cmd[1] = pccb->lun << 5; + pccb->cmdlen = 10; + pccb->msgout[0] = SCSI_IDENTIFY; + + pccb->datalen = 8; + pccb->dma_dir = DMA_FROM_DEVICE; + if (scsi_exec(dev, pccb)) + return 1; + + *capacity = ((uint64_t) pccb->pdata[0] << 24) | ((uint64_t) pccb->pdata[1] << 16) | + ((uint64_t) pccb->pdata[2] << 8) | ((uint64_t) pccb->pdata[3]); + + if (*capacity != 0xffffffff) { + *blksz = ((uint64_t) pccb->pdata[4] << 24) | ((uint64_t) pccb->pdata[5] << 16) | + ((uint64_t) pccb->pdata[6] << 8) | ((uint64_t) pccb->pdata[7]); + return 0; + } + + /* Read capacity (10) was insufficient. Use read capacity (16). */ + memset(pccb->cmd, '\0', sizeof(pccb->cmd)); + pccb->cmd[0] = SCSI_RD_CAPAC16; + pccb->cmd[1] = 0x10; + pccb->cmdlen = 16; + pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */ + + /*ufs read capacity 16 parameter data is 32 byte*/ + pccb->datalen = 32; + pccb->dma_dir = DMA_FROM_DEVICE; + if (scsi_exec(dev, pccb)) + return 1; + + *capacity = ((uint64_t) pccb->pdata[0] << 56) | ((uint64_t) pccb->pdata[1] << 48) | + ((uint64_t) pccb->pdata[2] << 40) | ((uint64_t) pccb->pdata[3] << 32) | + ((uint64_t) pccb->pdata[4] << 24) | ((uint64_t) pccb->pdata[5] << 16) | + ((uint64_t) pccb->pdata[6] << 8) | ((uint64_t) pccb->pdata[7]); + + /*ufs read capacity 16 parameter data logical block length in bytes is only 4 byte*/ + *blksz = ((uint64_t) pccb->pdata[8] << 24) | ((uint64_t) pccb->pdata[9] << 16) | + ((uint64_t) pccb->pdata[10] << 8) | ((uint64_t) pccb->pdata[11]); + + return 0; +} + +static int scsi_detect_dev(ufs_device_t *dev, int target, int lun, blk_desc_t *desc) { + uint8_t perq = 0; + uint64_t capacity = 0; + uint64_t blksz = 0; + int count = 0, err = 0, spintime = 0, try_cnt = 0; + scsi_cmd_t *pccb = (scsi_cmd_t *) &scsi_cmd_buffer; + + pccb->target = target; + pccb->lun = lun; + pccb->pdata = (uint8_t *) &scsi_buffer; + pccb->datalen = 36; + pccb->dma_dir = DMA_FROM_DEVICE; + scsi_setup_inquiry(pccb); + + for (count = 0; count < 3; count++) { + if (scsi_exec(dev, pccb) != 0) { + if (pccb->contr_stat == SCSI_SEL_TIME_OUT) { + printk_warning("UFS: Selection timeout ID %d\n", pccb->target); + return -1; + } + printk_warning("UFS: device not found\n"); + return -1; + } else { + printk_infoinfo("UFS: Found UFS device ID %d\n", pccb->target); + break; + } + } + perq = scsi_buffer[0]; + if ((perq & 0x1f) == 0x1f) { + printk_warning("UFS: device unknown\n"); + return -1; + } + + desc->target = pccb->target; + desc->lun = pccb->lun; + + for (try_cnt = 0; try_cnt < 3; try_cnt++) { + for (count = 0; count < 3; count++) { + pccb->datalen = 0; + pccb->dma_dir = DMA_NONE; + scsi_setup_test_unit_ready(pccb); + err = scsi_exec(dev, pccb); + if (!err) + break; + } + if (err) { + if (!spintime) { + spintime = 1; + pccb->datalen = 0; + scsi_setup_start(pccb); + scsi_exec(dev, pccb); + } + } else { + break; + } + printk_warning("UFS: try again after start cmd\n"); + mdelay(1000); + } + + if (err) { + printk_warning("UFS: try setup device failed\n"); + return -1; + } + + if (scsi_read_capacity(dev, pccb, &capacity, &blksz)) { + scsi_print_error(pccb); + return -1; + } + + desc->lba = capacity; + desc->blksz = blksz; + desc->type = perq; + + return 0; +} + +uint64_t scsi_read(ufs_device_t *dev, uint64_t blknr, uint64_t blkcnt, const void *buffer) { +} + +uint64_t scsi_write(ufs_device_t *dev, uint64_t blknr, uint64_t blkcnt, const void *buffer) { +} + +int scsi_scan_dev(ufs_device_t *dev) { + ufs_device_t *bdev; + blk_desc_t bd; + blk_desc_t *bdesc; + + /* init dev desc */ + bd.target = 0xff; + bd.lun = 0xff; + + if (scsi_detect_dev(dev, 0, 0, &bd)) { + printk_warning("UFS: scsi scan device failed\n"); + return -1; + } + + bdev = dev; + bdesc = bdev->bd; + bdesc->target = id; + bdesc->lun = lun; + bdesc->type = bd.type; + bdesc->devnum = 0; + bdesc->blksz = bd.blksz; + bdesc->lba = bd.lba; + + printk_info("UFS: detect UFS device\n"); + return 0; +} \ No newline at end of file diff --git a/src/drivers/ufs/scsi/scsi.c b/src/drivers/ufs/scsi/scsi.c deleted file mode 100644 index e69de29bb..000000000 From d6229e46ebbbe2287183fbbbdc38c6200741ccfd Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Tue, 17 Dec 2024 22:38:33 +0800 Subject: [PATCH 2/9] [driver] add basic scsi support --- src/drivers/ufs/CMakeModule.cmake | 1 + src/drivers/ufs/ufs-phy.c | 13 +++++++++++++ src/drivers/ufs/ufs.c | 13 +++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 src/drivers/ufs/ufs-phy.c diff --git a/src/drivers/ufs/CMakeModule.cmake b/src/drivers/ufs/CMakeModule.cmake index b1e150baf..150d08ce1 100644 --- a/src/drivers/ufs/CMakeModule.cmake +++ b/src/drivers/ufs/CMakeModule.cmake @@ -1,6 +1,7 @@ if (CONFIG_CHIP_UFS) set(UFS_DRIVER ufs/ufs.c + ufs/ufs-phy.c ufs/scsi.c ) endif() \ No newline at end of file diff --git a/src/drivers/ufs/ufs-phy.c b/src/drivers/ufs/ufs-phy.c new file mode 100644 index 000000000..daa77e2af --- /dev/null +++ b/src/drivers/ufs/ufs-phy.c @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#include +#include +#include +#include +#include +#include + +#include + +#include + diff --git a/src/drivers/ufs/ufs.c b/src/drivers/ufs/ufs.c index e69de29bb..daa77e2af 100644 --- a/src/drivers/ufs/ufs.c +++ b/src/drivers/ufs/ufs.c @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#include +#include +#include +#include +#include +#include + +#include + +#include + From 1afa3f16610b9e20aea2b792f58579199ab08c9c Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Thu, 19 Dec 2024 08:27:47 +0800 Subject: [PATCH 3/9] [driver] add basic scsi support --- include/drivers/ufs/reg/reg-ufs.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/drivers/ufs/reg/reg-ufs.h b/include/drivers/ufs/reg/reg-ufs.h index 52e8913d9..18a960573 100644 --- a/include/drivers/ufs/reg/reg-ufs.h +++ b/include/drivers/ufs/reg/reg-ufs.h @@ -42,7 +42,6 @@ enum { REG_UFS_PD_PSW_DLY = 0x314, REG_UFS_PD_CTRL = 0x320, REG_UFS_PD_STAT = 0x324, - UFSHCI_CRYPTO_REG_SPACE_SIZE = 0x400, }; /* Controller capability masks */ From a8532181d921a77f3211a6a944cf750c6ac022ce Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Thu, 19 Dec 2024 21:44:36 +0800 Subject: [PATCH 4/9] [driver] add basic scsi support --- src/drivers/ufs/scsi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/drivers/ufs/scsi.c b/src/drivers/ufs/scsi.c index 5eaafbeda..17f1a0a89 100644 --- a/src/drivers/ufs/scsi.c +++ b/src/drivers/ufs/scsi.c @@ -217,11 +217,14 @@ int scsi_scan_dev(ufs_device_t *dev) { blk_desc_t bd; blk_desc_t *bdesc; + uint32_t id = 0; + uint32_t lun = 0 + /* init dev desc */ bd.target = 0xff; bd.lun = 0xff; - if (scsi_detect_dev(dev, 0, 0, &bd)) { + if (scsi_detect_dev(dev, id, lun, &bd)) { printk_warning("UFS: scsi scan device failed\n"); return -1; } From 48257578ddfe3baf3ce5936531ad1f7430760dff Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Fri, 20 Dec 2024 20:19:51 +0800 Subject: [PATCH 5/9] [driver] add basic scsi support --- src/drivers/ufs/scsi.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/drivers/ufs/scsi.c b/src/drivers/ufs/scsi.c index 17f1a0a89..b6314f869 100644 --- a/src/drivers/ufs/scsi.c +++ b/src/drivers/ufs/scsi.c @@ -16,20 +16,20 @@ static uint8_t scsi_buffer[512]; static void scsi_print_error(struct scsi_cmd *pccb) { int i = 0; - printk(LOG_LEVEL_MUTE, "scsi cmd"); + printk(LOG_LEVEL_MUTE, "UFS: scsi cmd"); for (i = 0; i < 8; i++) { printk(LOG_LEVEL_MUTE, "%02X ", pccb->cmd[i]); } printk(LOG_LEVEL_MUTE, "\n"); - printk(LOG_LEVEL_MUTE, "scsi cmd len %d,data len %lu\n", pccb->cmdlen, pccb->datalen); - printk(LOG_LEVEL_MUTE, "scsi first 32 byte data"); + printk(LOG_LEVEL_MUTE, "UFS: scsi cmd len %d,data len %lu\n", pccb->cmdlen, pccb->datalen); + printk(LOG_LEVEL_MUTE, "UFS: scsi first 32 byte data"); for (i = 0; (i < (pccb->datalen)) && (i < 32); i++) { printk(LOG_LEVEL_MUTE, "%02X ", pccb->pdata[i]); } printk(LOG_LEVEL_MUTE, "\n"); - printk(LOG_LEVEL_MUTE, "scsi last 32 byte data"); + printk(LOG_LEVEL_MUTE, "UFS: scsi last 32 byte data"); if (pccb->datalen > 32) { for (i = pccb->datalen - 32; i < pccb->datalen; i++) { printk(LOG_LEVEL_MUTE, "%02X ", pccb->pdata[i]); @@ -218,7 +218,7 @@ int scsi_scan_dev(ufs_device_t *dev) { blk_desc_t *bdesc; uint32_t id = 0; - uint32_t lun = 0 + uint32_t lun = 0; /* init dev desc */ bd.target = 0xff; From e10b4b0e774f53b76f66acb5373d4c3909d50f5d Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Thu, 9 Jan 2025 23:03:51 +0800 Subject: [PATCH 6/9] [driver] pmu use define --- include/drivers/pmu/axp.h | 103 +++++++++++++------------------------- 1 file changed, 34 insertions(+), 69 deletions(-) diff --git a/include/drivers/pmu/axp.h b/include/drivers/pmu/axp.h index 0c49cad43..3eb4bc742 100644 --- a/include/drivers/pmu/axp.h +++ b/include/drivers/pmu/axp.h @@ -69,36 +69,45 @@ int axp_set_vol(sunxi_i2c_t *i2c_dev, char *name, int set_vol, int onoff, axp_co */ int axp_get_vol(sunxi_i2c_t *i2c_dev, char *name, axp_contrl_info *axp_ctrl_tbl, uint8_t axp_ctrl_tbl_size, uint8_t axp_addr); -/* AXP1530 */ +/* define AXP pmu */ /** - * Initialize the AXP1530 PMU. + * @brief Macro to define PMU functions for a specific AXP PMU chip. * - * @param i2c_dev Pointer to the I2C device structure. - * @return 0 if successful, -1 if an error occurred. - */ -int pmu_axp1530_init(sunxi_i2c_t *i2c_dev); - -/** - * Get the voltage value of a specific power domain from the AXP1530 PMU. - * - * @param i2c_dev Pointer to the I2C device structure. - * @param name Name of the power domain. - * @return The voltage value of the power domain, or -1 if an error occurred. - */ -int pmu_axp1530_get_vol(sunxi_i2c_t *i2c_dev, char *name); - -/** - * Set the voltage value of a specific power domain on the AXP1530 PMU. + * This macro generates a set of function prototypes for controlling and + * interacting with a specified AXP Power Management Unit (PMU) chip. + * + * The generated functions are: + * - `pmu__init`: Initializes the PMU for the specified device. + * - `pmu__get_vol`: Retrieves the voltage of a specified power rail. + * - `pmu__set_vol`: Sets the voltage of a specified power rail. + * - `pmu__dump`: Dumps the internal registers and status of the PMU. * - * @param i2c_dev Pointer to the I2C device structure. - * @param name Name of the power domain. - * @param set_vol Voltage value to set. - * @param onoff On/Off switch for the power domain (1 - On, 0 - Off). - * @return 0 if successful, -1 if an error occurred. + * Example usage: + * ```c + * DEFINE_AXP_PMU(axp2202); + * ``` + * This will generate the following function prototypes: + * - `int pmu_axp2202_init(sunxi_i2c_t *i2c_dev);` + * - `int pmu_axp2202_get_vol(sunxi_i2c_t *i2c_dev, char *name);` + * - `int pmu_axp2202_set_vol(sunxi_i2c_t *i2c_dev, char *name, int set_vol, int onoff);` + * - `void pmu_axp2202_dump(sunxi_i2c_t *i2c_dev);` + * + * @param name The name of the PMU chip (e.g., axp2202, axp221, etc.). */ -int pmu_axp1530_set_vol(sunxi_i2c_t *i2c_dev, char *name, int set_vol, int onoff); - +#define DEFINE_AXP_PMU(name) \ + int pmu_##name##_init(sunxi_i2c_t *i2c_dev); \ + int pmu_##name##_get_vol(sunxi_i2c_t *i2c_dev, char *name); \ + int pmu_##name##_set_vol(sunxi_i2c_t *i2c_dev, char *name, int set_vol, int onoff); \ + void pmu_##name##_dump(sunxi_i2c_t *i2c_dev); + +/* AXP PMU defines */ +DEFINE_AXP_PMU(axp1530) +DEFINE_AXP_PMU(axp2202) +DEFINE_AXP_PMU(axp2101) +DEFINE_AXP_PMU(axp8191) + +/* Extra */ /** * Set the dual phase function on the AXP1530 PMU. * @@ -107,50 +116,6 @@ int pmu_axp1530_set_vol(sunxi_i2c_t *i2c_dev, char *name, int set_vol, int onoff */ int pmu_axp1530_set_dual_phase(sunxi_i2c_t *i2c_dev); -/** - * Dump the register values of the AXP1530 PMU. - * - * @param i2c_dev Pointer to the I2C device structure. - */ -void pmu_axp1530_dump(sunxi_i2c_t *i2c_dev); - -/* AXP2202 */ - -/** - * Initialize the AXP2202 PMU. - * - * @param i2c_dev Pointer to the I2C device structure. - * @return 0 if successful, -1 if an error occurred. - */ -int pmu_axp2202_init(sunxi_i2c_t *i2c_dev); - -/** - * Get the voltage value of a specific power domain from the AXP2202 PMU. - * - * @param i2c_dev Pointer to the I2C device structure. - * @param name Name of the power domain. - * @return The voltage value of the power domain, or -1 if an error occurred. - */ -int pmu_axp2202_get_vol(sunxi_i2c_t *i2c_dev, char *name); - -/** - * Set the voltage value of a specific power domain on the AXP2202 PMU. - * - * @param i2c_dev Pointer to the I2C device structure. - * @param name Name of the power domain. - * @param set_vol Voltage value to set. - * @param onoff On/Off switch for the power domain (1 - On, 0 - Off). - * @return 0 if successful, -1 if an error occurred. - */ -int pmu_axp2202_set_vol(sunxi_i2c_t *i2c_dev, char *name, int set_vol, int onoff); - -/** - * Dump the register values of the AXP2202 PMU. - * - * @param i2c_dev Pointer to the I2C device structure. - */ -void pmu_axp2202_dump(sunxi_i2c_t *i2c_dev); - #ifdef __cplusplus } #endif// __cplusplus From 8444301966f03887c3bb7aecf96494c2d4d79dfd Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Thu, 9 Jan 2025 23:07:06 +0800 Subject: [PATCH 7/9] [driver] pmu use define --- include/drivers/pmu/axp.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/drivers/pmu/axp.h b/include/drivers/pmu/axp.h index 3eb4bc742..c96d7a960 100644 --- a/include/drivers/pmu/axp.h +++ b/include/drivers/pmu/axp.h @@ -102,10 +102,10 @@ int axp_get_vol(sunxi_i2c_t *i2c_dev, char *name, axp_contrl_info *axp_ctrl_tbl, void pmu_##name##_dump(sunxi_i2c_t *i2c_dev); /* AXP PMU defines */ -DEFINE_AXP_PMU(axp1530) -DEFINE_AXP_PMU(axp2202) -DEFINE_AXP_PMU(axp2101) -DEFINE_AXP_PMU(axp8191) +DEFINE_AXP_PMU(axp1530); +DEFINE_AXP_PMU(axp2202); +DEFINE_AXP_PMU(axp2101); +DEFINE_AXP_PMU(axp8191); /* Extra */ /** From faaa35fd03586b214ab7232cca3f5831bbbc0a0f Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Fri, 10 Jan 2025 17:42:50 +0800 Subject: [PATCH 8/9] [board] add avaota f1 --- board/CMakeLists.txt | 4 +- .../{avaota-cam => avaota-f1}/CMakeLists.txt | 2 +- board/{avaota-cam => avaota-f1}/README.md | 2 +- .../app}/CMakeLists.txt | 2 +- .../hello_world => avaota-f1/app}/main.c | 7 +- board/{avaota-cam => avaota-f1}/board.c | 22 +- .../{avaota-cam => avaota-f1}/cdk/.gitignore | 4 +- board/avaota-f1/cdk/avaota_cam.mk | 377 ++++++++++++++++++ board/avaota-f1/cdk/avaota_cam.modify.bat | 3 + .../cdk/avaota_f1.cdkproj} | 6 +- .../cdk/avaota_f1.cdkws} | 6 +- board/{avaota-cam => avaota-f1}/cdk/config.h | 0 .../{avaota-cam => avaota-f1}/cdk/link_elf.ld | 0 .../cdk/script/flash.init | 0 .../cdk/script/gdb.init | 0 board/{avaota-cam => avaota-f1}/eabi_compat.c | 0 board/{avaota-cam => avaota-f1}/head.c | 0 .../payloads/src/CMakeLists.txt | 0 .../payloads/src/README.md | 0 .../payloads/src/config.h.in | 0 .../payloads/src/include/byteorder.h | 0 .../payloads/src/include/endian.h | 0 .../payloads/src/include/io.h | 0 .../payloads/src/include/linkage.h | 0 .../payloads/src/include/riscv64.h | 0 .../payloads/src/include/stdarg.h | 0 .../payloads/src/include/stddef.h | 0 .../payloads/src/include/stdint.h | 0 .../payloads/src/include/string.h | 0 .../payloads/src/include/sys/sys-clock.h | 0 .../payloads/src/include/sys/sys-uart.h | 0 .../payloads/src/include/types.h | 0 .../payloads/src/include/uart.h | 0 .../payloads/src/lib/CMakeLists.txt | 0 .../payloads/src/lib/memcpy.S | 0 .../payloads/src/lib/memset.S | 0 .../payloads/src/link.ld | 0 .../payloads/src/src/CMakeLists.txt | 0 .../payloads/src/src/main.c | 0 .../payloads/src/src/start.S | 0 .../payloads/src/src/sys/CMakeLists.txt | 0 .../payloads/src/src/sys/sys-clock.c | 0 .../payloads/src/src/sys/sys-uart.c | 0 .../payloads/src/src/uart.c | 0 board/{avaota-cam => avaota-f1}/start.S | 0 cmake/board/avaota-cam.cmake | 2 +- 46 files changed, 420 insertions(+), 17 deletions(-) rename board/{avaota-cam => avaota-f1}/CMakeLists.txt (86%) rename board/{avaota-cam => avaota-f1}/README.md (97%) rename board/{avaota-cam/hello_world => avaota-f1/app}/CMakeLists.txt (62%) rename board/{avaota-cam/hello_world => avaota-f1/app}/main.c (96%) rename board/{avaota-cam => avaota-f1}/board.c (92%) rename board/{avaota-cam => avaota-f1}/cdk/.gitignore (74%) create mode 100644 board/avaota-f1/cdk/avaota_cam.mk create mode 100644 board/avaota-f1/cdk/avaota_cam.modify.bat rename board/{avaota-cam/cdk/avaota_cam.cdkproj => avaota-f1/cdk/avaota_f1.cdkproj} (99%) rename board/{avaota-cam/cdk/avaota_cam.cdkws => avaota-f1/cdk/avaota_f1.cdkws} (54%) rename board/{avaota-cam => avaota-f1}/cdk/config.h (100%) rename board/{avaota-cam => avaota-f1}/cdk/link_elf.ld (100%) rename board/{avaota-cam => avaota-f1}/cdk/script/flash.init (100%) rename board/{avaota-cam => avaota-f1}/cdk/script/gdb.init (100%) rename board/{avaota-cam => avaota-f1}/eabi_compat.c (100%) rename board/{avaota-cam => avaota-f1}/head.c (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/CMakeLists.txt (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/README.md (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/config.h.in (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/byteorder.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/endian.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/io.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/linkage.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/riscv64.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/stdarg.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/stddef.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/stdint.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/string.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/sys/sys-clock.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/sys/sys-uart.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/types.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/include/uart.h (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/lib/CMakeLists.txt (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/lib/memcpy.S (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/lib/memset.S (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/link.ld (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/src/CMakeLists.txt (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/src/main.c (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/src/start.S (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/src/sys/CMakeLists.txt (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/src/sys/sys-clock.c (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/src/sys/sys-uart.c (100%) rename board/{avaota-cam => avaota-f1}/payloads/src/src/uart.c (100%) rename board/{avaota-cam => avaota-f1}/start.S (100%) diff --git a/board/CMakeLists.txt b/board/CMakeLists.txt index 6b8bf9b78..ffe000d55 100644 --- a/board/CMakeLists.txt +++ b/board/CMakeLists.txt @@ -50,8 +50,8 @@ if(CONFIG_BOARD_AVAOTA-A1) add_subdirectory(avaota-a1) endif() -if(CONFIG_BOARD_AVAOTA-CAM) - add_subdirectory(avaota-cam) +if(CONFIG_BOARD_AVAOTA-F1) + add_subdirectory(avaota-f1) endif() if(CONFIG_BOARD_AVAOTA-NAS) diff --git a/board/avaota-cam/CMakeLists.txt b/board/avaota-f1/CMakeLists.txt similarity index 86% rename from board/avaota-cam/CMakeLists.txt rename to board/avaota-f1/CMakeLists.txt index 489b00ecb..f5eba323b 100644 --- a/board/avaota-cam/CMakeLists.txt +++ b/board/avaota-f1/CMakeLists.txt @@ -5,4 +5,4 @@ set(APP_COMMON_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/head.c ) -add_subdirectory(hello_world) +add_subdirectory(app) diff --git a/board/avaota-cam/README.md b/board/avaota-f1/README.md similarity index 97% rename from board/avaota-cam/README.md rename to board/avaota-f1/README.md index 278df6143..3df901f9b 100644 --- a/board/avaota-cam/README.md +++ b/board/avaota-f1/README.md @@ -19,7 +19,7 @@ | Name | Function | Path | | ----------- | ------------------------------------------------------------ | ----------------- | -| hello world | Minimal program example, prints Hello World | `app/hello_world` | +| hello world | Minimal program example, prints Hello World | `app/app` | | init dram | Initializes the serial port and DRAM | `app/init_dram` | | load hifi4 | Start and initialize the tf card through the C906 CPU, read the hifi4 dsp firmware from it, and load it for execution | `app/load_hifi4` | | syter boot | Bootstrapping function that replaces U-Boot, enabling fast system startup for Linux | `app/syter_boot` | diff --git a/board/avaota-cam/hello_world/CMakeLists.txt b/board/avaota-f1/app/CMakeLists.txt similarity index 62% rename from board/avaota-cam/hello_world/CMakeLists.txt rename to board/avaota-f1/app/CMakeLists.txt index 4b10765c7..61b27b2f9 100644 --- a/board/avaota-cam/hello_world/CMakeLists.txt +++ b/board/avaota-f1/app/CMakeLists.txt @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0+ -add_syterkit_app(helloworld +add_syterkit_app(app main.c ) \ No newline at end of file diff --git a/board/avaota-cam/hello_world/main.c b/board/avaota-f1/app/main.c similarity index 96% rename from board/avaota-cam/hello_world/main.c rename to board/avaota-f1/app/main.c index 25f3084fd..4fb4c56db 100644 --- a/board/avaota-cam/hello_world/main.c +++ b/board/avaota-f1/app/main.c @@ -25,7 +25,8 @@ #include #include -extern sunxi_serial_t uart_dbg; +extern sunxi_serial_t uart_mcu_dbg; +extern sunxi_serial_t uart_cpu_dbg; extern sunxi_serial_t uart_card; extern dram_para_t dram_para; extern sunxi_dma_t sunxi_dma; @@ -123,7 +124,9 @@ const msh_command_entry commands[] = { int main(void) { sunxi_clk_pre_init(); - sunxi_serial_init(&uart_dbg); + sunxi_serial_init(&uart_cpu_dbg); + + sunxi_serial_init(&uart_mcu_dbg); sunxi_serial_init(&uart_card); diff --git a/board/avaota-cam/board.c b/board/avaota-f1/board.c similarity index 92% rename from board/avaota-cam/board.c rename to board/avaota-f1/board.c index 24ad59c63..8d09f448b 100644 --- a/board/avaota-cam/board.c +++ b/board/avaota-f1/board.c @@ -23,7 +23,27 @@ #include #include -sunxi_serial_t uart_dbg = { +sunxi_serial_t uart_mcu_dbg = { + .base = SUNXI_UART0_BASE, + .id = 0, + .baud_rate = UART_BAUDRATE_115200, + .dlen = UART_DLEN_8, + .stop = UART_STOP_BIT_0, + .parity = UART_PARITY_NO, + .gpio_pin = { + .gpio_tx = {GPIO_PIN(GPIO_PORTD, 22), GPIO_PERIPH_MUX3}, + .gpio_rx = {GPIO_PIN(GPIO_PORTD, 23), GPIO_PERIPH_MUX3}, + }, + .uart_clk = { + .gate_reg_base = SUNXI_CCU_APP_BASE + BUS_CLK_GATING0_REG, + .gate_reg_offset = BUS_CLK_GATING0_REG_UART0_PCLK_EN_OFFSET, + .rst_reg_base = SUNXI_CCU_APP_BASE + BUS_Reset0_REG, + .rst_reg_offset = BUS_Reset0_REG_PRESETN_UART0_SW_OFFSET, + .parent_clk = 192000000, + }, +}; + +sunxi_serial_t uart_cpu_dbg = { .base = SUNXI_UART0_BASE, .id = 0, .baud_rate = UART_BAUDRATE_115200, diff --git a/board/avaota-cam/cdk/.gitignore b/board/avaota-f1/cdk/.gitignore similarity index 74% rename from board/avaota-cam/cdk/.gitignore rename to board/avaota-f1/cdk/.gitignore index 4fe05ce52..bbda2eab0 100644 --- a/board/avaota-cam/cdk/.gitignore +++ b/board/avaota-f1/cdk/.gitignore @@ -14,7 +14,7 @@ Lst/ Obj/ cdkws.mk -avaota_cam.modify.bat -avaota_cam.mk +avaota_f1.modify.bat +avaota_f1.mk .cache .cdk diff --git a/board/avaota-f1/cdk/avaota_cam.mk b/board/avaota-f1/cdk/avaota_cam.mk new file mode 100644 index 000000000..0f6cba3c4 --- /dev/null +++ b/board/avaota-f1/cdk/avaota_cam.mk @@ -0,0 +1,377 @@ +## +## Auto Generated makefile by CDK +## Do not modify this file, and any manual changes will be erased!!! +## +## BuildSet +ProjectName :=avaota_cam +ConfigurationName :=BuildSet +WorkspacePath :=./ +ProjectPath :=./ +IntermediateDirectory :=Obj +OutDir :=$(IntermediateDirectory) +User :=zhangyuanjing +Date :=03/12/2024 +CDKPath :=../../../../../C-Sky/CDK +ToolchainPath :=D:/C-Sky/CDKRepo/Toolchain/XTGccElfNewlib/V2.6.1/R/ +LinkerName :=riscv64-unknown-elf-gcc +LinkerNameoption := +SIZE :=riscv64-unknown-elf-size +READELF :=riscv64-unknown-elf-readelf +CHECKSUM :=crc32 +SharedObjectLinkerName := +ObjectSuffix :=.o +DependSuffix :=.d +PreprocessSuffix :=.i +DisassemSuffix :=.asm +IHexSuffix :=.ihex +BinSuffix :=.bin +ExeSuffix :=.elf +LibSuffix :=.a +DebugSwitch :=-g +IncludeSwitch :=-I +LibrarySwitch :=-l +OutputSwitch :=-o +ElfInfoSwitch :=-hlS +LibraryPathSwitch :=-L +PreprocessorSwitch :=-D +UnPreprocessorSwitch :=-U +SourceSwitch :=-c +ObjdumpSwitch :=-S +ObjcopySwitch :=-O ihex +ObjcopyBinSwitch :=-O binary +OutputFile :=$(ProjectName) +ObjectSwitch :=-o +ArchiveOutputSwitch := +PreprocessOnlySwitch :=-E +PreprocessOnlyDisableLineSwitch :=-P +ObjectsFileList :=avaota_cam.txt +MakeDirCommand :=mkdir +LinkOptions := -mcpu=e907f --specs=nosys.specs -nostartfiles -Wl,--gc-sections -T"$(ProjectPath)/link_elf.ld" +LinkOtherFlagsOption := -Wl,-Map=$(ProjectPath)/Lst/$(OutputFile).map +IncludePackagePath := +IncludeCPath := $(IncludeSwitch). $(IncludeSwitch)../../../include/ $(IncludeSwitch)../../../include/arch/riscv/ $(IncludeSwitch)../../../include/cli/ $(IncludeSwitch)../../../include/drivers/chips/sun20iw5/ $(IncludeSwitch)../../../include/drivers/mmc/ $(IncludeSwitch)../../../include/drivers/pmu/reg/ $(IncludeSwitch)../../../include/drivers/pmu/ $(IncludeSwitch)../../../include/drivers/reg/ $(IncludeSwitch)../../../include/drivers/usb/ $(IncludeSwitch)../../../include/image/ $(IncludeSwitch)../../../include/lib/elf/ $(IncludeSwitch)../../../include/lib/fatfs/ $(IncludeSwitch)../../../include/lib/fdt/ $(IncludeSwitch)../../../include/drivers/ $(IncludeSwitch)../../../include/drivers/chips/ $(IncludeSwitch)../../../include/drivers/mtd +IncludeAPath := $(IncludeSwitch). $(IncludeSwitch)../../../include/ $(IncludeSwitch)../../../include/arch/riscv/ $(IncludeSwitch)../../../include/cli/ $(IncludeSwitch)../../../include/drivers/chips/sun20iw5/ $(IncludeSwitch)../../../include/drivers/mmc/ $(IncludeSwitch)../../../include/drivers/pmu/reg/ $(IncludeSwitch)../../../include/drivers/pmu/ $(IncludeSwitch)../../../include/drivers/reg/ $(IncludeSwitch)../../../include/drivers/usb/ $(IncludeSwitch)../../../include/image/ $(IncludeSwitch)../../../include/lib/elf/ $(IncludeSwitch)../../../include/lib/fatfs/ $(IncludeSwitch)../../../include/lib/fdt/ $(IncludeSwitch)../../../include/drivers/ $(IncludeSwitch)../../../include/drivers/chips/ +Libs := +ArLibs := +PackagesLibPath := +LibPath := $(PackagesLibPath) + +## +## Common variables +## AR, CXX, CC, AS, CXXFLAGS and CFLAGS can be overriden using an environment variables +## +AR :=riscv64-unknown-elf-ar rcu +CXX :=riscv64-unknown-elf-g++ +CC :=riscv64-unknown-elf-gcc +AS :=riscv64-unknown-elf-gcc +OBJDUMP :=riscv64-unknown-elf-objdump +OBJCOPY :=riscv64-unknown-elf-objcopy +CXXFLAGS := -mcpu=e907f $(PreprocessorSwitch)CONFIG_CHIP_SUN20IW5 $(PreprocessorSwitch)DEBUG_MODE -O0 -g3 -Wall -ffunction-sections -fdata-sections -nostdlib -nostdinc -march=rv32imafcxthead -mabi=ilp32f -Wno-int-to-pointer-cast -Wno-int-to-pointer-cast -Wno-shift-count-overflow -Wno-builtin-declaration-mismatch -Wno-pointer-to-int-cast -Wno-implicit-function-declaration -Wno-discarded-qualifiers -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-parentheses +CFLAGS := -mcpu=e907f $(PreprocessorSwitch)CONFIG_CHIP_SUN20IW5 $(PreprocessorSwitch)DEBUG_MODE -O0 -g3 -Wall -ffunction-sections -fdata-sections -nostdlib -nostdinc -march=rv32imafcxthead -mabi=ilp32f -Wno-int-to-pointer-cast -Wno-int-to-pointer-cast -Wno-shift-count-overflow -Wno-builtin-declaration-mismatch -Wno-pointer-to-int-cast -Wno-implicit-function-declaration -Wno-discarded-qualifiers -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-parentheses +ASFLAGS := -mcpu=e907f +PreprocessFlags := -mcpu=e907f $(PreprocessorSwitch)CONFIG_CHIP_SUN20IW5 $(PreprocessorSwitch)DEBUG_MODE -O0 -Wall -ffunction-sections -fdata-sections -nostdlib -nostdinc -march=rv32imafcxthead -mabi=ilp32f -Wno-int-to-pointer-cast -Wno-int-to-pointer-cast -Wno-shift-count-overflow -Wno-builtin-declaration-mismatch -Wno-pointer-to-int-cast -Wno-implicit-function-declaration -Wno-discarded-qualifiers -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-parentheses + + +Objects0=$(IntermediateDirectory)/avaota-cam_board$(ObjectSuffix) $(IntermediateDirectory)/avaota-cam_eabi_compat$(ObjectSuffix) $(IntermediateDirectory)/avaota-cam_head$(ObjectSuffix) $(IntermediateDirectory)/avaota-cam_start$(ObjectSuffix) $(IntermediateDirectory)/src_common$(ObjectSuffix) $(IntermediateDirectory)/src_ctype$(ObjectSuffix) $(IntermediateDirectory)/src_fdt_wrapper$(ObjectSuffix) $(IntermediateDirectory)/src_os$(ObjectSuffix) $(IntermediateDirectory)/src_smalloc$(ObjectSuffix) $(IntermediateDirectory)/src_sstdlib$(ObjectSuffix) \ + $(IntermediateDirectory)/src_string$(ObjectSuffix) $(IntermediateDirectory)/src_uart$(ObjectSuffix) $(IntermediateDirectory)/app_main$(ObjectSuffix) $(IntermediateDirectory)/cli_commands$(ObjectSuffix) $(IntermediateDirectory)/cli_history$(ObjectSuffix) $(IntermediateDirectory)/cli_lineedit$(ObjectSuffix) $(IntermediateDirectory)/cli_parse$(ObjectSuffix) $(IntermediateDirectory)/cli_shell$(ObjectSuffix) $(IntermediateDirectory)/drivers_sys-clk$(ObjectSuffix) $(IntermediateDirectory)/drivers_sys-gpio$(ObjectSuffix) \ + $(IntermediateDirectory)/drivers_sys-uart$(ObjectSuffix) $(IntermediateDirectory)/drivers_sys-dma$(ObjectSuffix) $(IntermediateDirectory)/drivers_sys-dram$(ObjectSuffix) $(IntermediateDirectory)/drivers_sys-i2c$(ObjectSuffix) $(IntermediateDirectory)/drivers_sys-rtc$(ObjectSuffix) $(IntermediateDirectory)/drivers_sys-spi$(ObjectSuffix) $(IntermediateDirectory)/log_log$(ObjectSuffix) $(IntermediateDirectory)/log_xformat$(ObjectSuffix) $(IntermediateDirectory)/image_bimage$(ObjectSuffix) $(IntermediateDirectory)/image_uimage$(ObjectSuffix) \ + $(IntermediateDirectory)/image_zimage$(ObjectSuffix) + +Objects1=$(IntermediateDirectory)/riscv32_e907_exception$(ObjectSuffix) $(IntermediateDirectory)/riscv32_e907_fprw$(ObjectSuffix) $(IntermediateDirectory)/riscv32_e907_memcmp$(ObjectSuffix) $(IntermediateDirectory)/riscv32_e907_memcpy$(ObjectSuffix) $(IntermediateDirectory)/riscv32_e907_memset$(ObjectSuffix) $(IntermediateDirectory)/riscv32_e907_timer$(ObjectSuffix) $(IntermediateDirectory)/riscv32_e907_backtrace$(ObjectSuffix) $(IntermediateDirectory)/sun20iw5_sys-clk$(ObjectSuffix) $(IntermediateDirectory)/sun20iw5_sys-dram$(ObjectSuffix) \ + $(IntermediateDirectory)/sun20iw5_sys-rproc$(ObjectSuffix) $(IntermediateDirectory)/sun20iw5_sys-sid$(ObjectSuffix) $(IntermediateDirectory)/sun20iw5_sys-wdt$(ObjectSuffix) $(IntermediateDirectory)/sun20iw5_sys-sdhci$(ObjectSuffix) $(IntermediateDirectory)/mmc_sys-mmc$(ObjectSuffix) $(IntermediateDirectory)/mmc_sys-sdcard$(ObjectSuffix) $(IntermediateDirectory)/mmc_sys-sdhci$(ObjectSuffix) $(IntermediateDirectory)/pmu_axp$(ObjectSuffix) $(IntermediateDirectory)/pmu_axp1530$(ObjectSuffix) $(IntermediateDirectory)/pmu_axp2101$(ObjectSuffix) \ + $(IntermediateDirectory)/pmu_axp2202$(ObjectSuffix) $(IntermediateDirectory)/mtd_sys-spi-nand$(ObjectSuffix) $(IntermediateDirectory)/mtd_sys-spi-nor$(ObjectSuffix) + + + +Objects=$(Objects0) $(Objects1) + +## +## Main Build Targets +## +.PHONY: all +all: $(IntermediateDirectory)/$(OutputFile) + +$(IntermediateDirectory)/$(OutputFile): $(Objects) Always_Link + $(LinkerName) $(OutputSwitch) $(IntermediateDirectory)/$(OutputFile)$(ExeSuffix) $(LinkerNameoption) -Wl,-Map=$(ProjectPath)/Lst/$(OutputFile).map @$(ObjectsFileList) $(LinkOptions) $(LibPath) $(Libs) $(LinkOtherFlagsOption) + -@mv $(ProjectPath)/Lst/$(OutputFile).map $(ProjectPath)/Lst/$(OutputFile).temp && $(READELF) $(ElfInfoSwitch) $(ProjectPath)/Obj/$(OutputFile)$(ExeSuffix) > $(ProjectPath)/Lst/$(OutputFile).map && echo ====================================================================== >> $(ProjectPath)/Lst/$(OutputFile).map && cat $(ProjectPath)/Lst/$(OutputFile).temp >> $(ProjectPath)/Lst/$(OutputFile).map && rm -rf $(ProjectPath)/Lst/$(OutputFile).temp + $(OBJCOPY) $(ObjcopySwitch) $(ProjectPath)/$(IntermediateDirectory)/$(OutputFile)$(ExeSuffix) $(ProjectPath)/Obj/$(OutputFile)$(IHexSuffix) + $(OBJDUMP) $(ObjdumpSwitch) $(ProjectPath)/$(IntermediateDirectory)/$(OutputFile)$(ExeSuffix) > $(ProjectPath)/Lst/$(OutputFile)$(DisassemSuffix) + @echo size of target: + @$(SIZE) $(ProjectPath)$(IntermediateDirectory)/$(OutputFile)$(ExeSuffix) + @echo -n checksum value of target: + @$(CHECKSUM) $(ProjectPath)/$(IntermediateDirectory)/$(OutputFile)$(ExeSuffix) + @avaota_cam.modify.bat $(IntermediateDirectory) $(OutputFile)$(ExeSuffix) + +Always_Link: + + +## +## Objects +## +$(IntermediateDirectory)/avaota-cam_board$(ObjectSuffix): ../board.c Lst/avaota-cam_board$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../board.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/avaota-cam_board$(ObjectSuffix) -MF$(IntermediateDirectory)/avaota-cam_board$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/avaota-cam_board$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/avaota-cam_board$(PreprocessSuffix): ../board.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/avaota-cam_board$(PreprocessSuffix) ../board.c + +$(IntermediateDirectory)/avaota-cam_eabi_compat$(ObjectSuffix): ../eabi_compat.c Lst/avaota-cam_eabi_compat$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../eabi_compat.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/avaota-cam_eabi_compat$(ObjectSuffix) -MF$(IntermediateDirectory)/avaota-cam_eabi_compat$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/avaota-cam_eabi_compat$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/avaota-cam_eabi_compat$(PreprocessSuffix): ../eabi_compat.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/avaota-cam_eabi_compat$(PreprocessSuffix) ../eabi_compat.c + +$(IntermediateDirectory)/avaota-cam_head$(ObjectSuffix): ../head.c Lst/avaota-cam_head$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../head.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/avaota-cam_head$(ObjectSuffix) -MF$(IntermediateDirectory)/avaota-cam_head$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/avaota-cam_head$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/avaota-cam_head$(PreprocessSuffix): ../head.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/avaota-cam_head$(PreprocessSuffix) ../head.c + +$(IntermediateDirectory)/avaota-cam_start$(ObjectSuffix): ../start.S Lst/avaota-cam_start$(PreprocessSuffix) + $(AS) $(SourceSwitch) ../start.S $(ASFLAGS) -MMD -MP -MT$(IntermediateDirectory)/avaota-cam_start$(ObjectSuffix) -MF$(IntermediateDirectory)/avaota-cam_start$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/avaota-cam_start$(ObjectSuffix) $(IncludeAPath) $(IncludePackagePath) +Lst/avaota-cam_start$(PreprocessSuffix): ../start.S + $(CC) $(CFLAGS)$(IncludeAPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/avaota-cam_start$(PreprocessSuffix) ../start.S + +$(IntermediateDirectory)/src_common$(ObjectSuffix): ../../../src/common.c Lst/src_common$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/common.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_common$(ObjectSuffix) -MF$(IntermediateDirectory)/src_common$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_common$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_common$(PreprocessSuffix): ../../../src/common.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_common$(PreprocessSuffix) ../../../src/common.c + +$(IntermediateDirectory)/src_ctype$(ObjectSuffix): ../../../src/ctype.c Lst/src_ctype$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/ctype.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_ctype$(ObjectSuffix) -MF$(IntermediateDirectory)/src_ctype$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_ctype$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_ctype$(PreprocessSuffix): ../../../src/ctype.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_ctype$(PreprocessSuffix) ../../../src/ctype.c + +$(IntermediateDirectory)/src_fdt_wrapper$(ObjectSuffix): ../../../src/fdt_wrapper.c Lst/src_fdt_wrapper$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/fdt_wrapper.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_fdt_wrapper$(ObjectSuffix) -MF$(IntermediateDirectory)/src_fdt_wrapper$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_fdt_wrapper$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_fdt_wrapper$(PreprocessSuffix): ../../../src/fdt_wrapper.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_fdt_wrapper$(PreprocessSuffix) ../../../src/fdt_wrapper.c + +$(IntermediateDirectory)/src_os$(ObjectSuffix): ../../../src/os.c Lst/src_os$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/os.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_os$(ObjectSuffix) -MF$(IntermediateDirectory)/src_os$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_os$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_os$(PreprocessSuffix): ../../../src/os.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_os$(PreprocessSuffix) ../../../src/os.c + +$(IntermediateDirectory)/src_smalloc$(ObjectSuffix): ../../../src/smalloc.c Lst/src_smalloc$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/smalloc.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_smalloc$(ObjectSuffix) -MF$(IntermediateDirectory)/src_smalloc$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_smalloc$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_smalloc$(PreprocessSuffix): ../../../src/smalloc.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_smalloc$(PreprocessSuffix) ../../../src/smalloc.c + +$(IntermediateDirectory)/src_sstdlib$(ObjectSuffix): ../../../src/sstdlib.c Lst/src_sstdlib$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/sstdlib.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_sstdlib$(ObjectSuffix) -MF$(IntermediateDirectory)/src_sstdlib$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_sstdlib$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_sstdlib$(PreprocessSuffix): ../../../src/sstdlib.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_sstdlib$(PreprocessSuffix) ../../../src/sstdlib.c + +$(IntermediateDirectory)/src_string$(ObjectSuffix): ../../../src/string.c Lst/src_string$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/string.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_string$(ObjectSuffix) -MF$(IntermediateDirectory)/src_string$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_string$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_string$(PreprocessSuffix): ../../../src/string.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_string$(PreprocessSuffix) ../../../src/string.c + +$(IntermediateDirectory)/src_uart$(ObjectSuffix): ../../../src/uart.c Lst/src_uart$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/uart.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/src_uart$(ObjectSuffix) -MF$(IntermediateDirectory)/src_uart$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/src_uart$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/src_uart$(PreprocessSuffix): ../../../src/uart.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/src_uart$(PreprocessSuffix) ../../../src/uart.c + +$(IntermediateDirectory)/app_main$(ObjectSuffix): ../app/main.c Lst/app_main$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../app/main.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/app_main$(ObjectSuffix) -MF$(IntermediateDirectory)/app_main$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/app_main$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/app_main$(PreprocessSuffix): ../app/main.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/app_main$(PreprocessSuffix) ../app/main.c + +$(IntermediateDirectory)/cli_commands$(ObjectSuffix): ../../../src/cli/commands.c Lst/cli_commands$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/cli/commands.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/cli_commands$(ObjectSuffix) -MF$(IntermediateDirectory)/cli_commands$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/cli_commands$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/cli_commands$(PreprocessSuffix): ../../../src/cli/commands.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/cli_commands$(PreprocessSuffix) ../../../src/cli/commands.c + +$(IntermediateDirectory)/cli_history$(ObjectSuffix): ../../../src/cli/history.c Lst/cli_history$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/cli/history.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/cli_history$(ObjectSuffix) -MF$(IntermediateDirectory)/cli_history$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/cli_history$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/cli_history$(PreprocessSuffix): ../../../src/cli/history.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/cli_history$(PreprocessSuffix) ../../../src/cli/history.c + +$(IntermediateDirectory)/cli_lineedit$(ObjectSuffix): ../../../src/cli/lineedit.c Lst/cli_lineedit$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/cli/lineedit.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/cli_lineedit$(ObjectSuffix) -MF$(IntermediateDirectory)/cli_lineedit$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/cli_lineedit$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/cli_lineedit$(PreprocessSuffix): ../../../src/cli/lineedit.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/cli_lineedit$(PreprocessSuffix) ../../../src/cli/lineedit.c + +$(IntermediateDirectory)/cli_parse$(ObjectSuffix): ../../../src/cli/parse.c Lst/cli_parse$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/cli/parse.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/cli_parse$(ObjectSuffix) -MF$(IntermediateDirectory)/cli_parse$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/cli_parse$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/cli_parse$(PreprocessSuffix): ../../../src/cli/parse.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/cli_parse$(PreprocessSuffix) ../../../src/cli/parse.c + +$(IntermediateDirectory)/cli_shell$(ObjectSuffix): ../../../src/cli/shell.c Lst/cli_shell$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/cli/shell.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/cli_shell$(ObjectSuffix) -MF$(IntermediateDirectory)/cli_shell$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/cli_shell$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/cli_shell$(PreprocessSuffix): ../../../src/cli/shell.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/cli_shell$(PreprocessSuffix) ../../../src/cli/shell.c + +$(IntermediateDirectory)/drivers_sys-clk$(ObjectSuffix): ../../../src/drivers/sys-clk.c Lst/drivers_sys-clk$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-clk.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-clk$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-clk$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-clk$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-clk$(PreprocessSuffix): ../../../src/drivers/sys-clk.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-clk$(PreprocessSuffix) ../../../src/drivers/sys-clk.c + +$(IntermediateDirectory)/drivers_sys-gpio$(ObjectSuffix): ../../../src/drivers/sys-gpio.c Lst/drivers_sys-gpio$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-gpio.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-gpio$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-gpio$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-gpio$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-gpio$(PreprocessSuffix): ../../../src/drivers/sys-gpio.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-gpio$(PreprocessSuffix) ../../../src/drivers/sys-gpio.c + +$(IntermediateDirectory)/drivers_sys-uart$(ObjectSuffix): ../../../src/drivers/sys-uart.c Lst/drivers_sys-uart$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-uart.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-uart$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-uart$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-uart$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-uart$(PreprocessSuffix): ../../../src/drivers/sys-uart.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-uart$(PreprocessSuffix) ../../../src/drivers/sys-uart.c + +$(IntermediateDirectory)/drivers_sys-dma$(ObjectSuffix): ../../../src/drivers/sys-dma.c Lst/drivers_sys-dma$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-dma.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-dma$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-dma$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-dma$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-dma$(PreprocessSuffix): ../../../src/drivers/sys-dma.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-dma$(PreprocessSuffix) ../../../src/drivers/sys-dma.c + +$(IntermediateDirectory)/drivers_sys-dram$(ObjectSuffix): ../../../src/drivers/sys-dram.c Lst/drivers_sys-dram$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-dram.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-dram$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-dram$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-dram$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-dram$(PreprocessSuffix): ../../../src/drivers/sys-dram.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-dram$(PreprocessSuffix) ../../../src/drivers/sys-dram.c + +$(IntermediateDirectory)/drivers_sys-i2c$(ObjectSuffix): ../../../src/drivers/sys-i2c.c Lst/drivers_sys-i2c$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-i2c.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-i2c$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-i2c$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-i2c$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-i2c$(PreprocessSuffix): ../../../src/drivers/sys-i2c.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-i2c$(PreprocessSuffix) ../../../src/drivers/sys-i2c.c + +$(IntermediateDirectory)/drivers_sys-rtc$(ObjectSuffix): ../../../src/drivers/sys-rtc.c Lst/drivers_sys-rtc$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-rtc.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-rtc$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-rtc$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-rtc$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-rtc$(PreprocessSuffix): ../../../src/drivers/sys-rtc.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-rtc$(PreprocessSuffix) ../../../src/drivers/sys-rtc.c + +$(IntermediateDirectory)/drivers_sys-spi$(ObjectSuffix): ../../../src/drivers/sys-spi.c Lst/drivers_sys-spi$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/sys-spi.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/drivers_sys-spi$(ObjectSuffix) -MF$(IntermediateDirectory)/drivers_sys-spi$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/drivers_sys-spi$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/drivers_sys-spi$(PreprocessSuffix): ../../../src/drivers/sys-spi.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/drivers_sys-spi$(PreprocessSuffix) ../../../src/drivers/sys-spi.c + +$(IntermediateDirectory)/log_log$(ObjectSuffix): ../../../src/log/log.c Lst/log_log$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/log/log.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/log_log$(ObjectSuffix) -MF$(IntermediateDirectory)/log_log$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/log_log$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/log_log$(PreprocessSuffix): ../../../src/log/log.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/log_log$(PreprocessSuffix) ../../../src/log/log.c + +$(IntermediateDirectory)/log_xformat$(ObjectSuffix): ../../../src/log/xformat.c Lst/log_xformat$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/log/xformat.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/log_xformat$(ObjectSuffix) -MF$(IntermediateDirectory)/log_xformat$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/log_xformat$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/log_xformat$(PreprocessSuffix): ../../../src/log/xformat.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/log_xformat$(PreprocessSuffix) ../../../src/log/xformat.c + +$(IntermediateDirectory)/image_bimage$(ObjectSuffix): ../../../src/image/bimage.c Lst/image_bimage$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/image/bimage.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/image_bimage$(ObjectSuffix) -MF$(IntermediateDirectory)/image_bimage$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/image_bimage$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/image_bimage$(PreprocessSuffix): ../../../src/image/bimage.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/image_bimage$(PreprocessSuffix) ../../../src/image/bimage.c + +$(IntermediateDirectory)/image_uimage$(ObjectSuffix): ../../../src/image/uimage.c Lst/image_uimage$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/image/uimage.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/image_uimage$(ObjectSuffix) -MF$(IntermediateDirectory)/image_uimage$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/image_uimage$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/image_uimage$(PreprocessSuffix): ../../../src/image/uimage.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/image_uimage$(PreprocessSuffix) ../../../src/image/uimage.c + +$(IntermediateDirectory)/image_zimage$(ObjectSuffix): ../../../src/image/zimage.c Lst/image_zimage$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/image/zimage.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/image_zimage$(ObjectSuffix) -MF$(IntermediateDirectory)/image_zimage$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/image_zimage$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/image_zimage$(PreprocessSuffix): ../../../src/image/zimage.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/image_zimage$(PreprocessSuffix) ../../../src/image/zimage.c + +$(IntermediateDirectory)/riscv32_e907_exception$(ObjectSuffix): ../../../src/arch/riscv/riscv32_e907/exception.c Lst/riscv32_e907_exception$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/arch/riscv/riscv32_e907/exception.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/riscv32_e907_exception$(ObjectSuffix) -MF$(IntermediateDirectory)/riscv32_e907_exception$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/riscv32_e907_exception$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/riscv32_e907_exception$(PreprocessSuffix): ../../../src/arch/riscv/riscv32_e907/exception.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/riscv32_e907_exception$(PreprocessSuffix) ../../../src/arch/riscv/riscv32_e907/exception.c + +$(IntermediateDirectory)/riscv32_e907_fprw$(ObjectSuffix): ../../../src/arch/riscv/riscv32_e907/fprw.S Lst/riscv32_e907_fprw$(PreprocessSuffix) + $(AS) $(SourceSwitch) ../../../src/arch/riscv/riscv32_e907/fprw.S $(ASFLAGS) -MMD -MP -MT$(IntermediateDirectory)/riscv32_e907_fprw$(ObjectSuffix) -MF$(IntermediateDirectory)/riscv32_e907_fprw$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/riscv32_e907_fprw$(ObjectSuffix) $(IncludeAPath) $(IncludePackagePath) +Lst/riscv32_e907_fprw$(PreprocessSuffix): ../../../src/arch/riscv/riscv32_e907/fprw.S + $(CC) $(CFLAGS)$(IncludeAPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/riscv32_e907_fprw$(PreprocessSuffix) ../../../src/arch/riscv/riscv32_e907/fprw.S + +$(IntermediateDirectory)/riscv32_e907_memcmp$(ObjectSuffix): ../../../src/arch/riscv/riscv32_e907/memcmp.c Lst/riscv32_e907_memcmp$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/arch/riscv/riscv32_e907/memcmp.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/riscv32_e907_memcmp$(ObjectSuffix) -MF$(IntermediateDirectory)/riscv32_e907_memcmp$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/riscv32_e907_memcmp$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/riscv32_e907_memcmp$(PreprocessSuffix): ../../../src/arch/riscv/riscv32_e907/memcmp.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/riscv32_e907_memcmp$(PreprocessSuffix) ../../../src/arch/riscv/riscv32_e907/memcmp.c + +$(IntermediateDirectory)/riscv32_e907_memcpy$(ObjectSuffix): ../../../src/arch/riscv/riscv32_e907/memcpy.S Lst/riscv32_e907_memcpy$(PreprocessSuffix) + $(AS) $(SourceSwitch) ../../../src/arch/riscv/riscv32_e907/memcpy.S $(ASFLAGS) -MMD -MP -MT$(IntermediateDirectory)/riscv32_e907_memcpy$(ObjectSuffix) -MF$(IntermediateDirectory)/riscv32_e907_memcpy$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/riscv32_e907_memcpy$(ObjectSuffix) $(IncludeAPath) $(IncludePackagePath) +Lst/riscv32_e907_memcpy$(PreprocessSuffix): ../../../src/arch/riscv/riscv32_e907/memcpy.S + $(CC) $(CFLAGS)$(IncludeAPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/riscv32_e907_memcpy$(PreprocessSuffix) ../../../src/arch/riscv/riscv32_e907/memcpy.S + +$(IntermediateDirectory)/riscv32_e907_memset$(ObjectSuffix): ../../../src/arch/riscv/riscv32_e907/memset.S Lst/riscv32_e907_memset$(PreprocessSuffix) + $(AS) $(SourceSwitch) ../../../src/arch/riscv/riscv32_e907/memset.S $(ASFLAGS) -MMD -MP -MT$(IntermediateDirectory)/riscv32_e907_memset$(ObjectSuffix) -MF$(IntermediateDirectory)/riscv32_e907_memset$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/riscv32_e907_memset$(ObjectSuffix) $(IncludeAPath) $(IncludePackagePath) +Lst/riscv32_e907_memset$(PreprocessSuffix): ../../../src/arch/riscv/riscv32_e907/memset.S + $(CC) $(CFLAGS)$(IncludeAPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/riscv32_e907_memset$(PreprocessSuffix) ../../../src/arch/riscv/riscv32_e907/memset.S + +$(IntermediateDirectory)/riscv32_e907_timer$(ObjectSuffix): ../../../src/arch/riscv/riscv32_e907/timer.c Lst/riscv32_e907_timer$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/arch/riscv/riscv32_e907/timer.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/riscv32_e907_timer$(ObjectSuffix) -MF$(IntermediateDirectory)/riscv32_e907_timer$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/riscv32_e907_timer$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/riscv32_e907_timer$(PreprocessSuffix): ../../../src/arch/riscv/riscv32_e907/timer.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/riscv32_e907_timer$(PreprocessSuffix) ../../../src/arch/riscv/riscv32_e907/timer.c + +$(IntermediateDirectory)/riscv32_e907_backtrace$(ObjectSuffix): ../../../src/arch/riscv/riscv32_e907/backtrace.c Lst/riscv32_e907_backtrace$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/arch/riscv/riscv32_e907/backtrace.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/riscv32_e907_backtrace$(ObjectSuffix) -MF$(IntermediateDirectory)/riscv32_e907_backtrace$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/riscv32_e907_backtrace$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/riscv32_e907_backtrace$(PreprocessSuffix): ../../../src/arch/riscv/riscv32_e907/backtrace.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/riscv32_e907_backtrace$(PreprocessSuffix) ../../../src/arch/riscv/riscv32_e907/backtrace.c + +$(IntermediateDirectory)/sun20iw5_sys-clk$(ObjectSuffix): ../../../src/drivers/chips/sun20iw5/sys-clk.c Lst/sun20iw5_sys-clk$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/chips/sun20iw5/sys-clk.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/sun20iw5_sys-clk$(ObjectSuffix) -MF$(IntermediateDirectory)/sun20iw5_sys-clk$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/sun20iw5_sys-clk$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/sun20iw5_sys-clk$(PreprocessSuffix): ../../../src/drivers/chips/sun20iw5/sys-clk.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/sun20iw5_sys-clk$(PreprocessSuffix) ../../../src/drivers/chips/sun20iw5/sys-clk.c + +$(IntermediateDirectory)/sun20iw5_sys-dram$(ObjectSuffix): ../../../src/drivers/chips/sun20iw5/sys-dram.c Lst/sun20iw5_sys-dram$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/chips/sun20iw5/sys-dram.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/sun20iw5_sys-dram$(ObjectSuffix) -MF$(IntermediateDirectory)/sun20iw5_sys-dram$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/sun20iw5_sys-dram$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/sun20iw5_sys-dram$(PreprocessSuffix): ../../../src/drivers/chips/sun20iw5/sys-dram.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/sun20iw5_sys-dram$(PreprocessSuffix) ../../../src/drivers/chips/sun20iw5/sys-dram.c + +$(IntermediateDirectory)/sun20iw5_sys-rproc$(ObjectSuffix): ../../../src/drivers/chips/sun20iw5/sys-rproc.c Lst/sun20iw5_sys-rproc$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/chips/sun20iw5/sys-rproc.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/sun20iw5_sys-rproc$(ObjectSuffix) -MF$(IntermediateDirectory)/sun20iw5_sys-rproc$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/sun20iw5_sys-rproc$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/sun20iw5_sys-rproc$(PreprocessSuffix): ../../../src/drivers/chips/sun20iw5/sys-rproc.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/sun20iw5_sys-rproc$(PreprocessSuffix) ../../../src/drivers/chips/sun20iw5/sys-rproc.c + +$(IntermediateDirectory)/sun20iw5_sys-sid$(ObjectSuffix): ../../../src/drivers/chips/sun20iw5/sys-sid.c Lst/sun20iw5_sys-sid$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/chips/sun20iw5/sys-sid.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/sun20iw5_sys-sid$(ObjectSuffix) -MF$(IntermediateDirectory)/sun20iw5_sys-sid$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/sun20iw5_sys-sid$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/sun20iw5_sys-sid$(PreprocessSuffix): ../../../src/drivers/chips/sun20iw5/sys-sid.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/sun20iw5_sys-sid$(PreprocessSuffix) ../../../src/drivers/chips/sun20iw5/sys-sid.c + +$(IntermediateDirectory)/sun20iw5_sys-wdt$(ObjectSuffix): ../../../src/drivers/chips/sun20iw5/sys-wdt.c Lst/sun20iw5_sys-wdt$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/chips/sun20iw5/sys-wdt.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/sun20iw5_sys-wdt$(ObjectSuffix) -MF$(IntermediateDirectory)/sun20iw5_sys-wdt$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/sun20iw5_sys-wdt$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/sun20iw5_sys-wdt$(PreprocessSuffix): ../../../src/drivers/chips/sun20iw5/sys-wdt.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/sun20iw5_sys-wdt$(PreprocessSuffix) ../../../src/drivers/chips/sun20iw5/sys-wdt.c + +$(IntermediateDirectory)/sun20iw5_sys-sdhci$(ObjectSuffix): ../../../src/drivers/chips/sun20iw5/sys-sdhci.c Lst/sun20iw5_sys-sdhci$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/chips/sun20iw5/sys-sdhci.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/sun20iw5_sys-sdhci$(ObjectSuffix) -MF$(IntermediateDirectory)/sun20iw5_sys-sdhci$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/sun20iw5_sys-sdhci$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/sun20iw5_sys-sdhci$(PreprocessSuffix): ../../../src/drivers/chips/sun20iw5/sys-sdhci.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/sun20iw5_sys-sdhci$(PreprocessSuffix) ../../../src/drivers/chips/sun20iw5/sys-sdhci.c + +$(IntermediateDirectory)/mmc_sys-mmc$(ObjectSuffix): ../../../src/drivers/mmc/sys-mmc.c Lst/mmc_sys-mmc$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/mmc/sys-mmc.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/mmc_sys-mmc$(ObjectSuffix) -MF$(IntermediateDirectory)/mmc_sys-mmc$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/mmc_sys-mmc$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/mmc_sys-mmc$(PreprocessSuffix): ../../../src/drivers/mmc/sys-mmc.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/mmc_sys-mmc$(PreprocessSuffix) ../../../src/drivers/mmc/sys-mmc.c + +$(IntermediateDirectory)/mmc_sys-sdcard$(ObjectSuffix): ../../../src/drivers/mmc/sys-sdcard.c Lst/mmc_sys-sdcard$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/mmc/sys-sdcard.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/mmc_sys-sdcard$(ObjectSuffix) -MF$(IntermediateDirectory)/mmc_sys-sdcard$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/mmc_sys-sdcard$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/mmc_sys-sdcard$(PreprocessSuffix): ../../../src/drivers/mmc/sys-sdcard.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/mmc_sys-sdcard$(PreprocessSuffix) ../../../src/drivers/mmc/sys-sdcard.c + +$(IntermediateDirectory)/mmc_sys-sdhci$(ObjectSuffix): ../../../src/drivers/mmc/sys-sdhci.c Lst/mmc_sys-sdhci$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/mmc/sys-sdhci.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/mmc_sys-sdhci$(ObjectSuffix) -MF$(IntermediateDirectory)/mmc_sys-sdhci$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/mmc_sys-sdhci$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/mmc_sys-sdhci$(PreprocessSuffix): ../../../src/drivers/mmc/sys-sdhci.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/mmc_sys-sdhci$(PreprocessSuffix) ../../../src/drivers/mmc/sys-sdhci.c + +$(IntermediateDirectory)/pmu_axp$(ObjectSuffix): ../../../src/drivers/pmu/axp.c Lst/pmu_axp$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/pmu/axp.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/pmu_axp$(ObjectSuffix) -MF$(IntermediateDirectory)/pmu_axp$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/pmu_axp$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/pmu_axp$(PreprocessSuffix): ../../../src/drivers/pmu/axp.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/pmu_axp$(PreprocessSuffix) ../../../src/drivers/pmu/axp.c + +$(IntermediateDirectory)/pmu_axp1530$(ObjectSuffix): ../../../src/drivers/pmu/axp1530.c Lst/pmu_axp1530$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/pmu/axp1530.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/pmu_axp1530$(ObjectSuffix) -MF$(IntermediateDirectory)/pmu_axp1530$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/pmu_axp1530$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/pmu_axp1530$(PreprocessSuffix): ../../../src/drivers/pmu/axp1530.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/pmu_axp1530$(PreprocessSuffix) ../../../src/drivers/pmu/axp1530.c + +$(IntermediateDirectory)/pmu_axp2101$(ObjectSuffix): ../../../src/drivers/pmu/axp2101.c Lst/pmu_axp2101$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/pmu/axp2101.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/pmu_axp2101$(ObjectSuffix) -MF$(IntermediateDirectory)/pmu_axp2101$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/pmu_axp2101$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/pmu_axp2101$(PreprocessSuffix): ../../../src/drivers/pmu/axp2101.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/pmu_axp2101$(PreprocessSuffix) ../../../src/drivers/pmu/axp2101.c + +$(IntermediateDirectory)/pmu_axp2202$(ObjectSuffix): ../../../src/drivers/pmu/axp2202.c Lst/pmu_axp2202$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/pmu/axp2202.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/pmu_axp2202$(ObjectSuffix) -MF$(IntermediateDirectory)/pmu_axp2202$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/pmu_axp2202$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/pmu_axp2202$(PreprocessSuffix): ../../../src/drivers/pmu/axp2202.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/pmu_axp2202$(PreprocessSuffix) ../../../src/drivers/pmu/axp2202.c + +$(IntermediateDirectory)/mtd_sys-spi-nand$(ObjectSuffix): ../../../src/drivers/mtd/sys-spi-nand.c Lst/mtd_sys-spi-nand$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/mtd/sys-spi-nand.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/mtd_sys-spi-nand$(ObjectSuffix) -MF$(IntermediateDirectory)/mtd_sys-spi-nand$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/mtd_sys-spi-nand$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/mtd_sys-spi-nand$(PreprocessSuffix): ../../../src/drivers/mtd/sys-spi-nand.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/mtd_sys-spi-nand$(PreprocessSuffix) ../../../src/drivers/mtd/sys-spi-nand.c + +$(IntermediateDirectory)/mtd_sys-spi-nor$(ObjectSuffix): ../../../src/drivers/mtd/sys-spi-nor.c Lst/mtd_sys-spi-nor$(PreprocessSuffix) + $(CC) $(SourceSwitch) ../../../src/drivers/mtd/sys-spi-nor.c $(CFLAGS) -MMD -MP -MT$(IntermediateDirectory)/mtd_sys-spi-nor$(ObjectSuffix) -MF$(IntermediateDirectory)/mtd_sys-spi-nor$(DependSuffix) $(ObjectSwitch)$(IntermediateDirectory)/mtd_sys-spi-nor$(ObjectSuffix) $(IncludeCPath) $(IncludePackagePath) +Lst/mtd_sys-spi-nor$(PreprocessSuffix): ../../../src/drivers/mtd/sys-spi-nor.c + $(CC) $(CFLAGS)$(IncludeCPath) $(PreprocessOnlySwitch) $(OutputSwitch) Lst/mtd_sys-spi-nor$(PreprocessSuffix) ../../../src/drivers/mtd/sys-spi-nor.c + + +-include $(IntermediateDirectory)/*$(DependSuffix) diff --git a/board/avaota-f1/cdk/avaota_cam.modify.bat b/board/avaota-f1/cdk/avaota_cam.modify.bat new file mode 100644 index 000000000..0b71e3022 --- /dev/null +++ b/board/avaota-f1/cdk/avaota_cam.modify.bat @@ -0,0 +1,3 @@ +@echo off +SET PATH=%Systemroot%\System32;%PATH% +forfiles.exe -P "%1" -M %2 -C "cmd /c echo %1/%2 is modified at: @fdate @ftime" | findstr modified diff --git a/board/avaota-cam/cdk/avaota_cam.cdkproj b/board/avaota-f1/cdk/avaota_f1.cdkproj similarity index 99% rename from board/avaota-cam/cdk/avaota_cam.cdkproj rename to board/avaota-f1/cdk/avaota_f1.cdkproj index 6ea8df0b3..65075902b 100644 --- a/board/avaota-cam/cdk/avaota_cam.cdkproj +++ b/board/avaota-f1/cdk/avaota_f1.cdkproj @@ -1,11 +1,11 @@ - + yes - new_soc_project_c_solution_e907f + Avaota SBC Avaota F1 @@ -524,7 +524,7 @@ - + diff --git a/board/avaota-cam/cdk/avaota_cam.cdkws b/board/avaota-f1/cdk/avaota_f1.cdkws similarity index 54% rename from board/avaota-cam/cdk/avaota_cam.cdkws rename to board/avaota-f1/cdk/avaota_f1.cdkws index fe6939097..4f98e6a15 100644 --- a/board/avaota-cam/cdk/avaota_cam.cdkws +++ b/board/avaota-f1/cdk/avaota_f1.cdkws @@ -1,11 +1,11 @@ - + $(CDKWS)\__workspace_pack__ - + - + diff --git a/board/avaota-cam/cdk/config.h b/board/avaota-f1/cdk/config.h similarity index 100% rename from board/avaota-cam/cdk/config.h rename to board/avaota-f1/cdk/config.h diff --git a/board/avaota-cam/cdk/link_elf.ld b/board/avaota-f1/cdk/link_elf.ld similarity index 100% rename from board/avaota-cam/cdk/link_elf.ld rename to board/avaota-f1/cdk/link_elf.ld diff --git a/board/avaota-cam/cdk/script/flash.init b/board/avaota-f1/cdk/script/flash.init similarity index 100% rename from board/avaota-cam/cdk/script/flash.init rename to board/avaota-f1/cdk/script/flash.init diff --git a/board/avaota-cam/cdk/script/gdb.init b/board/avaota-f1/cdk/script/gdb.init similarity index 100% rename from board/avaota-cam/cdk/script/gdb.init rename to board/avaota-f1/cdk/script/gdb.init diff --git a/board/avaota-cam/eabi_compat.c b/board/avaota-f1/eabi_compat.c similarity index 100% rename from board/avaota-cam/eabi_compat.c rename to board/avaota-f1/eabi_compat.c diff --git a/board/avaota-cam/head.c b/board/avaota-f1/head.c similarity index 100% rename from board/avaota-cam/head.c rename to board/avaota-f1/head.c diff --git a/board/avaota-cam/payloads/src/CMakeLists.txt b/board/avaota-f1/payloads/src/CMakeLists.txt similarity index 100% rename from board/avaota-cam/payloads/src/CMakeLists.txt rename to board/avaota-f1/payloads/src/CMakeLists.txt diff --git a/board/avaota-cam/payloads/src/README.md b/board/avaota-f1/payloads/src/README.md similarity index 100% rename from board/avaota-cam/payloads/src/README.md rename to board/avaota-f1/payloads/src/README.md diff --git a/board/avaota-cam/payloads/src/config.h.in b/board/avaota-f1/payloads/src/config.h.in similarity index 100% rename from board/avaota-cam/payloads/src/config.h.in rename to board/avaota-f1/payloads/src/config.h.in diff --git a/board/avaota-cam/payloads/src/include/byteorder.h b/board/avaota-f1/payloads/src/include/byteorder.h similarity index 100% rename from board/avaota-cam/payloads/src/include/byteorder.h rename to board/avaota-f1/payloads/src/include/byteorder.h diff --git a/board/avaota-cam/payloads/src/include/endian.h b/board/avaota-f1/payloads/src/include/endian.h similarity index 100% rename from board/avaota-cam/payloads/src/include/endian.h rename to board/avaota-f1/payloads/src/include/endian.h diff --git a/board/avaota-cam/payloads/src/include/io.h b/board/avaota-f1/payloads/src/include/io.h similarity index 100% rename from board/avaota-cam/payloads/src/include/io.h rename to board/avaota-f1/payloads/src/include/io.h diff --git a/board/avaota-cam/payloads/src/include/linkage.h b/board/avaota-f1/payloads/src/include/linkage.h similarity index 100% rename from board/avaota-cam/payloads/src/include/linkage.h rename to board/avaota-f1/payloads/src/include/linkage.h diff --git a/board/avaota-cam/payloads/src/include/riscv64.h b/board/avaota-f1/payloads/src/include/riscv64.h similarity index 100% rename from board/avaota-cam/payloads/src/include/riscv64.h rename to board/avaota-f1/payloads/src/include/riscv64.h diff --git a/board/avaota-cam/payloads/src/include/stdarg.h b/board/avaota-f1/payloads/src/include/stdarg.h similarity index 100% rename from board/avaota-cam/payloads/src/include/stdarg.h rename to board/avaota-f1/payloads/src/include/stdarg.h diff --git a/board/avaota-cam/payloads/src/include/stddef.h b/board/avaota-f1/payloads/src/include/stddef.h similarity index 100% rename from board/avaota-cam/payloads/src/include/stddef.h rename to board/avaota-f1/payloads/src/include/stddef.h diff --git a/board/avaota-cam/payloads/src/include/stdint.h b/board/avaota-f1/payloads/src/include/stdint.h similarity index 100% rename from board/avaota-cam/payloads/src/include/stdint.h rename to board/avaota-f1/payloads/src/include/stdint.h diff --git a/board/avaota-cam/payloads/src/include/string.h b/board/avaota-f1/payloads/src/include/string.h similarity index 100% rename from board/avaota-cam/payloads/src/include/string.h rename to board/avaota-f1/payloads/src/include/string.h diff --git a/board/avaota-cam/payloads/src/include/sys/sys-clock.h b/board/avaota-f1/payloads/src/include/sys/sys-clock.h similarity index 100% rename from board/avaota-cam/payloads/src/include/sys/sys-clock.h rename to board/avaota-f1/payloads/src/include/sys/sys-clock.h diff --git a/board/avaota-cam/payloads/src/include/sys/sys-uart.h b/board/avaota-f1/payloads/src/include/sys/sys-uart.h similarity index 100% rename from board/avaota-cam/payloads/src/include/sys/sys-uart.h rename to board/avaota-f1/payloads/src/include/sys/sys-uart.h diff --git a/board/avaota-cam/payloads/src/include/types.h b/board/avaota-f1/payloads/src/include/types.h similarity index 100% rename from board/avaota-cam/payloads/src/include/types.h rename to board/avaota-f1/payloads/src/include/types.h diff --git a/board/avaota-cam/payloads/src/include/uart.h b/board/avaota-f1/payloads/src/include/uart.h similarity index 100% rename from board/avaota-cam/payloads/src/include/uart.h rename to board/avaota-f1/payloads/src/include/uart.h diff --git a/board/avaota-cam/payloads/src/lib/CMakeLists.txt b/board/avaota-f1/payloads/src/lib/CMakeLists.txt similarity index 100% rename from board/avaota-cam/payloads/src/lib/CMakeLists.txt rename to board/avaota-f1/payloads/src/lib/CMakeLists.txt diff --git a/board/avaota-cam/payloads/src/lib/memcpy.S b/board/avaota-f1/payloads/src/lib/memcpy.S similarity index 100% rename from board/avaota-cam/payloads/src/lib/memcpy.S rename to board/avaota-f1/payloads/src/lib/memcpy.S diff --git a/board/avaota-cam/payloads/src/lib/memset.S b/board/avaota-f1/payloads/src/lib/memset.S similarity index 100% rename from board/avaota-cam/payloads/src/lib/memset.S rename to board/avaota-f1/payloads/src/lib/memset.S diff --git a/board/avaota-cam/payloads/src/link.ld b/board/avaota-f1/payloads/src/link.ld similarity index 100% rename from board/avaota-cam/payloads/src/link.ld rename to board/avaota-f1/payloads/src/link.ld diff --git a/board/avaota-cam/payloads/src/src/CMakeLists.txt b/board/avaota-f1/payloads/src/src/CMakeLists.txt similarity index 100% rename from board/avaota-cam/payloads/src/src/CMakeLists.txt rename to board/avaota-f1/payloads/src/src/CMakeLists.txt diff --git a/board/avaota-cam/payloads/src/src/main.c b/board/avaota-f1/payloads/src/src/main.c similarity index 100% rename from board/avaota-cam/payloads/src/src/main.c rename to board/avaota-f1/payloads/src/src/main.c diff --git a/board/avaota-cam/payloads/src/src/start.S b/board/avaota-f1/payloads/src/src/start.S similarity index 100% rename from board/avaota-cam/payloads/src/src/start.S rename to board/avaota-f1/payloads/src/src/start.S diff --git a/board/avaota-cam/payloads/src/src/sys/CMakeLists.txt b/board/avaota-f1/payloads/src/src/sys/CMakeLists.txt similarity index 100% rename from board/avaota-cam/payloads/src/src/sys/CMakeLists.txt rename to board/avaota-f1/payloads/src/src/sys/CMakeLists.txt diff --git a/board/avaota-cam/payloads/src/src/sys/sys-clock.c b/board/avaota-f1/payloads/src/src/sys/sys-clock.c similarity index 100% rename from board/avaota-cam/payloads/src/src/sys/sys-clock.c rename to board/avaota-f1/payloads/src/src/sys/sys-clock.c diff --git a/board/avaota-cam/payloads/src/src/sys/sys-uart.c b/board/avaota-f1/payloads/src/src/sys/sys-uart.c similarity index 100% rename from board/avaota-cam/payloads/src/src/sys/sys-uart.c rename to board/avaota-f1/payloads/src/src/sys/sys-uart.c diff --git a/board/avaota-cam/payloads/src/src/uart.c b/board/avaota-f1/payloads/src/src/uart.c similarity index 100% rename from board/avaota-cam/payloads/src/src/uart.c rename to board/avaota-f1/payloads/src/src/uart.c diff --git a/board/avaota-cam/start.S b/board/avaota-f1/start.S similarity index 100% rename from board/avaota-cam/start.S rename to board/avaota-f1/start.S diff --git a/cmake/board/avaota-cam.cmake b/cmake/board/avaota-cam.cmake index abf334743..1a948d4f5 100644 --- a/cmake/board/avaota-cam.cmake +++ b/cmake/board/avaota-cam.cmake @@ -4,7 +4,7 @@ set(CONFIG_ARCH_RISCV32 True) set(CONFIG_ARCH_RISCV32_CORE_E907 True) set(CONFIG_CHIP_SUN300IW1 True) set(CONFIG_CHIP_MMC_V2 True) -set(CONFIG_BOARD_AVAOTA-CAM True) +set(CONFIG_BOARD_AVAOTA-F1 True) add_definitions(-DCONFIG_CHIP_SUN300IW1) add_definitions(-DCONFIG_CHIP_MMC_V2) From 8609e1d355cb9dbd62c2ab96607b97e30f56a4f7 Mon Sep 17 00:00:00 2001 From: SamulKyull Date: Fri, 10 Jan 2025 17:49:56 +0800 Subject: [PATCH 9/9] [board] add avaota f1 --- board/avaota-f1/app/main.c | 6 +++--- board/avaota-f1/board.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/board/avaota-f1/app/main.c b/board/avaota-f1/app/main.c index 4fb4c56db..1d78acf36 100644 --- a/board/avaota-f1/app/main.c +++ b/board/avaota-f1/app/main.c @@ -25,7 +25,7 @@ #include #include -extern sunxi_serial_t uart_mcu_dbg; +extern sunxi_serial_t uart_dbg; extern sunxi_serial_t uart_cpu_dbg; extern sunxi_serial_t uart_card; extern dram_para_t dram_para; @@ -124,9 +124,9 @@ const msh_command_entry commands[] = { int main(void) { sunxi_clk_pre_init(); - sunxi_serial_init(&uart_cpu_dbg); + sunxi_serial_init(&uart_dbg); - sunxi_serial_init(&uart_mcu_dbg); + sunxi_serial_init(&uart_cpu_dbg); sunxi_serial_init(&uart_card); diff --git a/board/avaota-f1/board.c b/board/avaota-f1/board.c index 8d09f448b..e0311fc43 100644 --- a/board/avaota-f1/board.c +++ b/board/avaota-f1/board.c @@ -23,7 +23,7 @@ #include #include -sunxi_serial_t uart_mcu_dbg = { +sunxi_serial_t uart_dbg = { .base = SUNXI_UART0_BASE, .id = 0, .baud_rate = UART_BAUDRATE_115200,