mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
mtd: cfi_cmdset_0002: Use right chip in do_ppb_xxlock()
commitf93aa8c4deupstream. do_ppb_xxlock() fails to add chip->start when querying for lock status (and chip_ready test), which caused false status reports. Fix that by adding adr += chip->start and adjust call sites accordingly. Fixes:1648eaaa15("mtd: cfi_cmdset_0002: Support Persistent Protection Bits (PPB) locking") Cc: stable@vger.kernel.org Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com> Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e9dc5dce09
commit
552eacd58e
@@ -2549,8 +2549,9 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map,
|
||||
unsigned long timeo;
|
||||
int ret;
|
||||
|
||||
adr += chip->start;
|
||||
mutex_lock(&chip->mutex);
|
||||
ret = get_chip(map, chip, adr + chip->start, FL_LOCKING);
|
||||
ret = get_chip(map, chip, adr, FL_LOCKING);
|
||||
if (ret) {
|
||||
mutex_unlock(&chip->mutex);
|
||||
return ret;
|
||||
@@ -2568,8 +2569,8 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map,
|
||||
|
||||
if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
|
||||
chip->state = FL_LOCKING;
|
||||
map_write(map, CMD(0xA0), chip->start + adr);
|
||||
map_write(map, CMD(0x00), chip->start + adr);
|
||||
map_write(map, CMD(0xA0), adr);
|
||||
map_write(map, CMD(0x00), adr);
|
||||
} else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
|
||||
/*
|
||||
* Unlocking of one specific sector is not supported, so we
|
||||
@@ -2607,7 +2608,7 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map,
|
||||
map_write(map, CMD(0x00), chip->start);
|
||||
|
||||
chip->state = FL_READY;
|
||||
put_chip(map, chip, adr + chip->start);
|
||||
put_chip(map, chip, adr);
|
||||
mutex_unlock(&chip->mutex);
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user