tegra186.c (5c9016f0a8a3ba30c6593d2cb0d067164dd41846) | tegra186.c (7355c7b9ae0d45923bac088bc1faebd5e9a66164) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* | 1// SPDX-License-Identifier: GPL-2.0-only 2/* |
3 * Copyright (C) 2017 NVIDIA CORPORATION. All rights reserved. | 3 * Copyright (C) 2017-2021 NVIDIA CORPORATION. All rights reserved. |
4 */ 5 6#include <linux/io.h> 7#include <linux/module.h> 8#include <linux/mod_devicetable.h> 9#include <linux/of_device.h> 10#include <linux/platform_device.h> 11 --- 28 unchanged lines hidden (view full) --- 40 override = readl(mc->regs + client->regs.sid.override); 41 security = readl(mc->regs + client->regs.sid.security); 42 43 dev_dbg(mc->dev, "client %s: override: %x security: %x\n", 44 client->name, override, security); 45 } 46} 47 | 4 */ 5 6#include <linux/io.h> 7#include <linux/module.h> 8#include <linux/mod_devicetable.h> 9#include <linux/of_device.h> 10#include <linux/platform_device.h> 11 --- 28 unchanged lines hidden (view full) --- 40 override = readl(mc->regs + client->regs.sid.override); 41 security = readl(mc->regs + client->regs.sid.security); 42 43 dev_dbg(mc->dev, "client %s: override: %x security: %x\n", 44 client->name, override, security); 45 } 46} 47 |
48static int tegra186_mc_probe(struct tegra_mc *mc) 49{ 50 int err; 51 52 err = of_platform_populate(mc->dev->of_node, NULL, NULL, mc->dev); 53 if (err < 0) 54 return err; 55 56 tegra186_mc_program_sid(mc); 57 58 return 0; 59} 60 61static void tegra186_mc_remove(struct tegra_mc *mc) 62{ 63 of_platform_depopulate(mc->dev); 64} 65 |
|
48static int tegra186_mc_resume(struct tegra_mc *mc) 49{ 50 tegra186_mc_program_sid(mc); 51 52 return 0; 53} 54 55static const struct tegra_mc_ops tegra186_mc_ops = { | 66static int tegra186_mc_resume(struct tegra_mc *mc) 67{ 68 tegra186_mc_program_sid(mc); 69 70 return 0; 71} 72 73static const struct tegra_mc_ops tegra186_mc_ops = { |
74 .probe = tegra186_mc_probe, 75 .remove = tegra186_mc_remove, |
|
56 .resume = tegra186_mc_resume, 57}; 58 59#if defined(CONFIG_ARCH_TEGRA_186_SOC) 60static const struct tegra_mc_client tegra186_mc_clients[] = { 61 { 62 .name = "ptcr", 63 .sid = TEGRA186_SID_PASSTHROUGH, --- 640 unchanged lines hidden (view full) --- 704 .sid = { 705 .override = 0x518, 706 .security = 0x51c, 707 }, 708 }, 709 }, 710}; 711 | 76 .resume = tegra186_mc_resume, 77}; 78 79#if defined(CONFIG_ARCH_TEGRA_186_SOC) 80static const struct tegra_mc_client tegra186_mc_clients[] = { 81 { 82 .name = "ptcr", 83 .sid = TEGRA186_SID_PASSTHROUGH, --- 640 unchanged lines hidden (view full) --- 724 .sid = { 725 .override = 0x518, 726 .security = 0x51c, 727 }, 728 }, 729 }, 730}; 731 |
712static const struct tegra_mc_soc tegra186_mc_soc = { | 732const struct tegra_mc_soc tegra186_mc_soc = { |
713 .num_clients = ARRAY_SIZE(tegra186_mc_clients), 714 .clients = tegra186_mc_clients, | 733 .num_clients = ARRAY_SIZE(tegra186_mc_clients), 734 .clients = tegra186_mc_clients, |
735 .num_address_bits = 40, |
|
715 .ops = &tegra186_mc_ops, 716}; 717#endif 718 719#if defined(CONFIG_ARCH_TEGRA_194_SOC) 720static const struct tegra_mc_client tegra194_mc_clients[] = { 721 { 722 .name = "ptcr", --- 1190 unchanged lines hidden (view full) --- 1913 .sid = { 1914 .override = 0x7f8, 1915 .security = 0x7fc, 1916 }, 1917 }, 1918 }, 1919}; 1920 | 736 .ops = &tegra186_mc_ops, 737}; 738#endif 739 740#if defined(CONFIG_ARCH_TEGRA_194_SOC) 741static const struct tegra_mc_client tegra194_mc_clients[] = { 742 { 743 .name = "ptcr", --- 1190 unchanged lines hidden (view full) --- 1934 .sid = { 1935 .override = 0x7f8, 1936 .security = 0x7fc, 1937 }, 1938 }, 1939 }, 1940}; 1941 |
1921static const struct tegra_mc_soc tegra194_mc_soc = { | 1942const struct tegra_mc_soc tegra194_mc_soc = { |
1922 .num_clients = ARRAY_SIZE(tegra194_mc_clients), 1923 .clients = tegra194_mc_clients, | 1943 .num_clients = ARRAY_SIZE(tegra194_mc_clients), 1944 .clients = tegra194_mc_clients, |
1945 .num_address_bits = 40, |
|
1924 .ops = &tegra186_mc_ops, 1925}; 1926#endif | 1946 .ops = &tegra186_mc_ops, 1947}; 1948#endif |
1927 1928static int tegra186_mc_probe(struct platform_device *pdev) 1929{ 1930 struct resource *res; 1931 struct tegra_mc *mc; 1932 int err; 1933 1934 mc = devm_kzalloc(&pdev->dev, sizeof(*mc), GFP_KERNEL); 1935 if (!mc) 1936 return -ENOMEM; 1937 1938 mc->soc = of_device_get_match_data(&pdev->dev); 1939 1940 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1941 mc->regs = devm_ioremap_resource(&pdev->dev, res); 1942 if (IS_ERR(mc->regs)) 1943 return PTR_ERR(mc->regs); 1944 1945 mc->dev = &pdev->dev; 1946 1947 err = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); 1948 if (err < 0) 1949 return err; 1950 1951 platform_set_drvdata(pdev, mc); 1952 tegra186_mc_program_sid(mc); 1953 1954 return 0; 1955} 1956 1957static int tegra186_mc_remove(struct platform_device *pdev) 1958{ 1959 struct tegra_mc *mc = platform_get_drvdata(pdev); 1960 1961 of_platform_depopulate(mc->dev); 1962 1963 return 0; 1964} 1965 1966static const struct of_device_id tegra186_mc_of_match[] = { 1967#if defined(CONFIG_ARCH_TEGRA_186_SOC) 1968 { .compatible = "nvidia,tegra186-mc", .data = &tegra186_mc_soc }, 1969#endif 1970#if defined(CONFIG_ARCH_TEGRA_194_SOC) 1971 { .compatible = "nvidia,tegra194-mc", .data = &tegra194_mc_soc }, 1972#endif 1973 { /* sentinel */ } 1974}; 1975MODULE_DEVICE_TABLE(of, tegra186_mc_of_match); 1976 1977static int __maybe_unused tegra_mc_suspend(struct device *dev) 1978{ 1979 struct tegra_mc *mc = dev_get_drvdata(dev); 1980 1981 if (mc->soc->ops && mc->soc->ops->suspend) 1982 return mc->soc->ops->suspend(mc); 1983 1984 return 0; 1985} 1986 1987static int __maybe_unused tegra_mc_resume(struct device *dev) 1988{ 1989 struct tegra_mc *mc = dev_get_drvdata(dev); 1990 1991 if (mc->soc->ops && mc->soc->ops->resume) 1992 return mc->soc->ops->resume(mc); 1993 1994 return 0; 1995} 1996 1997static const struct dev_pm_ops tegra186_mc_pm_ops = { 1998 SET_SYSTEM_SLEEP_PM_OPS(tegra_mc_suspend, tegra_mc_resume) 1999}; 2000 2001static struct platform_driver tegra186_mc_driver = { 2002 .driver = { 2003 .name = "tegra186-mc", 2004 .of_match_table = tegra186_mc_of_match, 2005 .pm = &tegra186_mc_pm_ops, 2006 .suppress_bind_attrs = true, 2007 }, 2008 .probe = tegra186_mc_probe, 2009 .remove = tegra186_mc_remove, 2010}; 2011module_platform_driver(tegra186_mc_driver); 2012 2013MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); 2014MODULE_DESCRIPTION("NVIDIA Tegra186 Memory Controller driver"); 2015MODULE_LICENSE("GPL v2"); | |