ARM: SoC-related driver updates
Various driver updates for platforms:
- A larger set of work on Tegra 2/3 around memory controller and
regulator features, some fuse cleanups, etc..
- MMP platform drivers, in particular for USB PHY, and other smaller
additions.
- Samsung Exynos 5422 driver for DMC (dynamic memory configuration),
and ASV (adaptive voltage), allowing the platform to run at more
optimal operating points.
- Misc refactorings and support for RZ/G2N and R8A774B1 from Renesas
- Clock/reset control driver for TI/OMAP
- Meson-A1 reset controller support
- Qualcomm sdm845 and sda845 SoC IDs for socinfo
-----BEGIN PGP SIGNATURE-----
iQJDBAABCAAtFiEElf+HevZ4QCAJmMQ+jBrnPN6EHHcFAl3pORkPHG9sb2ZAbGl4
b20ubmV0AAoJEIwa5zzehBx3FK0P/0EG4lK+il7nE3pd9yIGUjlcYuumIjoxvyC9
9ef202POJLIO3yMlsNyGFR+aOknFO/GtGvDkDFhTtlsGCL40tVzVsyo7ZQo+8mXD
abr+H74NmRXImc+SISYR8X1CD6vEi3oi/no1y5dRzknlBikfsdSLKXJSMYBJ2A6t
DNLwu0h1IZhPk7XQQsxaElG/a9HN8eueMdP20J1IlhOh0GiOwm+rbsLSZNbA/W9m
53XhFs3Ag39SDE0BfXsS+XOWTE7FheZsZk2XQrOwYm9PnxjpIWH7FE2sYsk6uUIc
Pa1b6wB5zlRnxvVHP0m3GXhbTUJDYDK3oybHffI4Mzd0cyZQHC92LhUXFrlTxkaf
6kyhJOTdd5KMlZ2LS7jkwLqb30ieXBPKAREjdbRt6hpvu5P6G+bZQphTEeNAZC61
XnX8mQ/XeoHdoGY5MvS8ht6a1qDF29ebA0/02seicThGK6tS9Qsju6Zo0sg9H1NH
weK6jDuzLq5jpv/LB1apigrDSx+zddRzrwkwy85hR5aWOQhG0xjOoFBProbTS0to
wR46zCEkbGZv4uc0gRuIdp0NR/lguqgDWPeoLluoTqmcpKS6N3RyxD0bWzlvgDFA
fpYxVNKavHneWjfZ7U5RbYXD6jycJcuLaCOs16nrtUbMgJ9pqclLIaZXn7ZTRIuT
RW6NgfZV
=dk7w
-----END PGP SIGNATURE-----
Merge tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
Pull ARM SoC driver updates from Olof Johansson:
"Various driver updates for platforms:
- A larger set of work on Tegra 2/3 around memory controller and
regulator features, some fuse cleanups, etc..
- MMP platform drivers, in particular for USB PHY, and other smaller
additions.
- Samsung Exynos 5422 driver for DMC (dynamic memory configuration),
and ASV (adaptive voltage), allowing the platform to run at more
optimal operating points.
- Misc refactorings and support for RZ/G2N and R8A774B1 from Renesas
- Clock/reset control driver for TI/OMAP
- Meson-A1 reset controller support
- Qualcomm sdm845 and sda845 SoC IDs for socinfo"
* tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (150 commits)
firmware: arm_scmi: Fix doorbell ring logic for !CONFIG_64BIT
soc: fsl: add RCPM driver
dt-bindings: fsl: rcpm: Add 'little-endian' and update Chassis definition
memory: tegra: Consolidate registers definition into common header
memory: tegra: Ensure timing control debug features are disabled
memory: tegra: Introduce Tegra30 EMC driver
memory: tegra: Do not handle error from wait_for_completion_timeout()
memory: tegra: Increase handshake timeout on Tegra20
memory: tegra: Print a brief info message about EMC timings
memory: tegra: Pre-configure debug register on Tegra20
memory: tegra: Include io.h instead of iopoll.h
memory: tegra: Adapt for Tegra20 clock driver changes
memory: tegra: Don't set EMC rate to maximum on probe for Tegra20
memory: tegra: Add gr2d and gr3d to DRM IOMMU group
memory: tegra: Set DMA mask based on supported address bits
soc: at91: Add Atmel SFR SN (Serial Number) support
memory: atmel-ebi: switch to SPDX license identifiers
memory: atmel-ebi: move NUM_CS definition inside EBI driver
soc: mediatek: Refactor bus protection control
soc: mediatek: Refactor sram control
...
This commit is contained in:
commit
ec939e4c94
133 changed files with 7617 additions and 945 deletions
|
|
@ -16,11 +16,14 @@ enum {
|
|||
|
||||
struct meson_sm_firmware;
|
||||
|
||||
int meson_sm_call(unsigned int cmd_index, u32 *ret, u32 arg0, u32 arg1,
|
||||
u32 arg2, u32 arg3, u32 arg4);
|
||||
int meson_sm_call_write(void *buffer, unsigned int b_size, unsigned int cmd_index,
|
||||
u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4);
|
||||
int meson_sm_call_read(void *buffer, unsigned int bsize, unsigned int cmd_index,
|
||||
u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4);
|
||||
int meson_sm_call(struct meson_sm_firmware *fw, unsigned int cmd_index,
|
||||
u32 *ret, u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4);
|
||||
int meson_sm_call_write(struct meson_sm_firmware *fw, void *buffer,
|
||||
unsigned int b_size, unsigned int cmd_index, u32 arg0,
|
||||
u32 arg1, u32 arg2, u32 arg3, u32 arg4);
|
||||
int meson_sm_call_read(struct meson_sm_firmware *fw, void *buffer,
|
||||
unsigned int bsize, unsigned int cmd_index, u32 arg0,
|
||||
u32 arg1, u32 arg2, u32 arg3, u32 arg4);
|
||||
struct meson_sm_firmware *meson_sm_get(struct device_node *firmware_node);
|
||||
|
||||
#endif /* _MESON_SM_FW_H_ */
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* Xilinx Zynq MPSoC Firmware layer
|
||||
*
|
||||
* Copyright (C) 2014-2018 Xilinx
|
||||
* Copyright (C) 2014-2019 Xilinx
|
||||
*
|
||||
* Michal Simek <michal.simek@xilinx.com>
|
||||
* Davorin Mista <davorin.mista@aggios.com>
|
||||
|
|
@ -46,6 +46,7 @@
|
|||
#define ZYNQMP_PM_CAPABILITY_ACCESS 0x1U
|
||||
#define ZYNQMP_PM_CAPABILITY_CONTEXT 0x2U
|
||||
#define ZYNQMP_PM_CAPABILITY_WAKEUP 0x4U
|
||||
#define ZYNQMP_PM_CAPABILITY_UNUSABLE 0x8U
|
||||
|
||||
/*
|
||||
* Firmware FPGA Manager flags
|
||||
|
|
|
|||
|
|
@ -108,10 +108,10 @@ void logic_outsl(unsigned long addr, const void *buffer, unsigned int count);
|
|||
* area by redefining the macro below.
|
||||
*/
|
||||
#define PIO_INDIRECT_SIZE 0x4000
|
||||
#define MMIO_UPPER_LIMIT (IO_SPACE_LIMIT - PIO_INDIRECT_SIZE)
|
||||
#else
|
||||
#define MMIO_UPPER_LIMIT IO_SPACE_LIMIT
|
||||
#define PIO_INDIRECT_SIZE 0
|
||||
#endif /* CONFIG_INDIRECT_PIO */
|
||||
#define MMIO_UPPER_LIMIT (IO_SPACE_LIMIT - PIO_INDIRECT_SIZE)
|
||||
|
||||
struct logic_pio_hwaddr *find_io_range_by_fwnode(struct fwnode_handle *fwnode);
|
||||
unsigned long logic_pio_trans_hwaddr(struct fwnode_handle *fwnode,
|
||||
|
|
|
|||
|
|
@ -106,7 +106,6 @@
|
|||
#define AT91_MATRIX_DDR_IOSR BIT(18)
|
||||
#define AT91_MATRIX_NFD0_SELECT BIT(24)
|
||||
#define AT91_MATRIX_DDR_MP_EN BIT(25)
|
||||
#define AT91_MATRIX_EBI_NUM_CS 8
|
||||
|
||||
#define AT91_MATRIX_USBPUCR_PUON BIT(30)
|
||||
|
||||
|
|
|
|||
21
include/linux/platform_data/ti-prm.h
Normal file
21
include/linux/platform_data/ti-prm.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* TI PRM (Power & Reset Manager) platform data
|
||||
*
|
||||
* Copyright (C) 2019 Texas Instruments, Inc.
|
||||
*
|
||||
* Tero Kristo <t-kristo@ti.com>
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_PLATFORM_DATA_TI_PRM_H
|
||||
#define _LINUX_PLATFORM_DATA_TI_PRM_H
|
||||
|
||||
struct clockdomain;
|
||||
|
||||
struct ti_prm_platform_data {
|
||||
void (*clkdm_deny_idle)(struct clockdomain *clkdm);
|
||||
void (*clkdm_allow_idle)(struct clockdomain *clkdm);
|
||||
struct clockdomain * (*clkdm_lookup)(const char *name);
|
||||
};
|
||||
|
||||
#endif /* _LINUX_PLATFORM_DATA_TI_PRM_H */
|
||||
|
|
@ -63,6 +63,11 @@ struct wakeup_source {
|
|||
bool autosleep_enabled:1;
|
||||
};
|
||||
|
||||
#define for_each_wakeup_source(ws) \
|
||||
for ((ws) = wakeup_sources_walk_start(); \
|
||||
(ws); \
|
||||
(ws) = wakeup_sources_walk_next((ws)))
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
||||
/*
|
||||
|
|
@ -92,6 +97,10 @@ extern void wakeup_source_remove(struct wakeup_source *ws);
|
|||
extern struct wakeup_source *wakeup_source_register(struct device *dev,
|
||||
const char *name);
|
||||
extern void wakeup_source_unregister(struct wakeup_source *ws);
|
||||
extern int wakeup_sources_read_lock(void);
|
||||
extern void wakeup_sources_read_unlock(int idx);
|
||||
extern struct wakeup_source *wakeup_sources_walk_start(void);
|
||||
extern struct wakeup_source *wakeup_sources_walk_next(struct wakeup_source *ws);
|
||||
extern int device_wakeup_enable(struct device *dev);
|
||||
extern int device_wakeup_disable(struct device *dev);
|
||||
extern void device_set_wakeup_capable(struct device *dev, bool capable);
|
||||
|
|
|
|||
|
|
@ -62,7 +62,8 @@ struct reset_control_lookup {
|
|||
* @of_node: corresponding device tree node as phandle target
|
||||
* @of_reset_n_cells: number of cells in reset line specifiers
|
||||
* @of_xlate: translation function to translate from specifier as found in the
|
||||
* device tree to id as given to the reset control ops
|
||||
* device tree to id as given to the reset control ops, defaults
|
||||
* to :c:func:`of_reset_simple_xlate`.
|
||||
* @nr_resets: number of reset controls in this reset controller device
|
||||
*/
|
||||
struct reset_controller_dev {
|
||||
|
|
|
|||
|
|
@ -203,12 +203,34 @@ static inline struct reset_control *reset_control_get_shared(
|
|||
return __reset_control_get(dev, id, 0, true, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* reset_control_get_optional_exclusive - optional reset_control_get_exclusive()
|
||||
* @dev: device to be reset by the controller
|
||||
* @id: reset line name
|
||||
*
|
||||
* Optional variant of reset_control_get_exclusive(). If the requested reset
|
||||
* is not specified in the device tree, this function returns NULL instead of
|
||||
* an error.
|
||||
*
|
||||
* See reset_control_get_exclusive() for more information.
|
||||
*/
|
||||
static inline struct reset_control *reset_control_get_optional_exclusive(
|
||||
struct device *dev, const char *id)
|
||||
{
|
||||
return __reset_control_get(dev, id, 0, false, true, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* reset_control_get_optional_shared - optional reset_control_get_shared()
|
||||
* @dev: device to be reset by the controller
|
||||
* @id: reset line name
|
||||
*
|
||||
* Optional variant of reset_control_get_shared(). If the requested reset
|
||||
* is not specified in the device tree, this function returns NULL instead of
|
||||
* an error.
|
||||
*
|
||||
* See reset_control_get_shared() for more information.
|
||||
*/
|
||||
static inline struct reset_control *reset_control_get_optional_shared(
|
||||
struct device *dev, const char *id)
|
||||
{
|
||||
|
|
@ -354,12 +376,36 @@ static inline struct reset_control *devm_reset_control_get_shared(
|
|||
return __devm_reset_control_get(dev, id, 0, true, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_reset_control_get_optional_exclusive - resource managed
|
||||
* reset_control_get_optional_exclusive()
|
||||
* @dev: device to be reset by the controller
|
||||
* @id: reset line name
|
||||
*
|
||||
* Managed reset_control_get_optional_exclusive(). For reset controllers
|
||||
* returned from this function, reset_control_put() is called automatically on
|
||||
* driver detach.
|
||||
*
|
||||
* See reset_control_get_optional_exclusive() for more information.
|
||||
*/
|
||||
static inline struct reset_control *devm_reset_control_get_optional_exclusive(
|
||||
struct device *dev, const char *id)
|
||||
{
|
||||
return __devm_reset_control_get(dev, id, 0, false, true, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_reset_control_get_optional_shared - resource managed
|
||||
* reset_control_get_optional_shared()
|
||||
* @dev: device to be reset by the controller
|
||||
* @id: reset line name
|
||||
*
|
||||
* Managed reset_control_get_optional_shared(). For reset controllers returned
|
||||
* from this function, reset_control_put() is called automatically on driver
|
||||
* detach.
|
||||
*
|
||||
* See reset_control_get_optional_shared() for more information.
|
||||
*/
|
||||
static inline struct reset_control *devm_reset_control_get_optional_shared(
|
||||
struct device *dev, const char *id)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@
|
|||
#ifndef __ASM_MACH_CPUTYPE_H
|
||||
#define __ASM_MACH_CPUTYPE_H
|
||||
|
||||
#if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
|
||||
#include <asm/cputype.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* CPU Stepping CPU_ID CHIP_ID
|
||||
|
|
|
|||
|
|
@ -38,33 +38,27 @@ struct llcc_slice_desc {
|
|||
};
|
||||
|
||||
/**
|
||||
* llcc_slice_config - Data associated with the llcc slice
|
||||
* @usecase_id: usecase id for which the llcc slice is used
|
||||
* @slice_id: llcc slice id assigned to each slice
|
||||
* @max_cap: maximum capacity of the llcc slice
|
||||
* @priority: priority of the llcc slice
|
||||
* @fixed_size: whether the llcc slice can grow beyond its size
|
||||
* @bonus_ways: bonus ways associated with llcc slice
|
||||
* @res_ways: reserved ways associated with llcc slice
|
||||
* @cache_mode: mode of the llcc slice
|
||||
* @probe_target_ways: Probe only reserved and bonus ways on a cache miss
|
||||
* @dis_cap_alloc: Disable capacity based allocation
|
||||
* @retain_on_pc: Retain through power collapse
|
||||
* @activate_on_init: activate the slice on init
|
||||
* llcc_edac_reg_data - llcc edac registers data for each error type
|
||||
* @name: Name of the error
|
||||
* @synd_reg: Syndrome register address
|
||||
* @count_status_reg: Status register address to read the error count
|
||||
* @ways_status_reg: Status register address to read the error ways
|
||||
* @reg_cnt: Number of registers
|
||||
* @count_mask: Mask value to get the error count
|
||||
* @ways_mask: Mask value to get the error ways
|
||||
* @count_shift: Shift value to get the error count
|
||||
* @ways_shift: Shift value to get the error ways
|
||||
*/
|
||||
struct llcc_slice_config {
|
||||
u32 usecase_id;
|
||||
u32 slice_id;
|
||||
u32 max_cap;
|
||||
u32 priority;
|
||||
bool fixed_size;
|
||||
u32 bonus_ways;
|
||||
u32 res_ways;
|
||||
u32 cache_mode;
|
||||
u32 probe_target_ways;
|
||||
bool dis_cap_alloc;
|
||||
bool retain_on_pc;
|
||||
bool activate_on_init;
|
||||
struct llcc_edac_reg_data {
|
||||
char *name;
|
||||
u64 synd_reg;
|
||||
u64 count_status_reg;
|
||||
u64 ways_status_reg;
|
||||
u32 reg_cnt;
|
||||
u32 count_mask;
|
||||
u32 ways_mask;
|
||||
u8 count_shift;
|
||||
u8 ways_shift;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -93,30 +87,6 @@ struct llcc_drv_data {
|
|||
int ecc_irq;
|
||||
};
|
||||
|
||||
/**
|
||||
* llcc_edac_reg_data - llcc edac registers data for each error type
|
||||
* @name: Name of the error
|
||||
* @synd_reg: Syndrome register address
|
||||
* @count_status_reg: Status register address to read the error count
|
||||
* @ways_status_reg: Status register address to read the error ways
|
||||
* @reg_cnt: Number of registers
|
||||
* @count_mask: Mask value to get the error count
|
||||
* @ways_mask: Mask value to get the error ways
|
||||
* @count_shift: Shift value to get the error count
|
||||
* @ways_shift: Shift value to get the error ways
|
||||
*/
|
||||
struct llcc_edac_reg_data {
|
||||
char *name;
|
||||
u64 synd_reg;
|
||||
u64 count_status_reg;
|
||||
u64 ways_status_reg;
|
||||
u32 reg_cnt;
|
||||
u32 count_mask;
|
||||
u32 ways_mask;
|
||||
u8 count_shift;
|
||||
u8 ways_shift;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_QCOM_LLCC)
|
||||
/**
|
||||
* llcc_slice_getd - get llcc slice descriptor
|
||||
|
|
@ -154,20 +124,6 @@ int llcc_slice_activate(struct llcc_slice_desc *desc);
|
|||
*/
|
||||
int llcc_slice_deactivate(struct llcc_slice_desc *desc);
|
||||
|
||||
/**
|
||||
* qcom_llcc_probe - program the sct table
|
||||
* @pdev: platform device pointer
|
||||
* @table: soc sct table
|
||||
* @sz: Size of the config table
|
||||
*/
|
||||
int qcom_llcc_probe(struct platform_device *pdev,
|
||||
const struct llcc_slice_config *table, u32 sz);
|
||||
|
||||
/**
|
||||
* qcom_llcc_remove - remove the sct table
|
||||
* @pdev: Platform device pointer
|
||||
*/
|
||||
int qcom_llcc_remove(struct platform_device *pdev);
|
||||
#else
|
||||
static inline struct llcc_slice_desc *llcc_slice_getd(u32 uid)
|
||||
{
|
||||
|
|
@ -197,16 +153,6 @@ static inline int llcc_slice_deactivate(struct llcc_slice_desc *desc)
|
|||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
static inline int qcom_llcc_probe(struct platform_device *pdev,
|
||||
const struct llcc_slice_config *table, u32 sz)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int qcom_llcc_remove(struct platform_device *pdev)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue