18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * linux/arch/arm/mach-sa1100/badge4.c 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * BadgePAD 4 specific initialization 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Tim Connors <connors@hpl.hp.com> 88c2ecf20Sopenharmony_ci * Christopher Hoover <ch@hpl.hp.com> 98c2ecf20Sopenharmony_ci * 108c2ecf20Sopenharmony_ci * Copyright (C) 2002 Hewlett-Packard Company 118c2ecf20Sopenharmony_ci */ 128c2ecf20Sopenharmony_ci#include <linux/module.h> 138c2ecf20Sopenharmony_ci#include <linux/init.h> 148c2ecf20Sopenharmony_ci#include <linux/kernel.h> 158c2ecf20Sopenharmony_ci#include <linux/platform_data/sa11x0-serial.h> 168c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 178c2ecf20Sopenharmony_ci#include <linux/delay.h> 188c2ecf20Sopenharmony_ci#include <linux/tty.h> 198c2ecf20Sopenharmony_ci#include <linux/mtd/mtd.h> 208c2ecf20Sopenharmony_ci#include <linux/mtd/partitions.h> 218c2ecf20Sopenharmony_ci#include <linux/errno.h> 228c2ecf20Sopenharmony_ci#include <linux/gpio.h> 238c2ecf20Sopenharmony_ci#include <linux/leds.h> 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci#include <mach/hardware.h> 268c2ecf20Sopenharmony_ci#include <asm/mach-types.h> 278c2ecf20Sopenharmony_ci#include <asm/setup.h> 288c2ecf20Sopenharmony_ci#include <mach/irqs.h> 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci#include <asm/mach/arch.h> 318c2ecf20Sopenharmony_ci#include <asm/mach/flash.h> 328c2ecf20Sopenharmony_ci#include <asm/mach/map.h> 338c2ecf20Sopenharmony_ci#include <asm/hardware/sa1111.h> 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci#include <mach/badge4.h> 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci#include "generic.h" 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistatic struct resource sa1111_resources[] = { 408c2ecf20Sopenharmony_ci [0] = DEFINE_RES_MEM(BADGE4_SA1111_BASE, 0x2000), 418c2ecf20Sopenharmony_ci [1] = DEFINE_RES_IRQ(BADGE4_IRQ_GPIO_SA1111), 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cistatic int badge4_sa1111_enable(void *data, unsigned devid) 458c2ecf20Sopenharmony_ci{ 468c2ecf20Sopenharmony_ci if (devid == SA1111_DEVID_USB) 478c2ecf20Sopenharmony_ci badge4_set_5V(BADGE4_5V_USB, 1); 488c2ecf20Sopenharmony_ci return 0; 498c2ecf20Sopenharmony_ci} 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_cistatic void badge4_sa1111_disable(void *data, unsigned devid) 528c2ecf20Sopenharmony_ci{ 538c2ecf20Sopenharmony_ci if (devid == SA1111_DEVID_USB) 548c2ecf20Sopenharmony_ci badge4_set_5V(BADGE4_5V_USB, 0); 558c2ecf20Sopenharmony_ci} 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_cistatic struct sa1111_platform_data sa1111_info = { 588c2ecf20Sopenharmony_ci .disable_devs = SA1111_DEVID_PS2_MSE, 598c2ecf20Sopenharmony_ci .enable = badge4_sa1111_enable, 608c2ecf20Sopenharmony_ci .disable = badge4_sa1111_disable, 618c2ecf20Sopenharmony_ci}; 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_cistatic u64 sa1111_dmamask = 0xffffffffUL; 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_cistatic struct platform_device sa1111_device = { 668c2ecf20Sopenharmony_ci .name = "sa1111", 678c2ecf20Sopenharmony_ci .id = 0, 688c2ecf20Sopenharmony_ci .dev = { 698c2ecf20Sopenharmony_ci .dma_mask = &sa1111_dmamask, 708c2ecf20Sopenharmony_ci .coherent_dma_mask = 0xffffffff, 718c2ecf20Sopenharmony_ci .platform_data = &sa1111_info, 728c2ecf20Sopenharmony_ci }, 738c2ecf20Sopenharmony_ci .num_resources = ARRAY_SIZE(sa1111_resources), 748c2ecf20Sopenharmony_ci .resource = sa1111_resources, 758c2ecf20Sopenharmony_ci}; 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci/* LEDs */ 788c2ecf20Sopenharmony_cistruct gpio_led badge4_gpio_leds[] = { 798c2ecf20Sopenharmony_ci { 808c2ecf20Sopenharmony_ci .name = "badge4:red", 818c2ecf20Sopenharmony_ci .default_trigger = "heartbeat", 828c2ecf20Sopenharmony_ci .gpio = 7, 838c2ecf20Sopenharmony_ci }, 848c2ecf20Sopenharmony_ci { 858c2ecf20Sopenharmony_ci .name = "badge4:green", 868c2ecf20Sopenharmony_ci .default_trigger = "cpu0", 878c2ecf20Sopenharmony_ci .gpio = 9, 888c2ecf20Sopenharmony_ci }, 898c2ecf20Sopenharmony_ci}; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_cistatic struct gpio_led_platform_data badge4_gpio_led_info = { 928c2ecf20Sopenharmony_ci .leds = badge4_gpio_leds, 938c2ecf20Sopenharmony_ci .num_leds = ARRAY_SIZE(badge4_gpio_leds), 948c2ecf20Sopenharmony_ci}; 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_cistatic struct platform_device badge4_leds = { 978c2ecf20Sopenharmony_ci .name = "leds-gpio", 988c2ecf20Sopenharmony_ci .id = -1, 998c2ecf20Sopenharmony_ci .dev = { 1008c2ecf20Sopenharmony_ci .platform_data = &badge4_gpio_led_info, 1018c2ecf20Sopenharmony_ci } 1028c2ecf20Sopenharmony_ci}; 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_cistatic struct platform_device *devices[] __initdata = { 1058c2ecf20Sopenharmony_ci &sa1111_device, 1068c2ecf20Sopenharmony_ci &badge4_leds, 1078c2ecf20Sopenharmony_ci}; 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_cistatic int __init badge4_sa1111_init(void) 1108c2ecf20Sopenharmony_ci{ 1118c2ecf20Sopenharmony_ci /* 1128c2ecf20Sopenharmony_ci * Ensure that the memory bus request/grant signals are setup, 1138c2ecf20Sopenharmony_ci * and the grant is held in its inactive state 1148c2ecf20Sopenharmony_ci */ 1158c2ecf20Sopenharmony_ci sa1110_mb_disable(); 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci /* 1188c2ecf20Sopenharmony_ci * Probe for SA1111. 1198c2ecf20Sopenharmony_ci */ 1208c2ecf20Sopenharmony_ci return platform_add_devices(devices, ARRAY_SIZE(devices)); 1218c2ecf20Sopenharmony_ci} 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_ci/* 1258c2ecf20Sopenharmony_ci * 1 x Intel 28F320C3 Advanced+ Boot Block Flash (32 Mi bit) 1268c2ecf20Sopenharmony_ci * Eight 4 KiW Parameter Bottom Blocks (64 KiB) 1278c2ecf20Sopenharmony_ci * Sixty-three 32 KiW Main Blocks (4032 Ki b) 1288c2ecf20Sopenharmony_ci * 1298c2ecf20Sopenharmony_ci * <or> 1308c2ecf20Sopenharmony_ci * 1318c2ecf20Sopenharmony_ci * 1 x Intel 28F640C3 Advanced+ Boot Block Flash (64 Mi bit) 1328c2ecf20Sopenharmony_ci * Eight 4 KiW Parameter Bottom Blocks (64 KiB) 1338c2ecf20Sopenharmony_ci * One-hundred-twenty-seven 32 KiW Main Blocks (8128 Ki b) 1348c2ecf20Sopenharmony_ci */ 1358c2ecf20Sopenharmony_cistatic struct mtd_partition badge4_partitions[] = { 1368c2ecf20Sopenharmony_ci { 1378c2ecf20Sopenharmony_ci .name = "BLOB boot loader", 1388c2ecf20Sopenharmony_ci .offset = 0, 1398c2ecf20Sopenharmony_ci .size = 0x0000A000 1408c2ecf20Sopenharmony_ci }, { 1418c2ecf20Sopenharmony_ci .name = "params", 1428c2ecf20Sopenharmony_ci .offset = MTDPART_OFS_APPEND, 1438c2ecf20Sopenharmony_ci .size = 0x00006000 1448c2ecf20Sopenharmony_ci }, { 1458c2ecf20Sopenharmony_ci .name = "root", 1468c2ecf20Sopenharmony_ci .offset = MTDPART_OFS_APPEND, 1478c2ecf20Sopenharmony_ci .size = MTDPART_SIZ_FULL 1488c2ecf20Sopenharmony_ci } 1498c2ecf20Sopenharmony_ci}; 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_cistatic struct flash_platform_data badge4_flash_data = { 1528c2ecf20Sopenharmony_ci .map_name = "cfi_probe", 1538c2ecf20Sopenharmony_ci .parts = badge4_partitions, 1548c2ecf20Sopenharmony_ci .nr_parts = ARRAY_SIZE(badge4_partitions), 1558c2ecf20Sopenharmony_ci}; 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_cistatic struct resource badge4_flash_resource = 1588c2ecf20Sopenharmony_ci DEFINE_RES_MEM(SA1100_CS0_PHYS, SZ_64M); 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_cistatic int five_v_on __initdata = 0; 1618c2ecf20Sopenharmony_ci 1628c2ecf20Sopenharmony_cistatic int __init five_v_on_setup(char *ignore) 1638c2ecf20Sopenharmony_ci{ 1648c2ecf20Sopenharmony_ci five_v_on = 1; 1658c2ecf20Sopenharmony_ci return 1; 1668c2ecf20Sopenharmony_ci} 1678c2ecf20Sopenharmony_ci__setup("five_v_on", five_v_on_setup); 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_cistatic int __init badge4_init(void) 1718c2ecf20Sopenharmony_ci{ 1728c2ecf20Sopenharmony_ci int ret; 1738c2ecf20Sopenharmony_ci 1748c2ecf20Sopenharmony_ci if (!machine_is_badge4()) 1758c2ecf20Sopenharmony_ci return -ENODEV; 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_ci /* LCD */ 1788c2ecf20Sopenharmony_ci GPCR = (BADGE4_GPIO_LGP2 | BADGE4_GPIO_LGP3 | 1798c2ecf20Sopenharmony_ci BADGE4_GPIO_LGP4 | BADGE4_GPIO_LGP5 | 1808c2ecf20Sopenharmony_ci BADGE4_GPIO_LGP6 | BADGE4_GPIO_LGP7 | 1818c2ecf20Sopenharmony_ci BADGE4_GPIO_LGP8 | BADGE4_GPIO_LGP9 | 1828c2ecf20Sopenharmony_ci BADGE4_GPIO_GPA_VID | BADGE4_GPIO_GPB_VID | 1838c2ecf20Sopenharmony_ci BADGE4_GPIO_GPC_VID); 1848c2ecf20Sopenharmony_ci GPDR &= ~BADGE4_GPIO_INT_VID; 1858c2ecf20Sopenharmony_ci GPDR |= (BADGE4_GPIO_LGP2 | BADGE4_GPIO_LGP3 | 1868c2ecf20Sopenharmony_ci BADGE4_GPIO_LGP4 | BADGE4_GPIO_LGP5 | 1878c2ecf20Sopenharmony_ci BADGE4_GPIO_LGP6 | BADGE4_GPIO_LGP7 | 1888c2ecf20Sopenharmony_ci BADGE4_GPIO_LGP8 | BADGE4_GPIO_LGP9 | 1898c2ecf20Sopenharmony_ci BADGE4_GPIO_GPA_VID | BADGE4_GPIO_GPB_VID | 1908c2ecf20Sopenharmony_ci BADGE4_GPIO_GPC_VID); 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci /* SDRAM SPD i2c */ 1938c2ecf20Sopenharmony_ci GPCR = (BADGE4_GPIO_SDSDA | BADGE4_GPIO_SDSCL); 1948c2ecf20Sopenharmony_ci GPDR |= (BADGE4_GPIO_SDSDA | BADGE4_GPIO_SDSCL); 1958c2ecf20Sopenharmony_ci 1968c2ecf20Sopenharmony_ci /* uart */ 1978c2ecf20Sopenharmony_ci GPCR = (BADGE4_GPIO_UART_HS1 | BADGE4_GPIO_UART_HS2); 1988c2ecf20Sopenharmony_ci GPDR |= (BADGE4_GPIO_UART_HS1 | BADGE4_GPIO_UART_HS2); 1998c2ecf20Sopenharmony_ci 2008c2ecf20Sopenharmony_ci /* CPLD muxsel0 input for mux/adc chip select */ 2018c2ecf20Sopenharmony_ci GPCR = BADGE4_GPIO_MUXSEL0; 2028c2ecf20Sopenharmony_ci GPDR |= BADGE4_GPIO_MUXSEL0; 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci /* test points: J5, J6 as inputs, J7 outputs */ 2058c2ecf20Sopenharmony_ci GPDR &= ~(BADGE4_GPIO_TESTPT_J5 | BADGE4_GPIO_TESTPT_J6); 2068c2ecf20Sopenharmony_ci GPCR = BADGE4_GPIO_TESTPT_J7; 2078c2ecf20Sopenharmony_ci GPDR |= BADGE4_GPIO_TESTPT_J7; 2088c2ecf20Sopenharmony_ci 2098c2ecf20Sopenharmony_ci /* 5V supply rail. */ 2108c2ecf20Sopenharmony_ci GPCR = BADGE4_GPIO_PCMEN5V; /* initially off */ 2118c2ecf20Sopenharmony_ci GPDR |= BADGE4_GPIO_PCMEN5V; 2128c2ecf20Sopenharmony_ci 2138c2ecf20Sopenharmony_ci /* CPLD sdram type inputs; set up by blob */ 2148c2ecf20Sopenharmony_ci //GPDR |= (BADGE4_GPIO_SDTYP1 | BADGE4_GPIO_SDTYP0); 2158c2ecf20Sopenharmony_ci printk(KERN_DEBUG __FILE__ ": SDRAM CPLD typ1=%d typ0=%d\n", 2168c2ecf20Sopenharmony_ci !!(GPLR & BADGE4_GPIO_SDTYP1), 2178c2ecf20Sopenharmony_ci !!(GPLR & BADGE4_GPIO_SDTYP0)); 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci /* SA1111 reset pin; set up by blob */ 2208c2ecf20Sopenharmony_ci //GPSR = BADGE4_GPIO_SA1111_NRST; 2218c2ecf20Sopenharmony_ci //GPDR |= BADGE4_GPIO_SA1111_NRST; 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_ci 2248c2ecf20Sopenharmony_ci /* power management cruft */ 2258c2ecf20Sopenharmony_ci PGSR = 0; 2268c2ecf20Sopenharmony_ci PWER = 0; 2278c2ecf20Sopenharmony_ci PCFR = 0; 2288c2ecf20Sopenharmony_ci PSDR = 0; 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_ci PWER |= PWER_GPIO26; /* wake up on an edge from TESTPT_J5 */ 2318c2ecf20Sopenharmony_ci PWER |= PWER_RTC; /* wake up if rtc fires */ 2328c2ecf20Sopenharmony_ci 2338c2ecf20Sopenharmony_ci /* drive sa1111_nrst during sleep */ 2348c2ecf20Sopenharmony_ci PGSR |= BADGE4_GPIO_SA1111_NRST; 2358c2ecf20Sopenharmony_ci /* drive CPLD as is during sleep */ 2368c2ecf20Sopenharmony_ci PGSR |= (GPLR & (BADGE4_GPIO_SDTYP0|BADGE4_GPIO_SDTYP1)); 2378c2ecf20Sopenharmony_ci 2388c2ecf20Sopenharmony_ci 2398c2ecf20Sopenharmony_ci /* Now bring up the SA-1111. */ 2408c2ecf20Sopenharmony_ci ret = badge4_sa1111_init(); 2418c2ecf20Sopenharmony_ci if (ret < 0) 2428c2ecf20Sopenharmony_ci printk(KERN_ERR 2438c2ecf20Sopenharmony_ci "%s: SA-1111 initialization failed (%d)\n", 2448c2ecf20Sopenharmony_ci __func__, ret); 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci 2478c2ecf20Sopenharmony_ci /* maybe turn on 5v0 from the start */ 2488c2ecf20Sopenharmony_ci badge4_set_5V(BADGE4_5V_INITIALLY, five_v_on); 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_ci sa11x0_register_mtd(&badge4_flash_data, &badge4_flash_resource, 1); 2518c2ecf20Sopenharmony_ci 2528c2ecf20Sopenharmony_ci return 0; 2538c2ecf20Sopenharmony_ci} 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ciarch_initcall(badge4_init); 2568c2ecf20Sopenharmony_ci 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_cistatic unsigned badge4_5V_bitmap = 0; 2598c2ecf20Sopenharmony_ci 2608c2ecf20Sopenharmony_civoid badge4_set_5V(unsigned subsystem, int on) 2618c2ecf20Sopenharmony_ci{ 2628c2ecf20Sopenharmony_ci unsigned long flags; 2638c2ecf20Sopenharmony_ci unsigned old_5V_bitmap; 2648c2ecf20Sopenharmony_ci 2658c2ecf20Sopenharmony_ci local_irq_save(flags); 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci old_5V_bitmap = badge4_5V_bitmap; 2688c2ecf20Sopenharmony_ci 2698c2ecf20Sopenharmony_ci if (on) { 2708c2ecf20Sopenharmony_ci badge4_5V_bitmap |= subsystem; 2718c2ecf20Sopenharmony_ci } else { 2728c2ecf20Sopenharmony_ci badge4_5V_bitmap &= ~subsystem; 2738c2ecf20Sopenharmony_ci } 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_ci /* detect on->off and off->on transitions */ 2768c2ecf20Sopenharmony_ci if ((!old_5V_bitmap) && (badge4_5V_bitmap)) { 2778c2ecf20Sopenharmony_ci /* was off, now on */ 2788c2ecf20Sopenharmony_ci printk(KERN_INFO "%s: enabling 5V supply rail\n", __func__); 2798c2ecf20Sopenharmony_ci GPSR = BADGE4_GPIO_PCMEN5V; 2808c2ecf20Sopenharmony_ci } else if ((old_5V_bitmap) && (!badge4_5V_bitmap)) { 2818c2ecf20Sopenharmony_ci /* was on, now off */ 2828c2ecf20Sopenharmony_ci printk(KERN_INFO "%s: disabling 5V supply rail\n", __func__); 2838c2ecf20Sopenharmony_ci GPCR = BADGE4_GPIO_PCMEN5V; 2848c2ecf20Sopenharmony_ci } 2858c2ecf20Sopenharmony_ci 2868c2ecf20Sopenharmony_ci local_irq_restore(flags); 2878c2ecf20Sopenharmony_ci} 2888c2ecf20Sopenharmony_ciEXPORT_SYMBOL(badge4_set_5V); 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_ci 2918c2ecf20Sopenharmony_cistatic struct map_desc badge4_io_desc[] __initdata = { 2928c2ecf20Sopenharmony_ci { /* SRAM bank 1 */ 2938c2ecf20Sopenharmony_ci .virtual = 0xf1000000, 2948c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(0x08000000), 2958c2ecf20Sopenharmony_ci .length = 0x00100000, 2968c2ecf20Sopenharmony_ci .type = MT_DEVICE 2978c2ecf20Sopenharmony_ci }, { /* SRAM bank 2 */ 2988c2ecf20Sopenharmony_ci .virtual = 0xf2000000, 2998c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(0x10000000), 3008c2ecf20Sopenharmony_ci .length = 0x00100000, 3018c2ecf20Sopenharmony_ci .type = MT_DEVICE 3028c2ecf20Sopenharmony_ci } 3038c2ecf20Sopenharmony_ci}; 3048c2ecf20Sopenharmony_ci 3058c2ecf20Sopenharmony_cistatic void 3068c2ecf20Sopenharmony_cibadge4_uart_pm(struct uart_port *port, u_int state, u_int oldstate) 3078c2ecf20Sopenharmony_ci{ 3088c2ecf20Sopenharmony_ci if (!state) { 3098c2ecf20Sopenharmony_ci Ser1SDCR0 |= SDCR0_UART; 3108c2ecf20Sopenharmony_ci } 3118c2ecf20Sopenharmony_ci} 3128c2ecf20Sopenharmony_ci 3138c2ecf20Sopenharmony_cistatic struct sa1100_port_fns badge4_port_fns __initdata = { 3148c2ecf20Sopenharmony_ci .pm = badge4_uart_pm, 3158c2ecf20Sopenharmony_ci}; 3168c2ecf20Sopenharmony_ci 3178c2ecf20Sopenharmony_cistatic void __init badge4_map_io(void) 3188c2ecf20Sopenharmony_ci{ 3198c2ecf20Sopenharmony_ci sa1100_map_io(); 3208c2ecf20Sopenharmony_ci iotable_init(badge4_io_desc, ARRAY_SIZE(badge4_io_desc)); 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_ci sa1100_register_uart_fns(&badge4_port_fns); 3238c2ecf20Sopenharmony_ci sa1100_register_uart(0, 3); 3248c2ecf20Sopenharmony_ci sa1100_register_uart(1, 1); 3258c2ecf20Sopenharmony_ci} 3268c2ecf20Sopenharmony_ci 3278c2ecf20Sopenharmony_ciMACHINE_START(BADGE4, "Hewlett-Packard Laboratories BadgePAD 4") 3288c2ecf20Sopenharmony_ci .atag_offset = 0x100, 3298c2ecf20Sopenharmony_ci .map_io = badge4_map_io, 3308c2ecf20Sopenharmony_ci .nr_irqs = SA1100_NR_IRQS, 3318c2ecf20Sopenharmony_ci .init_irq = sa1100_init_irq, 3328c2ecf20Sopenharmony_ci .init_late = sa11x0_init_late, 3338c2ecf20Sopenharmony_ci .init_time = sa1100_timer_init, 3348c2ecf20Sopenharmony_ci#ifdef CONFIG_SA1111 3358c2ecf20Sopenharmony_ci .dma_zone_size = SZ_1M, 3368c2ecf20Sopenharmony_ci#endif 3378c2ecf20Sopenharmony_ci .restart = sa11x0_restart, 3388c2ecf20Sopenharmony_ciMACHINE_END 339