lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Sun, 2 Apr 2023 13:44:01 +0200
From:   Christophe JAILLET <christophe.jaillet@...adoo.fr>
To:     Yinbo Zhu <zhuyinbo@...ngson.cn>
Cc:     broonie@...nel.org, devicetree@...r.kernel.org,
        krzysztof.kozlowski+dt@...aro.org, linux-kernel@...r.kernel.org,
        linux-spi@...r.kernel.org, liupeibao@...ngson.cn,
        loongson-kernel@...ts.loongnix.cn, lvjianmin@...ngson.cn,
        robh+dt@...nel.org, wanghongliang@...ngson.cn
Subject: Re: [PATCH v6 2/2] spi: loongson: add bus driver for the loongson spi
 controller

Le 01/04/2023 à 11:56, Yinbo Zhu a écrit :
> This bus driver supports the Loongson spi hardware controller in the
> Loongson platforms and supports to use DTS and PCI framework to
> register spi device resources.
> 
> Signed-off-by: Yinbo Zhu <zhuyinbo-cXZgJK919ebM1kAEIRd3EQ@...lic.gmane.org>
> ---

[...]

> +int loongson_spi_init_master(struct device *dev, struct resource *res)
> +{
> +	struct spi_master *master;
> +	struct loongson_spi *spi;
> +	struct clk *clk;
> +	int ret;
> +
> +	master = spi_alloc_master(dev, sizeof(struct loongson_spi));

devm_spi_alloc_master()?
(to simplify code and be consistent with devm_ function below)

> +	if (master == NULL) {
> +		dev_dbg(dev, "master allocation failed\n");
> +		return -ENOMEM;
> +	}
> +
> +	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
> +	master->setup = loongson_spi_setup;
> +	master->prepare_message = loongson_spi_prepare_message;
> +	master->transfer_one = loongson_spi_transfer_one;
> +	master->unprepare_message = loongson_spi_unprepare_message;
> +	master->set_cs = loongson_spi_set_cs;
> +	master->num_chipselect = 4;
> +	master->dev.of_node = of_node_get(dev->of_node);
> +	dev_set_drvdata(dev, master);
> +
> +	spi = spi_master_get_devdata(master);
> +
> +	spi->master = master;
> +
> +	spi->base = devm_ioremap(dev, res->start, resource_size(res));
> +	if (spi->base == NULL) {
> +		dev_err(dev, "cannot map io\n");
> +		ret = -ENXIO;
> +		goto free_master;
> +	}
> +
> +	clk = devm_clk_get(dev, NULL);
> +	if (!IS_ERR(clk))
> +		spi->clk_rate = clk_get_rate(clk);
> +
> +	loongson_spi_reginit(spi);
> +
> +	spi->mode = 0;
> +	if (of_get_property(dev->of_node, "spi-nocs", NULL))
> +		spi->mode |= SPI_NO_CS;
> +
> +	ret = spi_register_master(master);
> +	if (ret < 0)
> +		goto free_master;
> +
> +	return ret;
> +
> +free_master:
> +	kfree(master);
> +	spi_master_put(master);
> +
> +	return ret;
> +}
> +EXPORT_SYMBOL_GPL(loongson_spi_init_master);

[...]

> diff --git a/drivers/spi/spi-loongson-pci.c b/drivers/spi/spi-loongson-pci.c
> new file mode 100644
> index 000000000000..b811de769ecb
> --- /dev/null
> +++ b/drivers/spi/spi-loongson-pci.c
> @@ -0,0 +1,89 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// PCI interface driver for Loongson SPI Support
> +// Copyright (C) 2023 Loongson Technology Corporation Limited
> +
> +#include <linux/pci.h>
> +
> +#include "spi-loongson.h"
> +
> +static int loongson_spi_pci_register(struct pci_dev *pdev,
> +			const struct pci_device_id *ent)
> +{
> +	int ret;
> +	unsigned char v8;
> +	struct resource res[2];
> +	struct device *dev = &pdev->dev;
> +
> +	ret = pci_enable_device(pdev);
> +	if (ret < 0) {
> +		dev_err(dev, "cannot enable pci device\n");
> +		goto err_out;
> +	}
> +
> +	ret = pci_request_region(pdev, 0, "loongson-spi io");
> +	if (ret < 0) {
> +		dev_err(dev, "cannot request region 0.\n");
> +		goto err_out;
> +	}
> +
> +	res[0].start = pci_resource_start(pdev, 0);
> +	res[0].end = pci_resource_end(pdev, 0);
> +	ret = pci_read_config_byte(pdev, PCI_INTERRUPT_LINE, &v8);
> +
> +	if (ret == PCIBIOS_SUCCESSFUL) {
> +		res[1].start = v8;
> +		res[1].end = v8;
> +	}
> +
> +	ret = loongson_spi_init_master(dev, res);
> +	if (ret)
> +		dev_err(dev, "failed to initialize master\n");
> +
> +err_out:
> +	return ret;
> +}
> +
> +static void loongson_spi_pci_unregister(struct pci_dev *pdev)
> +{
> +	pci_release_region(pdev, 0);

pci_disable_device()?

> +}

CJ

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ