cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

atmel-sdramc.c (1770B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Atmel (Multi-port DDR-)SDRAM Controller driver
      4 *
      5 * Author: Alexandre Belloni <alexandre.belloni@free-electrons.com>
      6 *
      7 * Copyright (C) 2014 Atmel
      8 */
      9
     10#include <linux/clk.h>
     11#include <linux/err.h>
     12#include <linux/kernel.h>
     13#include <linux/init.h>
     14#include <linux/of_platform.h>
     15#include <linux/platform_device.h>
     16
     17struct at91_ramc_caps {
     18	bool has_ddrck;
     19	bool has_mpddr_clk;
     20};
     21
     22static const struct at91_ramc_caps at91rm9200_caps = { };
     23
     24static const struct at91_ramc_caps at91sam9g45_caps = {
     25	.has_ddrck = 1,
     26	.has_mpddr_clk = 0,
     27};
     28
     29static const struct at91_ramc_caps sama5d3_caps = {
     30	.has_ddrck = 1,
     31	.has_mpddr_clk = 1,
     32};
     33
     34static const struct of_device_id atmel_ramc_of_match[] = {
     35	{ .compatible = "atmel,at91rm9200-sdramc", .data = &at91rm9200_caps, },
     36	{ .compatible = "atmel,at91sam9260-sdramc", .data = &at91rm9200_caps, },
     37	{ .compatible = "atmel,at91sam9g45-ddramc", .data = &at91sam9g45_caps, },
     38	{ .compatible = "atmel,sama5d3-ddramc", .data = &sama5d3_caps, },
     39	{},
     40};
     41
     42static int atmel_ramc_probe(struct platform_device *pdev)
     43{
     44	const struct at91_ramc_caps *caps;
     45	struct clk *clk;
     46
     47	caps = of_device_get_match_data(&pdev->dev);
     48
     49	if (caps->has_ddrck) {
     50		clk = devm_clk_get(&pdev->dev, "ddrck");
     51		if (IS_ERR(clk))
     52			return PTR_ERR(clk);
     53		clk_prepare_enable(clk);
     54	}
     55
     56	if (caps->has_mpddr_clk) {
     57		clk = devm_clk_get(&pdev->dev, "mpddr");
     58		if (IS_ERR(clk)) {
     59			pr_err("AT91 RAMC: couldn't get mpddr clock\n");
     60			return PTR_ERR(clk);
     61		}
     62		clk_prepare_enable(clk);
     63	}
     64
     65	return 0;
     66}
     67
     68static struct platform_driver atmel_ramc_driver = {
     69	.probe		= atmel_ramc_probe,
     70	.driver		= {
     71		.name	= "atmel-ramc",
     72		.of_match_table = atmel_ramc_of_match,
     73	},
     74};
     75
     76builtin_platform_driver(atmel_ramc_driver);