| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * SA-1110-based Sharp Zaurus SL-5500 platform. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2011 Dmitry Eremin-Solenikov | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This code is licensed under GNU GPL v2. | 
					
						
							| 
									
										
										
										
											2012-01-13 17:44:23 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Contributions after 2012-01-13 are licensed under the terms of the | 
					
						
							|  |  |  |  * GNU GPL, version 2 or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2015-12-07 16:23:45 +00:00
										 |  |  | #include "qemu/osdep.h"
 | 
					
						
							| 
									
										
										
										
											2019-03-08 10:46:10 +01:00
										 |  |  | #include "qemu/units.h"
 | 
					
						
							| 
									
										
										
										
											2020-02-19 11:08:45 -05:00
										 |  |  | #include "qemu/cutils.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-04 15:40:22 +01:00
										 |  |  | #include "hw/sysbus.h"
 | 
					
						
							|  |  |  | #include "hw/boards.h"
 | 
					
						
							| 
									
										
										
										
											2013-03-18 17:36:02 +01:00
										 |  |  | #include "strongarm.h"
 | 
					
						
							| 
									
										
										
										
											2019-05-23 14:47:43 +01:00
										 |  |  | #include "hw/arm/boot.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-05 17:06:20 +01:00
										 |  |  | #include "hw/block/flash.h"
 | 
					
						
							| 
									
										
										
										
											2012-12-17 18:19:49 +01:00
										 |  |  | #include "exec/address-spaces.h"
 | 
					
						
							| 
									
										
										
										
											2017-09-13 18:04:57 +02:00
										 |  |  | #include "cpu.h"
 | 
					
						
							| 
									
										
										
										
											2020-09-03 16:43:22 -04:00
										 |  |  | #include "qom/object.h"
 | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-03 16:43:22 -04:00
										 |  |  | struct CollieMachineState { | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  |     MachineState parent; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     StrongARMState *sa1110; | 
					
						
							| 
									
										
										
										
											2020-09-03 16:43:22 -04:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define TYPE_COLLIE_MACHINE MACHINE_TYPE_NAME("collie")
 | 
					
						
							| 
									
										
										
										
											2020-09-16 14:25:19 -04:00
										 |  |  | OBJECT_DECLARE_SIMPLE_TYPE(CollieMachineState, COLLIE_MACHINE) | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | static struct arm_boot_info collie_binfo = { | 
					
						
							|  |  |  |     .loader_start = SA_SDCS0, | 
					
						
							|  |  |  |     .ram_size = 0x20000000, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-07 17:42:57 +03:00
										 |  |  | static void collie_init(MachineState *machine) | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | { | 
					
						
							|  |  |  |     DriveInfo *dinfo; | 
					
						
							| 
									
										
										
										
											2020-02-19 11:08:45 -05:00
										 |  |  |     MachineClass *mc = MACHINE_GET_CLASS(machine); | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  |     CollieMachineState *cms = COLLIE_MACHINE(machine); | 
					
						
							| 
									
										
										
										
											2020-02-19 11:08:45 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (machine->ram_size != mc->default_ram_size) { | 
					
						
							|  |  |  |         char *sz = size_to_str(mc->default_ram_size); | 
					
						
							|  |  |  |         error_report("Invalid RAM size, should be %s", sz); | 
					
						
							|  |  |  |         g_free(sz); | 
					
						
							|  |  |  |         exit(EXIT_FAILURE); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  |     cms->sa1110 = sa1110_init(machine->cpu_type); | 
					
						
							| 
									
										
										
										
											2019-10-22 16:50:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-19 11:08:45 -05:00
										 |  |  |     memory_region_add_subregion(get_system_memory(), SA_SDCS0, machine->ram); | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     dinfo = drive_get(IF_PFLASH, 0, 0); | 
					
						
							| 
									
										
										
										
											2019-03-08 10:46:09 +01:00
										 |  |  |     pflash_cfi01_register(SA_CS0, "collie.fl1", 0x02000000, | 
					
						
							| 
									
										
										
										
											2014-10-07 13:59:18 +02:00
										 |  |  |                     dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, | 
					
						
							| 
									
										
										
										
											2019-03-08 10:46:10 +01:00
										 |  |  |                     64 * KiB, 4, 0x00, 0x00, 0x00, 0x00, 0); | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     dinfo = drive_get(IF_PFLASH, 0, 1); | 
					
						
							| 
									
										
										
										
											2019-03-08 10:46:09 +01:00
										 |  |  |     pflash_cfi01_register(SA_CS1, "collie.fl2", 0x02000000, | 
					
						
							| 
									
										
										
										
											2014-10-07 13:59:18 +02:00
										 |  |  |                     dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, | 
					
						
							| 
									
										
										
										
											2019-03-08 10:46:10 +01:00
										 |  |  |                     64 * KiB, 4, 0x00, 0x00, 0x00, 0x00, 0); | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     sysbus_create_simple("scoop", 0x40800000, NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     collie_binfo.board_id = 0x208; | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  |     arm_load_kernel(cms->sa1110->cpu, machine, &collie_binfo); | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  | static void collie_machine_class_init(ObjectClass *oc, void *data) | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  |     MachineClass *mc = MACHINE_CLASS(oc); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-16 11:14:53 +01:00
										 |  |  |     mc->desc = "Sharp SL-5500 (Collie) PDA (SA-1110)"; | 
					
						
							| 
									
										
										
										
											2015-09-04 15:37:08 -03:00
										 |  |  |     mc->init = collie_init; | 
					
						
							| 
									
										
										
										
											2017-09-07 13:54:54 +01:00
										 |  |  |     mc->ignore_memory_transaction_failures = true; | 
					
						
							| 
									
										
										
										
											2017-09-13 18:04:57 +02:00
										 |  |  |     mc->default_cpu_type = ARM_CPU_TYPE_NAME("sa1110"); | 
					
						
							| 
									
										
										
										
											2020-02-19 11:08:45 -05:00
										 |  |  |     mc->default_ram_size = 0x20000000; | 
					
						
							|  |  |  |     mc->default_ram_id = "strongarm.sdram"; | 
					
						
							| 
									
										
										
										
											2011-04-19 18:56:46 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 20:49:19 +00:00
										 |  |  | static const TypeInfo collie_machine_typeinfo = { | 
					
						
							|  |  |  |     .name = TYPE_COLLIE_MACHINE, | 
					
						
							|  |  |  |     .parent = TYPE_MACHINE, | 
					
						
							|  |  |  |     .class_init = collie_machine_class_init, | 
					
						
							|  |  |  |     .instance_size = sizeof(CollieMachineState), | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void collie_machine_register_types(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     type_register_static(&collie_machine_typeinfo); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | type_init(collie_machine_register_types); |