mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 14:04:54 +02:00
drivers: rkflash: implement block layer discard interface
Change-Id: Iba733d47a09d1f3809b90f43e456fb57d86a6244 Signed-off-by: Dingqiang Lin <jon.lin@rock-chips.com>
This commit is contained in:
parent
2d5222e4ae
commit
f757bf19e2
|
|
@ -57,6 +57,11 @@ int sftl_flash_gc(void)
|
|||
return sftl_gc();
|
||||
}
|
||||
|
||||
int sftl_flash_discard(u32 sec, u32 n_sec)
|
||||
{
|
||||
return sftl_discard(sec, n_sec);
|
||||
}
|
||||
|
||||
void sftl_flash_deinit(void)
|
||||
{
|
||||
u8 chip_sel = 0;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ int sftl_read(u32 index, u32 count, u8 *buf);
|
|||
int sftl_write(u32 index, u32 count, u8 *buf);
|
||||
u32 sftl_get_density(void);
|
||||
s32 sftl_gc(void);
|
||||
int sftl_discard(u32 sec, u32 n_sec);
|
||||
int sftl_vendor_read(u32 index, u32 count, u8 *buf);
|
||||
int sftl_vendor_write(u32 index, u32 count, u8 *buf);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
/* Copyright (c) 2018 Rockchip Electronics Co. Ltd.
|
||||
* date: 2018-10-29
|
||||
* date: 2018-11-02
|
||||
*/
|
||||
.file "rk_sftl.c"
|
||||
.global __udivsi3
|
||||
|
|
@ -9910,12 +9910,12 @@ sftl_deinit:
|
|||
.word .LANCHOR2
|
||||
.size sftl_deinit, .-sftl_deinit
|
||||
.align 2
|
||||
.global FtlDiscard
|
||||
.global sftl_discard
|
||||
.syntax unified
|
||||
.arm
|
||||
.fpu softvfp
|
||||
.type FtlDiscard, %function
|
||||
FtlDiscard:
|
||||
.type sftl_discard, %function
|
||||
sftl_discard:
|
||||
@ args = 0, pretend = 0, frame = 8
|
||||
@ frame_needed = 1, uses_anonymous_args = 0
|
||||
mov ip, sp
|
||||
|
|
@ -9999,7 +9999,7 @@ FtlDiscard:
|
|||
.align 2
|
||||
.L1439:
|
||||
.word .LANCHOR0
|
||||
.size FtlDiscard, .-FtlDiscard
|
||||
.size sftl_discard, .-sftl_discard
|
||||
.align 2
|
||||
.global FtlVpcCheckAndModify
|
||||
.syntax unified
|
||||
|
|
@ -10251,7 +10251,7 @@ FtlProgPages:
|
|||
ldrh r3, [r6, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1473
|
||||
movw r2, #955
|
||||
movw r2, #958
|
||||
mov r1, r10
|
||||
ldr r0, .L1482+8
|
||||
bl sftl_printk
|
||||
|
|
@ -10291,7 +10291,7 @@ FtlProgPages:
|
|||
ldrh r3, [r6, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1468
|
||||
movw r2, #970
|
||||
movw r2, #973
|
||||
ldr r1, .L1482+4
|
||||
ldr r0, .L1482+8
|
||||
bl sftl_printk
|
||||
|
|
@ -12075,7 +12075,7 @@ FtlWrite:
|
|||
ldrh r3, [r10, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1723
|
||||
movw r2, #1011
|
||||
movw r2, #1014
|
||||
ldr r1, .L1770+12
|
||||
ldr r0, .L1770+16
|
||||
bl sftl_printk
|
||||
|
|
@ -12121,7 +12121,7 @@ FtlWrite:
|
|||
ldrh r3, [r10, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1728
|
||||
movw r2, #1044
|
||||
movw r2, #1047
|
||||
ldr r1, .L1770+12
|
||||
ldr r0, .L1770+16
|
||||
bl sftl_printk
|
||||
|
|
@ -12143,7 +12143,7 @@ FtlWrite:
|
|||
ldr r2, [fp, #-72]
|
||||
cmp r3, r2
|
||||
bls .L1749
|
||||
movw r2, #1121
|
||||
movw r2, #1124
|
||||
ldr r1, .L1770+12
|
||||
ldr r0, .L1770+16
|
||||
bl sftl_printk
|
||||
|
|
@ -12277,7 +12277,7 @@ FtlWrite:
|
|||
ldr r3, [r8, #8]
|
||||
cmp r5, r3
|
||||
beq .L1743
|
||||
movw r2, #1097
|
||||
movw r2, #1100
|
||||
ldr r1, .L1770+12
|
||||
ldr r0, .L1770+16
|
||||
bl sftl_printk
|
||||
|
|
@ -12299,7 +12299,7 @@ FtlWrite:
|
|||
ldrh r3, [r10, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1745
|
||||
movw r2, #1112
|
||||
movw r2, #1115
|
||||
ldr r1, .L1770+12
|
||||
ldr r0, .L1770+16
|
||||
bl sftl_printk
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
/* Copyright (c) 2018 Rockchip Electronics Co. Ltd.
|
||||
* date: 2018-10-29
|
||||
* date: 2018-11-02
|
||||
*/
|
||||
.arch armv7-a
|
||||
.eabi_attribute 20, 1
|
||||
|
|
@ -10078,13 +10078,13 @@ sftl_deinit:
|
|||
.fnend
|
||||
.size sftl_deinit, .-sftl_deinit
|
||||
.align 1
|
||||
.global FtlDiscard
|
||||
.global sftl_discard
|
||||
.syntax unified
|
||||
.thumb
|
||||
.thumb_func
|
||||
.fpu softvfp
|
||||
.type FtlDiscard, %function
|
||||
FtlDiscard:
|
||||
.type sftl_discard, %function
|
||||
sftl_discard:
|
||||
.fnstart
|
||||
@ args = 0, pretend = 0, frame = 8
|
||||
@ frame_needed = 0, uses_anonymous_args = 0
|
||||
|
|
@ -10172,7 +10172,7 @@ FtlDiscard:
|
|||
.L1474:
|
||||
.word .LANCHOR0
|
||||
.fnend
|
||||
.size FtlDiscard, .-FtlDiscard
|
||||
.size sftl_discard, .-sftl_discard
|
||||
.align 1
|
||||
.global FtlVpcCheckAndModify
|
||||
.syntax unified
|
||||
|
|
@ -10422,7 +10422,7 @@ FtlProgPages:
|
|||
ldrh r3, [r6, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1508
|
||||
movw r2, #955
|
||||
movw r2, #958
|
||||
mov r1, r10
|
||||
mov r0, fp
|
||||
bl sftl_printk
|
||||
|
|
@ -10460,7 +10460,7 @@ FtlProgPages:
|
|||
ldrh r3, [r6, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1503
|
||||
movw r2, #970
|
||||
movw r2, #973
|
||||
ldr r1, .L1517+8
|
||||
ldr r0, .L1517+12
|
||||
bl sftl_printk
|
||||
|
|
@ -12149,7 +12149,7 @@ FtlWrite:
|
|||
ldrh r3, [r4, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1761
|
||||
movw r2, #1011
|
||||
movw r2, #1014
|
||||
ldr r1, .L1808+8
|
||||
ldr r0, .L1808+12
|
||||
bl sftl_printk
|
||||
|
|
@ -12196,7 +12196,7 @@ FtlWrite:
|
|||
ldrb r2, [r5, #6] @ zero_extendqisi2
|
||||
cmp r2, r3
|
||||
bcc .L1766
|
||||
movw r2, #1044
|
||||
movw r2, #1047
|
||||
ldr r1, .L1808+8
|
||||
ldr r0, .L1808+12
|
||||
bl sftl_printk
|
||||
|
|
@ -12215,7 +12215,7 @@ FtlWrite:
|
|||
ldr r3, [sp]
|
||||
cmp fp, r3
|
||||
bls .L1788
|
||||
movw r2, #1121
|
||||
movw r2, #1124
|
||||
ldr r1, .L1808+8
|
||||
ldr r0, .L1808+12
|
||||
bl sftl_printk
|
||||
|
|
@ -12310,7 +12310,7 @@ FtlWrite:
|
|||
ldrh r3, [r4, #32]
|
||||
cmp r2, r3
|
||||
bcc .L1784
|
||||
mov r2, #1112
|
||||
movw r2, #1115
|
||||
ldr r1, .L1808+8
|
||||
ldr r0, .L1808+12
|
||||
bl sftl_printk
|
||||
|
|
@ -12400,7 +12400,7 @@ FtlWrite:
|
|||
ldr r3, [r9, #8]
|
||||
cmp r7, r3
|
||||
beq .L1782
|
||||
movw r2, #1097
|
||||
movw r2, #1100
|
||||
ldr r1, .L1810+4
|
||||
ldr r0, .L1810+8
|
||||
bl sftl_printk
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
/* Copyright (c) 2018 Rockchip Electronics Co. Ltd.
|
||||
* date: 2018-10-29
|
||||
* date: 2018-11-02
|
||||
*/
|
||||
.arch armv8-a
|
||||
.file "rk_sftl.c"
|
||||
|
|
@ -9144,9 +9144,9 @@ sftl_deinit:
|
|||
ret
|
||||
.size sftl_deinit, .-sftl_deinit
|
||||
.align 2
|
||||
.global FtlDiscard
|
||||
.type FtlDiscard, %function
|
||||
FtlDiscard:
|
||||
.global sftl_discard
|
||||
.type sftl_discard, %function
|
||||
sftl_discard:
|
||||
stp x29, x30, [sp, -64]!
|
||||
add w3, w0, w1
|
||||
add x29, sp, 0
|
||||
|
|
@ -9223,7 +9223,7 @@ FtlDiscard:
|
|||
.L1344:
|
||||
mov w0, -1
|
||||
b .L1336
|
||||
.size FtlDiscard, .-FtlDiscard
|
||||
.size sftl_discard, .-sftl_discard
|
||||
.align 2
|
||||
.global FtlVpcCheckAndModify
|
||||
.type FtlVpcCheckAndModify, %function
|
||||
|
|
@ -9470,7 +9470,7 @@ FtlProgPages:
|
|||
cmp w1, w0
|
||||
bcc .L1383
|
||||
adrp x0, .LC1
|
||||
mov w2, 955
|
||||
mov w2, 958
|
||||
add x1, x25, 648
|
||||
add x0, x0, :lo12:.LC1
|
||||
bl sftl_printk
|
||||
|
|
@ -9512,7 +9512,7 @@ FtlProgPages:
|
|||
adrp x1, .LANCHOR1
|
||||
add x1, x1, :lo12:.LANCHOR1
|
||||
adrp x0, .LC1
|
||||
mov w2, 970
|
||||
mov w2, 973
|
||||
add x1, x1, 648
|
||||
add x0, x0, :lo12:.LC1
|
||||
bl sftl_printk
|
||||
|
|
@ -11114,7 +11114,7 @@ FtlWrite:
|
|||
bcc .L1614
|
||||
ldr x1, [x29, 160]
|
||||
adrp x0, .LC1
|
||||
mov w2, 1011
|
||||
mov w2, 1014
|
||||
add x0, x0, :lo12:.LC1
|
||||
bl sftl_printk
|
||||
.L1614:
|
||||
|
|
@ -11163,7 +11163,7 @@ FtlWrite:
|
|||
bcc .L1619
|
||||
ldr x1, [x29, 160]
|
||||
adrp x0, .LC1
|
||||
mov w2, 1044
|
||||
mov w2, 1047
|
||||
add x0, x0, :lo12:.LC1
|
||||
bl sftl_printk
|
||||
.L1619:
|
||||
|
|
@ -11185,7 +11185,7 @@ FtlWrite:
|
|||
bcs .L1640
|
||||
ldr x1, [x29, 160]
|
||||
adrp x0, .LC1
|
||||
mov w2, 1121
|
||||
mov w2, 1124
|
||||
add x0, x0, :lo12:.LC1
|
||||
bl sftl_printk
|
||||
.L1640:
|
||||
|
|
@ -11268,7 +11268,7 @@ FtlWrite:
|
|||
bcc .L1636
|
||||
ldr x1, [x29, 160]
|
||||
adrp x0, .LC1
|
||||
mov w2, 1112
|
||||
mov w2, 1115
|
||||
add x0, x0, :lo12:.LC1
|
||||
bl sftl_printk
|
||||
.L1636:
|
||||
|
|
@ -11372,7 +11372,7 @@ FtlWrite:
|
|||
cmp w21, w0
|
||||
beq .L1634
|
||||
ldr x1, [x29, 160]
|
||||
mov w2, 1097
|
||||
mov w2, 1100
|
||||
adrp x0, .LC1
|
||||
add x0, x0, :lo12:.LC1
|
||||
bl sftl_printk
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ void sftl_flash_deinit(void);
|
|||
int sftl_flash_resume(void __iomem *reg_addr);
|
||||
void sftl_flash_clean_irq(void);
|
||||
int sftl_flash_gc(void);
|
||||
int sftl_flash_discard(u32 sec, u32 n_sec);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RK_SFC_NOR
|
||||
|
|
@ -43,6 +44,7 @@ void snand_deinit(void);
|
|||
int snand_resume(void __iomem *reg_addr);
|
||||
void sfc_clean_irq(void);
|
||||
int snand_gc(void);
|
||||
int snand_discard(u32 sec, u32 n_sec);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -54,8 +54,9 @@ static struct flash_boot_ops nandc_nand_ops = {
|
|||
sftl_flash_vendor_read,
|
||||
sftl_flash_vendor_write,
|
||||
sftl_flash_gc,
|
||||
sftl_flash_discard,
|
||||
#else
|
||||
-1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
-1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -71,8 +72,9 @@ static struct flash_boot_ops sfc_nor_ops = {
|
|||
snor_vendor_read,
|
||||
snor_vendor_write,
|
||||
snor_gc,
|
||||
NULL,
|
||||
#else
|
||||
-1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
-1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -88,8 +90,9 @@ static struct flash_boot_ops sfc_nand_ops = {
|
|||
snand_vendor_read,
|
||||
snand_vendor_write,
|
||||
snand_gc,
|
||||
snand_discard,
|
||||
#else
|
||||
-1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
-1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -167,6 +170,21 @@ static int rkflash_flash_gc(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rkflash_blk_discard(u32 sec, u32 n_sec)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (g_boot_ops[g_flash_type]->discard) {
|
||||
mutex_lock(&g_flash_ops_mutex);
|
||||
ret = g_boot_ops[g_flash_type]->discard(sec, n_sec);
|
||||
mutex_unlock(&g_flash_ops_mutex);
|
||||
} else {
|
||||
ret = -EPERM;
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
static unsigned int rk_partition_init(struct flash_part *part)
|
||||
{
|
||||
int i, part_num = 0;
|
||||
|
|
@ -368,6 +386,11 @@ static int rkflash_blktrans_thread(void *arg)
|
|||
res = 0;
|
||||
|
||||
if (req->cmd_flags & REQ_DISCARD) {
|
||||
spin_unlock_irq(rq->queue_lock);
|
||||
if (rkflash_blk_discard(blk_rq_pos(req) +
|
||||
dev->off_size, totle_nsect))
|
||||
res = -EIO;
|
||||
spin_lock_irq(rq->queue_lock);
|
||||
if (!__blk_end_request_cur(req, res))
|
||||
req = NULL;
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ struct flash_boot_ops {
|
|||
int (*vendor_read)(u32 sec, u32 n_sec, void *p_data);
|
||||
int (*vendor_write)(u32 sec, u32 n_sec, void *p_data);
|
||||
int (*gc)(void);
|
||||
int (*discard)(u32 sec, u32 n_sec);
|
||||
};
|
||||
|
||||
struct flash_part {
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ extern unsigned int rkflash_debug;
|
|||
#endif
|
||||
|
||||
#if (PRINT_SWI_NANDC_E)
|
||||
#define PRINT_NANDC_E(...) {if (rkflash_debug & PRINT_BIT_NANDC_I)\
|
||||
#define PRINT_NANDC_E(...) {if (rkflash_debug & PRINT_BIT_NANDC_E)\
|
||||
pr_info(__VA_ARGS__); }
|
||||
#else
|
||||
#define PRINT_NANDC_E(...)
|
||||
|
|
|
|||
|
|
@ -53,6 +53,11 @@ int snand_gc(void)
|
|||
return sftl_gc();
|
||||
}
|
||||
|
||||
int snand_discard(u32 sec, u32 n_sec)
|
||||
{
|
||||
return sftl_discard(sec, n_sec);
|
||||
}
|
||||
|
||||
void snand_deinit(void)
|
||||
{
|
||||
sftl_deinit();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user