drivers/spi/spi-amd-pci.c
35
struct amd_spi *amd_spi;
drivers/spi/spi-amd-pci.c
39
host = devm_spi_alloc_host(dev, sizeof(struct amd_spi));
drivers/spi/spi-amd-pci.c
43
amd_spi = spi_controller_get_devdata(host);
drivers/spi/spi-amd-pci.c
47
amd_spi->io_remap_addr = devm_ioremap(dev, io_base_addr, AMD_HID2_MEM_SIZE);
drivers/spi/spi-amd-pci.c
49
if (!amd_spi->io_remap_addr)
drivers/spi/spi-amd-pci.c
52
dev_dbg(dev, "io_remap_address: %p\n", amd_spi->io_remap_addr);
drivers/spi/spi-amd-pci.c
54
amd_spi->version = AMD_HID2_SPI;
drivers/spi/spi-amd.c
118
static inline u8 amd_spi_readreg8(struct amd_spi *amd_spi, int idx)
drivers/spi/spi-amd.c
120
return readb((u8 __iomem *)amd_spi->io_remap_addr + idx);
drivers/spi/spi-amd.c
123
static inline void amd_spi_writereg8(struct amd_spi *amd_spi, int idx, u8 val)
drivers/spi/spi-amd.c
125
writeb(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx));
drivers/spi/spi-amd.c
128
static void amd_spi_setclear_reg8(struct amd_spi *amd_spi, int idx, u8 set, u8 clear)
drivers/spi/spi-amd.c
130
u8 tmp = amd_spi_readreg8(amd_spi, idx);
drivers/spi/spi-amd.c
133
amd_spi_writereg8(amd_spi, idx, tmp);
drivers/spi/spi-amd.c
136
static inline u16 amd_spi_readreg16(struct amd_spi *amd_spi, int idx)
drivers/spi/spi-amd.c
138
return readw((u8 __iomem *)amd_spi->io_remap_addr + idx);
drivers/spi/spi-amd.c
141
static inline void amd_spi_writereg16(struct amd_spi *amd_spi, int idx, u16 val)
drivers/spi/spi-amd.c
143
writew(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx));
drivers/spi/spi-amd.c
146
static inline u32 amd_spi_readreg32(struct amd_spi *amd_spi, int idx)
drivers/spi/spi-amd.c
148
return readl((u8 __iomem *)amd_spi->io_remap_addr + idx);
drivers/spi/spi-amd.c
151
static inline void amd_spi_writereg32(struct amd_spi *amd_spi, int idx, u32 val)
drivers/spi/spi-amd.c
153
writel(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx));
drivers/spi/spi-amd.c
156
static inline u64 amd_spi_readreg64(struct amd_spi *amd_spi, int idx)
drivers/spi/spi-amd.c
158
return readq((u8 __iomem *)amd_spi->io_remap_addr + idx);
drivers/spi/spi-amd.c
161
static inline void amd_spi_writereg64(struct amd_spi *amd_spi, int idx, u64 val)
drivers/spi/spi-amd.c
163
writeq(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx));
drivers/spi/spi-amd.c
166
static inline void amd_spi_setclear_reg32(struct amd_spi *amd_spi, int idx, u32 set, u32 clear)
drivers/spi/spi-amd.c
168
u32 tmp = amd_spi_readreg32(amd_spi, idx);
drivers/spi/spi-amd.c
171
amd_spi_writereg32(amd_spi, idx, tmp);
drivers/spi/spi-amd.c
174
static void amd_spi_select_chip(struct amd_spi *amd_spi, u8 cs)
drivers/spi/spi-amd.c
176
amd_spi_setclear_reg8(amd_spi, AMD_SPI_ALT_CS_REG, cs, AMD_SPI_ALT_CS_MASK);
drivers/spi/spi-amd.c
179
static inline void amd_spi_clear_chip(struct amd_spi *amd_spi, u8 chip_select)
drivers/spi/spi-amd.c
181
amd_spi_writereg8(amd_spi, AMD_SPI_ALT_CS_REG, chip_select & ~AMD_SPI_ALT_CS_MASK);
drivers/spi/spi-amd.c
184
static void amd_spi_clear_fifo_ptr(struct amd_spi *amd_spi)
drivers/spi/spi-amd.c
186
amd_spi_setclear_reg32(amd_spi, AMD_SPI_CTRL0_REG, AMD_SPI_FIFO_CLEAR, AMD_SPI_FIFO_CLEAR);
drivers/spi/spi-amd.c
189
static int amd_spi_set_opcode(struct amd_spi *amd_spi, u8 cmd_opcode)
drivers/spi/spi-amd.c
191
switch (amd_spi->version) {
drivers/spi/spi-amd.c
193
amd_spi_setclear_reg32(amd_spi, AMD_SPI_CTRL0_REG, cmd_opcode,
drivers/spi/spi-amd.c
198
amd_spi_writereg8(amd_spi, AMD_SPI_OPCODE_REG, cmd_opcode);
drivers/spi/spi-amd.c
205
static inline void amd_spi_set_rx_count(struct amd_spi *amd_spi, u8 rx_count)
drivers/spi/spi-amd.c
207
amd_spi_writereg8(amd_spi, AMD_SPI_RX_COUNT_REG, rx_count);
drivers/spi/spi-amd.c
210
static inline void amd_spi_set_tx_count(struct amd_spi *amd_spi, u8 tx_count)
drivers/spi/spi-amd.c
212
amd_spi_writereg8(amd_spi, AMD_SPI_TX_COUNT_REG, tx_count);
drivers/spi/spi-amd.c
215
static int amd_spi_busy_wait(struct amd_spi *amd_spi)
drivers/spi/spi-amd.c
220
switch (amd_spi->version) {
drivers/spi/spi-amd.c
232
return readl_poll_timeout(amd_spi->io_remap_addr + reg, val,
drivers/spi/spi-amd.c
236
static int amd_spi_execute_opcode(struct amd_spi *amd_spi)
drivers/spi/spi-amd.c
240
ret = amd_spi_busy_wait(amd_spi);
drivers/spi/spi-amd.c
244
switch (amd_spi->version) {
drivers/spi/spi-amd.c
247
amd_spi_setclear_reg32(amd_spi, AMD_SPI_CTRL0_REG, AMD_SPI_EXEC_CMD,
drivers/spi/spi-amd.c
253
amd_spi_setclear_reg8(amd_spi, AMD_SPI_CMD_TRIGGER_REG,
drivers/spi/spi-amd.c
263
struct amd_spi *amd_spi = spi_controller_get_devdata(spi->controller);
drivers/spi/spi-amd.c
265
amd_spi_clear_fifo_ptr(amd_spi);
drivers/spi/spi-amd.c
282
static void amd_set_spi_freq(struct amd_spi *amd_spi, u32 speed_hz)
drivers/spi/spi-amd.c
290
if (amd_spi->speed_hz == amd_spi_freq[i].speed_hz)
drivers/spi/spi-amd.c
293
amd_spi->speed_hz = amd_spi_freq[i].speed_hz;
drivers/spi/spi-amd.c
297
amd_spi_setclear_reg32(amd_spi, AMD_SPI_ENA_REG, alt_spd,
drivers/spi/spi-amd.c
300
if (amd_spi->speed_hz == AMD_SPI_MAX_HZ)
drivers/spi/spi-amd.c
301
amd_spi_setclear_reg32(amd_spi, AMD_SPI_ENA_REG, 1,
drivers/spi/spi-amd.c
307
amd_spi_setclear_reg32(amd_spi, AMD_SPI_SPEED_REG, spd7_val,
drivers/spi/spi-amd.c
312
static inline int amd_spi_fifo_xfer(struct amd_spi *amd_spi,
drivers/spi/spi-amd.c
326
amd_set_spi_freq(amd_spi, xfer->speed_hz);
drivers/spi/spi-amd.c
328
amd_set_spi_freq(amd_spi, spi->max_speed_hz);
drivers/spi/spi-amd.c
341
amd_spi_writereg8(amd_spi, fifo_pos + i, buf[i]);
drivers/spi/spi-amd.c
356
amd_spi_set_opcode(amd_spi, cmd_opcode);
drivers/spi/spi-amd.c
357
amd_spi_set_tx_count(amd_spi, tx_len);
drivers/spi/spi-amd.c
358
amd_spi_set_rx_count(amd_spi, rx_len);
drivers/spi/spi-amd.c
361
message->status = amd_spi_execute_opcode(amd_spi);
drivers/spi/spi-amd.c
366
message->status = amd_spi_busy_wait(amd_spi);
drivers/spi/spi-amd.c
375
buf[i] = amd_spi_readreg8(amd_spi, fifo_pos + i);
drivers/spi/spi-amd.c
384
switch (amd_spi->version) {
drivers/spi/spi-amd.c
389
amd_spi_clear_chip(amd_spi, spi_get_chipselect(message->spi, 0));
drivers/spi/spi-amd.c
443
struct amd_spi *amd_spi = spi_controller_get_devdata(mem->spi->controller);
drivers/spi/spi-amd.c
458
if (amd_spi->version == AMD_HID2_SPI) {
drivers/spi/spi-amd.c
478
struct amd_spi *amd_spi = spi_controller_get_devdata(mem->spi->controller);
drivers/spi/spi-amd.c
486
if (amd_spi->version == AMD_HID2_SPI && (amd_is_spi_read_cmd(op->cmd.opcode) ||
drivers/spi/spi-amd.c
495
static void amd_spi_set_addr(struct amd_spi *amd_spi,
drivers/spi/spi-amd.c
505
amd_spi_writereg8(amd_spi, base_addr - i - 1, addr_val &
drivers/spi/spi-amd.c
511
static void amd_spi_hiddma_write(struct amd_spi *amd_spi, const struct spi_mem_op *op)
drivers/spi/spi-amd.c
520
hid_regval = amd_spi->phy_dma_buf | BIT(0);
drivers/spi/spi-amd.c
521
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_OUTPUT_BUF0, hid_regval);
drivers/spi/spi-amd.c
524
hid_regval = amd_spi_readreg32(amd_spi, AMD_SPI_HID2_WRITE_CNTRL1);
drivers/spi/spi-amd.c
526
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_WRITE_CNTRL1, hid_regval);
drivers/spi/spi-amd.c
529
hid_cmd_start = amd_spi_readreg16(amd_spi, AMD_SPI_HID2_CMD_START);
drivers/spi/spi-amd.c
530
amd_spi_writereg16(amd_spi, AMD_SPI_HID2_CMD_START, (hid_cmd_start | BIT(2)));
drivers/spi/spi-amd.c
533
readw_poll_timeout(amd_spi->io_remap_addr + AMD_SPI_HID2_INT_STATUS, val,
drivers/spi/spi-amd.c
537
val = amd_spi_readreg16(amd_spi, AMD_SPI_HID2_INT_STATUS);
drivers/spi/spi-amd.c
538
amd_spi_writereg16(amd_spi, AMD_SPI_HID2_INT_STATUS, val);
drivers/spi/spi-amd.c
541
static void amd_spi_mem_data_out(struct amd_spi *amd_spi,
drivers/spi/spi-amd.c
556
if (amd_spi->version == AMD_HID2_SPI && amd_is_spi_write_cmd(op->cmd.opcode)) {
drivers/spi/spi-amd.c
557
u64 *dma_buf64 = (u64 *)(amd_spi->dma_virt_addr + op->addr.nbytes + op->cmd.nbytes);
drivers/spi/spi-amd.c
558
u8 *dma_buf = (u8 *)amd_spi->dma_virt_addr;
drivers/spi/spi-amd.c
580
amd_spi_hiddma_write(amd_spi, op);
drivers/spi/spi-amd.c
582
amd_spi_set_opcode(amd_spi, op->cmd.opcode);
drivers/spi/spi-amd.c
583
amd_spi_set_addr(amd_spi, op);
drivers/spi/spi-amd.c
586
amd_spi_writereg64(amd_spi, base_addr + op->dummy.nbytes + (i * 8),
drivers/spi/spi-amd.c
591
amd_spi_writereg8(amd_spi,
drivers/spi/spi-amd.c
596
amd_spi_set_tx_count(amd_spi, op->addr.nbytes + op->data.nbytes);
drivers/spi/spi-amd.c
597
amd_spi_set_rx_count(amd_spi, 0);
drivers/spi/spi-amd.c
598
amd_spi_clear_fifo_ptr(amd_spi);
drivers/spi/spi-amd.c
599
amd_spi_execute_opcode(amd_spi);
drivers/spi/spi-amd.c
603
static void amd_spi_hiddma_read(struct amd_spi *amd_spi, const struct spi_mem_op *op)
drivers/spi/spi-amd.c
609
hid_regval = amd_spi_readreg32(amd_spi, AMD_SPI_HID2_READ_CNTRL0);
drivers/spi/spi-amd.c
619
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_READ_CNTRL0, hid_regval);
drivers/spi/spi-amd.c
622
hid_regval = amd_spi_readreg32(amd_spi, AMD_SPI_HID2_READ_CNTRL2);
drivers/spi/spi-amd.c
634
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_READ_CNTRL2, hid_regval);
drivers/spi/spi-amd.c
640
hid_regval = amd_spi->phy_dma_buf | BIT(5) | BIT(0);
drivers/spi/spi-amd.c
641
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_INPUT_RING_BUF0, hid_regval);
drivers/spi/spi-amd.c
644
hid_regval = amd_spi_readreg32(amd_spi, AMD_SPI_HID2_READ_CNTRL1);
drivers/spi/spi-amd.c
646
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_READ_CNTRL1, hid_regval);
drivers/spi/spi-amd.c
649
hid_cmd_start = amd_spi_readreg16(amd_spi, AMD_SPI_HID2_CMD_START);
drivers/spi/spi-amd.c
650
amd_spi_writereg16(amd_spi, AMD_SPI_HID2_CMD_START, (hid_cmd_start | BIT(3)));
drivers/spi/spi-amd.c
653
readw_poll_timeout(amd_spi->io_remap_addr + AMD_SPI_HID2_INT_STATUS, val,
drivers/spi/spi-amd.c
657
val = amd_spi_readreg16(amd_spi, AMD_SPI_HID2_INT_STATUS);
drivers/spi/spi-amd.c
658
amd_spi_writereg16(amd_spi, AMD_SPI_HID2_INT_STATUS, val);
drivers/spi/spi-amd.c
661
static void amd_spi_mem_data_in(struct amd_spi *amd_spi,
drivers/spi/spi-amd.c
676
if (amd_spi->version == AMD_HID2_SPI && amd_is_spi_read_cmd(op->cmd.opcode)) {
drivers/spi/spi-amd.c
677
u64 *dma_buf64 = (u64 *)amd_spi->dma_virt_addr;
drivers/spi/spi-amd.c
680
amd_spi_hiddma_read(amd_spi, op);
drivers/spi/spi-amd.c
694
data = amd_spi_readreg32(amd_spi, AMD_SPI_HID2_CNTRL);
drivers/spi/spi-amd.c
695
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_CNTRL, data | BIT(5));
drivers/spi/spi-amd.c
698
amd_spi_set_opcode(amd_spi, op->cmd.opcode);
drivers/spi/spi-amd.c
699
amd_spi_set_addr(amd_spi, op);
drivers/spi/spi-amd.c
700
amd_spi_set_tx_count(amd_spi, op->addr.nbytes + op->dummy.nbytes);
drivers/spi/spi-amd.c
703
amd_spi_writereg8(amd_spi, (base_addr + i), 0xff);
drivers/spi/spi-amd.c
705
amd_spi_set_rx_count(amd_spi, op->data.nbytes);
drivers/spi/spi-amd.c
706
amd_spi_clear_fifo_ptr(amd_spi);
drivers/spi/spi-amd.c
707
amd_spi_execute_opcode(amd_spi);
drivers/spi/spi-amd.c
708
amd_spi_busy_wait(amd_spi);
drivers/spi/spi-amd.c
711
*buf_64++ = amd_spi_readreg64(amd_spi, base_addr + op->dummy.nbytes +
drivers/spi/spi-amd.c
716
buf[i] = amd_spi_readreg8(amd_spi, base_addr + op->dummy.nbytes +
drivers/spi/spi-amd.c
722
static void amd_set_spi_addr_mode(struct amd_spi *amd_spi,
drivers/spi/spi-amd.c
725
u32 val = amd_spi_readreg32(amd_spi, AMD_SPI_ADDR32CTRL_REG);
drivers/spi/spi-amd.c
728
amd_spi_writereg32(amd_spi, AMD_SPI_ADDR32CTRL_REG, val | BIT(0));
drivers/spi/spi-amd.c
730
amd_spi_writereg32(amd_spi, AMD_SPI_ADDR32CTRL_REG, val & ~BIT(0));
drivers/spi/spi-amd.c
736
struct amd_spi *amd_spi;
drivers/spi/spi-amd.c
738
amd_spi = spi_controller_get_devdata(mem->spi->controller);
drivers/spi/spi-amd.c
740
amd_set_spi_freq(amd_spi, op->max_freq);
drivers/spi/spi-amd.c
742
if (amd_spi->version == AMD_SPI_V2)
drivers/spi/spi-amd.c
743
amd_set_spi_addr_mode(amd_spi, op);
drivers/spi/spi-amd.c
747
amd_spi_mem_data_in(amd_spi, op);
drivers/spi/spi-amd.c
752
amd_spi_mem_data_out(amd_spi, op);
drivers/spi/spi-amd.c
774
struct amd_spi *amd_spi = spi_controller_get_devdata(host);
drivers/spi/spi-amd.c
777
amd_spi_select_chip(amd_spi, spi_get_chipselect(spi, 0));
drivers/spi/spi-amd.c
783
return amd_spi_fifo_xfer(amd_spi, host, msg);
drivers/spi/spi-amd.c
791
static int amd_spi_setup_hiddma(struct amd_spi *amd_spi, struct device *dev)
drivers/spi/spi-amd.c
801
amd_spi->dma_virt_addr = dmam_alloc_coherent(dev, AMD_SPI_HID2_DMA_SIZE * 2,
drivers/spi/spi-amd.c
802
&amd_spi->phy_dma_buf, GFP_KERNEL);
drivers/spi/spi-amd.c
803
if (!amd_spi->dma_virt_addr)
drivers/spi/spi-amd.c
810
hid_regval = amd_spi_readreg32(amd_spi, AMD_SPI_HID2_INT_MASK);
drivers/spi/spi-amd.c
812
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_INT_MASK, hid_regval);
drivers/spi/spi-amd.c
815
hid_regval = amd_spi_readreg32(amd_spi, AMD_SPI_HID2_CNTRL);
drivers/spi/spi-amd.c
816
amd_spi_writereg32(amd_spi, AMD_SPI_HID2_CNTRL, (hid_regval | GENMASK(13, 12)) & ~BIT(3));
drivers/spi/spi-amd.c
823
struct amd_spi *amd_spi = spi_controller_get_devdata(host);
drivers/spi/spi-amd.c
844
if (amd_spi->version == AMD_HID2_SPI)
drivers/spi/spi-amd.c
845
err = amd_spi_setup_hiddma(amd_spi, dev);
drivers/spi/spi-amd.c
855
struct amd_spi *amd_spi;
drivers/spi/spi-amd.c
858
host = devm_spi_alloc_host(dev, sizeof(struct amd_spi));
drivers/spi/spi-amd.c
862
amd_spi = spi_controller_get_devdata(host);
drivers/spi/spi-amd.c
863
amd_spi->io_remap_addr = devm_platform_ioremap_resource(pdev, 0);
drivers/spi/spi-amd.c
864
if (IS_ERR(amd_spi->io_remap_addr))
drivers/spi/spi-amd.c
865
return dev_err_probe(dev, PTR_ERR(amd_spi->io_remap_addr),
drivers/spi/spi-amd.c
868
dev_dbg(dev, "io_remap_address: %p\n", amd_spi->io_remap_addr);
drivers/spi/spi-amd.c
870
amd_spi->version = (uintptr_t)device_get_match_data(dev);
drivers/spi/spi-amd.c
871
host->bus_num = (amd_spi->version == AMD_HID2_SPI) ? 2 : 0;