avionic design with actual uboot and tooling
submodule of avionic design uboot bootloader and with included tools to get you started , read readme.md and readme-tk1-loader.md
This commit is contained in:
15
u-boot/arch/x86/include/asm/arch-quark/acpi/irqroute.h
Normal file
15
u-boot/arch/x86/include/asm/arch-quark/acpi/irqroute.h
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <asm/arch/device.h>
|
||||
|
||||
#define PCI_DEV_PIRQ_ROUTES \
|
||||
PCI_DEV_PIRQ_ROUTE(QUARK_DEV_20, E, F, G, H), \
|
||||
PCI_DEV_PIRQ_ROUTE(QUARK_DEV_21, E, F, G, H), \
|
||||
PCI_DEV_PIRQ_ROUTE(QUARK_DEV_23, A, B, C, D)
|
||||
|
||||
#define PCIE_BRIDGE_IRQ_ROUTES \
|
||||
PCIE_BRIDGE_DEV(RP, QUARK_DEV_23, A, B, C, D)
|
||||
125
u-boot/arch/x86/include/asm/arch-quark/acpi/lpc.asl
Normal file
125
u-boot/arch/x86/include/asm/arch-quark/acpi/lpc.asl
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
/* Intel LPC Bus Device - 0:1f.0 */
|
||||
|
||||
Device (LPCB)
|
||||
{
|
||||
Name(_ADR, 0x001f0000)
|
||||
|
||||
OperationRegion(PRTX, PCI_Config, 0x60, 8)
|
||||
Field(PRTX, AnyAcc, NoLock, Preserve) {
|
||||
PRTA, 8,
|
||||
PRTB, 8,
|
||||
PRTC, 8,
|
||||
PRTD, 8,
|
||||
PRTE, 8,
|
||||
PRTF, 8,
|
||||
PRTG, 8,
|
||||
PRTH, 8,
|
||||
}
|
||||
|
||||
#include <asm/acpi/irqlinks.asl>
|
||||
|
||||
/* Firmware Hub */
|
||||
Device (FWH)
|
||||
{
|
||||
Name(_HID, EISAID("INT0800"))
|
||||
Name(_CRS, ResourceTemplate()
|
||||
{
|
||||
Memory32Fixed(ReadOnly, 0xff000000, 0x01000000)
|
||||
})
|
||||
}
|
||||
|
||||
/* 8259 Interrupt Controller */
|
||||
Device (PIC)
|
||||
{
|
||||
Name(_HID, EISAID("PNP0000"))
|
||||
Name(_CRS, ResourceTemplate()
|
||||
{
|
||||
IO(Decode16, 0x20, 0x20, 0x01, 0x02)
|
||||
IO(Decode16, 0x24, 0x24, 0x01, 0x02)
|
||||
IO(Decode16, 0x28, 0x28, 0x01, 0x02)
|
||||
IO(Decode16, 0x2c, 0x2c, 0x01, 0x02)
|
||||
IO(Decode16, 0x30, 0x30, 0x01, 0x02)
|
||||
IO(Decode16, 0x34, 0x34, 0x01, 0x02)
|
||||
IO(Decode16, 0x38, 0x38, 0x01, 0x02)
|
||||
IO(Decode16, 0x3c, 0x3c, 0x01, 0x02)
|
||||
IO(Decode16, 0xa0, 0xa0, 0x01, 0x02)
|
||||
IO(Decode16, 0xa4, 0xa4, 0x01, 0x02)
|
||||
IO(Decode16, 0xa8, 0xa8, 0x01, 0x02)
|
||||
IO(Decode16, 0xac, 0xac, 0x01, 0x02)
|
||||
IO(Decode16, 0xb0, 0xb0, 0x01, 0x02)
|
||||
IO(Decode16, 0xb4, 0xb4, 0x01, 0x02)
|
||||
IO(Decode16, 0xb8, 0xb8, 0x01, 0x02)
|
||||
IO(Decode16, 0xbc, 0xbc, 0x01, 0x02)
|
||||
IO(Decode16, 0x4d0, 0x4d0, 0x01, 0x02)
|
||||
IRQNoFlags () { 2 }
|
||||
})
|
||||
}
|
||||
|
||||
/* 8254 timer */
|
||||
Device (TIMR)
|
||||
{
|
||||
Name(_HID, EISAID("PNP0100"))
|
||||
Name(_CRS, ResourceTemplate()
|
||||
{
|
||||
IO(Decode16, 0x40, 0x40, 0x01, 0x04)
|
||||
IO(Decode16, 0x50, 0x50, 0x10, 0x04)
|
||||
IRQNoFlags() { 0 }
|
||||
})
|
||||
}
|
||||
|
||||
/* HPET */
|
||||
Device (HPET)
|
||||
{
|
||||
Name(_HID, EISAID("PNP0103"))
|
||||
Name(_CID, 0x010CD041)
|
||||
Name(_CRS, ResourceTemplate()
|
||||
{
|
||||
Memory32Fixed(ReadOnly, HPET_BASE_ADDRESS, HPET_BASE_SIZE)
|
||||
})
|
||||
|
||||
Method(_STA)
|
||||
{
|
||||
Return (STA_VISIBLE)
|
||||
}
|
||||
}
|
||||
|
||||
/* Real Time Clock */
|
||||
Device (RTC)
|
||||
{
|
||||
Name(_HID, EISAID("PNP0B00"))
|
||||
Name(_CRS, ResourceTemplate()
|
||||
{
|
||||
IO(Decode16, 0x70, 0x70, 1, 8)
|
||||
IRQNoFlags() { 8 }
|
||||
})
|
||||
}
|
||||
|
||||
/* LPC device: Resource consumption */
|
||||
Device (LDRC)
|
||||
{
|
||||
Name(_HID, EISAID("PNP0C02"))
|
||||
Name(_UID, 2)
|
||||
|
||||
Name(RBUF, ResourceTemplate()
|
||||
{
|
||||
IO(Decode16, 0x61, 0x61, 0x1, 0x01) /* NMI Status */
|
||||
IO(Decode16, 0x63, 0x63, 0x1, 0x01) /* CPU Reserved */
|
||||
IO(Decode16, 0x65, 0x65, 0x1, 0x01) /* CPU Reserved */
|
||||
IO(Decode16, 0x67, 0x67, 0x1, 0x01) /* CPU Reserved */
|
||||
IO(Decode16, 0x80, 0x80, 0x1, 0x01) /* Port 80 Post */
|
||||
IO(Decode16, 0x92, 0x92, 0x1, 0x01) /* CPU Reserved */
|
||||
IO(Decode16, 0xb2, 0xb2, 0x1, 0x02) /* SWSMI */
|
||||
})
|
||||
|
||||
Method(_CRS, 0, NotSerialized)
|
||||
{
|
||||
Return (RBUF)
|
||||
}
|
||||
}
|
||||
}
|
||||
33
u-boot/arch/x86/include/asm/arch-quark/acpi/platform.asl
Normal file
33
u-boot/arch/x86/include/asm/arch-quark/acpi/platform.asl
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <asm/acpi/statdef.asl>
|
||||
#include <asm/arch/iomap.h>
|
||||
#include <asm/arch/irq.h>
|
||||
|
||||
/*
|
||||
* The _PTS method (Prepare To Sleep) is called before the OS is
|
||||
* entering a sleep state. The sleep state number is passed in Arg0.
|
||||
*/
|
||||
Method(_PTS, 1)
|
||||
{
|
||||
}
|
||||
|
||||
/* The _WAK method is called on system wakeup */
|
||||
Method(_WAK, 1)
|
||||
{
|
||||
Return (Package() {0, 0})
|
||||
}
|
||||
|
||||
/* TODO: add CPU ASL support */
|
||||
|
||||
Scope (\_SB)
|
||||
{
|
||||
#include "southcluster.asl"
|
||||
}
|
||||
|
||||
/* Chipset specific sleep states */
|
||||
#include "sleepstates.asl"
|
||||
10
u-boot/arch/x86/include/asm/arch-quark/acpi/sleepstates.asl
Normal file
10
u-boot/arch/x86/include/asm/arch-quark/acpi/sleepstates.asl
Normal file
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
Name(\_S0, Package() {0x0, 0x0, 0x0, 0x0})
|
||||
Name(\_S3, Package() {0x5, 0x0, 0x0, 0x0})
|
||||
Name(\_S4, Package() {0x6, 0x0, 0x0, 0x0})
|
||||
Name(\_S5, Package() {0x7, 0x0, 0x0, 0x0})
|
||||
184
u-boot/arch/x86/include/asm/arch-quark/acpi/southcluster.asl
Normal file
184
u-boot/arch/x86/include/asm/arch-quark/acpi/southcluster.asl
Normal file
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
Device (PCI0)
|
||||
{
|
||||
Name(_HID, EISAID("PNP0A08")) /* PCIe */
|
||||
Name(_CID, EISAID("PNP0A03")) /* PCI */
|
||||
|
||||
Name(_ADR, 0)
|
||||
Name(_BBN, 0)
|
||||
|
||||
Name(MCRS, ResourceTemplate()
|
||||
{
|
||||
/* Bus Numbers */
|
||||
WordBusNumber(ResourceProducer, MinFixed, MaxFixed, PosDecode,
|
||||
0x0000, 0x0000, 0x00ff, 0x0000, 0x0100, , , PB00)
|
||||
|
||||
/* IO Region 0 */
|
||||
WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
|
||||
0x0000, 0x0000, 0x0cf7, 0x0000, 0x0cf8, , , PI00)
|
||||
|
||||
/* PCI Config Space */
|
||||
IO(Decode16, 0x0cf8, 0x0cf8, 0x0001, 0x0008)
|
||||
|
||||
/* IO Region 1 */
|
||||
WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
|
||||
0x0000, 0x0d00, 0xffff, 0x0000, 0xf300, , , PI01)
|
||||
|
||||
/* VGA memory (0xa0000-0xbffff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000a0000, 0x000bffff, 0x00000000,
|
||||
0x00020000, , , ASEG)
|
||||
|
||||
/* OPROM reserved (0xc0000-0xc3fff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000c0000, 0x000c3fff, 0x00000000,
|
||||
0x00004000, , , OPR0)
|
||||
|
||||
/* OPROM reserved (0xc4000-0xc7fff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000c4000, 0x000c7fff, 0x00000000,
|
||||
0x00004000, , , OPR1)
|
||||
|
||||
/* OPROM reserved (0xc8000-0xcbfff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000c8000, 0x000cbfff, 0x00000000,
|
||||
0x00004000, , , OPR2)
|
||||
|
||||
/* OPROM reserved (0xcc000-0xcffff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000cc000, 0x000cffff, 0x00000000,
|
||||
0x00004000, , , OPR3)
|
||||
|
||||
/* OPROM reserved (0xd0000-0xd3fff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000d0000, 0x000d3fff, 0x00000000,
|
||||
0x00004000, , , OPR4)
|
||||
|
||||
/* OPROM reserved (0xd4000-0xd7fff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000d4000, 0x000d7fff, 0x00000000,
|
||||
0x00004000, , , OPR5)
|
||||
|
||||
/* OPROM reserved (0xd8000-0xdbfff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000d8000, 0x000dbfff, 0x00000000,
|
||||
0x00004000, , , OPR6)
|
||||
|
||||
/* OPROM reserved (0xdc000-0xdffff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000dc000, 0x000dffff, 0x00000000,
|
||||
0x00004000, , , OPR7)
|
||||
|
||||
/* BIOS Extension (0xe0000-0xe3fff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000e0000, 0x000e3fff, 0x00000000,
|
||||
0x00004000, , , ESG0)
|
||||
|
||||
/* BIOS Extension (0xe4000-0xe7fff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000e4000, 0x000e7fff, 0x00000000,
|
||||
0x00004000, , , ESG1)
|
||||
|
||||
/* BIOS Extension (0xe8000-0xebfff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000e8000, 0x000ebfff, 0x00000000,
|
||||
0x00004000, , , ESG2)
|
||||
|
||||
/* BIOS Extension (0xec000-0xeffff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000ec000, 0x000effff, 0x00000000,
|
||||
0x00004000, , , ESG3)
|
||||
|
||||
/* System BIOS (0xf0000-0xfffff) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000f0000, 0x000fffff, 0x00000000,
|
||||
0x00010000, , , FSEG)
|
||||
|
||||
/* PCI Memory Region (TOLM-CONFIG_MMCONF_BASE_ADDRESS) */
|
||||
DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, , , PMEM)
|
||||
})
|
||||
|
||||
Method(_CRS, 0, Serialized)
|
||||
{
|
||||
/* Update PCI resource area */
|
||||
CreateDwordField(MCRS, ^PMEM._MIN, PMIN)
|
||||
CreateDwordField(MCRS, ^PMEM._MAX, PMAX)
|
||||
CreateDwordField(MCRS, ^PMEM._LEN, PLEN)
|
||||
|
||||
/*
|
||||
* Hardcode TOLM to 2GB for now (see DRAM_MAX_SIZE in quark.h)
|
||||
*
|
||||
* TODO: for generic usage, read TOLM value from register, or
|
||||
* from global NVS (not implemented by U-Boot yet).
|
||||
*/
|
||||
Store(0x80000000, PMIN)
|
||||
Store(Subtract(MCFG_BASE_ADDRESS, 1), PMAX)
|
||||
Add(Subtract(PMAX, PMIN), 1, PLEN)
|
||||
|
||||
Return (MCRS)
|
||||
}
|
||||
|
||||
/* Device Resource Consumption */
|
||||
Device (PDRC)
|
||||
{
|
||||
Name(_HID, EISAID("PNP0C02"))
|
||||
Name(_UID, 1)
|
||||
|
||||
Name(PDRS, ResourceTemplate() {
|
||||
Memory32Fixed(ReadWrite, CONFIG_ESRAM_BASE, 0x80000)
|
||||
Memory32Fixed(ReadWrite, MCFG_BASE_ADDRESS, MCFG_BASE_SIZE)
|
||||
Memory32Fixed(ReadWrite, RCBA_BASE_ADDRESS, RCBA_BASE_SIZE)
|
||||
IO(Decode16, SPI_DMA_BASE_ADDRESS, SPI_DMA_BASE_ADDRESS, 0x0010, SPI_DMA_BASE_SIZE)
|
||||
IO(Decode16, GPIO_BASE_ADDRESS, GPIO_BASE_ADDRESS, 0x0080, GPIO_BASE_SIZE)
|
||||
IO(Decode16, WDT_BASE_ADDRESS, WDT_BASE_ADDRESS, 0x0040, WDT_BASE_SIZE)
|
||||
})
|
||||
|
||||
/* Current Resource Settings */
|
||||
Method(_CRS, 0, Serialized)
|
||||
{
|
||||
Return (PDRS)
|
||||
}
|
||||
}
|
||||
|
||||
Method(_OSC, 4)
|
||||
{
|
||||
/* Check for proper GUID */
|
||||
If (LEqual(Arg0, ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
|
||||
/* Let OS control everything */
|
||||
Return (Arg3)
|
||||
} Else {
|
||||
/* Unrecognized UUID */
|
||||
CreateDWordField(Arg3, 0, CDW1)
|
||||
Or(CDW1, 4, CDW1)
|
||||
Return (Arg3)
|
||||
}
|
||||
}
|
||||
|
||||
/* LPC Bridge 0:1f.0 */
|
||||
#include "lpc.asl"
|
||||
|
||||
/* IRQ routing for each PCI device */
|
||||
#include <asm/acpi/irqroute.asl>
|
||||
}
|
||||
77
u-boot/arch/x86/include/asm/arch-quark/device.h
Normal file
77
u-boot/arch/x86/include/asm/arch-quark/device.h
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _QUARK_DEVICE_H_
|
||||
#define _QUARK_DEVICE_H_
|
||||
|
||||
/*
|
||||
* Internal PCI device numbers within the SoC.
|
||||
*
|
||||
* Note it must start with 0x_ prefix, as the device number macro will be
|
||||
* included in the ACPI ASL files (see irq_helper.h and irq_route.h).
|
||||
*/
|
||||
|
||||
#define QUARK_HOST_BRIDGE_DEV 0x00
|
||||
#define QUARK_HOST_BRIDGE_FUNC 0
|
||||
|
||||
#define QUARK_DEV_20 0x14
|
||||
#define QUARK_MMC_SDIO_FUNC 0
|
||||
#define QUARK_UART0_FUNC 1
|
||||
#define QUARK_USB_DEVICE_FUNC 2
|
||||
#define QUARK_USB_EHCI_FUNC 3
|
||||
#define QUARK_USB_OHCI_FUNC 4
|
||||
#define QUARK_UART1_FUNC 5
|
||||
#define QUARK_EMAC0_FUNC 6
|
||||
#define QUARK_EMAC1_FUNC 7
|
||||
|
||||
#define QUARK_DEV_21 0x15
|
||||
#define QUARK_SPI0_FUNC 0
|
||||
#define QUARK_SPI1_FUNC 1
|
||||
#define QUARK_I2C_GPIO_FUNC 2
|
||||
|
||||
#define QUARK_DEV_23 0x17
|
||||
#define QUARK_PCIE0_FUNC 0
|
||||
#define QUARK_PCIE1_FUNC 1
|
||||
|
||||
#define QUARK_LGC_BRIDGE_DEV 0x1f
|
||||
#define QUARK_LGC_BRIDGE_FUNC 0
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <pci.h>
|
||||
|
||||
#define QUARK_HOST_BRIDGE \
|
||||
PCI_BDF(0, QUARK_HOST_BRIDGE_DEV, QUARK_HOST_BRIDGE_FUNC)
|
||||
#define QUARK_MMC_SDIO \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_MMC_SDIO_FUNC)
|
||||
#define QUARK_UART0 \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_UART0_FUNC)
|
||||
#define QUARK_USB_DEVICE \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_USB_DEVICE_FUNC)
|
||||
#define QUARK_USB_EHCI \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_USB_EHCI_FUNC)
|
||||
#define QUARK_USB_OHCI \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_USB_OHCI_FUNC)
|
||||
#define QUARK_UART1 \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_UART1_FUNC)
|
||||
#define QUARK_EMAC0 \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_EMAC0_FUNC)
|
||||
#define QUARK_EMAC1 \
|
||||
PCI_BDF(0, QUARK_DEV_20, QUARK_EMAC1_FUNC)
|
||||
#define QUARK_SPI0 \
|
||||
PCI_BDF(0, QUARK_DEV_21, QUARK_SPI0_FUNC)
|
||||
#define QUARK_SPI1 \
|
||||
PCI_BDF(0, QUARK_DEV_21, QUARK_SPI1_FUNC)
|
||||
#define QUARK_I2C_GPIO \
|
||||
PCI_BDF(0, QUARK_DEV_21, QUARK_I2C_GPIO_FUNC)
|
||||
#define QUARK_PCIE0 \
|
||||
PCI_BDF(0, QUARK_DEV_23, QUARK_PCIE0_FUNC)
|
||||
#define QUARK_PCIE1 \
|
||||
PCI_BDF(0, QUARK_DEV_23, QUARK_PCIE1_FUNC)
|
||||
#define QUARK_LEGACY_BRIDGE \
|
||||
PCI_BDF(0, QUARK_LGC_BRIDGE_DEV, QUARK_LGC_BRIDGE_FUNC)
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* _QUARK_DEVICE_H_ */
|
||||
47
u-boot/arch/x86/include/asm/arch-quark/iomap.h
Normal file
47
u-boot/arch/x86/include/asm/arch-quark/iomap.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _QUARK_IOMAP_H_
|
||||
#define _QUARK_IOMAP_H_
|
||||
|
||||
/* Memory Mapped IO bases */
|
||||
|
||||
/* ESRAM */
|
||||
#define ESRAM_BASE_ADDRESS CONFIG_ESRAM_BASE
|
||||
#define ESRAM_BASE_SIZE ESRAM_SIZE
|
||||
|
||||
/* PCI Configuration Space */
|
||||
#define MCFG_BASE_ADDRESS CONFIG_PCIE_ECAM_BASE
|
||||
#define MCFG_BASE_SIZE 0x10000000
|
||||
|
||||
/* High Performance Event Timer */
|
||||
#define HPET_BASE_ADDRESS 0xfed00000
|
||||
#define HPET_BASE_SIZE 0x400
|
||||
|
||||
/* Root Complex Base Address */
|
||||
#define RCBA_BASE_ADDRESS CONFIG_RCBA_BASE
|
||||
#define RCBA_BASE_SIZE 0x4000
|
||||
|
||||
/* IO Port bases */
|
||||
#define ACPI_PM1_BASE_ADDRESS CONFIG_ACPI_PM1_BASE
|
||||
#define ACPI_PM1_BASE_SIZE 0x10
|
||||
|
||||
#define ACPI_PBLK_BASE_ADDRESS CONFIG_ACPI_PBLK_BASE
|
||||
#define ACPI_PBLK_BASE_SIZE 0x10
|
||||
|
||||
#define SPI_DMA_BASE_ADDRESS CONFIG_SPI_DMA_BASE
|
||||
#define SPI_DMA_BASE_SIZE 0x10
|
||||
|
||||
#define GPIO_BASE_ADDRESS CONFIG_GPIO_BASE
|
||||
#define GPIO_BASE_SIZE 0x80
|
||||
|
||||
#define ACPI_GPE0_BASE_ADDRESS CONFIG_ACPI_GPE0_BASE
|
||||
#define ACPI_GPE0_BASE_SIZE 0x40
|
||||
|
||||
#define WDT_BASE_ADDRESS CONFIG_WDT_BASE
|
||||
#define WDT_BASE_SIZE 0x40
|
||||
|
||||
#endif /* _QUARK_IOMAP_H_ */
|
||||
19
u-boot/arch/x86/include/asm/arch-quark/irq.h
Normal file
19
u-boot/arch/x86/include/asm/arch-quark/irq.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _QUARK_IRQ_H_
|
||||
#define _QUARK_IRQ_H_
|
||||
|
||||
#define PIRQA_APIC_IRQ 16
|
||||
#define PIRQB_APIC_IRQ 17
|
||||
#define PIRQC_APIC_IRQ 18
|
||||
#define PIRQD_APIC_IRQ 19
|
||||
#define PIRQE_APIC_IRQ 20
|
||||
#define PIRQF_APIC_IRQ 21
|
||||
#define PIRQG_APIC_IRQ 22
|
||||
#define PIRQH_APIC_IRQ 23
|
||||
|
||||
#endif /* _QUARK_IRQ_H_ */
|
||||
187
u-boot/arch/x86/include/asm/arch-quark/mrc.h
Normal file
187
u-boot/arch/x86/include/asm/arch-quark/mrc.h
Normal file
@@ -0,0 +1,187 @@
|
||||
/*
|
||||
* Copyright (C) 2013, Intel Corporation
|
||||
* Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* Ported from Intel released Quark UEFI BIOS
|
||||
* QuarkSocPkg/QuarkNorthCluster/MemoryInit/Pei
|
||||
*
|
||||
* SPDX-License-Identifier: Intel
|
||||
*/
|
||||
|
||||
#ifndef _MRC_H_
|
||||
#define _MRC_H_
|
||||
|
||||
#define MRC_VERSION 0x0111
|
||||
|
||||
/* architectural definitions */
|
||||
#define NUM_CHANNELS 1 /* number of channels */
|
||||
#define NUM_RANKS 2 /* number of ranks per channel */
|
||||
#define NUM_BYTE_LANES 4 /* number of byte lanes per channel */
|
||||
|
||||
/* software limitations */
|
||||
#define MAX_CHANNELS 1
|
||||
#define MAX_RANKS 2
|
||||
#define MAX_BYTE_LANES 4
|
||||
|
||||
#define MAX_SOCKETS 1
|
||||
#define MAX_SIDES 1
|
||||
#define MAX_ROWS (MAX_SIDES * MAX_SOCKETS)
|
||||
|
||||
/* Specify DRAM and channel width */
|
||||
enum {
|
||||
X8, /* DRAM width */
|
||||
X16, /* DRAM width & Channel Width */
|
||||
X32 /* Channel Width */
|
||||
};
|
||||
|
||||
/* Specify DRAM speed */
|
||||
enum {
|
||||
DDRFREQ_800,
|
||||
DDRFREQ_1066
|
||||
};
|
||||
|
||||
/* Specify DRAM type */
|
||||
enum {
|
||||
DDR3,
|
||||
DDR3L
|
||||
};
|
||||
|
||||
/*
|
||||
* density: 0=512Mb, 1=Gb, 2=2Gb, 3=4Gb
|
||||
* cl: DRAM CAS Latency in clocks
|
||||
* ras: ACT to PRE command period
|
||||
* wtr: Delay from start of internal write transaction to internal read command
|
||||
* rrd: ACT to ACT command period (JESD79 specific to page size 1K/2K)
|
||||
* faw: Four activate window (JESD79 specific to page size 1K/2K)
|
||||
*
|
||||
* ras/wtr/rrd/faw timings are in picoseconds
|
||||
*
|
||||
* Refer to JEDEC spec (or DRAM datasheet) when changing these values.
|
||||
*/
|
||||
struct dram_params {
|
||||
uint8_t density;
|
||||
uint8_t cl;
|
||||
uint32_t ras;
|
||||
uint32_t wtr;
|
||||
uint32_t rrd;
|
||||
uint32_t faw;
|
||||
};
|
||||
|
||||
/*
|
||||
* Delay configuration for individual signals
|
||||
* Vref setting
|
||||
* Scrambler seed
|
||||
*/
|
||||
struct mrc_timings {
|
||||
uint32_t rcvn[NUM_CHANNELS][NUM_RANKS][NUM_BYTE_LANES];
|
||||
uint32_t rdqs[NUM_CHANNELS][NUM_RANKS][NUM_BYTE_LANES];
|
||||
uint32_t wdqs[NUM_CHANNELS][NUM_RANKS][NUM_BYTE_LANES];
|
||||
uint32_t wdq[NUM_CHANNELS][NUM_RANKS][NUM_BYTE_LANES];
|
||||
uint32_t vref[NUM_CHANNELS][NUM_BYTE_LANES];
|
||||
uint32_t wctl[NUM_CHANNELS][NUM_RANKS];
|
||||
uint32_t wcmd[NUM_CHANNELS];
|
||||
uint32_t scrambler_seed;
|
||||
/* need to save for the case of frequency change */
|
||||
uint8_t ddr_speed;
|
||||
};
|
||||
|
||||
/* Boot mode defined as bit mask (1<<n) */
|
||||
enum {
|
||||
BM_UNKNOWN,
|
||||
BM_COLD = 1, /* full training */
|
||||
BM_FAST = 2, /* restore timing parameters */
|
||||
BM_S3 = 4, /* resume from S3 */
|
||||
BM_WARM = 8
|
||||
};
|
||||
|
||||
/* MRC execution status */
|
||||
#define MRC_SUCCESS 0 /* initialization ok */
|
||||
#define MRC_E_MEMTEST 1 /* memtest failed */
|
||||
|
||||
/*
|
||||
* Memory Reference Code parameters
|
||||
*
|
||||
* It includes 3 parts:
|
||||
* - input parameters like boot mode and DRAM parameters
|
||||
* - context parameters for MRC internal state
|
||||
* - output parameters like initialization result and memory size
|
||||
*/
|
||||
struct mrc_params {
|
||||
/* Input parameters */
|
||||
uint32_t boot_mode; /* BM_COLD, BM_FAST, BM_WARM, BM_S3 */
|
||||
/* DRAM parameters */
|
||||
uint8_t dram_width; /* x8, x16 */
|
||||
uint8_t ddr_speed; /* DDRFREQ_800, DDRFREQ_1066 */
|
||||
uint8_t ddr_type; /* DDR3, DDR3L */
|
||||
uint8_t ecc_enables; /* 0, 1 (memory size reduced to 7/8) */
|
||||
uint8_t scrambling_enables; /* 0, 1 */
|
||||
/* 1, 3 (1'st rank has to be populated if 2'nd rank present) */
|
||||
uint32_t rank_enables;
|
||||
uint32_t channel_enables; /* 1 only */
|
||||
uint32_t channel_width; /* x16 only */
|
||||
/* 0, 1, 2 (mode 2 forced if ecc enabled) */
|
||||
uint32_t address_mode;
|
||||
/* REFRESH_RATE: 1=1.95us, 2=3.9us, 3=7.8us, others=RESERVED */
|
||||
uint8_t refresh_rate;
|
||||
/* SR_TEMP_RANGE: 0=normal, 1=extended, others=RESERVED */
|
||||
uint8_t sr_temp_range;
|
||||
/*
|
||||
* RON_VALUE: 0=34ohm, 1=40ohm, others=RESERVED
|
||||
* (select MRS1.DIC driver impedance control)
|
||||
*/
|
||||
uint8_t ron_value;
|
||||
/* RTT_NOM_VALUE: 0=40ohm, 1=60ohm, 2=120ohm, others=RESERVED */
|
||||
uint8_t rtt_nom_value;
|
||||
/* RD_ODT_VALUE: 0=off, 1=60ohm, 2=120ohm, 3=180ohm, others=RESERVED */
|
||||
uint8_t rd_odt_value;
|
||||
struct dram_params params;
|
||||
/* Internally used context parameters */
|
||||
uint32_t board_id; /* board layout (use x8 or x16 memory) */
|
||||
uint32_t hte_setup; /* when set hte reconfiguration requested */
|
||||
uint32_t menu_after_mrc;
|
||||
uint32_t power_down_disable;
|
||||
uint32_t tune_rcvn;
|
||||
uint32_t channel_size[NUM_CHANNELS];
|
||||
uint32_t column_bits[NUM_CHANNELS];
|
||||
uint32_t row_bits[NUM_CHANNELS];
|
||||
uint32_t mrs1; /* register content saved during training */
|
||||
uint8_t first_run;
|
||||
/* Output parameters */
|
||||
/* initialization result (non zero specifies error code) */
|
||||
uint32_t status;
|
||||
/* total memory size in bytes (excludes ECC banks) */
|
||||
uint32_t mem_size;
|
||||
/* training results (also used on input) */
|
||||
struct mrc_timings timings;
|
||||
};
|
||||
|
||||
/*
|
||||
* MRC memory initialization structure
|
||||
*
|
||||
* post_code: a 16-bit post code of a specific initialization routine
|
||||
* boot_path: bitwise or of BM_COLD, BM_FAST, BM_WARM and BM_S3
|
||||
* init_fn: real memory initialization routine
|
||||
*/
|
||||
struct mem_init {
|
||||
uint16_t post_code;
|
||||
uint16_t boot_path;
|
||||
void (*init_fn)(struct mrc_params *mrc_params);
|
||||
};
|
||||
|
||||
/* MRC platform data flags */
|
||||
#define MRC_FLAG_ECC_EN 0x00000001
|
||||
#define MRC_FLAG_SCRAMBLE_EN 0x00000002
|
||||
#define MRC_FLAG_MEMTEST_EN 0x00000004
|
||||
/* 0b DDR "fly-by" topology else 1b DDR "tree" topology */
|
||||
#define MRC_FLAG_TOP_TREE_EN 0x00000008
|
||||
/* If set ODR signal is asserted to DRAM devices on writes */
|
||||
#define MRC_FLAG_WR_ODT_EN 0x00000010
|
||||
|
||||
/**
|
||||
* mrc_init - Memory Reference Code initialization entry routine
|
||||
*
|
||||
* @mrc_params: parameters for MRC
|
||||
*/
|
||||
void mrc_init(struct mrc_params *mrc_params);
|
||||
|
||||
#endif /* _MRC_H_ */
|
||||
137
u-boot/arch/x86/include/asm/arch-quark/msg_port.h
Normal file
137
u-boot/arch/x86/include/asm/arch-quark/msg_port.h
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _QUARK_MSG_PORT_H_
|
||||
#define _QUARK_MSG_PORT_H_
|
||||
|
||||
/*
|
||||
* In the Quark SoC, some chipset commands are accomplished by utilizing
|
||||
* the internal message network within the host bridge (D0:F0). Accesses
|
||||
* to this network are accomplished by populating the message control
|
||||
* register (MCR), Message Control Register eXtension (MCRX) and the
|
||||
* message data register (MDR).
|
||||
*/
|
||||
#define MSG_CTRL_REG 0xd0 /* Message Control Register */
|
||||
#define MSG_DATA_REG 0xd4 /* Message Data Register */
|
||||
#define MSG_CTRL_EXT_REG 0xd8 /* Message Control Register EXT */
|
||||
|
||||
/* Normal Read/Write OpCodes */
|
||||
#define MSG_OP_READ 0x10
|
||||
#define MSG_OP_WRITE 0x11
|
||||
|
||||
/* Alternative Read/Write OpCodes */
|
||||
#define MSG_OP_ALT_READ 0x06
|
||||
#define MSG_OP_ALT_WRITE 0x07
|
||||
|
||||
/* IO Read/Write OpCodes */
|
||||
#define MSG_OP_IO_READ 0x02
|
||||
#define MSG_OP_IO_WRITE 0x03
|
||||
|
||||
/* All byte enables */
|
||||
#define MSG_BYTE_ENABLE 0xf0
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/**
|
||||
* msg_port_setup - set up the message port control register
|
||||
*
|
||||
* @op: message bus access opcode
|
||||
* @port: port number on the message bus
|
||||
* @reg: register number within a port
|
||||
*/
|
||||
void msg_port_setup(int op, int port, int reg);
|
||||
|
||||
/**
|
||||
* msg_port_read - read a message port register using normal opcode
|
||||
*
|
||||
* @port: port number on the message bus
|
||||
* @reg: register number within a port
|
||||
*
|
||||
* @return: message port register value
|
||||
*/
|
||||
u32 msg_port_read(u8 port, u32 reg);
|
||||
|
||||
/**
|
||||
* msg_port_write - write a message port register using normal opcode
|
||||
*
|
||||
* @port: port number on the message bus
|
||||
* @reg: register number within a port
|
||||
* @value: register value to write
|
||||
*/
|
||||
void msg_port_write(u8 port, u32 reg, u32 value);
|
||||
|
||||
/**
|
||||
* msg_port_alt_read - read a message port register using alternative opcode
|
||||
*
|
||||
* @port: port number on the message bus
|
||||
* @reg: register number within a port
|
||||
*
|
||||
* @return: message port register value
|
||||
*/
|
||||
u32 msg_port_alt_read(u8 port, u32 reg);
|
||||
|
||||
/**
|
||||
* msg_port_alt_write - write a message port register using alternative opcode
|
||||
*
|
||||
* @port: port number on the message bus
|
||||
* @reg: register number within a port
|
||||
* @value: register value to write
|
||||
*/
|
||||
void msg_port_alt_write(u8 port, u32 reg, u32 value);
|
||||
|
||||
/**
|
||||
* msg_port_io_read - read a message port register using I/O opcode
|
||||
*
|
||||
* @port: port number on the message bus
|
||||
* @reg: register number within a port
|
||||
*
|
||||
* @return: message port register value
|
||||
*/
|
||||
u32 msg_port_io_read(u8 port, u32 reg);
|
||||
|
||||
/**
|
||||
* msg_port_io_write - write a message port register using I/O opcode
|
||||
*
|
||||
* @port: port number on the message bus
|
||||
* @reg: register number within a port
|
||||
* @value: register value to write
|
||||
*/
|
||||
void msg_port_io_write(u8 port, u32 reg, u32 value);
|
||||
|
||||
/* clrbits, setbits, clrsetbits macros for message port access */
|
||||
|
||||
#define msg_port_normal_read msg_port_read
|
||||
#define msg_port_normal_write msg_port_write
|
||||
|
||||
#define msg_port_generic_clrsetbits(type, port, reg, clr, set) \
|
||||
msg_port_##type##_write(port, reg, \
|
||||
(msg_port_##type##_read(port, reg) \
|
||||
& ~(clr)) | (set))
|
||||
|
||||
#define msg_port_clrbits(port, reg, clr) \
|
||||
msg_port_generic_clrsetbits(normal, port, reg, clr, 0)
|
||||
#define msg_port_setbits(port, reg, set) \
|
||||
msg_port_generic_clrsetbits(normal, port, reg, 0, set)
|
||||
#define msg_port_clrsetbits(port, reg, clr, set) \
|
||||
msg_port_generic_clrsetbits(normal, port, reg, clr, set)
|
||||
|
||||
#define msg_port_alt_clrbits(port, reg, clr) \
|
||||
msg_port_generic_clrsetbits(alt, port, reg, clr, 0)
|
||||
#define msg_port_alt_setbits(port, reg, set) \
|
||||
msg_port_generic_clrsetbits(alt, port, reg, 0, set)
|
||||
#define msg_port_alt_clrsetbits(port, reg, clr, set) \
|
||||
msg_port_generic_clrsetbits(alt, port, reg, clr, set)
|
||||
|
||||
#define msg_port_io_clrbits(port, reg, clr) \
|
||||
msg_port_generic_clrsetbits(io, port, reg, clr, 0)
|
||||
#define msg_port_io_setbits(port, reg, set) \
|
||||
msg_port_generic_clrsetbits(io, port, reg, 0, set)
|
||||
#define msg_port_io_clrsetbits(port, reg, clr, set) \
|
||||
msg_port_generic_clrsetbits(io, port, reg, clr, set)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* _QUARK_MSG_PORT_H_ */
|
||||
260
u-boot/arch/x86/include/asm/arch-quark/quark.h
Normal file
260
u-boot/arch/x86/include/asm/arch-quark/quark.h
Normal file
@@ -0,0 +1,260 @@
|
||||
/*
|
||||
* Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _QUARK_H_
|
||||
#define _QUARK_H_
|
||||
|
||||
/* Message Bus Ports */
|
||||
#define MSG_PORT_MEM_ARBITER 0x00
|
||||
#define MSG_PORT_HOST_BRIDGE 0x03
|
||||
#define MSG_PORT_RMU 0x04
|
||||
#define MSG_PORT_MEM_MGR 0x05
|
||||
#define MSG_PORT_USB_AFE 0x14
|
||||
#define MSG_PORT_PCIE_AFE 0x16
|
||||
#define MSG_PORT_SOC_UNIT 0x31
|
||||
|
||||
/* Port 0x00: Memory Arbiter Message Port Registers */
|
||||
|
||||
/* Enhanced Configuration Space */
|
||||
#define AEC_CTRL 0x00
|
||||
|
||||
/* Port 0x03: Host Bridge Message Port Registers */
|
||||
|
||||
/* Host Miscellaneous Controls 2 */
|
||||
#define HMISC2 0x03
|
||||
|
||||
#define HMISC2_SEGE 0x00000002
|
||||
#define HMISC2_SEGF 0x00000004
|
||||
#define HMISC2_SEGAB 0x00000010
|
||||
|
||||
/* Host Memory I/O Boundary */
|
||||
#define HM_BOUND 0x08
|
||||
#define HM_BOUND_LOCK 0x00000001
|
||||
|
||||
/* Extended Configuration Space */
|
||||
#define HEC_REG 0x09
|
||||
|
||||
/* MTRR Registers */
|
||||
#define MTRR_CAP 0x40
|
||||
#define MTRR_DEF_TYPE 0x41
|
||||
|
||||
#define MTRR_FIX_64K_00000 0x42
|
||||
#define MTRR_FIX_64K_40000 0x43
|
||||
#define MTRR_FIX_16K_80000 0x44
|
||||
#define MTRR_FIX_16K_90000 0x45
|
||||
#define MTRR_FIX_16K_A0000 0x46
|
||||
#define MTRR_FIX_16K_B0000 0x47
|
||||
#define MTRR_FIX_4K_C0000 0x48
|
||||
#define MTRR_FIX_4K_C4000 0x49
|
||||
#define MTRR_FIX_4K_C8000 0x4a
|
||||
#define MTRR_FIX_4K_CC000 0x4b
|
||||
#define MTRR_FIX_4K_D0000 0x4c
|
||||
#define MTRR_FIX_4K_D4000 0x4d
|
||||
#define MTRR_FIX_4K_D8000 0x4e
|
||||
#define MTRR_FIX_4K_DC000 0x4f
|
||||
#define MTRR_FIX_4K_E0000 0x50
|
||||
#define MTRR_FIX_4K_E4000 0x51
|
||||
#define MTRR_FIX_4K_E8000 0x52
|
||||
#define MTRR_FIX_4K_EC000 0x53
|
||||
#define MTRR_FIX_4K_F0000 0x54
|
||||
#define MTRR_FIX_4K_F4000 0x55
|
||||
#define MTRR_FIX_4K_F8000 0x56
|
||||
#define MTRR_FIX_4K_FC000 0x57
|
||||
|
||||
#define MTRR_SMRR_PHYBASE 0x58
|
||||
#define MTRR_SMRR_PHYMASK 0x59
|
||||
|
||||
#define MTRR_VAR_PHYBASE(n) (0x5a + 2 * (n))
|
||||
#define MTRR_VAR_PHYMASK(n) (0x5b + 2 * (n))
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/* variable range MTRR usage */
|
||||
enum {
|
||||
MTRR_VAR_ROM,
|
||||
MTRR_VAR_ESRAM,
|
||||
MTRR_VAR_RAM
|
||||
};
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/* Port 0x04: Remote Management Unit Message Port Registers */
|
||||
|
||||
/* ACPI PBLK Base Address Register */
|
||||
#define PBLK_BA 0x70
|
||||
|
||||
/* Control Register */
|
||||
#define RMU_CTRL 0x71
|
||||
|
||||
/* SPI DMA Base Address Register */
|
||||
#define SPI_DMA_BA 0x7a
|
||||
|
||||
/* Thermal Sensor Register */
|
||||
#define TS_MODE 0xb0
|
||||
#define TS_TEMP 0xb1
|
||||
#define TS_TRIP 0xb2
|
||||
|
||||
/* Port 0x05: Memory Manager Message Port Registers */
|
||||
|
||||
/* eSRAM Block Page Control */
|
||||
#define ESRAM_BLK_CTRL 0x82
|
||||
#define ESRAM_BLOCK_MODE 0x10000000
|
||||
|
||||
/* Port 0x14: USB2 AFE Unit Port Registers */
|
||||
|
||||
#define USB2_GLOBAL_PORT 0x4001
|
||||
#define USB2_PLL1 0x7f02
|
||||
#define USB2_PLL2 0x7f03
|
||||
#define USB2_COMPBG 0x7f04
|
||||
|
||||
/* Port 0x16: PCIe AFE Unit Port Registers */
|
||||
|
||||
#define PCIE_RXPICTRL0_L0 0x2080
|
||||
#define PCIE_RXPICTRL0_L1 0x2180
|
||||
|
||||
/* Port 0x31: SoC Unit Port Registers */
|
||||
|
||||
/* Thermal Sensor Config */
|
||||
#define TS_CFG1 0x31
|
||||
#define TS_CFG2 0x32
|
||||
#define TS_CFG3 0x33
|
||||
#define TS_CFG4 0x34
|
||||
|
||||
/* PCIe Controller Config */
|
||||
#define PCIE_CFG 0x36
|
||||
#define PCIE_CTLR_PRI_RST 0x00010000
|
||||
#define PCIE_PHY_SB_RST 0x00020000
|
||||
#define PCIE_CTLR_SB_RST 0x00040000
|
||||
#define PCIE_PHY_LANE_RST 0x00090000
|
||||
#define PCIE_CTLR_MAIN_RST 0x00100000
|
||||
|
||||
/* DRAM */
|
||||
#define DRAM_BASE 0x00000000
|
||||
#define DRAM_MAX_SIZE 0x80000000
|
||||
|
||||
/* eSRAM */
|
||||
#define ESRAM_SIZE 0x80000
|
||||
|
||||
/* Memory BAR Enable */
|
||||
#define MEM_BAR_EN 0x00000001
|
||||
|
||||
/* I/O BAR Enable */
|
||||
#define IO_BAR_EN 0x80000000
|
||||
|
||||
/* 64KiB of RMU binary in flash */
|
||||
#define RMU_BINARY_SIZE 0x10000
|
||||
|
||||
/* PCIe Root Port Configuration Registers */
|
||||
|
||||
#define PCIE_RP_CCFG 0xd0
|
||||
#define CCFG_UPRS (1 << 14)
|
||||
#define CCFG_UNRS (1 << 15)
|
||||
#define CCFG_UNSD (1 << 23)
|
||||
#define CCFG_UPSD (1 << 24)
|
||||
|
||||
#define PCIE_RP_MPC2 0xd4
|
||||
#define MPC2_IPF (1 << 11)
|
||||
|
||||
#define PCIE_RP_MBC 0xf4
|
||||
#define MBC_SBIC (3 << 16)
|
||||
|
||||
/* Legacy Bridge PCI Configuration Registers */
|
||||
#define LB_GBA 0x44
|
||||
#define LB_PM1BLK 0x48
|
||||
#define LB_GPE0BLK 0x4c
|
||||
#define LB_ACTL 0x58
|
||||
#define LB_PABCDRC 0x60
|
||||
#define LB_PEFGHRC 0x64
|
||||
#define LB_WDTBA 0x84
|
||||
#define LB_BCE 0xd4
|
||||
#define LB_BC 0xd8
|
||||
#define LB_RCBA 0xf0
|
||||
|
||||
/* USB EHCI memory-mapped registers */
|
||||
#define EHCI_INSNREG01 0x94
|
||||
|
||||
/* USB device memory-mapped registers */
|
||||
#define USBD_INT_MASK 0x410
|
||||
#define USBD_EP_INT_STS 0x414
|
||||
#define USBD_EP_INT_MASK 0x418
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/* Root Complex Register Block */
|
||||
struct quark_rcba {
|
||||
u32 rctl;
|
||||
u32 esd;
|
||||
u32 rsvd1[3150];
|
||||
u16 rmu_ir;
|
||||
u16 d23_ir;
|
||||
u16 core_ir;
|
||||
u16 d20d21_ir;
|
||||
};
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/pci.h>
|
||||
|
||||
/**
|
||||
* qrk_pci_read_config_dword() - Read a configuration value
|
||||
*
|
||||
* @dev: PCI device address: bus, device and function
|
||||
* @offset: Dword offset within the device's configuration space
|
||||
* @valuep: Place to put the returned value
|
||||
*
|
||||
* Note: This routine is inlined to provide better performance on Quark
|
||||
*/
|
||||
static inline void qrk_pci_read_config_dword(pci_dev_t dev, int offset,
|
||||
u32 *valuep)
|
||||
{
|
||||
outl(dev | offset | PCI_CFG_EN, PCI_REG_ADDR);
|
||||
*valuep = inl(PCI_REG_DATA);
|
||||
}
|
||||
|
||||
/**
|
||||
* qrk_pci_write_config_dword() - Write a PCI configuration value
|
||||
*
|
||||
* @dev: PCI device address: bus, device and function
|
||||
* @offset: Dword offset within the device's configuration space
|
||||
* @value: Value to write
|
||||
*
|
||||
* Note: This routine is inlined to provide better performance on Quark
|
||||
*/
|
||||
static inline void qrk_pci_write_config_dword(pci_dev_t dev, int offset,
|
||||
u32 value)
|
||||
{
|
||||
outl(dev | offset | PCI_CFG_EN, PCI_REG_ADDR);
|
||||
outl(value, PCI_REG_DATA);
|
||||
}
|
||||
|
||||
/**
|
||||
* board_assert_perst() - Assert the PERST# pin
|
||||
*
|
||||
* The CPU interface to the PERST# signal on Quark is platform dependent.
|
||||
* Board-specific codes need supply this routine to assert PCIe slot reset.
|
||||
*
|
||||
* The tricky part in this routine is that any APIs that may trigger PCI
|
||||
* enumeration process are strictly forbidden, as any access to PCIe root
|
||||
* port's configuration registers will cause system hang while it is held
|
||||
* in reset.
|
||||
*/
|
||||
void board_assert_perst(void);
|
||||
|
||||
/**
|
||||
* board_deassert_perst() - De-assert the PERST# pin
|
||||
*
|
||||
* The CPU interface to the PERST# signal on Quark is platform dependent.
|
||||
* Board-specific codes need supply this routine to de-assert PCIe slot reset.
|
||||
*
|
||||
* The tricky part in this routine is that any APIs that may trigger PCI
|
||||
* enumeration process are strictly forbidden, as any access to PCIe root
|
||||
* port's configuration registers will cause system hang while it is held
|
||||
* in reset.
|
||||
*/
|
||||
void board_deassert_perst(void);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* _QUARK_H_ */
|
||||
Reference in New Issue
Block a user