- /* BI-swap - work-around of mxc NFC for NAND device with page == 2kb */
- target_read_u16(target, MXC_NF_MAIN_BUFFER3 + 464, &swap1);
- if (oob) {
- LOG_ERROR("Due to NFC Bug, oob is not correctly implemented in mxc driver");
- return ERROR_NAND_OPERATION_FAILED;
+
+ if (nand->page_size > 512 && mxc_nf_info->flags.biswap_enabled) {
+ /* BI-swap - work-around of i.MX NFC for NAND device with page == 2kb*/
+ target_read_u16(target, MXC_NF_MAIN_BUFFER3 + 464, &swap1);
+ if (oob) {
+ LOG_ERROR("Due to NFC Bug, oob is not correctly implemented in mxc driver");
+ return ERROR_NAND_OPERATION_FAILED;
+ }
+ swap2 = 0xffff; /* Spare buffer unused forced to 0xffff */
+ new_swap1 = (swap1 & 0xFF00) | (swap2 >> 8);
+ swap2 = (swap1 << 8) | (swap2 & 0xFF);
+ target_write_u16(target, MXC_NF_MAIN_BUFFER3 + 464, new_swap1);
+ target_write_u16(target, MXC_NF_SPARE_BUFFER3 + 4, swap2);