[RFC 6/6] bus: Add support for Tegra NOR controller
Mirza Krak
mirza.krak at gmail.com
Thu Jul 21 13:42:51 PDT 2016
2016-07-21 12:15 GMT+02:00 Jon Hunter <jonathanh at nvidia.com>:
>
> On 19/07/16 14:36, Mirza Krak wrote:
>> From: Mirza Krak <mirza.krak at gmail.com>
>> +config TEGRA_NOR
>> + tristate "Nvidia Tegra NOR flash bus driver a.k.a GMI/SNOR"
>> + depends on ARCH_TEGRA_2x_SOC || ARCH_TEGRA_3x_SOC
>> + depends on OF
>> + help
>> + Driver for NOR flash bus found on Tegra30/20 SOC`s.
>
> It is actually present on all Tegra's and so I would drop the 30/20.
ACK.
>> +++ b/drivers/bus/tegra-nor.c
>> @@ -0,0 +1,118 @@
>> +/*
>> + * Driver for Nvidia NOR Flash bus a.k.a SNOR/GMI.
>> + *
>> + * Copyright (C) 2016 Host Mobility AB. All rights reserved.
>> + *
>> + * This file is licensed under the terms of the GNU General Public
>> + * License version 2. This program is licensed "as is" without any
>> + * warranty of any kind, whether express or implied.
>> + */
>> +
>> +#include <linux/clk.h>
>> +#include <linux/io.h>
>> +#include <linux/mfd/syscon.h>
>
> Is this needed?
It is not. ACK.
>
>> +#include <linux/module.h>
>> +#include <linux/of_device.h>
>> +#include <linux/regmap.h>
>
> Or this?
It is not. ACK.
>
>> +
>> +#define TEGRA_NOR_TIMING_REG_COUNT 2
>> +
>> +#define TEGRA_NOR_CONFIG 0x00
>> +#define TEGRA_NOR_STATUS 0x04
>> +#define TEGRA_NOR_ADDR_PTR 0x08
>> +#define TEGRA_NOR_AHB_ADDR_PTR 0x0c
>> +#define TEGRA_NOR_TIMING0 0x10
>> +#define TEGRA_NOR_TIMING1 0x14
>> +#define TEGRA_NOR_MIO_CONFIG 0x18
>> +#define TEGRA_NOR_MIO_TIMING 0x1c
>> +#define TEGRA_NOR_DMA_CONFIG 0x20
>> +#define TEGRA_NOR_CS_MUX_CONFIG 0x24
>
> Not all of these are used. It is good to define them and I wonder if we
> should add support for MIO while are at it :-)
We can come back to this once I have all SNOR stuff in order.
>
>> +
>> +#define TEGRA_NOR_CONFIG_GO BIT(31)
>> +
>> +static const struct of_device_id nor_id_table[] = {
>> + /* Tegra30 */
>
> I don't think this comment is needed.
ACK.
>
>> + { .compatible = "nvidia,tegra30-nor", .data = NULL, },
>
> You don't need to set data to NULL.
ACK.
>
>> + /* Tegra20 */
>> + { .compatible = "nvidia,tegra20-nor", .data = NULL, },
>
> Same here.
ACK
>> +static int __init nor_probe(struct platform_device *pdev)
>> +{
>
> I would drop the __init.
ACK.
>> +static struct platform_driver nor_driver = {
>> + .driver = {
>> + .name = "tegra-nor",
>> + .of_match_table = nor_id_table,
>> + },
>> +};
>
> The driver should have a remove function given that we can build as a
> module.
At the moment I do not know what we would do in a remove function and
hence me not adding one.
>
>> +module_platform_driver_probe(nor_driver, nor_probe);
>
> I would use "tegra_nor" namespace for all the structs, functions, etc.
> However, we may prefer to go with GMI and in which case tegra_gmi_probe,
> etc.
ACK. Who gets the last call on what we should call the driver? It
seems that we both think GMI is a better name, do we need a third? :).
Thank you Jonathan for your feedback.
Best Regards,
Mirza
More information about the linux-arm-kernel
mailing list