Unverified Commit fd9739f1 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!7927 [OLK-6.6] fix intel-lkp compilation issues for DMA patch

Merge Pull Request from: @leoliu-oc 
 
1. x86/cpu/zhaoxin: kx40000: fix bitwise warning issue
2. x86/cpu/zhaoxin: Adjust the configuration options for zhaoxin-kx40000.c
3. x86/cpu/zhaoxin: Encapsulate access to global variables within functions
4. x86/cpu/zhaoxin: Encapsulate access to kh40000_dma_direct_ops within function
5. x86/cpu/zhaoxin: kx-40000: Apply the static modifier to zhaoxin_patch_code

### Issue
https://gitee.com/openeuler/kernel/issues/I9RPB1

### Test
Pass. The compilation test and functional test passed. 
 
Link:https://gitee.com/openeuler/kernel/pulls/7927

 

Reviewed-by: default avatarZhang Peng <zhangpeng362@huawei.com>
Signed-off-by: default avatarZhang Peng <zhangpeng362@huawei.com>
parents 6030edc2 40c1a0ae
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -9,11 +9,11 @@ static inline const struct dma_map_ops *get_arch_dma_ops(void)
	return dma_ops;
}

#ifdef CONFIG_PCI
#if IS_BUILTIN(CONFIG_INTEL_IOMMU) && IS_BUILTIN(CONFIG_X86_64)

extern bool is_zhaoxin_kh40000;
extern const struct dma_map_ops kh40000_dma_direct_ops;
extern void kh40000_set_iommu_dma_ops(struct device *dev);
bool is_zhaoxin_kh40000(void);
void kh40000_set_iommu_dma_ops(struct device *dev);
const struct dma_map_ops *kh40000_get_direct_dma_ops(void);

#endif

+1 −1
Original line number Diff line number Diff line
@@ -160,5 +160,5 @@ ifeq ($(CONFIG_X86_64),y)

	obj-$(CONFIG_MMCONF_FAM10H)	+= mmconf-fam10h_64.o
	obj-y				+= vsmp_64.o
	obj-$(CONFIG_PCI)		+= zhaoxin_kh40000.o
	obj-$(CONFIG_INTEL_IOMMU)	+= zhaoxin_kh40000.o
endif
+18 −3
Original line number Diff line number Diff line
@@ -717,14 +717,29 @@ static void __init apple_airport_reset(int bus, int slot, int func)
	early_iounmap(mmio, BCM4331_MMIO_SIZE);
}

static void quirk_zhaoxin_dma_patch(int num, int slot, int func)
bool __ro_after_init zhaoxin_kh40000;

bool is_zhaoxin_kh40000(void)
{
	return zhaoxin_kh40000;
}

__weak const struct dma_map_ops *kh40000_get_direct_dma_ops(void)
{
	return dma_ops;
}

static void __init quirk_zhaoxin_dma_patch(int num, int slot, int func)
{
	u8 revision;

	if (is_zhaoxin_kh40000())
		return;

	revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID);
	if (revision == 0x10) {
		is_zhaoxin_kh40000 = true;
		dma_ops = &kh40000_dma_direct_ops;
		zhaoxin_kh40000 = true;
		dma_ops = kh40000_get_direct_dma_ops();
		pr_info("zhaoxin direct dma patch enabled\n");
	}
}
+8 −5
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@

#include "../../../kernel/dma/direct.h"

bool is_zhaoxin_kh40000;

/***
 * usage:
 *  set "zhaoxin_patch_bitmask=<value>" in cmdline
@@ -32,7 +30,7 @@ enum {

#define ZHAOXIN_PATCH_CODE_DEFAULT	ZHAOXIN_P2CW_NODE_CHECK

unsigned long zhaoxin_patch_code = ZHAOXIN_PATCH_CODE_DEFAULT;
static unsigned long zhaoxin_patch_code = ZHAOXIN_PATCH_CODE_DEFAULT;

static int __init zhaoxin_patch_code_setup(char *str)
{
@@ -44,7 +42,7 @@ static int __init zhaoxin_patch_code_setup(char *str)
		return err;
	}

	if (ZHAOXIN_P2CW_NODE_CHECK | zhaoxin_patch_code)
	if (ZHAOXIN_P2CW_NODE_CHECK & zhaoxin_patch_code)
		pr_info("zhaoxin dma patch node check is enabled\n");

	return 0;
@@ -177,6 +175,11 @@ const struct dma_map_ops kh40000_dma_direct_ops = {
	.map_resource		= dma_direct_map_resource,
};

const struct dma_map_ops *kh40000_get_direct_dma_ops(void)
{
	return &kh40000_dma_direct_ops;
}

/* zhaoxin kh-40000 iommu dma ops */
static const struct dma_map_ops *iommu_dma_ops;

@@ -319,7 +322,7 @@ static size_t kh40000_iommu_dma_opt_mapping_size(void)
	return iommu_dma_ops->opt_mapping_size();
}

const struct dma_map_ops kh40000_dma_iommu_ops = {
static const struct dma_map_ops kh40000_dma_iommu_ops = {
	.flags			= DMA_F_PCI_P2PDMA_SUPPORTED,
	.alloc			= kh40000_iommu_dma_alloc,
	.free			= kh40000_iommu_dma_free,
+1 −1
Original line number Diff line number Diff line
@@ -4419,7 +4419,7 @@ static void intel_iommu_probe_finalize(struct device *dev)
	set_dma_ops(dev, NULL);
	iommu_setup_dma_ops(dev, 0, U64_MAX);
#ifdef CONFIG_X86_64
	if (is_zhaoxin_kh40000)
	if (is_zhaoxin_kh40000())
		kh40000_set_iommu_dma_ops(dev);
#endif
}
Loading