linux5.4: remove, EOL
This commit is contained in:
@@ -1 +0,0 @@
|
||||
linux5.4
|
||||
@@ -1 +0,0 @@
|
||||
linux5.4
|
||||
@@ -1,282 +0,0 @@
|
||||
###
|
||||
# This makefile is used to generate the kernel documentation,
|
||||
# primarily based on in-line comments in various source files.
|
||||
# See Documentation/kernel-doc-nano-HOWTO.txt for instruction in how
|
||||
# to document the SRC - and how to read it.
|
||||
# To add a new book the only step required is to add the book to the
|
||||
# list of DOCBOOKS.
|
||||
|
||||
DOCBOOKS := z8530book.xml \
|
||||
kernel-hacking.xml kernel-locking.xml \
|
||||
networking.xml \
|
||||
filesystems.xml lsm.xml kgdb.xml \
|
||||
libata.xml mtdnand.xml librs.xml rapidio.xml \
|
||||
s390-drivers.xml scsi.xml \
|
||||
sh.xml w1.xml
|
||||
|
||||
ifeq ($(DOCBOOKS),)
|
||||
|
||||
# Skip DocBook build if the user explicitly requested no DOCBOOKS.
|
||||
.DEFAULT:
|
||||
@echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)."
|
||||
else
|
||||
ifneq ($(SPHINXDIRS),)
|
||||
|
||||
# Skip DocBook build if the user explicitly requested a sphinx dir
|
||||
.DEFAULT:
|
||||
@echo " SKIP DocBook $@ target (SPHINXDIRS specified)."
|
||||
else
|
||||
|
||||
|
||||
###
|
||||
# The build process is as follows (targets):
|
||||
# (xmldocs) [by docproc]
|
||||
# file.tmpl --> file.xml +--> file.ps (psdocs) [by db2ps or xmlto]
|
||||
# +--> file.pdf (pdfdocs) [by db2pdf or xmlto]
|
||||
# +--> DIR=file (htmldocs) [by xmlto]
|
||||
# +--> man/ (mandocs) [by xmlto]
|
||||
|
||||
|
||||
# for PDF and PS output you can choose between xmlto and docbook-utils tools
|
||||
PDF_METHOD = $(prefer-db2x)
|
||||
PS_METHOD = $(prefer-db2x)
|
||||
|
||||
|
||||
targets += $(DOCBOOKS)
|
||||
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
||||
xmldocs: $(BOOKS)
|
||||
sgmldocs: xmldocs
|
||||
|
||||
PS := $(patsubst %.xml, %.ps, $(BOOKS))
|
||||
psdocs: $(PS)
|
||||
|
||||
PDF := $(patsubst %.xml, %.pdf, $(BOOKS))
|
||||
pdfdocs: $(PDF)
|
||||
|
||||
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
|
||||
htmldocs: $(HTML)
|
||||
$(call cmd,build_main_index)
|
||||
|
||||
MAN := $(patsubst %.xml, %.9, $(BOOKS))
|
||||
mandocs: $(MAN)
|
||||
find $(obj)/man -name '*.9' | xargs gzip -nf
|
||||
|
||||
# Default location for installed man pages
|
||||
export INSTALL_MAN_PATH = $(objtree)/usr
|
||||
|
||||
installmandocs: mandocs
|
||||
mkdir -p $(INSTALL_MAN_PATH)/man/man9/
|
||||
find $(obj)/man -name '*.9.gz' -printf '%h %f\n' | \
|
||||
sort -k 2 -k 1 | uniq -f 1 | sed -e 's: :/:' | \
|
||||
xargs install -m 644 -t $(INSTALL_MAN_PATH)/man/man9/
|
||||
|
||||
# no-op for the DocBook toolchain
|
||||
epubdocs:
|
||||
latexdocs:
|
||||
linkcheckdocs:
|
||||
|
||||
###
|
||||
#External programs used
|
||||
KERNELDOCXMLREF = $(srctree)/scripts/kernel-doc-xml-ref
|
||||
KERNELDOC = $(srctree)/scripts/kernel-doc
|
||||
DOCPROC = $(objtree)/scripts/docproc
|
||||
CHECK_LC_CTYPE = $(objtree)/scripts/check-lc_ctype
|
||||
|
||||
# Use a fixed encoding - UTF-8 if the C library has support built-in
|
||||
# or ASCII if not
|
||||
LC_CTYPE := $(call try-run, LC_CTYPE=C.UTF-8 $(CHECK_LC_CTYPE),C.UTF-8,C)
|
||||
export LC_CTYPE
|
||||
|
||||
XMLTOFLAGS = -m $(srctree)/$(src)/stylesheet.xsl
|
||||
XMLTOFLAGS += --skip-validation
|
||||
|
||||
###
|
||||
# DOCPROC is used for two purposes:
|
||||
# 1) To generate a dependency list for a .tmpl file
|
||||
# 2) To preprocess a .tmpl file and call kernel-doc with
|
||||
# appropriate parameters.
|
||||
# The following rules are used to generate the .xml documentation
|
||||
# required to generate the final targets. (ps, pdf, html).
|
||||
quiet_cmd_docproc = DOCPROC $@
|
||||
cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@
|
||||
define rule_docproc
|
||||
set -e; \
|
||||
$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
|
||||
$(cmd_$(1)); \
|
||||
( \
|
||||
echo 'cmd_$@ := $(cmd_$(1))'; \
|
||||
echo $@: `SRCTREE=$(srctree) $(DOCPROC) depend $<`; \
|
||||
) > $(dir $@).$(notdir $@).cmd
|
||||
endef
|
||||
|
||||
%.xml: %.tmpl $(KERNELDOC) $(DOCPROC) $(KERNELDOCXMLREF) FORCE
|
||||
$(call if_changed_rule,docproc)
|
||||
|
||||
# Tell kbuild to always build the programs
|
||||
always := $(hostprogs-y)
|
||||
|
||||
notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \
|
||||
exit 1
|
||||
db2xtemplate = db2TYPE -o $(dir $@) $<
|
||||
xmltotemplate = xmlto TYPE $(XMLTOFLAGS) -o $(dir $@) $<
|
||||
|
||||
# determine which methods are available
|
||||
ifeq ($(shell which db2ps >/dev/null 2>&1 && echo found),found)
|
||||
use-db2x = db2x
|
||||
prefer-db2x = db2x
|
||||
else
|
||||
use-db2x = notfound
|
||||
prefer-db2x = $(use-xmlto)
|
||||
endif
|
||||
ifeq ($(shell which xmlto >/dev/null 2>&1 && echo found),found)
|
||||
use-xmlto = xmlto
|
||||
prefer-xmlto = xmlto
|
||||
else
|
||||
use-xmlto = notfound
|
||||
prefer-xmlto = $(use-db2x)
|
||||
endif
|
||||
|
||||
# the commands, generated from the chosen template
|
||||
quiet_cmd_db2ps = PS $@
|
||||
cmd_db2ps = $(subst TYPE,ps, $($(PS_METHOD)template))
|
||||
%.ps : %.xml
|
||||
$(call cmd,db2ps)
|
||||
|
||||
quiet_cmd_db2pdf = PDF $@
|
||||
cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template))
|
||||
%.pdf : %.xml
|
||||
$(call cmd,db2pdf)
|
||||
|
||||
|
||||
index = index.html
|
||||
main_idx = $(obj)/$(index)
|
||||
quiet_cmd_build_main_index = HTML $(main_idx)
|
||||
cmd_build_main_index = rm -rf $(main_idx); \
|
||||
echo '<h1>Linux Kernel HTML Documentation</h1>' >> $(main_idx) && \
|
||||
echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \
|
||||
cat $(HTML) >> $(main_idx)
|
||||
|
||||
quiet_cmd_db2html = HTML $@
|
||||
cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
|
||||
echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \
|
||||
$(patsubst %.html,%,$(notdir $@))</a><p>' > $@
|
||||
|
||||
###
|
||||
# Rules to create an aux XML and .db, and use them to re-process the DocBook XML
|
||||
# to fill internal hyperlinks
|
||||
gen_aux_xml = :
|
||||
quiet_gen_aux_xml = echo ' XMLREF $@'
|
||||
silent_gen_aux_xml = :
|
||||
%.aux.xml: %.xml
|
||||
@$($(quiet)gen_aux_xml)
|
||||
@rm -rf $@
|
||||
@(cat $< | egrep "^<refentry id" | egrep -o "\".*\"" | cut -f 2 -d \" > $<.db)
|
||||
@$(KERNELDOCXMLREF) -db $<.db $< > $@
|
||||
.PRECIOUS: %.aux.xml
|
||||
|
||||
%.html: %.aux.xml
|
||||
@(which xmlto > /dev/null 2>&1) || \
|
||||
(echo "*** You need to install xmlto ***"; \
|
||||
exit 1)
|
||||
@rm -rf $@ $(patsubst %.html,%,$@)
|
||||
$(call cmd,db2html)
|
||||
@if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \
|
||||
cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi
|
||||
|
||||
quiet_cmd_db2man = MAN $@
|
||||
cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man/$(*F) $< ; fi
|
||||
%.9 : %.xml
|
||||
@(which xmlto > /dev/null 2>&1) || \
|
||||
(echo "*** You need to install xmlto ***"; \
|
||||
exit 1)
|
||||
$(Q)mkdir -p $(obj)/man/$(*F)
|
||||
$(call cmd,db2man)
|
||||
@touch $@
|
||||
|
||||
###
|
||||
# Rules to generate postscripts and PNG images from .fig format files
|
||||
quiet_cmd_fig2eps = FIG2EPS $@
|
||||
cmd_fig2eps = fig2dev -Leps $< $@
|
||||
|
||||
%.eps: %.fig
|
||||
@(which fig2dev > /dev/null 2>&1) || \
|
||||
(echo "*** You need to install transfig ***"; \
|
||||
exit 1)
|
||||
$(call cmd,fig2eps)
|
||||
|
||||
quiet_cmd_fig2png = FIG2PNG $@
|
||||
cmd_fig2png = fig2dev -Lpng $< $@
|
||||
|
||||
%.png: %.fig
|
||||
@(which fig2dev > /dev/null 2>&1) || \
|
||||
(echo "*** You need to install transfig ***"; \
|
||||
exit 1)
|
||||
$(call cmd,fig2png)
|
||||
|
||||
###
|
||||
# Rule to convert a .c file to inline XML documentation
|
||||
gen_xml = :
|
||||
quiet_gen_xml = echo ' GEN $@'
|
||||
silent_gen_xml = :
|
||||
%.xml: %.c
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>"; \
|
||||
expand --tabs=8 < $< | \
|
||||
sed -e "s/&/\\&/g" \
|
||||
-e "s/</\\</g" \
|
||||
-e "s/>/\\>/g"; \
|
||||
echo "</programlisting>") > $@
|
||||
|
||||
endif # DOCBOOKS=""
|
||||
endif # SPHINDIR=...
|
||||
|
||||
###
|
||||
# Help targets as used by the top-level makefile
|
||||
dochelp:
|
||||
@echo ' Linux kernel internal documentation in different formats (DocBook):'
|
||||
@echo ' htmldocs - HTML'
|
||||
@echo ' pdfdocs - PDF'
|
||||
@echo ' psdocs - Postscript'
|
||||
@echo ' xmldocs - XML DocBook'
|
||||
@echo ' mandocs - man pages'
|
||||
@echo ' installmandocs - install man pages generated by mandocs to INSTALL_MAN_PATH'; \
|
||||
echo ' (default: $(INSTALL_MAN_PATH))'; \
|
||||
echo ''
|
||||
@echo ' cleandocs - clean all generated DocBook files'
|
||||
@echo
|
||||
@echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml'
|
||||
@echo ' valid values for DOCBOOKS are: $(DOCBOOKS)'
|
||||
@echo
|
||||
@echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook"
|
||||
@echo ' This is useful to generate only the ReST docs (Sphinx)'
|
||||
|
||||
|
||||
###
|
||||
# Temporary files left by various tools
|
||||
clean-files := $(DOCBOOKS) \
|
||||
$(patsubst %.xml, %.dvi, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.aux, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.tex, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.log, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.out, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.ps, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.pdf, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.html, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.9, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.aux.xml, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.xml.db, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.xml, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, .%.xml.cmd, $(DOCBOOKS)) \
|
||||
$(index)
|
||||
|
||||
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
||||
|
||||
cleandocs:
|
||||
$(Q)rm -f $(call objectify, $(clean-files))
|
||||
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
||||
|
||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||
# information in a variable so we can use it in if_changed and friends.
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
mod=$1
|
||||
mkdir -p usr/lib/debug/${mod%/*}
|
||||
$OBJCOPY --only-keep-debug --compress-debug-sections $mod usr/lib/debug/$mod
|
||||
$OBJCOPY --add-gnu-debuglink=${DESTDIR}/usr/lib/debug/$mod $mod
|
||||
/usr/bin/$STRIP --strip-debug $mod
|
||||
gzip -9 $mod
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,463 +0,0 @@
|
||||
From cf4f40500a4ed62efe92d14d9a84691bc0a0361f Mon Sep 17 00:00:00 2001
|
||||
From: Timothy Pearson <tpearson@raptorengineering.com>
|
||||
Date: Sat, 7 Dec 2019 16:47:13 -0600
|
||||
Subject: [PATCH 1/3] amdgpu: Prepare DCN floating point macros for generic
|
||||
arch support
|
||||
|
||||
Introduce DC_FP_START()/DC_FP_END() macros to help enable floating
|
||||
point kernel mode support across various architectures.
|
||||
|
||||
v2: move copyright update to commit which adds the changes
|
||||
|
||||
Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
.../gpu/drm/amd/display/dc/calcs/dcn_calcs.c | 24 +++++++++----------
|
||||
.../drm/amd/display/dc/dcn20/dcn20_resource.c | 5 ++--
|
||||
drivers/gpu/drm/amd/display/dc/os_types.h | 3 +++
|
||||
3 files changed, 18 insertions(+), 14 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
+ * Copyright 2019 Raptor Engineering, LLC
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -626,7 +627,7 @@ static bool dcn_bw_apply_registry_overri
|
||||
{
|
||||
bool updated = false;
|
||||
|
||||
- kernel_fpu_begin();
|
||||
+ DC_FP_START();
|
||||
if ((int)(dc->dcn_soc->sr_exit_time * 1000) != dc->debug.sr_exit_time_ns
|
||||
&& dc->debug.sr_exit_time_ns) {
|
||||
updated = true;
|
||||
@@ -662,7 +663,7 @@ static bool dcn_bw_apply_registry_overri
|
||||
dc->dcn_soc->dram_clock_change_latency =
|
||||
dc->debug.dram_clock_change_latency_ns / 1000.0;
|
||||
}
|
||||
- kernel_fpu_end();
|
||||
+ DC_FP_END();
|
||||
|
||||
return updated;
|
||||
}
|
||||
@@ -742,7 +743,7 @@ bool dcn_validate_bandwidth(
|
||||
dcn_bw_sync_calcs_and_dml(dc);
|
||||
|
||||
memset(v, 0, sizeof(*v));
|
||||
- kernel_fpu_begin();
|
||||
+ DC_FP_START();
|
||||
|
||||
v->sr_exit_time = dc->dcn_soc->sr_exit_time;
|
||||
v->sr_enter_plus_exit_time = dc->dcn_soc->sr_enter_plus_exit_time;
|
||||
@@ -1275,7 +1276,7 @@ bool dcn_validate_bandwidth(
|
||||
bw_limit = dc->dcn_soc->percent_disp_bw_limit * v->fabric_and_dram_bandwidth_vmax0p9;
|
||||
bw_limit_pass = (v->total_data_read_bandwidth / 1000.0) < bw_limit;
|
||||
|
||||
- kernel_fpu_end();
|
||||
+ DC_FP_END();
|
||||
|
||||
PERFORMANCE_TRACE_END();
|
||||
BW_VAL_TRACE_FINISH();
|
||||
@@ -1444,7 +1445,7 @@ void dcn_bw_update_from_pplib(struct dc
|
||||
res = dm_pp_get_clock_levels_by_type_with_voltage(
|
||||
ctx, DM_PP_CLOCK_TYPE_FCLK, &fclks);
|
||||
|
||||
- kernel_fpu_begin();
|
||||
+ DC_FP_START();
|
||||
|
||||
if (res)
|
||||
res = verify_clock_values(&fclks);
|
||||
@@ -1475,12 +1476,12 @@ void dcn_bw_update_from_pplib(struct dc
|
||||
} else
|
||||
BREAK_TO_DEBUGGER();
|
||||
|
||||
- kernel_fpu_end();
|
||||
+ DC_FP_END();
|
||||
|
||||
res = dm_pp_get_clock_levels_by_type_with_voltage(
|
||||
ctx, DM_PP_CLOCK_TYPE_DCFCLK, &dcfclks);
|
||||
|
||||
- kernel_fpu_begin();
|
||||
+ DC_FP_START();
|
||||
|
||||
if (res)
|
||||
res = verify_clock_values(&dcfclks);
|
||||
@@ -1493,7 +1494,7 @@ void dcn_bw_update_from_pplib(struct dc
|
||||
} else
|
||||
BREAK_TO_DEBUGGER();
|
||||
|
||||
- kernel_fpu_end();
|
||||
+ DC_FP_END();
|
||||
}
|
||||
|
||||
void dcn_bw_notify_pplib_of_wm_ranges(struct dc *dc)
|
||||
@@ -1508,11 +1509,11 @@ void dcn_bw_notify_pplib_of_wm_ranges(st
|
||||
if (!pp || !pp->set_wm_ranges)
|
||||
return;
|
||||
|
||||
- kernel_fpu_begin();
|
||||
+ DC_FP_START();
|
||||
min_fclk_khz = dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 * 1000000 / 32;
|
||||
min_dcfclk_khz = dc->dcn_soc->dcfclkv_min0p65 * 1000;
|
||||
socclk_khz = dc->dcn_soc->socclk * 1000;
|
||||
- kernel_fpu_end();
|
||||
+ DC_FP_END();
|
||||
|
||||
/* Now notify PPLib/SMU about which Watermarks sets they should select
|
||||
* depending on DPM state they are in. And update BW MGR GFX Engine and
|
||||
@@ -1563,7 +1564,7 @@ void dcn_bw_notify_pplib_of_wm_ranges(st
|
||||
|
||||
void dcn_bw_sync_calcs_and_dml(struct dc *dc)
|
||||
{
|
||||
- kernel_fpu_begin();
|
||||
+ DC_FP_START();
|
||||
DC_LOG_BANDWIDTH_CALCS("sr_exit_time: %f ns\n"
|
||||
"sr_enter_plus_exit_time: %f ns\n"
|
||||
"urgent_latency: %f ns\n"
|
||||
@@ -1752,5 +1753,5 @@ void dcn_bw_sync_calcs_and_dml(struct dc
|
||||
dc->dml.ip.bug_forcing_LC_req_same_size_fixed =
|
||||
dc->dcn_ip->bug_forcing_luma_and_chroma_request_to_same_size_fixed == dcn_bw_yes;
|
||||
dc->dml.ip.dcfclk_cstate_latency = dc->dcn_ip->dcfclk_cstate_latency;
|
||||
- kernel_fpu_end();
|
||||
+ DC_FP_END();
|
||||
}
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2016 Advanced Micro Devices, Inc.
|
||||
+ * Copyright 2019 Raptor Engineering, LLC
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -2892,14 +2893,19 @@ validate_out:
|
||||
bool dcn20_validate_bandwidth(struct dc *dc, struct dc_state *context,
|
||||
bool fast_validate)
|
||||
{
|
||||
+ DC_FP_START();
|
||||
+
|
||||
bool voltage_supported = false;
|
||||
bool full_pstate_supported = false;
|
||||
bool dummy_pstate_supported = false;
|
||||
double p_state_latency_us = context->bw_ctx.dml.soc.dram_clock_change_latency_us;
|
||||
|
||||
- if (fast_validate)
|
||||
- return dcn20_validate_bandwidth_internal(dc, context, true);
|
||||
+ if (fast_validate) {
|
||||
+ voltage_supported = dcn20_validate_bandwidth_internal(dc, context, true);
|
||||
|
||||
+ DC_FP_END();
|
||||
+ return voltage_supported;
|
||||
+ }
|
||||
|
||||
// Best case, we support full UCLK switch latency
|
||||
voltage_supported = dcn20_validate_bandwidth_internal(dc, context, false);
|
||||
@@ -2929,6 +2935,7 @@ restore_dml_state:
|
||||
memcpy(&context->bw_ctx.dml, &dc->dml, sizeof(struct display_mode_lib));
|
||||
context->bw_ctx.dml.soc.dram_clock_change_latency_us = p_state_latency_us;
|
||||
|
||||
+ DC_FP_END();
|
||||
return voltage_supported;
|
||||
}
|
||||
|
||||
@@ -3217,7 +3224,7 @@ static void update_bounding_box(struct d
|
||||
|
||||
static void patch_bounding_box(struct dc *dc, struct _vcs_dpi_soc_bounding_box_st *bb)
|
||||
{
|
||||
- kernel_fpu_begin();
|
||||
+ DC_FP_START();
|
||||
if ((int)(bb->sr_exit_time_us * 1000) != dc->bb_overrides.sr_exit_time_ns
|
||||
&& dc->bb_overrides.sr_exit_time_ns) {
|
||||
bb->sr_exit_time_us = dc->bb_overrides.sr_exit_time_ns / 1000.0;
|
||||
@@ -3241,7 +3248,7 @@ static void patch_bounding_box(struct dc
|
||||
bb->dram_clock_change_latency_us =
|
||||
dc->bb_overrides.dram_clock_change_latency_ns / 1000.0;
|
||||
}
|
||||
- kernel_fpu_end();
|
||||
+ DC_FP_END();
|
||||
}
|
||||
|
||||
static struct _vcs_dpi_soc_bounding_box_st *get_asic_rev_soc_bb(
|
||||
@@ -3444,6 +3451,8 @@ static bool construct(
|
||||
enum dml_project dml_project_version =
|
||||
get_dml_project_version(ctx->asic_id.hw_internal_rev);
|
||||
|
||||
+ DC_FP_START();
|
||||
+
|
||||
ctx->dc_bios->regs = &bios_regs;
|
||||
pool->base.funcs = &dcn20_res_pool_funcs;
|
||||
|
||||
@@ -3731,10 +3740,12 @@ static bool construct(
|
||||
|
||||
dc->cap_funcs = cap_funcs;
|
||||
|
||||
+ DC_FP_END();
|
||||
return true;
|
||||
|
||||
create_fail:
|
||||
|
||||
+ DC_FP_END();
|
||||
destruct(pool);
|
||||
|
||||
return false;
|
||||
--- a/drivers/gpu/drm/amd/display/dc/os_types.h
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/os_types.h
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2012-16 Advanced Micro Devices, Inc.
|
||||
+ * Copyright 2019 Raptor Engineering, LLC
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -49,7 +50,38 @@
|
||||
#define dm_error(fmt, ...) DRM_ERROR(fmt, ##__VA_ARGS__)
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
|
||||
+#if defined(CONFIG_X86)
|
||||
#include <asm/fpu/api.h>
|
||||
+#define DC_FP_START() kernel_fpu_begin()
|
||||
+#define DC_FP_END() kernel_fpu_end()
|
||||
+#elif defined(CONFIG_PPC64)
|
||||
+#include <asm/switch_to.h>
|
||||
+#include <asm/cputable.h>
|
||||
+#define DC_FP_START() { \
|
||||
+ if (cpu_has_feature(CPU_FTR_VSX_COMP)) { \
|
||||
+ preempt_disable(); \
|
||||
+ enable_kernel_vsx(); \
|
||||
+ } else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) { \
|
||||
+ preempt_disable(); \
|
||||
+ enable_kernel_altivec(); \
|
||||
+ } else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) { \
|
||||
+ preempt_disable(); \
|
||||
+ enable_kernel_fp(); \
|
||||
+ } \
|
||||
+}
|
||||
+#define DC_FP_END() { \
|
||||
+ if (cpu_has_feature(CPU_FTR_VSX_COMP)) { \
|
||||
+ disable_kernel_vsx(); \
|
||||
+ preempt_enable(); \
|
||||
+ } else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) { \
|
||||
+ disable_kernel_altivec(); \
|
||||
+ preempt_enable(); \
|
||||
+ } else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) { \
|
||||
+ disable_kernel_fp(); \
|
||||
+ preempt_enable(); \
|
||||
+ } \
|
||||
+}
|
||||
+#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
--- a/drivers/gpu/drm/amd/display/Kconfig
|
||||
+++ b/drivers/gpu/drm/amd/display/Kconfig
|
||||
@@ -6,7 +6,7 @@ config DRM_AMD_DC
|
||||
bool "AMD DC - Enable new display engine"
|
||||
default y
|
||||
select SND_HDA_COMPONENT if SND_HDA_CORE
|
||||
- select DRM_AMD_DC_DCN1_0 if X86 && !(KCOV_INSTRUMENT_ALL && KCOV_ENABLE_COMPARISONS)
|
||||
+ select DRM_AMD_DC_DCN1_0 if (X86 || PPC64) && !(KCOV_INSTRUMENT_ALL && KCOV_ENABLE_COMPARISONS)
|
||||
help
|
||||
Choose this option if you want to use the new display engine
|
||||
support for AMDGPU. This adds required support for Vega and
|
||||
@@ -20,7 +20,7 @@ config DRM_AMD_DC_DCN1_0
|
||||
config DRM_AMD_DC_DCN2_0
|
||||
bool "DCN 2.0 family"
|
||||
default y
|
||||
- depends on DRM_AMD_DC && X86
|
||||
+ depends on DRM_AMD_DC && (X86 || PPC64)
|
||||
depends on DRM_AMD_DC_DCN1_0
|
||||
help
|
||||
Choose this option if you want to have
|
||||
@@ -28,7 +28,7 @@ config DRM_AMD_DC_DCN2_0
|
||||
|
||||
config DRM_AMD_DC_DCN2_1
|
||||
bool "DCN 2.1 family"
|
||||
- depends on DRM_AMD_DC && X86
|
||||
+ depends on DRM_AMD_DC && (X86 || PPC64)
|
||||
depends on DRM_AMD_DC_DCN2_0
|
||||
help
|
||||
Choose this option if you want to have
|
||||
@@ -37,7 +37,7 @@ config DRM_AMD_DC_DCN2_1
|
||||
config DRM_AMD_DC_DSC_SUPPORT
|
||||
bool "DSC support"
|
||||
default y
|
||||
- depends on DRM_AMD_DC && X86
|
||||
+ depends on DRM_AMD_DC && (X86 || PPC64)
|
||||
depends on DRM_AMD_DC_DCN1_0
|
||||
depends on DRM_AMD_DC_DCN2_0
|
||||
help
|
||||
--- a/drivers/gpu/drm/amd/display/dc/calcs/Makefile
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/calcs/Makefile
|
||||
@@ -1,5 +1,6 @@
|
||||
#
|
||||
# Copyright 2017 Advanced Micro Devices, Inc.
|
||||
+# Copyright 2019 Raptor Engineering, LLC
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
@@ -24,7 +25,13 @@
|
||||
# It calculates Bandwidth and Watermarks values for HW programming
|
||||
#
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
calcs_ccflags := -mhard-float -msse
|
||||
+endif
|
||||
+
|
||||
+ifdef CONFIG_PPC64
|
||||
+calcs_ccflags := -mhard-float -maltivec
|
||||
+endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
@@ -32,6 +39,7 @@ IS_OLD_GCC = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
ifdef IS_OLD_GCC
|
||||
# Stack alignment mismatch, proceed with caution.
|
||||
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
|
||||
@@ -40,6 +48,7 @@ calcs_ccflags += -mpreferred-stack-bound
|
||||
else
|
||||
calcs_ccflags += -msse2
|
||||
endif
|
||||
+endif
|
||||
|
||||
CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calcs.o := $(calcs_ccflags)
|
||||
CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_auto.o := $(calcs_ccflags)
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dcn20/Makefile
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dcn20/Makefile
|
||||
@@ -10,7 +10,9 @@ ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
|
||||
DCN20 += dcn20_dsc.o
|
||||
endif
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := $(if $(CONFIG_CC_IS_GCC), -mhard-float) -msse
|
||||
+endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
@@ -18,6 +20,7 @@ IS_OLD_GCC = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
ifdef IS_OLD_GCC
|
||||
# Stack alignment mismatch, proceed with caution.
|
||||
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
|
||||
@@ -26,6 +29,10 @@ CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_reso
|
||||
else
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o += -msse2
|
||||
endif
|
||||
+endif
|
||||
+ifdef CONFIG_PPC64
|
||||
+CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mhard-float -maltivec
|
||||
+endif
|
||||
|
||||
AMD_DAL_DCN20 = $(addprefix $(AMDDALPATH)/dc/dcn20/,$(DCN20))
|
||||
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dcn21/Makefile
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dcn21/Makefile
|
||||
@@ -3,7 +3,9 @@
|
||||
|
||||
DCN21 = dcn21_hubp.o dcn21_hubbub.o dcn21_resource.o
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := $(if $(CONFIG_CC_IS_GCC), -mhard-float) -msse
|
||||
+endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
@@ -11,6 +13,7 @@ IS_OLD_GCC = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
ifdef IS_OLD_GCC
|
||||
# Stack alignment mismatch, proceed with caution.
|
||||
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
|
||||
@@ -19,6 +22,10 @@ CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_reso
|
||||
else
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o += -msse2
|
||||
endif
|
||||
+endif
|
||||
+ifdef CONFIG_PPC64
|
||||
+CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := -mhard-float -maltivec
|
||||
+endif
|
||||
|
||||
AMD_DAL_DCN21 = $(addprefix $(AMDDALPATH)/dc/dcn21/,$(DCN21))
|
||||
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dml/Makefile
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dml/Makefile
|
||||
@@ -1,5 +1,6 @@
|
||||
#
|
||||
# Copyright 2017 Advanced Micro Devices, Inc.
|
||||
+# Copyright 2019 Raptor Engineering, LLC
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,7 +26,9 @@
|
||||
# subcomponents.
|
||||
|
||||
dml_ccflags-$(CONFIG_CC_IS_GCC) := -mhard-float
|
||||
+ifdef CONFIG_X86
|
||||
dml_ccflags := $(dml_ccflags-y) -msse
|
||||
+endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
@@ -33,6 +36,7 @@ IS_OLD_GCC = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
ifdef IS_OLD_GCC
|
||||
# Stack alignment mismatch, proceed with caution.
|
||||
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
|
||||
@@ -41,6 +45,10 @@ dml_ccflags += -mpreferred-stack-boundar
|
||||
else
|
||||
dml_ccflags += -msse2
|
||||
endif
|
||||
+endif
|
||||
+ifdef CONFIG_PPC64
|
||||
+dml_ccflags := -mhard-float -maltivec
|
||||
+endif
|
||||
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_lib.o := $(dml_ccflags)
|
||||
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dsc/Makefile
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dsc/Makefile
|
||||
@@ -1,7 +1,13 @@
|
||||
#
|
||||
# Makefile for the 'dsc' sub-component of DAL.
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
dsc_ccflags := -mhard-float -msse
|
||||
+endif
|
||||
+
|
||||
+ifdef CONFIG_PPC64
|
||||
+dsc_ccflags := -mhard-float -maltivec
|
||||
+endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
@@ -9,6 +15,7 @@ IS_OLD_GCC = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
+ifdef CONFIG_X86
|
||||
ifdef IS_OLD_GCC
|
||||
# Stack alignment mismatch, proceed with caution.
|
||||
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
|
||||
@@ -17,6 +24,7 @@ dsc_ccflags += -mpreferred-stack-boundar
|
||||
else
|
||||
dsc_ccflags += -msse2
|
||||
endif
|
||||
+endif
|
||||
|
||||
CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc.o := $(dsc_ccflags)
|
||||
CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc_dpi.o := $(dsc_ccflags)
|
||||
@@ -1,25 +0,0 @@
|
||||
From 658c663947b04b1f8a2fd061a3ef767983c880e5 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Mon, 27 Jan 2020 14:31:49 -0500
|
||||
Subject: [PATCH] drm/amdgpu: enable GPU reset by default on Navi
|
||||
|
||||
Has been working fine for a while.
|
||||
|
||||
Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
@@ -3556,6 +3556,9 @@ bool amdgpu_device_should_recover_gpu(st
|
||||
case CHIP_VEGA10:
|
||||
case CHIP_VEGA12:
|
||||
case CHIP_RAVEN:
|
||||
+ case CHIP_NAVI10:
|
||||
+ case CHIP_NAVI14:
|
||||
+ case CHIP_NAVI12:
|
||||
break;
|
||||
default:
|
||||
goto disabled;
|
||||
@@ -1,84 +0,0 @@
|
||||
This makes the Linux kernel build as ELFv2 on big endian ppc64. The upstream
|
||||
doesn't seem to be interested in this but it's a small patch that is unlikely
|
||||
to break/easy to remake and in worst case can always be ditched.
|
||||
|
||||
Using ELFv2 has some potential performance benefits and is already always used
|
||||
on little endian. It requires a relatively modern toolchain, which we already
|
||||
have.
|
||||
|
||||
Ping q66 if it does not apply.
|
||||
|
||||
--- a/arch/powerpc/Makefile
|
||||
+++ b/arch/powerpc/Makefile
|
||||
@@ -75,10 +75,8 @@ endif
|
||||
|
||||
ifdef CONFIG_PPC64
|
||||
ifndef CONFIG_CC_IS_CLANG
|
||||
-cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1)
|
||||
-cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mcall-aixdesc)
|
||||
-aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1)
|
||||
-aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mabi=elfv2
|
||||
+cflags-y += $(call cc-option,-mabi=elfv2,$(call cc-option,-mcall-aixdesc))
|
||||
+aflags-y += $(call cc-option,-mabi=elfv2,$(call cc-option,-mabi=elfv1))
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -127,14 +125,8 @@ endif
|
||||
|
||||
CFLAGS-$(CONFIG_PPC64) := $(call cc-option,-mtraceback=no)
|
||||
ifndef CONFIG_CC_IS_CLANG
|
||||
-ifdef CONFIG_CPU_LITTLE_ENDIAN
|
||||
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2,$(call cc-option,-mcall-aixdesc))
|
||||
-AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2)
|
||||
-else
|
||||
-CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1)
|
||||
-CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcall-aixdesc)
|
||||
-AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1)
|
||||
-endif
|
||||
+AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2,$(call cc-option,-mabi=elfv1))
|
||||
endif
|
||||
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,$(call cc-option,-mminimal-toc))
|
||||
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions)
|
||||
--- a/arch/powerpc/boot/Makefile
|
||||
+++ b/arch/powerpc/boot/Makefile
|
||||
@@ -46,8 +46,8 @@ ifdef CONFIG_CPU_BIG_ENDIAN
|
||||
BOOTCFLAGS += -mbig-endian
|
||||
else
|
||||
BOOTCFLAGS += -mlittle-endian
|
||||
-BOOTCFLAGS += $(call cc-option,-mabi=elfv2)
|
||||
endif
|
||||
+BOOTCFLAGS += $(call cc-option,-mabi=elfv2)
|
||||
|
||||
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -nostdinc
|
||||
|
||||
--- a/drivers/crypto/vmx/Makefile
|
||||
+++ b/drivers/crypto/vmx/Makefile
|
||||
@@ -5,7 +5,7 @@ vmx-crypto-objs := vmx.o aesp8-ppc.o gha
|
||||
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||
override flavour := linux-ppc64le
|
||||
else
|
||||
-override flavour := linux-ppc64
|
||||
+override flavour := linux-ppc64v2
|
||||
endif
|
||||
|
||||
quiet_cmd_perl = PERL $@
|
||||
--- a/drivers/crypto/vmx/ppc-xlate.pl
|
||||
+++ b/drivers/crypto/vmx/ppc-xlate.pl
|
||||
@@ -40,7 +40,7 @@ my $globl = sub {
|
||||
};
|
||||
my $text = sub {
|
||||
my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text";
|
||||
- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/);
|
||||
+ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/);
|
||||
$ret;
|
||||
};
|
||||
my $machine = sub {
|
||||
@@ -142,7 +142,7 @@ my $vmr = sub {
|
||||
|
||||
# Some ABIs specify vrsave, special-purpose register #256, as reserved
|
||||
# for system use.
|
||||
-my $no_vrsave = ($flavour =~ /linux-ppc64le/);
|
||||
+my $no_vrsave = ($flavour =~ /linux-ppc64(le|v2)/);
|
||||
my $mtspr = sub {
|
||||
my ($f,$idx,$ra) = @_;
|
||||
if ($idx == 256 && $no_vrsave) {
|
||||
@@ -1,17 +0,0 @@
|
||||
KFD has been verified to function on POWER systems (Talos II / Vega 64).
|
||||
It should be available as a kernel configuration option on these systems.
|
||||
---
|
||||
drivers/gpu/drm/amd/amdkfd/Kconfig | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/gpu/drm/amd/amdkfd/Kconfig
|
||||
+++ b/drivers/gpu/drm/amd/amdkfd/Kconfig
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
config HSA_AMD
|
||||
bool "HSA kernel driver for AMD GPU devices"
|
||||
- depends on DRM_AMDGPU && (X86_64 || ARM64)
|
||||
+ depends on DRM_AMDGPU && (X86_64 || ARM64 || PPC64)
|
||||
imply AMD_IOMMU_V2 if X86_64
|
||||
select MMU_NOTIFIER
|
||||
help
|
||||
@@ -1,138 +0,0 @@
|
||||
From e7eb919057c3450cdd9d335e4a23a4da8da58db4 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Ellerman <mpe@ellerman.id.au>
|
||||
Date: Wed, 3 Feb 2021 00:02:07 +1100
|
||||
Subject: [PATCH] powerpc/64s: Handle program checks in wrong endian during
|
||||
early boot
|
||||
|
||||
There's a short window during boot where although the kernel is
|
||||
running little endian, any exceptions will cause the CPU to switch
|
||||
back to big endian. This situation persists until we call
|
||||
configure_exceptions(), which calls either the hypervisor or OPAL to
|
||||
configure the CPU so that exceptions will be taken in little
|
||||
endian (via HID0[HILE]).
|
||||
|
||||
We don't intend to take exceptions during early boot, but one way we
|
||||
sometimes do is via a WARN/BUG etc. Those all boil down to a trap
|
||||
instruction, which will cause a program check exception.
|
||||
|
||||
The first instruction of the program check handler is an mtsprg, which
|
||||
when executed in the wrong endian is an lhzu with a ~3GB displacement
|
||||
from r3. The content of r3 is random, so that becomes a load from some
|
||||
random location, and depending on the system (installed RAM etc.) can
|
||||
easily lead to a checkstop, or an infinitely recursive page fault.
|
||||
That prevents whatever the WARN/BUG was complaining about being
|
||||
printed to the console, and the user just sees a dead system.
|
||||
|
||||
We can fix it by having a trampoline at the beginning of the program
|
||||
check handler that detects we are in the wrong endian, and flips us
|
||||
back to the correct endian.
|
||||
|
||||
We can't flip MSR[LE] using mtmsr (alas), so we have to use rfid. That
|
||||
requires backing up SRR0/1 as well as a GPR. To do that we use
|
||||
SPRG0/2/3 (SPRG1 is already used for the paca). SPRG3 is user
|
||||
readable, but this trampoline is only active very early in boot, and
|
||||
SPRG3 will be reinitialised in vdso_getcpu_init() before userspace
|
||||
starts.
|
||||
|
||||
With this trampoline in place we can survive a WARN early in boot and
|
||||
print a stack trace, which is eventually printed to the console once
|
||||
the console is up, eg:
|
||||
|
||||
[83565.758545] kexec_core: Starting new kernel
|
||||
[ 0.000000] ------------[ cut here ]------------
|
||||
[ 0.000000] static_key_enable_cpuslocked(): static key '0xc000000000ea6160' used before call to jump_label_init()
|
||||
[ 0.000000] WARNING: CPU: 0 PID: 0 at kernel/jump_label.c:166 static_key_enable_cpuslocked+0xfc/0x120
|
||||
[ 0.000000] Modules linked in:
|
||||
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 5.10.0-gcc-8.2.0-dirty #618
|
||||
[ 0.000000] NIP: c0000000002fd46c LR: c0000000002fd468 CTR: c000000000170660
|
||||
[ 0.000000] REGS: c000000001227940 TRAP: 0700 Not tainted (5.10.0-gcc-8.2.0-dirty)
|
||||
[ 0.000000] MSR: 9000000002823003 <SF,HV,VEC,VSX,FP,ME,RI,LE> CR: 24882422 XER: 20040000
|
||||
[ 0.000000] CFAR: 0000000000000730 IRQMASK: 1
|
||||
[ 0.000000] GPR00: c0000000002fd468 c000000001227bd0 c000000001228300 0000000000000065
|
||||
[ 0.000000] GPR04: 0000000000000001 0000000000000065 c0000000010cf970 000000000000000d
|
||||
[ 0.000000] GPR08: 0000000000000000 0000000000000000 0000000000000000 c00000000122763f
|
||||
[ 0.000000] GPR12: 0000000000002000 c000000000f8a980 0000000000000000 0000000000000000
|
||||
[ 0.000000] GPR16: 0000000000000000 0000000000000000 c000000000f88c8e c000000000f88c9a
|
||||
[ 0.000000] GPR20: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
|
||||
[ 0.000000] GPR24: 0000000000000000 c000000000dea3a8 0000000000000000 c000000000f35114
|
||||
[ 0.000000] GPR28: 0000002800000000 c000000000f88c9a c000000000f88c8e c000000000ea6160
|
||||
[ 0.000000] NIP [c0000000002fd46c] static_key_enable_cpuslocked+0xfc/0x120
|
||||
[ 0.000000] LR [c0000000002fd468] static_key_enable_cpuslocked+0xf8/0x120
|
||||
[ 0.000000] Call Trace:
|
||||
[ 0.000000] [c000000001227bd0] [c0000000002fd468] static_key_enable_cpuslocked+0xf8/0x120 (unreliable)
|
||||
[ 0.000000] [c000000001227c40] [c0000000002fd4c0] static_key_enable+0x30/0x50
|
||||
[ 0.000000] [c000000001227c70] [c000000000f6629c] early_page_poison_param+0x58/0x9c
|
||||
[ 0.000000] [c000000001227cb0] [c000000000f351b8] do_early_param+0xa4/0x10c
|
||||
[ 0.000000] [c000000001227d30] [c00000000011e020] parse_args+0x270/0x5e0
|
||||
[ 0.000000] [c000000001227e20] [c000000000f35864] parse_early_options+0x48/0x5c
|
||||
[ 0.000000] [c000000001227e40] [c000000000f358d0] parse_early_param+0x58/0x84
|
||||
[ 0.000000] [c000000001227e70] [c000000000f3a368] early_init_devtree+0xc4/0x490
|
||||
[ 0.000000] [c000000001227f10] [c000000000f3bca0] early_setup+0xc8/0x1c8
|
||||
[ 0.000000] [c000000001227f90] [000000000000c320] 0xc320
|
||||
[ 0.000000] Instruction dump:
|
||||
[ 0.000000] 4bfffddd 7c2004ac 39200001 913f0000 4bffffb8 7c651b78 3c82ffac 3c62ffc0
|
||||
[ 0.000000] 38841b00 3863f310 4bdf03a5 60000000 <0fe00000> 4bffff38 60000000 60000000
|
||||
[ 0.000000] random: get_random_bytes called from print_oops_end_marker+0x40/0x80 with crng_init=0
|
||||
[ 0.000000] ---[ end trace 0000000000000000 ]---
|
||||
[ 0.000000] dt-cpu-ftrs: setup for ISA 3000
|
||||
|
||||
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
|
||||
Link: https://lore.kernel.org/r/20210202130207.1303975-2-mpe@ellerman.id.au
|
||||
---
|
||||
arch/powerpc/kernel/exceptions-64s.S | 45 ++++++++++++++++++++++++++++
|
||||
1 file changed, 45 insertions(+)
|
||||
|
||||
--- a/arch/powerpc/kernel/exceptions-64s.S
|
||||
+++ b/arch/powerpc/kernel/exceptions-64s.S
|
||||
@@ -1281,6 +1281,51 @@ EXC_COMMON_BEGIN(alignment_common)
|
||||
|
||||
|
||||
EXC_REAL_BEGIN(program_check, 0x700, 0x100)
|
||||
+
|
||||
+#ifdef CONFIG_CPU_LITTLE_ENDIAN
|
||||
+ /*
|
||||
+ * There's a short window during boot where although the kernel is
|
||||
+ * running little endian, any exceptions will cause the CPU to switch
|
||||
+ * back to big endian. For example a WARN() boils down to a trap
|
||||
+ * instruction, which will cause a program check, and we end up here but
|
||||
+ * with the CPU in big endian mode. The first instruction of the program
|
||||
+ * check handler (in GEN_INT_ENTRY below) is an mtsprg, which when
|
||||
+ * executed in the wrong endian is an lhzu with a ~3GB displacement from
|
||||
+ * r3. The content of r3 is random, so that is a load from some random
|
||||
+ * location, and depending on the system can easily lead to a checkstop,
|
||||
+ * or an infinitely recursive page fault.
|
||||
+ *
|
||||
+ * So to handle that case we have a trampoline here that can detect we
|
||||
+ * are in the wrong endian and flip us back to the correct endian. We
|
||||
+ * can't flip MSR[LE] using mtmsr, so we have to use rfid. That requires
|
||||
+ * backing up SRR0/1 as well as a GPR. To do that we use SPRG0/2/3, as
|
||||
+ * SPRG1 is already used for the paca. SPRG3 is user readable, but this
|
||||
+ * trampoline is only active very early in boot, and SPRG3 will be
|
||||
+ * reinitialised in vdso_getcpu_init() before userspace starts.
|
||||
+ */
|
||||
+BEGIN_FTR_SECTION
|
||||
+ tdi 0,0,0x48 // Trap never, or in reverse endian: b . + 8
|
||||
+ b 1f // Skip trampoline if endian is correct
|
||||
+ .long 0xa643707d // mtsprg 0, r11 Backup r11
|
||||
+ .long 0xa6027a7d // mfsrr0 r11
|
||||
+ .long 0xa643727d // mtsprg 2, r11 Backup SRR0 in SPRG2
|
||||
+ .long 0xa6027b7d // mfsrr1 r11
|
||||
+ .long 0xa643737d // mtsprg 3, r11 Backup SRR1 in SPRG3
|
||||
+ .long 0xa600607d // mfmsr r11
|
||||
+ .long 0x01006b69 // xori r11, r11, 1 Invert MSR[LE]
|
||||
+ .long 0xa6037b7d // mtsrr1 r11
|
||||
+ .long 0x34076039 // li r11, 0x734
|
||||
+ .long 0xa6037a7d // mtsrr0 r11
|
||||
+ .long 0x2400004c // rfid
|
||||
+ mfsprg r11, 3
|
||||
+ mtsrr1 r11 // Restore SRR1
|
||||
+ mfsprg r11, 2
|
||||
+ mtsrr0 r11 // Restore SRR0
|
||||
+ mfsprg r11, 0 // Restore r11
|
||||
+1:
|
||||
+END_FTR_SECTION(0, 1) // nop out after boot
|
||||
+#endif /* CONFIG_CPU_LITTLE_ENDIAN */
|
||||
+
|
||||
INT_HANDLER program_check, 0x700, kvm=1
|
||||
EXC_REAL_END(program_check, 0x700, 0x100)
|
||||
EXC_VIRT_BEGIN(program_check, 0x4700, 0x100)
|
||||
@@ -1,15 +0,0 @@
|
||||
Disable vDSOs which are broken on 32 bit LE.
|
||||
|
||||
Source: @eerykitty
|
||||
|
||||
--- a/arch/powerpc/kernel/vdso32/vdso32.lds.S
|
||||
+++ b/arch/powerpc/kernel/vdso32/vdso32.lds.S
|
||||
@@ -144,7 +144,7 @@ VERSION
|
||||
__kernel_datapage_offset;
|
||||
|
||||
__kernel_get_syscall_map;
|
||||
-#ifndef CONFIG_PPC_BOOK3S_601
|
||||
+#if !defined(__LITTLE_ENDIAN__) && !defined(CONFIG_PPC_BOOK3S_601)
|
||||
__kernel_gettimeofday;
|
||||
__kernel_clock_gettime;
|
||||
__kernel_clock_getres;
|
||||
@@ -1,33 +0,0 @@
|
||||
These are experimental fixes for running 32-bit little endian binaries on
|
||||
Linux/ppc64le. While this may seem pointless, it does work, does not break
|
||||
anything, and may allow enablement of things we couldn't do before (e.g.
|
||||
support for box86 and thus reasonably fast emulation of 32-bit x86 games).
|
||||
|
||||
The first part is a signal handler fix, the second part enables the 32-bit
|
||||
VDSO by removing the ppc32/big endian restriction.
|
||||
|
||||
Source: @eerykitty
|
||||
|
||||
--- a/arch/powerpc/kernel/signal_32.c
|
||||
+++ b/arch/powerpc/kernel/signal_32.c
|
||||
@@ -1427,8 +1427,9 @@ int handle_signal32(struct ksignal *ksig
|
||||
regs->gpr[3] = ksig->sig;
|
||||
regs->gpr[4] = (unsigned long) sc;
|
||||
regs->nip = (unsigned long) (unsigned long)ksig->ka.sa.sa_handler;
|
||||
- /* enter the signal handler in big-endian mode */
|
||||
+ /* enter the signal handler in native-endian mode */
|
||||
regs->msr &= ~MSR_LE;
|
||||
+ regs->msr |= (MSR_KERNEL & MSR_LE);
|
||||
return 0;
|
||||
|
||||
badframe:
|
||||
--- a/arch/powerpc/platforms/Kconfig.cputype
|
||||
+++ b/arch/powerpc/platforms/Kconfig.cputype
|
||||
@@ -492,7 +492,6 @@ endmenu
|
||||
|
||||
config VDSO32
|
||||
def_bool y
|
||||
- depends on PPC32 || CPU_BIG_ENDIAN
|
||||
help
|
||||
This symbol controls whether we build the 32-bit VDSO. We obviously
|
||||
want to do that if we're building a 32-bit kernel. If we're building
|
||||
@@ -1,102 +0,0 @@
|
||||
From 98014e4b27063ed74313878233e91b7b52b2a031 Mon Sep 17 00:00:00 2001
|
||||
From: Will Springer <skirmisher@protonmail.com>
|
||||
Date: Tue, 9 Jun 2020 02:11:36 -0700
|
||||
Subject: [PATCH] powerpc/compat32: swap hi/lo parts of 64-bit syscall args on
|
||||
32LE
|
||||
|
||||
This allows compat_sys calls with 64-bit args to function correctly
|
||||
when called by ppcle userlands on ppc64le.
|
||||
|
||||
Tested with `file /bin/bash` (pread64) and `truncate -s 5G test` (ftruncate64).
|
||||
---
|
||||
arch/powerpc/kernel/sys_ppc32.c | 49 +++++++++++++++++++--------------
|
||||
1 file changed, 28 insertions(+), 21 deletions(-)
|
||||
|
||||
--- a/arch/powerpc/kernel/sys_ppc32.c
|
||||
+++ b/arch/powerpc/kernel/sys_ppc32.c
|
||||
@@ -59,57 +59,64 @@ unsigned long compat_sys_mmap2(unsigned
|
||||
/*
|
||||
* long long munging:
|
||||
* The 32 bit ABI passes long longs in an odd even register pair.
|
||||
+ * High and low parts are swapped depending on endian mode,
|
||||
+ * so define a macro (similar to mips linux32) to handle that.
|
||||
*/
|
||||
+#ifdef __LITTLE_ENDIAN__
|
||||
+#define merge_64(low, high) ((u64)high << 32) | low
|
||||
+#else
|
||||
+#define merge_64(high, low) ((u64)high << 32) | low
|
||||
+#endif
|
||||
|
||||
compat_ssize_t compat_sys_pread64(unsigned int fd, char __user *ubuf, compat_size_t count,
|
||||
- u32 reg6, u32 poshi, u32 poslo)
|
||||
+ u32 reg6, u32 pos1, u32 pos2)
|
||||
{
|
||||
- return ksys_pread64(fd, ubuf, count, ((loff_t)poshi << 32) | poslo);
|
||||
+ return ksys_pread64(fd, ubuf, count, merge_64(pos1, pos2));
|
||||
}
|
||||
|
||||
compat_ssize_t compat_sys_pwrite64(unsigned int fd, const char __user *ubuf, compat_size_t count,
|
||||
- u32 reg6, u32 poshi, u32 poslo)
|
||||
+ u32 reg6, u32 pos1, u32 pos2)
|
||||
{
|
||||
- return ksys_pwrite64(fd, ubuf, count, ((loff_t)poshi << 32) | poslo);
|
||||
+ return ksys_pwrite64(fd, ubuf, count, merge_64(pos1, pos2));
|
||||
}
|
||||
|
||||
-compat_ssize_t compat_sys_readahead(int fd, u32 r4, u32 offhi, u32 offlo, u32 count)
|
||||
+compat_ssize_t compat_sys_readahead(int fd, u32 r4, u32 offset1, u32 offset2, u32 count)
|
||||
{
|
||||
- return ksys_readahead(fd, ((loff_t)offhi << 32) | offlo, count);
|
||||
+ return ksys_readahead(fd, merge_64(offset1, offset2), count);
|
||||
}
|
||||
|
||||
asmlinkage int compat_sys_truncate64(const char __user * path, u32 reg4,
|
||||
- unsigned long high, unsigned long low)
|
||||
+ unsigned long len1, unsigned long len2)
|
||||
{
|
||||
- return ksys_truncate(path, (high << 32) | low);
|
||||
+ return ksys_truncate(path, merge_64(len1, len2));
|
||||
}
|
||||
|
||||
-asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo,
|
||||
- u32 lenhi, u32 lenlo)
|
||||
+asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offset1, u32 offset2,
|
||||
+ u32 len1, u32 len2)
|
||||
{
|
||||
- return ksys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo,
|
||||
- ((loff_t)lenhi << 32) | lenlo);
|
||||
+ return ksys_fallocate(fd, mode, ((loff_t)offset1 << 32) | offset2,
|
||||
+ merge_64(len1, len2));
|
||||
}
|
||||
|
||||
-asmlinkage int compat_sys_ftruncate64(unsigned int fd, u32 reg4, unsigned long high,
|
||||
- unsigned long low)
|
||||
+asmlinkage int compat_sys_ftruncate64(unsigned int fd, u32 reg4, unsigned long len1,
|
||||
+ unsigned long len2)
|
||||
{
|
||||
- return ksys_ftruncate(fd, (high << 32) | low);
|
||||
+ return ksys_ftruncate(fd, merge_64(len1, len2));
|
||||
}
|
||||
|
||||
-long ppc32_fadvise64(int fd, u32 unused, u32 offset_high, u32 offset_low,
|
||||
+long ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2,
|
||||
size_t len, int advice)
|
||||
{
|
||||
- return ksys_fadvise64_64(fd, (u64)offset_high << 32 | offset_low, len,
|
||||
+ return ksys_fadvise64_64(fd, merge_64(offset1, offset2), len,
|
||||
advice);
|
||||
}
|
||||
|
||||
asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
|
||||
- unsigned offset_hi, unsigned offset_lo,
|
||||
- unsigned nbytes_hi, unsigned nbytes_lo)
|
||||
+ unsigned offset1, unsigned offset2,
|
||||
+ unsigned nbytes1, unsigned nbytes2)
|
||||
{
|
||||
- loff_t offset = ((loff_t)offset_hi << 32) | offset_lo;
|
||||
- loff_t nbytes = ((loff_t)nbytes_hi << 32) | nbytes_lo;
|
||||
+ loff_t offset = merge_64(offset1, offset2);
|
||||
+ loff_t nbytes = merge_64(nbytes1, nbytes2);
|
||||
|
||||
return ksys_sync_file_range(fd, offset, nbytes, flags);
|
||||
}
|
||||
@@ -1,347 +0,0 @@
|
||||
# Template file for 'linux5.4'
|
||||
pkgname=linux5.4
|
||||
version=5.4.296
|
||||
revision=1
|
||||
short_desc="Linux kernel and modules (${version%.*} series)"
|
||||
maintainer="Orphaned <orphan@voidlinux.org>"
|
||||
license="GPL-2.0-only"
|
||||
homepage="https://www.kernel.org"
|
||||
distfiles="https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${version%.*}.tar.xz
|
||||
https://cdn.kernel.org/pub/linux/kernel/v5.x/patch-${version}.xz"
|
||||
checksum="bf338980b1670bca287f9994b7441c2361907635879169c64ae78364efc5f491
|
||||
591b81c21dae43b06967bb68a329f285c30c7ef23919b245b9314c56a0debdf7"
|
||||
python_version=3
|
||||
skip_extraction="patch-${version}.xz"
|
||||
|
||||
nodebug=yes # -dbg package is generated below manually
|
||||
nostrip=yes
|
||||
noverifyrdeps=yes
|
||||
noshlibprovides=yes
|
||||
preserve=yes
|
||||
|
||||
archs="i686* x86_64* armv5tel* armv6l* armv7l* aarch64* ppc* mips*"
|
||||
hostmakedepends="tar xz bc elfutils-devel flex gmp-devel kmod libmpc-devel
|
||||
openssl-devel perl uboot-mkimage cpio"
|
||||
|
||||
_kernver="${version}_${revision}"
|
||||
triggers="kernel-hooks"
|
||||
kernel_hooks_version="${_kernver}"
|
||||
|
||||
|
||||
# These files could be modified when an external module is built.
|
||||
mutable_files="
|
||||
/usr/lib/modules/${_kernver}/modules.builtin.bin
|
||||
/usr/lib/modules/${_kernver}/modules.builtin.alias.bin
|
||||
/usr/lib/modules/${_kernver}/modules.softdep
|
||||
/usr/lib/modules/${_kernver}/modules.dep
|
||||
/usr/lib/modules/${_kernver}/modules.dep.bin
|
||||
/usr/lib/modules/${_kernver}/modules.symbols
|
||||
/usr/lib/modules/${_kernver}/modules.symbols.bin
|
||||
/usr/lib/modules/${_kernver}/modules.alias
|
||||
/usr/lib/modules/${_kernver}/modules.alias.bin
|
||||
/usr/lib/modules/${_kernver}/modules.devname"
|
||||
|
||||
# reproducible build
|
||||
export KBUILD_BUILD_TIMESTAMP=${SOURCE_DATE_EPOCH:-0}
|
||||
export KBUILD_BUILD_USER=voidlinux
|
||||
export KBUILD_BUILD_HOST=voidlinux
|
||||
|
||||
pre_patch() {
|
||||
xzcat $XBPS_SRCDISTDIR/$pkgname-$version/patch-${version}.xz |
|
||||
patch -sNp1 -F0
|
||||
}
|
||||
|
||||
do_configure() {
|
||||
# 5.4 misses Documentation/DocBook. We ship the directory from 4.12 here.
|
||||
cp -a $FILESDIR/DocBook -t Documentation
|
||||
|
||||
# If there's a file called <arch>-dotconfig, use it to
|
||||
# configure the kernel; otherwise use arch defaults and all stuff
|
||||
# as modules (allmodconfig).
|
||||
local arch subarch _args
|
||||
|
||||
case "$XBPS_TARGET_MACHINE" in
|
||||
i686*) arch=i386;;
|
||||
x86_64*) arch=x86_64;;
|
||||
arm*) arch=arm;;
|
||||
aarch64*) arch=arm64;;
|
||||
ppc64le*) arch=powerpc; subarch=ppc64le;;
|
||||
ppc64*) arch=powerpc; subarch=ppc64;;
|
||||
ppc*) arch=powerpc;;
|
||||
mips*) arch=mips;;
|
||||
esac
|
||||
|
||||
if [ "$CROSS_BUILD" ]; then
|
||||
_args="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
||||
fi
|
||||
|
||||
if [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom ]; then
|
||||
msg_normal "Detected a custom .config file for your arch, using it.\n"
|
||||
cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom .config
|
||||
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
||||
elif [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig ]; then
|
||||
msg_normal "Detected a .config file for your arch, using it.\n"
|
||||
cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig .config
|
||||
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
||||
elif [ -f ${FILESDIR}/${XBPS_TARGET_MACHINE%%-musl}-dotconfig ]; then
|
||||
msg_normal "Detected a .config file for your cpu family, using it.\n"
|
||||
cp -f ${FILESDIR}/${XBPS_TARGET_MACHINE%%-musl}-dotconfig .config
|
||||
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
||||
else
|
||||
msg_normal "Defaulting to 'allmodconfig'.\n"
|
||||
make ${makejobs} ARCH=$arch ${_args} allmodconfig
|
||||
fi
|
||||
# Always use our revision to CONFIG_LOCALVERSION to match our pkg version.
|
||||
sed -i -e "s|^\(CONFIG_LOCALVERSION=\).*|\1\"_${revision}\"|" .config
|
||||
}
|
||||
|
||||
do_build() {
|
||||
local arch _cross _args
|
||||
|
||||
case "$XBPS_TARGET_MACHINE" in
|
||||
i686*) _args="bzImage modules"; arch=i386;;
|
||||
x86_64*) _args="bzImage modules"; arch=x86_64;;
|
||||
arm*) _args="zImage modules dtbs"; arch=arm;;
|
||||
aarch64*) _args="Image modules dtbs"; arch=arm64;;
|
||||
ppc*) _args="zImage modules"; arch=powerpc;;
|
||||
mips*) _args="uImage modules dtbs"; arch=mips;;
|
||||
esac
|
||||
if [ "$CROSS_BUILD" ]; then
|
||||
_cross="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
||||
fi
|
||||
if [ "${_patchver}" ]; then
|
||||
_version="EXTRAVERSION=${_patchver}"
|
||||
fi
|
||||
export LDFLAGS=
|
||||
make ARCH=$arch ${_version} ${_cross} ${makejobs} prepare
|
||||
make ARCH=$arch ${_version} ${_cross} ${makejobs} ${_args}
|
||||
}
|
||||
|
||||
do_install() {
|
||||
local arch subarch _args hdrdest
|
||||
|
||||
case "$XBPS_TARGET_MACHINE" in
|
||||
i686*) arch=x86; subarch=i386;;
|
||||
x86_64*) arch=x86; subarch=x86_64;;
|
||||
arm*) arch=arm;;
|
||||
aarch64*) arch=arm64;;
|
||||
ppc*) arch=powerpc;;
|
||||
mips*) arch=mips;;
|
||||
esac
|
||||
|
||||
# Run depmod after compressing modules.
|
||||
sed -i '2iexit 0' scripts/depmod.sh
|
||||
|
||||
# Install kernel, firmware and modules
|
||||
make ${makejobs} ARCH=${subarch:-$arch} INSTALL_MOD_PATH=${DESTDIR} modules_install
|
||||
|
||||
hdrdest=${DESTDIR}/usr/src/kernel-headers-${_kernver}
|
||||
|
||||
vinstall .config 644 boot config-${_kernver}
|
||||
vinstall System.map 644 boot System.map-${_kernver}
|
||||
|
||||
case "$arch" in
|
||||
x86)
|
||||
vinstall arch/x86/boot/bzImage 644 boot vmlinuz-${_kernver}
|
||||
;;
|
||||
arm)
|
||||
vinstall arch/arm/boot/zImage 644 boot
|
||||
make ${makejobs} ARCH=${subarch:-$arch} INSTALL_DTBS_PATH=${DESTDIR}/boot/dtbs/dtbs-${_kernver} dtbs_install
|
||||
;;
|
||||
arm64)
|
||||
vinstall arch/arm64/boot/Image 644 boot vmlinux-${_kernver}
|
||||
make ${makejobs} ARCH=${subarch:-$arch} INSTALL_DTBS_PATH=${DESTDIR}/boot/dtbs/dtbs-${_kernver} dtbs_install
|
||||
;;
|
||||
powerpc)
|
||||
# zImage on powerpc is useless as it won't load initramfs
|
||||
# raw vmlinux is huge, and this is nostrip, so do it manually
|
||||
vinstall vmlinux 644 boot vmlinux-${_kernver}
|
||||
/usr/bin/$STRIP ${DESTDIR}/boot/vmlinux-${_kernver}
|
||||
;;
|
||||
mips)
|
||||
vinstall arch/mips/boot/uImage.bin 644 boot uImage-${_kernver}
|
||||
make ${makejobs} ARCH=${subarch:-$arch} INSTALL_DTBS_PATH=${DESTDIR}/boot/dtbs/dtbs-${_kernver} dtbs_install
|
||||
;;
|
||||
esac
|
||||
|
||||
# Switch to /usr.
|
||||
vmkdir usr
|
||||
mv ${DESTDIR}/lib ${DESTDIR}/usr
|
||||
|
||||
cd ${DESTDIR}/usr/lib/modules/${_kernver}
|
||||
rm -f source build
|
||||
ln -sf ../../../src/kernel-headers-${_kernver} build
|
||||
|
||||
cd ${wrksrc}
|
||||
# Install required headers to build external modules
|
||||
install -Dm644 Makefile ${hdrdest}/Makefile
|
||||
install -Dm644 kernel/Makefile ${hdrdest}/kernel/Makefile
|
||||
install -Dm644 .config ${hdrdest}/.config
|
||||
for file in $(find . -name Kconfig\*); do
|
||||
mkdir -p ${hdrdest}/$(dirname $file)
|
||||
install -Dm644 $file ${hdrdest}/${file}
|
||||
done
|
||||
for file in $(find arch/${subarch:-$arch} -name module.lds -o -name Kbuild.platforms -o -name Platform); do
|
||||
mkdir -p ${hdrdest}/$(dirname $file)
|
||||
install -Dm644 $file ${hdrdest}/${file}
|
||||
done
|
||||
mkdir -p ${hdrdest}/include
|
||||
# Remove firmware stuff provided by the "linux-firmware" pkg.
|
||||
rm -rf ${DESTDIR}/usr/lib/firmware
|
||||
|
||||
for i in acpi asm-generic clocksource config crypto drm generated linux \
|
||||
math-emu media net pcmcia scsi sound trace uapi video xen dt-bindings; do
|
||||
if [ -d include/$i ]; then
|
||||
cp -a include/$i ${hdrdest}/include
|
||||
fi
|
||||
done
|
||||
|
||||
cd ${wrksrc}
|
||||
mkdir -p ${hdrdest}/arch/${arch}
|
||||
cp -a arch/${arch}/include ${hdrdest}/arch/${arch}
|
||||
|
||||
# Remove helper binaries built for host,
|
||||
# if generated files from the scripts/ directory need to be included,
|
||||
# they need to be copied to ${hdrdest} before this step
|
||||
if [ "$CROSS_BUILD" ]; then
|
||||
make ${makejobs} ARCH=${subarch:-$arch} _mrproper_scripts
|
||||
# remove host specific objects as well
|
||||
find scripts -name '*.o' -delete
|
||||
fi
|
||||
|
||||
# Copy files necessary for later builds, like nvidia and vmware
|
||||
cp Module.symvers ${hdrdest}
|
||||
cp -a scripts ${hdrdest}
|
||||
mkdir -p ${hdrdest}/security/selinux
|
||||
cp -a security/selinux/include ${hdrdest}/security/selinux
|
||||
mkdir -p ${hdrdest}/tools/include
|
||||
cp -a tools/include/tools ${hdrdest}/tools/include
|
||||
|
||||
mkdir -p ${hdrdest}/arch/${arch}/kernel
|
||||
cp arch/${arch}/Makefile ${hdrdest}/arch/${arch}
|
||||
if [ "$subarch" = "i386" ]; then
|
||||
mkdir -p ${hdrdest}/arch/x86
|
||||
cp arch/x86/Makefile_32.cpu ${hdrdest}/arch/x86
|
||||
fi
|
||||
if [ "$arch" = "x86" ]; then
|
||||
mkdir -p ${hdrdest}/arch/x86/kernel
|
||||
cp arch/x86/kernel/asm-offsets.s ${hdrdest}/arch/x86/kernel
|
||||
elif [ "$arch" = "arm64" ]; then
|
||||
mkdir -p ${hdrdest}/arch/arm64/kernel
|
||||
cp -a arch/arm64/kernel/vdso ${hdrdest}/arch/arm64/kernel/
|
||||
fi
|
||||
|
||||
# add headers for lirc package
|
||||
# pci
|
||||
for i in bt8xx cx88 saa7134; do
|
||||
mkdir -p ${hdrdest}/drivers/media/pci/${i}
|
||||
cp -a drivers/media/pci/${i}/*.h ${hdrdest}/drivers/media/pci/${i}
|
||||
done
|
||||
# usb
|
||||
for i in cpia2 em28xx pwc; do
|
||||
mkdir -p ${hdrdest}/drivers/media/usb/${i}
|
||||
cp -a drivers/media/usb/${i}/*.h ${hdrdest}/drivers/media/usb/${i}
|
||||
done
|
||||
# i2c
|
||||
mkdir -p ${hdrdest}/drivers/media/i2c
|
||||
cp drivers/media/i2c/*.h ${hdrdest}/drivers/media/i2c
|
||||
for i in cx25840; do
|
||||
mkdir -p ${hdrdest}/drivers/media/i2c/${i}
|
||||
cp -a drivers/media/i2c/${i}/*.h ${hdrdest}/drivers/media/i2c/${i}
|
||||
done
|
||||
|
||||
# Add docbook makefile
|
||||
install -Dm644 Documentation/DocBook/Makefile \
|
||||
${hdrdest}/Documentation/DocBook/Makefile
|
||||
|
||||
# Add md headers
|
||||
mkdir -p ${hdrdest}/drivers/md
|
||||
cp drivers/md/*.h ${hdrdest}/drivers/md
|
||||
|
||||
# Add inotify.h
|
||||
mkdir -p ${hdrdest}/include/linux
|
||||
cp include/linux/inotify.h ${hdrdest}/include/linux
|
||||
|
||||
# Add wireless headers
|
||||
mkdir -p ${hdrdest}/net/mac80211/
|
||||
cp net/mac80211/*.h ${hdrdest}/net/mac80211
|
||||
|
||||
# add dvb headers for external modules
|
||||
mkdir -p ${hdrdest}/include/config/dvb/
|
||||
cp include/config/dvb/*.h ${hdrdest}/include/config/dvb/
|
||||
|
||||
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
|
||||
mkdir -p ${hdrdest}/drivers/media/dvb-frontends
|
||||
cp drivers/media/dvb-frontends/lgdt330x.h \
|
||||
${hdrdest}/drivers/media/dvb-frontends/
|
||||
cp drivers/media/i2c/msp3400-driver.h ${hdrdest}/drivers/media/i2c/
|
||||
|
||||
# add dvb headers
|
||||
mkdir -p ${hdrdest}/drivers/media/usb/dvb-usb
|
||||
cp drivers/media/usb/dvb-usb/*.h ${hdrdest}/drivers/media/usb/dvb-usb/
|
||||
mkdir -p ${hdrdest}/drivers/media/dvb-frontends
|
||||
cp drivers/media/dvb-frontends/*.h ${hdrdest}/drivers/media/dvb-frontends/
|
||||
mkdir -p ${hdrdest}/drivers/media/tuners
|
||||
cp drivers/media/tuners/*.h ${hdrdest}/drivers/media/tuners/
|
||||
|
||||
# Add xfs and shmem for aufs building
|
||||
mkdir -p ${hdrdest}/fs/xfs/libxfs
|
||||
mkdir -p ${hdrdest}/mm
|
||||
cp fs/xfs/libxfs/xfs_sb.h ${hdrdest}/fs/xfs/libxfs/xfs_sb.h
|
||||
|
||||
# Add objtool binary, needed to build external modules with dkms
|
||||
case "$XBPS_TARGET_MACHINE" in
|
||||
x86_64*)
|
||||
mkdir -p ${hdrdest}/tools/objtool
|
||||
cp tools/objtool/objtool ${hdrdest}/tools/objtool
|
||||
;;
|
||||
esac
|
||||
|
||||
# Remove unneeded architectures
|
||||
case "$arch" in
|
||||
i386|x86_64) _args="arm* p*";;
|
||||
arm|arm64) _args="x86* p*";;
|
||||
powerpc) _args="arm* x86* parisc";;
|
||||
esac
|
||||
for arch in alpha avr32 blackfin cris frv h8300 \
|
||||
ia64 m* s* um v850 xtensa ${_args}; do
|
||||
rm -rf ${hdrdest}/arch/${arch}
|
||||
done
|
||||
# Keep arch/x86/ras/Kconfig as it is needed by drivers/ras/Kconfig
|
||||
mkdir -p ${hdrdest}/arch/x86/ras
|
||||
cp -a arch/x86/ras/Kconfig ${hdrdest}/arch/x86/ras/Kconfig
|
||||
|
||||
# Extract debugging symbols and compress modules
|
||||
msg_normal "$pkgver: extracting debug info and compressing modules, please wait...\n"
|
||||
install -Dm644 vmlinux ${DESTDIR}/usr/lib/debug/boot/vmlinux-${_kernver}
|
||||
(
|
||||
cd ${DESTDIR}
|
||||
export DESTDIR
|
||||
find ./ -name '*.ko' -print0 | \
|
||||
xargs -0r -n1 -P ${XBPS_MAKEJOBS} ${FILESDIR}/mv-debug
|
||||
)
|
||||
# ... and run depmod again.
|
||||
depmod -b ${DESTDIR}/usr -F System.map ${_kernver}
|
||||
}
|
||||
linux5.4-headers_package() {
|
||||
preserve=yes
|
||||
nostrip=yes
|
||||
noshlibprovides=yes
|
||||
short_desc+=" - source headers for 3rd party modules"
|
||||
pkg_install() {
|
||||
vmove usr/src
|
||||
vmove usr/lib/modules/${_kernver}/build
|
||||
}
|
||||
}
|
||||
linux5.4-dbg_package() {
|
||||
preserve=yes
|
||||
nostrip=yes
|
||||
noverifyrdeps=yes
|
||||
noshlibprovides=yes
|
||||
repository=debug
|
||||
short_desc+=" - debugging symbols"
|
||||
pkg_install() {
|
||||
vmove usr/lib/debug
|
||||
vmove "boot/System.map-${_kernver}"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user