Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f74c2c7 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Nicolas Pitre
Browse files

[ARM] Orion: distinguish between physical and virtual addresses



Hack up the Orion port to distinguish between virtual and physical
addresses of register windows.  This will allow moving virtual
mappings higher up in the address space, to free up more kernel
virtual address space.

Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
Signed-off-by: default avatarNicolas Pitre <nico@marvell.com>
parent 27cd3ad2
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -265,15 +265,15 @@ void __init orion_setup_cpu_wins(void)
	}

	/*
	 * Setup windows for PCI+PCIE IO+MAM space
	 * Setup windows for PCI+PCIe IO+MEM space.
	 */
	orion_setup_cpu_win(ORION_PCIE_IO, ORION_PCIE_IO_BASE,
				ORION_PCIE_IO_SIZE, ORION_PCIE_IO_REMAP);
	orion_setup_cpu_win(ORION_PCI_IO, ORION_PCI_IO_BASE,
				ORION_PCI_IO_SIZE, ORION_PCI_IO_REMAP);
	orion_setup_cpu_win(ORION_PCIE_MEM, ORION_PCIE_MEM_BASE,
	orion_setup_cpu_win(ORION_PCIE_IO, ORION_PCIE_IO_PHYS_BASE,
				ORION_PCIE_IO_SIZE, ORION_PCIE_IO_BUS_BASE);
	orion_setup_cpu_win(ORION_PCI_IO, ORION_PCI_IO_PHYS_BASE,
				ORION_PCI_IO_SIZE, ORION_PCI_IO_BUS_BASE);
	orion_setup_cpu_win(ORION_PCIE_MEM, ORION_PCIE_MEM_PHYS_BASE,
				ORION_PCIE_MEM_SIZE, -1);
	orion_setup_cpu_win(ORION_PCI_MEM, ORION_PCI_MEM_BASE,
	orion_setup_cpu_win(ORION_PCI_MEM, ORION_PCI_MEM_PHYS_BASE,
				ORION_PCI_MEM_SIZE, -1);
}

+26 −26
Original line number Diff line number Diff line
@@ -27,26 +27,26 @@
 ****************************************************************************/
static struct map_desc orion_io_desc[] __initdata = {
	{
		.virtual	= ORION_REGS_BASE,
		.pfn		= __phys_to_pfn(ORION_REGS_BASE),
		.virtual	= ORION_REGS_VIRT_BASE,
		.pfn		= __phys_to_pfn(ORION_REGS_PHYS_BASE),
		.length		= ORION_REGS_SIZE,
		.type		= MT_DEVICE
	},
	{
		.virtual	= ORION_PCIE_IO_BASE,
		.pfn		= __phys_to_pfn(ORION_PCIE_IO_BASE),
		.virtual	= ORION_PCIE_IO_VIRT_BASE,
		.pfn		= __phys_to_pfn(ORION_PCIE_IO_PHYS_BASE),
		.length		= ORION_PCIE_IO_SIZE,
		.type		= MT_DEVICE
	},
	{
		.virtual	= ORION_PCI_IO_BASE,
		.pfn		= __phys_to_pfn(ORION_PCI_IO_BASE),
		.virtual	= ORION_PCI_IO_VIRT_BASE,
		.pfn		= __phys_to_pfn(ORION_PCI_IO_PHYS_BASE),
		.length		= ORION_PCI_IO_SIZE,
		.type		= MT_DEVICE
	},
	{
		.virtual	= ORION_PCIE_WA_BASE,
		.pfn		= __phys_to_pfn(ORION_PCIE_WA_BASE),
		.virtual	= ORION_PCIE_WA_VIRT_BASE,
		.pfn		= __phys_to_pfn(ORION_PCIE_WA_PHYS_BASE),
		.length		= ORION_PCIE_WA_SIZE,
		.type		= MT_DEVICE
	},
@@ -63,8 +63,8 @@ void __init orion_map_io(void)

static struct resource orion_uart_resources[] = {
	{
		.start		= UART0_BASE,
		.end		= UART0_BASE + 0xff,
		.start		= UART0_PHYS_BASE,
		.end		= UART0_PHYS_BASE + 0xff,
		.flags		= IORESOURCE_MEM,
	},
	{
@@ -73,8 +73,8 @@ static struct resource orion_uart_resources[] = {
		.flags		= IORESOURCE_IRQ,
	},
	{
		.start		= UART1_BASE,
		.end		= UART1_BASE + 0xff,
		.start		= UART1_PHYS_BASE,
		.end		= UART1_PHYS_BASE + 0xff,
		.flags		= IORESOURCE_MEM,
	},
	{
@@ -86,8 +86,8 @@ static struct resource orion_uart_resources[] = {

static struct plat_serial8250_port orion_uart_data[] = {
	{
		.mapbase	= UART0_BASE,
		.membase	= (char *)UART0_BASE,
		.mapbase	= UART0_PHYS_BASE,
		.membase	= (char *)UART0_VIRT_BASE,
		.irq		= IRQ_ORION_UART0,
		.flags		= UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
		.iotype		= UPIO_MEM,
@@ -95,8 +95,8 @@ static struct plat_serial8250_port orion_uart_data[] = {
		.uartclk	= ORION_TCLK,
	},
	{
		.mapbase	= UART1_BASE,
		.membase	= (char *)UART1_BASE,
		.mapbase	= UART1_PHYS_BASE,
		.membase	= (char *)UART1_VIRT_BASE,
		.irq		= IRQ_ORION_UART1,
		.flags		= UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
		.iotype		= UPIO_MEM,
@@ -122,8 +122,8 @@ static struct platform_device orion_uart = {

static struct resource orion_ehci0_resources[] = {
	{
		.start	= ORION_USB0_REG_BASE,
		.end	= ORION_USB0_REG_BASE + SZ_4K,
		.start	= ORION_USB0_PHYS_BASE,
		.end	= ORION_USB0_PHYS_BASE + SZ_4K,
		.flags	= IORESOURCE_MEM,
	},
	{
@@ -135,8 +135,8 @@ static struct resource orion_ehci0_resources[] = {

static struct resource orion_ehci1_resources[] = {
	{
		.start	= ORION_USB1_REG_BASE,
		.end	= ORION_USB1_REG_BASE + SZ_4K,
		.start	= ORION_USB1_PHYS_BASE,
		.end	= ORION_USB1_PHYS_BASE + SZ_4K,
		.flags	= IORESOURCE_MEM,
	},
	{
@@ -177,8 +177,8 @@ static struct platform_device orion_ehci1 = {

static struct resource orion_eth_shared_resources[] = {
	{
		.start	= ORION_ETH_REG_BASE,
		.end	= ORION_ETH_REG_BASE + 0xffff,
		.start	= ORION_ETH_PHYS_BASE,
		.end	= ORION_ETH_PHYS_BASE + 0xffff,
		.flags	= IORESOURCE_MEM,
	},
};
@@ -227,8 +227,8 @@ static struct mv64xxx_i2c_pdata orion_i2c_pdata = {
static struct resource orion_i2c_resources[] = {
	{
		.name   = "i2c base",
		.start  = I2C_BASE,
		.end    = I2C_BASE + 0x20 -1,
		.start  = I2C_PHYS_BASE,
		.end    = I2C_PHYS_BASE + 0x20 -1,
		.flags  = IORESOURCE_MEM,
	},
	{
@@ -255,8 +255,8 @@ static struct platform_device orion_i2c = {
static struct resource orion_sata_resources[] = {
        {
                .name   = "sata base",
                .start  = ORION_SATA_REG_BASE,
                .end    = ORION_SATA_REG_BASE + 0x5000 - 1,
                .start  = ORION_SATA_PHYS_BASE,
                .end    = ORION_SATA_PHYS_BASE + 0x5000 - 1,
                .flags  = IORESOURCE_MEM,
        },
	{
+2 −2
Original line number Diff line number Diff line
@@ -354,8 +354,8 @@ static void __init db88f5281_init(void)

MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board")
	/* Maintainer: Tzachi Perelstein <tzachi@marvell.com> */
	.phys_io	= ORION_REGS_BASE,
	.io_pg_offst	= ((ORION_REGS_BASE) >> 18) & 0xfffc,
	.phys_io	= ORION_REGS_PHYS_BASE,
	.io_pg_offst	= ((ORION_REGS_VIRT_BASE) >> 18) & 0xfffc,
	.boot_params	= 0x00000100,
	.init_machine	= db88f5281_init,
	.map_io		= orion_map_io,
+4 −4
Original line number Diff line number Diff line
@@ -259,8 +259,8 @@ static void __init dns323_init(void)
	 *
	 * Open a special address decode windows for the PCIE WA.
	 */
	orion_write(ORION_REGS_BASE | 0x20074, ORION_PCIE_WA_BASE);
	orion_write(ORION_REGS_BASE | 0x20070,
	orion_write(ORION_REGS_VIRT_BASE | 0x20074, ORION_PCIE_WA_PHYS_BASE);
	orion_write(ORION_REGS_VIRT_BASE | 0x20070,
		    (0x7941 | (((ORION_PCIE_WA_SIZE >> 16) - 1)) << 16));

	/* set MPP to 0 as D-Link's 2.6.12.6 kernel did */
@@ -312,8 +312,8 @@ static void __init dns323_init(void)
/* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */
MACHINE_START(DNS323, "D-Link DNS-323")
	/* Maintainer: Herbert Valerio Riedel <hvr@gnu.org> */
	.phys_io	= ORION_REGS_BASE,
	.io_pg_offst	= ((ORION_REGS_BASE) >> 18) & 0xFFFC,
	.phys_io	= ORION_REGS_PHYS_BASE,
	.io_pg_offst	= ((ORION_REGS_VIRT_BASE) >> 18) & 0xFFFC,
	.boot_params	= 0x00000100,
	.init_machine	= dns323_init,
	.map_io		= orion_map_io,
+4 −4
Original line number Diff line number Diff line
@@ -192,8 +192,8 @@ static void __init kurobox_pro_init(void)
	/*
	 * Open a special address decode windows for the PCIE WA.
	 */
	orion_write(ORION_REGS_BASE | 0x20074, ORION_PCIE_WA_BASE);
	orion_write(ORION_REGS_BASE | 0x20070, (0x7941 |
	orion_write(ORION_REGS_VIRT_BASE | 0x20074, ORION_PCIE_WA_PHYS_BASE);
	orion_write(ORION_REGS_VIRT_BASE | 0x20070, (0x7941 |
		(((ORION_PCIE_WA_SIZE >> 16) - 1)) << 16));

	/*
@@ -224,8 +224,8 @@ static void __init kurobox_pro_init(void)

MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro")
	/* Maintainer: Ronen Shitrit <rshitrit@marvell.com> */
	.phys_io	= ORION_REGS_BASE,
	.io_pg_offst	= ((ORION_REGS_BASE) >> 18) & 0xFFFC,
	.phys_io	= ORION_REGS_PHYS_BASE,
	.io_pg_offst	= ((ORION_REGS_VIRT_BASE) >> 18) & 0xFFFC,
	.boot_params	= 0x00000100,
	.init_machine	= kurobox_pro_init,
	.map_io		= orion_map_io,
Loading