#72 libre: [iceweasel] Update to 113.0 with upstream changes
Closed 4 months ago by billauger. Opened 5 months ago by grizzlyuser.

pcr: [guile-lib]: Add armv7h support.
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: [guix]: Update to 0.4.0
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [guile-lib]
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [guile-zstd]
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [guile-semver]
Denis 'GNUtoo' Carikli • 5 months ago  
libre: [debootstrap]: Update to debootstrap 1.0.128
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [guile-avahi]
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [guile-gnutls]
Denis 'GNUtoo' Carikli • 5 months ago  
.gitignore: Add *.zst
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [guile-zlib]
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [guile-lzlib]
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add forgetten [guile-lzma] package
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: Add [disarchive]
Denis 'GNUtoo' Carikli • 5 months ago  
gitignore: Add zstd packages
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: [guile-sqlite3]: Update to 0.1.3.
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: [guile-gcrypt]: Update to 0.4.0
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: [guile-json]: Update to 4.7.3
Denis 'GNUtoo' Carikli • 5 months ago  
pcr: [guile-git-lib]: Update to 0.5.2
Denis 'GNUtoo' Carikli • 5 months ago  
libre: [linux-libre-vanilla]: Update to 6.3.3
Denis 'GNUtoo' Carikli • 5 months ago  
file modified
+2
@@ -35,3 +35,5 @@ 

  *.xpi

  *.xz

  *.zip

+ *.zst

+ *.zstd

file removed
-89
@@ -1,89 +0,0 @@ 

- # Maintainer (arch): Eli Schwartz <eschwartz@archlinux.org>

- # Maintainer (arch): Levente Polyak <anthraxx[at]archlinux[dot]org>

- # Contributor: Florian Pritz <flo@xinu.at>

- # Contributor: Chris Brannon <cmbrannon79@gmail.com>

- # Contributor: Geoffroy Carrier <geoffroy@archlinux.org>

- # Contributor: Dan McGee <dan@archlinux.org>

- # Contributor: Jaroslaw Rosiek <philosoph@interia.pl>

- # Contributor: Darwin Bautista <djclue917@gmail.com>

- # Contributor: Daniel J Griffiths <ghost1227@archlinux.us>

- # Contributor: André Silva <emulatorman@hyperbola.info>

- # Contributor: Andreas Grapentin <andreas@grapentin.org>

- # Contributor: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>

- 

- 

- # parabola changes and rationale:

- #  - Removed build dependency on blacklisted 'python-pip' (FIXME: fails to build)

- #  - Removed optional dependency on blacklisted 'fop'

- #  - Removed pip build support (FIXME: fails to build)

- 

- # NOTE: This PKGBUILD is kept in-sync, as closely as possible,

- #       with arch{,arm,32} and parabola, for the sake of documentation and cleaner diffs.

- #       That also helps to identify which changes were made by Parabola vs upstream.

- #       Therefore, this PKGBUILD may declare blacklisted dependencies, non-free sources,

- #       or include code for anti-features; but those will be filtered-out subsequently.

- #       Any code which implements an anti-feature should be commented-out;

- #       and include an 'anti-feature' comment, for clarity.

- #       Any blacklisted dependencies and non-free sources should be filtered,

- #       and include a 'non-free' comment, for clarity.

- #       Without those over-rides, the resulting program may not be FSDG-fit.

- #       Do not circumvent those over-rides, if compiling for the Parabola repos.

- 

- 

- pkgname=asciidoc

- pkgver=10.2.0

- pkgrel=1

- pkgrel+=.parabola1

- pkgdesc='Text document format for short documents, articles, books and UNIX man pages'

- arch=('any')

- url='https://asciidoc.org/'

- license=('GPL')

- depends=('python' 'libxslt' 'docbook-xsl')

- checkdepends=('dblatex' 'graphviz' 'lilypond' 'python-pytest'{,-mock} 'source-highlight')

- makedepends=('python-pip')

- makedepends+=('python-setuptools')

- makedepends=( ${makedepends[*]/python-pip/} ) # non-free - FSDG-unfit repositories

-                                               # FIXME: Parabola (will have|has) no 'pip' package ~since python 2 deprecated

-                                               #        | python3 -m pip install --root /build/asciidoc/pkg/asciidoc .

-                                               #        | /usr/bin/python3: No module named pip

- optdepends=('graphviz: graphviz-filter'

-             'lilypond: music-filter'

-             'imagemagick: music-filter'

-             'source-highlight: source-highlight-filter'

-             'dblatex: pdf generation'

-             'w3m: text generation'

-             'lynx: alternative text generation')

- source=("https://github.com/asciidoc-py/asciidoc-py/releases/download/$pkgver/$pkgname-$pkgver.tar.gz")

- sha256sums=('237b2ba5c35c0ae7ccd4cd44ebf1d87c20b2695dae01798954416d492ef7fa0e')

- b2sums=('ed5db8fd1432b255e9c03e17805c26c76a42392c2ebeaf839b8c0aaaf38cd1a36d79b645ca4474503181200924df91218eb0997dd82335a30d6a0a1b35eb5730')

- 

- prepare() {

-   cd ${pkgname}-${pkgver}

-   # https://github.com/asciidoc-py/asciidoc-py/issues/234

-   autoconf

- }

- 

- build() {

-   cd ${pkgname}-${pkgver}

-   # https://github.com/asciidoc-py/asciidoc-py/issues/234#issuecomment-1045970138

-   ./configure \

-       --docdir /usr/share/doc/$pkgname \

-       --prefix /usr

-   make build

-   make manpages

- }

- 

- check() {

-   cd ${pkgname}-${pkgver}

-   make test

- }

- 

- package() {

-   cd ${pkgname}-${pkgver}

-   make DESTDIR="${pkgdir}" install

-   make DESTDIR="${pkgdir}" docs

-   install -Dm0644 -t "$pkgdir/usr/share/man/man1/" doc/*.1

-   # ascidocapi is deprecated, but still included in 10.x on a "provisional" basis

-   local _platlib="$(python -c 'import sysconfig; print(sysconfig.get_paths()["platlib"])')"

-   install -Dm0644 -t "${pkgdir}/${_platlib}/${pkgname}/" asciidoc/api.py

- }

file modified
+12 -12
@@ -5,17 +5,17 @@ 

  # Contributor: André Silva <emulatorman@hyperbola.info>

  

  pkgname=debootstrap

- pkgver=1.0.116

- pkgrel=2

- pkgrel+=.parabola3

- _pureospkgver=1.0.108

- _pureospkgrel=pureos2

+ pkgver=1.0.128

+ pkgrel=1

+ pkgrel+=.parabola2

+ _pureospkgver=1.0.125

+ _pureospkgrel=pureos1

  pkgdesc="Bootstrap a basic gNewSense and Trisquel system, without Debian support"

  arch=(any)

  license=(GPL)

  url="https://tracker.debian.org/pkg/debootstrap"

  depends=(wget binutils)

- source=("$pkgname-$pkgver.tar.gz::https://github.com/felixonmars/debootstrap/archive/$pkgver.tar.gz"

+ source=("$pkgname-$pkgver.tar.gz::https://salsa.debian.org/installer-team/debootstrap/-/archive/${pkgver}/debootstrap-${pkgver}.tar.gz"

          "https://repo.puri.sm/pureos/pool/main/d/debootstrap/debootstrap_$_pureospkgver$_pureospkgrel.tar.gz"

          arch-detect.patch

          debootstrap.8
@@ -24,13 +24,12 @@ 

  optdepends=('gnupg: check release signatures'

              'pureos-archive-keyring: check PureOS release signatures'

              'trisquel-keyring: check Trisquel release signatures')

- sha512sums=('4b81bc56c6ac6e210aaceb06013882ba3cfe777d4173fd89d38a279fe57425302b86b2fb00ea2e19df2abfb7058909e1eb628f74f241612d865044b32e3481a4'

-             '16888223cb3f4688ac468204bf4351080ac801456b990481602580f78666a034530b48d8bf6e989a53a393ab5edf6fdc80f5815be82fbfab3f9b845850da5d0b'

+ sha512sums=('50b87e82777db77d44fc114c7f29dc4e189489c1ca17dd033ddec57e2a83525386660fe3df88bd29ac226d5723dbc8980dd0fe2b5a4cbe64582fa6735acef940'

+             '3530dfcd44b9d0ea91a6100825aa209a41db04de632712e0c991b64e21212ace62ec07b817823388eeae58924c9afd286194a670c8181f60b2d795c4cb9814fb'

              '56e25f48027f99f7e720859a9e14fe769b1cbd6227c7a7e27e14c2fea88520109342d6e5b127dc34ce8cc40f46941a0c5157ad35cf8ef9b3e4323877a4b32d97'

              '0b3507756b8f29d19146df3201143ccbd71cfd1f7ef865d184079180612b90c046cabab59fe42d246bfe476ae8fd5c43e81ee2fc3ee06bbc1fc3e75d9f1382ca'

              '968ef005bf1f399b3400080b2ba65f1b32c067c49faadc1caa7ee524a85980f0a6625c7b06838e01bbd8b99a496492da77a38f0e17f0a81fc029ee611fe639b6'

              'a57c87a1cc21bd5c3cf19bd5a8a383ab9aaeabe484667e10a9c8f6ee72a720fbb50ed9d5d2be9f3117013614ec22677ecf2b8c60e465d1464a3adabe1198eba5')

- 

  prepare() {

    cd debootstrap-$pkgver

  
@@ -63,7 +62,9 @@ 

    install -m644 $srcdir/gnewsense scripts

  

    # Add PureOS script

-   install -m644 $srcdir/debootstrap/scripts/amber scripts/pureos

+   install -m644 \

+     $srcdir/debootstrap-${_pureospkgver}${_pureospkgrel}/scripts/amber \

+     scripts/pureos

  

    # Add Trisquel script

    install -m644 $srcdir/trisquel scripts
@@ -77,9 +78,8 @@ 

  

    # Create PureOS symlinks

    ln -s pureos amber

-   ln -s pureos green

+   ln -s pureos byzantium

    ln -s pureos landing

-   ln -s pureos purple

  

    # Create Trisquel symlinks

    ln -s trisquel robur     # Trisquel 2.0

@@ -24,6 +24,9 @@ 

  #       That also helps to identify which changes were made by Parabola vs upstream.

  #       However, only the small sub-set of split-packages which require FSDG treatments

  #       are compiled; and some noisy/irrelevant segments are deleted entirely.

+ #       The result is a recipe which is extremely messy, tedious and brittle to merge,

+ #       and tedious to maintain; but the alternative is worse (blacklisting and rebuilding

+ #       all split-packages and many dependents, pinning all dependents to this version).

  #       Therefore, this PKGBUILD may declare blacklisted dependencies, non-free sources,

  #       or include code for anti-features; but those will be filtered-out subsequently.

  #       Any code which implements an anti-feature should be commented-out;
@@ -42,8 +45,9 @@ 

    gst-plugin-wpe

  )

  pkgname=( ${pkgname[*]/gst-plugin-opencv/} ) # FIXME: 'opencv' package FTBS - undefined reference to `cblas_{c,d,s,z}gemm'

- pkgver=1.22.1

- pkgrel=2

+ pkgver=1.22.2

+ _prev_ver=1.22.1 # current version in parabola repos

+ pkgrel=1

  _pkgver_i686=1.20.5 # NOTE: v1.20.5 fails to compile for i686 - after this moves ahead,

  _pkgrel_i686=3.0    #       try to remove the LOCs with comment: # n/a in v1.20.5

  [[ "${CARCH}" == i686 ]] && eval "pkgver=\$_pkgver_${CARCH}" # our different arches do not
@@ -70,6 +74,9 @@ 

    # gst-plugins-base

    wayland-protocols

  

+   # gst-plugins-good

+   # <NONE>

+ 

    # gst-plugins-bad

    opencv vulkan-icd-loader vulkan-headers vulkan-validation-layers shaderc

    libltc bluez-libs libavtp libbs2b bzip2 chromaprint libdca faac faad2
@@ -78,15 +85,30 @@ 

    soundtouch spandsp libsrtp svt-hevc zvbi libnice webrtc-audio-processing

    wildmidi zxing-cpp zbar libxml2 gsm libopenmpt wpewebkit libldac libfreeaptx

    qrencode json-glib libva libxkbcommon-x11

+ 

+   # gst-plugins-ugly

+   # <NONE>

+ 

+   # gst-libav

+   # <NONE>

+ 

+   # gstreamer-vaapi

+   # <NONE>

+ 

+   # gst-python

  )

  makedepends=( ${makedepends[*]/faac/} ) # non-free

  [[ "${CARCH}" == x86_64 ]] || makedepends=( ${makedepends[*]/svt-hevc/} ) # x86_64 only

  makedepends=( ${makedepends[*]/opencv/} ) # FIXME: 'opencv' package FTBS - undefined reference to `cblas_{c,d,s,z}gemm'

  makedepends+=( libdc1394 ) # ERROR: Dependency "libdc1394-2" not found, tried pkgconfig

  makedepends+=( openexr   ) # ERROR: Dependency "openEXR" not found, tried pkgconfig

+ makedepends+=( gstreamer=${_prev_ver}               # 'wpewebkit' -> 'gst-plugins-base-libs' -> 'gstreamer'

+                gst-plugins-base-libs=${_prev_ver} ) # (install these manually from archive)

  checkdepends=(xorg-server-xvfb)

  source=(

    "git+https://gitlab.freedesktop.org/gstreamer/gstreamer.git?signed#tag=$pkgver"

+   # NOTE: docs package is not applicable to 'gst-plugins-bad'

+   # NOTE: arch patches are not applicable to 'gst-plugins-bad'

  )

  b2sums=('SKIP'

  )

@@ -682,8 +682,8 @@ 

  --- a/services/settings/RemoteSettingsClient.sys.mjs

  +++ b/services/settings/RemoteSettingsClient.sys.mjs

  @@ -11,6 +11,7 @@ const lazy = {};

-  

-  ChromeUtils.defineESModuleGetters(lazy, {

+    ClientEnvironmentBase:

+      "resource://gre/modules/components-utils/ClientEnvironment.sys.mjs",

     Database: "resource://services-settings/Database.sys.mjs",

  +  DeferredTask: "resource://gre/modules/DeferredTask.sys.mjs",

     RemoteSettingsWorker:
@@ -791,9 +791,9 @@ 

   

   XPCOMUtils.defineLazyModuleGetters(lazy, {

  +  CanonicalJSON: "resource://gre/modules/CanonicalJSON.jsm",

-    ClientEnvironmentBase:

-      "resource://gre/modules/components-utils/ClientEnvironment.jsm",

     IDBHelpers: "resource://services-settings/IDBHelpers.jsm",

+    KintoHttpClient: "resource://services-common/kinto-http-client.js",

+    ObjectUtils: "resource://gre/modules/ObjectUtils.jsm",

  @@ -1176,7 +1177,10 @@ export class RemoteSettingsClient extends EventEmitter {

           const old = oldById.get(r.id);

           if (old) {

@@ -1172,10 +1172,10 @@ 

     </groupbox>

   

     <vbox id="hasFxaAccount">

- diff --git a/browser/locales/en-US/browser/branding/brandings.ftl b/browser/locales/en-US/browser/branding/brandings.ftl

+ diff --git a/toolkit/locales/en-US/toolkit/branding/brandings.ftl b/toolkit/locales/en-US/toolkit/branding/brandings.ftl

  index a52cde5532..251acad0f8 100644

- --- a/browser/locales/en-US/browser/branding/brandings.ftl

- +++ b/browser/locales/en-US/browser/branding/brandings.ftl

+ --- a/toolkit/locales/en-US/toolkit/branding/brandings.ftl

+ +++ b/toolkit/locales/en-US/toolkit/branding/brandings.ftl

  @@ -15,28 +15,28 @@

   ## https://mozilla-l10n.github.io/styleguides/mozilla_general/#brands-copyright-and-trademark

   

file modified
+11 -10
@@ -70,7 +70,7 @@ 

  

  pkgname=iceweasel

  epoch=1

- pkgver=112.0.2

+ pkgver=113.0

  pkgrel=1

  pkgrel+=.parabola1

  _brandingver=112.0
@@ -152,8 +152,7 @@ 

  source=(

    https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz{,.asc}

    $pkgname.desktop

-   identity-icons-brand.svg

- )

+   identity-icons-brand.svg)

  source=(${source[*]/identity-icons-brand.svg/}) # branding over-ride

  source+=(

    https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-${_brandingrel}.branding.tar.xz{,.sig}
@@ -179,15 +178,15 @@ 

    'BFA8008A8265677063B11BF47171986E4B745536' # Andreas Grapentin

    '3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40' # bill-auger

  )

- sha256sums=('e6a4819a3b82b1ca6c45296e50e6c9ab653306eeb540e50ba8683e339565992e'

+ sha256sums=('7a266044cb9d0c63079b3453507ea0c80a23389f4cbf6a4f6fd15146c6072627'

              'SKIP'

              '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58')

  sha256sums+=('a44dc1e9f2d508203d1cacc2b5bb212c73eb04311da9a036560ff389d7b8e9e6'

               'SKIP'

-              '87780f5c83dd961162c9f95170ff4077aed3a5febe4d5417dad10cbb6e6677c6'  # 9001-FSDG-sync-remote-settings-with-local-dump.patch

+              '63245fa00363d8884aa2b62fbade557cbe72c5cb326303c7d3f7664e0e3e359c'  # 9001-FSDG-sync-remote-settings-with-local-dump.patch

               '1e4d28bd87688334b20cce9213490111e004ea6bcf1654f550da8ebe6bdbf3ef'  # 9002-FSDG-preference-defaults.patch

               '13b701372b6fb35b96a1d58853db64643feb9be061ebc461b41ceca5de8eea62'  # 9003-FSDG-urihandlers.patch

-              'b2b6bc72de4abb7accce7a8d71390f97da11ee19d3f004749ece090c9bd90812'  # 9004-FSDG-misc.patch

+              '44eeea69361ee4b9e4814452ed7e59f1caf2280688316dfdfe3e8b0f5da35798'  # 9004-FSDG-misc.patch

               '00cb44a91b42942f17258ad165810866ff123777b667a5691ea0745ba72f4332'  # process-json-files.py

               '8e113fd2730be3fd11b2a24918dd62e8741513cf4dce9819d8eae358c5411adc') # vendor.js.in

  sha256sums_armv7h=('2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9')
@@ -196,15 +195,16 @@ 

                   'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'

                   '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'

                   'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544')

- b2sums=('44f2fae6c7260a1a6cad24ee31bbd52bc7efad15ac5b9f64f4bceabda7a371f20a490512cee324e53373b9a96fd218572c1478b76e5931383dbef00cc25743aa'

+ b2sums=('1506901352ea84b8016080aa81a0f431b8620c64c0c54364ec56d1878b6413ad965c2d9f39a9bb06d2356c206702283400918b4fb0fa3dac380360f54e60b146'

          'SKIP'

-         'f86353bbba05d8994db34c6abb66094aa61d2c37c8599930dbe9d215413f0f718a1ce55a8f2d07a65074c3947e28fc80d44c925bd9be239a870f82d2a1803635')

+         'f86353bbba05d8994db34c6abb66094aa61d2c37c8599930dbe9d215413f0f718a1ce55a8f2d07a65074c3947e28fc80d44c925bd9be239a870f82d2a1803635'

+         '4ac97b908afb915911212686e41c09137bfa909023dc6fa0808cb6cb12f2dcef9597f0d679c98ad1a6b110d11a92025435cd30dd7b87194428b693c555e2bae7')

  b2sums+=('8472a10e5e27cc82f1467dd6592dfee512cd165e39f23ebbb4c8e76bbf6fd8614a4c1f1d91d42046f773eb711f463ece1aa23e1b1882173290529c28b0f3b60a'

           'SKIP'

-          'f23515dbac37f7368f4038dee58c1206900285ce9a03bed79f858cc4f8d34aea1e2b858f209f63262842411f7c8b0b017836f0b84c708245d007831851e8d073'  # 9001-FSDG-sync-remote-settings-with-local-dump.patch

+          'ba9530d65871a84fdfd121c2ee13ce9f80d65e1f7cd23be7ea9fc232822601c9f7428c15e08e971f0d24791d93290945ecee55de99e6c2b64f8cdc6d2806b564'  # 9001-FSDG-sync-remote-settings-with-local-dump.patch

           'bdb08d681f6f17ae9f8e0bb37e23087a0401d4be26c91ead3eda4654362ad37c3b1cddf69596e2b2278f77e0fd45714b7dbb7a97aca35aae5417e916079d24bf'  # 9002-FSDG-preference-defaults.patch

           '9e4ccfb8850d9f9a5222f5186b35f2ae7986b6c6d435de024b109a6fa01e65a1362664cfb6ea81621387cf33364cc8d3d466fae1bee24ab5fc7e23c4cb17bf2c'  # 9003-FSDG-urihandlers.patch

-          '6908728072a69b7b9ba41b9b952fec90e835bc36ead1e6eb547a5a7985f763aea1709dbba77dc828a9f2e71e2abf2dbd7909115c66cdeb8d0a4942df60c2b978'  # 9004-FSDG-misc.patch

+          '82224f03e7688daebed3b70959206d2aa4758212f2982e9847862617a5a4005be29493fcd44066604f421ebec6b8c94dcf0cfbf03d0c3d670f00d5192d2421d7'  # 9004-FSDG-misc.patch

           '085c4631ec8cfdf5842068d882185c783e976b1fde74167bb71ef4d7db8c70c12844177b17e76f858ba3ce2a402848ac8fc19910dcbefd29887abfaf5faac5e4'  # process-json-files.py

           '5302b6abcfec3155c578e0664e6a0ac921234c5912d74c4a9b0feb3a051ed4ef5f11b93ee37739a3a92fc6693683374f92ac9c3f560780f879c4249d0718157a') # vendor.js.in

  b2sums_armv7h=('6e5980e56343a23bce4fcda58f6abc8f2debca0c278c87b09e53abb17ff15849c26e8df3bbff2388985f8fe5a4e9be9982c602ef7159546f0ae335fca1000a41')
@@ -246,6 +246,7 @@ 

  

  makedepends+=( python-pydantic=1.9.2   ) # dustbin - configure error: pydantic 1.10.4 has requirement typing-extensions>=4.2.0, but you have typing-extensions 3.10.0.0

  makedepends+=( python-zstandard=0.19.0 ) # dustbin - configure error: zstandard<=0.19.0,>=0.11.1: Installed with unexpected version "0.20.0"

+ makedepends+=( python=3.10.10          ) # dustbin - to support 'python-pydantic' above

  

  case "${CARCH}" in

  armv7h)

@@ -19,7 +19,7 @@ 

  

  

  pkgbase=linux-libre-vanilla

- pkgver=6.2.8

+ pkgver=6.3.3

  _minor_ver=$(sed 's|\([0-9]\+\.[0-9]\+\).*|\1|' <<<${pkgver}) # eg: 6.1

  _upstream_minor_ver=${_minor_ver}-gnu                         # eg: 6.1-gnu

  _upstream_ver=${pkgver}-gnu                                   # eg: 6.1.5-gnu
@@ -50,9 +50,9 @@ 

    '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva

    '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.

  )

- sha512sums=('b67c0a622e42a8c31d3e057ce60983ebb415a4b59be2a95400ea8ca99b7594dbcbd51bf8a0e33de87af45be734f5bc081784979bd18e1963b789be2c0f8d1ee3'

+ sha512sums=('6ccdf0621be8e207e37f4920b95df3617f5122fcf7ee61dbf39e5fda8e087c0c203cab5e53b6075e8151ed6c8789e9da2d370ee73f94f5f5a37b57cef3c4d84c'

              'SKIP'

-             'e2d41876a504e2144985a7dde882327bf234f77b529ef350424838a447ce3fe79cfb75729a84420fe84ebd796d39c4b08115f0dc0d7dd107ff69a558f698e335'

+             'd9c841fd622b301a83c919469364fca060b5102c73d8b4c94584cdbf8149bd9d52867b185d8f5cfce6ceca58593c74509833bf88a4be278d4c79760d853f13f2'

              'SKIP'

              '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3'

              'SKIP'
@@ -91,7 +91,6 @@ 

      ../logo_linux_{clut224.ppm,vga16.ppm,mono.pbm}

  

    echo "Setting version..."

-   scripts/setlocalversion --save-scmversion

    echo "-$pkgrel" > localversion.10-pkgrel

    echo "${pkgbase#linux-libre}" > localversion.20-pkgname

  

@@ -1,4 +1,4 @@ 

- From cf30569da906ee631341244693ab1affde38809d Mon Sep 17 00:00:00 2001

+ From 4533007cef1bd1da546752b372234b9bb9548214 Mon Sep 17 00:00:00 2001

  From: Willy Tarreau <w@xxxxxx>

  Date: Sun, 2 Dec 2012 19:59:28 +0100

  Subject: [PATCH 1/7] ARM: atags: add support for Marvell's u-boot
@@ -47,5 +47,5 @@ 

   };

   

  -- 

- 2.35.1

+ 2.37.0

  

@@ -1,7 +1,7 @@ 

- From c6b820ca21a933239b7929851c50aa40f515781d Mon Sep 17 00:00:00 2001

+ From 59f2f4ec4f5168b6c8945d59b9859d8b2321882b Mon Sep 17 00:00:00 2001

  From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>

  Date: Mon, 16 Sep 2019 04:53:20 +0200

- Subject: [PATCH 1/3] ZEN: Add sysctl and CONFIG to disallow unprivileged

+ Subject: [PATCH 1/2] ZEN: Add sysctl and CONFIG to disallow unprivileged

   CLONE_NEWUSER

  

  Our default behavior continues to match the vanilla kernel.
@@ -36,10 +36,10 @@ 

   {

   	return &init_user_ns;

  diff --git a/init/Kconfig b/init/Kconfig

- index 94125d3b6893..9f7139b536f6 100644

+ index c88bb30a8b0b..32ba96d94028 100644

  --- a/init/Kconfig

  +++ b/init/Kconfig

- @@ -1247,6 +1247,22 @@ config USER_NS

+ @@ -1249,6 +1249,22 @@ config USER_NS

   

   	  If unsure, say N.

   
@@ -63,12 +63,12 @@ 

   	bool "PID Namespaces"

   	default y

  diff --git a/kernel/fork.c b/kernel/fork.c

- index 844dfdc8c639..31d41db3f84d 100644

+ index ea332319dffe..349945168239 100644

  --- a/kernel/fork.c

  +++ b/kernel/fork.c

  @@ -98,6 +98,10 @@

-  #include <linux/io_uring.h>

   #include <linux/bpf.h>

+  #include <linux/stackprotector.h>

   

  +#ifdef CONFIG_USER_NS

  +#include <linux/user_namespace.h>
@@ -77,7 +77,7 @@ 

   #include <asm/pgalloc.h>

   #include <linux/uaccess.h>

   #include <asm/mmu_context.h>

- @@ -2011,6 +2015,10 @@ static __latent_entropy struct task_struct *copy_process(

+ @@ -2032,6 +2036,10 @@ static __latent_entropy struct task_struct *copy_process(

   	if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))

   		return ERR_PTR(-EINVAL);

   
@@ -88,7 +88,7 @@ 

   	/*

   	 * Thread groups must share signals as well, and detached threads

   	 * can only be started up within the thread group.

- @@ -3171,6 +3179,12 @@ int ksys_unshare(unsigned long unshare_flags)

+ @@ -3182,6 +3190,12 @@ int ksys_unshare(unsigned long unshare_flags)

   	if (unshare_flags & CLONE_NEWNS)

   		unshare_flags |= CLONE_FS;

   
@@ -102,7 +102,7 @@ 

   	if (err)

   		goto bad_unshare_out;

  diff --git a/kernel/sysctl.c b/kernel/sysctl.c

- index c6d9dec11b74..9a4514ad481b 100644

+ index 1c240d2c99bc..2971581a27e2 100644

  --- a/kernel/sysctl.c

  +++ b/kernel/sysctl.c

  @@ -81,6 +81,9 @@
@@ -115,7 +115,7 @@ 

   

   /* shared constants to be used in various sysctls */

   const int sysctl_vals[] = { 0, 1, 2, 3, 4, 100, 200, 1000, 3000, INT_MAX, 65535, -1 };

- @@ -1659,6 +1662,15 @@ static struct ctl_table kern_table[] = {

+ @@ -1645,6 +1648,15 @@ static struct ctl_table kern_table[] = {

   		.mode		= 0644,

   		.proc_handler	= proc_dointvec,

   	},
@@ -132,7 +132,7 @@ 

   	{

   		.procname	= "tainted",

  diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c

- index 54211dbd516c..16ca0c151629 100644

+ index 1d8e47bed3f1..fec01d016a35 100644

  --- a/kernel/user_namespace.c

  +++ b/kernel/user_namespace.c

  @@ -22,6 +22,13 @@
@@ -150,5 +150,5 @@ 

   static DEFINE_MUTEX(userns_state_mutex);

   

  -- 

- 2.39.0

+ 2.40.1

  

@@ -1,4 +1,4 @@ 

- From 9f2269dc32ec1f583bba94432ca17dcef3778677 Mon Sep 17 00:00:00 2001

+ From b2f96ec9b408c8bbec437c3d3b54c0b748fca85a Mon Sep 17 00:00:00 2001

  From: Willy Tarreau <w@xxxxxx>

  Date: Sun, 2 Dec 2012 19:56:58 +0100

  Subject: [PATCH 2/7] ARM: atags/fdt: retrieve MAC addresses from Marvell boot
@@ -34,5 +34,5 @@ 

   	}

   

  -- 

- 2.35.1

+ 2.37.0

  

@@ -1,48 +0,0 @@ 

- From 99c3052ddb60947d4590052bd68b4893967537eb Mon Sep 17 00:00:00 2001

- From: Jonathan Corbet <corbet@lwn.net>

- Date: Wed, 4 Jan 2023 13:45:35 -0700

- Subject: [PATCH 2/3] docs: Fix the docs build with Sphinx 6.0

- MIME-Version: 1.0

- Content-Type: text/plain; charset=UTF-8

- Content-Transfer-Encoding: 8bit

- 

- Sphinx 6.0 removed the execfile_() function, which we use as part of the

- configuration process.  They *did* warn us...  Just open-code the

- functionality as is done in Sphinx itself.

- 

- Tested (using SPHINX_CONF, since this code is only executed with an

- alternative config file) on various Sphinx versions from 2.5 through 6.0.

- 

- Reported-by: Martin Liška <mliska@suse.cz>

- Signed-off-by: Jonathan Corbet <corbet@lwn.net>

- ---

-  Documentation/sphinx/load_config.py | 6 ++++--

-  1 file changed, 4 insertions(+), 2 deletions(-)

- 

- diff --git a/Documentation/sphinx/load_config.py b/Documentation/sphinx/load_config.py

- index eeb394b39e2c..8b416bfd75ac 100644

- --- a/Documentation/sphinx/load_config.py

- +++ b/Documentation/sphinx/load_config.py

- @@ -3,7 +3,7 @@

-  

-  import os

-  import sys

- -from sphinx.util.pycompat import execfile_

- +from sphinx.util.osutil import fs_encoding

-  

-  # ------------------------------------------------------------------------------

-  def loadConfig(namespace):

- @@ -48,7 +48,9 @@ def loadConfig(namespace):

-              sys.stdout.write("load additional sphinx-config: %s\n" % config_file)

-              config = namespace.copy()

-              config['__file__'] = config_file

- -            execfile_(config_file, config)

- +            with open(config_file, 'rb') as f:

- +                code = compile(f.read(), fs_encoding, 'exec')

- +                exec(code, config)

-              del config['__file__']

-              namespace.update(config)

-          else:

- -- 

- 2.39.0

- 

@@ -0,0 +1,50 @@ 

+ From 2fd9916a465e3b62452ac4346def013c3d8698a4 Mon Sep 17 00:00:00 2001

+ From: Fangzhi Zuo <jerry.zuo@amd.com>

+ Date: Wed, 17 May 2023 19:37:13 +0800

+ Subject: [PATCH 2/2] drm/amd/display: Have Payload Properly Created After

+  Resume

+ 

+ At drm suspend sequence, MST dc_sink is removed. When commit cached

+ MST stream back in drm resume sequence, the MST stream payload is not

+ properly created and added into the payload table. After resume, topology

+ change is reprobed by removing existing streams first. That leads to

+ no payload is found in the existing payload table as below error

+ "[drm] ERROR No payload for [MST PORT:] found in mst state"

+ 

+ 1. In encoder .atomic_check routine, remove check existance of dc_sink

+ 2. Bypass MST by checking existence of MST root port. dc_link_type cannot

+ differentiate MST port before topology is rediscovered.

+ 

+ Reviewed-by: Wayne Lin <wayne.lin@amd.com>

+ Acked-by: Tom Chung <chiahsuan.chung@amd.com>

+ Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com>

+ (cherry picked from https://patchwork.freedesktop.org/patch/537553/)

+ ---

+  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++--

+  1 file changed, 2 insertions(+), 2 deletions(-)

+ 

+ diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

+ index f54d670ab3ab..0695c7c3d489 100644

+ --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

+ +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

+ @@ -2813,7 +2813,7 @@ static int dm_resume(void *handle)

+  		 * this is the case when traversing through already created

+  		 * MST connectors, should be skipped

+  		 */

+ -		if (aconnector->dc_link->type == dc_connection_mst_branch)

+ +		if (aconnector && aconnector->mst_root)

+  			continue;

+  

+  		mutex_lock(&aconnector->hpd_lock);

+ @@ -6717,7 +6717,7 @@ static int dm_encoder_helper_atomic_check(struct drm_encoder *encoder,

+  	int clock, bpp = 0;

+  	bool is_y420 = false;

+  

+ -	if (!aconnector->mst_output_port || !aconnector->dc_sink)

+ +	if (!aconnector->mst_output_port)

+  		return 0;

+  

+  	mst_port = aconnector->mst_output_port;

+ -- 

+ 2.40.1

+ 

@@ -1,2478 +0,0 @@ 

- From 7c4fed4d2afd27d7acb8835f8e79f49c99c03cdf Mon Sep 17 00:00:00 2001

- From: Wayne Lin <Wayne.Lin@amd.com>

- Date: Thu, 12 Jan 2023 16:50:44 +0800

- Subject: [PATCH 3/3] Revert "drm/display/dp_mst: Move all payload info into

-  the atomic state"

- MIME-Version: 1.0

- Content-Type: text/plain; charset=UTF-8

- Content-Transfer-Encoding: 8bit

- 

- This reverts commit 4d07b0bc403403438d9cf88450506240c5faf92f.

- 

- [Why]

- Changes cause regression on amdgpu mst.

- E.g.

- In fill_dc_mst_payload_table_from_drm(), amdgpu expects to add/remove payload

- one by one and call fill_dc_mst_payload_table_from_drm() to update the HW

- maintained payload table. But previous change tries to go through all the

- payloads in mst_state and update amdpug hw maintained table in once everytime

- driver only tries to add/remove a specific payload stream only. The newly

- design idea conflicts with the implementation in amdgpu nowadays.

- 

- [How]

- Revert this patch first. After addressing all regression problems caused by

- this previous patch, will add it back and adjust it.

- 

- Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>

- Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2171

- Cc: stable@vger.kernel.org # 6.1

- Cc: Lyude Paul <lyude@redhat.com>

- Cc: Harry Wentland <harry.wentland@amd.com>

- Cc: Mario Limonciello <mario.limonciello@amd.com>

- Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>

- Cc: Ben Skeggs <bskeggs@redhat.com>

- Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

- Cc: Fangzhi Zuo <Jerry.Zuo@amd.com>

- ---

-  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  53 +-

-  .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 104 ++-

-  .../display/amdgpu_dm/amdgpu_dm_mst_types.c   |  87 ++-

-  .../amd/display/include/link_service_types.h  |   3 -

-  drivers/gpu/drm/display/drm_dp_mst_topology.c | 724 ++++++++++++------

-  drivers/gpu/drm/i915/display/intel_dp_mst.c   |  64 +-

-  drivers/gpu/drm/i915/display/intel_hdcp.c     |  24 +-

-  drivers/gpu/drm/nouveau/dispnv50/disp.c       | 169 ++--

-  include/drm/display/drm_dp_mst_helper.h       | 178 +++--

-  9 files changed, 876 insertions(+), 530 deletions(-)

- 

- diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

- index dacad8b85963..40defd664b49 100644

- --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

- +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

- @@ -6460,7 +6460,6 @@ static int dm_encoder_helper_atomic_check(struct drm_encoder *encoder,

-  	const struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode;

-  	struct drm_dp_mst_topology_mgr *mst_mgr;

-  	struct drm_dp_mst_port *mst_port;

- -	struct drm_dp_mst_topology_state *mst_state;

-  	enum dc_color_depth color_depth;

-  	int clock, bpp = 0;

-  	bool is_y420 = false;

- @@ -6474,13 +6473,6 @@ static int dm_encoder_helper_atomic_check(struct drm_encoder *encoder,

-  	if (!crtc_state->connectors_changed && !crtc_state->mode_changed)

-  		return 0;

-  

- -	mst_state = drm_atomic_get_mst_topology_state(state, mst_mgr);

- -	if (IS_ERR(mst_state))

- -		return PTR_ERR(mst_state);

- -

- -	if (!mst_state->pbn_div)

- -		mst_state->pbn_div = dm_mst_get_pbn_divider(aconnector->mst_port->dc_link);

- -

-  	if (!state->duplicated) {

-  		int max_bpc = conn_state->max_requested_bpc;

-  		is_y420 = drm_mode_is_420_also(&connector->display_info, adjusted_mode) &&

- @@ -6492,10 +6484,11 @@ static int dm_encoder_helper_atomic_check(struct drm_encoder *encoder,

-  		clock = adjusted_mode->clock;

-  		dm_new_connector_state->pbn = drm_dp_calc_pbn_mode(clock, bpp, false);

-  	}

- -

- -	dm_new_connector_state->vcpi_slots =

- -		drm_dp_atomic_find_time_slots(state, mst_mgr, mst_port,

- -					      dm_new_connector_state->pbn);

- +	dm_new_connector_state->vcpi_slots = drm_dp_atomic_find_time_slots(state,

- +									   mst_mgr,

- +									   mst_port,

- +									   dm_new_connector_state->pbn,

- +									   dm_mst_get_pbn_divider(aconnector->dc_link));

-  	if (dm_new_connector_state->vcpi_slots < 0) {

-  		DRM_DEBUG_ATOMIC("failed finding vcpi slots: %d\n", (int)dm_new_connector_state->vcpi_slots);

-  		return dm_new_connector_state->vcpi_slots;

- @@ -6566,14 +6559,17 @@ static int dm_update_mst_vcpi_slots_for_dsc(struct drm_atomic_state *state,

-  			dm_conn_state->vcpi_slots = slot_num;

-  

-  			ret = drm_dp_mst_atomic_enable_dsc(state, aconnector->port,

- -							   dm_conn_state->pbn, false);

- +							   dm_conn_state->pbn, 0, false);

-  			if (ret < 0)

-  				return ret;

-  

-  			continue;

-  		}

-  

- -		vcpi = drm_dp_mst_atomic_enable_dsc(state, aconnector->port, pbn, true);

- +		vcpi = drm_dp_mst_atomic_enable_dsc(state,

- +						    aconnector->port,

- +						    pbn, pbn_div,

- +						    true);

-  		if (vcpi < 0)

-  			return vcpi;

-  

- @@ -9407,6 +9403,8 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,

-  	struct dm_crtc_state *dm_old_crtc_state, *dm_new_crtc_state;

-  #if defined(CONFIG_DRM_AMD_DC_DCN)

-  	struct dsc_mst_fairness_vars vars[MAX_PIPES];

- +	struct drm_dp_mst_topology_state *mst_state;

- +	struct drm_dp_mst_topology_mgr *mgr;

-  #endif

-  

-  	trace_amdgpu_dm_atomic_check_begin(state);

- @@ -9654,6 +9652,33 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,

-  		lock_and_validation_needed = true;

-  	}

-  

- +#if defined(CONFIG_DRM_AMD_DC_DCN)

- +	/* set the slot info for each mst_state based on the link encoding format */

- +	for_each_new_mst_mgr_in_state(state, mgr, mst_state, i) {

- +		struct amdgpu_dm_connector *aconnector;

- +		struct drm_connector *connector;

- +		struct drm_connector_list_iter iter;

- +		u8 link_coding_cap;

- +

- +		if (!mgr->mst_state )

- +			continue;

- +

- +		drm_connector_list_iter_begin(dev, &iter);

- +		drm_for_each_connector_iter(connector, &iter) {

- +			int id = connector->index;

- +

- +			if (id == mst_state->mgr->conn_base_id) {

- +				aconnector = to_amdgpu_dm_connector(connector);

- +				link_coding_cap = dc_link_dp_mst_decide_link_encoding_format(aconnector->dc_link);

- +				drm_dp_mst_update_slots(mst_state, link_coding_cap);

- +

- +				break;

- +			}

- +		}

- +		drm_connector_list_iter_end(&iter);

- +

- +	}

- +#endif

-  	/**

-  	 * Streams and planes are reset when there are changes that affect

-  	 * bandwidth. Anything that affects bandwidth needs to go through

- diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c

- index f72c013d3a5b..c8f9d10fde17 100644

- --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c

- +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c

- @@ -27,7 +27,6 @@

-  #include <linux/acpi.h>

-  #include <linux/i2c.h>

-  

- -#include <drm/drm_atomic.h>

-  #include <drm/drm_probe_helper.h>

-  #include <drm/amdgpu_drm.h>

-  #include <drm/drm_edid.h>

- @@ -120,27 +119,40 @@ enum dc_edid_status dm_helpers_parse_edid_caps(

-  }

-  

-  static void

- -fill_dc_mst_payload_table_from_drm(struct drm_dp_mst_topology_state *mst_state,

- -				   struct amdgpu_dm_connector *aconnector,

- -				   struct dc_dp_mst_stream_allocation_table *table)

- +fill_dc_mst_payload_table_from_drm(struct amdgpu_dm_connector *aconnector,

- +				   struct dc_dp_mst_stream_allocation_table *proposed_table)

-  {

- -	struct dc_dp_mst_stream_allocation_table new_table = { 0 };

- -	struct dc_dp_mst_stream_allocation *sa;

- -	struct drm_dp_mst_atomic_payload *payload;

- -

- -	/* Fill payload info*/

- -	list_for_each_entry(payload, &mst_state->payloads, next) {

- -		if (payload->delete)

- -			continue;

- -

- -		sa = &new_table.stream_allocations[new_table.stream_count];

- -		sa->slot_count = payload->time_slots;

- -		sa->vcp_id = payload->vcpi;

- -		new_table.stream_count++;

- +	int i;

- +	struct drm_dp_mst_topology_mgr *mst_mgr =

- +			&aconnector->mst_port->mst_mgr;

- +

- +	mutex_lock(&mst_mgr->payload_lock);

- +

- +	proposed_table->stream_count = 0;

- +

- +	/* number of active streams */

- +	for (i = 0; i < mst_mgr->max_payloads; i++) {

- +		if (mst_mgr->payloads[i].num_slots == 0)

- +			break; /* end of vcp_id table */

- +

- +		ASSERT(mst_mgr->payloads[i].payload_state !=

- +				DP_PAYLOAD_DELETE_LOCAL);

- +

- +		if (mst_mgr->payloads[i].payload_state == DP_PAYLOAD_LOCAL ||

- +			mst_mgr->payloads[i].payload_state ==

- +					DP_PAYLOAD_REMOTE) {

- +

- +			struct dc_dp_mst_stream_allocation *sa =

- +					&proposed_table->stream_allocations[

- +						proposed_table->stream_count];

- +

- +			sa->slot_count = mst_mgr->payloads[i].num_slots;

- +			sa->vcp_id = mst_mgr->proposed_vcpis[i]->vcpi;

- +			proposed_table->stream_count++;

- +		}

-  	}

-  

- -	/* Overwrite the old table */

- -	*table = new_table;

- +	mutex_unlock(&mst_mgr->payload_lock);

-  }

-  

-  void dm_helpers_dp_update_branch_info(

- @@ -158,9 +170,11 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(

-  		bool enable)

-  {

-  	struct amdgpu_dm_connector *aconnector;

- -	struct drm_dp_mst_topology_state *mst_state;

- -	struct drm_dp_mst_atomic_payload *payload;

- +	struct dm_connector_state *dm_conn_state;

-  	struct drm_dp_mst_topology_mgr *mst_mgr;

- +	struct drm_dp_mst_port *mst_port;

- +	bool ret;

- +	u8 link_coding_cap = DP_8b_10b_ENCODING;

-  

-  	aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context;

-  	/* Accessing the connector state is required for vcpi_slots allocation

- @@ -171,21 +185,40 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(

-  	if (!aconnector || !aconnector->mst_port)

-  		return false;

-  

- +	dm_conn_state = to_dm_connector_state(aconnector->base.state);

- +

-  	mst_mgr = &aconnector->mst_port->mst_mgr;

- -	mst_state = to_drm_dp_mst_topology_state(mst_mgr->base.state);

- +

- +	if (!mst_mgr->mst_state)

- +		return false;

- +

- +	mst_port = aconnector->port;

- +

- +#if defined(CONFIG_DRM_AMD_DC_DCN)

- +	link_coding_cap = dc_link_dp_mst_decide_link_encoding_format(aconnector->dc_link);

- +#endif

- +

- +	if (enable) {

- +

- +		ret = drm_dp_mst_allocate_vcpi(mst_mgr, mst_port,

- +					       dm_conn_state->pbn,

- +					       dm_conn_state->vcpi_slots);

- +		if (!ret)

- +			return false;

- +

- +	} else {

- +		drm_dp_mst_reset_vcpi_slots(mst_mgr, mst_port);

- +	}

-  

-  	/* It's OK for this to fail */

- -	payload = drm_atomic_get_mst_payload_state(mst_state, aconnector->port);

- -	if (enable)

- -		drm_dp_add_payload_part1(mst_mgr, mst_state, payload);

- -	else

- -		drm_dp_remove_payload(mst_mgr, mst_state, payload);

- +	drm_dp_update_payload_part1(mst_mgr, (link_coding_cap == DP_CAP_ANSI_128B132B) ? 0:1);

-  

-  	/* mst_mgr->->payloads are VC payload notify MST branch using DPCD or

-  	 * AUX message. The sequence is slot 1-63 allocated sequence for each

-  	 * stream. AMD ASIC stream slot allocation should follow the same

-  	 * sequence. copy DRM MST allocation to dc */

- -	fill_dc_mst_payload_table_from_drm(mst_state, aconnector, proposed_table);

- +

- +	fill_dc_mst_payload_table_from_drm(aconnector, proposed_table);

-  

-  	return true;

-  }

- @@ -242,9 +275,8 @@ bool dm_helpers_dp_mst_send_payload_allocation(

-  		bool enable)

-  {

-  	struct amdgpu_dm_connector *aconnector;

- -	struct drm_dp_mst_topology_state *mst_state;

-  	struct drm_dp_mst_topology_mgr *mst_mgr;

- -	struct drm_dp_mst_atomic_payload *payload;

- +	struct drm_dp_mst_port *mst_port;

-  	enum mst_progress_status set_flag = MST_ALLOCATE_NEW_PAYLOAD;

-  	enum mst_progress_status clr_flag = MST_CLEAR_ALLOCATED_PAYLOAD;

-  

- @@ -253,16 +285,19 @@ bool dm_helpers_dp_mst_send_payload_allocation(

-  	if (!aconnector || !aconnector->mst_port)

-  		return false;

-  

- +	mst_port = aconnector->port;

- +

-  	mst_mgr = &aconnector->mst_port->mst_mgr;

- -	mst_state = to_drm_dp_mst_topology_state(mst_mgr->base.state);

-  

- -	payload = drm_atomic_get_mst_payload_state(mst_state, aconnector->port);

- +	if (!mst_mgr->mst_state)

- +		return false;

- +

-  	if (!enable) {

-  		set_flag = MST_CLEAR_ALLOCATED_PAYLOAD;

-  		clr_flag = MST_ALLOCATE_NEW_PAYLOAD;

-  	}

-  

- -	if (enable && drm_dp_add_payload_part2(mst_mgr, mst_state->base.state, payload)) {

- +	if (drm_dp_update_payload_part2(mst_mgr)) {

-  		amdgpu_dm_set_mst_status(&aconnector->mst_status,

-  			set_flag, false);

-  	} else {

- @@ -272,6 +307,9 @@ bool dm_helpers_dp_mst_send_payload_allocation(

-  			clr_flag, false);

-  	}

-  

- +	if (!enable)

- +		drm_dp_mst_deallocate_vcpi(mst_mgr, mst_port);

- +

-  	return true;

-  }

-  

- diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c

- index 6483ba266893..d57f1528a295 100644

- --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c

- +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c

- @@ -598,8 +598,15 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,

-  

-  	dc_link_dp_get_max_link_enc_cap(aconnector->dc_link, &max_link_enc_cap);

-  	aconnector->mst_mgr.cbs = &dm_mst_cbs;

- -	drm_dp_mst_topology_mgr_init(&aconnector->mst_mgr, adev_to_drm(dm->adev),

- -				     &aconnector->dm_dp_aux.aux, 16, 4, aconnector->connector_id);

- +	drm_dp_mst_topology_mgr_init(

- +		&aconnector->mst_mgr,

- +		adev_to_drm(dm->adev),

- +		&aconnector->dm_dp_aux.aux,

- +		16,

- +		4,

- +		max_link_enc_cap.lane_count,

- +		drm_dp_bw_code_to_link_rate(max_link_enc_cap.link_rate),

- +		aconnector->connector_id);

-  

-  	drm_connector_attach_dp_subconnector_property(&aconnector->base);

-  }

- @@ -703,13 +710,12 @@ static int bpp_x16_from_pbn(struct dsc_mst_fairness_params param, int pbn)

-  	return dsc_config.bits_per_pixel;

-  }

-  

- -static int increase_dsc_bpp(struct drm_atomic_state *state,

- -			    struct drm_dp_mst_topology_state *mst_state,

- -			    struct dc_link *dc_link,

- -			    struct dsc_mst_fairness_params *params,

- -			    struct dsc_mst_fairness_vars *vars,

- -			    int count,

- -			    int k)

- +static bool increase_dsc_bpp(struct drm_atomic_state *state,

- +			     struct dc_link *dc_link,

- +			     struct dsc_mst_fairness_params *params,

- +			     struct dsc_mst_fairness_vars *vars,

- +			     int count,

- +			     int k)

-  {

-  	int i;

-  	bool bpp_increased[MAX_PIPES];

- @@ -717,10 +723,13 @@ static int increase_dsc_bpp(struct drm_atomic_state *state,

-  	int min_initial_slack;

-  	int next_index;

-  	int remaining_to_increase = 0;

- +	int pbn_per_timeslot;

-  	int link_timeslots_used;

-  	int fair_pbn_alloc;

-  	int ret = 0;

-  

- +	pbn_per_timeslot = dm_mst_get_pbn_divider(dc_link);

- +

-  	for (i = 0; i < count; i++) {

-  		if (vars[i + k].dsc_enabled) {

-  			initial_slack[i] =

- @@ -751,17 +760,18 @@ static int increase_dsc_bpp(struct drm_atomic_state *state,

-  		link_timeslots_used = 0;

-  

-  		for (i = 0; i < count; i++)

- -			link_timeslots_used += DIV_ROUND_UP(vars[i + k].pbn, mst_state->pbn_div);

- +			link_timeslots_used += DIV_ROUND_UP(vars[i + k].pbn, pbn_per_timeslot);

-  

- -		fair_pbn_alloc =

- -			(63 - link_timeslots_used) / remaining_to_increase * mst_state->pbn_div;

- +		fair_pbn_alloc = (63 - link_timeslots_used) / remaining_to_increase * pbn_per_timeslot;

-  

-  		if (initial_slack[next_index] > fair_pbn_alloc) {

-  			vars[next_index].pbn += fair_pbn_alloc;

- +

-  			ret = drm_dp_atomic_find_time_slots(state,

-  							    params[next_index].port->mgr,

-  							    params[next_index].port,

- -							    vars[next_index].pbn);

- +							    vars[next_index].pbn,

- +							    pbn_per_timeslot);

-  			if (ret < 0)

-  				return ret;

-  

- @@ -773,7 +783,8 @@ static int increase_dsc_bpp(struct drm_atomic_state *state,

-  				ret = drm_dp_atomic_find_time_slots(state,

-  								    params[next_index].port->mgr,

-  								    params[next_index].port,

- -								    vars[next_index].pbn);

- +								    vars[next_index].pbn,

- +								    pbn_per_timeslot);

-  				if (ret < 0)

-  					return ret;

-  			}

- @@ -782,7 +793,8 @@ static int increase_dsc_bpp(struct drm_atomic_state *state,

-  			ret = drm_dp_atomic_find_time_slots(state,

-  							    params[next_index].port->mgr,

-  							    params[next_index].port,

- -							    vars[next_index].pbn);

- +							    vars[next_index].pbn,

- +							    pbn_per_timeslot);

-  			if (ret < 0)

-  				return ret;

-  

- @@ -794,7 +806,8 @@ static int increase_dsc_bpp(struct drm_atomic_state *state,

-  				ret = drm_dp_atomic_find_time_slots(state,

-  								    params[next_index].port->mgr,

-  								    params[next_index].port,

- -								    vars[next_index].pbn);

- +								    vars[next_index].pbn,

- +								    pbn_per_timeslot);

-  				if (ret < 0)

-  					return ret;

-  			}

- @@ -850,10 +863,12 @@ static int try_disable_dsc(struct drm_atomic_state *state,

-  			break;

-  

-  		vars[next_index].pbn = kbps_to_peak_pbn(params[next_index].bw_range.stream_kbps);

- +

-  		ret = drm_dp_atomic_find_time_slots(state,

-  						    params[next_index].port->mgr,

-  						    params[next_index].port,

- -						    vars[next_index].pbn);

- +						    vars[next_index].pbn,

- +						    dm_mst_get_pbn_divider(dc_link));

-  		if (ret < 0)

-  			return ret;

-  

- @@ -863,10 +878,12 @@ static int try_disable_dsc(struct drm_atomic_state *state,

-  			vars[next_index].bpp_x16 = 0;

-  		} else {

-  			vars[next_index].pbn = kbps_to_peak_pbn(params[next_index].bw_range.max_kbps);

- +

-  			ret = drm_dp_atomic_find_time_slots(state,

-  							    params[next_index].port->mgr,

-  							    params[next_index].port,

- -							    vars[next_index].pbn);

- +							    vars[next_index].pbn,

- +							    dm_mst_get_pbn_divider(dc_link));

-  			if (ret < 0)

-  				return ret;

-  		}

- @@ -877,31 +894,21 @@ static int try_disable_dsc(struct drm_atomic_state *state,

-  	return 0;

-  }

-  

- -static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,

- -					    struct dc_state *dc_state,

- -					    struct dc_link *dc_link,

- -					    struct dsc_mst_fairness_vars *vars,

- -					    struct drm_dp_mst_topology_mgr *mgr,

- -					    int *link_vars_start_index)

- +static bool compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,

- +					     struct dc_state *dc_state,

- +					     struct dc_link *dc_link,

- +					     struct dsc_mst_fairness_vars *vars,

- +					     int *link_vars_start_index)

-  {

- +	int i, k, ret;

-  	struct dc_stream_state *stream;

-  	struct dsc_mst_fairness_params params[MAX_PIPES];

-  	struct amdgpu_dm_connector *aconnector;

- -	struct drm_dp_mst_topology_state *mst_state = drm_atomic_get_mst_topology_state(state, mgr);

-  	int count = 0;

- -	int i, k, ret;

-  	bool debugfs_overwrite = false;

-  

-  	memset(params, 0, sizeof(params));

-  

- -	if (IS_ERR(mst_state))

- -		return PTR_ERR(mst_state);

- -

- -	mst_state->pbn_div = dm_mst_get_pbn_divider(dc_link);

- -#if defined(CONFIG_DRM_AMD_DC_DCN)

- -	drm_dp_mst_update_slots(mst_state, dc_link_dp_mst_decide_link_encoding_format(dc_link));

- -#endif

- -

-  	/* Set up params */

-  	for (i = 0; i < dc_state->stream_count; i++) {

-  		struct dc_dsc_policy dsc_policy = {0};

- @@ -961,7 +968,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,

-  		vars[i + k].dsc_enabled = false;

-  		vars[i + k].bpp_x16 = 0;

-  		ret = drm_dp_atomic_find_time_slots(state, params[i].port->mgr, params[i].port,

- -						    vars[i + k].pbn);

- +						    vars[i + k].pbn, dm_mst_get_pbn_divider(dc_link));

-  		if (ret < 0)

-  			return ret;

-  	}

- @@ -980,7 +987,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,

-  			vars[i + k].dsc_enabled = true;

-  			vars[i + k].bpp_x16 = params[i].bw_range.min_target_bpp_x16;

-  			ret = drm_dp_atomic_find_time_slots(state, params[i].port->mgr,

- -							    params[i].port, vars[i + k].pbn);

- +							    params[i].port, vars[i + k].pbn, dm_mst_get_pbn_divider(dc_link));

-  			if (ret < 0)

-  				return ret;

-  		} else {

- @@ -988,7 +995,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,

-  			vars[i + k].dsc_enabled = false;

-  			vars[i + k].bpp_x16 = 0;

-  			ret = drm_dp_atomic_find_time_slots(state, params[i].port->mgr,

- -							    params[i].port, vars[i + k].pbn);

- +							    params[i].port, vars[i + k].pbn, dm_mst_get_pbn_divider(dc_link));

-  			if (ret < 0)

-  				return ret;

-  		}

- @@ -998,7 +1005,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,

-  		return ret;

-  

-  	/* Optimize degree of compression */

- -	ret = increase_dsc_bpp(state, mst_state, dc_link, params, vars, count, k);

- +	ret = increase_dsc_bpp(state, dc_link, params, vars, count, k);

-  	if (ret < 0)

-  		return ret;

-  

- @@ -1148,7 +1155,7 @@ int compute_mst_dsc_configs_for_state(struct drm_atomic_state *state,

-  			continue;

-  

-  		mst_mgr = aconnector->port->mgr;

- -		ret = compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars, mst_mgr,

- +		ret = compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars,

-  						       &link_vars_start_index);

-  		if (ret != 0)

-  			return ret;

- @@ -1206,7 +1213,7 @@ static int pre_compute_mst_dsc_configs_for_state(struct drm_atomic_state *state,

-  			continue;

-  

-  		mst_mgr = aconnector->port->mgr;

- -		ret = compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars, mst_mgr,

- +		ret = compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars,

-  						       &link_vars_start_index);

-  		if (ret != 0)

-  			return ret;

- diff --git a/drivers/gpu/drm/amd/display/include/link_service_types.h b/drivers/gpu/drm/amd/display/include/link_service_types.h

- index d1e91d31d151..0889c2a86733 100644

- --- a/drivers/gpu/drm/amd/display/include/link_service_types.h

- +++ b/drivers/gpu/drm/amd/display/include/link_service_types.h

- @@ -252,9 +252,6 @@ union dpcd_training_lane_set {

-   * _ONLY_ be filled out from DM and then passed to DC, do NOT use these for _any_ kind of atomic

-   * state calculations in DM, or you will break something.

-   */

- -

- -struct drm_dp_mst_port;

- -

-  /* DP MST stream allocation (payload bandwidth number) */

-  struct dc_dp_mst_stream_allocation {

-  	uint8_t vcp_id;

- diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c

- index 51a46689cda7..95ff57d20216 100644

- --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c

- +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c

- @@ -68,7 +68,8 @@ static bool dump_dp_payload_table(struct drm_dp_mst_topology_mgr *mgr,

-  static void drm_dp_mst_topology_put_port(struct drm_dp_mst_port *port);

-  

-  static int drm_dp_dpcd_write_payload(struct drm_dp_mst_topology_mgr *mgr,

- -				     int id, u8 start_slot, u8 num_slots);

- +				     int id,

- +				     struct drm_dp_payload *payload);

-  

-  static int drm_dp_send_dpcd_read(struct drm_dp_mst_topology_mgr *mgr,

-  				 struct drm_dp_mst_port *port,

- @@ -1234,6 +1235,57 @@ build_query_stream_enc_status(struct drm_dp_sideband_msg_tx *msg, u8 stream_id,

-  	return 0;

-  }

-  

- +static int drm_dp_mst_assign_payload_id(struct drm_dp_mst_topology_mgr *mgr,

- +					struct drm_dp_vcpi *vcpi)

- +{

- +	int ret, vcpi_ret;

- +

- +	mutex_lock(&mgr->payload_lock);

- +	ret = find_first_zero_bit(&mgr->payload_mask, mgr->max_payloads + 1);

- +	if (ret > mgr->max_payloads) {

- +		ret = -EINVAL;

- +		drm_dbg_kms(mgr->dev, "out of payload ids %d\n", ret);

- +		goto out_unlock;

- +	}

- +

- +	vcpi_ret = find_first_zero_bit(&mgr->vcpi_mask, mgr->max_payloads + 1);

- +	if (vcpi_ret > mgr->max_payloads) {

- +		ret = -EINVAL;

- +		drm_dbg_kms(mgr->dev, "out of vcpi ids %d\n", ret);

- +		goto out_unlock;

- +	}

- +

- +	set_bit(ret, &mgr->payload_mask);

- +	set_bit(vcpi_ret, &mgr->vcpi_mask);

- +	vcpi->vcpi = vcpi_ret + 1;

- +	mgr->proposed_vcpis[ret - 1] = vcpi;

- +out_unlock:

- +	mutex_unlock(&mgr->payload_lock);

- +	return ret;

- +}

- +

- +static void drm_dp_mst_put_payload_id(struct drm_dp_mst_topology_mgr *mgr,

- +				      int vcpi)

- +{

- +	int i;

- +

- +	if (vcpi == 0)

- +		return;

- +

- +	mutex_lock(&mgr->payload_lock);

- +	drm_dbg_kms(mgr->dev, "putting payload %d\n", vcpi);

- +	clear_bit(vcpi - 1, &mgr->vcpi_mask);

- +

- +	for (i = 0; i < mgr->max_payloads; i++) {

- +		if (mgr->proposed_vcpis[i] &&

- +		    mgr->proposed_vcpis[i]->vcpi == vcpi) {

- +			mgr->proposed_vcpis[i] = NULL;

- +			clear_bit(i + 1, &mgr->payload_mask);

- +		}

- +	}

- +	mutex_unlock(&mgr->payload_lock);

- +}

- +

-  static bool check_txmsg_state(struct drm_dp_mst_topology_mgr *mgr,

-  			      struct drm_dp_sideband_msg_tx *txmsg)

-  {

- @@ -1686,7 +1738,7 @@ drm_dp_mst_dump_port_topology_history(struct drm_dp_mst_port *port) {}

-  #define save_port_topology_ref(port, type)

-  #endif

-  

- -struct drm_dp_mst_atomic_payload *

- +static struct drm_dp_mst_atomic_payload *

-  drm_atomic_get_mst_payload_state(struct drm_dp_mst_topology_state *state,

-  				 struct drm_dp_mst_port *port)

-  {

- @@ -1698,7 +1750,6 @@ drm_atomic_get_mst_payload_state(struct drm_dp_mst_topology_state *state,

-  

-  	return NULL;

-  }

- -EXPORT_SYMBOL(drm_atomic_get_mst_payload_state);

-  

-  static void drm_dp_destroy_mst_branch_device(struct kref *kref)

-  {

- @@ -3201,8 +3252,6 @@ int drm_dp_send_query_stream_enc_status(struct drm_dp_mst_topology_mgr *mgr,

-  		struct drm_dp_mst_port *port,

-  		struct drm_dp_query_stream_enc_status_ack_reply *status)

-  {

- -	struct drm_dp_mst_topology_state *state;

- -	struct drm_dp_mst_atomic_payload *payload;

-  	struct drm_dp_sideband_msg_tx *txmsg;

-  	u8 nonce[7];

-  	int ret;

- @@ -3219,10 +3268,6 @@ int drm_dp_send_query_stream_enc_status(struct drm_dp_mst_topology_mgr *mgr,

-  

-  	get_random_bytes(nonce, sizeof(nonce));

-  

- -	drm_modeset_lock(&mgr->base.lock, NULL);

- -	state = to_drm_dp_mst_topology_state(mgr->base.state);

- -	payload = drm_atomic_get_mst_payload_state(state, port);

- -

-  	/*

-  	 * "Source device targets the QUERY_STREAM_ENCRYPTION_STATUS message

-  	 *  transaction at the MST Branch device directly connected to the

- @@ -3230,7 +3275,7 @@ int drm_dp_send_query_stream_enc_status(struct drm_dp_mst_topology_mgr *mgr,

-  	 */

-  	txmsg->dst = mgr->mst_primary;

-  

- -	build_query_stream_enc_status(txmsg, payload->vcpi, nonce);

- +	build_query_stream_enc_status(txmsg, port->vcpi.vcpi, nonce);

-  

-  	drm_dp_queue_down_tx(mgr, txmsg);

-  

- @@ -3247,7 +3292,6 @@ int drm_dp_send_query_stream_enc_status(struct drm_dp_mst_topology_mgr *mgr,

-  	memcpy(status, &txmsg->reply.u.enc_status, sizeof(*status));

-  

-  out:

- -	drm_modeset_unlock(&mgr->base.lock);

-  	drm_dp_mst_topology_put_port(port);

-  out_get_port:

-  	kfree(txmsg);

- @@ -3256,162 +3300,238 @@ int drm_dp_send_query_stream_enc_status(struct drm_dp_mst_topology_mgr *mgr,

-  EXPORT_SYMBOL(drm_dp_send_query_stream_enc_status);

-  

-  static int drm_dp_create_payload_step1(struct drm_dp_mst_topology_mgr *mgr,

- -				       struct drm_dp_mst_atomic_payload *payload)

- +				       int id,

- +				       struct drm_dp_payload *payload)

-  {

- -	return drm_dp_dpcd_write_payload(mgr, payload->vcpi, payload->vc_start_slot,

- -					 payload->time_slots);

- +	int ret;

- +

- +	ret = drm_dp_dpcd_write_payload(mgr, id, payload);

- +	if (ret < 0) {

- +		payload->payload_state = 0;

- +		return ret;

- +	}

- +	payload->payload_state = DP_PAYLOAD_LOCAL;

- +	return 0;

-  }

-  

-  static int drm_dp_create_payload_step2(struct drm_dp_mst_topology_mgr *mgr,

- -				       struct drm_dp_mst_atomic_payload *payload)

- +				       struct drm_dp_mst_port *port,

- +				       int id,

- +				       struct drm_dp_payload *payload)

-  {

-  	int ret;

- -	struct drm_dp_mst_port *port = drm_dp_mst_topology_get_port_validated(mgr, payload->port);

- -

- -	if (!port)

- -		return -EIO;

-  

- -	ret = drm_dp_payload_send_msg(mgr, port, payload->vcpi, payload->pbn);

- -	drm_dp_mst_topology_put_port(port);

- +	ret = drm_dp_payload_send_msg(mgr, port, id, port->vcpi.pbn);

- +	if (ret < 0)

- +		return ret;

- +	payload->payload_state = DP_PAYLOAD_REMOTE;

-  	return ret;

-  }

-  

-  static int drm_dp_destroy_payload_step1(struct drm_dp_mst_topology_mgr *mgr,

- -					struct drm_dp_mst_topology_state *mst_state,

- -					struct drm_dp_mst_atomic_payload *payload)

- +					struct drm_dp_mst_port *port,

- +					int id,

- +					struct drm_dp_payload *payload)

-  {

-  	drm_dbg_kms(mgr->dev, "\n");

- -

-  	/* it's okay for these to fail */

- -	drm_dp_payload_send_msg(mgr, payload->port, payload->vcpi, 0);

- -	drm_dp_dpcd_write_payload(mgr, payload->vcpi, payload->vc_start_slot, 0);

- +	if (port) {

- +		drm_dp_payload_send_msg(mgr, port, id, 0);

- +	}

-  

- +	drm_dp_dpcd_write_payload(mgr, id, payload);

- +	payload->payload_state = DP_PAYLOAD_DELETE_LOCAL;

- +	return 0;

- +}

- +

- +static int drm_dp_destroy_payload_step2(struct drm_dp_mst_topology_mgr *mgr,

- +					int id,

- +					struct drm_dp_payload *payload)

- +{

- +	payload->payload_state = 0;

-  	return 0;

-  }

-  

-  /**

- - * drm_dp_add_payload_part1() - Execute payload update part 1

- - * @mgr: Manager to use.

- - * @mst_state: The MST atomic state

- - * @payload: The payload to write

- + * drm_dp_update_payload_part1() - Execute payload update part 1

- + * @mgr: manager to use.

- + * @start_slot: this is the cur slot

- + *

- + * NOTE: start_slot is a temporary workaround for non-atomic drivers,

- + * this will be removed when non-atomic mst helpers are moved out of the helper

-   *

- - * Determines the starting time slot for the given payload, and programs the VCPI for this payload

- - * into hardware. After calling this, the driver should generate ACT and payload packets.

- + * This iterates over all proposed virtual channels, and tries to

- + * allocate space in the link for them. For 0->slots transitions,

- + * this step just writes the VCPI to the MST device. For slots->0

- + * transitions, this writes the updated VCPIs and removes the

- + * remote VC payloads.

-   *

- - * Returns: 0 on success, error code on failure. In the event that this fails,

- - * @payload.vc_start_slot will also be set to -1.

- + * after calling this the driver should generate ACT and payload

- + * packets.

-   */

- -int drm_dp_add_payload_part1(struct drm_dp_mst_topology_mgr *mgr,

- -			     struct drm_dp_mst_topology_state *mst_state,

- -			     struct drm_dp_mst_atomic_payload *payload)

- +int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr, int start_slot)

-  {

- +	struct drm_dp_payload req_payload;

-  	struct drm_dp_mst_port *port;

- -	int ret;

- +	int i, j;

- +	int cur_slots = start_slot;

- +	bool skip;

-  

- -	port = drm_dp_mst_topology_get_port_validated(mgr, payload->port);

- -	if (!port)

- -		return 0;

- +	mutex_lock(&mgr->payload_lock);

- +	for (i = 0; i < mgr->max_payloads; i++) {

- +		struct drm_dp_vcpi *vcpi = mgr->proposed_vcpis[i];

- +		struct drm_dp_payload *payload = &mgr->payloads[i];

- +		bool put_port = false;

-  

- -	if (mgr->payload_count == 0)

- -		mgr->next_start_slot = mst_state->start_slot;

- +		/* solve the current payloads - compare to the hw ones

- +		   - update the hw view */

- +		req_payload.start_slot = cur_slots;

- +		if (vcpi) {

- +			port = container_of(vcpi, struct drm_dp_mst_port,

- +					    vcpi);

-  

- -	payload->vc_start_slot = mgr->next_start_slot;

- +			mutex_lock(&mgr->lock);

- +			skip = !drm_dp_mst_port_downstream_of_branch(port, mgr->mst_primary);

- +			mutex_unlock(&mgr->lock);

-  

- -	ret = drm_dp_create_payload_step1(mgr, payload);

- -	drm_dp_mst_topology_put_port(port);

- -	if (ret < 0) {

- -		drm_warn(mgr->dev, "Failed to create MST payload for port %p: %d\n",

- -			 payload->port, ret);

- -		payload->vc_start_slot = -1;

- -		return ret;

- -	}

- +			if (skip) {

- +				drm_dbg_kms(mgr->dev,