lkml.org 
[lkml]   [2023]   [Oct]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 3/4] mtd: rawnand: brcmnand: pass host struct to bcmnand_ctrl_poll_status
    Date
    From: David Regan <dregan@broadcom.com>

    Pass host struct to bcmnand_ctrl_poll_status instead of ctrl struct
    since real time status requires host, and ctrl is a member of host.
    Real time status is required for low level commands vs cached status
    since the NAND controller will not do an automatic status read at the
    end of a low level command as it would with a high level command.

    Signed-off-by: David Regan <dregan@broadcom.com>
    ---
    Changes in v3: none

    Changes in v2: added this patch in series
    ---
    drivers/mtd/nand/raw/brcmnand/brcmnand.c | 13 +++++++------
    1 file changed, 7 insertions(+), 6 deletions(-)

    diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
    index 440bef477930..8d429eb3b72a 100644
    --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
    +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
    @@ -1061,10 +1061,11 @@ enum {
    CS_SELECT_AUTO_DEVICE_ID_CFG = BIT(30),
    };

    -static int bcmnand_ctrl_poll_status(struct brcmnand_controller *ctrl,
    +static int bcmnand_ctrl_poll_status(struct brcmnand_host *host,
    u32 mask, u32 expected_val,
    unsigned long timeout_ms)
    {
    + struct brcmnand_controller *ctrl = host->ctrl;
    unsigned long limit;
    u32 val;

    @@ -1379,7 +1380,7 @@ static void brcmnand_wp(struct mtd_info *mtd, int wp)
    * make sure ctrl/flash ready before and after
    * changing state of #WP pin
    */
    - ret = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY |
    + ret = bcmnand_ctrl_poll_status(host, NAND_CTRL_RDY |
    NAND_STATUS_READY,
    NAND_CTRL_RDY |
    NAND_STATUS_READY, 0);
    @@ -1389,7 +1390,7 @@ static void brcmnand_wp(struct mtd_info *mtd, int wp)
    brcmnand_set_wp(ctrl, wp);
    nand_status_op(chip, NULL);
    /* NAND_STATUS_WP 0x00 = protected, 0x80 = not protected */
    - ret = bcmnand_ctrl_poll_status(ctrl,
    + ret = bcmnand_ctrl_poll_status(host,
    NAND_CTRL_RDY |
    NAND_STATUS_READY |
    NAND_STATUS_WP,
    @@ -1629,13 +1630,13 @@ static void brcmnand_send_cmd(struct brcmnand_host *host, int cmd)
    */
    if (oops_in_progress) {
    if (ctrl->cmd_pending &&
    - bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY, NAND_CTRL_RDY, 0))
    + bcmnand_ctrl_poll_status(host, NAND_CTRL_RDY, NAND_CTRL_RDY, 0))
    return;
    } else
    BUG_ON(ctrl->cmd_pending != 0);
    ctrl->cmd_pending = cmd;

    - ret = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY, NAND_CTRL_RDY, 0);
    + ret = bcmnand_ctrl_poll_status(host, NAND_CTRL_RDY, NAND_CTRL_RDY, 0);
    WARN_ON(ret);

    mb(); /* flush previous writes */
    @@ -1664,7 +1665,7 @@ static bool brcmstb_nand_wait_for_completion(struct nand_chip *chip)
    if (mtd->oops_panic_write || ctrl->irq < 0) {
    /* switch to interrupt polling and PIO mode */
    disable_ctrl_irqs(ctrl);
    - sts = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY,
    + sts = bcmnand_ctrl_poll_status(host, NAND_CTRL_RDY,
    NAND_CTRL_RDY, 0);
    err = sts < 0;
    } else {
    --
    2.37.3
    \
     
     \ /
      Last update: 2023-10-17 22:27    [W:2.994 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site