171e2f4ddSJiaxun Yang /* SPDX-License-Identifier: GPL-2.0 */
271e2f4ddSJiaxun Yang /*
371e2f4ddSJiaxun Yang  * the definition file of cs5536 Virtual Support Module(VSM).
471e2f4ddSJiaxun Yang  * pci configuration space can be accessed through the VSM, so
571e2f4ddSJiaxun Yang  * there is no need of the MSR read/write now, except the spec.
671e2f4ddSJiaxun Yang  * MSR registers which are not implemented yet.
771e2f4ddSJiaxun Yang  *
871e2f4ddSJiaxun Yang  * Copyright (C) 2007 Lemote Inc.
971e2f4ddSJiaxun Yang  * Author : jlliu, liujl@lemote.com
1071e2f4ddSJiaxun Yang  */
1171e2f4ddSJiaxun Yang 
1271e2f4ddSJiaxun Yang #ifndef _CS5536_PCI_H
1371e2f4ddSJiaxun Yang #define _CS5536_PCI_H
1471e2f4ddSJiaxun Yang 
1571e2f4ddSJiaxun Yang #include <linux/types.h>
1671e2f4ddSJiaxun Yang #include <linux/pci_regs.h>
1771e2f4ddSJiaxun Yang 
1871e2f4ddSJiaxun Yang extern void cs5536_pci_conf_write4(int function, int reg, u32 value);
1971e2f4ddSJiaxun Yang extern u32 cs5536_pci_conf_read4(int function, int reg);
2071e2f4ddSJiaxun Yang 
2171e2f4ddSJiaxun Yang #define CS5536_ACC_INTR		9
2271e2f4ddSJiaxun Yang #define CS5536_IDE_INTR		14
2371e2f4ddSJiaxun Yang #define CS5536_USB_INTR		11
2471e2f4ddSJiaxun Yang #define CS5536_MFGPT_INTR	5
2571e2f4ddSJiaxun Yang #define CS5536_UART1_INTR	4
2671e2f4ddSJiaxun Yang #define CS5536_UART2_INTR	3
2771e2f4ddSJiaxun Yang 
2871e2f4ddSJiaxun Yang /************** PCI BUS DEVICE FUNCTION ***************/
2971e2f4ddSJiaxun Yang 
3071e2f4ddSJiaxun Yang /*
3171e2f4ddSJiaxun Yang  * PCI bus device function
3271e2f4ddSJiaxun Yang  */
3371e2f4ddSJiaxun Yang #define PCI_BUS_CS5536		0
3471e2f4ddSJiaxun Yang #define PCI_IDSEL_CS5536	14
3571e2f4ddSJiaxun Yang 
3671e2f4ddSJiaxun Yang /********** STANDARD PCI-2.2 EXPANSION ****************/
3771e2f4ddSJiaxun Yang 
3871e2f4ddSJiaxun Yang /*
3971e2f4ddSJiaxun Yang  * PCI configuration space
4071e2f4ddSJiaxun Yang  * we have to virtualize the PCI configure space head, so we should
4171e2f4ddSJiaxun Yang  * define the necessary IDs and some others.
4271e2f4ddSJiaxun Yang  */
4371e2f4ddSJiaxun Yang 
4471e2f4ddSJiaxun Yang /* CONFIG of PCI VENDOR ID*/
4571e2f4ddSJiaxun Yang #define CFG_PCI_VENDOR_ID(mod_dev_id, sys_vendor_id) \
4671e2f4ddSJiaxun Yang 	(((mod_dev_id) << 16) | (sys_vendor_id))
4771e2f4ddSJiaxun Yang 
4871e2f4ddSJiaxun Yang /* VENDOR ID */
4971e2f4ddSJiaxun Yang #define CS5536_VENDOR_ID	0x1022
5071e2f4ddSJiaxun Yang 
5171e2f4ddSJiaxun Yang /* DEVICE ID */
5271e2f4ddSJiaxun Yang #define CS5536_ISA_DEVICE_ID		0x2090
5371e2f4ddSJiaxun Yang #define CS5536_IDE_DEVICE_ID		0x209a
5471e2f4ddSJiaxun Yang #define CS5536_ACC_DEVICE_ID		0x2093
5571e2f4ddSJiaxun Yang #define CS5536_OHCI_DEVICE_ID		0x2094
5671e2f4ddSJiaxun Yang #define CS5536_EHCI_DEVICE_ID		0x2095
5771e2f4ddSJiaxun Yang 
5871e2f4ddSJiaxun Yang /* CLASS CODE : CLASS SUB-CLASS INTERFACE */
5971e2f4ddSJiaxun Yang #define CS5536_ISA_CLASS_CODE		0x060100
6071e2f4ddSJiaxun Yang #define CS5536_IDE_CLASS_CODE		0x010180
6171e2f4ddSJiaxun Yang #define CS5536_ACC_CLASS_CODE		0x040100
6271e2f4ddSJiaxun Yang #define CS5536_OHCI_CLASS_CODE		0x0C0310
6371e2f4ddSJiaxun Yang #define CS5536_EHCI_CLASS_CODE		0x0C0320
6471e2f4ddSJiaxun Yang 
6571e2f4ddSJiaxun Yang /* BHLC : BIST HEADER-TYPE LATENCY-TIMER CACHE-LINE-SIZE */
6671e2f4ddSJiaxun Yang 
6771e2f4ddSJiaxun Yang #define CFG_PCI_CACHE_LINE_SIZE(header_type, latency_timer)	\
6871e2f4ddSJiaxun Yang 	((PCI_NONE_BIST << 24) | ((header_type) << 16) \
6971e2f4ddSJiaxun Yang 		| ((latency_timer) << 8) | PCI_NORMAL_CACHE_LINE_SIZE);
7071e2f4ddSJiaxun Yang 
7171e2f4ddSJiaxun Yang #define PCI_NONE_BIST			0x00	/* RO not implemented yet. */
7271e2f4ddSJiaxun Yang #define PCI_BRIDGE_HEADER_TYPE		0x80	/* RO */
7371e2f4ddSJiaxun Yang #define PCI_NORMAL_HEADER_TYPE		0x00
7471e2f4ddSJiaxun Yang #define PCI_NORMAL_LATENCY_TIMER	0x00
7571e2f4ddSJiaxun Yang #define PCI_NORMAL_CACHE_LINE_SIZE	0x08	/* RW */
7671e2f4ddSJiaxun Yang 
7771e2f4ddSJiaxun Yang /* BAR */
7871e2f4ddSJiaxun Yang #define PCI_BAR0_REG			0x10
7971e2f4ddSJiaxun Yang #define PCI_BAR1_REG			0x14
8071e2f4ddSJiaxun Yang #define PCI_BAR2_REG			0x18
8171e2f4ddSJiaxun Yang #define PCI_BAR3_REG			0x1c
8271e2f4ddSJiaxun Yang #define PCI_BAR4_REG			0x20
8371e2f4ddSJiaxun Yang #define PCI_BAR5_REG			0x24
8471e2f4ddSJiaxun Yang #define PCI_BAR_RANGE_MASK		0xFFFFFFFF
8571e2f4ddSJiaxun Yang 
8671e2f4ddSJiaxun Yang /* CARDBUS CIS POINTER */
8771e2f4ddSJiaxun Yang #define PCI_CARDBUS_CIS_POINTER		0x00000000
8871e2f4ddSJiaxun Yang 
8971e2f4ddSJiaxun Yang /* SUBSYSTEM VENDOR ID	*/
9071e2f4ddSJiaxun Yang #define CS5536_SUB_VENDOR_ID		CS5536_VENDOR_ID
9171e2f4ddSJiaxun Yang 
9271e2f4ddSJiaxun Yang /* SUBSYSTEM ID */
9371e2f4ddSJiaxun Yang #define CS5536_ISA_SUB_ID		CS5536_ISA_DEVICE_ID
9471e2f4ddSJiaxun Yang #define CS5536_IDE_SUB_ID		CS5536_IDE_DEVICE_ID
9571e2f4ddSJiaxun Yang #define CS5536_ACC_SUB_ID		CS5536_ACC_DEVICE_ID
9671e2f4ddSJiaxun Yang #define CS5536_OHCI_SUB_ID		CS5536_OHCI_DEVICE_ID
9771e2f4ddSJiaxun Yang #define CS5536_EHCI_SUB_ID		CS5536_EHCI_DEVICE_ID
9871e2f4ddSJiaxun Yang 
9971e2f4ddSJiaxun Yang /* EXPANSION ROM BAR */
10071e2f4ddSJiaxun Yang #define PCI_EXPANSION_ROM_BAR		0x00000000
10171e2f4ddSJiaxun Yang 
10271e2f4ddSJiaxun Yang /* CAPABILITIES POINTER */
10371e2f4ddSJiaxun Yang #define PCI_CAPLIST_POINTER		0x00000000
10471e2f4ddSJiaxun Yang #define PCI_CAPLIST_USB_POINTER		0x40
10571e2f4ddSJiaxun Yang /* INTERRUPT */
10671e2f4ddSJiaxun Yang 
10771e2f4ddSJiaxun Yang #define CFG_PCI_INTERRUPT_LINE(pin, mod_intr) \
10871e2f4ddSJiaxun Yang 	((PCI_MAX_LATENCY << 24) | (PCI_MIN_GRANT << 16) | \
10971e2f4ddSJiaxun Yang 		((pin) << 8) | (mod_intr))
11071e2f4ddSJiaxun Yang 
11171e2f4ddSJiaxun Yang #define PCI_MAX_LATENCY			0x40
11271e2f4ddSJiaxun Yang #define PCI_MIN_GRANT			0x00
11371e2f4ddSJiaxun Yang #define PCI_DEFAULT_PIN			0x01
11471e2f4ddSJiaxun Yang 
11571e2f4ddSJiaxun Yang /*********** EXPANSION PCI REG ************************/
11671e2f4ddSJiaxun Yang 
11771e2f4ddSJiaxun Yang /*
11871e2f4ddSJiaxun Yang  * ISA EXPANSION
11971e2f4ddSJiaxun Yang  */
12071e2f4ddSJiaxun Yang #define PCI_UART1_INT_REG	0x50
12171e2f4ddSJiaxun Yang #define PCI_UART2_INT_REG	0x54
12271e2f4ddSJiaxun Yang #define PCI_ISA_FIXUP_REG	0x58
12371e2f4ddSJiaxun Yang 
12471e2f4ddSJiaxun Yang /*
12571e2f4ddSJiaxun Yang  * IDE EXPANSION
12671e2f4ddSJiaxun Yang  */
12771e2f4ddSJiaxun Yang #define PCI_IDE_CFG_REG		0x40
12871e2f4ddSJiaxun Yang #define CS5536_IDE_FLASH_SIGNATURE	0xDEADBEEF
12971e2f4ddSJiaxun Yang #define PCI_IDE_DTC_REG		0x48
13071e2f4ddSJiaxun Yang #define PCI_IDE_CAST_REG	0x4C
13171e2f4ddSJiaxun Yang #define PCI_IDE_ETC_REG		0x50
13271e2f4ddSJiaxun Yang #define PCI_IDE_PM_REG		0x54
13371e2f4ddSJiaxun Yang #define PCI_IDE_INT_REG		0x60
13471e2f4ddSJiaxun Yang 
13571e2f4ddSJiaxun Yang /*
13671e2f4ddSJiaxun Yang  * ACC EXPANSION
13771e2f4ddSJiaxun Yang  */
13871e2f4ddSJiaxun Yang #define PCI_ACC_INT_REG		0x50
13971e2f4ddSJiaxun Yang 
14071e2f4ddSJiaxun Yang /*
14171e2f4ddSJiaxun Yang  * OHCI EXPANSION : INTTERUPT IS IMPLEMENTED BY THE OHCI
14271e2f4ddSJiaxun Yang  */
14371e2f4ddSJiaxun Yang #define PCI_OHCI_PM_REG		0x40
14471e2f4ddSJiaxun Yang #define PCI_OHCI_INT_REG	0x50
14571e2f4ddSJiaxun Yang 
14671e2f4ddSJiaxun Yang /*
14771e2f4ddSJiaxun Yang  * EHCI EXPANSION
14871e2f4ddSJiaxun Yang  */
14971e2f4ddSJiaxun Yang #define PCI_EHCI_LEGSMIEN_REG	0x50
15071e2f4ddSJiaxun Yang #define PCI_EHCI_LEGSMISTS_REG	0x54
15171e2f4ddSJiaxun Yang #define PCI_EHCI_FLADJ_REG	0x60
15271e2f4ddSJiaxun Yang 
15371e2f4ddSJiaxun Yang #endif				/* _CS5536_PCI_H_ */
154