From 3167936cf0ed5ca3ebbdbfba8b63b2905c506633 Mon Sep 17 00:00:00 2001 From: Kra1o5 Date: Fri, 20 Jun 2014 19:06:06 +0200 Subject: Changes in rk30hack This works on rk3188 based devices too so rename it to rk3xhack. Change-Id: Ia3d9d52d99205057f8bece735a938986491b7522 --- mtdutils/Android.mk | 12 +++++----- mtdutils/bml_over_mtd.c | 6 ++--- mtdutils/mtdutils.c | 10 ++++----- mtdutils/rk30hack.c | 60 ------------------------------------------------- mtdutils/rk30hack.h | 37 ------------------------------ mtdutils/rk3xhack.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ mtdutils/rk3xhack.h | 37 ++++++++++++++++++++++++++++++ 7 files changed, 111 insertions(+), 111 deletions(-) delete mode 100644 mtdutils/rk30hack.c delete mode 100644 mtdutils/rk30hack.h create mode 100644 mtdutils/rk3xhack.c create mode 100644 mtdutils/rk3xhack.h diff --git a/mtdutils/Android.mk b/mtdutils/Android.mk index 117de78dc..bd426a022 100644 --- a/mtdutils/Android.mk +++ b/mtdutils/Android.mk @@ -7,9 +7,9 @@ LOCAL_SRC_FILES := \ mtdutils.c \ mounts.c -ifeq ($(TARGET_BOARD_PLATFORM),rk30xx) -LOCAL_SRC_FILES += rk30hack.c -LOCAL_CFLAGS += -DRK3066 +ifeq ($(filter rk30xx rk3188,$(TARGET_BOARD_PLATFORM)),) +LOCAL_SRC_FILES += rk3xhack.c +LOCAL_CFLAGS += -DRK3X endif LOCAL_MODULE := libmtdutils @@ -24,9 +24,9 @@ LOCAL_SRC_FILES := \ mtdutils.c \ mounts.c -ifeq ($(TARGET_BOARD_PLATFORM),rk30xx) -LOCAL_SRC_FILES += rk30hack.c -LOCAL_CFLAGS += -DRK3066 +ifeq ($(filter rk30xx rk3188,$(TARGET_BOARD_PLATFORM)),) +LOCAL_SRC_FILES += rk3xhack.c +LOCAL_CFLAGS += -DRK3X endif LOCAL_MODULE := libmtdutils diff --git a/mtdutils/bml_over_mtd.c b/mtdutils/bml_over_mtd.c index a68950e40..12ca10915 100644 --- a/mtdutils/bml_over_mtd.c +++ b/mtdutils/bml_over_mtd.c @@ -31,8 +31,8 @@ #include "mtdutils.h" -#ifdef RK3066 - #include "rk30hack.h" +#ifdef RK3X + #include "rk3xhack.h" #endif typedef struct BmlOverMtdReadContext { @@ -522,7 +522,7 @@ static ssize_t bml_over_mtd_write_block(int fd, ssize_t erase_size, char* data) erase_info.length = size; int retry; for (retry = 0; retry < 2; ++retry) { -#ifdef RK3066 +#ifdef RK3X if (rk30_zero_out(fd, pos, size) < 0) { fprintf(stderr, "mtd: erase failure at 0x%08lx (%s)\n", pos, strerror(errno)); diff --git a/mtdutils/mtdutils.c b/mtdutils/mtdutils.c index 6229d4851..158c88058 100644 --- a/mtdutils/mtdutils.c +++ b/mtdutils/mtdutils.c @@ -28,8 +28,8 @@ #include "mtdutils.h" -#ifdef RK3066 - #include "rk30hack.h" +#ifdef RK3X + #include "rk3xhack.h" #endif struct MtdReadContext { @@ -427,7 +427,7 @@ static int write_block(MtdWriteContext *ctx, const char *data) erase_info.length = size; int retry; for (retry = 0; retry < 2; ++retry) { -#ifdef RK3066 +#ifdef RK3X if (rk30_zero_out(fd, pos, size) < 0) { fprintf(stderr, "mtd: erase failure at 0x%08lx (%s)\n", pos, strerror(errno)); @@ -469,7 +469,7 @@ static int write_block(MtdWriteContext *ctx, const char *data) // Try to erase it once more as we give up on this block add_bad_block_offset(ctx, pos); printf("mtd: skipping write block at 0x%08lx\n", pos); -#ifdef RK3066 +#ifdef RK3X rk30_zero_out(fd, pos, size); #else @@ -544,7 +544,7 @@ off_t mtd_erase_blocks(MtdWriteContext *ctx, int blocks) struct erase_info_user erase_info; erase_info.start = pos; erase_info.length = ctx->partition->erase_size; -#ifdef RK3066 +#ifdef RK3X if (rk30_zero_out(ctx->fd, pos, ctx->partition->erase_size) < 0) { fprintf(stderr, "mtd: erase failure at 0x%08lx\n", pos); } diff --git a/mtdutils/rk30hack.c b/mtdutils/rk30hack.c deleted file mode 100644 index e9351b52e..000000000 --- a/mtdutils/rk30hack.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2013, Sergey 'Jin' Bostandzhyan - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* This is a hack for Rockchip rk30xx based devices. The problem is that - * the MEMERASE ioctl is failing (hangs and never returns) in their kernel. - * The sources are not fully available, so fixing it in the rk30xxnand_ko driver - * is not possible. - * - * I straced the stock recovery application and it seems to avoid this - * particular ioctl, instead it is simply writing zeroes using the write() call. - * - * This workaround does the same and will replace all MEMERASE occurances in - * the recovery code. - */ - -#include -#include -#include -#include -#include - -#include "rk30hack.h" - -int rk30_zero_out(int fd, off_t pos, ssize_t size) -{ - if (lseek(fd, pos, SEEK_SET) != pos) { - fprintf(stderr, "mtd: erase failure at 0x%08lx (%s)\n", - pos, strerror(errno)); - return -1; - } - - unsigned char *zb = (unsigned char *)calloc(1, size); - if (zb == NULL) { - fprintf(stderr, "mtd: erase failure, could not allocate memory\n"); - return -1; - } - - if (write(fd, zb, size) != size) { - fprintf(stderr, "mtd: erase failure at 0x%08lx (%s)\n", - pos, strerror(errno)); - free(zb); - return -1; - } - - free(zb); - return 0; -} diff --git a/mtdutils/rk30hack.h b/mtdutils/rk30hack.h deleted file mode 100644 index d492793ff..000000000 --- a/mtdutils/rk30hack.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2013 Sergey 'Jin' Bostandzhyan - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* This is a hack for Rockchip rk30xx based devices. The problem is that - * the MEMERASE ioctl is failing (hangs and never returns) in their kernel. - * The sources are not fully available, so fixing it in the rk30xxnand_ko driver - * is not possible. - * - * I straced the stock recovery application and it seems to avoid this - * particular ioctl, instead it is simply writing zeroes using the write() call. - * - * This workaround does the same and will replace all MEMERASE occurances in - * the recovery code. - */ - -#ifndef __RK30_HACK_H__ -#define __RK30_HACK_H__ - -#include // for size_t, etc. - -// write zeroes to fd at position pos -int zero_out(int fd, off_t pos, ssize_t length); - -#endif//__RK30_HACK_H__ diff --git a/mtdutils/rk3xhack.c b/mtdutils/rk3xhack.c new file mode 100644 index 000000000..930f60593 --- /dev/null +++ b/mtdutils/rk3xhack.c @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2013, Sergey 'Jin' Bostandzhyan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* This is a hack for Rockchip rk3x based devices. The problem is that + * the MEMERASE ioctl is failing (hangs and never returns) in their kernel. + * The sources are not fully available, so fixing it in the rk30xxnand_ko driver + * is not possible. + * + * I straced the stock recovery application and it seems to avoid this + * particular ioctl, instead it is simply writing zeroes using the write() call. + * + * This workaround does the same and will replace all MEMERASE occurances in + * the recovery code. + */ + +#include +#include +#include +#include +#include + +#include "rk3xhack.h" + +int rk30_zero_out(int fd, off_t pos, ssize_t size) +{ + if (lseek(fd, pos, SEEK_SET) != pos) { + fprintf(stderr, "mtd: erase failure at 0x%08lx (%s)\n", + pos, strerror(errno)); + return -1; + } + + unsigned char *zb = (unsigned char *)calloc(1, size); + if (zb == NULL) { + fprintf(stderr, "mtd: erase failure, could not allocate memory\n"); + return -1; + } + + if (write(fd, zb, size) != size) { + fprintf(stderr, "mtd: erase failure at 0x%08lx (%s)\n", + pos, strerror(errno)); + free(zb); + return -1; + } + + free(zb); + return 0; +} diff --git a/mtdutils/rk3xhack.h b/mtdutils/rk3xhack.h new file mode 100644 index 000000000..3cc16e49e --- /dev/null +++ b/mtdutils/rk3xhack.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2013 Sergey 'Jin' Bostandzhyan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* This is a hack for Rockchip rk3x based devices. The problem is that + * the MEMERASE ioctl is failing (hangs and never returns) in their kernel. + * The sources are not fully available, so fixing it in the rk30xxnand_ko driver + * is not possible. + * + * I straced the stock recovery application and it seems to avoid this + * particular ioctl, instead it is simply writing zeroes using the write() call. + * + * This workaround does the same and will replace all MEMERASE occurances in + * the recovery code. + */ + +#ifndef __RK3X_HACK_H__ +#define __RK3X_HACK_H__ + +#include // for size_t, etc. + +// write zeroes to fd at position pos +int zero_out(int fd, off_t pos, ssize_t length); + +#endif//__RK3X_HACK_H__ -- cgit v1.2.3