xref: /openbmc/linux/drivers/firewire/nosy.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2b5e47729SStefan Richter /*
3b5e47729SStefan Richter  * Chip register definitions for PCILynx chipset.  Based on pcilynx.h
428646821SStefan Richter  * from the Linux 1394 drivers, but modified a bit so the names here
528646821SStefan Richter  * match the specification exactly (even though they have weird names,
628646821SStefan Richter  * like xxx_OVER_FLOW, or arbitrary abbreviations like SNTRJ for "sent
728646821SStefan Richter  * reject" etc.)
828646821SStefan Richter  */
928646821SStefan Richter 
1028646821SStefan Richter #define PCILYNX_MAX_REGISTER     0xfff
1128646821SStefan Richter #define PCILYNX_MAX_MEMORY       0xffff
1228646821SStefan Richter 
1328646821SStefan Richter #define PCI_LATENCY_CACHELINE             0x0c
1428646821SStefan Richter 
1528646821SStefan Richter #define MISC_CONTROL                      0x40
1628646821SStefan Richter #define MISC_CONTROL_SWRESET              (1<<0)
1728646821SStefan Richter 
1828646821SStefan Richter #define SERIAL_EEPROM_CONTROL             0x44
1928646821SStefan Richter 
2028646821SStefan Richter #define PCI_INT_STATUS                    0x48
2128646821SStefan Richter #define PCI_INT_ENABLE                    0x4c
2228646821SStefan Richter /* status and enable have identical bit numbers */
2328646821SStefan Richter #define PCI_INT_INT_PEND                  (1<<31)
2428646821SStefan Richter #define PCI_INT_FRC_INT                   (1<<30)
2528646821SStefan Richter #define PCI_INT_SLV_ADR_PERR              (1<<28)
2628646821SStefan Richter #define PCI_INT_SLV_DAT_PERR              (1<<27)
2728646821SStefan Richter #define PCI_INT_MST_DAT_PERR              (1<<26)
2828646821SStefan Richter #define PCI_INT_MST_DEV_TO                (1<<25)
2928646821SStefan Richter #define PCI_INT_INT_SLV_TO                (1<<23)
3028646821SStefan Richter #define PCI_INT_AUX_TO                    (1<<18)
3128646821SStefan Richter #define PCI_INT_AUX_INT                   (1<<17)
3228646821SStefan Richter #define PCI_INT_P1394_INT                 (1<<16)
3328646821SStefan Richter #define PCI_INT_DMA4_PCL                  (1<<9)
3428646821SStefan Richter #define PCI_INT_DMA4_HLT                  (1<<8)
3528646821SStefan Richter #define PCI_INT_DMA3_PCL                  (1<<7)
3628646821SStefan Richter #define PCI_INT_DMA3_HLT                  (1<<6)
3728646821SStefan Richter #define PCI_INT_DMA2_PCL                  (1<<5)
3828646821SStefan Richter #define PCI_INT_DMA2_HLT                  (1<<4)
3928646821SStefan Richter #define PCI_INT_DMA1_PCL                  (1<<3)
4028646821SStefan Richter #define PCI_INT_DMA1_HLT                  (1<<2)
4128646821SStefan Richter #define PCI_INT_DMA0_PCL                  (1<<1)
4228646821SStefan Richter #define PCI_INT_DMA0_HLT                  (1<<0)
4328646821SStefan Richter /* all DMA interrupts combined: */
4428646821SStefan Richter #define PCI_INT_DMA_ALL                   0x3ff
4528646821SStefan Richter 
4628646821SStefan Richter #define PCI_INT_DMA_HLT(chan)             (1 << (chan * 2))
4728646821SStefan Richter #define PCI_INT_DMA_PCL(chan)             (1 << (chan * 2 + 1))
4828646821SStefan Richter 
4928646821SStefan Richter #define LBUS_ADDR                         0xb4
5028646821SStefan Richter #define LBUS_ADDR_SEL_RAM                 (0x0<<16)
5128646821SStefan Richter #define LBUS_ADDR_SEL_ROM                 (0x1<<16)
5228646821SStefan Richter #define LBUS_ADDR_SEL_AUX                 (0x2<<16)
5328646821SStefan Richter #define LBUS_ADDR_SEL_ZV                  (0x3<<16)
5428646821SStefan Richter 
5528646821SStefan Richter #define GPIO_CTRL_A                       0xb8
5628646821SStefan Richter #define GPIO_CTRL_B                       0xbc
5728646821SStefan Richter #define GPIO_DATA_BASE                    0xc0
5828646821SStefan Richter 
5928646821SStefan Richter #define DMA_BREG(base, chan)              (base + chan * 0x20)
6028646821SStefan Richter #define DMA_SREG(base, chan)              (base + chan * 0x10)
6128646821SStefan Richter 
6228646821SStefan Richter #define PCL_NEXT_INVALID (1<<0)
6328646821SStefan Richter 
6428646821SStefan Richter /* transfer commands */
6528646821SStefan Richter #define PCL_CMD_RCV            (0x1<<24)
6628646821SStefan Richter #define PCL_CMD_RCV_AND_UPDATE (0xa<<24)
6728646821SStefan Richter #define PCL_CMD_XMT            (0x2<<24)
6828646821SStefan Richter #define PCL_CMD_UNFXMT         (0xc<<24)
6928646821SStefan Richter #define PCL_CMD_PCI_TO_LBUS    (0x8<<24)
7028646821SStefan Richter #define PCL_CMD_LBUS_TO_PCI    (0x9<<24)
7128646821SStefan Richter 
7228646821SStefan Richter /* aux commands */
7328646821SStefan Richter #define PCL_CMD_NOP            (0x0<<24)
7428646821SStefan Richter #define PCL_CMD_LOAD           (0x3<<24)
7528646821SStefan Richter #define PCL_CMD_STOREQ         (0x4<<24)
7628646821SStefan Richter #define PCL_CMD_STORED         (0xb<<24)
7728646821SStefan Richter #define PCL_CMD_STORE0         (0x5<<24)
7828646821SStefan Richter #define PCL_CMD_STORE1         (0x6<<24)
7928646821SStefan Richter #define PCL_CMD_COMPARE        (0xe<<24)
8028646821SStefan Richter #define PCL_CMD_SWAP_COMPARE   (0xf<<24)
8128646821SStefan Richter #define PCL_CMD_ADD            (0xd<<24)
8228646821SStefan Richter #define PCL_CMD_BRANCH         (0x7<<24)
8328646821SStefan Richter 
8428646821SStefan Richter /* BRANCH condition codes */
8528646821SStefan Richter #define PCL_COND_DMARDY_SET    (0x1<<20)
8628646821SStefan Richter #define PCL_COND_DMARDY_CLEAR  (0x2<<20)
8728646821SStefan Richter 
8828646821SStefan Richter #define PCL_GEN_INTR           (1<<19)
8928646821SStefan Richter #define PCL_LAST_BUFF          (1<<18)
9028646821SStefan Richter #define PCL_LAST_CMD           (PCL_LAST_BUFF)
9128646821SStefan Richter #define PCL_WAITSTAT           (1<<17)
9228646821SStefan Richter #define PCL_BIGENDIAN          (1<<16)
9328646821SStefan Richter #define PCL_ISOMODE            (1<<12)
9428646821SStefan Richter 
9528646821SStefan Richter #define DMA0_PREV_PCL                     0x100
9628646821SStefan Richter #define DMA1_PREV_PCL                     0x120
9728646821SStefan Richter #define DMA2_PREV_PCL                     0x140
9828646821SStefan Richter #define DMA3_PREV_PCL                     0x160
9928646821SStefan Richter #define DMA4_PREV_PCL                     0x180
10028646821SStefan Richter #define DMA_PREV_PCL(chan)                (DMA_BREG(DMA0_PREV_PCL, chan))
10128646821SStefan Richter 
10228646821SStefan Richter #define DMA0_CURRENT_PCL                  0x104
10328646821SStefan Richter #define DMA1_CURRENT_PCL                  0x124
10428646821SStefan Richter #define DMA2_CURRENT_PCL                  0x144
10528646821SStefan Richter #define DMA3_CURRENT_PCL                  0x164
10628646821SStefan Richter #define DMA4_CURRENT_PCL                  0x184
10728646821SStefan Richter #define DMA_CURRENT_PCL(chan)             (DMA_BREG(DMA0_CURRENT_PCL, chan))
10828646821SStefan Richter 
10928646821SStefan Richter #define DMA0_CHAN_STAT                    0x10c
11028646821SStefan Richter #define DMA1_CHAN_STAT                    0x12c
11128646821SStefan Richter #define DMA2_CHAN_STAT                    0x14c
11228646821SStefan Richter #define DMA3_CHAN_STAT                    0x16c
11328646821SStefan Richter #define DMA4_CHAN_STAT                    0x18c
11428646821SStefan Richter #define DMA_CHAN_STAT(chan)               (DMA_BREG(DMA0_CHAN_STAT, chan))
11528646821SStefan Richter /* CHAN_STATUS registers share bits */
11628646821SStefan Richter #define DMA_CHAN_STAT_SELFID              (1<<31)
11728646821SStefan Richter #define DMA_CHAN_STAT_ISOPKT              (1<<30)
11828646821SStefan Richter #define DMA_CHAN_STAT_PCIERR              (1<<29)
11928646821SStefan Richter #define DMA_CHAN_STAT_PKTERR              (1<<28)
12028646821SStefan Richter #define DMA_CHAN_STAT_PKTCMPL             (1<<27)
12128646821SStefan Richter #define DMA_CHAN_STAT_SPECIALACK          (1<<14)
12228646821SStefan Richter 
12328646821SStefan Richter #define DMA0_CHAN_CTRL                    0x110
12428646821SStefan Richter #define DMA1_CHAN_CTRL                    0x130
12528646821SStefan Richter #define DMA2_CHAN_CTRL                    0x150
12628646821SStefan Richter #define DMA3_CHAN_CTRL                    0x170
12728646821SStefan Richter #define DMA4_CHAN_CTRL                    0x190
12828646821SStefan Richter #define DMA_CHAN_CTRL(chan)               (DMA_BREG(DMA0_CHAN_CTRL, chan))
12928646821SStefan Richter /* CHAN_CTRL registers share bits */
13028646821SStefan Richter #define DMA_CHAN_CTRL_ENABLE              (1<<31)
13128646821SStefan Richter #define DMA_CHAN_CTRL_BUSY                (1<<30)
13228646821SStefan Richter #define DMA_CHAN_CTRL_LINK                (1<<29)
13328646821SStefan Richter 
13428646821SStefan Richter #define DMA0_READY                        0x114
13528646821SStefan Richter #define DMA1_READY                        0x134
13628646821SStefan Richter #define DMA2_READY                        0x154
13728646821SStefan Richter #define DMA3_READY                        0x174
13828646821SStefan Richter #define DMA4_READY                        0x194
13928646821SStefan Richter #define DMA_READY(chan)                   (DMA_BREG(DMA0_READY, chan))
14028646821SStefan Richter 
14128646821SStefan Richter #define DMA_GLOBAL_REGISTER               0x908
14228646821SStefan Richter 
14328646821SStefan Richter #define FIFO_SIZES                        0xa00
14428646821SStefan Richter 
14528646821SStefan Richter #define FIFO_CONTROL                      0xa10
14628646821SStefan Richter #define FIFO_CONTROL_GRF_FLUSH            (1<<4)
14728646821SStefan Richter #define FIFO_CONTROL_ITF_FLUSH            (1<<3)
14828646821SStefan Richter #define FIFO_CONTROL_ATF_FLUSH            (1<<2)
14928646821SStefan Richter 
15028646821SStefan Richter #define FIFO_XMIT_THRESHOLD               0xa14
15128646821SStefan Richter 
15228646821SStefan Richter #define DMA0_WORD0_CMP_VALUE              0xb00
15328646821SStefan Richter #define DMA1_WORD0_CMP_VALUE              0xb10
15428646821SStefan Richter #define DMA2_WORD0_CMP_VALUE              0xb20
15528646821SStefan Richter #define DMA3_WORD0_CMP_VALUE              0xb30
15628646821SStefan Richter #define DMA4_WORD0_CMP_VALUE              0xb40
15728646821SStefan Richter #define DMA_WORD0_CMP_VALUE(chan)	(DMA_SREG(DMA0_WORD0_CMP_VALUE, chan))
15828646821SStefan Richter 
15928646821SStefan Richter #define DMA0_WORD0_CMP_ENABLE             0xb04
16028646821SStefan Richter #define DMA1_WORD0_CMP_ENABLE             0xb14
16128646821SStefan Richter #define DMA2_WORD0_CMP_ENABLE             0xb24
16228646821SStefan Richter #define DMA3_WORD0_CMP_ENABLE             0xb34
16328646821SStefan Richter #define DMA4_WORD0_CMP_ENABLE             0xb44
16428646821SStefan Richter #define DMA_WORD0_CMP_ENABLE(chan)	(DMA_SREG(DMA0_WORD0_CMP_ENABLE, chan))
16528646821SStefan Richter 
16628646821SStefan Richter #define DMA0_WORD1_CMP_VALUE              0xb08
16728646821SStefan Richter #define DMA1_WORD1_CMP_VALUE              0xb18
16828646821SStefan Richter #define DMA2_WORD1_CMP_VALUE              0xb28
16928646821SStefan Richter #define DMA3_WORD1_CMP_VALUE              0xb38
17028646821SStefan Richter #define DMA4_WORD1_CMP_VALUE              0xb48
17128646821SStefan Richter #define DMA_WORD1_CMP_VALUE(chan)	(DMA_SREG(DMA0_WORD1_CMP_VALUE, chan))
17228646821SStefan Richter 
17328646821SStefan Richter #define DMA0_WORD1_CMP_ENABLE             0xb0c
17428646821SStefan Richter #define DMA1_WORD1_CMP_ENABLE             0xb1c
17528646821SStefan Richter #define DMA2_WORD1_CMP_ENABLE             0xb2c
17628646821SStefan Richter #define DMA3_WORD1_CMP_ENABLE             0xb3c
17728646821SStefan Richter #define DMA4_WORD1_CMP_ENABLE             0xb4c
17828646821SStefan Richter #define DMA_WORD1_CMP_ENABLE(chan)	(DMA_SREG(DMA0_WORD1_CMP_ENABLE, chan))
17928646821SStefan Richter /* word 1 compare enable flags */
18028646821SStefan Richter #define DMA_WORD1_CMP_MATCH_OTHERBUS      (1<<15)
18128646821SStefan Richter #define DMA_WORD1_CMP_MATCH_BROADCAST     (1<<14)
18228646821SStefan Richter #define DMA_WORD1_CMP_MATCH_BUS_BCAST     (1<<13)
18328646821SStefan Richter #define DMA_WORD1_CMP_MATCH_LOCAL_NODE    (1<<12)
18428646821SStefan Richter #define DMA_WORD1_CMP_MATCH_EXACT         (1<<11)
18528646821SStefan Richter #define DMA_WORD1_CMP_ENABLE_SELF_ID      (1<<10)
18628646821SStefan Richter #define DMA_WORD1_CMP_ENABLE_MASTER       (1<<8)
18728646821SStefan Richter 
18828646821SStefan Richter #define LINK_ID                           0xf00
18928646821SStefan Richter #define LINK_ID_BUS(id)                   (id<<22)
19028646821SStefan Richter #define LINK_ID_NODE(id)                  (id<<16)
19128646821SStefan Richter 
19228646821SStefan Richter #define LINK_CONTROL                      0xf04
19328646821SStefan Richter #define LINK_CONTROL_BUSY                 (1<<29)
19428646821SStefan Richter #define LINK_CONTROL_TX_ISO_EN            (1<<26)
19528646821SStefan Richter #define LINK_CONTROL_RX_ISO_EN            (1<<25)
19628646821SStefan Richter #define LINK_CONTROL_TX_ASYNC_EN          (1<<24)
19728646821SStefan Richter #define LINK_CONTROL_RX_ASYNC_EN          (1<<23)
19828646821SStefan Richter #define LINK_CONTROL_RESET_TX             (1<<21)
19928646821SStefan Richter #define LINK_CONTROL_RESET_RX             (1<<20)
20028646821SStefan Richter #define LINK_CONTROL_CYCMASTER            (1<<11)
20128646821SStefan Richter #define LINK_CONTROL_CYCSOURCE            (1<<10)
20228646821SStefan Richter #define LINK_CONTROL_CYCTIMEREN           (1<<9)
20328646821SStefan Richter #define LINK_CONTROL_RCV_CMP_VALID        (1<<7)
20428646821SStefan Richter #define LINK_CONTROL_SNOOP_ENABLE         (1<<6)
20528646821SStefan Richter 
20628646821SStefan Richter #define CYCLE_TIMER                       0xf08
20728646821SStefan Richter 
20828646821SStefan Richter #define LINK_PHY                          0xf0c
20928646821SStefan Richter #define LINK_PHY_READ                     (1<<31)
21028646821SStefan Richter #define LINK_PHY_WRITE                    (1<<30)
21128646821SStefan Richter #define LINK_PHY_ADDR(addr)               (addr<<24)
21228646821SStefan Richter #define LINK_PHY_WDATA(data)              (data<<16)
21328646821SStefan Richter #define LINK_PHY_RADDR(addr)              (addr<<8)
21428646821SStefan Richter 
21528646821SStefan Richter #define LINK_INT_STATUS                   0xf14
21628646821SStefan Richter #define LINK_INT_ENABLE                   0xf18
21728646821SStefan Richter /* status and enable have identical bit numbers */
21828646821SStefan Richter #define LINK_INT_LINK_INT                 (1<<31)
21928646821SStefan Richter #define LINK_INT_PHY_TIME_OUT             (1<<30)
22028646821SStefan Richter #define LINK_INT_PHY_REG_RCVD             (1<<29)
22128646821SStefan Richter #define LINK_INT_PHY_BUSRESET             (1<<28)
22228646821SStefan Richter #define LINK_INT_TX_RDY                   (1<<26)
22328646821SStefan Richter #define LINK_INT_RX_DATA_RDY              (1<<25)
22428646821SStefan Richter #define LINK_INT_IT_STUCK                 (1<<20)
22528646821SStefan Richter #define LINK_INT_AT_STUCK                 (1<<19)
22628646821SStefan Richter #define LINK_INT_SNTRJ                    (1<<17)
22728646821SStefan Richter #define LINK_INT_HDR_ERR                  (1<<16)
22828646821SStefan Richter #define LINK_INT_TC_ERR                   (1<<15)
22928646821SStefan Richter #define LINK_INT_CYC_SEC                  (1<<11)
23028646821SStefan Richter #define LINK_INT_CYC_STRT                 (1<<10)
23128646821SStefan Richter #define LINK_INT_CYC_DONE                 (1<<9)
23228646821SStefan Richter #define LINK_INT_CYC_PEND                 (1<<8)
23328646821SStefan Richter #define LINK_INT_CYC_LOST                 (1<<7)
23428646821SStefan Richter #define LINK_INT_CYC_ARB_FAILED           (1<<6)
23528646821SStefan Richter #define LINK_INT_GRF_OVER_FLOW            (1<<5)
23628646821SStefan Richter #define LINK_INT_ITF_UNDER_FLOW           (1<<4)
23728646821SStefan Richter #define LINK_INT_ATF_UNDER_FLOW           (1<<3)
23828646821SStefan Richter #define LINK_INT_IARB_FAILED              (1<<0)
239