/*
 * Copyright (c) 2012, ETH Zurich. All rights reserved.
 *
 * This file is distributed under the terms in the attached LICENSE file.
 * If you do not find this file, copies can be found by writing to:
 * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 */

/*
 * a9scu.dev
 *
 * DESCRIPTION: Cortex A9 Snoop Control Unit
 *
 * This is derived from:
 *
 * ARM Cortex-A9 MPCore Technical Reference Manual
 *
 */
 
device a9scu msbfirst ( addr base ) "Cortex A9 SCU" {
 
    register SCUControl addr(base, 0x0) "SCU Control" {
	_			25 rsvd;
	IC_standby		1 rw	"IC standby enable";
	SCU_standby		1 rw	"SCU standby enable";
	all_device_to_port0	1 rw	"Force all Device to port 0 enable";
	SCU_spec_linefill	1 rw	"SCU speculative linefills enable";
	SCU_ram_parity		1 rw	"SCU RAMs parity enable";
	address_filtering	1 rw	"Address Filtering enable";
	SCU_enable		1 rw	"SCU enable";
    };
 	 
    register SCUConfig	ro addr(base, 0x4) "SCU Configuration" {
	_		16;
	tag_ram_sizes	8 ro	"Tag RAM sizes";
	cpu_smp		4 ro	"CPUs SMP bits";
	_		2;
	cpu_number	2 ro	"Number of CPUs present";
    };
    
    constants cpu_status "CPU Status" {
	normal_mode	 = 0b00		"Normal mode";
	dormant_mode	 = 0b10		"Dormant mode";
	powered_off_mode = 0b11		"Powered-off mode";
    };
    
    register SCUPowerStatus addr(base, 0x8) "SCU CPU Power Status" {
	_		6;
	cpu3_status	2 rw	"Status CPU3";
	_		6;
	cpu2_status	2 rw	"Status CPU2";
	_		6;	
	cpu1_status	2 rw	"Status CPU1";
	_		6;
	cpu0_status	2 rw	"Status CPU0";
    };
    
    register SCUFilteringStart addr(base, 0x40) "Filtering Start Address" {
	start_address	12 rw	"Filtering Start address";
	_		20;
    };
    
    register SCUFilteringEnd addr(base, 0x44) "Filtering End Address" {
	end_address	12 rw	"Filtering Start address";
	_		20;
    };
 
 };
