1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2010-2019 Intel Corporation
5 #include "opae_intel_max10.h"
7 static struct intel_max10_device *g_max10;
9 int max10_reg_read(unsigned int reg, unsigned int *val)
14 return spi_transaction_read(g_max10->spi_tran_dev,
15 reg, 4, (unsigned char *)val);
18 int max10_reg_write(unsigned int reg, unsigned int val)
23 return spi_transaction_write(g_max10->spi_tran_dev,
24 reg, 4, (unsigned char *)&val);
27 struct intel_max10_device *
28 intel_max10_device_probe(struct altera_spi_device *spi,
31 struct intel_max10_device *dev;
35 dev = opae_malloc(sizeof(*dev));
39 dev->spi_master = spi;
41 dev->spi_tran_dev = spi_transaction_init(spi, chipselect);
42 if (!dev->spi_tran_dev) {
43 dev_err(dev, "%s spi tran init fail\n", __func__);
47 /* set the max10 device firstly */
50 /* read FPGA loading information */
51 ret = max10_reg_read(FPGA_PAGE_INFO_OFF, &val);
53 dev_err(dev, "fail to get FPGA loading info\n");
56 dev_info(dev, "FPGA loaded from %s Image\n", val ? "User" : "Factory");
58 /* set PKVL Polling manually in BBS */
59 ret = max10_reg_write(PKVL_POLLING_CTRL, 0x3);
61 dev_err(dev, "%s set PKVL polling fail\n", __func__);
68 spi_transaction_remove(dev->spi_tran_dev);
76 int intel_max10_device_remove(struct intel_max10_device *dev)
81 if (dev->spi_tran_dev)
82 spi_transaction_remove(dev->spi_tran_dev);