|  | @@ -1864,3 +1864,116 @@ static void __init at91_add_device_sha(void) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* --------------------------------------------------------------------
 | 
	
		
			
				|  |  |   *  DES/TDES
 | 
	
		
			
				|  |  | + * -------------------------------------------------------------------- */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#if defined(CONFIG_CRYPTO_DEV_ATMEL_TDES) || defined(CONFIG_CRYPTO_DEV_ATMEL_TDES_MODULE)
 | 
	
		
			
				|  |  | +static struct resource tdes_resources[] = {
 | 
	
		
			
				|  |  | +	[0] = {
 | 
	
		
			
				|  |  | +		.start	= AT91SAM9G45_BASE_TDES,
 | 
	
		
			
				|  |  | +		.end	= AT91SAM9G45_BASE_TDES + SZ_16K - 1,
 | 
	
		
			
				|  |  | +		.flags	= IORESOURCE_MEM,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	[1] = {
 | 
	
		
			
				|  |  | +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
 | 
	
		
			
				|  |  | +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
 | 
	
		
			
				|  |  | +		.flags	= IORESOURCE_IRQ,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct platform_device at91sam9g45_tdes_device = {
 | 
	
		
			
				|  |  | +	.name	= "atmel_tdes",
 | 
	
		
			
				|  |  | +	.id		= -1,
 | 
	
		
			
				|  |  | +	.resource	= tdes_resources,
 | 
	
		
			
				|  |  | +	.num_resources	= ARRAY_SIZE(tdes_resources),
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void __init at91_add_device_tdes(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	platform_device_register(&at91sam9g45_tdes_device);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +static void __init at91_add_device_tdes(void) {}
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* --------------------------------------------------------------------
 | 
	
		
			
				|  |  | + *  AES
 | 
	
		
			
				|  |  | + * -------------------------------------------------------------------- */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#if defined(CONFIG_CRYPTO_DEV_ATMEL_AES) || defined(CONFIG_CRYPTO_DEV_ATMEL_AES_MODULE)
 | 
	
		
			
				|  |  | +static struct aes_platform_data aes_data;
 | 
	
		
			
				|  |  | +static u64 aes_dmamask = DMA_BIT_MASK(32);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct resource aes_resources[] = {
 | 
	
		
			
				|  |  | +	[0] = {
 | 
	
		
			
				|  |  | +		.start	= AT91SAM9G45_BASE_AES,
 | 
	
		
			
				|  |  | +		.end	= AT91SAM9G45_BASE_AES + SZ_16K - 1,
 | 
	
		
			
				|  |  | +		.flags	= IORESOURCE_MEM,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	[1] = {
 | 
	
		
			
				|  |  | +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
 | 
	
		
			
				|  |  | +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_AESTDESSHA,
 | 
	
		
			
				|  |  | +		.flags	= IORESOURCE_IRQ,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct platform_device at91sam9g45_aes_device = {
 | 
	
		
			
				|  |  | +	.name	= "atmel_aes",
 | 
	
		
			
				|  |  | +	.id		= -1,
 | 
	
		
			
				|  |  | +	.dev	= {
 | 
	
		
			
				|  |  | +		.dma_mask		= &aes_dmamask,
 | 
	
		
			
				|  |  | +		.coherent_dma_mask	= DMA_BIT_MASK(32),
 | 
	
		
			
				|  |  | +		.platform_data		= &aes_data,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	.resource	= aes_resources,
 | 
	
		
			
				|  |  | +	.num_resources	= ARRAY_SIZE(aes_resources),
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void __init at91_add_device_aes(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	struct at_dma_slave	*atslave;
 | 
	
		
			
				|  |  | +	struct aes_dma_data	*alt_atslave;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	alt_atslave = kzalloc(sizeof(struct aes_dma_data), GFP_KERNEL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* DMA TX slave channel configuration */
 | 
	
		
			
				|  |  | +	atslave = &alt_atslave->txdata;
 | 
	
		
			
				|  |  | +	atslave->dma_dev = &at_hdmac_device.dev;
 | 
	
		
			
				|  |  | +	atslave->cfg = ATC_FIFOCFG_ENOUGHSPACE	| ATC_SRC_H2SEL_HW |
 | 
	
		
			
				|  |  | +						ATC_SRC_PER(AT_DMA_ID_AES_RX);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* DMA RX slave channel configuration */
 | 
	
		
			
				|  |  | +	atslave = &alt_atslave->rxdata;
 | 
	
		
			
				|  |  | +	atslave->dma_dev = &at_hdmac_device.dev;
 | 
	
		
			
				|  |  | +	atslave->cfg = ATC_FIFOCFG_ENOUGHSPACE	| ATC_DST_H2SEL_HW |
 | 
	
		
			
				|  |  | +						ATC_DST_PER(AT_DMA_ID_AES_TX);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	aes_data.dma_slave = alt_atslave;
 | 
	
		
			
				|  |  | +	platform_device_register(&at91sam9g45_aes_device);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +static void __init at91_add_device_aes(void) {}
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* -------------------------------------------------------------------- */
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * These devices are always present and don't need any board-specific
 | 
	
		
			
				|  |  | + * setup.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static int __init at91_add_standard_devices(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	if (of_have_populated_dt())
 | 
	
		
			
				|  |  | +		return 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	at91_add_device_hdmac();
 | 
	
		
			
				|  |  | +	at91_add_device_rtc();
 | 
	
		
			
				|  |  | +	at91_add_device_rtt();
 | 
	
		
			
				|  |  | +	at91_add_device_trng();
 | 
	
		
			
				|  |  | +	at91_add_device_watchdog();
 | 
	
		
			
				|  |  | +	at91_add_device_tc();
 | 
	
		
			
				|  |  | +	at91_add_device_sha();
 | 
	
		
			
				|  |  | +	at91_add_device_tdes();
 | 
	
		
			
				|  |  | +	at91_add_device_aes();
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +arch_initcall(at91_add_standard_devices);
 |