sync with OpenBSD -current
This commit is contained in:
parent
ed26f93d8c
commit
9fbd947ba3
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: by_file.c,v 1.28 2023/02/16 08:38:17 tb Exp $ */
|
/* $OpenBSD: by_file.c,v 1.29 2023/11/30 17:01:04 beck Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@ -95,28 +95,22 @@ static int
|
|||||||
by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
|
by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
|
||||||
char **ret)
|
char **ret)
|
||||||
{
|
{
|
||||||
int ok = 0;
|
const char *file = argp;
|
||||||
|
int type = argl;
|
||||||
|
|
||||||
|
if (cmd != X509_L_FILE_LOAD)
|
||||||
|
return 0;
|
||||||
|
|
||||||
switch (cmd) {
|
|
||||||
case X509_L_FILE_LOAD:
|
|
||||||
if (argl == X509_FILETYPE_DEFAULT) {
|
if (argl == X509_FILETYPE_DEFAULT) {
|
||||||
ok = (X509_load_cert_crl_file(ctx,
|
file = X509_get_default_cert_file();
|
||||||
X509_get_default_cert_file(),
|
type = X509_FILETYPE_PEM;
|
||||||
X509_FILETYPE_PEM) != 0);
|
}
|
||||||
if (!ok) {
|
if (X509_load_cert_crl_file(ctx, file, type) != 0)
|
||||||
|
return 1;
|
||||||
|
if (argl == X509_FILETYPE_DEFAULT)
|
||||||
X509error(X509_R_LOADING_DEFAULTS);
|
X509error(X509_R_LOADING_DEFAULTS);
|
||||||
}
|
|
||||||
} else {
|
return 0;
|
||||||
if (argl == X509_FILETYPE_PEM)
|
|
||||||
ok = (X509_load_cert_crl_file(ctx, argp,
|
|
||||||
X509_FILETYPE_PEM) != 0);
|
|
||||||
else
|
|
||||||
ok = (X509_load_cert_file(ctx,
|
|
||||||
argp, (int)argl) != 0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: hidkbd.c,v 1.10 2023/11/22 18:19:25 tobhe Exp $ */
|
/* $OpenBSD: hidkbd.c,v 1.11 2023/11/30 12:50:41 miod Exp $ */
|
||||||
/* $NetBSD: ukbd.c,v 1.85 2003/03/11 16:44:00 augustss Exp $ */
|
/* $NetBSD: ukbd.c,v 1.85 2003/03/11 16:44:00 augustss Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -421,8 +421,11 @@ hidkbd_input(struct hidkbd *kbd, uint8_t *data, u_int len)
|
|||||||
&kbd->sc_var[i].loc);
|
&kbd->sc_var[i].loc);
|
||||||
|
|
||||||
/* extract keycodes */
|
/* extract keycodes */
|
||||||
|
if (kbd->sc_keycodeloc.pos / 8 + kbd->sc_nkeycode <= len)
|
||||||
memcpy(ud->keycode, data + kbd->sc_keycodeloc.pos / 8,
|
memcpy(ud->keycode, data + kbd->sc_keycodeloc.pos / 8,
|
||||||
kbd->sc_nkeycode);
|
kbd->sc_nkeycode);
|
||||||
|
else
|
||||||
|
memset(ud->keycode, 0, kbd->sc_nkeycode);
|
||||||
|
|
||||||
if (kbd->sc_debounce && !kbd->sc_polling) {
|
if (kbd->sc_debounce && !kbd->sc_polling) {
|
||||||
/*
|
/*
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
|
|
||||||
|
#include <linux/device.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
@ -406,6 +407,10 @@ static bool amdgpu_atrm_get_bios(struct amdgpu_device *adev)
|
|||||||
if (adev->flags & AMD_IS_APU)
|
if (adev->flags & AMD_IS_APU)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/* ATRM is for on-platform devices only */
|
||||||
|
if (dev_is_removable(&adev->pdev->dev))
|
||||||
|
return false;
|
||||||
|
|
||||||
#ifdef notyet
|
#ifdef notyet
|
||||||
while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
|
while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
|
||||||
dhandle = ACPI_HANDLE(&pdev->dev);
|
dhandle = ACPI_HANDLE(&pdev->dev);
|
||||||
|
@ -183,6 +183,7 @@ int amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
*result = NULL;
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1393,7 +1393,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
|
|||||||
if (r == -ENOMEM)
|
if (r == -ENOMEM)
|
||||||
DRM_ERROR("Not enough memory for command submission!\n");
|
DRM_ERROR("Not enough memory for command submission!\n");
|
||||||
else if (r != -ERESTARTSYS && r != -EAGAIN)
|
else if (r != -ERESTARTSYS && r != -EAGAIN)
|
||||||
DRM_ERROR("Failed to process the buffer list %d!\n", r);
|
DRM_DEBUG("Failed to process the buffer list %d!\n", r);
|
||||||
goto error_fini;
|
goto error_fini;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -589,6 +589,9 @@ static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf,
|
|||||||
ssize_t result = 0;
|
ssize_t result = 0;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
if (!adev->smc_rreg)
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
if (size & 0x3 || *pos & 0x3)
|
if (size & 0x3 || *pos & 0x3)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -645,6 +648,9 @@ static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *
|
|||||||
ssize_t result = 0;
|
ssize_t result = 0;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
if (!adev->smc_wreg)
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
if (size & 0x3 || *pos & 0x3)
|
if (size & 0x3 || *pos & 0x3)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include <drm/drm_atomic_helper.h>
|
#include <drm/drm_atomic_helper.h>
|
||||||
#include <drm/drm_probe_helper.h>
|
#include <drm/drm_probe_helper.h>
|
||||||
#include <drm/amdgpu_drm.h>
|
#include <drm/amdgpu_drm.h>
|
||||||
|
#include <linux/device.h>
|
||||||
#include <linux/vgaarb.h>
|
#include <linux/vgaarb.h>
|
||||||
#include <linux/vga_switcheroo.h>
|
#include <linux/vga_switcheroo.h>
|
||||||
#include <linux/efi.h>
|
#include <linux/efi.h>
|
||||||
@ -2141,7 +2142,6 @@ out:
|
|||||||
*/
|
*/
|
||||||
static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)
|
static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = adev_to_drm(adev);
|
|
||||||
struct pci_dev *parent;
|
struct pci_dev *parent;
|
||||||
int i, r;
|
int i, r;
|
||||||
|
|
||||||
@ -2211,7 +2211,7 @@ static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)
|
|||||||
(amdgpu_is_atpx_hybrid() ||
|
(amdgpu_is_atpx_hybrid() ||
|
||||||
amdgpu_has_atpx_dgpu_power_cntl()) &&
|
amdgpu_has_atpx_dgpu_power_cntl()) &&
|
||||||
((adev->flags & AMD_IS_APU) == 0) &&
|
((adev->flags & AMD_IS_APU) == 0) &&
|
||||||
!pci_is_thunderbolt_attached(dev->pdev))
|
!dev_is_removable(&adev->pdev->dev))
|
||||||
adev->flags |= AMD_IS_PX;
|
adev->flags |= AMD_IS_PX;
|
||||||
|
|
||||||
if (!(adev->flags & AMD_IS_APU)) {
|
if (!(adev->flags & AMD_IS_APU)) {
|
||||||
@ -4064,7 +4064,7 @@ fence_driver_init:
|
|||||||
|
|
||||||
px = amdgpu_device_supports_px(ddev);
|
px = amdgpu_device_supports_px(ddev);
|
||||||
|
|
||||||
if (px || (!pci_is_thunderbolt_attached(adev->pdev) &&
|
if (px || (!dev_is_removable(&adev->pdev->dev) &&
|
||||||
apple_gmux_detect(NULL, NULL)))
|
apple_gmux_detect(NULL, NULL)))
|
||||||
vga_switcheroo_register_client(adev->pdev,
|
vga_switcheroo_register_client(adev->pdev,
|
||||||
&amdgpu_switcheroo_ops, px);
|
&amdgpu_switcheroo_ops, px);
|
||||||
@ -4231,7 +4231,7 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)
|
|||||||
|
|
||||||
px = amdgpu_device_supports_px(adev_to_drm(adev));
|
px = amdgpu_device_supports_px(adev_to_drm(adev));
|
||||||
|
|
||||||
if (px || (!pci_is_thunderbolt_attached(adev->pdev) &&
|
if (px || (!dev_is_removable(&adev->pdev->dev) &&
|
||||||
apple_gmux_detect(NULL, NULL)))
|
apple_gmux_detect(NULL, NULL)))
|
||||||
vga_switcheroo_unregister_client(adev->pdev);
|
vga_switcheroo_unregister_client(adev->pdev);
|
||||||
|
|
||||||
@ -5466,7 +5466,8 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
|
|||||||
* Flush RAM to disk so that after reboot
|
* Flush RAM to disk so that after reboot
|
||||||
* the user can read log and see why the system rebooted.
|
* the user can read log and see why the system rebooted.
|
||||||
*/
|
*/
|
||||||
if (need_emergency_restart && amdgpu_ras_get_context(adev)->reboot) {
|
if (need_emergency_restart && amdgpu_ras_get_context(adev) &&
|
||||||
|
amdgpu_ras_get_context(adev)->reboot) {
|
||||||
DRM_WARN("Emergency reboot.");
|
DRM_WARN("Emergency reboot.");
|
||||||
|
|
||||||
#ifdef notyet
|
#ifdef notyet
|
||||||
|
@ -1278,6 +1278,7 @@ static void amdgpu_ras_sysfs_remove_bad_page_node(struct amdgpu_device *adev)
|
|||||||
{
|
{
|
||||||
struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
|
struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
|
||||||
|
|
||||||
|
if (adev->dev->kobj.sd)
|
||||||
sysfs_remove_file_from_group(&adev->dev->kobj,
|
sysfs_remove_file_from_group(&adev->dev->kobj,
|
||||||
&con->badpages_attr.attr,
|
&con->badpages_attr.attr,
|
||||||
RAS_FS_NAME);
|
RAS_FS_NAME);
|
||||||
@ -1295,6 +1296,7 @@ static int amdgpu_ras_sysfs_remove_feature_node(struct amdgpu_device *adev)
|
|||||||
.attrs = attrs,
|
.attrs = attrs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (adev->dev->kobj.sd)
|
||||||
sysfs_remove_group(&adev->dev->kobj, &group);
|
sysfs_remove_group(&adev->dev->kobj, &group);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1348,9 +1350,12 @@ int amdgpu_ras_sysfs_remove(struct amdgpu_device *adev,
|
|||||||
if (!obj || !obj->attr_inuse)
|
if (!obj || !obj->attr_inuse)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
if (adev->dev->kobj.sd)
|
||||||
sysfs_remove_file_from_group(&adev->dev->kobj,
|
sysfs_remove_file_from_group(&adev->dev->kobj,
|
||||||
&obj->sysfs_attr.attr,
|
&obj->sysfs_attr.attr,
|
||||||
RAS_FS_NAME);
|
RAS_FS_NAME);
|
||||||
|
#endif
|
||||||
obj->attr_inuse = 0;
|
obj->attr_inuse = 0;
|
||||||
put_obj(obj);
|
put_obj(obj);
|
||||||
|
|
||||||
|
@ -393,8 +393,15 @@ int amdgpu_vcn_suspend(struct amdgpu_device *adev)
|
|||||||
void *ptr;
|
void *ptr;
|
||||||
int i, idx;
|
int i, idx;
|
||||||
|
|
||||||
|
bool in_ras_intr = amdgpu_ras_intr_triggered();
|
||||||
|
|
||||||
cancel_delayed_work_sync(&adev->vcn.idle_work);
|
cancel_delayed_work_sync(&adev->vcn.idle_work);
|
||||||
|
|
||||||
|
/* err_event_athub will corrupt VCPU buffer, so we need to
|
||||||
|
* restore fw data and clear buffer in amdgpu_vcn_resume() */
|
||||||
|
if (in_ras_intr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
|
for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
|
||||||
if (adev->vcn.harvest_config & (1 << i))
|
if (adev->vcn.harvest_config & (1 << i))
|
||||||
continue;
|
continue;
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "nbio/nbio_2_3_offset.h"
|
#include "nbio/nbio_2_3_offset.h"
|
||||||
#include "nbio/nbio_2_3_sh_mask.h"
|
#include "nbio/nbio_2_3_sh_mask.h"
|
||||||
#include <uapi/linux/kfd_ioctl.h>
|
#include <uapi/linux/kfd_ioctl.h>
|
||||||
|
#include <linux/device.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
|
||||||
#define smnPCIE_CONFIG_CNTL 0x11180044
|
#define smnPCIE_CONFIG_CNTL 0x11180044
|
||||||
@ -361,7 +362,7 @@ static void nbio_v2_3_enable_aspm(struct amdgpu_device *adev,
|
|||||||
|
|
||||||
data |= NAVI10_PCIE__LC_L0S_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L0S_INACTIVITY__SHIFT;
|
data |= NAVI10_PCIE__LC_L0S_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L0S_INACTIVITY__SHIFT;
|
||||||
|
|
||||||
if (pci_is_thunderbolt_attached(adev->pdev))
|
if (dev_is_removable(&adev->pdev->dev))
|
||||||
data |= NAVI10_PCIE__LC_L1_INACTIVITY_TBT_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
data |= NAVI10_PCIE__LC_L1_INACTIVITY_TBT_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
||||||
else
|
else
|
||||||
data |= NAVI10_PCIE__LC_L1_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
data |= NAVI10_PCIE__LC_L1_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
||||||
@ -480,7 +481,7 @@ static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)
|
|||||||
|
|
||||||
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
||||||
data |= NAVI10_PCIE__LC_L0S_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L0S_INACTIVITY__SHIFT;
|
data |= NAVI10_PCIE__LC_L0S_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L0S_INACTIVITY__SHIFT;
|
||||||
if (pci_is_thunderbolt_attached(adev->pdev))
|
if (dev_is_removable(&adev->pdev->dev))
|
||||||
data |= NAVI10_PCIE__LC_L1_INACTIVITY_TBT_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
data |= NAVI10_PCIE__LC_L1_INACTIVITY_TBT_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
||||||
else
|
else
|
||||||
data |= NAVI10_PCIE__LC_L1_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
data |= NAVI10_PCIE__LC_L1_INACTIVITY_DEFAULT << PCIE_LC_CNTL__LC_L1_INACTIVITY__SHIFT;
|
||||||
|
@ -612,8 +612,15 @@ create_bo_failed:
|
|||||||
|
|
||||||
void svm_range_vram_node_free(struct svm_range *prange)
|
void svm_range_vram_node_free(struct svm_range *prange)
|
||||||
{
|
{
|
||||||
svm_range_bo_unref(prange->svm_bo);
|
/* serialize prange->svm_bo unref */
|
||||||
|
mutex_lock(&prange->lock);
|
||||||
|
/* prange->svm_bo has not been unref */
|
||||||
|
if (prange->ttm_res) {
|
||||||
prange->ttm_res = NULL;
|
prange->ttm_res = NULL;
|
||||||
|
mutex_unlock(&prange->lock);
|
||||||
|
svm_range_bo_unref(prange->svm_bo);
|
||||||
|
} else
|
||||||
|
mutex_unlock(&prange->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct amdgpu_device *
|
struct amdgpu_device *
|
||||||
@ -757,7 +764,7 @@ svm_range_apply_attrs(struct kfd_process *p, struct svm_range *prange,
|
|||||||
prange->flags &= ~attrs[i].value;
|
prange->flags &= ~attrs[i].value;
|
||||||
break;
|
break;
|
||||||
case KFD_IOCTL_SVM_ATTR_GRANULARITY:
|
case KFD_IOCTL_SVM_ATTR_GRANULARITY:
|
||||||
prange->granularity = attrs[i].value;
|
prange->granularity = min_t(uint32_t, attrs[i].value, 0x3F);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
WARN_ONCE(1, "svm_range_check_attrs wasn't called?");
|
WARN_ONCE(1, "svm_range_check_attrs wasn't called?");
|
||||||
|
@ -2059,7 +2059,7 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
|
|||||||
struct dmub_srv_create_params create_params;
|
struct dmub_srv_create_params create_params;
|
||||||
struct dmub_srv_region_params region_params;
|
struct dmub_srv_region_params region_params;
|
||||||
struct dmub_srv_region_info region_info;
|
struct dmub_srv_region_info region_info;
|
||||||
struct dmub_srv_fb_params fb_params;
|
struct dmub_srv_memory_params memory_params;
|
||||||
struct dmub_srv_fb_info *fb_info;
|
struct dmub_srv_fb_info *fb_info;
|
||||||
struct dmub_srv *dmub_srv;
|
struct dmub_srv *dmub_srv;
|
||||||
const struct dmcub_firmware_header_v1_0 *hdr;
|
const struct dmcub_firmware_header_v1_0 *hdr;
|
||||||
@ -2190,6 +2190,7 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
|
|||||||
adev->dm.dmub_fw->data +
|
adev->dm.dmub_fw->data +
|
||||||
le32_to_cpu(hdr->header.ucode_array_offset_bytes) +
|
le32_to_cpu(hdr->header.ucode_array_offset_bytes) +
|
||||||
PSP_HEADER_BYTES;
|
PSP_HEADER_BYTES;
|
||||||
|
region_params.is_mailbox_in_inbox = false;
|
||||||
|
|
||||||
status = dmub_srv_calc_region_info(dmub_srv, ®ion_params,
|
status = dmub_srv_calc_region_info(dmub_srv, ®ion_params,
|
||||||
®ion_info);
|
®ion_info);
|
||||||
@ -2211,10 +2212,10 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
|
|||||||
return r;
|
return r;
|
||||||
|
|
||||||
/* Rebase the regions on the framebuffer address. */
|
/* Rebase the regions on the framebuffer address. */
|
||||||
memset(&fb_params, 0, sizeof(fb_params));
|
memset(&memory_params, 0, sizeof(memory_params));
|
||||||
fb_params.cpu_addr = adev->dm.dmub_bo_cpu_addr;
|
memory_params.cpu_fb_addr = adev->dm.dmub_bo_cpu_addr;
|
||||||
fb_params.gpu_addr = adev->dm.dmub_bo_gpu_addr;
|
memory_params.gpu_fb_addr = adev->dm.dmub_bo_gpu_addr;
|
||||||
fb_params.region_info = ®ion_info;
|
memory_params.region_info = ®ion_info;
|
||||||
|
|
||||||
adev->dm.dmub_fb_info =
|
adev->dm.dmub_fb_info =
|
||||||
kzalloc(sizeof(*adev->dm.dmub_fb_info), GFP_KERNEL);
|
kzalloc(sizeof(*adev->dm.dmub_fb_info), GFP_KERNEL);
|
||||||
@ -2226,7 +2227,7 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = dmub_srv_calc_fb_info(dmub_srv, &fb_params, fb_info);
|
status = dmub_srv_calc_mem_info(dmub_srv, &memory_params, fb_info);
|
||||||
if (status != DMUB_STATUS_OK) {
|
if (status != DMUB_STATUS_OK) {
|
||||||
DRM_ERROR("Error calculating DMUB FB info: %d\n", status);
|
DRM_ERROR("Error calculating DMUB FB info: %d\n", status);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -7221,6 +7222,9 @@ static int amdgpu_dm_i2c_xfer(struct i2c_adapter *i2c_adap,
|
|||||||
int i;
|
int i;
|
||||||
int result = -EIO;
|
int result = -EIO;
|
||||||
|
|
||||||
|
if (!ddc_service->ddc_pin || !ddc_service->ddc_pin->hw_info.hw_supported)
|
||||||
|
return result;
|
||||||
|
|
||||||
cmd.payloads = kcalloc(num, sizeof(struct i2c_payload), GFP_KERNEL);
|
cmd.payloads = kcalloc(num, sizeof(struct i2c_payload), GFP_KERNEL);
|
||||||
|
|
||||||
if (!cmd.payloads)
|
if (!cmd.payloads)
|
||||||
@ -9286,14 +9290,14 @@ static bool should_reset_plane(struct drm_atomic_state *state,
|
|||||||
struct drm_plane *other;
|
struct drm_plane *other;
|
||||||
struct drm_plane_state *old_other_state, *new_other_state;
|
struct drm_plane_state *old_other_state, *new_other_state;
|
||||||
struct drm_crtc_state *new_crtc_state;
|
struct drm_crtc_state *new_crtc_state;
|
||||||
|
struct amdgpu_device *adev = drm_to_adev(plane->dev);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO: Remove this hack once the checks below are sufficient
|
* TODO: Remove this hack for all asics once it proves that the
|
||||||
* enough to determine when we need to reset all the planes on
|
* fast updates works fine on DCN3.2+.
|
||||||
* the stream.
|
|
||||||
*/
|
*/
|
||||||
if (state->allow_modeset)
|
if (adev->ip_versions[DCE_HWIP][0] < IP_VERSION(3, 2, 0) && state->allow_modeset)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
/* Exit early if we know that we're adding or removing the plane. */
|
/* Exit early if we know that we're adding or removing the plane. */
|
||||||
|
@ -996,7 +996,8 @@ static bool dc_construct(struct dc *dc,
|
|||||||
/* set i2c speed if not done by the respective dcnxxx__resource.c */
|
/* set i2c speed if not done by the respective dcnxxx__resource.c */
|
||||||
if (dc->caps.i2c_speed_in_khz_hdcp == 0)
|
if (dc->caps.i2c_speed_in_khz_hdcp == 0)
|
||||||
dc->caps.i2c_speed_in_khz_hdcp = dc->caps.i2c_speed_in_khz;
|
dc->caps.i2c_speed_in_khz_hdcp = dc->caps.i2c_speed_in_khz;
|
||||||
|
if (dc->caps.max_optimizable_video_width == 0)
|
||||||
|
dc->caps.max_optimizable_video_width = 5120;
|
||||||
dc->clk_mgr = dc_clk_mgr_create(dc->ctx, dc->res_pool->pp_smu, dc->res_pool->dccg);
|
dc->clk_mgr = dc_clk_mgr_create(dc->ctx, dc->res_pool->pp_smu, dc->res_pool->dccg);
|
||||||
if (!dc->clk_mgr)
|
if (!dc->clk_mgr)
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -1805,7 +1806,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
|
|||||||
if (dc->hwss.subvp_pipe_control_lock)
|
if (dc->hwss.subvp_pipe_control_lock)
|
||||||
dc->hwss.subvp_pipe_control_lock(dc, context, true, true, NULL, subvp_prev_use);
|
dc->hwss.subvp_pipe_control_lock(dc, context, true, true, NULL, subvp_prev_use);
|
||||||
|
|
||||||
if (dc->debug.enable_double_buffered_dsc_pg_support)
|
if (dc->hwss.update_dsc_pg)
|
||||||
dc->hwss.update_dsc_pg(dc, context, false);
|
dc->hwss.update_dsc_pg(dc, context, false);
|
||||||
|
|
||||||
disable_dangling_plane(dc, context);
|
disable_dangling_plane(dc, context);
|
||||||
@ -1904,7 +1905,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
|
|||||||
dc->hwss.optimize_bandwidth(dc, context);
|
dc->hwss.optimize_bandwidth(dc, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dc->debug.enable_double_buffered_dsc_pg_support)
|
if (dc->hwss.update_dsc_pg)
|
||||||
dc->hwss.update_dsc_pg(dc, context, true);
|
dc->hwss.update_dsc_pg(dc, context, true);
|
||||||
|
|
||||||
if (dc->ctx->dce_version >= DCE_VERSION_MAX)
|
if (dc->ctx->dce_version >= DCE_VERSION_MAX)
|
||||||
@ -2192,7 +2193,7 @@ void dc_post_update_surfaces_to_stream(struct dc *dc)
|
|||||||
|
|
||||||
dc->hwss.optimize_bandwidth(dc, context);
|
dc->hwss.optimize_bandwidth(dc, context);
|
||||||
|
|
||||||
if (dc->debug.enable_double_buffered_dsc_pg_support)
|
if (dc->hwss.update_dsc_pg)
|
||||||
dc->hwss.update_dsc_pg(dc, context, true);
|
dc->hwss.update_dsc_pg(dc, context, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2438,6 +2439,7 @@ static enum surface_update_type get_plane_info_update_type(const struct dc_surfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
static enum surface_update_type get_scaling_info_update_type(
|
static enum surface_update_type get_scaling_info_update_type(
|
||||||
|
const struct dc *dc,
|
||||||
const struct dc_surface_update *u)
|
const struct dc_surface_update *u)
|
||||||
{
|
{
|
||||||
union surface_update_flags *update_flags = &u->surface->update_flags;
|
union surface_update_flags *update_flags = &u->surface->update_flags;
|
||||||
@ -2472,6 +2474,12 @@ static enum surface_update_type get_scaling_info_update_type(
|
|||||||
update_flags->bits.clock_change = 1;
|
update_flags->bits.clock_change = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (u->scaling_info->src_rect.width > dc->caps.max_optimizable_video_width &&
|
||||||
|
(u->scaling_info->clip_rect.width > u->surface->clip_rect.width ||
|
||||||
|
u->scaling_info->clip_rect.height > u->surface->clip_rect.height))
|
||||||
|
/* Changing clip size of a large surface may result in MPC slice count change */
|
||||||
|
update_flags->bits.bandwidth_change = 1;
|
||||||
|
|
||||||
if (u->scaling_info->src_rect.x != u->surface->src_rect.x
|
if (u->scaling_info->src_rect.x != u->surface->src_rect.x
|
||||||
|| u->scaling_info->src_rect.y != u->surface->src_rect.y
|
|| u->scaling_info->src_rect.y != u->surface->src_rect.y
|
||||||
|| u->scaling_info->clip_rect.x != u->surface->clip_rect.x
|
|| u->scaling_info->clip_rect.x != u->surface->clip_rect.x
|
||||||
@ -2509,7 +2517,7 @@ static enum surface_update_type det_surface_update(const struct dc *dc,
|
|||||||
type = get_plane_info_update_type(u);
|
type = get_plane_info_update_type(u);
|
||||||
elevate_update_type(&overall_type, type);
|
elevate_update_type(&overall_type, type);
|
||||||
|
|
||||||
type = get_scaling_info_update_type(u);
|
type = get_scaling_info_update_type(dc, u);
|
||||||
elevate_update_type(&overall_type, type);
|
elevate_update_type(&overall_type, type);
|
||||||
|
|
||||||
if (u->flip_addr) {
|
if (u->flip_addr) {
|
||||||
@ -3445,7 +3453,7 @@ static void commit_planes_for_stream(struct dc *dc,
|
|||||||
if (get_seamless_boot_stream_count(context) == 0)
|
if (get_seamless_boot_stream_count(context) == 0)
|
||||||
dc->hwss.prepare_bandwidth(dc, context);
|
dc->hwss.prepare_bandwidth(dc, context);
|
||||||
|
|
||||||
if (dc->debug.enable_double_buffered_dsc_pg_support)
|
if (dc->hwss.update_dsc_pg)
|
||||||
dc->hwss.update_dsc_pg(dc, context, false);
|
dc->hwss.update_dsc_pg(dc, context, false);
|
||||||
|
|
||||||
context_clock_trace(dc, context);
|
context_clock_trace(dc, context);
|
||||||
|
@ -567,7 +567,7 @@ uint32_t dc_stream_get_vblank_counter(const struct dc_stream_state *stream)
|
|||||||
for (i = 0; i < MAX_PIPES; i++) {
|
for (i = 0; i < MAX_PIPES; i++) {
|
||||||
struct timing_generator *tg = res_ctx->pipe_ctx[i].stream_res.tg;
|
struct timing_generator *tg = res_ctx->pipe_ctx[i].stream_res.tg;
|
||||||
|
|
||||||
if (res_ctx->pipe_ctx[i].stream != stream)
|
if (res_ctx->pipe_ctx[i].stream != stream || !tg)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return tg->funcs->get_frame_count(tg);
|
return tg->funcs->get_frame_count(tg);
|
||||||
@ -626,7 +626,7 @@ bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream,
|
|||||||
for (i = 0; i < MAX_PIPES; i++) {
|
for (i = 0; i < MAX_PIPES; i++) {
|
||||||
struct timing_generator *tg = res_ctx->pipe_ctx[i].stream_res.tg;
|
struct timing_generator *tg = res_ctx->pipe_ctx[i].stream_res.tg;
|
||||||
|
|
||||||
if (res_ctx->pipe_ctx[i].stream != stream)
|
if (res_ctx->pipe_ctx[i].stream != stream || !tg)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
tg->funcs->get_scanoutpos(tg,
|
tg->funcs->get_scanoutpos(tg,
|
||||||
|
@ -230,6 +230,11 @@ struct dc_caps {
|
|||||||
uint32_t dmdata_alloc_size;
|
uint32_t dmdata_alloc_size;
|
||||||
unsigned int max_cursor_size;
|
unsigned int max_cursor_size;
|
||||||
unsigned int max_video_width;
|
unsigned int max_video_width;
|
||||||
|
/*
|
||||||
|
* max video plane width that can be safely assumed to be always
|
||||||
|
* supported by single DPP pipe.
|
||||||
|
*/
|
||||||
|
unsigned int max_optimizable_video_width;
|
||||||
unsigned int min_horizontal_blanking_period;
|
unsigned int min_horizontal_blanking_period;
|
||||||
int linear_pitch_alignment;
|
int linear_pitch_alignment;
|
||||||
bool dcc_const_color;
|
bool dcc_const_color;
|
||||||
|
@ -79,6 +79,9 @@ void dcn32_dsc_pg_control(
|
|||||||
if (hws->ctx->dc->debug.disable_dsc_power_gate)
|
if (hws->ctx->dc->debug.disable_dsc_power_gate)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!hws->ctx->dc->debug.enable_double_buffered_dsc_pg_support)
|
||||||
|
return;
|
||||||
|
|
||||||
REG_GET(DC_IP_REQUEST_CNTL, IP_REQUEST_EN, &org_ip_request_cntl);
|
REG_GET(DC_IP_REQUEST_CNTL, IP_REQUEST_EN, &org_ip_request_cntl);
|
||||||
if (org_ip_request_cntl == 0)
|
if (org_ip_request_cntl == 0)
|
||||||
REG_SET(DC_IP_REQUEST_CNTL, 0, IP_REQUEST_EN, 1);
|
REG_SET(DC_IP_REQUEST_CNTL, 0, IP_REQUEST_EN, 1);
|
||||||
|
@ -174,6 +174,7 @@ struct dmub_srv_region_params {
|
|||||||
uint32_t vbios_size;
|
uint32_t vbios_size;
|
||||||
const uint8_t *fw_inst_const;
|
const uint8_t *fw_inst_const;
|
||||||
const uint8_t *fw_bss_data;
|
const uint8_t *fw_bss_data;
|
||||||
|
bool is_mailbox_in_inbox;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -193,20 +194,25 @@ struct dmub_srv_region_params {
|
|||||||
*/
|
*/
|
||||||
struct dmub_srv_region_info {
|
struct dmub_srv_region_info {
|
||||||
uint32_t fb_size;
|
uint32_t fb_size;
|
||||||
|
uint32_t inbox_size;
|
||||||
uint8_t num_regions;
|
uint8_t num_regions;
|
||||||
struct dmub_region regions[DMUB_WINDOW_TOTAL];
|
struct dmub_region regions[DMUB_WINDOW_TOTAL];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct dmub_srv_fb_params - parameters used for driver fb setup
|
* struct dmub_srv_memory_params - parameters used for driver fb setup
|
||||||
* @region_info: region info calculated by dmub service
|
* @region_info: region info calculated by dmub service
|
||||||
* @cpu_addr: base cpu address for the framebuffer
|
* @cpu_fb_addr: base cpu address for the framebuffer
|
||||||
* @gpu_addr: base gpu virtual address for the framebuffer
|
* @cpu_inbox_addr: base cpu address for the gart
|
||||||
|
* @gpu_fb_addr: base gpu virtual address for the framebuffer
|
||||||
|
* @gpu_inbox_addr: base gpu virtual address for the gart
|
||||||
*/
|
*/
|
||||||
struct dmub_srv_fb_params {
|
struct dmub_srv_memory_params {
|
||||||
const struct dmub_srv_region_info *region_info;
|
const struct dmub_srv_region_info *region_info;
|
||||||
void *cpu_addr;
|
void *cpu_fb_addr;
|
||||||
uint64_t gpu_addr;
|
void *cpu_inbox_addr;
|
||||||
|
uint64_t gpu_fb_addr;
|
||||||
|
uint64_t gpu_inbox_addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -524,8 +530,8 @@ dmub_srv_calc_region_info(struct dmub_srv *dmub,
|
|||||||
* DMUB_STATUS_OK - success
|
* DMUB_STATUS_OK - success
|
||||||
* DMUB_STATUS_INVALID - unspecified error
|
* DMUB_STATUS_INVALID - unspecified error
|
||||||
*/
|
*/
|
||||||
enum dmub_status dmub_srv_calc_fb_info(struct dmub_srv *dmub,
|
enum dmub_status dmub_srv_calc_mem_info(struct dmub_srv *dmub,
|
||||||
const struct dmub_srv_fb_params *params,
|
const struct dmub_srv_memory_params *params,
|
||||||
struct dmub_srv_fb_info *out);
|
struct dmub_srv_fb_info *out);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -384,7 +384,7 @@ dmub_srv_calc_region_info(struct dmub_srv *dmub,
|
|||||||
uint32_t fw_state_size = DMUB_FW_STATE_SIZE;
|
uint32_t fw_state_size = DMUB_FW_STATE_SIZE;
|
||||||
uint32_t trace_buffer_size = DMUB_TRACE_BUFFER_SIZE;
|
uint32_t trace_buffer_size = DMUB_TRACE_BUFFER_SIZE;
|
||||||
uint32_t scratch_mem_size = DMUB_SCRATCH_MEM_SIZE;
|
uint32_t scratch_mem_size = DMUB_SCRATCH_MEM_SIZE;
|
||||||
|
uint32_t previous_top = 0;
|
||||||
if (!dmub->sw_init)
|
if (!dmub->sw_init)
|
||||||
return DMUB_STATUS_INVALID;
|
return DMUB_STATUS_INVALID;
|
||||||
|
|
||||||
@ -409,8 +409,15 @@ dmub_srv_calc_region_info(struct dmub_srv *dmub,
|
|||||||
bios->base = dmub_align(stack->top, 256);
|
bios->base = dmub_align(stack->top, 256);
|
||||||
bios->top = bios->base + params->vbios_size;
|
bios->top = bios->base + params->vbios_size;
|
||||||
|
|
||||||
|
if (params->is_mailbox_in_inbox) {
|
||||||
|
mail->base = 0;
|
||||||
|
mail->top = mail->base + DMUB_MAILBOX_SIZE;
|
||||||
|
previous_top = bios->top;
|
||||||
|
} else {
|
||||||
mail->base = dmub_align(bios->top, 256);
|
mail->base = dmub_align(bios->top, 256);
|
||||||
mail->top = mail->base + DMUB_MAILBOX_SIZE;
|
mail->top = mail->base + DMUB_MAILBOX_SIZE;
|
||||||
|
previous_top = mail->top;
|
||||||
|
}
|
||||||
|
|
||||||
fw_info = dmub_get_fw_meta_info(params);
|
fw_info = dmub_get_fw_meta_info(params);
|
||||||
|
|
||||||
@ -429,7 +436,7 @@ dmub_srv_calc_region_info(struct dmub_srv *dmub,
|
|||||||
dmub->fw_version = fw_info->fw_version;
|
dmub->fw_version = fw_info->fw_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
trace_buff->base = dmub_align(mail->top, 256);
|
trace_buff->base = dmub_align(previous_top, 256);
|
||||||
trace_buff->top = trace_buff->base + dmub_align(trace_buffer_size, 64);
|
trace_buff->top = trace_buff->base + dmub_align(trace_buffer_size, 64);
|
||||||
|
|
||||||
fw_state->base = dmub_align(trace_buff->top, 256);
|
fw_state->base = dmub_align(trace_buff->top, 256);
|
||||||
@ -440,11 +447,14 @@ dmub_srv_calc_region_info(struct dmub_srv *dmub,
|
|||||||
|
|
||||||
out->fb_size = dmub_align(scratch_mem->top, 4096);
|
out->fb_size = dmub_align(scratch_mem->top, 4096);
|
||||||
|
|
||||||
|
if (params->is_mailbox_in_inbox)
|
||||||
|
out->inbox_size = dmub_align(mail->top, 4096);
|
||||||
|
|
||||||
return DMUB_STATUS_OK;
|
return DMUB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum dmub_status dmub_srv_calc_fb_info(struct dmub_srv *dmub,
|
enum dmub_status dmub_srv_calc_mem_info(struct dmub_srv *dmub,
|
||||||
const struct dmub_srv_fb_params *params,
|
const struct dmub_srv_memory_params *params,
|
||||||
struct dmub_srv_fb_info *out)
|
struct dmub_srv_fb_info *out)
|
||||||
{
|
{
|
||||||
uint8_t *cpu_base;
|
uint8_t *cpu_base;
|
||||||
@ -459,8 +469,8 @@ enum dmub_status dmub_srv_calc_fb_info(struct dmub_srv *dmub,
|
|||||||
if (params->region_info->num_regions != DMUB_NUM_WINDOWS)
|
if (params->region_info->num_regions != DMUB_NUM_WINDOWS)
|
||||||
return DMUB_STATUS_INVALID;
|
return DMUB_STATUS_INVALID;
|
||||||
|
|
||||||
cpu_base = (uint8_t *)params->cpu_addr;
|
cpu_base = (uint8_t *)params->cpu_fb_addr;
|
||||||
gpu_base = params->gpu_addr;
|
gpu_base = params->gpu_fb_addr;
|
||||||
|
|
||||||
for (i = 0; i < DMUB_NUM_WINDOWS; ++i) {
|
for (i = 0; i < DMUB_NUM_WINDOWS; ++i) {
|
||||||
const struct dmub_region *reg =
|
const struct dmub_region *reg =
|
||||||
@ -468,6 +478,12 @@ enum dmub_status dmub_srv_calc_fb_info(struct dmub_srv *dmub,
|
|||||||
|
|
||||||
out->fb[i].cpu_addr = cpu_base + reg->base;
|
out->fb[i].cpu_addr = cpu_base + reg->base;
|
||||||
out->fb[i].gpu_addr = gpu_base + reg->base;
|
out->fb[i].gpu_addr = gpu_base + reg->base;
|
||||||
|
|
||||||
|
if (i == DMUB_WINDOW_4_MAILBOX && params->cpu_inbox_addr != 0) {
|
||||||
|
out->fb[i].cpu_addr = (uint8_t *)params->cpu_inbox_addr + reg->base;
|
||||||
|
out->fb[i].gpu_addr = params->gpu_inbox_addr + reg->base;
|
||||||
|
}
|
||||||
|
|
||||||
out->fb[i].size = reg->top - reg->base;
|
out->fb[i].size = reg->top - reg->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ typedef struct _ATOM_PPLIB_THERMALCONTROLLER
|
|||||||
typedef struct _ATOM_PPLIB_STATE
|
typedef struct _ATOM_PPLIB_STATE
|
||||||
{
|
{
|
||||||
UCHAR ucNonClockStateIndex;
|
UCHAR ucNonClockStateIndex;
|
||||||
UCHAR ucClockStateIndices[1]; // variable-sized
|
UCHAR ucClockStateIndices[]; // variable-sized
|
||||||
} ATOM_PPLIB_STATE;
|
} ATOM_PPLIB_STATE;
|
||||||
|
|
||||||
|
|
||||||
@ -473,7 +473,7 @@ typedef struct _ATOM_PPLIB_STATE_V2
|
|||||||
/**
|
/**
|
||||||
* Driver will read the first ucNumDPMLevels in this array
|
* Driver will read the first ucNumDPMLevels in this array
|
||||||
*/
|
*/
|
||||||
UCHAR clockInfoIndex[1];
|
UCHAR clockInfoIndex[];
|
||||||
} ATOM_PPLIB_STATE_V2;
|
} ATOM_PPLIB_STATE_V2;
|
||||||
|
|
||||||
typedef struct _StateArray{
|
typedef struct _StateArray{
|
||||||
|
@ -760,7 +760,7 @@ static ssize_t amdgpu_set_pp_od_clk_voltage(struct device *dev,
|
|||||||
if (adev->in_suspend && !adev->in_runpm)
|
if (adev->in_suspend && !adev->in_runpm)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
if (count > 127)
|
if (count > 127 || count == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (*buf == 's')
|
if (*buf == 's')
|
||||||
@ -780,7 +780,8 @@ static ssize_t amdgpu_set_pp_od_clk_voltage(struct device *dev,
|
|||||||
else
|
else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
memcpy(buf_cpy, buf, count+1);
|
memcpy(buf_cpy, buf, count);
|
||||||
|
buf_cpy[count] = 0;
|
||||||
|
|
||||||
tmp_str = buf_cpy;
|
tmp_str = buf_cpy;
|
||||||
|
|
||||||
@ -797,6 +798,9 @@ static ssize_t amdgpu_set_pp_od_clk_voltage(struct device *dev,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
parameter_size++;
|
parameter_size++;
|
||||||
|
|
||||||
|
if (!tmp_str)
|
||||||
|
break;
|
||||||
|
|
||||||
while (isspace(*tmp_str))
|
while (isspace(*tmp_str))
|
||||||
tmp_str++;
|
tmp_str++;
|
||||||
}
|
}
|
||||||
|
@ -164,7 +164,7 @@ typedef struct _ATOM_Tonga_State {
|
|||||||
typedef struct _ATOM_Tonga_State_Array {
|
typedef struct _ATOM_Tonga_State_Array {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Tonga_State entries[1]; /* Dynamically allocate entries. */
|
ATOM_Tonga_State entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Tonga_State_Array;
|
} ATOM_Tonga_State_Array;
|
||||||
|
|
||||||
typedef struct _ATOM_Tonga_MCLK_Dependency_Record {
|
typedef struct _ATOM_Tonga_MCLK_Dependency_Record {
|
||||||
@ -179,7 +179,7 @@ typedef struct _ATOM_Tonga_MCLK_Dependency_Record {
|
|||||||
typedef struct _ATOM_Tonga_MCLK_Dependency_Table {
|
typedef struct _ATOM_Tonga_MCLK_Dependency_Table {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Tonga_MCLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */
|
ATOM_Tonga_MCLK_Dependency_Record entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Tonga_MCLK_Dependency_Table;
|
} ATOM_Tonga_MCLK_Dependency_Table;
|
||||||
|
|
||||||
typedef struct _ATOM_Tonga_SCLK_Dependency_Record {
|
typedef struct _ATOM_Tonga_SCLK_Dependency_Record {
|
||||||
@ -194,7 +194,7 @@ typedef struct _ATOM_Tonga_SCLK_Dependency_Record {
|
|||||||
typedef struct _ATOM_Tonga_SCLK_Dependency_Table {
|
typedef struct _ATOM_Tonga_SCLK_Dependency_Table {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Tonga_SCLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */
|
ATOM_Tonga_SCLK_Dependency_Record entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Tonga_SCLK_Dependency_Table;
|
} ATOM_Tonga_SCLK_Dependency_Table;
|
||||||
|
|
||||||
typedef struct _ATOM_Polaris_SCLK_Dependency_Record {
|
typedef struct _ATOM_Polaris_SCLK_Dependency_Record {
|
||||||
@ -210,7 +210,7 @@ typedef struct _ATOM_Polaris_SCLK_Dependency_Record {
|
|||||||
typedef struct _ATOM_Polaris_SCLK_Dependency_Table {
|
typedef struct _ATOM_Polaris_SCLK_Dependency_Table {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Polaris_SCLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */
|
ATOM_Polaris_SCLK_Dependency_Record entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Polaris_SCLK_Dependency_Table;
|
} ATOM_Polaris_SCLK_Dependency_Table;
|
||||||
|
|
||||||
typedef struct _ATOM_Tonga_PCIE_Record {
|
typedef struct _ATOM_Tonga_PCIE_Record {
|
||||||
@ -222,7 +222,7 @@ typedef struct _ATOM_Tonga_PCIE_Record {
|
|||||||
typedef struct _ATOM_Tonga_PCIE_Table {
|
typedef struct _ATOM_Tonga_PCIE_Table {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Tonga_PCIE_Record entries[1]; /* Dynamically allocate entries. */
|
ATOM_Tonga_PCIE_Record entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Tonga_PCIE_Table;
|
} ATOM_Tonga_PCIE_Table;
|
||||||
|
|
||||||
typedef struct _ATOM_Polaris10_PCIE_Record {
|
typedef struct _ATOM_Polaris10_PCIE_Record {
|
||||||
@ -235,7 +235,7 @@ typedef struct _ATOM_Polaris10_PCIE_Record {
|
|||||||
typedef struct _ATOM_Polaris10_PCIE_Table {
|
typedef struct _ATOM_Polaris10_PCIE_Table {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Polaris10_PCIE_Record entries[1]; /* Dynamically allocate entries. */
|
ATOM_Polaris10_PCIE_Record entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Polaris10_PCIE_Table;
|
} ATOM_Polaris10_PCIE_Table;
|
||||||
|
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ typedef struct _ATOM_Tonga_MM_Dependency_Record {
|
|||||||
typedef struct _ATOM_Tonga_MM_Dependency_Table {
|
typedef struct _ATOM_Tonga_MM_Dependency_Table {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Tonga_MM_Dependency_Record entries[1]; /* Dynamically allocate entries. */
|
ATOM_Tonga_MM_Dependency_Record entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Tonga_MM_Dependency_Table;
|
} ATOM_Tonga_MM_Dependency_Table;
|
||||||
|
|
||||||
typedef struct _ATOM_Tonga_Voltage_Lookup_Record {
|
typedef struct _ATOM_Tonga_Voltage_Lookup_Record {
|
||||||
@ -265,7 +265,7 @@ typedef struct _ATOM_Tonga_Voltage_Lookup_Record {
|
|||||||
typedef struct _ATOM_Tonga_Voltage_Lookup_Table {
|
typedef struct _ATOM_Tonga_Voltage_Lookup_Table {
|
||||||
UCHAR ucRevId;
|
UCHAR ucRevId;
|
||||||
UCHAR ucNumEntries; /* Number of entries. */
|
UCHAR ucNumEntries; /* Number of entries. */
|
||||||
ATOM_Tonga_Voltage_Lookup_Record entries[1]; /* Dynamically allocate entries. */
|
ATOM_Tonga_Voltage_Lookup_Record entries[]; /* Dynamically allocate entries. */
|
||||||
} ATOM_Tonga_Voltage_Lookup_Table;
|
} ATOM_Tonga_Voltage_Lookup_Table;
|
||||||
|
|
||||||
typedef struct _ATOM_Tonga_Fan_Table {
|
typedef struct _ATOM_Tonga_Fan_Table {
|
||||||
|
@ -1221,7 +1221,7 @@ static int smu_smc_hw_setup(struct smu_context *smu)
|
|||||||
{
|
{
|
||||||
struct smu_feature *feature = &smu->smu_feature;
|
struct smu_feature *feature = &smu->smu_feature;
|
||||||
struct amdgpu_device *adev = smu->adev;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
uint32_t pcie_gen = 0, pcie_width = 0;
|
uint8_t pcie_gen = 0, pcie_width = 0;
|
||||||
uint64_t features_supported;
|
uint64_t features_supported;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
@ -844,7 +844,7 @@ struct pptable_funcs {
|
|||||||
* &pcie_gen_cap: Maximum allowed PCIe generation.
|
* &pcie_gen_cap: Maximum allowed PCIe generation.
|
||||||
* &pcie_width_cap: Maximum allowed PCIe width.
|
* &pcie_width_cap: Maximum allowed PCIe width.
|
||||||
*/
|
*/
|
||||||
int (*update_pcie_parameters)(struct smu_context *smu, uint32_t pcie_gen_cap, uint32_t pcie_width_cap);
|
int (*update_pcie_parameters)(struct smu_context *smu, uint8_t pcie_gen_cap, uint8_t pcie_width_cap);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @i2c_init: Initialize i2c.
|
* @i2c_init: Initialize i2c.
|
||||||
|
@ -298,8 +298,8 @@ int smu_v13_0_get_pptable_from_firmware(struct smu_context *smu,
|
|||||||
uint32_t pptable_id);
|
uint32_t pptable_id);
|
||||||
|
|
||||||
int smu_v13_0_update_pcie_parameters(struct smu_context *smu,
|
int smu_v13_0_update_pcie_parameters(struct smu_context *smu,
|
||||||
uint32_t pcie_gen_cap,
|
uint8_t pcie_gen_cap,
|
||||||
uint32_t pcie_width_cap);
|
uint8_t pcie_width_cap);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -2368,8 +2368,8 @@ static int navi10_get_power_limit(struct smu_context *smu,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int navi10_update_pcie_parameters(struct smu_context *smu,
|
static int navi10_update_pcie_parameters(struct smu_context *smu,
|
||||||
uint32_t pcie_gen_cap,
|
uint8_t pcie_gen_cap,
|
||||||
uint32_t pcie_width_cap)
|
uint8_t pcie_width_cap)
|
||||||
{
|
{
|
||||||
struct smu_11_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
|
struct smu_11_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
|
||||||
PPTable_t *pptable = smu->smu_table.driver_pptable;
|
PPTable_t *pptable = smu->smu_table.driver_pptable;
|
||||||
|
@ -2086,14 +2086,14 @@ static int sienna_cichlid_display_disable_memory_clock_switch(struct smu_context
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int sienna_cichlid_update_pcie_parameters(struct smu_context *smu,
|
static int sienna_cichlid_update_pcie_parameters(struct smu_context *smu,
|
||||||
uint32_t pcie_gen_cap,
|
uint8_t pcie_gen_cap,
|
||||||
uint32_t pcie_width_cap)
|
uint8_t pcie_width_cap)
|
||||||
{
|
{
|
||||||
struct smu_11_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
|
struct smu_11_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
|
||||||
struct smu_11_0_pcie_table *pcie_table = &dpm_context->dpm_tables.pcie_table;
|
struct smu_11_0_pcie_table *pcie_table = &dpm_context->dpm_tables.pcie_table;
|
||||||
uint8_t *table_member1, *table_member2;
|
uint8_t *table_member1, *table_member2;
|
||||||
uint32_t min_gen_speed, max_gen_speed;
|
uint8_t min_gen_speed, max_gen_speed;
|
||||||
uint32_t min_lane_width, max_lane_width;
|
uint8_t min_lane_width, max_lane_width;
|
||||||
uint32_t smu_pcie_arg;
|
uint32_t smu_pcie_arg;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
|
@ -2486,8 +2486,8 @@ int smu_v13_0_mode1_reset(struct smu_context *smu)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int smu_v13_0_update_pcie_parameters(struct smu_context *smu,
|
int smu_v13_0_update_pcie_parameters(struct smu_context *smu,
|
||||||
uint32_t pcie_gen_cap,
|
uint8_t pcie_gen_cap,
|
||||||
uint32_t pcie_width_cap)
|
uint8_t pcie_width_cap)
|
||||||
{
|
{
|
||||||
struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
|
struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
|
||||||
struct smu_13_0_pcie_table *pcie_table =
|
struct smu_13_0_pcie_table *pcie_table =
|
||||||
|
@ -324,12 +324,12 @@ static int smu_v13_0_0_check_powerplay_table(struct smu_context *smu)
|
|||||||
if (powerplay_table->platform_caps & SMU_13_0_0_PP_PLATFORM_CAP_HARDWAREDC)
|
if (powerplay_table->platform_caps & SMU_13_0_0_PP_PLATFORM_CAP_HARDWAREDC)
|
||||||
smu->dc_controlled_by_gpio = true;
|
smu->dc_controlled_by_gpio = true;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_13_0_0_PP_PLATFORM_CAP_BACO ||
|
if (powerplay_table->platform_caps & SMU_13_0_0_PP_PLATFORM_CAP_BACO) {
|
||||||
powerplay_table->platform_caps & SMU_13_0_0_PP_PLATFORM_CAP_MACO)
|
|
||||||
smu_baco->platform_support = true;
|
smu_baco->platform_support = true;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_13_0_0_PP_PLATFORM_CAP_MACO)
|
if (powerplay_table->platform_caps & SMU_13_0_0_PP_PLATFORM_CAP_MACO)
|
||||||
smu_baco->maco_support = true;
|
smu_baco->maco_support = true;
|
||||||
|
}
|
||||||
|
|
||||||
table_context->thermal_controller_type =
|
table_context->thermal_controller_type =
|
||||||
powerplay_table->thermal_controller_type;
|
powerplay_table->thermal_controller_type;
|
||||||
@ -1647,38 +1647,10 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (smu->power_profile_mode == PP_SMC_POWER_PROFILE_COMPUTE &&
|
|
||||||
(((smu->adev->pdev->device == 0x744C) && (smu->adev->pdev->revision == 0xC8)) ||
|
|
||||||
((smu->adev->pdev->device == 0x744C) && (smu->adev->pdev->revision == 0xCC)))) {
|
|
||||||
ret = smu_cmn_update_table(smu,
|
|
||||||
SMU_TABLE_ACTIVITY_MONITOR_COEFF,
|
|
||||||
WORKLOAD_PPLIB_COMPUTE_BIT,
|
|
||||||
(void *)(&activity_monitor_external),
|
|
||||||
false);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(smu->adev->dev, "[%s] Failed to get activity monitor!", __func__);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = smu_cmn_update_table(smu,
|
|
||||||
SMU_TABLE_ACTIVITY_MONITOR_COEFF,
|
|
||||||
WORKLOAD_PPLIB_CUSTOM_BIT,
|
|
||||||
(void *)(&activity_monitor_external),
|
|
||||||
true);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(smu->adev->dev, "[%s] Failed to set activity monitor!", __func__);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
workload_type = smu_cmn_to_asic_specific_index(smu,
|
|
||||||
CMN2ASIC_MAPPING_WORKLOAD,
|
|
||||||
PP_SMC_POWER_PROFILE_CUSTOM);
|
|
||||||
} else {
|
|
||||||
/* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */
|
/* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */
|
||||||
workload_type = smu_cmn_to_asic_specific_index(smu,
|
workload_type = smu_cmn_to_asic_specific_index(smu,
|
||||||
CMN2ASIC_MAPPING_WORKLOAD,
|
CMN2ASIC_MAPPING_WORKLOAD,
|
||||||
smu->power_profile_mode);
|
smu->power_profile_mode);
|
||||||
}
|
|
||||||
|
|
||||||
if (workload_type < 0)
|
if (workload_type < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -326,12 +326,13 @@ static int smu_v13_0_7_check_powerplay_table(struct smu_context *smu)
|
|||||||
if (powerplay_table->platform_caps & SMU_13_0_7_PP_PLATFORM_CAP_HARDWAREDC)
|
if (powerplay_table->platform_caps & SMU_13_0_7_PP_PLATFORM_CAP_HARDWAREDC)
|
||||||
smu->dc_controlled_by_gpio = true;
|
smu->dc_controlled_by_gpio = true;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_13_0_7_PP_PLATFORM_CAP_BACO ||
|
if (powerplay_table->platform_caps & SMU_13_0_7_PP_PLATFORM_CAP_BACO) {
|
||||||
powerplay_table->platform_caps & SMU_13_0_7_PP_PLATFORM_CAP_MACO)
|
|
||||||
smu_baco->platform_support = true;
|
smu_baco->platform_support = true;
|
||||||
|
|
||||||
if (smu_baco->platform_support && (BoardTable->HsrEnabled || BoardTable->VddqOffEnabled))
|
if ((powerplay_table->platform_caps & SMU_13_0_7_PP_PLATFORM_CAP_MACO)
|
||||||
|
&& (BoardTable->HsrEnabled || BoardTable->VddqOffEnabled))
|
||||||
smu_baco->maco_support = true;
|
smu_baco->maco_support = true;
|
||||||
|
}
|
||||||
|
|
||||||
table_context->thermal_controller_type =
|
table_context->thermal_controller_type =
|
||||||
powerplay_table->thermal_controller_type;
|
powerplay_table->thermal_controller_type;
|
||||||
|
@ -2368,6 +2368,18 @@ static int intel_compute_min_cdclk(struct intel_cdclk_state *cdclk_state)
|
|||||||
for_each_pipe(dev_priv, pipe)
|
for_each_pipe(dev_priv, pipe)
|
||||||
min_cdclk = max(cdclk_state->min_cdclk[pipe], min_cdclk);
|
min_cdclk = max(cdclk_state->min_cdclk[pipe], min_cdclk);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Avoid glk_force_audio_cdclk() causing excessive screen
|
||||||
|
* blinking when multiple pipes are active by making sure
|
||||||
|
* CDCLK frequency is always high enough for audio. With a
|
||||||
|
* single active pipe we can always change CDCLK frequency
|
||||||
|
* by changing the cd2x divider (see glk_cdclk_table[]) and
|
||||||
|
* thus a full modeset won't be needed then.
|
||||||
|
*/
|
||||||
|
if (IS_GEMINILAKE(dev_priv) && cdclk_state->active_pipes &&
|
||||||
|
!is_power_of_2(cdclk_state->active_pipes))
|
||||||
|
min_cdclk = max(2 * 96000, min_cdclk);
|
||||||
|
|
||||||
if (min_cdclk > dev_priv->display.cdclk.max_cdclk_freq) {
|
if (min_cdclk > dev_priv->display.cdclk.max_cdclk_freq) {
|
||||||
drm_dbg_kms(&dev_priv->drm,
|
drm_dbg_kms(&dev_priv->drm,
|
||||||
"required cdclk (%d kHz) exceeds max (%d kHz)\n",
|
"required cdclk (%d kHz) exceeds max (%d kHz)\n",
|
||||||
|
@ -852,6 +852,7 @@ static int set_proto_ctx_sseu(struct drm_i915_file_private *fpriv,
|
|||||||
if (idx >= pc->num_user_engines)
|
if (idx >= pc->num_user_engines)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
idx = array_index_nospec(idx, pc->num_user_engines);
|
||||||
pe = &pc->user_engines[idx];
|
pe = &pc->user_engines[idx];
|
||||||
|
|
||||||
/* Only render engine supports RPCS configuration. */
|
/* Only render engine supports RPCS configuration. */
|
||||||
|
@ -3846,11 +3846,8 @@ int i915_perf_open_ioctl(struct drm_device *dev, void *data,
|
|||||||
u32 known_open_flags;
|
u32 known_open_flags;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!perf->i915) {
|
if (!perf->i915)
|
||||||
drm_dbg(&perf->i915->drm,
|
|
||||||
"i915 perf interface not available for this system\n");
|
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
}
|
|
||||||
|
|
||||||
known_open_flags = I915_PERF_FLAG_FD_CLOEXEC |
|
known_open_flags = I915_PERF_FLAG_FD_CLOEXEC |
|
||||||
I915_PERF_FLAG_FD_NONBLOCK |
|
I915_PERF_FLAG_FD_NONBLOCK |
|
||||||
@ -4186,11 +4183,8 @@ int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
|
|||||||
struct i915_oa_reg *regs;
|
struct i915_oa_reg *regs;
|
||||||
int err, id;
|
int err, id;
|
||||||
|
|
||||||
if (!perf->i915) {
|
if (!perf->i915)
|
||||||
drm_dbg(&perf->i915->drm,
|
|
||||||
"i915 perf interface not available for this system\n");
|
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
}
|
|
||||||
|
|
||||||
if (!perf->metrics_kobj) {
|
if (!perf->metrics_kobj) {
|
||||||
drm_dbg(&perf->i915->drm,
|
drm_dbg(&perf->i915->drm,
|
||||||
@ -4353,11 +4347,8 @@ int i915_perf_remove_config_ioctl(struct drm_device *dev, void *data,
|
|||||||
struct i915_oa_config *oa_config;
|
struct i915_oa_config *oa_config;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!perf->i915) {
|
if (!perf->i915)
|
||||||
drm_dbg(&perf->i915->drm,
|
|
||||||
"i915 perf interface not available for this system\n");
|
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
}
|
|
||||||
|
|
||||||
if (i915_perf_stream_paranoid && !perfmon_capable()) {
|
if (i915_perf_stream_paranoid && !perfmon_capable()) {
|
||||||
drm_dbg(&perf->i915->drm,
|
drm_dbg(&perf->i915->drm,
|
||||||
|
@ -112,6 +112,9 @@ dev_driver_string(struct device *dev)
|
|||||||
return dev->dv_cfdata->cf_driver->cd_name;
|
return dev->dv_cfdata->cf_driver->cd_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX return true for thunderbolt/USB4 */
|
||||||
|
#define dev_is_removable(x) false
|
||||||
|
|
||||||
/* should be bus id as string, ie 0000:00:02.0 */
|
/* should be bus id as string, ie 0000:00:02.0 */
|
||||||
#define dev_name(dev) ""
|
#define dev_name(dev) ""
|
||||||
|
|
||||||
|
@ -1122,6 +1122,8 @@ static int radeon_tv_get_modes(struct drm_connector *connector)
|
|||||||
else {
|
else {
|
||||||
/* only 800x600 is supported right now on pre-avivo chips */
|
/* only 800x600 is supported right now on pre-avivo chips */
|
||||||
tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
|
tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
|
||||||
|
if (!tv_mode)
|
||||||
|
return 0;
|
||||||
tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
|
tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
|
||||||
drm_mode_probed_add(connector, tv_mode);
|
drm_mode_probed_add(connector, tv_mode);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: tcp_input.c,v 1.395 2023/11/29 19:19:25 bluhm Exp $ */
|
/* $OpenBSD: tcp_input.c,v 1.396 2023/11/30 10:21:56 bluhm Exp $ */
|
||||||
/* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */
|
/* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4175,7 +4175,7 @@ syn_cache_respond(struct syn_cache *sc, struct mbuf *m, uint64_t now)
|
|||||||
/* leave flowlabel = 0, it is legal and require no state mgmt */
|
/* leave flowlabel = 0, it is legal and require no state mgmt */
|
||||||
|
|
||||||
error = ip6_output(m, NULL /*XXX*/, &sc->sc_route6, 0,
|
error = ip6_output(m, NULL /*XXX*/, &sc->sc_route6, 0,
|
||||||
NULL, NULL);
|
NULL, inp ? inp->inp_seclevel : NULL);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: main.c,v 1.141 2023/11/22 02:20:54 kn Exp $ */
|
/* $OpenBSD: main.c,v 1.143 2023/11/30 14:52:00 kn Exp $ */
|
||||||
/* $NetBSD: main.c,v 1.24 1997/08/18 10:20:26 lukem Exp $ */
|
/* $NetBSD: main.c,v 1.24 1997/08/18 10:20:26 lukem Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -616,14 +616,7 @@ main(volatile int argc, char *argv[])
|
|||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
if (isurl(argv[0])) {
|
if (isurl(argv[0])) {
|
||||||
if (pipeout) {
|
if (pipeout) {
|
||||||
#ifndef SMALL
|
if (pledge("stdio rpath dns tty inet",
|
||||||
if (!resume) {
|
|
||||||
if (pledge("stdio rpath dns tty inet fattr",
|
|
||||||
NULL) == -1)
|
|
||||||
err(1, "pledge");
|
|
||||||
} else
|
|
||||||
#endif /* !SMALL */
|
|
||||||
if (pledge("stdio rpath dns tty inet fattr",
|
|
||||||
NULL) == -1)
|
NULL) == -1)
|
||||||
err(1, "pledge");
|
err(1, "pledge");
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user