spi: cadence_qspi: add reset handling
This adds reset handling to the cadence qspi driver. For backwards compatibility, only a warning is printed when failing to get reset handles. Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
This commit is contained in:
parent
ed784ac382
commit
ac7e14ae0d
@ -8,6 +8,7 @@
|
|||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <fdtdec.h>
|
#include <fdtdec.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <reset.h>
|
||||||
#include <spi.h>
|
#include <spi.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include "cadence_qspi.h"
|
#include "cadence_qspi.h"
|
||||||
@ -154,10 +155,17 @@ static int cadence_spi_probe(struct udevice *bus)
|
|||||||
{
|
{
|
||||||
struct cadence_spi_platdata *plat = bus->platdata;
|
struct cadence_spi_platdata *plat = bus->platdata;
|
||||||
struct cadence_spi_priv *priv = dev_get_priv(bus);
|
struct cadence_spi_priv *priv = dev_get_priv(bus);
|
||||||
|
int ret;
|
||||||
|
|
||||||
priv->regbase = plat->regbase;
|
priv->regbase = plat->regbase;
|
||||||
priv->ahbbase = plat->ahbbase;
|
priv->ahbbase = plat->ahbbase;
|
||||||
|
|
||||||
|
ret = reset_get_bulk(bus, &priv->resets);
|
||||||
|
if (ret)
|
||||||
|
dev_warn(bus, "Can't get reset: %d\n", ret);
|
||||||
|
else
|
||||||
|
reset_deassert_bulk(&priv->resets);
|
||||||
|
|
||||||
if (!priv->qspi_is_init) {
|
if (!priv->qspi_is_init) {
|
||||||
cadence_qspi_apb_controller_init(plat);
|
cadence_qspi_apb_controller_init(plat);
|
||||||
priv->qspi_is_init = 1;
|
priv->qspi_is_init = 1;
|
||||||
@ -166,6 +174,13 @@ static int cadence_spi_probe(struct udevice *bus)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cadence_spi_remove(struct udevice *dev)
|
||||||
|
{
|
||||||
|
struct cadence_spi_priv *priv = dev_get_priv(dev);
|
||||||
|
|
||||||
|
return reset_release_bulk(&priv->resets);
|
||||||
|
}
|
||||||
|
|
||||||
static int cadence_spi_set_mode(struct udevice *bus, uint mode)
|
static int cadence_spi_set_mode(struct udevice *bus, uint mode)
|
||||||
{
|
{
|
||||||
struct cadence_spi_priv *priv = dev_get_priv(bus);
|
struct cadence_spi_priv *priv = dev_get_priv(bus);
|
||||||
@ -342,4 +357,6 @@ U_BOOT_DRIVER(cadence_spi) = {
|
|||||||
.platdata_auto_alloc_size = sizeof(struct cadence_spi_platdata),
|
.platdata_auto_alloc_size = sizeof(struct cadence_spi_platdata),
|
||||||
.priv_auto_alloc_size = sizeof(struct cadence_spi_priv),
|
.priv_auto_alloc_size = sizeof(struct cadence_spi_priv),
|
||||||
.probe = cadence_spi_probe,
|
.probe = cadence_spi_probe,
|
||||||
|
.remove = cadence_spi_remove,
|
||||||
|
.flags = DM_FLAG_OS_PREPARE,
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
#ifndef __CADENCE_QSPI_H__
|
#ifndef __CADENCE_QSPI_H__
|
||||||
#define __CADENCE_QSPI_H__
|
#define __CADENCE_QSPI_H__
|
||||||
|
|
||||||
|
#include <reset.h>
|
||||||
|
|
||||||
#define CQSPI_IS_ADDR(cmd_len) (cmd_len > 1 ? 1 : 0)
|
#define CQSPI_IS_ADDR(cmd_len) (cmd_len > 1 ? 1 : 0)
|
||||||
|
|
||||||
#define CQSPI_NO_DECODER_MAX_CS 4
|
#define CQSPI_NO_DECODER_MAX_CS 4
|
||||||
@ -42,6 +44,8 @@ struct cadence_spi_priv {
|
|||||||
unsigned int qspi_calibrated_hz;
|
unsigned int qspi_calibrated_hz;
|
||||||
unsigned int qspi_calibrated_cs;
|
unsigned int qspi_calibrated_cs;
|
||||||
unsigned int previous_hz;
|
unsigned int previous_hz;
|
||||||
|
|
||||||
|
struct reset_ctl_bulk resets;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Functions call declaration */
|
/* Functions call declaration */
|
||||||
|
Loading…
Reference in New Issue
Block a user