 Je vais parler d'une fréquence commune, et surtout de comment utiliser la fréquence. Je suis du RECLAMENT, j'ai travaillé avec l'ingénieur d'AmbédéLinux dans 3 élections depuis 2010. J'ai travaillé en développement d'AmbédéLinux et aussi en training d'AmbédéLinux. Je contribue au soutien de Canel pour l'armada 317 et l'armada XP. Il y a des stocks de Marvell. J'ai aussi un commentateur de l'MVUBU, un sub-architecture. L'MVUBU a des stocks de Marvell, l'AmbédéLinux et l'Unit d'AmbédéLinux. Et je suis en France, près de Lyon. Nous allons voir ce que la fréquence commune est. La vue globale de l'armada. Nous allons voir l'implémentation, mais nous ne allons pas aller au niveau de l'implémentation, plus dans l'interview de comment ça fonctionne. Parce que la cause de ce truc est prête à vous montrer comment utiliser ça. La principale partie va être de comment s'assurer que vous ayez vos clocs, et de comment s'assurer que vous ayez vos clocs. Et la dernière partie va être de comment vous utilisez ces clocs avec vos clocs, mais cette partie n'a pas changé depuis plusieurs années. Alors, une petite reminder sur ce que sont les clocs. La plupart des chips électroniques sont clocs, et les clocs de l'armada ou de l'armada, sont organisés dans un tricot. Donc le contrôle de ce cloc est utile pour deux maines raisons, pour le management de l'armada, parce que la clocs de l'armada est le paramètre de la consomption dynamique, et l'autre raison est d'avoir un référence de temps. Par exemple, d'accomptation d'alimentation, ou quelque chose comme ça. Alors, le framework de clocs a été disponible depuis plusieurs années. Quand je fais des recherches, c'est de l'histoire de l'armada, il offre un simple API, cloc get, cloc enable, etc. et c'est utilisé par le deviseur, et nous allons voir dans la dernière partie, comment vous l'utilisez, parce que cette partie n'a pas changé. Donc c'est bien, mais il y a plusieurs drogues et limitations. Chaque machine s'adresse à sa propre implementation. C'est-à-dire qu'il n'a pas eu le courage d'assurer, et qu'il n'a pas travaillé sur la plage de plage de l'armada. C'est pourquoi il y a le framework de clocs de l'armada. Il a commencé en 2010 par Jeremy Kerr, qui a introduit la première clocs de l'armada. Et ensuite, il a été tendu à l'année dernière, au début de l'année dernière, par la première clocs de l'armada, qui a été soumise par Mike Turquette, qui est le médecin de ce système. Donc il implique l'application de l'application de clocs. Il vous donne aussi un basic cloc driver, et il est possible d'impliquer votre propre cloc driver. Il s'adresse également à déclarer ce cloc et les données qu'il y a dans la devise 3. C'est plus que le préféré de l'armada, c'est maintenant la manière mondiale, si vous voulez ajouter un nouveau cloc. Mais il y a encore des stocks, qui utilisent encore la station statiquement dans le code, mais qui sont convertis en un nouveau cloc. Il y a aussi une représentation de l'armada, donc c'est utile pour voir que tout est bien, et il est impliqué dans le cloc driver, où il s'agit d'une pièce spécifique pour chaque plateforme, maintenant tout est en train de bouger dans cette direction. C'est un overview de l'armada de la devise 3. C'est donc l'armada de la devise 3. Elle est utilisée par un cloc driver, donc elle s'appelle l'Ipi, qui était là depuis les années. Elle s'est obtenue par la devise 3. Les clocs, la récession, et aussi là-bas, vous avez la relation entre le cloc et le driver de la devise, et vous devez pouvoir downloader l'armada de la devise, si vous voulez le driver. Et puis vous avez le cloc driver, donc vous avez quelques clocs qui sont offerts par le framework, et puis vous pouvez ajouter votre propre cloc. Donc nous allons voir chaque pièce spécifique. La première interface du framework de la devise 3. Donc il y a une définition commune de la devise 3. Et la implementation commune est déclare dans le cloc.h. Et chaque fois que le driver utilise la réparation, il utilise la réparation de clocs. Quand vous allez ajouter votre propre cloc, c'est un construct que vous allez remplir. Donc c'est le framework de la devise 3. Et la partie spécifique de l'armada, c'est là que vous réagissez votre propre réparation. Et c'est... La idée c'est que vous devez réétenir ceci pour chaque nouveau cloc hardware, mais plus pour chaque nouveau type de cloc hardware. Nous allons voir que comme nous avons un type de cloc base, vous verrez une pattern commune, donc vous pouvez réutiliser l'existence de cloc base pour votre nouveau cloc. Ces deux clocs sont ajoutés par le structure cloc hardware. Et celui-ci est défini dans votre route de l'armada. Vous êtes supposé de déclare et de pointer au cloc global. Donc, nous allons avoir un overview du framework de cloc.h. Il s'agit d'assurer que la cloc 3 s'occupe de la prévention de la concurrence en utilisant un lock global pour les clocs disables. Il s'agit d'assurer la propagation de l'opération par la cloc 3. Parce que, vous vous souvenez, nous avons un cloc 3. Donc, si vous voulez changer la valeur de votre parent, la valeur est propagée par les enfants de ce cloc. Et ainsi. Et il y a aussi des notifications qui peuvent s'occuper d'un cloc. Donc, c'est utilisé par le structure cloc. Vous avez un overview de l'office, vous avez le nom, l'opération, celui-ci est une partie spécifique. Et tout celui-ci est plus relative à comment décrire la cloc 3. L'implementation est expérimentée pour le driver dans deux files, cloc.c et clocdev.c et vous avez toutes les fonctions classiques que l'on voit au début, préparer, évaluer, etc. Mais nous allons voir plus tard. Et bien sûr, vous avez aussi la version managée et aussi toute la fonction relative de la cloc 3. Par exemple, si vous voulez juste regarder un cloc spécifique connaissant le nom de la cloc 3, vous avez des fonctions pour ça. Et puis, le cours de cette présentation est sur comment évaluer votre propre cloc, le cloc driver. Ils réalisent les dot-ops et dot-adra pointer, donc les ops sont pour l'opération ou le callback que vous ressentez et le cloc 6.1 est relativement à votre cloc. Il s'abstracte des détails du cloc 3 et vous n'avez pas d'implémentation de l'opération. Il n'y a que quelques fondamentaux et ça dépend de votre cloc. Et le cloc est créé à l'aide de un registre cloc. Donc, c'est la liste de toutes les opérations donc on voit plus ou moins les mêmes opérations qui sont exposées à l'opération. Et ce qui s'occupe, quand vous collez un cloc, par exemple, cloc-onébal, à la fin, il sera appelé de votre cloc-onébal. Vous avez juste un registre. Donc, on va voir toutes les opérations. Comme je l'ai dit, vous n'avez pas de registre toutes les opérations. Donc, selon quel type de cloc vous avez, vous avez des opérations qui sont monétaires. Donc, pour un cloc gate, vous pouvez poser l'onébal et l'onébal fonction pour un cloc où vous pouvez changer ce rate, vous avez besoin de la récalculation et de cet rate, et l'un des deux, et nous allons voir exactement ce qu'ils font. Si vous avez un cloc avec juste des parents donc vous ne votre fonction n'est pas valide, mais si vous impliquez un multiplexage, vous devez impliquer et si vous impliquez le cloc vous n'avez pas besoin et bien sûr vous pouvez avoir un cloc qui peut changer le rate, l'onébal et le multiplexage donc vous pouvez avoir toute cette fonction de ce que votre cloc est capable de faire. Donc, la première partie c'est de comment faire le cloc disponible et il y a ce API qui est installé dans deux parties le préparer et le préparer et l'onébalisé. Donc, le préparer est de préparer le cloc avant d'actuellement utiliser. Quand vous voulez installer un cloc, pour exemple, un cloc qui est accessé sur Icecracy ou quelque chose comme ça vous devez installer quelque chose et ça peut prendre du temps et dans cette fonction vous pouvez dormir, vous pouvez dormir et bien sûr, si vous pouvez dormir cette fonction ne peut pas être appelée en contexte atomique et puis vous avez l'onébalisé donc celui-ci c'est juste la petite partie qui est actuellement engagée le cloc, quand il a été préparé et ça peut être appelé directement du contexte atomique donc ça veut dire que vous ne pouvez pas dormir dans cette fonction et donc ce qui s'est passé selon ce que votre hardware peut faire vous pouvez juste impliquer un ou un autre et peut-être que vous avez noté plus tard ici préparé non, je n'ai pas essayé mais il y a maintenant une fonction qui est appelée préparer le cloc et qui est appelée dans le cas où vous n'avez pas à être très vite vous voulez juste préparer et pouvoir utiliser votre cloc puis cette hausse hausse de l'API vous avez aussi l'onébalisé qui est également un API qui est une partie de l'onébalisé et celui-ci plutôt que de checker parce que souvent si vous voulez checker que le cloc est onébalisé c'est juste une manière de contrôler mais ici c'est quand vous voulez que vous devez créer le hardware d'exemple durant le bout de votre système peut-être que le cloc est onébalisé donc à ce point votre kernel n'est pas aware de ça donc en utilisant cette fonction vous allez vérifier exactement l'état de votre hardware et pas le framework puis vous avez une fonction relative à l'élément donc la hausse hausse va retourner à la hausse hausse qui est actuellement supportée par le cloc puis vous avez déterminé la hausse et vous pouvez faire le même mais c'est une question nouvelle ça vous permet de choisir les parents pour obtenir la hausse hausse c'est le cas vous avez une hausse avec deux parents et selon les parents de votre hausse vous pouvez avoir une hausse de la hausse la hausse la hausse change la hausse parce que ce que vous avez d'habitude de la hausse hausse vous avez juste dit que vous voulez cette hausse et puis ce que le framework fait c'est d'abord appeler cette fonction pour trouver quelle est la hausse hausse de la hausse hausse et à la fin elle va s'occuper de la hausse donc dans cette fonction que vous avez changé votre hausse et recalculer la hausse avec cette fonction vous utilisez votre hardware pour récalculer la hausse de votre cloc maintenant vous avez une fonction qui est utilisée par un multiplexer donc c'est une cloc de laquelle vous pouvez sélectionner une cloc ou une autre et les trois donc votre parent va, cette fois, recalculer de la hausse qui est la cloc de votre cloc parce que vous utilisez seulement quand les clocs sont statiquement installés à la fin du framework et puis quand un dévice appeller il ne va pas recalculer la hausse il n'a pas d'informations du framework de cloc et cette parent a changé la source d'input de ce cloc et il y a une nouvelle recalculation récemment utilisée donc elles ne sont pas utilisées mais elles ont été utilisées pour des besoins spécifiques donc c'est préparé pour la même fonction qui est disponible mais cette fois vous voulez juste voir si la fonction était préparée mais au niveau hardware et selon ce que vous avez fait sur votre fonction sur un cloc driver vous pouvez remplacer votre ease enable par ease prepared disable unused ce qui est quand vous avez déclaré tout le cloc de votre système à la fin de la initialisation du framework de cloc il va scanner tout le cloc pour voir si ce cloc est utilisé ou pas par un cloc driver et si ce cloc n'est pas utilisé sans que vous ayez un état spécifique ce cloc sera disable par défaut mais parfois vous voulez un fonction disable mais sans l'utilisation de la fonction globale parce que vous ne voulez pas changer le compteur donc vous avez la fonction disable unused qui est la fonction disabled qui est appelée seulement quand le framework est disponible de votre cloc car c'est utilisé donc c'est une fonction qui est principalement appelée pendant la initialisation et vous avez la même fonction avec prépare cloc donc c'était tout le basic operation que vous pouvez imprimer mais la plupart du temps vous pouvez juste relayer les 5 clocs basés donc vous avez les clocs fixés c'est un cloc qui est toujours terminé et toujours la même valeur par exemple, juste un oscillateur qui est plug quelque part donc vous ne pouvez pas le changer c'est un constant cloc alors vous avez le cloc donc c'est un cloc qui a la même valeur et vous pouvez seulement obtenir ce cloc mais ce cloc en soi n'a pas une valeur et si vous voulez exposer un cloc qui a une valeur et qui peut être obtenue et obtenue vous devez composer le premier cloc vous avez les clocs mixés donc celui-ci, salut pour choisir le parent et c'est juste de mixer donc vous ne pouvez pas le changer vous pouvez changer la valeur vous avez le cloc fixé celui-ci toujours divise et multiplie la valeur du cloc parent et vous ne pouvez pas le changer et vous avez le cloc divider qui peut être sélecté sur différents clocs donc cela signifie que la plupart de les clocs vous pouvez juste utiliser ce simple cloc et cela sera la plupart des cas en réalité la plupart du temps vous avez un cloc qui peut serrer la valeur donc c'est pourquoi pour ce cas vous pouvez utiliser le composite cloc qui est un autre type de cloc et la purpose de ce cloc c'est juste de pouvoir émerger ce cloc et créer votre propre cloc pour leur faire sans avoir à fonction parce que avant cette composition ce que les gens font c'est juste une fonction de la base cloc et cela aussi avec cela, nous évoquons la déplication du cloc qui était l'une des proposes de ce cloc donc maintenant vous pouvez faire 3 bases clocs mucs, rate et gate et pour chaque cloc vous vous prenez l'endul et l'apparition et vous les ressortez et ensuite vous vous registrez le composite cloc donc vous n'avez pas à ressortir toutes les structures par exemple si vous voulez juste un cloc vous pouvez rate et gate puis vous pouvez juste évoquer et c'est tout ici un exemple dans le kernel pour les 3 3.12 il n'y a que 1 cloc qui utilise le cloc donc moi j'ai retiré quelque part pour s'améliorer mais bien sûr il y a des tests mais je vais juste retirer donc vous déclarez tout donc ici, ce que ce cloc peut faire c'est un cloc avec l'association et le rate donc d'abord vous avez votre etul vous allocatez donc ici je vais juste mettre 1 mais vous allocatez le rate fixe et aussi le gate structure puis ici de votre dévice vous avez l'information que vous avez besoin donc ici nous avons le cloc et nous avons dans le registre quel bit vous avez besoin d'avoir le cloc donc avec cette propriété vous ressentez puis vous ressentez votre opération et votre registre, votre cloc et c'est tout et avec ça vous pouvez réutiliser un code existant sans avoir de copies et passages donc vous avez écrit tout le code sous votre cloc, maintenant vous avez aussi pour définir comment vous allez obtenir votre cloc ceci est fait avec la dévice donc maintenant c'est la manuterie pour déclare un cloc et pour obtenir sa ressource ce que nous avons à faire c'est qu'on passera la dévice puis avec le data de la dévice nous installons le cloc donc la ressource quel registre qu'on a besoin mais aussi de la propriété et ce que nous avons à faire c'est de déclare le cloc compatible et associer une fonction en utilisant ce micro donc maintenant on a une manière générale pour le faire on a un exemple donc ici il y a quelques exemples donc nous avons juste un cloc donc nous avons un cloc avec le nom ici nous utilisons un cloc fixe donc dans ce cloc fixe nous devons utiliser ce cloc donc tous tous ces clocs sont documentés et la direction de documentation de la dévice puis nous provider la frequency de cloc et si vous voulez l'utiliser donc ici c'est un cloc qui utilise ce cloc nous avons juste une référence ici et donc la référence est faite c'est tout d'un point de vue du code comment cela fonctionne l'association entre le nom compatible et la fonction setup est faite avec le cloc donc le nom c'est la fonction qui va être appelée chaque fois dans la dévice vous aurez ce nom compatible puis le kernel s'appelle cette fonction et passe le nom de cette fonction et donc c'est très simple nous avons le nom et si nous n'avons pas le cloc mais nous avons besoin de cette frequency de cloc et nous avons installé le fixe rate avec la frequency que nous avons et tout ça et ce nom est juste un nom qui utilise pour ce micro, ce qu'elle fait est un table cloc et donc nous avons besoin de un nom pour ça donc c'est juste un nom et nous avons encore besoin si vous voulez utiliser le framework durant le bout de votre sort ou de votre bord vous devez appeler le cloc OF et cela va passer tout le cloc que vous avez registré avec le cloc OF déclare donc maintenant vous devez le mettre quelque part durant le bout de votre système mais il y a des réflexes pour le faire et donc dès que vous faites le bout un système nom il sera appelé le cloc OF maintenant un exemple plus avancé ici ce n'est pas un cloc basique c'est notre propre cloc donc ce qui change est le cloc cela signifie que vous avez seulement une partie nous avons deux parties et nous allons voir comment donc c'est le nom que nous avons registré pour le nom et puis le cloc OF signifie que avec ce cloc nous devons passer ce genre d'argument donc ici cela signifie que le cloc qui va aller au complexe de clocs va utiliser le premier cloc de la famille de clocs donc avec ce type vous pouvez enregistrer pas un cloc mais juste vous pouvez les refermer par numéro par exemple 10 clocs de référence ici donc en ce cas ce que nous fais nous avons un struct qui sera registré avec notre propre fonction et comme nous avons vu avec un cloc fixé le string compatible ici et la fonction qui sera appelée chaque fois nous verrons le cloc et ce struct sera passé à notre fonction et ce que cela fait un peu plus complexe donc nous avons un ressource de le cloc je vous vous montre quelque part donc ici nous essayons de registrer un cloc donc c'est pourquoi vous avez ce type de fonction et nous registrons par exemple ce que nous avons c'est différents types de clocs donc le premier cloc qui sera appelé TCLK sera un cloc fixé et toutes ces informations sont directement formées par le hardware donc nous avons le cloc fixé mais nous n'avons pas besoin de l'utilisation de l'utilisation du cloc le rate nous connaissons le hardware donc nous pouvons directement trouver le correct nombre par nous-mêmes et donc c'est aussi souvent l'idée de ce que vous ne pouvez pas trouver par vous-même dynamiquement donc ce nous nous avons vu comment registrer un cloc mais quand le cloc est registré nous avons aussi besoin d'exposer ce cloc pour pouvoir utiliser l'autre device ce qui est fait avec le cloc ad provider donc nous passons le code associé avec le nom de le cloc puis nous avons un callback qui sera appelé quand vous faites un cloc puis il sera appelé et puis il sera appelé un exemple simple c'est le même exemple mais ici du côté d'exposer le cloc donc c'est très simple le clic simple c'est juste que vous ajoutez le code quand vous registrez le cloc donc c'est quand vous faites le setup donc cette fonction est appelée quand vous registrez le cloc et puis vous exposez le cloc donc vous exposez le cloc avec celui-ci et vous passez au système la fonction qui sera utilisée pour décoller le code associé à votre cloc et pour plus complexe donc la même fonction que nous utilisons pour l'arrêt donc en cas de l'arrêt de cloc nous nous allons utiliser le paramètre que nous recevons donc il sera encodé dans cette variable donc ce que nous faisons ici nous avons juste passé l'arrêt et puis nous utilisons les clocs spécs nous recevons le index et puis nous allons faire le correct cloc donc comment c'est fait en cas de clocs spécs c'est nous avons registré donc parce que cette fonction est très globale pour plusieurs clocs donc selon les clocs vous pouvez registrer 4 ou 5 ou 6 clocs donc tout ça c'est des données qui dépendent du sort et puis donc vous avez ces données nous ressentons ces données et ce dont nous avons besoin c'est juste l'arrêt de chaque cloc et c'est le moyen de donner juste un nom de clocs et puis un paramètre de savoir et puis comment les clocs spécs d'un point de vue d'un point de vue donc ils vont utiliser les mêmes fonctions qui étaient utilisées depuis plusieurs années donc généralement vous avez une référence du cloc avec le cloc GET le lien entre et la dévise est faite par des données plateformes mais c'est plus de la législation ou par la dévastation donc c'est la méthode préférée vous avez aussi la version de mainage et ici le cloc GET c'est juste d'avoir une référence sur un cloc donc le cloc GET vous donne une référence et puis généralement vous l'activez par coller, clocs enabled ou les deux et puis vous manipulez le cloc en utilisant le cloc API donc si vous voulez obtenir la date, obtenir la date et quelque chose comme ça donc un exemple short pour l'exemple pour l'internet le driver il a besoin d'un cloc donc c'est un cloc gâtable c'est un cloc second gâtable de l'AMADA XP ou un dog c'est directement je pense que dans ce cas c'est juste un cloc fixé donc vous avez une bonne référence donc la référence est faite et vous avez juste de ici vous vous utilisez les partages de mainage mais c'est juste un cloc gâtable et vous automatiquement utilisez le 1er cloc gâtable sur le device 3 donc vous avez cette référence, généralement vous utilisez cette référence avec l'instance de votre driver et puis quand vous l'avez vous preparez pour l'utiliser et pour l'exemple pour l'internet le driver à ce point nous avons besoin d'utiliser le rate du cloc donc nous devons juste faire un cloc gâtable et l'utiliser donc en conclusion cette référence est maintenant une efficace qui déclare et utilise le cloc l'amount de code pour soutenir le nouveau cloc est très réduit et dans un cas vous avez peut-être utiliser le 1er cloc c'est que vous pouvez utiliser le 1er cloc donc ça peut être très réduit c'est plus et plus utilisé donc la plupart des stocks armes n'ont pas terminé leur migration mais il y a aussi d'autres architectures qui commencent à utiliser nous avons trouvé des mips ou même des x86 qui commencent à utiliser le 1er cloc et nous avons une feature récente qui a été réduite les effets de débug ont été improvisés vous avez le style de Jason mais aussi une vue humaine du cloc avec un fruit plus ou moins la référence a été réduite ce qui est besoin quand vous voulez faire le DVFS et comme je vous le montre le composite cloc qui aide à réutiliser l'opération et réduire l'application du duplicate donc vous avez une question ? est-ce que c'est mieux de utiliser le composite cloc ou de utiliser l'application d'un cloc ? vous voulez savoir si c'est mieux d'utiliser le composite cloc ou d'utiliser l'application de l'application c'est dépendant de votre hardware à la fin si par le point de vue de votre hardware il y a deux clocs différents donc c'est mieux de le montrer aussi dans l'application d'avoir deux différents types de clocs mais si à la fin vous avez seulement un registre pour contrôler votre cloc je pense que c'est mieux d'utiliser le composite cloc et juste d'exposer un cloc par le point de vue d'utiliser le composite cloc d'avoir une représentation de votre bord si c'est possible de utiliser le composite cloc ou de l'application d'utiliser un cloc d'application si vous pouvez combiner le composite cloc et le composite cloc à la fin le composite cloc est juste d'exposer un nouveau type de cloc c'est juste que on a la possibilité d'utiliser une opération basique mais la différence entre le composite cloc et d'autres clocs c'est que vous avez la option de l'utiliser mais puis par le point de vue de l'application c'est juste un autre cloc comme vous pouvez aussi présenter votre propre cloc donc vous pouvez si vous avez le composite cloc vous pouvez l'utiliser avec d'autres types de clocs oui ? si vous partez de l'application si vous partez de l'application si vous partez de l'application si vous partez de l'application mais la différence de l'application d'enlever dans le plus bas c'est si haut que ça ne fait pas le sens pour les mêmes choses oui, ces informations ne sont pas partie de le composite cloc donc on ne peut pas l'utiliser mais je pense que c'est possible d'improver le composite cloc et d'adresser à ces informations currently it's more for for the point of view of the power management you directly call the enable, disable and something like that and there is not this kind of information yet but I think it can be an improvement if there is some need it's okay ? thank you