2019-01-27 14:08:36 +01:00
// SPDX-License-Identifier: GPL-2.0
/*
* IXP4xx Device Tree boot support
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/io.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2021-04-29 23:25:11 +02:00
/*
* These are the only fixed phys to virt mappings we ever need
* we put it right after the UART mapping at 0xffc80000 - 0xffc81fff
*/
# define IXP4XX_EXP_CFG_BASE_PHYS 0xC4000000
# define IXP4XX_EXP_CFG_BASE_VIRT 0xFEC14000
2019-01-27 14:08:36 +01:00
static struct map_desc ixp4xx_of_io_desc [ ] __initdata = {
/*
* This is needed for runtime system configuration checks ,
* such as reading if hardware so - and - so is present . This
* could eventually be converted into a syscon once all boards
* are converted to device tree .
*/
{
. virtual = IXP4XX_EXP_CFG_BASE_VIRT ,
. pfn = __phys_to_pfn ( IXP4XX_EXP_CFG_BASE_PHYS ) ,
. length = SZ_4K ,
. type = MT_DEVICE ,
} ,
# ifdef CONFIG_DEBUG_UART_8250
/* This is needed for LL-debug/earlyprintk/debug-macro.S */
{
. virtual = CONFIG_DEBUG_UART_VIRT ,
. pfn = __phys_to_pfn ( CONFIG_DEBUG_UART_PHYS ) ,
. length = SZ_4K ,
. type = MT_DEVICE ,
} ,
# endif
} ;
static void __init ixp4xx_of_map_io ( void )
{
iotable_init ( ixp4xx_of_io_desc , ARRAY_SIZE ( ixp4xx_of_io_desc ) ) ;
}
/*
* We handle 4 differen SoC families . These compatible strings are enough
* to provide the core so that different boards can add their more detailed
* specifics .
*/
static const char * ixp4xx_of_board_compat [ ] = {
" intel,ixp42x " ,
" intel,ixp43x " ,
" intel,ixp45x " ,
" intel,ixp46x " ,
NULL ,
} ;
DT_MACHINE_START ( IXP4XX_DT , " IXP4xx (Device Tree) " )
. map_io = ixp4xx_of_map_io ,
. dt_compat = ixp4xx_of_board_compat ,
MACHINE_END