Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp2429755pxm; Fri, 25 Feb 2022 01:37:05 -0800 (PST) X-Google-Smtp-Source: ABdhPJy4dPgPfUYYAKlOtYLfi/uieb8Fauj9JltkFtyWwKKL0w4y40ZRvKIBkswGJm5Bj9a8zO77 X-Received: by 2002:a17:903:32ce:b0:14f:f60a:f13d with SMTP id i14-20020a17090332ce00b0014ff60af13dmr6638431plr.92.1645781825328; Fri, 25 Feb 2022 01:37:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645781825; cv=none; d=google.com; s=arc-20160816; b=h//Ly7tmEINpoeW/npNDEYsvuJXNr2MGCg+YLAed3D4Uk6yVIT0qafJo+LNL87xg8P u/IIFNB5AASArIUc9bucsNl4mejM3FBhOUhmadpiRhBReJ/QBhF1m3g33Kykc69jh/dY 0UC73Wfoav0LCrqvC3PKIeEo1zqKUGTww+i4M2hLEHeaLQamhMK51z0GAQEFlHQYoKve uUsez+i7qNjyVXp8rYvfezqYHjzMdon6QSjqfnqOu0rJtu1mpwo7CYmuIhe3tQQw/ZN8 lceClSpO2MPm9B+MlsvegpACDuN385/Amzdf90YMJX5ppP1hm5G+GhYAuYLsSN5r7vTl 3Xkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=4Miyo8dOd95mKRO8mU2Kx8Sh0YreYAK3dwwpYANjgHw=; b=uNtSxoeSKqo94zOO9DoqoXDEMcu5NQoJShdDm9YKZlwd/8IdbQ7igOQ1P7t4AxMRd7 BIRK+YhQ4rVfFfNPacsMrzx65tvTsUdJLV+60wG2+3Q0QmSen++t/ijqEQMhw6I4josF mORlWQHRA3igoiuL6bCFNfWEp1cQ8lve2WF27GQhtPlBOiWd1LYjLQikOiLTbFUPMY8n reTvUdj3hxF2mUdFRphpUV8bIOIYneszyXiFk/tkATgrhh/4YYLoQ93z7nQSi/r0C0+1 P2Ccttx1iBNZfacbdIZEhYIV2nk9zgo7Ki8mEYV8opKMtDBGzicoSaNSLBHq8NzrOk9r Uw7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=OGKUSLCZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h1-20020a636c01000000b003783582822dsi526088pgc.694.2022.02.25.01.36.49; Fri, 25 Feb 2022 01:37:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=OGKUSLCZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238937AbiBYJNy (ORCPT + 99 others); Fri, 25 Feb 2022 04:13:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238932AbiBYJNw (ORCPT ); Fri, 25 Feb 2022 04:13:52 -0500 Received: from fllv0015.ext.ti.com (fllv0015.ext.ti.com [198.47.19.141]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 544BE19F471; Fri, 25 Feb 2022 01:13:21 -0800 (PST) Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 21P9CLvt015729; Fri, 25 Feb 2022 03:12:21 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1645780341; bh=4Miyo8dOd95mKRO8mU2Kx8Sh0YreYAK3dwwpYANjgHw=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=OGKUSLCZIlA/gGJe5lacHZidKIqSWitcKtDi28JwAKKNmdARyqyaal0ZGqRH2tlrm U+Q7WW2VOxoPHVgCwfli73dhks6nuQzqB607iTX8i3/niWQkXv/NJzBHH/CB5Mr97h oXxn2nE2SP+xqSTc8GapywTbOhzd9+9iM+UouS6I= Received: from DFLE112.ent.ti.com (dfle112.ent.ti.com [10.64.6.33]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 21P9CLjr035326 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 25 Feb 2022 03:12:21 -0600 Received: from DFLE115.ent.ti.com (10.64.6.36) by DFLE112.ent.ti.com (10.64.6.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14; Fri, 25 Feb 2022 03:12:20 -0600 Received: from fllv0039.itg.ti.com (10.64.41.19) by DFLE115.ent.ti.com (10.64.6.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14 via Frontend Transport; Fri, 25 Feb 2022 03:12:20 -0600 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id 21P9CKxZ055223; Fri, 25 Feb 2022 03:12:20 -0600 Date: Fri, 25 Feb 2022 14:42:19 +0530 From: Pratyush Yadav To: =?utf-8?Q?C=C3=A9dric?= Le Goater CC: , , Mark Brown , Tudor Ambarus , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , , Joel Stanley , Andrew Jeffery , Chin-Ting Kuo , , Rob Herring , , Subject: Re: [PATCH 04/10] spi: aspeed: Add support for direct mapping Message-ID: <20220225091219.bv62jm3nehg4e4z4@ti.com> References: <20220214094231.3753686-1-clg@kaod.org> <20220214094231.3753686-5-clg@kaod.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220214094231.3753686-5-clg@kaod.org> X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 14/02/22 10:42AM, C?dric Le Goater wrote: > Use direct mapping to read the flash device contents. This operation > mode is called "Command mode" on Aspeed SoC SMC controllers. It uses a > Control Register for the settings to apply when a memory operation is > performed on the flash device mapping window. > > If the window is not big enough, fall back to the "User mode" to > perform the read. > > Direct mapping for writes will come later when validated. > > Signed-off-by: C?dric Le Goater > --- > drivers/spi/spi-aspeed-smc.c | 67 ++++++++++++++++++++++++++++++++++-- > 1 file changed, 65 insertions(+), 2 deletions(-) > > diff --git a/drivers/spi/spi-aspeed-smc.c b/drivers/spi/spi-aspeed-smc.c > index 0aeff6f468af..8d33fcb7736a 100644 > --- a/drivers/spi/spi-aspeed-smc.c > +++ b/drivers/spi/spi-aspeed-smc.c > @@ -345,8 +345,8 @@ static int do_aspeed_spi_exec_op(struct spi_mem *mem, const struct spi_mem_op *o > if (!op->addr.nbytes) > ret = aspeed_spi_read_reg(chip, op); > else > - ret = aspeed_spi_read_user(chip, op, op->addr.val, > - op->data.nbytes, op->data.buf.in); > + memcpy_fromio(op->data.buf.in, chip->ahb_base + op->addr.val, > + op->data.nbytes); Why change this? exec_op should be independent from dirmap APIs. And you don't even do the ahb_window_size checks here. > } else { > if (!op->addr.nbytes) > ret = aspeed_spi_write_reg(chip, op); > @@ -426,10 +426,73 @@ static int aspeed_spi_chip_set_default_window(struct aspeed_spi_chip *chip) > return chip->ahb_window_size ? 0 : -1; > } > > +static int aspeed_spi_dirmap_create(struct spi_mem_dirmap_desc *desc) > +{ > + struct aspeed_spi *aspi = spi_controller_get_devdata(desc->mem->spi->master); > + struct aspeed_spi_chip *chip = &aspi->chips[desc->mem->spi->chip_select]; > + struct spi_mem_op *op = &desc->info.op_tmpl; > + u32 ctl_val; > + int ret = 0; > + > + chip->clk_freq = desc->mem->spi->max_speed_hz; > + > + /* Only for reads */ > + if (op->data.dir != SPI_MEM_DATA_IN) > + return -EOPNOTSUPP; > + > + if (desc->info.length > chip->ahb_window_size) > + dev_warn(aspi->dev, "CE%d window (%dMB) too small for mapping", > + chip->cs, chip->ahb_window_size >> 20); > + > + /* Define the default IO read settings */ > + ctl_val = readl(chip->ctl) & ~CTRL_IO_CMD_MASK; > + ctl_val |= aspeed_spi_get_io_mode(op) | > + op->cmd.opcode << CTRL_COMMAND_SHIFT | > + CTRL_IO_DUMMY_SET(op->dummy.nbytes / op->dummy.buswidth) | > + CTRL_IO_MODE_READ; > + > + /* Tune 4BYTE address mode */ > + if (op->addr.nbytes) { > + u32 addr_mode = readl(aspi->regs + CE_CTRL_REG); > + > + if (op->addr.nbytes == 4) > + addr_mode |= (0x11 << chip->cs); > + else > + addr_mode &= ~(0x11 << chip->cs); > + writel(addr_mode, aspi->regs + CE_CTRL_REG); > + } > + > + /* READ mode is the controller default setting */ > + chip->ctl_val[ASPEED_SPI_READ] = ctl_val; > + writel(chip->ctl_val[ASPEED_SPI_READ], chip->ctl); > + > + dev_info(aspi->dev, "CE%d read buswidth:%d [0x%08x]\n", > + chip->cs, op->data.buswidth, chip->ctl_val[ASPEED_SPI_READ]); > + > + return ret; > +} > + > +static int aspeed_spi_dirmap_read(struct spi_mem_dirmap_desc *desc, > + u64 offset, size_t len, void *buf) > +{ > + struct aspeed_spi *aspi = spi_controller_get_devdata(desc->mem->spi->master); > + struct aspeed_spi_chip *chip = &aspi->chips[desc->mem->spi->chip_select]; > + > + /* Switch to USER command mode if mapping window is too small */ > + if (chip->ahb_window_size < offset + len) > + aspeed_spi_read_user(chip, &desc->info.op_tmpl, offset, len, buf); > + else > + memcpy_fromio(buf, chip->ahb_base + offset, len); > + > + return len; > +} > + > static const struct spi_controller_mem_ops aspeed_spi_mem_ops = { > .supports_op = aspeed_spi_supports_op, > .exec_op = aspeed_spi_exec_op, > .get_name = aspeed_spi_get_name, > + .dirmap_create = aspeed_spi_dirmap_create, > + .dirmap_read = aspeed_spi_dirmap_read, > }; > > static void aspeed_spi_chip_set_type(struct aspeed_spi_chip *chip, int type) > -- > 2.34.1 > -- Regards, Pratyush Yadav Texas Instruments Inc.