diff --git a/drivers/pinctrl/pinctrl-tegra194-pexclk-padctrl.c b/drivers/pinctrl/pinctrl-tegra194-pexclk-padctrl.c index 600c2de4..8ae9b550 100644 --- a/drivers/pinctrl/pinctrl-tegra194-pexclk-padctrl.c +++ b/drivers/pinctrl/pinctrl-tegra194-pexclk-padctrl.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #define PCIE_PEXCLK_PADCTL1_REFCLK_OVRD_0 0x8 #define CFG2TMC_SW_CTL BIT(0) diff --git a/include/linux/tegra-oot-prod.h b/include/linux/tegra-oot-prod.h index 7f9b53ad..de0021c5 100644 --- a/include/linux/tegra-oot-prod.h +++ b/include/linux/tegra-oot-prod.h @@ -6,143 +6,21 @@ #ifndef _TEGRA_OOT_PRODS_H #define _TEGRA_OOT_PRODS_H +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0) +#ifdef CONFIG_TEGRA_PROD_ENABLE +#include +#include +#else +#include +#include +#endif +#else /* LINUX_VERSION_CODE */ #ifdef CONFIG_TEGRA_PROD_ENABLE #include #else - -/** - * Implement the tegra prod APIs as static inline with success to avoid - * the failure in client side due to prod. - */ - -struct tegra_prod; - -/** - * tegra_prod_set_list(): Set all prods configurations - * @base: List of IO mapped registers. - * @tegra_prod: tegra_prod handle which is allocated by devm_tegra_prod_get() - * or tegra_prod_get_from_node(); - * - * Configure all the prod configuration listed on prod-setting nodes. - * - * Returns 0 on success otherwise negative error number for failed case. - */ -static inline int tegra_prod_set_list(void __iomem **base, struct tegra_prod *tegra_prod) -{ - return 0; -} - -/** - * tegra_prod_set_boot_init(): Set all prods configurations which has boot init - * flag on the prod setting nodes. - * @base: List of IO mapped registers. - * @tegra_prod: tegra_prod handle which is allocated by devm_tegra_prod_get() - * or tegra_prod_get_from_node(); - * - * Configure all the prod configuration listed on prod-setting nodes. - * - * Returns 0 on success otherwise negative error number for failed case. - */ -static inline int tegra_prod_set_boot_init(void __iomem **base, - struct tegra_prod *tegra_prod) -{ - return 0; -} - -/** - * tegra_prod_set_by_name(): Set prod configuration with specific prod name. - * This is used for conditional prod configurations. - * @base: List of IO mapped registers. - * @name: Name of conditional prod which need to be configure. - * @tegra_prod: tegra_prod handle which is allocated by devm_tegra_prod_get() - * or tegra_prod_get_from_node(); - * - * Configure prod configuration with specific prod name for conditional - * prod configurations. - * - * Returns 0 on success otherwise negative error number for failed case. - */ -static inline int tegra_prod_set_by_name(void __iomem **base, const char *name, - struct tegra_prod *tegra_prod) -{ - return 0; -} - -/** - * tegra_prod_set_by_name_partially - Set the prod setting from list partially - * under given prod name. The matching is done - * qith index, offset and mask. - * @base: base address of the register. - * @name: the name of tegra prod need to set. - * @tegra_prod: the list of tegra prods. - * @index: Index of base address. - * @offset: Offset of the register. - * @mask: Mask field on given register. - * - * Find the tegra prod in the list according to the name. Then set - * that tegra prod which has matching of index, offset and mask. - * - * Returns 0 on success. - */ -static inline int tegra_prod_set_by_name_partially(void __iomem **base, const char *name, - struct tegra_prod *tegra_prod, u32 index, - u32 offset, u32 mask) -{ - return 0; -} - -/** - * tegra_prod_by_name_supported - Tell whether tegra prod will be supported by - * given name or not. - * @tegra_prod: the list of tegra prods. - * @name: the name of tegra prod need to set. - * - * Find the tegra prod in the list according to the name. If it exist then - * return true else false. - */ -static inline bool tegra_prod_by_name_supported(struct tegra_prod *tegra_prod, - const char *name) -{ - return true; -} - -/** - * devm_tegra_prod_get(): Get the prod handle from the device. - * @dev: Device handle on which prod setting nodes are available. - * - * Parse the prod-setting node of the dev->of_node and keep all prod - * setting data in prod handle. - * This handle is used for setting prod configurations. - * - * Returns valid prod_list handle on success or pointer to the error - * when it failed. - */ -static inline struct tegra_prod *devm_tegra_prod_get(struct device *dev) -{ - return (struct tegra_prod *)dev; -} - -/** - * devm_tegra_prod_get_from_node(): Get the prod handle from the node. - * @dev: Device handle. - * @np: Node pointer on which prod setting nodes are available. - * - * Parse the prod-setting node of the node pointer "np" and keep all prod - * setting data in prod handle. - * This handle is used for setting prod configurations. - * - * Returns valid prod_list handle on success or pointer to the error - * when it failed. - * The allocated resource is released by driver core framework when device - * is unbinded and so no need to call any release APIs for the tegra_prod - * handle. - */ -static inline struct tegra_prod *devm_tegra_prod_get_from_node(struct device *dev, - struct device_node *np) -{ - return (struct tegra_prod *)dev; -} - -#endif /* CONFIG_TEGRA_PROD_ENABLE */ +#include +#endif +#endif /* LINUX_VERSION_CODE */ #endif /* _TEGRA_OOT_PRODS_H */ diff --git a/include/linux/tegra-prod.h b/include/linux/tegra-prod-legacy-dummy.h similarity index 83% rename from include/linux/tegra-prod.h rename to include/linux/tegra-prod-legacy-dummy.h index 970dec18..435131c0 100644 --- a/include/linux/tegra-prod.h +++ b/include/linux/tegra-prod-legacy-dummy.h @@ -1,10 +1,15 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ -#ifndef _TEGRA_PRODS_H -#define _TEGRA_PRODS_H +#ifndef TEGRA_PROD_LEGACY_DUMMY_H__ +#define TEGRA_PROD_LEGACY_DUMMY_H__ + +/** + * Implement the tegra prod APIs as static inline with success to avoid + * the failure in client side due to prod. + */ struct tegra_prod; @@ -16,14 +21,13 @@ struct tegra_prod; * * Configure all the prod configuration listed on prod-setting nodes. * - * Returns 0 on success otherwise negive error number for failed case. + * Returns 0 on success otherwise negative error number for failed case. */ static inline int tegra_prod_set_list(void __iomem **base, struct tegra_prod *tegra_prod) { - return -ENOTSUPP; + return 0; } - /** * tegra_prod_set_boot_init(): Set all prods configurations which has boot init * flag on the prod setting nodes. @@ -33,11 +37,12 @@ static inline int tegra_prod_set_list(void __iomem **base, struct tegra_prod *te * * Configure all the prod configuration listed on prod-setting nodes. * - * Returns 0 on success otherwise negive error number for failed case. + * Returns 0 on success otherwise negative error number for failed case. */ -static inline int tegra_prod_set_boot_init(void __iomem **base, struct tegra_prod *tegra_prod) +static inline int tegra_prod_set_boot_init(void __iomem **base, + struct tegra_prod *tegra_prod) { - return -ENOTSUPP; + return 0; } /** @@ -51,12 +56,12 @@ static inline int tegra_prod_set_boot_init(void __iomem **base, struct tegra_pro * Configure prod configuration with specific prod name for conditional * prod configurations. * - * Returns 0 on success otherwise negive error number for failed case. + * Returns 0 on success otherwise negative error number for failed case. */ static inline int tegra_prod_set_by_name(void __iomem **base, const char *name, struct tegra_prod *tegra_prod) { - return -ENOTSUPP; + return 0; } /** @@ -79,7 +84,7 @@ static inline int tegra_prod_set_by_name_partially(void __iomem **base, const ch struct tegra_prod *tegra_prod, u32 index, u32 offset, u32 mask) { - return -ENOTSUPP; + return 0; } /** @@ -94,7 +99,7 @@ static inline int tegra_prod_set_by_name_partially(void __iomem **base, const ch static inline bool tegra_prod_by_name_supported(struct tegra_prod *tegra_prod, const char *name) { - return false; + return true; } /** @@ -110,7 +115,7 @@ static inline bool tegra_prod_by_name_supported(struct tegra_prod *tegra_prod, */ static inline struct tegra_prod *devm_tegra_prod_get(struct device *dev) { - return ERR_PTR(-ENOTSUPP); + return (struct tegra_prod *)dev; } /** @@ -131,6 +136,7 @@ static inline struct tegra_prod *devm_tegra_prod_get(struct device *dev) static inline struct tegra_prod *devm_tegra_prod_get_from_node(struct device *dev, struct device_node *np) { - return ERR_PTR(-ENOTSUPP); + return (struct tegra_prod *)dev; } -#endif + +#endif /* TEGRA_PROD_LEGACY_DUMMY_H__ */ diff --git a/include/linux/tegra-prod-upstream-dummy.h b/include/linux/tegra-prod-upstream-dummy.h new file mode 100644 index 00000000..01dfb6dd --- /dev/null +++ b/include/linux/tegra-prod-upstream-dummy.h @@ -0,0 +1,81 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. + */ + +#ifndef __LINUX_TEGRA_PROD_UPSTREAM_DUMMY_H__ +#define __LINUX_TEGRA_PROD_UPSTREAM_DUMMY_H__ + +#include + +/** + * Prod configuration of device provided from client. + * This structure have the details about each of prod settings. + */ +struct tegra_prod_dev_reg_field { + const char *field_name; + uint32_t reg_index; + uint32_t reg_offset; + uint32_t field_start; + uint32_t field_len; +}; + +/** + * Prod setting from controller where it passes the total number of registers + * having prod, and their register field names. + */ +struct tegra_prod_dev_info { + uint32_t num_total_dev_reg; + uint32_t num_dev_reg_field; + const struct tegra_prod_dev_reg_field *dev_reg_field; +}; + +/** + * Prod register information as register index, offset from base, + * register mask for the given prod and prod value for given + * register field. + */ +struct tegra_prod_reg_info { + uint32_t reg_index; + uint32_t reg_offset; + uint32_t reg_mask; + uint32_t reg_value; +}; + +/** + * Contains prod setting of all registers. + */ +struct tegra_prod_cfg_info { + const char *prod_name; + uint32_t num_reg_info; + struct tegra_prod_reg_info *reg_info; +}; + +/** + * Contains prod setting list of all prod values. + */ +struct tegra_prod_cfg_list { + uint32_t num_list; + struct tegra_prod_cfg_info *prod_cfg; +}; + +static inline struct tegra_prod_cfg_info *tegra_prod_get_by_name_from_list(struct device *dev, + const struct tegra_prod_cfg_list *prod_list, + const char *prod_name) +{ + return ERR_PTR(-ENODEV); +} + +static inline struct tegra_prod_cfg_list *devm_tegra_prod_get_list_from_node(struct device *dev, + const struct device_node *np, + const struct tegra_prod_dev_info *prod_dev) +{ + return ERR_PTR(-ENODEV); +} + +static inline struct tegra_prod_cfg_list *devm_tegra_prod_get_list(struct device *dev, + const struct tegra_prod_dev_info *prod_dev) +{ + return ERR_PTR(-ENODEV); +} +#endif /* __LINUX_TEGRA_PROD_UPSTREAM_DUMMY_H__ */