mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 10:00:03 -04:00
gpu: host1x: Add Tegra264 support
Add device data and chip headers for Tegra264. Signed-off-by: Santosh BS <santoshb@nvidia.com> Co-developed-by: Mikko Perttunen <mperttunen@nvidia.com> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com> Link: https://patch.msgid.link/20260622-t264-host1x-v2-4-ff7364d9ff7b@nvidia.com
This commit is contained in:
committed by
Thierry Reding
parent
5db6378b32
commit
60bca008dd
@@ -17,7 +17,8 @@ host1x-y = \
|
||||
hw/host1x05.o \
|
||||
hw/host1x06.o \
|
||||
hw/host1x07.o \
|
||||
hw/host1x08.o
|
||||
hw/host1x08.o \
|
||||
hw/host1x10.o
|
||||
|
||||
host1x-$(CONFIG_IOMMU_API) += \
|
||||
context.o
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "hw/host1x06.h"
|
||||
#include "hw/host1x07.h"
|
||||
#include "hw/host1x08.h"
|
||||
#include "hw/host1x10.h"
|
||||
|
||||
void host1x_common_writel(struct host1x *host1x, u32 v, u32 r)
|
||||
{
|
||||
@@ -287,7 +288,47 @@ static const struct host1x_info host1x08_info = {
|
||||
.reserve_vblank_syncpts = false,
|
||||
};
|
||||
|
||||
static const struct host1x_sid_entry tegra264_sid_table[] = {
|
||||
{ /* SE1 MMIO */ .base = 0x1650, .offset = 0x90, .limit = 0x90 },
|
||||
{ /* SE2 MMIO */ .base = 0x1658, .offset = 0x90, .limit = 0x90 },
|
||||
{ /* SE4 MMIO */ .base = 0x1660, .offset = 0x90, .limit = 0x90 },
|
||||
{ /* SE1 ch */ .base = 0x1738, .offset = 0x90, .limit = 0x90 },
|
||||
{ /* SE2 ch */ .base = 0x1740, .offset = 0x90, .limit = 0x90 },
|
||||
{ /* SE4 ch */ .base = 0x1748, .offset = 0x90, .limit = 0x90 },
|
||||
{ /* VIC ch */ .base = 0x1790, .offset = 0x30, .limit = 0x30 },
|
||||
{ /* VIC MMIO */ .base = 0x1688, .offset = 0x34, .limit = 0x34 },
|
||||
{ /* TSEC MMIO */ .base = 0x1690, .offset = 0x30, .limit = 0x34 },
|
||||
{ /* VI MMIO */ .base = 0x1698, .offset = 0x800, .limit = 0x800 },
|
||||
{ /* VI_THI MMIO */ .base = 0x16a0, .offset = 0x30, .limit = 0x34 },
|
||||
{ /* ISP MMIO */ .base = 0x1680, .offset = 0x800, .limit = 0x800 },
|
||||
{ /* ISP_THI MMIO */ .base = 0x16a8, .offset = 0x30, .limit = 0x34 },
|
||||
{ /* VI2 MMIO */ .base = 0x16b8, .offset = 0x800, .limit = 0x800 },
|
||||
{ /* VI2_THI MMIO */ .base = 0x16c0, .offset = 0x30, .limit = 0x34 },
|
||||
{ /* ISP1 MMIO */ .base = 0x16c8, .offset = 0x800, .limit = 0x800 },
|
||||
{ /* ISP1_THI MMIO */ .base = 0x16d0, .offset = 0x30, .limit = 0x34 },
|
||||
};
|
||||
|
||||
static const struct host1x_info host1x10_info = {
|
||||
.nb_channels = 63,
|
||||
.nb_pts = 1024,
|
||||
.nb_mlocks = 24,
|
||||
.nb_bases = 0,
|
||||
.init = host1x10_init,
|
||||
.sync_offset = 0x0,
|
||||
.dma_mask = DMA_BIT_MASK(40),
|
||||
.has_wide_gather = true,
|
||||
.has_hypervisor = true,
|
||||
.has_common = true,
|
||||
.num_sid_entries = ARRAY_SIZE(tegra264_sid_table),
|
||||
.sid_table = tegra264_sid_table,
|
||||
.streamid_vm_table = { 0x1004, 128 },
|
||||
.classid_vm_table = { 0x1404, 25 },
|
||||
.mmio_vm_table = { 0x1504, 25 },
|
||||
.reserve_vblank_syncpts = false,
|
||||
};
|
||||
|
||||
static const struct of_device_id host1x_of_match[] = {
|
||||
{ .compatible = "nvidia,tegra264-host1x", .data = &host1x10_info, },
|
||||
{ .compatible = "nvidia,tegra234-host1x", .data = &host1x08_info, },
|
||||
{ .compatible = "nvidia,tegra194-host1x", .data = &host1x07_info, },
|
||||
{ .compatible = "nvidia,tegra186-host1x", .data = &host1x06_info, },
|
||||
|
||||
@@ -246,23 +246,24 @@ static void timeout_release_mlock(struct host1x_cdma *cdma)
|
||||
* so it turns out that if we don't /actually/ need MLOCKs, we can just
|
||||
* ignore them.
|
||||
*
|
||||
* As such, for now just implement this on Tegra234 where things are
|
||||
* stricter but also easy to implement.
|
||||
* As such, for now just implement this on Tegra234 and above where things
|
||||
* are stricter but also easy to implement.
|
||||
*/
|
||||
struct host1x_channel *ch = cdma_to_channel(cdma);
|
||||
struct host1x *host1x = cdma_to_host1x(cdma);
|
||||
u32 offset;
|
||||
|
||||
switch (ch->client->class) {
|
||||
case HOST1X_CLASS_VIC:
|
||||
offset = HOST1X_COMMON_VIC_MLOCK;
|
||||
break;
|
||||
#if HOST1X_HW == 8
|
||||
case HOST1X_CLASS_NVJPG1:
|
||||
offset = HOST1X_COMMON_NVJPG1_MLOCK;
|
||||
break;
|
||||
case HOST1X_CLASS_NVENC:
|
||||
offset = HOST1X_COMMON_NVENC_MLOCK;
|
||||
break;
|
||||
case HOST1X_CLASS_VIC:
|
||||
offset = HOST1X_COMMON_VIC_MLOCK;
|
||||
break;
|
||||
case HOST1X_CLASS_NVJPG:
|
||||
offset = HOST1X_COMMON_NVJPG_MLOCK;
|
||||
break;
|
||||
@@ -272,6 +273,7 @@ static void timeout_release_mlock(struct host1x_cdma *cdma)
|
||||
case HOST1X_CLASS_OFA:
|
||||
offset = HOST1X_COMMON_OFA_MLOCK;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
WARN(1, "%s was not updated for class %u", __func__, ch->client->class);
|
||||
return;
|
||||
|
||||
33
drivers/gpu/host1x/hw/host1x10.c
Normal file
33
drivers/gpu/host1x/hw/host1x10.c
Normal file
@@ -0,0 +1,33 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Host1x init for Tegra264 SoCs
|
||||
*
|
||||
* Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
/* include hw specification */
|
||||
#include "host1x10.h"
|
||||
#include "host1x10_hardware.h"
|
||||
|
||||
/* include code */
|
||||
#define HOST1X_HW 10
|
||||
|
||||
#include "cdma_hw.c"
|
||||
#include "channel_hw.c"
|
||||
#include "debug_hw.c"
|
||||
#include "intr_hw.c"
|
||||
#include "syncpt_hw.c"
|
||||
|
||||
#include "../dev.h"
|
||||
|
||||
int host1x10_init(struct host1x *host)
|
||||
{
|
||||
host->channel_op = &host1x_channel_ops;
|
||||
host->cdma_op = &host1x_cdma_ops;
|
||||
host->cdma_pb_op = &host1x_pushbuffer_ops;
|
||||
host->syncpt_op = &host1x_syncpt_ops;
|
||||
host->intr_op = &host1x_intr_ops;
|
||||
host->debug_op = &host1x_debug_ops;
|
||||
|
||||
return 0;
|
||||
}
|
||||
15
drivers/gpu/host1x/hw/host1x10.h
Normal file
15
drivers/gpu/host1x/hw/host1x10.h
Normal file
@@ -0,0 +1,15 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Host1x init for Tegra264 SoCs
|
||||
*
|
||||
* Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef HOST1X_HOST1X10_H
|
||||
#define HOST1X_HOST1X10_H
|
||||
|
||||
struct host1x;
|
||||
|
||||
int host1x10_init(struct host1x *host);
|
||||
|
||||
#endif
|
||||
21
drivers/gpu/host1x/hw/host1x10_hardware.h
Normal file
21
drivers/gpu/host1x/hw/host1x10_hardware.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Tegra host1x Register Offsets for Tegra264
|
||||
*
|
||||
* Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __HOST1X_HOST1X10_HARDWARE_H
|
||||
#define __HOST1X_HOST1X10_HARDWARE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include "hw_host1x10_uclass.h"
|
||||
#include "hw_host1x10_vm.h"
|
||||
#include "hw_host1x10_hypervisor.h"
|
||||
#include "hw_host1x10_common.h"
|
||||
|
||||
#include "opcodes.h"
|
||||
|
||||
#endif
|
||||
6
drivers/gpu/host1x/hw/hw_host1x10_common.h
Normal file
6
drivers/gpu/host1x/hw/hw_host1x10_common.h
Normal file
@@ -0,0 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
#define HOST1X_COMMON_VIC_MLOCK 0x4060
|
||||
10
drivers/gpu/host1x/hw/hw_host1x10_hypervisor.h
Normal file
10
drivers/gpu/host1x/hw/hw_host1x10_hypervisor.h
Normal file
@@ -0,0 +1,10 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
#define HOST1X_HV_SYNCPT_PROT_EN 0x172c
|
||||
#define HOST1X_HV_SYNCPT_PROT_EN_CH_EN BIT(1)
|
||||
#define HOST1X_HV_CH_MLOCK_EN(x) (0x1708 + (x * 4))
|
||||
#define HOST1X_HV_CH_KERNEL_FILTER_GBUFFER(x) (0x1718 + (x * 4))
|
||||
#define HOST1X_HV_SYNCPT_VM(x) (0x0 + 4 * (x))
|
||||
181
drivers/gpu/host1x/hw/hw_host1x10_uclass.h
Normal file
181
drivers/gpu/host1x/hw/hw_host1x10_uclass.h
Normal file
@@ -0,0 +1,181 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Function naming determines intended use:
|
||||
*
|
||||
* <x>_r(void) : Returns the offset for register <x>.
|
||||
*
|
||||
* <x>_w(void) : Returns the word offset for word (4 byte) element <x>.
|
||||
*
|
||||
* <x>_<y>_s(void) : Returns size of field <y> of register <x> in bits.
|
||||
*
|
||||
* <x>_<y>_f(u32 v) : Returns a value based on 'v' which has been shifted
|
||||
* and masked to place it at field <y> of register <x>. This value
|
||||
* can be |'d with others to produce a full register value for
|
||||
* register <x>.
|
||||
*
|
||||
* <x>_<y>_m(void) : Returns a mask for field <y> of register <x>. This
|
||||
* value can be ~'d and then &'d to clear the value of field <y> for
|
||||
* register <x>.
|
||||
*
|
||||
* <x>_<y>_<z>_f(void) : Returns the constant value <z> after being shifted
|
||||
* to place it at field <y> of register <x>. This value can be |'d
|
||||
* with others to produce a full register value for <x>.
|
||||
*
|
||||
* <x>_<y>_v(u32 r) : Returns the value of field <y> from a full register
|
||||
* <x> value 'r' after being shifted to place its LSB at bit 0.
|
||||
* This value is suitable for direct comparison with other unshifted
|
||||
* values appropriate for use in field <y> of register <x>.
|
||||
*
|
||||
* <x>_<y>_<z>_v(void) : Returns the constant value for <z> defined for
|
||||
* field <y> of register <x>. This value is suitable for direct
|
||||
* comparison with unshifted values appropriate for use in field <y>
|
||||
* of register <x>.
|
||||
*/
|
||||
|
||||
#ifndef HOST1X_HW_HOST1X10_UCLASS_H
|
||||
#define HOST1X_HW_HOST1X10_UCLASS_H
|
||||
|
||||
static inline u32 host1x_uclass_incr_syncpt_r(void)
|
||||
{
|
||||
return 0x0;
|
||||
}
|
||||
#define HOST1X_UCLASS_INCR_SYNCPT \
|
||||
host1x_uclass_incr_syncpt_r()
|
||||
static inline u32 host1x_uclass_incr_syncpt_cond_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 10;
|
||||
}
|
||||
#define HOST1X_UCLASS_INCR_SYNCPT_COND_F(v) \
|
||||
host1x_uclass_incr_syncpt_cond_f(v)
|
||||
static inline u32 host1x_uclass_incr_syncpt_indx_f(u32 v)
|
||||
{
|
||||
return (v & 0x3ff) << 0;
|
||||
}
|
||||
#define HOST1X_UCLASS_INCR_SYNCPT_INDX_F(v) \
|
||||
host1x_uclass_incr_syncpt_indx_f(v)
|
||||
static inline u32 host1x_uclass_wait_syncpt_r(void)
|
||||
{
|
||||
return 0x8;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT \
|
||||
host1x_uclass_wait_syncpt_r()
|
||||
static inline u32 host1x_uclass_wait_syncpt_indx_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 24;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_INDX_F(v) \
|
||||
host1x_uclass_wait_syncpt_indx_f(v)
|
||||
static inline u32 host1x_uclass_wait_syncpt_thresh_f(u32 v)
|
||||
{
|
||||
return (v & 0xffffff) << 0;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_THRESH_F(v) \
|
||||
host1x_uclass_wait_syncpt_thresh_f(v)
|
||||
static inline u32 host1x_uclass_wait_syncpt_base_r(void)
|
||||
{
|
||||
return 0x9;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_BASE \
|
||||
host1x_uclass_wait_syncpt_base_r()
|
||||
static inline u32 host1x_uclass_wait_syncpt_base_indx_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 24;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_BASE_INDX_F(v) \
|
||||
host1x_uclass_wait_syncpt_base_indx_f(v)
|
||||
static inline u32 host1x_uclass_wait_syncpt_base_base_indx_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 16;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_BASE_BASE_INDX_F(v) \
|
||||
host1x_uclass_wait_syncpt_base_base_indx_f(v)
|
||||
static inline u32 host1x_uclass_wait_syncpt_base_offset_f(u32 v)
|
||||
{
|
||||
return (v & 0xffff) << 0;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_BASE_OFFSET_F(v) \
|
||||
host1x_uclass_wait_syncpt_base_offset_f(v)
|
||||
static inline u32 host1x_uclass_load_syncpt_base_r(void)
|
||||
{
|
||||
return 0xb;
|
||||
}
|
||||
#define HOST1X_UCLASS_LOAD_SYNCPT_BASE \
|
||||
host1x_uclass_load_syncpt_base_r()
|
||||
static inline u32 host1x_uclass_load_syncpt_base_base_indx_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 24;
|
||||
}
|
||||
#define HOST1X_UCLASS_LOAD_SYNCPT_BASE_BASE_INDX_F(v) \
|
||||
host1x_uclass_load_syncpt_base_base_indx_f(v)
|
||||
static inline u32 host1x_uclass_load_syncpt_base_value_f(u32 v)
|
||||
{
|
||||
return (v & 0xffffff) << 0;
|
||||
}
|
||||
#define HOST1X_UCLASS_LOAD_SYNCPT_BASE_VALUE_F(v) \
|
||||
host1x_uclass_load_syncpt_base_value_f(v)
|
||||
static inline u32 host1x_uclass_incr_syncpt_base_base_indx_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 24;
|
||||
}
|
||||
#define HOST1X_UCLASS_INCR_SYNCPT_BASE_BASE_INDX_F(v) \
|
||||
host1x_uclass_incr_syncpt_base_base_indx_f(v)
|
||||
static inline u32 host1x_uclass_incr_syncpt_base_offset_f(u32 v)
|
||||
{
|
||||
return (v & 0xffffff) << 0;
|
||||
}
|
||||
#define HOST1X_UCLASS_INCR_SYNCPT_BASE_OFFSET_F(v) \
|
||||
host1x_uclass_incr_syncpt_base_offset_f(v)
|
||||
static inline u32 host1x_uclass_indoff_r(void)
|
||||
{
|
||||
return 0x2d;
|
||||
}
|
||||
#define HOST1X_UCLASS_INDOFF \
|
||||
host1x_uclass_indoff_r()
|
||||
static inline u32 host1x_uclass_indoff_indbe_f(u32 v)
|
||||
{
|
||||
return (v & 0xf) << 28;
|
||||
}
|
||||
#define HOST1X_UCLASS_INDOFF_INDBE_F(v) \
|
||||
host1x_uclass_indoff_indbe_f(v)
|
||||
static inline u32 host1x_uclass_indoff_autoinc_f(u32 v)
|
||||
{
|
||||
return (v & 0x1) << 27;
|
||||
}
|
||||
#define HOST1X_UCLASS_INDOFF_AUTOINC_F(v) \
|
||||
host1x_uclass_indoff_autoinc_f(v)
|
||||
static inline u32 host1x_uclass_indoff_indmodid_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 18;
|
||||
}
|
||||
#define HOST1X_UCLASS_INDOFF_INDMODID_F(v) \
|
||||
host1x_uclass_indoff_indmodid_f(v)
|
||||
static inline u32 host1x_uclass_indoff_indroffset_f(u32 v)
|
||||
{
|
||||
return (v & 0xffff) << 2;
|
||||
}
|
||||
#define HOST1X_UCLASS_INDOFF_INDROFFSET_F(v) \
|
||||
host1x_uclass_indoff_indroffset_f(v)
|
||||
static inline u32 host1x_uclass_indoff_rwn_read_v(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#define HOST1X_UCLASS_INDOFF_INDROFFSET_F(v) \
|
||||
host1x_uclass_indoff_indroffset_f(v)
|
||||
static inline u32 host1x_uclass_load_syncpt_payload_32_r(void)
|
||||
{
|
||||
return 0x4e;
|
||||
}
|
||||
#define HOST1X_UCLASS_LOAD_SYNCPT_PAYLOAD_32 \
|
||||
host1x_uclass_load_syncpt_payload_32_r()
|
||||
static inline u32 host1x_uclass_wait_syncpt_32_r(void)
|
||||
{
|
||||
return 0x50;
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_32 \
|
||||
host1x_uclass_wait_syncpt_32_r()
|
||||
|
||||
#endif
|
||||
36
drivers/gpu/host1x/hw/hw_host1x10_vm.h
Normal file
36
drivers/gpu/host1x/hw/hw_host1x10_vm.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
*/
|
||||
|
||||
#define HOST1X_CHANNEL_DMASTART 0x0000
|
||||
#define HOST1X_CHANNEL_DMASTART_HI 0x0004
|
||||
#define HOST1X_CHANNEL_DMAPUT 0x0008
|
||||
#define HOST1X_CHANNEL_DMAPUT_HI 0x000c
|
||||
#define HOST1X_CHANNEL_DMAGET 0x0010
|
||||
#define HOST1X_CHANNEL_DMAGET_HI 0x0014
|
||||
#define HOST1X_CHANNEL_DMAEND 0x0018
|
||||
#define HOST1X_CHANNEL_DMAEND_HI 0x001c
|
||||
#define HOST1X_CHANNEL_DMACTRL 0x0020
|
||||
#define HOST1X_CHANNEL_DMACTRL_DMASTOP BIT(0)
|
||||
#define HOST1X_CHANNEL_DMACTRL_DMAGETRST BIT(1)
|
||||
#define HOST1X_CHANNEL_DMACTRL_DMAINITGET BIT(2)
|
||||
#define HOST1X_CHANNEL_CMDFIFO_STAT 0x0024
|
||||
#define HOST1X_CHANNEL_CMDFIFO_STAT_EMPTY BIT(13)
|
||||
#define HOST1X_CHANNEL_CMDFIFO_RDATA 0x0028
|
||||
#define HOST1X_CHANNEL_CMDP_OFFSET 0x0030
|
||||
#define HOST1X_CHANNEL_CMDP_CLASS 0x0034
|
||||
#define HOST1X_CHANNEL_CHANNELSTAT 0x0038
|
||||
#define HOST1X_CHANNEL_CMDPROC_STOP 0x0048
|
||||
#define HOST1X_CHANNEL_TEARDOWN 0x004c
|
||||
#define HOST1X_CHANNEL_SMMU_STREAMID 0x0084
|
||||
|
||||
#define HOST1X_SYNC_SYNCPT_CPU_INCR(x) (0x6400 + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT_THRESH_CPU0_INT_STATUS(x) (0x6600 + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT_INTR_DEST(x) (0x6684 + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT_THRESH_INT_ENABLE_CPU0(x) (0x770c + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT_THRESH_INT_DISABLE(x) (0x7790 + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT(x) (0x8080 + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT_INT_THRESH(x) (0xa088 + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT_CH_APP(x) (0xb090 + 4 * (x))
|
||||
#define HOST1X_SYNC_SYNCPT_CH_APP_CH(v) (((v) & 0x3f) << 8)
|
||||
Reference in New Issue
Block a user