relocatable

This commit is contained in:
wrapper 2025-05-31 22:04:02 +07:00
parent f63857583b
commit 7460b37bff
19 changed files with 782 additions and 463 deletions

View file

@ -21,6 +21,11 @@ ABT_STACK_SIZE = 0x0100;
UND_STACK_SIZE = 0x0100;
SVC_STACK_SIZE = 0x0100;
PHDRS
{
code PT_LOAD;
data PT_LOAD;
}
MEMORY
{
@ -49,7 +54,7 @@ SECTIONS
*(.glue_7);
. = ALIGN(4);
etext = .;
} > ram
} > ram :code
.data :
{
@ -57,12 +62,41 @@ SECTIONS
*(.data)
. = ALIGN(4);
edata = .;
_edata = .;
PROVIDE (__data_end = .);
} > ram
} > ram :data
.plt : ALIGN(4)
{
*(.plt)
. = ALIGN(4);
} > ram :code
.got : ALIGN(4)
{
_sgot = .;
_sgot_main = .;
*(.got)
_egot_main = .;
} > ram :data
.got.plt : ALIGN(4)
{
_sgot_plt = .;
*(.got.plt)
_egot_plt = .;
_egot = .;
_edata = .;
} > ram :data
.rel.dyn : ALIGN(4)
{
_reloc_start = .;
*(.rel.dyn)
} > ram :data
.bss :
{
_reloc_end = .;
PROVIDE (__bss_start = .);
*(.bss)
*(COMMON)

27
crt.s
View file

@ -47,7 +47,7 @@ _vectors:
.global ResetHandler
.global ExitFunction
.global absolute_to_relative
.extern pic_relocate
.global DN_Packet_DCC_WaitForBP
#if USE_BREAKPOINTS
.global DN_Packet_DCC_ResetBPP
@ -180,6 +180,24 @@ heap_clear_loop:
mrc p14, 0, r0, cr1, cr0, 0
#endif
/* Setup PIC */
mov r0, #0
adr r0, _vectors
ldr r1, =_reloc_start
add r1, r0
ldr r2, =_reloc_end
add r2, r0
ldr r3, =edata
bl pic_relocate
/* Setup GOT */
ldr r9, =_sgot
add r9, r0
/* Jump to Main */
mov r0, #0
adr r0, StartAddress
@ -222,13 +240,6 @@ IRQHandler:
FIQHandler:
b FIQHandler
/* PIC routines */
absolute_to_relative:
mov r1, #0
adr r1, _vectors
add r0, r1
bx lr
/* Breakpoint loader routines */
#if USE_BREAKPOINTS
DN_Packet_DCC_WaitForBP:

View file

@ -16,12 +16,12 @@ static void _set_bit32(uint32_t offset, uint32_t bit_position, uint32_t bit_mask
WRITE_U32(offset, (READ_U32(offset) & ~(bit_mask << bit_position)) | ((value & bit_mask) << bit_position));
}
uint32_t GET_BIT32(uint32_t offset, bitmask bitmask)
uint32_t GET_BIT32(uint32_t offset, const bitmask bitmask)
{
return _get_bit32(offset, bitmask.bit_pos, bitmask.bit_mask);
}
void SET_BIT32(uint32_t offset, bitmask bitmask, uint32_t value)
void SET_BIT32(uint32_t offset, const bitmask bitmask, uint32_t value)
{
_set_bit32(offset, bitmask.bit_pos, bitmask.bit_mask, value);
}
@ -38,12 +38,12 @@ static void _set_bit16(uint32_t offset, uint32_t bit_position, uint32_t bit_mask
}
uint16_t GET_BIT16(uint32_t offset, bitmask bitmask)
uint16_t GET_BIT16(uint32_t offset, const bitmask bitmask)
{
return _get_bit16(offset, bitmask.bit_pos, bitmask.bit_mask);
}
void SET_BIT16(uint32_t offset, bitmask bitmask, uint16_t value)
void SET_BIT16(uint32_t offset, const bitmask bitmask, uint16_t value)
{
_set_bit16(offset, bitmask.bit_pos, bitmask.bit_mask, value);
}
@ -60,12 +60,12 @@ static void _set_bit8(uint32_t offset, uint32_t bit_position, uint32_t bit_mask,
WRITE_U8(offset, (READ_U8(offset) & ~(bit_mask << bit_position)) | ((value & bit_mask) << bit_position));
}
uint8_t GET_BIT8(uint32_t offset, bitmask bitmask)
uint8_t GET_BIT8(uint32_t offset, const bitmask bitmask)
{
return _get_bit8(offset, bitmask.bit_pos, bitmask.bit_mask);
}
void SET_BIT8(uint32_t offset, bitmask bitmask, uint8_t value)
void SET_BIT8(uint32_t offset, const bitmask bitmask, uint8_t value)
{
_set_bit8(offset, bitmask.bit_pos, bitmask.bit_mask, value);
}

View file

@ -9,10 +9,10 @@ typedef struct {
uint32_t bit_mask;
} bitmask;
uint8_t GET_BIT8(uint32_t offset, bitmask bitmask);
uint16_t GET_BIT16(uint32_t offset, bitmask bitmask);
uint32_t GET_BIT32(uint32_t offset, bitmask bitmask);
uint8_t GET_BIT8(uint32_t offset, const bitmask bitmask);
uint16_t GET_BIT16(uint32_t offset, const bitmask bitmask);
uint32_t GET_BIT32(uint32_t offset, const bitmask bitmask);
void SET_BIT8(uint32_t offset, bitmask bitmask, uint8_t value);
void SET_BIT16(uint32_t offset, bitmask bitmask, uint16_t value);
void SET_BIT32(uint32_t offset, bitmask bitmask, uint32_t value);
void SET_BIT8(uint32_t offset, const bitmask bitmask, uint8_t value);
void SET_BIT16(uint32_t offset, const bitmask bitmask, uint16_t value);
void SET_BIT32(uint32_t offset, const bitmask bitmask, uint32_t value);

14
dcc/pic.c Normal file
View file

@ -0,0 +1,14 @@
#include <stdint.h>
typedef struct {
uint32_t offset;
uint32_t type;
} RELOC;
void pic_relocate(uint32_t base, uint32_t reloc_cur, uint32_t reloc_end, uint32_t data_offs) {
while (reloc_cur < reloc_end) {
RELOC *rel = (RELOC *)(reloc_cur);
if (rel->type == 0x17 && rel->offset >= data_offs) rel->offset += base;
reloc_cur += sizeof(RELOC);
}
}

View file

@ -36,6 +36,7 @@ def hook_code(uc: Uc, address, size, user_data):
print("RSP2", hex(uc.reg_read(UC_ARM_REG_R1)))
print("RSP3", hex(uc.reg_read(UC_ARM_REG_R2)))
print("RSP4", hex(uc.reg_read(UC_ARM_REG_R3)))
print("RLOC", hex(uc.reg_read(UC_ARM_REG_R9)))
print("SP", hex(uc.reg_read(UC_ARM_REG_SP)))
print("SP_DATA", uc.mem_read(uc.reg_read(UC_ARM_REG_SP), 0x10))

View file

@ -35,6 +35,7 @@ def hook_code(uc: Uc, address, size, user_data):
print("RSP2", hex(uc.reg_read(UC_ARM_REG_R1)))
print("RSP3", hex(uc.reg_read(UC_ARM_REG_R2)))
print("RSP4", hex(uc.reg_read(UC_ARM_REG_R3)))
print("RLOC", hex(uc.reg_read(UC_ARM_REG_R9)))
print("SP", hex(uc.reg_read(UC_ARM_REG_SP)))
print("SP_DATA", uc.mem_read(uc.reg_read(UC_ARM_REG_SP), 0x10))

259
dcc_emu_reloc.py Normal file
View file

@ -0,0 +1,259 @@
#!/usr/bin/env python
# Sample code for ARM of Unicorn. Nguyen Anh Quynh <aquynh@gmail.com>
# Python sample ported by Loi Anh Tuan <loianhtuan@gmail.com>
from __future__ import print_function
from unicorn import *
from unicorn.arm_const import *
from capstone import *
from capstone.arm import *
import crcmod
DEBUG_INFO = True
DEBUG = True
# callback for tracing basic blocks
def hook_block(uc, address, size, user_data):
pass
#print(">>> Tracing basic block at 0x%x, block size = 0x%x" %(address, size))
status_reg = 0b0100 << 28 # By default, the DCC loader can write, but not read
rd_reg = 0
wr_reg = 0
DCC_LOADER = "build/dumpnow.bin"
DCC_FW = "build/dumpnow.bin"
# callback for tracing instructions
def hook_code(uc: Uc, address, size, user_data):
global status_reg, wr_reg
try:
#if address == 0x14001da0: uc.mem_write(0x0, b"\x01\x00\x7e\x22")
if DEBUG and DEBUG_INFO:
print(">>> Tracing instruction at 0x%x, instruction size = 0x%x" %(address, size))
print("CODE:",uc.mem_read(address, size))
print("RSP1", hex(uc.reg_read(UC_ARM_REG_R0)))
print("RSP2", hex(uc.reg_read(UC_ARM_REG_R1)))
print("RSP3", hex(uc.reg_read(UC_ARM_REG_R2)))
print("RSP4", hex(uc.reg_read(UC_ARM_REG_R3)))
print("RLOC", hex(uc.reg_read(UC_ARM_REG_R9)))
print("SP", hex(uc.reg_read(UC_ARM_REG_SP)))
print("SP_DATA", uc.mem_read(uc.reg_read(UC_ARM_REG_SP), 0x10))
cs = Cs(CS_ARCH_ARM, CS_MODE_THUMB if uc.reg_read(UC_ARM_REG_CPSR) & (1 << 5) else CS_MODE_ARM)
cs.detail = True
ins: CsInsn = [x for x in cs.disasm(uc.mem_read(address, size), address)][0]
if ins.id == ARM_INS_MRC:
if ins.operands[0].value.imm == 14:
opc_1 = ins.operands[1].value.imm
cp_dest = ins.operands[2].value.reg
cr_n = ins.operands[3].value.imm
cr_m = ins.operands[4].value.imm
opc_2 = ins.operands[5].value.imm
if cr_n == 0:
uc.reg_write(cp_dest, status_reg)
elif cr_n == 1:
print("DCC HOST -> OCD", hex(rd_reg))
uc.reg_write(cp_dest, rd_reg)
status_reg &= ~1 # Sets the R bit to low, indicating that the host has finished processing the data.
uc.reg_write(UC_ARM_REG_PC, address+size) # Skip this instruction as we've already processed some DCC logic
elif ins.id == ARM_INS_MCR:
if ins.operands[0].value.imm == 14:
opc_1 = ins.operands[1].value.imm
cp_dest = ins.operands[2].value.reg
cr_n = ins.operands[3].value.imm
cr_m = ins.operands[4].value.imm
opc_2 = ins.operands[5].value.imm
if cr_n == 0:
status_reg = uc.reg_read(cp_dest)
elif cr_n == 1:
wr_reg = uc.reg_read(cp_dest)
print("DCC OCD -> HOST", hex(wr_reg))
status_reg |= 2 # Sets the W bit to high, indicating that the debugger is ready to process the data.
uc.reg_write(UC_ARM_REG_PC, address+size) # Skip this instruction as we've already processed some DCC logic
except KeyboardInterrupt:
uc.emu_stop()
raise
# cp = 15
# is64 = 0
# sec = 0
# crn = 1
# crm = 0
# opc1 = 0
# opc2 = 0
# val = ??
# Test ARM
def test_arm():
print("Emulate ARM code")
try:
# Initialize emulator in ARM mode
mu = Uc(UC_ARCH_ARM, UC_MODE_ARM)
mu.ctl_exits_enabled(True)
mu.ctl_set_exits([0x14000178])
mu.mem_map(0x00000000, 32 * 1024 * 1024)
mu.mem_map(0x12000000, 32 * 1024 * 1024)
mu.mem_map(0x03000000, 2 * 1024 * 1024)
# map 2MB memory for this emulation
mu.mem_map(0x14000000, 2 * 1024 * 1024)
# write machine code to be emulated to memory
mu.mem_write(0x14000000, open(DCC_LOADER, "rb").read())
#mu.mem_write(0x00000000, open("cfi_32mb.bin", "rb").read())
#mu.mem_write(0x00000000, b"\x01\x00\x7e\x22") # Infineon NOR
#mu.mem_write(0x14000020, b"\x00\x00\x00\x00") # Infineon NOR
#mu.mem_write(0x00000020, b"Q\0R\0Y\0\x02\0\0\0")
#mu.mem_write(0x0000004e, (23).to_bytes(2, "little"))
#mu.mem_write(0x14000020, b"\0\0\0\x10")
# initialize machine registers
mu.reg_write(UC_ARM_REG_APSR, 0xFFFFFFFF) #All application flags turned on
# tracing all basic blocks with customized callback
mu.hook_add(UC_HOOK_BLOCK, hook_block)
# tracing one instruction at ADDRESS with customized callback
mu.hook_add(UC_HOOK_CODE, hook_code)
def on_read(mu, access, address, size, value, data):
#if DEBUG and address <= 0x14000000:
if DEBUG and DEBUG_INFO:
print("Read at", hex(address), size, mu.mem_read(address, size))
def on_write(mu, access, address, size, value, data):
if DEBUG:
if address <= 0x14000000:
if (address & 0x1ffff) == 0xaaa and value == 0x98:
mu.mem_write(0x00000000, open("cfi_32mb.bin", "rb").read())
mu.mem_write(0x12000000, open("cfi_32mb.bin", "rb").read())
elif (address & 0x1ffff) == 0xaaa and value == 0x90:
mu.mem_write(0x00000000, b"\x01\x00\x7e\x22")
mu.mem_write(0x12000000, b"\x01\x00\x7e\x22")
elif (address & 0x1ffff) == 0x0 and value == 0xf0:
mu.mem_write(0x00000000, open(DCC_FW, "rb").read())
mu.mem_write(0x12000000, open(DCC_FW, "rb").read())
# mu.reg_write(0x)
if DEBUG_INFO: print("Write at", hex(address), size, hex(value))
# if value == 0x98:
# mu.mem_write(0x0, open("cfi.bin", "rb").read())
# elif value == 0xf0:
# mu.mem_write(0x0, open("RIFF_Nor_DCC_Test.bin", "rb").read())
# else:
# mu.mem_write(address, value.to_bytes(size, "little"))
def on_error(mu, access, address, size, value, data):
if DEBUG:
print("Error at", hex(address), size, hex(value), "in", hex(mu.reg_read(UC_ARM_REG_PC)), "lr", hex(mu.reg_read(UC_ARM_REG_LR)))
mu.hook_add(UC_HOOK_MEM_READ, on_read)
mu.hook_add(UC_HOOK_MEM_WRITE, on_write)
mu.hook_add(UC_HOOK_MEM_INVALID, on_error)
# emulate machine code in infinite time
mu.emu_start(0x14000000, 0x1440000)
# now print out some registers
print(">>> Emulation done. Below is the CPU context")
r0 = mu.reg_read(UC_ARM_REG_R0)
r1 = mu.reg_read(UC_ARM_REG_R1)
print(">>> R0 = 0x%x" %r0)
print(">>> R1 = 0x%x" %r1)
except UcError as e:
print("ERROR: %s" % e)
def _dcc_read_host():
global status_reg
if (status_reg & 2) == 0: return 0
print("DBG READ")
temp = wr_reg
status_reg &= ~2 # Debugger finally processed the data and set the W bit to low.
return temp
def _dcc_write_host(data):
import time
global status_reg, rd_reg
while _dcc_read_status_host() & 1: time.sleep(0.1)
print("DBG WRTIE")
rd_reg = data
status_reg |= 1 # With the R bit set to high, the host was as motivated to process the data.
def _dcc_read_status_host():
return status_reg
def _dcc_loader_read():
while (_dcc_read_status_host() & 2) == 0: time.sleep(0.1)
iCount = _dcc_read_host()
print("C:", hex(iCount))
crc = crcmod.mkCrcFun(0x104c11db7, 0xffffffff, False, 0)
hashData = bytearray()
for _ in range(iCount):
while (_dcc_read_status_host() & 2) == 0: time.sleep(0.1)
dccRead = _dcc_read_host()
print("H:", hex(dccRead))
hashData += dccRead.to_bytes(4, "little")
while (_dcc_read_status_host() & 2) == 0: time.sleep(0.1)
sum = _dcc_read_host()
hash = crc(hashData)
assert sum == hash, f"Checksum is invalid! 0x{sum:08x} != 0x{hash:08x}"
if __name__ == '__main__':
test_arm()
# import threading
# import time
# t = threading.Thread(target=test_arm, daemon=True)
# t.start()
# _dcc_loader_read()
# print("RUN")
# offs = 0
# if True:
# while offs < 0x01000000:
# _dcc_write_host(0x152 | 0x00000000)
# _dcc_write_host(offs)
# _dcc_write_host(0x00020000)
# _dcc_loader_read()
# offs += 0x20000
# raise Exception("continue")
# # if True:
# # _dcc_write_host(0x252 | 0x00000000)
# # _dcc_write_host(0x00120000)
# # _dcc_write_host(0x00000080)
# # _dcc_loader_read()
# time.sleep(4)
# print("end testing")

View file

@ -1,4 +1,4 @@
#pragma once
#include "dcc/dn_dcc_proto.h"
extern Device devices[];
extern const Device devices[];

View file

@ -9,7 +9,7 @@ typedef struct {
uint32_t bits;
} nand_info;
extern nand_info flash_ids[];
extern const nand_info flash_ids[];
typedef enum {
NAND_STATUS_FAIL = 0x01,

View file

@ -16,48 +16,48 @@
#define PXA3_REG_NDCB1 PXA3_NAND_BASE_REG + 0x4C
#define PXA3_REG_NDCB2 PXA3_NAND_BASE_REG + 0x50
bitmask PXA3_NDCR_SPARE_EN = {31, 0x1};
bitmask PXA3_NDCR_ECC_EN = {30, 0x1};
bitmask PXA3_NDCR_DMA_EN = {29, 0x1};
bitmask PXA3_NDCR_ND_RUN = {28, 0x1};
bitmask PXA3_NDCR_DWIDTH_C = {27, 0x1};
bitmask PXA3_NDCR_DWIDTH_M = {26, 0x1};
bitmask PXA3_NDCR_PAGE_SZ = {24, 0x1};
bitmask PXA3_NDCR_NCSX = {23, 0x1};
bitmask PXA3_NDCR_CLR_PG_CNT = {20, 0x1};
bitmask PXA3_NDCR_STOP_ON_UNCOR = {19, 0x1};
bitmask PXA3_NDCR_RD_ID_CNT = {16, 0x7};
bitmask PXA3_NDCR_RA_START = {15, 0x1};
bitmask PXA3_NDCR_PG_PER_BLK = {14, 0x1};
bitmask PXA3_NDCR_ND_ARB_EN = {12, 0x1};
bitmask PXA3_NDCR_INTERRUPT = {0, 0xfff};
const bitmask PXA3_NDCR_SPARE_EN = {31, 0x1};
const bitmask PXA3_NDCR_ECC_EN = {30, 0x1};
const bitmask PXA3_NDCR_DMA_EN = {29, 0x1};
const bitmask PXA3_NDCR_ND_RUN = {28, 0x1};
const bitmask PXA3_NDCR_DWIDTH_C = {27, 0x1};
const bitmask PXA3_NDCR_DWIDTH_M = {26, 0x1};
const bitmask PXA3_NDCR_PAGE_SZ = {24, 0x1};
const bitmask PXA3_NDCR_NCSX = {23, 0x1};
const bitmask PXA3_NDCR_CLR_PG_CNT = {20, 0x1};
const bitmask PXA3_NDCR_STOP_ON_UNCOR = {19, 0x1};
const bitmask PXA3_NDCR_RD_ID_CNT = {16, 0x7};
const bitmask PXA3_NDCR_RA_START = {15, 0x1};
const bitmask PXA3_NDCR_PG_PER_BLK = {14, 0x1};
const bitmask PXA3_NDCR_ND_ARB_EN = {12, 0x1};
const bitmask PXA3_NDCR_INTERRUPT = {0, 0xfff};
bitmask PXA3_NDSR_MASK = {0, 0xfff};
bitmask PXA3_NDSR_RDY = {12, 0x1};
bitmask PXA3_NDSR_FLASH_RDY = {11, 0x1};
bitmask PXA3_NDSR_CS0_PAGED = {10, 0x1};
bitmask PXA3_NDSR_CS1_PAGED = {9, 0x1};
bitmask PXA3_NDSR_CS0_CMDD = {8, 0x1};
bitmask PXA3_NDSR_CS1_CMDD = {7, 0x1};
bitmask PXA3_NDSR_CS0_BBD = {6, 0x1};
bitmask PXA3_NDSR_CS1_BBD = {5, 0x1};
bitmask PXA3_NDSR_UNCORERR = {4, 0x1};
bitmask PXA3_NDSR_CORERR = {3, 0x1};
bitmask PXA3_NDSR_WRDREQ = {2, 0x1};
bitmask PXA3_NDSR_RDDREQ = {1, 0x1};
bitmask PXA3_NDSR_WRCMDREQ = {0, 0x1};
const bitmask PXA3_NDSR_MASK = {0, 0xfff};
const bitmask PXA3_NDSR_RDY = {12, 0x1};
const bitmask PXA3_NDSR_FLASH_RDY = {11, 0x1};
const bitmask PXA3_NDSR_CS0_PAGED = {10, 0x1};
const bitmask PXA3_NDSR_CS1_PAGED = {9, 0x1};
const bitmask PXA3_NDSR_CS0_CMDD = {8, 0x1};
const bitmask PXA3_NDSR_CS1_CMDD = {7, 0x1};
const bitmask PXA3_NDSR_CS0_BBD = {6, 0x1};
const bitmask PXA3_NDSR_CS1_BBD = {5, 0x1};
const bitmask PXA3_NDSR_UNCORERR = {4, 0x1};
const bitmask PXA3_NDSR_CORERR = {3, 0x1};
const bitmask PXA3_NDSR_WRDREQ = {2, 0x1};
const bitmask PXA3_NDSR_RDDREQ = {1, 0x1};
const bitmask PXA3_NDSR_WRCMDREQ = {0, 0x1};
bitmask PXA3_NDCB_LEN_OVRD = {28, 0x1};
bitmask PXA3_NDCB_ST_ROW_EN = {26, 0x1};
bitmask PXA3_NDCB_AUTO_RS = {25, 0x1};
bitmask PXA3_NDCB_CSEL = {24, 0x1};
bitmask PXA3_NDCB_EXT_CMD_TYPE = {29, 0x7};
bitmask PXA3_NDCB_CMD_TYPE = {21, 0x7};
bitmask PXA3_NDCB_NC = {20, 0x1};
bitmask PXA3_NDCB_DBC = {19, 0x1};
bitmask PXA3_NDCB_ADDR_CYC = {16, 0x7};
bitmask PXA3_NDCB_CMD2 = {8, 0xff};
bitmask PXA3_NDCB_CMD1 = {0, 0xff};
const bitmask PXA3_NDCB_LEN_OVRD = {28, 0x1};
const bitmask PXA3_NDCB_ST_ROW_EN = {26, 0x1};
const bitmask PXA3_NDCB_AUTO_RS = {25, 0x1};
const bitmask PXA3_NDCB_CSEL = {24, 0x1};
const bitmask PXA3_NDCB_EXT_CMD_TYPE = {29, 0x7};
const bitmask PXA3_NDCB_CMD_TYPE = {21, 0x7};
const bitmask PXA3_NDCB_NC = {20, 0x1};
const bitmask PXA3_NDCB_DBC = {19, 0x1};
const bitmask PXA3_NDCB_ADDR_CYC = {16, 0x7};
const bitmask PXA3_NDCB_CMD2 = {8, 0xff};
const bitmask PXA3_NDCB_CMD1 = {0, 0xff};
typedef enum {
PXA3_NDCB_TYPE_READ,

View file

@ -17,41 +17,41 @@
#define MSM6250_CMD_FLASH_STATUS_CHECK 6
#define MSM6250_CMD_FLASH_RESET_NAND 7
bitmask MSM6250_ADDR_SPARE_AREA_BYTE_ADDRESS = {0, 0x3f};
bitmask MSM6250_ADDR_FLASH_PAGE_ADDRESS = {9, 0x7fffff};
const bitmask MSM6250_ADDR_SPARE_AREA_BYTE_ADDRESS = {0, 0x3f};
const bitmask MSM6250_ADDR_FLASH_PAGE_ADDRESS = {9, 0x7fffff};
bitmask MSM6250_CMD_OP_CMD = {0, 0x7};
bitmask MSM6250_CMD_SW_CMD_EN = {3, 0x1};
bitmask MSM6250_CMD_SW_CMD_VAL = {4, 0xff};
bitmask MSM6250_CMD_SW_CMD_ADDR_SEL = {12, 0x1};
bitmask MSM6250_CMD_SW_CMD1_REPLACE = {13, 0x1};
bitmask MSM6250_CMD_SW_CMD2_REPLACE = {14, 0x1};
const bitmask MSM6250_CMD_OP_CMD = {0, 0x7};
const bitmask MSM6250_CMD_SW_CMD_EN = {3, 0x1};
const bitmask MSM6250_CMD_SW_CMD_VAL = {4, 0xff};
const bitmask MSM6250_CMD_SW_CMD_ADDR_SEL = {12, 0x1};
const bitmask MSM6250_CMD_SW_CMD1_REPLACE = {13, 0x1};
const bitmask MSM6250_CMD_SW_CMD2_REPLACE = {14, 0x1};
bitmask MSM6250_STATUS_OP_STATUS = {0, 0x7};
bitmask MSM6250_STATUS_OP_ERR = {3, 0x1};
bitmask MSM6250_STATUS_CORRECTABLE_ERROR = {4, 0x1};
bitmask MSM6250_STATUS_READY_BUSY_N = {5, 0x1};
bitmask MSM6250_STATUS_ECC_SELF_ERR = {6, 0x1};
bitmask MSM6250_STATUS_WRITE_OP_RESULT = {7, 0x1};
bitmask MSM6250_STATUS_OP_FAILURE = {0, 0x88};
bitmask MSM6250_STATUS_READY_BUSY_N_STATUS = {13, 0x1};
bitmask MSM6250_STATUS_WRITE_PROTECT = {14, 0x1};
bitmask MSM6250_STATUS_NAND_DEVID = {15, 0xff};
bitmask MSM6250_STATUS_NAND_MFRID = {23, 0xff};
bitmask MSM6250_STATUS_READ_ERROR = {31, 0x1};
const bitmask MSM6250_STATUS_OP_STATUS = {0, 0x7};
const bitmask MSM6250_STATUS_OP_ERR = {3, 0x1};
const bitmask MSM6250_STATUS_CORRECTABLE_ERROR = {4, 0x1};
const bitmask MSM6250_STATUS_READY_BUSY_N = {5, 0x1};
const bitmask MSM6250_STATUS_ECC_SELF_ERR = {6, 0x1};
const bitmask MSM6250_STATUS_WRITE_OP_RESULT = {7, 0x1};
const bitmask MSM6250_STATUS_OP_FAILURE = {0, 0x88};
const bitmask MSM6250_STATUS_READY_BUSY_N_STATUS = {13, 0x1};
const bitmask MSM6250_STATUS_WRITE_PROTECT = {14, 0x1};
const bitmask MSM6250_STATUS_NAND_DEVID = {15, 0xff};
const bitmask MSM6250_STATUS_NAND_MFRID = {23, 0xff};
const bitmask MSM6250_STATUS_READ_ERROR = {31, 0x1};
bitmask MSM6250_CONFIG_ECC_DISABLED = {0, 0x1};
bitmask MSM6250_CONFIG_BUSFREE_SUPPORT_SELECT = {1, 0x1};
bitmask MSM6250_CONFIG_ECC_HALT_DIS = {2, 0x1};
bitmask MSM6250_CONFIG_CLK_HALT_DIS = {3, 0x1};
bitmask MSM6250_CONFIG_WIDE_NAND = {5, 0x1};
bitmask MSM6250_CONFIG_BUFFER_MEM_WRITE_WAIT = {6, 0x1};
bitmask MSM6250_CONFIG_ECC_ERR_SELF_DETECT = {7, 0x1};
bitmask MSM6250_CONFIG_NAND_RECOVERY_CYCLE = {8, 0x7};
const bitmask MSM6250_CONFIG_ECC_DISABLED = {0, 0x1};
const bitmask MSM6250_CONFIG_BUSFREE_SUPPORT_SELECT = {1, 0x1};
const bitmask MSM6250_CONFIG_ECC_HALT_DIS = {2, 0x1};
const bitmask MSM6250_CONFIG_CLK_HALT_DIS = {3, 0x1};
const bitmask MSM6250_CONFIG_WIDE_NAND = {5, 0x1};
const bitmask MSM6250_CONFIG_BUFFER_MEM_WRITE_WAIT = {6, 0x1};
const bitmask MSM6250_CONFIG_ECC_ERR_SELF_DETECT = {7, 0x1};
const bitmask MSM6250_CONFIG_NAND_RECOVERY_CYCLE = {8, 0x7};
bitmask MSM6550_CONFIG2_ID_RD_SETUP = {0, 0x1f};
bitmask MSM6550_CONFIG2_RD_SETUP = {5, 0x1f};
bitmask MSM6550_CONFIG2_RD_ACTIVE = {10, 0x1f};
bitmask MSM6550_CONFIG2_WR_HOLD = {15, 0x1f};
bitmask MSM6550_CONFIG2_WR_ACTIVE = {20, 0x1f};
bitmask MSM6550_CONFIG2_WR_SETUP = {25, 0x1f};
const bitmask MSM6550_CONFIG2_ID_RD_SETUP = {0, 0x1f};
const bitmask MSM6550_CONFIG2_RD_SETUP = {5, 0x1f};
const bitmask MSM6550_CONFIG2_RD_ACTIVE = {10, 0x1f};
const bitmask MSM6550_CONFIG2_WR_HOLD = {15, 0x1f};
const bitmask MSM6550_CONFIG2_WR_ACTIVE = {20, 0x1f};
const bitmask MSM6550_CONFIG2_WR_SETUP = {25, 0x1f};

View file

@ -22,52 +22,52 @@
#define MSM6800_CMD_FLASH_STATUS_CHECK 6
#define MSM6800_CMD_FLASH_RESET_NAND 7
bitmask MSM6800_ADDR_SPARE_AREA_BYTE_ADDRESS = {0, 0x3f};
bitmask MSM6800_ADDR_FLASH_PAGE_ADDRESS = {9, 0x7fffff};
const bitmask MSM6800_ADDR_SPARE_AREA_BYTE_ADDRESS = {0, 0x3f};
const bitmask MSM6800_ADDR_FLASH_PAGE_ADDRESS = {9, 0x7fffff};
bitmask MSM6800_CMD_OP_CMD = {0, 0x7};
bitmask MSM6800_CMD_SW_CMD_EN = {3, 0x1};
bitmask MSM6800_CMD_SW_CMD_VAL = {4, 0xff};
bitmask MSM6800_CMD_SW_CMD_ADDR_SEL = {12, 0x1};
bitmask MSM6800_CMD_SW_CMD1_REPLACE = {13, 0x1};
bitmask MSM6800_CMD_SW_CMD2_REPLACE = {14, 0x1};
const bitmask MSM6800_CMD_OP_CMD = {0, 0x7};
const bitmask MSM6800_CMD_SW_CMD_EN = {3, 0x1};
const bitmask MSM6800_CMD_SW_CMD_VAL = {4, 0xff};
const bitmask MSM6800_CMD_SW_CMD_ADDR_SEL = {12, 0x1};
const bitmask MSM6800_CMD_SW_CMD1_REPLACE = {13, 0x1};
const bitmask MSM6800_CMD_SW_CMD2_REPLACE = {14, 0x1};
bitmask MSM6800_STATUS_OP_STATUS = {0, 0x7};
bitmask MSM6800_STATUS_OP_ERR = {3, 0x1};
bitmask MSM6800_STATUS_CORRECTABLE_ERROR = {4, 0x1};
bitmask MSM6800_STATUS_READY_BUSY_N = {5, 0x1};
bitmask MSM6800_STATUS_ECC_SELF_ERR = {6, 0x1};
bitmask MSM6800_STATUS_WRITE_OP_RESULT = {7, 0x1};
bitmask MSM6800_STATUS_OP_FAILURE = {0, 0x88};
bitmask MSM6800_STATUS_READY_BUSY_N_STATUS = {13, 0x1};
bitmask MSM6800_STATUS_WRITE_PROTECT = {14, 0x1};
bitmask MSM6800_STATUS_NAND_AUTOPROBE_DONE = {15, 0x1};
bitmask MSM6800_STATUS_NAND_AUTOPROBE_ISLARGE = {16, 0x1};
bitmask MSM6800_STATUS_NAND_AUTOPROBE_IS16BIT = {17, 0x1};
bitmask MSM6800_STATUS_READ_ERROR = {31, 0x1};
const bitmask MSM6800_STATUS_OP_STATUS = {0, 0x7};
const bitmask MSM6800_STATUS_OP_ERR = {3, 0x1};
const bitmask MSM6800_STATUS_CORRECTABLE_ERROR = {4, 0x1};
const bitmask MSM6800_STATUS_READY_BUSY_N = {5, 0x1};
const bitmask MSM6800_STATUS_ECC_SELF_ERR = {6, 0x1};
const bitmask MSM6800_STATUS_WRITE_OP_RESULT = {7, 0x1};
const bitmask MSM6800_STATUS_OP_FAILURE = {0, 0x88};
const bitmask MSM6800_STATUS_READY_BUSY_N_STATUS = {13, 0x1};
const bitmask MSM6800_STATUS_WRITE_PROTECT = {14, 0x1};
const bitmask MSM6800_STATUS_NAND_AUTOPROBE_DONE = {15, 0x1};
const bitmask MSM6800_STATUS_NAND_AUTOPROBE_ISLARGE = {16, 0x1};
const bitmask MSM6800_STATUS_NAND_AUTOPROBE_IS16BIT = {17, 0x1};
const bitmask MSM6800_STATUS_READ_ERROR = {31, 0x1};
bitmask MSM6800_COMMONCFG_BUFFER_MEM_WRITE_WAIT = {0, 0x1};
bitmask MSM6800_COMMONCFG_ECC_ERR_SELF_DETECT = {1, 0x1};
bitmask MSM6800_COMMONCFG_ECC_HALT_DIS = {2, 0x1};
bitmask MSM6800_COMMONCFG_CLK_HALT_DIS = {3, 0x1};
bitmask MSM6800_COMMONCFG_NAND_SEL = {4, 0x1};
bitmask MSM6800_COMMONCFG_DM_EN = {5, 0x1};
bitmask MSM6800_COMMONCFG_NAND_AUTOPROBE = {6, 0x1};
const bitmask MSM6800_COMMONCFG_BUFFER_MEM_WRITE_WAIT = {0, 0x1};
const bitmask MSM6800_COMMONCFG_ECC_ERR_SELF_DETECT = {1, 0x1};
const bitmask MSM6800_COMMONCFG_ECC_HALT_DIS = {2, 0x1};
const bitmask MSM6800_COMMONCFG_CLK_HALT_DIS = {3, 0x1};
const bitmask MSM6800_COMMONCFG_NAND_SEL = {4, 0x1};
const bitmask MSM6800_COMMONCFG_DM_EN = {5, 0x1};
const bitmask MSM6800_COMMONCFG_NAND_AUTOPROBE = {6, 0x1};
bitmask MSM6800_FLASH_NAND_DEVID = {0, 0xff};
bitmask MSM6800_FLASH_NAND_MFRID = {8, 0xff};
bitmask MSM6800_FLASH_NAND_EXTID = {16, 0xff};
const bitmask MSM6800_FLASH_NAND_DEVID = {0, 0xff};
const bitmask MSM6800_FLASH_NAND_MFRID = {8, 0xff};
const bitmask MSM6800_FLASH_NAND_EXTID = {16, 0xff};
bitmask MSM6800_CONFIG1_ECC_DISABLED = {0, 0x1};
bitmask MSM6800_CONFIG1_BUSFREE_SUPPORT_SELECT = {1, 0x1};
bitmask MSM6800_CONFIG1_NAND_SIZE = {2, 0xf};
bitmask MSM6800_CONFIG1_PAGE_IS_2KB = {6, 0x1};
bitmask MSM6800_CONFIG1_WIDE_NAND = {7, 0x1};
bitmask MSM6800_CONFIG1_NAND_RECOVERY_CYCLE = {8, 0x7};
const bitmask MSM6800_CONFIG1_ECC_DISABLED = {0, 0x1};
const bitmask MSM6800_CONFIG1_BUSFREE_SUPPORT_SELECT = {1, 0x1};
const bitmask MSM6800_CONFIG1_NAND_SIZE = {2, 0xf};
const bitmask MSM6800_CONFIG1_PAGE_IS_2KB = {6, 0x1};
const bitmask MSM6800_CONFIG1_WIDE_NAND = {7, 0x1};
const bitmask MSM6800_CONFIG1_NAND_RECOVERY_CYCLE = {8, 0x7};
bitmask MSM6800_CONFIG2_ID_RD_HOLD = {0, 0x1f};
bitmask MSM6800_CONFIG2_RD_HOLD = {5, 0x1f};
bitmask MSM6800_CONFIG2_RD_SETUP = {10, 0x1f};
bitmask MSM6800_CONFIG2_WR_HOLD = {15, 0x1f};
bitmask MSM6800_CONFIG2_WR_SETUP = {20, 0x1f};
bitmask MSM6800_CONFIG2_WR_CS_SETUP = {25, 0x1f};
const bitmask MSM6800_CONFIG2_ID_RD_HOLD = {0, 0x1f};
const bitmask MSM6800_CONFIG2_RD_HOLD = {5, 0x1f};
const bitmask MSM6800_CONFIG2_RD_SETUP = {10, 0x1f};
const bitmask MSM6800_CONFIG2_WR_HOLD = {15, 0x1f};
const bitmask MSM6800_CONFIG2_WR_SETUP = {20, 0x1f};
const bitmask MSM6800_CONFIG2_WR_CS_SETUP = {25, 0x1f};

View file

@ -68,18 +68,18 @@
#define MSM7200_CMD_STATUS 0x0C
#define MSM7200_CMD_RESET_NAND 0x0D
bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_LAST = {26, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_SEQ = {25, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_EN_READ_CACHE_NEXT_CMD = {24, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_EN_PROGRAM_PAGE_CACHE_NEXT_CMD = {20, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_EXTENDED_FETCH_ID = {19, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_INTR_STATUS = {18, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_HOST_CFG = {17, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT_DATA_XFR_SIZE = {7, 0x3ff};
bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT = {6, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_LAST_PAGE = {5, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_PAGE_ACC = {4, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_OP_CMD = {0, 0xf};
const bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_LAST = {26, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_SEQ = {25, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_EN_READ_CACHE_NEXT_CMD = {24, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_EN_PROGRAM_PAGE_CACHE_NEXT_CMD = {20, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_EXTENDED_FETCH_ID = {19, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_INTR_STATUS = {18, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_HOST_CFG = {17, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT_DATA_XFR_SIZE = {7, 0x3ff};
const bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_LAST_PAGE = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_PAGE_ACC = {4, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_OP_CMD = {0, 0xf};
#define MSM7200_NAND_FLASH_CMD_PAGE_ACC_NON_PAGE_ACCESS_COMMAND 0
#define MSM7200_NAND_FLASH_CMD_PAGE_ACC_PAGE_ACCESS_COMMAND 1
@ -99,14 +99,14 @@ bitmask MSM7200_NAND_FLASH_CMD_OP_CMD = {0, 0xf};
#define MSM7200_NAND_FLASH_CMD_OP_CMD_RESERVED_E 14
#define MSM7200_NAND_FLASH_CMD_OP_CMD_RESERVED_F 15
bitmask MSM7200_NAND_ADDR0_DEV_ADDR0 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR1_DEV_ADDR1 = {0, 0xffffffff};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_RESET_XFR_STEP_LOAD_DONE_STATUS = {6, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_XFR_STEP2_SAFE_REG_EN = {5, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_ONE_NAND_EN = {3, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_DM_EN = {2, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_PARTIAL_XFR = {1, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL = {0, 0x1};
const bitmask MSM7200_NAND_ADDR0_DEV_ADDR0 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR1_DEV_ADDR1 = {0, 0xffffffff};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_RESET_XFR_STEP_LOAD_DONE_STATUS = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_XFR_STEP2_SAFE_REG_EN = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_ONE_NAND_EN = {3, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_DM_EN = {2, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_PARTIAL_XFR = {1, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL = {0, 0x1};
#define MSM7200_NAND_FLASH_CHIP_SELECT_XFR_STEP2_SAFE_REG_EN_DYNAMICALLY_CHANGING_THE_XFR_STEP2_IS_ENABLED 1
#define MSM7200_NAND_FLASH_CHIP_SELECT_PARTIAL_XFR_DISABLE 0
@ -114,20 +114,20 @@ bitmask MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL = {0, 0x1};
#define MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL_NAND_CS0_IS_SELECTED 0
#define MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL_NAND_CS1_IS_SELECTED 1
bitmask MSM7200_NANDC_EXEC_CMD_EXEC_CMD = {0, 0x1};
const bitmask MSM7200_NANDC_EXEC_CMD_EXEC_CMD = {0, 0x1};
#define MSM7200_NANDC_EXEC_CMD_EXEC_CMD_EXECUTE_THE_COMMAND 1
bitmask MSM7200_NAND_FLASH_STATUS_DEV_STATUS = {16, 0xffff};
bitmask MSM7200_NAND_FLASH_STATUS_CODEWORD_CNTR = {12, 0xf};
bitmask MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE = {11, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_FIELD_512BYTE_DEVICE = {10, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_AUTO_DETECT_DONE = {9, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_MPU_ERROR = {8, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_PROG_ERASE_OP_RESULT = {7, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_NANDC_TIMEOUT_ERR = {6, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_READY_BSY_N = {5, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_OP_ERR = {4, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_OPER_STATUS = {0, 0xf};
const bitmask MSM7200_NAND_FLASH_STATUS_DEV_STATUS = {16, 0xffff};
const bitmask MSM7200_NAND_FLASH_STATUS_CODEWORD_CNTR = {12, 0xf};
const bitmask MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE = {11, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_FIELD_512BYTE_DEVICE = {10, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_AUTO_DETECT_DONE = {9, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_MPU_ERROR = {8, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_PROG_ERASE_OP_RESULT = {7, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_NANDC_TIMEOUT_ERR = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_READY_BSY_N = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_OP_ERR = {4, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_OPER_STATUS = {0, 0xf};
#define MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE_NOT_A_2K_BYTE_PAGE_DEVICE 0
#define MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE_ENUM_2K_BYTE_PAGE_DEVICE 1
@ -154,19 +154,19 @@ bitmask MSM7200_NAND_FLASH_STATUS_OPER_STATUS = {0, 0xf};
#define MSM7200_NAND_FLASH_STATUS_OPER_STATUS_CHECK_STATUS 12
#define MSM7200_NAND_FLASH_STATUS_OPER_STATUS_RESET_FLASH_DEVICE 13
bitmask MSM7200_NANDC_BUFFER_STATUS_BAD_BLOCK_STATUS = {16, 0xffff};
bitmask MSM7200_NANDC_BUFFER_STATUS_XFR_STEP2_REG_UPDATE_DONE = {9, 0x1};
bitmask MSM7200_NANDC_BUFFER_STATUS_UNCORRECTABLE = {8, 0x1};
bitmask MSM7200_NANDC_BUFFER_STATUS_NUM_ERRORS = {0, 0x1f};
bitmask MSM7200_NAND_DEV_CFG0_SET_RD_MODE_AFTER_STATUS = {31, 0x1};
bitmask MSM7200_NAND_DEV_CFG0_STATUS_BFR_READ = {30, 0x1};
bitmask MSM7200_NAND_DEV_CFG0_NUM_ADDR_CYCLES = {27, 0x7};
bitmask MSM7200_NAND_DEV_CFG0_SPARE_SIZE_BYTES = {23, 0xf};
bitmask MSM7200_NAND_DEV_CFG0_ECC_PARITY_SIZE_BYTES = {19, 0xf};
bitmask MSM7200_NAND_DEV_CFG0_UD_SIZE_BYTES = {9, 0x3ff};
bitmask MSM7200_NAND_DEV_CFG0_CW_PER_PAGE = {6, 0x7};
bitmask MSM7200_NAND_DEV_CFG0_ROW_ADDR_CYCLES = {3, 0x7};
bitmask MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES = {0, 0x7};
const bitmask MSM7200_NANDC_BUFFER_STATUS_BAD_BLOCK_STATUS = {16, 0xffff};
const bitmask MSM7200_NANDC_BUFFER_STATUS_XFR_STEP2_REG_UPDATE_DONE = {9, 0x1};
const bitmask MSM7200_NANDC_BUFFER_STATUS_UNCORRECTABLE = {8, 0x1};
const bitmask MSM7200_NANDC_BUFFER_STATUS_NUM_ERRORS = {0, 0x1f};
const bitmask MSM7200_NAND_DEV_CFG0_SET_RD_MODE_AFTER_STATUS = {31, 0x1};
const bitmask MSM7200_NAND_DEV_CFG0_STATUS_BFR_READ = {30, 0x1};
const bitmask MSM7200_NAND_DEV_CFG0_NUM_ADDR_CYCLES = {27, 0x7};
const bitmask MSM7200_NAND_DEV_CFG0_SPARE_SIZE_BYTES = {23, 0xf};
const bitmask MSM7200_NAND_DEV_CFG0_ECC_PARITY_SIZE_BYTES = {19, 0xf};
const bitmask MSM7200_NAND_DEV_CFG0_UD_SIZE_BYTES = {9, 0x3ff};
const bitmask MSM7200_NAND_DEV_CFG0_CW_PER_PAGE = {6, 0x7};
const bitmask MSM7200_NAND_DEV_CFG0_ROW_ADDR_CYCLES = {3, 0x7};
const bitmask MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES = {0, 0x7};
#define MSM7200_NAND_DEV_CFG0_NUM_ADDR_CYCLES_NO_ADDRESS_CYCLES 0
#define MSM7200_NAND_DEV_CFG0_CW_PER_PAGE__1_CODEWORD_PER_PAGE 0
@ -180,18 +180,18 @@ bitmask MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES = {0, 0x7};
#define MSM7200_NAND_DEV_CFG0_ROW_ADDR_CYCLES_NO_ROW_ADDRESS_CYCLES 0
#define MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES_NO_COLUMN_ADDRESS_CYCLES 0
bitmask MSM7200_NAND_DEV_CFG1_ECC_MODE = {28, 0x3};
bitmask MSM7200_NAND_DEV_CFG1_ENABLE_BCH_ECC = {27, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_DISABLE_ECC_RESET_AFTER_OPDONE = {25, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_ECC_DECODER_CGC_EN = {24, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_ECC_ENCODER_CGC_EN = {23, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP = {17, 0x3f};
bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_IN_SPARE_AREA = {16, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_BYTE_NUM = {6, 0x3ff};
bitmask MSM7200_NAND_DEV_CFG1_CS_ACTIVE_BSY = {5, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_NAND_RECOVERY_CYCLES = {2, 0x7};
bitmask MSM7200_NAND_DEV_CFG1_WIDE_FLASH = {1, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_ECC_DISABLE = {0, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_MODE = {28, 0x3};
const bitmask MSM7200_NAND_DEV_CFG1_ENABLE_BCH_ECC = {27, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_DISABLE_ECC_RESET_AFTER_OPDONE = {25, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_DECODER_CGC_EN = {24, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_ENCODER_CGC_EN = {23, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP = {17, 0x3f};
const bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_IN_SPARE_AREA = {16, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_BYTE_NUM = {6, 0x3ff};
const bitmask MSM7200_NAND_DEV_CFG1_CS_ACTIVE_BSY = {5, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_NAND_RECOVERY_CYCLES = {2, 0x7};
const bitmask MSM7200_NAND_DEV_CFG1_WIDE_FLASH = {1, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_DISABLE = {0, 0x1};
#define MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP_ENUM_2_CLOCK_CYCLE_GAP 0
#define MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP_ENUM_4_CLOCK_CYCLES_GAP 1
@ -210,57 +210,57 @@ bitmask MSM7200_NAND_DEV_CFG1_ECC_DISABLE = {0, 0x1};
#define MSM7200_NAND_DEV_CFG1_WIDE_FLASH_ENUM_8_BIT_DATA_BUS 0
#define MSM7200_NAND_DEV_CFG1_WIDE_FLASH_ENUM_16_BIT_DATA_BUS 1
bitmask MSM7200_NAND_FLASH_READ_ID_READ_ID = {0, 0xffffffff};
bitmask MSM7200_NAND_FLASH_READ_STATUS_ECC_STATUS = {16, 0xffff};
bitmask MSM7200_NAND_FLASH_READ_STATUS_DEV_STATUS = {0, 0xffff};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_DATA_IN = {0, 0xffffffff};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT = {16, 0xffff};
bitmask MSM7200_NAND_FLASH_CONFIG_ADDR_OUT = {14, 0x3};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT_EN = {13, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN = {10, 0x7};
bitmask MSM7200_NAND_FLASH_CONFIG_CS5_N = {9, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS4_N = {8, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS3_N = {7, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS2_N = {6, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS1_N = {5, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS0_N = {4, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_ALE = {3, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CLE = {2, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_WE_N = {1, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_RE_N = {0, 0x1};
const bitmask MSM7200_NAND_FLASH_READ_ID_READ_ID = {0, 0xffffffff};
const bitmask MSM7200_NAND_FLASH_READ_STATUS_ECC_STATUS = {16, 0xffff};
const bitmask MSM7200_NAND_FLASH_READ_STATUS_DEV_STATUS = {0, 0xffff};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_DATA_IN = {0, 0xffffffff};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT = {16, 0xffff};
const bitmask MSM7200_NAND_FLASH_CONFIG_ADDR_OUT = {14, 0x3};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT_EN = {13, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN = {10, 0x7};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS5_N = {9, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS4_N = {8, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS3_N = {7, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS2_N = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS1_N = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS0_N = {4, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_ALE = {3, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CLE = {2, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_WE_N = {1, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_RE_N = {0, 0x1};
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_DONT_READ 0
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_WRITE_NAND_FLASH_CONFIG_DATA_15_0 1
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_WRITE_NAND_FLASH_CONFIG_DATA_31_16 2
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_WRITE_NAND_FLASH_READ_STATUS_15_0 3
bitmask MSM7200_NAND_FLASH_CONFIG_MODE_CONFIG_ACC = {0, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_STATUS_CONFIG_MODE = {0, 0x1};
bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_ADDR_BUS_HOLD_CYCLE = {19, 0x1};
bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_DATA_START_ADDR = {0, 0xffff};
bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO1 = {14, 0x3f};
bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO0 = {0, 0x3fff};
bitmask MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER = {30, 0x3};
bitmask MSM7200_FLASH_XFR_STEP_CMD_STEP1_WAIT = {26, 0xf};
bitmask MSM7200_FLASH_XFR_STEP_CMD_AOUT_EN = {25, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_DATA_EN = {24, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_CE_EN = {23, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_CLE_EN = {22, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_ALE_PIN = {21, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_WE_EN = {20, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_RE_EN = {19, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_WIDE = {18, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_SEQ_STEP_NUMBER = {14, 0x3};
bitmask MSM7200_FLASH_XFR_STEP_DATA_STEP1_WAIT = {10, 0xf};
bitmask MSM7200_FLASH_XFR_STEP_DATA_AOUT_EN = {9, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_DATA_EN = {8, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_CE_EN = {7, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_CLE_EN = {6, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_ALE_PIN = {5, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_WE_EN = {4, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_RE_EN = {3, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_WIDE = {2, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_EXTA_READ_WAIT = {0, 0x3};
const bitmask MSM7200_NAND_FLASH_CONFIG_MODE_CONFIG_ACC = {0, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_STATUS_CONFIG_MODE = {0, 0x1};
const bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_ADDR_BUS_HOLD_CYCLE = {19, 0x1};
const bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_DATA_START_ADDR = {0, 0xffff};
const bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO1 = {14, 0x3f};
const bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO0 = {0, 0x3fff};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER = {30, 0x3};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_STEP1_WAIT = {26, 0xf};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_AOUT_EN = {25, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_DATA_EN = {24, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_CE_EN = {23, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_CLE_EN = {22, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_ALE_PIN = {21, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_WE_EN = {20, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_RE_EN = {19, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_WIDE = {18, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_SEQ_STEP_NUMBER = {14, 0x3};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_STEP1_WAIT = {10, 0xf};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_AOUT_EN = {9, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_DATA_EN = {8, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_CE_EN = {7, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_CLE_EN = {6, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_ALE_PIN = {5, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_WE_EN = {4, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_RE_EN = {3, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_WIDE = {2, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_EXTA_READ_WAIT = {0, 0x3};
#define MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER_SIMPLE_STEP 0
#define MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER_LOOP_START 1
@ -302,42 +302,42 @@ bitmask MSM7200_FLASH_XFR_STEP_EXTA_READ_WAIT = {0, 0x3};
#define MSM7200_FLASH_XFR_STEP_DATA_WIDE_USE_8_BIT_DATA_BUS_FOR_DATA 0
#define MSM7200_FLASH_XFR_STEP_DATA_WIDE_USE16_BIT_DATA_BUS_FOR_DATA 1
bitmask MSM7200_FLASH_DEV_CMD_WRITE_START = {24, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_WRITE_ADDR = {16, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_ERASE_START = {8, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_ERASE_ADDR = {0, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_WRITE_START = {24, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_WRITE_ADDR = {16, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_ERASE_START = {8, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_ERASE_ADDR = {0, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_PARAMETER_PAGE_CODE = {24, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_VLD_SEQ_READ_START_VLD = {4, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_ERASE_START_VLD = {3, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_WRITE_START_VLD = {2, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_STOP_VLD = {1, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_START_VLD = {0, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_PARAMETER_PAGE_CODE = {24, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_SEQ_READ_START_VLD = {4, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_ERASE_START_VLD = {3, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_WRITE_START_VLD = {2, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_STOP_VLD = {1, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_START_VLD = {0, 0x1};
bitmask MSM7200_EBI2_MISR_SIG_REG_EBI2_MISR_SIG = {0, 0xffffffff};
const bitmask MSM7200_EBI2_MISR_SIG_REG_EBI2_MISR_SIG = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR2_DEV_ADDR2 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR3_DEV_ADDR3 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR4_DEV_ADDR4 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR5_DEV_ADDR5 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR2_DEV_ADDR2 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR3_DEV_ADDR3 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR4_DEV_ADDR4 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR5_DEV_ADDR5 = {0, 0xffffffff};
bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_LAST = {24, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_LAST = {24, 0xff};
bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_SEQ = {16, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_SEQ = {16, 0xff};
bitmask MSM7200_FLASH_DEV_CMD3_WRITE_START_CACHE = {0, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD3_WRITE_START_CACHE = {0, 0xff};
bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD4 = {16, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD3 = {0, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD4 = {16, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD3 = {0, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD6 = {16, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD5 = {0, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD6 = {16, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD5 = {0, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD8 = {16, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD7 = {0, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD8 = {16, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD7 = {0, 0xffff};
bitmask MSM7200_NAND_ADDR6_DEV_ADDR6 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR6_DEV_ADDR6 = {0, 0xffffffff};
bitmask MSM7200_EBI2_ECC_BUF_CFG_NUM_STEPS = {0, 0x3ff};
const bitmask MSM7200_EBI2_ECC_BUF_CFG_NUM_STEPS = {0, 0x3ff};
bitmask MSM7200_FLASH_BUFF0_ACC_BUFF_DATA = {0, 0xffffffff};
const bitmask MSM7200_FLASH_BUFF0_ACC_BUFF_DATA = {0, 0xffffffff};

View file

@ -43,61 +43,61 @@
#define S3C2412_NFSECC 0x3C
/* S3C2410 bits */
bitmask S3C2410_NFCONF_EN = {15, 0x1};
bitmask S3C2410_NFCONF_INITECC = {12, 0x1};
bitmask S3C2410_NFCONF_NFCE = {11, 0x1};
bitmask S3C2410_NFCONF_TACLS = {8, 0x7};
bitmask S3C2410_NFCONF_TWRPH0 = {4, 0x7};
bitmask S3C2410_NFCONF_TWRPH1 = {0, 0x7};
const bitmask S3C2410_NFCONF_EN = {15, 0x1};
const bitmask S3C2410_NFCONF_INITECC = {12, 0x1};
const bitmask S3C2410_NFCONF_NFCE = {11, 0x1};
const bitmask S3C2410_NFCONF_TACLS = {8, 0x7};
const bitmask S3C2410_NFCONF_TWRPH0 = {4, 0x7};
const bitmask S3C2410_NFCONF_TWRPH1 = {0, 0x7};
bitmask S3C2410_NFSTAT_BUSY = {0, 0x1};
const bitmask S3C2410_NFSTAT_BUSY = {0, 0x1};
/* S3C2440 bits */
bitmask S3C2440_2412_NFCONF_BUSWIDTH = {0, 0x1};
const bitmask S3C2440_2412_NFCONF_BUSWIDTH = {0, 0x1};
#define S3C2440_NFCONF_BUSWIDTH_8 0
#define S3C2440_NFCONF_BUSWIDTH_16 1
bitmask S3C2440_2412_NFCONF_TACLS = {12, 0x3};
bitmask S3C2440_2412_NFCONF_TWRPH0 = {8, 0x7};
bitmask S3C2440_2412_NFCONF_TWRPH1 = {4, 0x7};
const bitmask S3C2440_2412_NFCONF_TACLS = {12, 0x3};
const bitmask S3C2440_2412_NFCONF_TWRPH0 = {8, 0x7};
const bitmask S3C2440_2412_NFCONF_TWRPH1 = {4, 0x7};
bitmask S3C2440_NFCONT_LOCKTIGHT = {13, 0x1};
bitmask S3C2440_NFCONT_SOFTLOCK = {12, 0x1};
bitmask S3C2440_NFCONT_ILLEGALACC_EN = {10, 0x1};
bitmask S3C2440_NFCONT_RNBINT_EN = {9, 0x1};
bitmask S3C2440_NFCONT_RN_FALLING = {8, 0x1};
bitmask S3C2440_NFCONT_SPARE_ECCLOCK = {6, 0x1};
bitmask S3C2440_NFCONT_MAIN_ECCLOCK = {5, 0x1};
bitmask S3C2440_NFCONT_INITECC = {4, 0x1};
bitmask S3C2440_NFCONT_NFCE = {1, 0x1};
bitmask S3C2440_2412_NFCONT_ENABLE = {0, 0x1};
const bitmask S3C2440_NFCONT_LOCKTIGHT = {13, 0x1};
const bitmask S3C2440_NFCONT_SOFTLOCK = {12, 0x1};
const bitmask S3C2440_NFCONT_ILLEGALACC_EN = {10, 0x1};
const bitmask S3C2440_NFCONT_RNBINT_EN = {9, 0x1};
const bitmask S3C2440_NFCONT_RN_FALLING = {8, 0x1};
const bitmask S3C2440_NFCONT_SPARE_ECCLOCK = {6, 0x1};
const bitmask S3C2440_NFCONT_MAIN_ECCLOCK = {5, 0x1};
const bitmask S3C2440_NFCONT_INITECC = {4, 0x1};
const bitmask S3C2440_NFCONT_NFCE = {1, 0x1};
const bitmask S3C2440_2412_NFCONT_ENABLE = {0, 0x1};
bitmask S3C2440_NFSTAT_READY = {0, 0x1};
bitmask S3C2440_NFSTAT_NCE = {1, 0x1};
bitmask S3C2440_NFSTAT_RNB_CHANGE = {2, 0x1};
bitmask S3C2440_NFSTAT_ILLEGAL_ACCESS = {3, 0x1};
const bitmask S3C2440_NFSTAT_READY = {0, 0x1};
const bitmask S3C2440_NFSTAT_NCE = {1, 0x1};
const bitmask S3C2440_NFSTAT_RNB_CHANGE = {2, 0x1};
const bitmask S3C2440_NFSTAT_ILLEGAL_ACCESS = {3, 0x1};
/* S3C2412 bits */
bitmask S3C2412_NFCONF_NANDBOOT = {31, 0x1};
bitmask S3C2412_NFCONF_ECCCLKCON = {30, 0x1};
bitmask S3C2412_NFCONF_ECC_MLC = {24, 0x1};
bitmask S3C2412_NFCONT_ECC4_DIRWR = {18, 0x1};
bitmask S3C2412_NFCONT_LOCKTIGHT = {17, 0x1};
bitmask S3C2412_NFCONT_SOFTLOCK = {16, 0x1};
bitmask S3C2412_NFCONT_ECC4_ENCINT = {13, 0x1};
bitmask S3C2412_NFCONT_ECC4_DECINT = {12, 0x1};
bitmask S3C2412_NFCONT_MAIN_ECC_LOCK = {7, 0x1};
bitmask S3C2412_NFCONT_MAIN_SECONDARY_ECC_LOCK = {6, 0x1};
bitmask S3C2412_NFCONT_INIT_MAIN_ECC = {5, 0x1};
bitmask S3C2412_NFCONT_INIT_SECONDARY_ECC = {4, 0x1};
bitmask S3C2412_NFCONT_nFCE1 = {2, 0x1};
bitmask S3C2412_NFCONT_nFCE0 = {1, 0x1};
const bitmask S3C2412_NFCONF_NANDBOOT = {31, 0x1};
const bitmask S3C2412_NFCONF_ECCCLKCON = {30, 0x1};
const bitmask S3C2412_NFCONF_ECC_MLC = {24, 0x1};
const bitmask S3C2412_NFCONT_ECC4_DIRWR = {18, 0x1};
const bitmask S3C2412_NFCONT_LOCKTIGHT = {17, 0x1};
const bitmask S3C2412_NFCONT_SOFTLOCK = {16, 0x1};
const bitmask S3C2412_NFCONT_ECC4_ENCINT = {13, 0x1};
const bitmask S3C2412_NFCONT_ECC4_DECINT = {12, 0x1};
const bitmask S3C2412_NFCONT_MAIN_ECC_LOCK = {7, 0x1};
const bitmask S3C2412_NFCONT_MAIN_SECONDARY_ECC_LOCK = {6, 0x1};
const bitmask S3C2412_NFCONT_INIT_MAIN_ECC = {5, 0x1};
const bitmask S3C2412_NFCONT_INIT_SECONDARY_ECC = {4, 0x1};
const bitmask S3C2412_NFCONT_nFCE1 = {2, 0x1};
const bitmask S3C2412_NFCONT_nFCE0 = {1, 0x1};
bitmask S3C2412_NFSTAT_ECC_ENCDONE = {7, 0x1};
bitmask S3C2412_NFSTAT_ECC_DECDONE = {6, 0x1};
bitmask S3C2412_NFSTAT_ILLEGAL_ACCESS = {5, 0x1};
bitmask S3C2412_NFSTAT_RnB_CHANGE = {4, 0x1};
bitmask S3C2412_NFSTAT_nFCE1 = {3, 0x1};
bitmask S3C2412_NFSTAT_nFCE0 = {2, 0x1};
bitmask S3C2412_NFSTAT_Res1 = {1, 0x1};
bitmask S3C2412_NFSTAT_READY = {0, 0x1};
const bitmask S3C2412_NFSTAT_ECC_ENCDONE = {7, 0x1};
const bitmask S3C2412_NFSTAT_ECC_DECDONE = {6, 0x1};
const bitmask S3C2412_NFSTAT_ILLEGAL_ACCESS = {5, 0x1};
const bitmask S3C2412_NFSTAT_RnB_CHANGE = {4, 0x1};
const bitmask S3C2412_NFSTAT_nFCE1 = {3, 0x1};
const bitmask S3C2412_NFSTAT_nFCE0 = {2, 0x1};
const bitmask S3C2412_NFSTAT_Res1 = {1, 0x1};
const bitmask S3C2412_NFSTAT_READY = {0, 0x1};

View file

@ -2,7 +2,7 @@
#include "controller/controller.h"
#include "dcc/dn_dcc_proto.h"
nand_info flash_ids[] = {
const nand_info flash_ids[] = {
{0x6e, 0x100, 0x100000, 0x1000, 8},
{0x64, 0x100, 0x200000, 0x1000, 8},
{0xe8, 0x100, 0x100000, 0x1000, 8},

View file

@ -68,18 +68,18 @@
#define MSM7200_CMD_STATUS 0x0C
#define MSM7200_CMD_RESET_NAND 0x0D
bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_LAST = {26, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_SEQ = {25, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_EN_READ_CACHE_NEXT_CMD = {24, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_EN_PROGRAM_PAGE_CACHE_NEXT_CMD = {20, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_EXTENDED_FETCH_ID = {19, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_INTR_STATUS = {18, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_HOST_CFG = {17, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT_DATA_XFR_SIZE = {7, 0x3ff};
bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT = {6, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_LAST_PAGE = {5, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_PAGE_ACC = {4, 0x1};
bitmask MSM7200_NAND_FLASH_CMD_OP_CMD = {0, 0xf};
const bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_LAST = {26, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_READ_CACHE_SEQ = {25, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_EN_READ_CACHE_NEXT_CMD = {24, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_EN_PROGRAM_PAGE_CACHE_NEXT_CMD = {20, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_EXTENDED_FETCH_ID = {19, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_INTR_STATUS = {18, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_ONE_NAND_HOST_CFG = {17, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT_DATA_XFR_SIZE = {7, 0x3ff};
const bitmask MSM7200_NAND_FLASH_CMD_AUTO_DETECT = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_LAST_PAGE = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_PAGE_ACC = {4, 0x1};
const bitmask MSM7200_NAND_FLASH_CMD_OP_CMD = {0, 0xf};
#define MSM7200_NAND_FLASH_CMD_PAGE_ACC_NON_PAGE_ACCESS_COMMAND 0
#define MSM7200_NAND_FLASH_CMD_PAGE_ACC_PAGE_ACCESS_COMMAND 1
@ -99,14 +99,14 @@ bitmask MSM7200_NAND_FLASH_CMD_OP_CMD = {0, 0xf};
#define MSM7200_NAND_FLASH_CMD_OP_CMD_RESERVED_E 14
#define MSM7200_NAND_FLASH_CMD_OP_CMD_RESERVED_F 15
bitmask MSM7200_NAND_ADDR0_DEV_ADDR0 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR1_DEV_ADDR1 = {0, 0xffffffff};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_RESET_XFR_STEP_LOAD_DONE_STATUS = {6, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_XFR_STEP2_SAFE_REG_EN = {5, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_ONE_NAND_EN = {3, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_DM_EN = {2, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_PARTIAL_XFR = {1, 0x1};
bitmask MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL = {0, 0x1};
const bitmask MSM7200_NAND_ADDR0_DEV_ADDR0 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR1_DEV_ADDR1 = {0, 0xffffffff};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_RESET_XFR_STEP_LOAD_DONE_STATUS = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_XFR_STEP2_SAFE_REG_EN = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_ONE_NAND_EN = {3, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_DM_EN = {2, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_PARTIAL_XFR = {1, 0x1};
const bitmask MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL = {0, 0x1};
#define MSM7200_NAND_FLASH_CHIP_SELECT_XFR_STEP2_SAFE_REG_EN_DYNAMICALLY_CHANGING_THE_XFR_STEP2_IS_ENABLED 1
#define MSM7200_NAND_FLASH_CHIP_SELECT_PARTIAL_XFR_DISABLE 0
@ -114,20 +114,20 @@ bitmask MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL = {0, 0x1};
#define MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL_NAND_CS0_IS_SELECTED 0
#define MSM7200_NAND_FLASH_CHIP_SELECT_NAND_DEV_SEL_NAND_CS1_IS_SELECTED 1
bitmask MSM7200_NANDC_EXEC_CMD_EXEC_CMD = {0, 0x1};
const bitmask MSM7200_NANDC_EXEC_CMD_EXEC_CMD = {0, 0x1};
#define MSM7200_NANDC_EXEC_CMD_EXEC_CMD_EXECUTE_THE_COMMAND 1
bitmask MSM7200_NAND_FLASH_STATUS_DEV_STATUS = {16, 0xffff};
bitmask MSM7200_NAND_FLASH_STATUS_CODEWORD_CNTR = {12, 0xf};
bitmask MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE = {11, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_FIELD_512BYTE_DEVICE = {10, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_AUTO_DETECT_DONE = {9, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_MPU_ERROR = {8, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_PROG_ERASE_OP_RESULT = {7, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_NANDC_TIMEOUT_ERR = {6, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_READY_BSY_N = {5, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_OP_ERR = {4, 0x1};
bitmask MSM7200_NAND_FLASH_STATUS_OPER_STATUS = {0, 0xf};
const bitmask MSM7200_NAND_FLASH_STATUS_DEV_STATUS = {16, 0xffff};
const bitmask MSM7200_NAND_FLASH_STATUS_CODEWORD_CNTR = {12, 0xf};
const bitmask MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE = {11, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_FIELD_512BYTE_DEVICE = {10, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_AUTO_DETECT_DONE = {9, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_MPU_ERROR = {8, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_PROG_ERASE_OP_RESULT = {7, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_NANDC_TIMEOUT_ERR = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_READY_BSY_N = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_OP_ERR = {4, 0x1};
const bitmask MSM7200_NAND_FLASH_STATUS_OPER_STATUS = {0, 0xf};
#define MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE_NOT_A_2K_BYTE_PAGE_DEVICE 0
#define MSM7200_NAND_FLASH_STATUS_FIELD_2KBYTE_DEVICE_ENUM_2K_BYTE_PAGE_DEVICE 1
@ -154,19 +154,19 @@ bitmask MSM7200_NAND_FLASH_STATUS_OPER_STATUS = {0, 0xf};
#define MSM7200_NAND_FLASH_STATUS_OPER_STATUS_CHECK_STATUS 12
#define MSM7200_NAND_FLASH_STATUS_OPER_STATUS_RESET_FLASH_DEVICE 13
bitmask MSM7200_NANDC_BUFFER_STATUS_BAD_BLOCK_STATUS = {16, 0xffff};
bitmask MSM7200_NANDC_BUFFER_STATUS_XFR_STEP2_REG_UPDATE_DONE = {9, 0x1};
bitmask MSM7200_NANDC_BUFFER_STATUS_UNCORRECTABLE = {8, 0x1};
bitmask MSM7200_NANDC_BUFFER_STATUS_NUM_ERRORS = {0, 0x1f};
bitmask MSM7200_NAND_DEV_CFG0_SET_RD_MODE_AFTER_STATUS = {31, 0x1};
bitmask MSM7200_NAND_DEV_CFG0_STATUS_BFR_READ = {30, 0x1};
bitmask MSM7200_NAND_DEV_CFG0_NUM_ADDR_CYCLES = {27, 0x7};
bitmask MSM7200_NAND_DEV_CFG0_SPARE_SIZE_BYTES = {23, 0xf};
bitmask MSM7200_NAND_DEV_CFG0_ECC_PARITY_SIZE_BYTES = {19, 0xf};
bitmask MSM7200_NAND_DEV_CFG0_UD_SIZE_BYTES = {9, 0x3ff};
bitmask MSM7200_NAND_DEV_CFG0_CW_PER_PAGE = {6, 0x7};
bitmask MSM7200_NAND_DEV_CFG0_ROW_ADDR_CYCLES = {3, 0x7};
bitmask MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES = {0, 0x7};
const bitmask MSM7200_NANDC_BUFFER_STATUS_BAD_BLOCK_STATUS = {16, 0xffff};
const bitmask MSM7200_NANDC_BUFFER_STATUS_XFR_STEP2_REG_UPDATE_DONE = {9, 0x1};
const bitmask MSM7200_NANDC_BUFFER_STATUS_UNCORRECTABLE = {8, 0x1};
const bitmask MSM7200_NANDC_BUFFER_STATUS_NUM_ERRORS = {0, 0x1f};
const bitmask MSM7200_NAND_DEV_CFG0_SET_RD_MODE_AFTER_STATUS = {31, 0x1};
const bitmask MSM7200_NAND_DEV_CFG0_STATUS_BFR_READ = {30, 0x1};
const bitmask MSM7200_NAND_DEV_CFG0_NUM_ADDR_CYCLES = {27, 0x7};
const bitmask MSM7200_NAND_DEV_CFG0_SPARE_SIZE_BYTES = {23, 0xf};
const bitmask MSM7200_NAND_DEV_CFG0_ECC_PARITY_SIZE_BYTES = {19, 0xf};
const bitmask MSM7200_NAND_DEV_CFG0_UD_SIZE_BYTES = {9, 0x3ff};
const bitmask MSM7200_NAND_DEV_CFG0_CW_PER_PAGE = {6, 0x7};
const bitmask MSM7200_NAND_DEV_CFG0_ROW_ADDR_CYCLES = {3, 0x7};
const bitmask MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES = {0, 0x7};
#define MSM7200_NAND_DEV_CFG0_NUM_ADDR_CYCLES_NO_ADDRESS_CYCLES 0
#define MSM7200_NAND_DEV_CFG0_CW_PER_PAGE__1_CODEWORD_PER_PAGE 0
@ -180,18 +180,18 @@ bitmask MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES = {0, 0x7};
#define MSM7200_NAND_DEV_CFG0_ROW_ADDR_CYCLES_NO_ROW_ADDRESS_CYCLES 0
#define MSM7200_NAND_DEV_CFG0_COL_ADDR_CYCLES_NO_COLUMN_ADDRESS_CYCLES 0
bitmask MSM7200_NAND_DEV_CFG1_ECC_MODE = {28, 0x3};
bitmask MSM7200_NAND_DEV_CFG1_ENABLE_BCH_ECC = {27, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_DISABLE_ECC_RESET_AFTER_OPDONE = {25, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_ECC_DECODER_CGC_EN = {24, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_ECC_ENCODER_CGC_EN = {23, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP = {17, 0x3f};
bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_IN_SPARE_AREA = {16, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_BYTE_NUM = {6, 0x3ff};
bitmask MSM7200_NAND_DEV_CFG1_CS_ACTIVE_BSY = {5, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_NAND_RECOVERY_CYCLES = {2, 0x7};
bitmask MSM7200_NAND_DEV_CFG1_WIDE_FLASH = {1, 0x1};
bitmask MSM7200_NAND_DEV_CFG1_ECC_DISABLE = {0, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_MODE = {28, 0x3};
const bitmask MSM7200_NAND_DEV_CFG1_ENABLE_BCH_ECC = {27, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_DISABLE_ECC_RESET_AFTER_OPDONE = {25, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_DECODER_CGC_EN = {24, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_ENCODER_CGC_EN = {23, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP = {17, 0x3f};
const bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_IN_SPARE_AREA = {16, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_BAD_BLOCK_BYTE_NUM = {6, 0x3ff};
const bitmask MSM7200_NAND_DEV_CFG1_CS_ACTIVE_BSY = {5, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_NAND_RECOVERY_CYCLES = {2, 0x7};
const bitmask MSM7200_NAND_DEV_CFG1_WIDE_FLASH = {1, 0x1};
const bitmask MSM7200_NAND_DEV_CFG1_ECC_DISABLE = {0, 0x1};
#define MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP_ENUM_2_CLOCK_CYCLE_GAP 0
#define MSM7200_NAND_DEV_CFG1_WR_RD_BSY_GAP_ENUM_4_CLOCK_CYCLES_GAP 1
@ -210,57 +210,57 @@ bitmask MSM7200_NAND_DEV_CFG1_ECC_DISABLE = {0, 0x1};
#define MSM7200_NAND_DEV_CFG1_WIDE_FLASH_ENUM_8_BIT_DATA_BUS 0
#define MSM7200_NAND_DEV_CFG1_WIDE_FLASH_ENUM_16_BIT_DATA_BUS 1
bitmask MSM7200_NAND_FLASH_READ_ID_READ_ID = {0, 0xffffffff};
bitmask MSM7200_NAND_FLASH_READ_STATUS_ECC_STATUS = {16, 0xffff};
bitmask MSM7200_NAND_FLASH_READ_STATUS_DEV_STATUS = {0, 0xffff};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_DATA_IN = {0, 0xffffffff};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT = {16, 0xffff};
bitmask MSM7200_NAND_FLASH_CONFIG_ADDR_OUT = {14, 0x3};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT_EN = {13, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN = {10, 0x7};
bitmask MSM7200_NAND_FLASH_CONFIG_CS5_N = {9, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS4_N = {8, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS3_N = {7, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS2_N = {6, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS1_N = {5, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CS0_N = {4, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_ALE = {3, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_CLE = {2, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_WE_N = {1, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_RE_N = {0, 0x1};
const bitmask MSM7200_NAND_FLASH_READ_ID_READ_ID = {0, 0xffffffff};
const bitmask MSM7200_NAND_FLASH_READ_STATUS_ECC_STATUS = {16, 0xffff};
const bitmask MSM7200_NAND_FLASH_READ_STATUS_DEV_STATUS = {0, 0xffff};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_DATA_IN = {0, 0xffffffff};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT = {16, 0xffff};
const bitmask MSM7200_NAND_FLASH_CONFIG_ADDR_OUT = {14, 0x3};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_OUT_EN = {13, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN = {10, 0x7};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS5_N = {9, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS4_N = {8, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS3_N = {7, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS2_N = {6, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS1_N = {5, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CS0_N = {4, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_ALE = {3, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_CLE = {2, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_WE_N = {1, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_RE_N = {0, 0x1};
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_DONT_READ 0
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_WRITE_NAND_FLASH_CONFIG_DATA_15_0 1
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_WRITE_NAND_FLASH_CONFIG_DATA_31_16 2
#define MSM7200_NAND_FLASH_CONFIG_DATA_IN_EN_WRITE_NAND_FLASH_READ_STATUS_15_0 3
bitmask MSM7200_NAND_FLASH_CONFIG_MODE_CONFIG_ACC = {0, 0x1};
bitmask MSM7200_NAND_FLASH_CONFIG_STATUS_CONFIG_MODE = {0, 0x1};
bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_ADDR_BUS_HOLD_CYCLE = {19, 0x1};
bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_DATA_START_ADDR = {0, 0xffff};
bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO1 = {14, 0x3f};
bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO0 = {0, 0x3fff};
bitmask MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER = {30, 0x3};
bitmask MSM7200_FLASH_XFR_STEP_CMD_STEP1_WAIT = {26, 0xf};
bitmask MSM7200_FLASH_XFR_STEP_CMD_AOUT_EN = {25, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_DATA_EN = {24, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_CE_EN = {23, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_CLE_EN = {22, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_ALE_PIN = {21, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_WE_EN = {20, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_RE_EN = {19, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_CMD_WIDE = {18, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_SEQ_STEP_NUMBER = {14, 0x3};
bitmask MSM7200_FLASH_XFR_STEP_DATA_STEP1_WAIT = {10, 0xf};
bitmask MSM7200_FLASH_XFR_STEP_DATA_AOUT_EN = {9, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_DATA_EN = {8, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_CE_EN = {7, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_CLE_EN = {6, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_ALE_PIN = {5, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_WE_EN = {4, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_RE_EN = {3, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_DATA_WIDE = {2, 0x1};
bitmask MSM7200_FLASH_XFR_STEP_EXTA_READ_WAIT = {0, 0x3};
const bitmask MSM7200_NAND_FLASH_CONFIG_MODE_CONFIG_ACC = {0, 0x1};
const bitmask MSM7200_NAND_FLASH_CONFIG_STATUS_CONFIG_MODE = {0, 0x1};
const bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_ADDR_BUS_HOLD_CYCLE = {19, 0x1};
const bitmask MSM7200_FLASH_MACRO1_REG_QSC6270_DATA_START_ADDR = {0, 0xffff};
const bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO1 = {14, 0x3f};
const bitmask MSM7200_FLASH_MACRO1_REG_FLASH_DATA_MACRO0 = {0, 0x3fff};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER = {30, 0x3};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_STEP1_WAIT = {26, 0xf};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_AOUT_EN = {25, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_DATA_EN = {24, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_CE_EN = {23, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_CLE_EN = {22, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_ALE_PIN = {21, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_WE_EN = {20, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_RE_EN = {19, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_CMD_WIDE = {18, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_SEQ_STEP_NUMBER = {14, 0x3};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_STEP1_WAIT = {10, 0xf};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_AOUT_EN = {9, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_DATA_EN = {8, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_CE_EN = {7, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_CLE_EN = {6, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_ALE_PIN = {5, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_WE_EN = {4, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_RE_EN = {3, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_DATA_WIDE = {2, 0x1};
const bitmask MSM7200_FLASH_XFR_STEP_EXTA_READ_WAIT = {0, 0x3};
#define MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER_SIMPLE_STEP 0
#define MSM7200_FLASH_XFR_STEP_CMD_SEQ_STEP_NUMBER_LOOP_START 1
@ -302,45 +302,45 @@ bitmask MSM7200_FLASH_XFR_STEP_EXTA_READ_WAIT = {0, 0x3};
#define MSM7200_FLASH_XFR_STEP_DATA_WIDE_USE_8_BIT_DATA_BUS_FOR_DATA 0
#define MSM7200_FLASH_XFR_STEP_DATA_WIDE_USE16_BIT_DATA_BUS_FOR_DATA 1
bitmask MSM7200_FLASH_DEV_CMD_WRITE_START = {24, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_WRITE_ADDR = {16, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_ERASE_START = {8, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_ERASE_ADDR = {0, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_WRITE_START = {24, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_WRITE_ADDR = {16, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_ERASE_START = {8, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_ERASE_ADDR = {0, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_PARAMETER_PAGE_CODE = {24, 0xff};
bitmask MSM7200_FLASH_DEV_CMD_VLD_SEQ_READ_START_VLD = {4, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_ERASE_START_VLD = {3, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_WRITE_START_VLD = {2, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_STOP_VLD = {1, 0x1};
bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_START_VLD = {0, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_PARAMETER_PAGE_CODE = {24, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_SEQ_READ_START_VLD = {4, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_ERASE_START_VLD = {3, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_WRITE_START_VLD = {2, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_STOP_VLD = {1, 0x1};
const bitmask MSM7200_FLASH_DEV_CMD_VLD_READ_START_VLD = {0, 0x1};
bitmask MSM7200_EBI2_MISR_SIG_REG_EBI2_MISR_SIG = {0, 0xffffffff};
const bitmask MSM7200_EBI2_MISR_SIG_REG_EBI2_MISR_SIG = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR2_DEV_ADDR2 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR3_DEV_ADDR3 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR4_DEV_ADDR4 = {0, 0xffffffff};
bitmask MSM7200_NAND_ADDR5_DEV_ADDR5 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR2_DEV_ADDR2 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR3_DEV_ADDR3 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR4_DEV_ADDR4 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR5_DEV_ADDR5 = {0, 0xffffffff};
bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_LAST = {24, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_LAST = {24, 0xff};
bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_SEQ = {16, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD3_READ_CACHE_SEQ = {16, 0xff};
bitmask MSM7200_FLASH_DEV_CMD3_WRITE_START_CACHE = {0, 0xff};
const bitmask MSM7200_FLASH_DEV_CMD3_WRITE_START_CACHE = {0, 0xff};
bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD4 = {16, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD3 = {0, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD4 = {16, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD4_GP_CMD3 = {0, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD6 = {16, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD5 = {0, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD6 = {16, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD5_GP_CMD5 = {0, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD8 = {16, 0xffff};
bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD7 = {0, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD8 = {16, 0xffff};
const bitmask MSM7200_FLASH_DEV_CMD6_GP_CMD7 = {0, 0xffff};
bitmask MSM7200_NAND_ADDR6_DEV_ADDR6 = {0, 0xffffffff};
const bitmask MSM7200_NAND_ADDR6_DEV_ADDR6 = {0, 0xffffffff};
bitmask MSM7200_EBI2_ECC_BUF_CFG_NUM_STEPS = {0, 0x3ff};
const bitmask MSM7200_EBI2_ECC_BUF_CFG_NUM_STEPS = {0, 0x3ff};
bitmask MSM7200_FLASH_BUFF0_ACC_BUFF_DATA = {0, 0xffffffff};
const bitmask MSM7200_FLASH_BUFF0_ACC_BUFF_DATA = {0, 0xffffffff};
bitmask MSM7200_SFLASHC_EXEC_CMD_BUSY = {0, 0x1};
bitmask MSM7200_SFLASHC_OPER_STATUS = {0, 0xf};
const bitmask MSM7200_SFLASHC_EXEC_CMD_BUSY = {0, 0x1};
const bitmask MSM7200_SFLASHC_OPER_STATUS = {0, 0xf};

12
main.c
View file

@ -9,7 +9,7 @@ typedef DCC_RETURN DCC_ERASE_PTR(DCCMemory *mem, uint32_t offset, uint32_t size)
typedef void DCC_CONFIG_PTR(DCCMemory *mem, Configuration config, uint32_t value);
#ifdef CDEFS
const char *CFLAGS = "C:DumpNow DCC Loader. (c) 2025 Wrapper.;Compile flags: " CDEFS ";Compile Date: " __DATE__;
const char CFLAGS[] = "C:DumpNow DCC Loader. (c) 2025 Wrapper.;Compile flags: " CDEFS ";Compile Date: " __DATE__;
#endif
static uint8_t rawBuf[DCC_BUFFER_SIZE + 0x2000];
@ -18,9 +18,6 @@ static uint8_t compBuf[DCC_BUFFER_SIZE + 0x4000];
#endif
#ifdef DCC_TESTING
extern void DCC_COMPRESS_MEMCPY(uint32_t algo, uint32_t src_offset, uint32_t size);
void *absolute_to_relative(void* ptr) { return ptr; };
#else
extern void *absolute_to_relative(void *ptr);
#endif
size_t strlen(const char *str);
@ -32,7 +29,6 @@ void dcc_main(uint32_t StartAddress, uint32_t PageSize) {
uint32_t BUF_INIT[2048];
uint32_t dcc_init_offset = 0;
uint32_t ext_mem;
Driver *devBase;
DCC_RETURN res;
/* 01 - Probe flash devices */
@ -40,8 +36,7 @@ void dcc_main(uint32_t StartAddress, uint32_t PageSize) {
if (!devices[i].driver) break; // Break when reaching the end of list
/* Probe device */
devBase = (Driver *)absolute_to_relative(devices[i].driver);
res = ((DCC_INIT_PTR *)absolute_to_relative(devBase->initialize))(&mem[i], devices[i].base_offset);
res = devices[i].driver->initialize(&mem[i], devices[i].base_offset);
if (res != DCC_OK) mem[i].type = MEMTYPE_NONE;
/* Print appropriate value */
@ -219,8 +214,7 @@ void dcc_main(uint32_t StartAddress, uint32_t PageSize) {
case MEMTYPE_AND:
case MEMTYPE_AG_AND:
/* Get driver routines */
devBase = (Driver *)absolute_to_relative(devices[flashIndex - 1].driver);
res = ((DCC_READ_PTR *)absolute_to_relative(devBase->read))(&mem[flashIndex - 1], srcOffset, srcSize, rawBuf, &destSize);
res = devices[flashIndex - 1].driver->read(&mem[flashIndex - 1], srcOffset, srcSize, rawBuf, &destSize);
if (res != DCC_OK) { // Check if error
DN_Packet_Send_One(CMD_READ_RESP_FAIL(res));
continue;

View file

@ -130,7 +130,7 @@ else
DDEFS += -DUSE_OLD_DCC_IO=0
endif
SRC = main.c dcc/memory.c dcc/dn_dcc_proto.c dcc/bitutils.c dcc/lwprintf.c plat/$(PLATFORM).c devices/$(LOADER_DEVICES).c $(DEVICES) $(CONTROLLERS) $(ADD_DEPS)
SRC = main.c dcc/pic.c dcc/memory.c dcc/dn_dcc_proto.c dcc/bitutils.c dcc/lwprintf.c plat/$(PLATFORM).c devices/$(LOADER_DEVICES).c $(DEVICES) $(CONTROLLERS) $(ADD_DEPS)
# List ASM source files here
ASRC = crt.s
@ -160,9 +160,13 @@ OBJS = $(ASRC:.s=.o) $(SRC:.c=.o)
LIBS = $(DLIBS) $(ULIBS)
MCFLAGS = -mcpu=$(MCU)
ASFLAGS = $(MCFLAGS) -fPIC -fPIE -g -gdwarf-2 -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -c
CPFLAGS = $(MCFLAGS) -fPIC -fPIE -I . $(OPT) -gdwarf-2 -mthumb-interwork -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm -Wa,-ahlms=$(<:.c=.lst) $(DEFS) -c
LDFLAGS = $(MCFLAGS) -fPIC -fPIE -nostartfiles -T$(LDSCRIPT) -Wl,-Map=build/$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR)
ifeq ($(BIG_ENDIAN), 1)
MCFLAGS += -mbig-endian -mbe32
endif
ASFLAGS = $(MCFLAGS) -fPIC -mpic-register=r9 -mpic-data-is-text-relative -msingle-pic-base -mgeneral-regs-only -fPIE -g -gdwarf-2 -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -c
CPFLAGS = $(MCFLAGS) -fPIC -mpic-register=r9 -mpic-data-is-text-relative -msingle-pic-base -mgeneral-regs-only -fPIE -I . $(OPT) -gdwarf-2 -mthumb-interwork -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm -Wa,-ahlms=$(<:.c=.lst) $(DEFS) -c
LDFLAGS = $(MCFLAGS) -fPIC -mpic-register=r9 -mpic-data-is-text-relative -msingle-pic-base -mgeneral-regs-only -fPIE -pie -nostartfiles -T$(LDSCRIPT) -Wl,-Map=build/$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR)
# Generate dependency information
#CPFLAGS += -MD -MP -MF .dep/$(@F).d
@ -228,6 +232,7 @@ endif
$(info PROJECT=(name) = Output name)
$(info LDSCRIPT=(ld) = Linker script)
$(info OLD_IO=1 = Use old DCC IO routines)
$(info BIG_ENDIAN=1 = Big endian format)
$(info Flash devices:)
$(info CFI=1 = Enable CFI interface)
$(info NAND_CONTROLLER=(name) = Enable NAND controller)